Denna artikel fokuserar på de två sista kategorierna: TaskHandle-polling för asynkrona uppgifter och detaljer, fallgropar och språkövergripande skillnader för chat-strömmande svar.
I. TaskHandle — En enhetlig abstraktion för asynkrona uppgifter
De tre SDK:erna kapslar in asynkrona uppgifter somTaskHandle och erbjuder samma 4 metoder:
Två sätt att anropa för att skapa uppgifter
Varje asynkront resurs (images.generate / video.generate / audio.generate) har en wait parameter:
wait=False(standard): Returnerar omedelbartTaskHandle, affärskoden bestämmer själv när den ska poll.wait=True: SDK anropar direkthandle.wait(), funktionen returnerar svaret efter att det är klart. Använd endast när du är säker på att mål-API:et alltid kommer att returnerastatus: succeededfältet — ett fåtal leverantörer följer inte detta avtal, vilket gör attwaitfortsätter tillmax_waitinnan det kastarTimeoutError.
Enhetsdifferenser (⚠️ Viktigt att läsa)
Enheterna förpoll_interval och max_wait är olika i de tre språken, vilket är en vanlig fallgrop vid språkövergång:
Att behandla TS:s{ pollInterval: 3000 }som sekunder och översätta till Pythonpoll_interval=3000kommer att få SDK att vänta 50 minuter innan den pollar andra gången.
Exempel: Python explicit polling för Midjourney
images.generate(..., wait=False)skickarprompttill Midjourney API, får omedelbarthandle, blockerar inte.handle.wait(poll_interval=3.0, max_wait=180.0)gör en POST till/midjourney/tasksvar tredje sekund, tillsstatusändras tillsucceededellerfailed, eller total tid överstiger 180 sekunder och kastarTimeoutError.- När det är klart innehåller
result["response"]["data"]vanligtvis 4 bilder (Midjourney standard 2x2 grid).
Exempel: TypeScript explicit polling
Val mellan synkron generering och asynkrona uppgifter
Om din leverantör redan är en synkron bildgenerering (NanoBanana / Flux / Seedream), skicka intewait:
task_id + /tasks-par, är det synkron generering; i svaret för synkron generering finns det redan ett data-fält som innehåller det slutgiltiga resultatet.
Intern protokoll för TaskHandle
TaskHandle.get() anropar:
response-inpackning — läser direkt den översta status, så byte mellan nya och gamla svar påverkar inte affärskoden.
II. SSE Strömmande svar (chat.completions)
chat.completions.create(stream=True) är för närvarande det enda strömmande gränssnittet i SDK:n (ljud / video ström stöds ännu inte). De tre språkens iterativa stilar är var och en inbyggda:
TypeScript
Python
Go
Struktur av strömmande chunk
Varje chunk är en OpenAI-kompatibelchat.completion.chunk:
- Den första chunk innehåller vanligtvis
delta.role: "assistant"mencontentär tom. - De mellanliggande chunkarna har var och en
delta.content, som kan sammanfogas direkt. - Den sista chunk har
deltatom,finish_reasonärstop/length/content_filter.
Avbrytande under vägen
Tidigare avbrutna token som redan har debiterats — token som genererades före avbrott kommer fortfarande att debiteras enligt faktisk förbrukning.
Tre, tidsgränser och omförsök
De tre SDK:erna delar samma uppsättning omförsöksstrategier:
För att inaktivera omförsök: skicka
max_retries=0 / maxRetries: 0 / WithMaxRetries(0) när du konstruerar klienten.
Polling av asynkrona uppgifter (TaskHandle) påverkas inte av max_retries — dess loop är affärsnivå snarare än HTTP-nivå, kontrolleras av max_wait för total längd.
Fyra, vanliga fallgropar
- Synkron provider ska inte skicka
wait: NanoBanana / Flux / Seedream genererar synkront, att tvingawait=Truefår SDK att pollera entasks-gränssnitt som inte kommer att uppdateras. - Skillnader i enhet för TaskHandle: Python är sekunder, TS är millisekunder, se till att konvertera vid överföring mellan språk.
wait=Truekan fortfarande geTimeoutError: Svar måste uppfyllastatus in ('succeeded','failed')för att avsluta loopen; om provider använder andra fältnamn, måste affärskoden självhandle.get()analysera.- Strömmande avbrytande: Token som genererades före avbrott har redan debiterats.
- Återanvänd klient inom samma process: SDK har en inbyggd anslutningspool, frekvent
new AceDataCloud()/AceDataCloud()kan göra TLS-handshake till en flaskhals.

