Üzerinde çalıştığım ürünlerin giderek daha fazlası iki parçadan oluşuyor. Birincisi insanların kullandığı bölüm: Next.js arayüzü, Node.js API’si, kimlik doğrulama ve ödemeler. Diğeri model işleri: çıkarım, embedding’ler, ses ve veri işleme. İlk bölüm TypeScript, ikincisi Python konuşuyor. İki dile hâkim olmak dil koleksiyonu yapmak değil; çoğu AI ürününün bozulduğu aradaki bağlantıyı sahiplenmek demek.
İyi haber şu ki iki ekosistem sanılandan daha fazla ortak noktaya sahip. Zod’un Python tarafında Pydantic’i; tsc’nin mypy ve pyright’ı; ESLint ile Prettier’ın Ruff’ı; npm ve pnpm’in uv ve Poetry’si var. Express ve NestJS’nin karşılığı olan FastAPI, tipli modellerden OpenAPI şemasını da kendiliğinden üretiyor. Her iki tarafta aynı disiplini uygularım: katı tipler, tartışmasız bir biçimlendirici, sabitlenmiş bağımlılıklar ve CI testleri.
İki taraf arasındaki sözleşme sistemin en önemli dosyasıdır. Bir kez tanımlayıp geri kalanını üretirim: FastAPI’deki Pydantic modelleri OpenAPI şemasını oluşturur; TypeScript istemcisi ve tipleri buradan üretilir. Python’da bir alanı yeniden adlandırırsanız, kullanıcı undefined görmeden Next.js derlemesi hata verir. Asenkron işlerde sözleşme, iki uçta da şeması bulunan bir görev payload’ıdır; her tarafın farklı yorumladığı serbest biçimli JSON değildir.
Sorumluluk ayrımı nettir. Kimlik, izinler, para ve UI TypeScript’e aittir. Python yalnızca modelden sorumludur: işi alır, ağır işlemi —StyleTTS2 ile ses üretimi, embedding paketi ya da belge ayrıştırma— yapar ve sonucu döndürür. Python servisi tarayıcıyla konuşmaz, kimin ne yapabileceğine karar vermez. Hızlı çağrılar HTTP’den, yavaş olanlar kuyruktan geçer; her iki tarafta timeout, yeniden deneme ve idempotency bulunur.
Farklılıklar da önemlidir; onlara saygı göstermek işin parçasıdır. Python’da notebook ile prototip yapılır, ancak notebook üretim ortamı değildir: çalışan kod testleri olan bir modüle taşınır. Python eşzamanlılığı Node’un event loop’u değildir; CPU’yu yoğun kullanan çıkarım async istek işleyicisinde değil, worker süreçlerinde veya GPU servisinde çalışmalıdır. Dağıtım birimleri de farklıdır: hafif bir Node imajı ile CUDA ve model ağırlıklarını içeren Python imajı. Bu nedenle ölçekleme, önbellekleme ve maliyetleri de farklı olur.
Müşteri açısından iki tarafta tek mühendis olmasının değeri açıktır: “AI kişisi” ile “web kişisi” arasında çeviri katmanı gerekmez ve tarafların birbirini suçladığı bir API oluşmaz. Notebook’ta çalışan bir modeliniz, ancak henüz onu kullanamayan bir web uygulamanız varsa ikisini de gönderin. Aralarına koyacağım sözleşmeyi ve üretime çıkaracağım ilk sürümü önereyim.
Bir sonraki ürüne kalacak birini verin.
Başlamaya hazır mısınız? Bana yazın — hemen başlayabilir ve kalabilirim. İki haftalık devir değil, uzun vadeli iş birliği. Projenizi, gereksinimleri ve ilerlemenin en iyi yolunu konuşalım.