Stále více produktů, na kterých pracuji, má dvě části. Jedna je určená lidem: rozhraní v Next.js, API v Node.js, autentizace a platby. Druhá se týká modelů: inference, embeddingy, audio a zpracování dat. První část mluví TypeScriptem, druhá Pythonem. Umět obojí neznamená sbírat programovací jazyky, ale převzít odpovědnost za jejich rozhraní — právě tam se mnoho AI produktů rozbíjí.
Dobrá zpráva je, že si oba ekosystémy jsou podobnější, než se zdá. K Zodu patří Pydantic, k tsc mypy a pyright, k ESLintu a Prettieru Ruff, k npm a pnpm uv a Poetry. FastAPI zastává podobnou roli jako Express a NestJS a navíc generuje OpenAPI z typovaných modelů. Na obou stranách dodržuji stejnou disciplínu: přísné typy, jednoznačný formátovač, připnuté závislosti a testy v CI.
Kontrakt mezi nimi je nejdůležitější soubor v systému. Definuji ho jednou a zbytek generuji: modely Pydantic ve FastAPI vytvoří schéma OpenAPI, z nějž vznikne klient TypeScript a jeho typy. Přejmenujete pole v Pythonu a build Next.js selže dřív, než uživatel uvidí undefined. U asynchronní práce tvoří kontrakt payload úlohy se schématem na obou koncích, ne volný JSON, který si každá strana vykládá jinak.
Rozdělení odpovědností zůstává přísné. TypeScript zajišťuje identitu, oprávnění, peníze a UI. Python zajišťuje pouze model: převezme úlohu, vykoná náročnou práci — hlas StyleTTS2, dávku embeddingů nebo parsování dokumentu — a vrátí výsledek. Služba Python nikdy nekomunikuje s prohlížečem ani nerozhoduje, kdo smí co dělat. Rychlá volání jdou přes HTTP, pomalá přes frontu; na obou stranách jsou časové limity, opakování a idempotence.
Důležité jsou i rozdíly a jejich respektování patří k práci. V Pythonu se prototypuje v notebooku, notebook ale není produkce — hotový kód patří do modulu s testy. Souběžnost Pythonu není event loop Node: inferenci náročnou na CPU je třeba provozovat v procesech workerů nebo na GPU službě, ne v asynchronním handleru požadavku. Liší se také deployment jednotky — lehký obraz Node oproti obrazu Python s CUDA a vahami modelu — a s nimi škálování, cache i náklady.
Pro klienta je přínos jednoho inženýra na obou stranách jasný: není třeba překládat mezi „člověkem na AI“ a „člověkem na web“ a nevzniká API, ze kterého se každá strana snaží vinit tu druhou. Pokud máte model fungující v notebooku a webovou aplikaci, která ho zatím neumí používat, pošlete mi obojí. Navrhnu kontrakt mezi nimi a první verzi, kterou bych nasadil.
Dejte příštímu produktu někoho, kdo zůstane.
Chcete začít? Napište mi – mohu začít hned a zůstat. Dlouhodobé retainery, ne dvoutýdenní předání. Proberme váš projekt, požadavky a nejlepší cestu vpřed.