Men ishlaydigan mahsulotlarning tobora ko‘pi ikki qismdan iborat. Birinchisi — odamlar foydalanadigan qism: Next.js interfeysi, Node.js API’i, autentifikatsiya va to‘lovlar. Ikkinchisi — modellar bilan ishlash: inferens, embeddinglar, audio va ma’lumotlarni qayta ishlash. Birinchi qism TypeScript’da, ikkinchisi Python’da ishlaydi. Ikkalasini bilish tillarni yig‘ish emas, ular orasidagi tutashuvni boshqarishdir; AI mahsulotlarining ko‘pi aynan shu joyda buziladi.
Yaxshi tomoni shundaki, ikki ekotizim o‘ylagandan ko‘ra ko‘proq o‘xshash. Zod’ga Pydantic, tsc’ga mypy va pyright, ESLint hamda Prettier’ga Ruff, npm va pnpm’ga uv va Poetry mos keladi. Express va NestJS’ning muqobili FastAPI bo‘lib, tiplangan modellardan OpenAPI’ni ham avtomatik yaratadi. Har ikki tomonda bir xil intizomni qo‘llayman: qat’iy turlar, bahssiz formatlagich, versiyasi mahkamlangan bog‘liqliklar va CI testlari.
Ular orasidagi shartnoma tizimdagi eng muhim fayldir. Uni bir marta belgilab, qolganini yarataman: FastAPI’dagi Pydantic modellari OpenAPI sxemasini hosil qiladi, undan TypeScript mijoz kodi va turlari generatsiya qilinadi. Python’da maydon nomini o‘zgartiring — foydalanuvchi undefined’ni ko‘rishidan oldin Next.js build’i yiqiladi. Asinxron ish uchun shartnoma har ikki uchida sxemasi bor topshiriq payload’idir; tomonlar turlicha talqin qiladigan erkin JSON emas.
Javobgarliklar qat’iy ajratiladi. Shaxs, ruxsatlar, pul va UI TypeScript zimmasida. Python faqat modelga javob beradi: vazifani qabul qiladi, og‘ir ishni — StyleTTS2 ovozi, embeddinglar to‘plami yoki hujjat tahlilini — bajaradi va natijani qaytaradi. Python servisi brauzer bilan gaplashmaydi va kimga nima qilish mumkinligini hal etmaydi. Tez chaqiruvlar HTTP orqali, sekinlari navbat orqali o‘tadi; har ikki tomonda timeout, qayta urinish va idempotentlik bo‘ladi.
Farqlar ham muhim va ularga rioya qilish ishning bir qismi. Python’da notebook orqali prototip qilinadi, lekin notebook ishlab chiqarish muhiti emas: tayyor kod testlari bor modulga ko‘chadi. Python’dagi concurrency Node event loop’i bilan bir xil emas: protsessorni ko‘p yuklaydigan inferens async so‘rov ishlovchisida emas, worker jarayonlarida yoki GPU servisida bajarilishi kerak. Deploy birliklari ham farq qiladi — ixcham Node imiji va CUDA hamda model vaznlari bor Python imiji — shuning uchun masshtablash, keshlash va xarajatlar ham boshqacha.
Mijoz uchun ikki tomonda bitta muhandis bo‘lishining foydasi aniq: “AI mutaxassisi” bilan “veb mutaxassisi” o‘rtasida tarjima qatlami kerak emas va tomonlar bir-birini ayblaydigan API bo‘lmaydi. Notebook’da ishlaydigan modelingiz va undan hali foydalana olmaydigan web ilovangiz bo‘lsa, ikkalasini ham yuboring. Ularning orasiga qo‘yadigan shartnomamni va chiqaradigan ilk versiyani taklif qilaman.
Keyingi mahsulotingizga qoladigan insonni bering.
Boshlashga tayyormisiz? Yozing — hozir boshlayman va qolaman. Ikki haftalik topshirish emas, uzoq hamkorlik. Loyiha, talab va eng yaxshi yo‘lni muhokama qilaylik.