Mtiririko mmoja wa SSE, watoa huduma saba wa LLM
Nilitengeneza programu ya Next.js inayosaidia watoa huduma saba tofauti wa LLM.
OpenAI, Claude, Gemini, Ollama, Mistral, Groq, na Azure.
Niliweka sheria moja kali: Kivinjari (browser) lazima kitumie njia ile ile ya kodi (code path) kwa kila mtoa huduma.
Hii ni ngumu kwa sababu API hizi si sawa. Zinatumia mbinu tofauti za usafirishaji. Zinatuma muundo tofauti wa data. Baadhi hutumia SSE wakati nyingine hutumia NDJSON.
Ukiruhusu tofauti hizi zifikie UI yako, kodi yako itakuwa mchanganyiko wa kauli za "if". Kila unapoongeza mtoa huduma, upande wako wa mbele (frontend) unazidi kuwa tata.
Nilitatua hili kwa kuunda mkataba mmoja. Kila mtoa huduma lazima utoe muundo huu kwa kivinjari:
• data: {"delta":"
Kivinjari kinahitaji tu kuelewa mambo matatu: delta, error, na [DONE].
Hivi ndivyo nilivyojenga:
Tumia Async Generators Ninachukulia kila mtoa huduma kama generator inayotoa maandishi ya kawaida (plain text). Hii inaficha utata wa API.
Muundo wa Wrapper (The Wrapper Pattern) Nilitengeneza function ya wrapper iitwayo
createSSEStream. Wrapper hii inadhibiti muundo wa mawasiliano (wire format). Pia inahakikisha mtiririko (stream) unamalizika kila wakati. Hata kama mtoa huduma atafeli katikati, wrapper inatuma kosa (error) na ishara ya [DONE]. Hii inazuia mteja (client) kukwama.Kuunganisha API Zinazofanana OpenAI, Mistral, Groq, na Azure zote hutumia lugha (dialect) ile ile. Niliandika utekelezaji mmoja kwa ajili yao zote. Kuongeza mtoa huduma mpya anayefanana sasa kunachukua mstari mmoja tu wa kodi.
Kushughulikia Zile Zinazotofautiana (Handling Outliers) Anthropic na Ollama zinafanya kazi tofauti. Anthropic hutumia matukio maalum ya aina fulani (typed events). Ollama hutumia NDJSON. Niliandika "parsers" maalum kwa ajili yao, lakini zote mbili hutoa maandishi kwenye wrapper ile ile. Kivinjari hakijui kamwe tofauti hiyo.
Faragha na Urahisi Programu inatumia mfumo wa "Bring Your Own Key".
• Watumiaji hubandika (paste) API key yao wenyewe. • Key inabaki kwenye local storage. • Seva inafanya kazi kama proxy tupu. • Key haihifadhiwi kamwe kwenye kanzi data (database).
Mtazamo huu unaondoa hitaji la usimamizi tata wa uthibitishaji (auth) au siri. Unafanya programu iwe rahisi kujihost (self-host).
Somo ni rahisi: Unda kila muunganisho (integration) kama generator ya kile unachotaka hasa. Izungushie (wrap) mara moja. Acha tofauti ziwe ndani ya generators ili mantiki yako kuu ibaki safi.
Optional learning community: https://t.me/GyaanSetuAi