Chat și completări
Cele trei formate wire care ajung la `codai`: OpenAI Chat Completions, Anthropic Messages, OpenAI Responses.
Toate cele trei endpoint-uri rutează spre același lanț de modele și împart autentificarea, limitele de rată, prompt caching-ul și înregistrarea usage-ului. Alege-l pe cel pe care SDK-ul tău îl vorbește deja — ghidul formatelor wire explică diferențele, iar ghidul de header-e acoperă fiecare extensie x-codai-* pe care o vezi mai jos.
bearerAuthAutorizareBearer <codai_…>O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).
x-request-id?stringId de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128x-codai-session-id?stringGrupează cererile unei conversații pentru chitanțe, stickiness și prompt caching.
length <= 128x-codai-effort?stringNivelul de efort test-time-compute. Are prioritate față de câmpul reasoning_effort din body. max este o extensie codai peste high din OpenAI; none este acceptat ca alias pentru minimal.
"minimal""low""medium""high""max"x-codai-thinking?string1/true activează extended thinking pe modelele care îl suportă (bugetul din x-codai-thinking-budget, implicit 16384 tokeni).
x-codai-thinking-budget?stringBuget de tokeni de thinking (întreg pozitiv) folosit când x-codai-thinking este activ. Marchează cererea ca reglată de client, așa că planificatorul de efort nu o suprascrie.
x-codai-thinking-pin?string1 păstrează bugetul complet de thinking pe turele de continuare cu tool-uri, în loc de bugetul redus aplicat implicit de gateway.
x-codai-cache?string0/false dezactivează prompt caching pentru un id de model DIRECT. Ignorat (caching forțat activ) pentru alias-urile router codai / codai-*.
x-codai-no-task?string1/true scoate cererea din contorizarea task-urilor. Valid doar pe alias-urile utilitare; pe codai cererea este respinsă cu 400.
x-codai-task-id?stringId de corelare a task-ului ales de client. Cererile care îl împart sunt atribuite aceluiași task; este returnat ca header de răspuns x-codai-task-id când este cunoscut în 150 ms.
x-codai-task-outcome?stringpass sau fail — rezultat auto-raportat care închide task-ul atașat. Respectat doar pentru suprafețele desktop/CLI (x-codai-client) și doar împreună cu un x-codai-task-evidence de tip mașină.
"pass""fail"x-codai-task-evidence?stringTipul de dovadă care susține x-codai-task-outcome; doar exec_verdict și reexec închid un task.
"exec_verdict""reexec"x-codai-client?stringEtichetă explicită a suprafeței client, folosită la atribuirea task-urilor (desktop/<ver>, phone-android/<ver>, codai-cli/<ver>, hub/<ver>). Orice altceva este clasificat drept proxy.
x-codai-incognito?string1 face tura complet stateless: nu se citește memoria, nu se persistă nimic, fără sticky routing.
x-codai-no-recall?string1 sare peste citirea memoriei anterioare, dar persistă totuși această tură.
x-codai-proven-only?string1 restrânge recall-ul de memorie la intrările promovate la proven.
x-codai-new-session?string1 rotește către un namespace de sesiune nou, generat de server, pentru această cerere, ignorând x-codai-session-id.
x-codai-repo?stringIndiciu de scope pe repository (ex. owner/name) folosit la alegerea playbook-ului de sesiune; majoritatea proxy-urilor IDE nu îl pot trimite, așa că gateway-ul deduce scope-ul și din transcript.
x-codai-agent-id?stringIdentificator de agent furnizat de client, persistat împreună cu evenimentul de consum pentru analize per agent.
x-codai-disable-subagents?string1 interzice fan-out-ul de sub-agenți delegate_to_model și forțează calea nativă de streaming.
x-codai-mode?"agent"agent cere agent mode (prompt de agent pe server + tool-uri server). 403 când cheia/planul nu are dreptul.
"agent"x-codai-server-tools?string1/true activează tool-urile din gateway fără agent mode complet (agent mode îl implică).
x-codai-orchestrate?string1/true activează orchestrarea multi-model (fan-out pe sub-task-uri). Necesită cel puțin două modele în allowlist-ul cheii.
x-codai-cascade?stringverify activează cascada FrugalGPT (draft ieftin, verificare pe frontier). Rezultatul apare în x-codai-cascade-status.
x-codai-best-of?stringNumărul de eșantioane best-of-N (ex. 3); 0/off dezactivează explicit best-of-ul automat. Rezultatul în x-codai-best-of-status.
x-codai-best-of-depth?stringAdâncimea judecătorului pentru best-of-N.
x-codai-reflect?stringActivează/dezactivează pasul de auto-verificare reflect (1/0). Rezultatul în x-codai-reflect-status.
x-codai-step-verify?stringActivează/dezactivează verificarea procesului la nivel de pas (1/0). Rezultatul în x-codai-step-verify-status.
x-codai-plan?stringActivează/dezactivează verificarea planului pe orizont lung (1/0). Rezultatul în x-codai-plan-status.
x-codai-consensus?string1 rulează consens iterativ pe toate nivelurile (non-stream, doar pe alias-ul router). Rezultatul în x-codai-consensus-status.
x-codai-compact?stringCompactare opt-in a transcriptului pe server (1). Economiile apar în x-codai-compacted / x-codai-compact-saved-chars.
x-codai-retrieval?string1/on activează retrieval-ul de relevanță peste transcript înainte de dispatch (x-codai-retrieval-reduced).
x-codai-heuristics?stringActivează/dezactivează injecția de euristici învățate în prompt (1/0).
x-codai-identity?stringSuprascrie modul preambulului de identitate (on / off / shadow).
x-codai-playbook?stringSuprascrie per cerere modul playbook; x-codai-no-playbook: 1 este kill-switch-ul dur.
x-codai-no-playbook?string1 dezactivează injecția playbook-ului de sesiune pentru această cerere.
x-codai-debug?string1 adaugă trace-ul complet al deciziei router-ului ca header-e de răspuns x-codai-router-* suplimentare.
application/json- body
Body OpenAI Chat Completions. Câmpurile necunoscute sunt acceptate (passthrough) și forwardate către upstream-urile compatibile OpenAI; upstream-urile Anthropic le ignoră.
model?stringModelul logic. codai este smart-router-ul și singurul model adresabil public; orice nume nerecunoscut este convertit în codai.
"codai"messages*array<>Conversația de până acum. Peste 2 000 de mesaje gateway-ul taie mijlocul (păstrează capul system + coada recentă); peste 20 000 cererea este respinsă cu 400.
1 <= items <= 20000stream?booleantrue returnează chunk-uri text/event-stream. Chunk-ul final de usage este emis întotdeauna.
falsestream_options?Acceptat pentru compatibilitate OpenAI; include_usage este practic mereu activ.
max_tokens?integerNumărul maxim de tokeni de completare (numele vechi).
1 <= valuemax_completion_tokens?integerNumărul maxim de tokeni de completare (numele OpenAI curent). Oricare dintre nume este respectat.
1 <= valuetemperature?numbertop_p?numbertop_k?integerExtensie codai forwardată către upstream-urile Anthropic.
stop?|array<string>Un string de oprire sau un array de string-uri de oprire.
tools?array<|>Tool-uri de tip function. Prezența lor comută cererea pe calea multi-turn (stream-urile sunt bufferizate și redate). Un element codai_sandbox lasă gateway-ul să ruleze bash și Python pe server, într-un sandbox izolat (vezi eticheta Sandboxes).
tool_choice?|auto | none | required | {type: function, function: {name}}. required și alegerile cu nume sunt retrogradate la auto pe modelele care refuză folosirea forțată a tool-urilor (Fable 5.x); none suprimă complet tool-urile.
response_format?Control al ieșirii structurate. json_object / json_schema injectează o instrucțiune system și validează ieșirea la servire; json_schema poartă și schema.
reasoning_effort?stringNivelul de efort test-time-compute (vocabularul OpenAI plus max din codai; none acceptat ca minimal). Header-ul x-codai-effort are prioritate când sunt prezente ambele.
"minimal""low""medium""high""max"n?integerAcceptat pentru compatibilitate și forwardat doar către upstream-urile compatibile OpenAI; codai returnează întotdeauna o singură alegere.
user?stringIdentificatorul utilizatorului final. Când lipsește header-ul x-codai-session-id, un user nevid sub 256 de caractere este folosit ca id de sesiune.
length <= 255metadata?Acceptat pentru compatibilitate (passthrough); nu este interpretat de gateway.
[key: string]?anyCompletare. JSON (chat.completion) când stream este false sau
lipsește; text/event-stream de obiecte chat.completion.chunk
când stream: true, terminat întotdeauna cu un chunk de usage și
data: [DONE]. Header-ele de răspuns de mai jos apar pe ambele
forme; header-ele de cost sunt x-codai-cost-micro-usd când
costul este cunoscut la răspuns și x-codai-cost-estimate: pending
pe stream-urile native (rândul de consum se scrie după închiderea
stream-ului).
- response
id*stringobject*"chat.completion""chat.completion"created*integerSecunde Unix.
model*stringModelul upstream care a servit cererea.
choices*array<>Întotdeauna exact o alegere.
usage*curl -X POST 'https://ai.codai.ro/v1/chat/completions' \ -H 'Content-Type: application/json' \ -d '{ "messages": [ { "role": "system" } ]}'{ "id": "chatcmpl_9f1c2b7e4d", "object": "chat.completion", "created": 1790108310, "model": "claude-sonnet-5", "choices": [ { "index": 0, "message": { "role": "system", "content": "string", "name": "string", "tool_call_id": "string", "tool_calls": [ { "id": "toolu_01Xy9k3mQ", "type": "function", "function": { "name": "string", "arguments": "{\"path\":\"src/index.ts\"}" } } ] }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 0, "completion_tokens": 0, "total_tokens": 0, "prompt_tokens_details": { "cached_tokens": 0 }, "cache_creation_input_tokens": 0 }}bearerAuthAutorizareBearer <codai_…>O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).
x-request-id?stringId de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128x-codai-session-id?stringGrupează cererile unei conversații pentru chitanțe, stickiness și prompt caching.
length <= 128x-api-key?stringHeader de cheie API în stil Anthropic. Alternativă la Authorization: Bearer; ignorat când există un
header Bearer.
x-codai-effort?stringTier-ul de efort de calcul la inferență. Are prioritate față de reasoning_effort din body. none
este normalizat la minimal; valorile necunoscute sunt ignorate.
"minimal""low""medium""high""max"x-codai-thinking?stringActivezi extended thinking în upstream (1 sau true). Buget implicit 16384 tokeni.
"1""true""0""false"x-codai-thinking-budget?stringBugetul de thinking în tokeni (întreg pozitiv). Pe modelele cu adaptive thinking este mapat la un nivel de efort. Setarea lui spune și alocatorului de calcul să nu-și injecteze propriul buget.
x-codai-cache?stringDezactivarea prompt caching-ului (0 / false). Respectată doar pe apelurile directe de model —
caching-ul este forțat PORNIT pentru alias-ul router codai.
"0""false""1""true"x-codai-compact?stringForțezi (1) sau suprimi (0) compactarea conversației pe server pentru această cerere.
"0""1"x-codai-disable-subagents?"1"1 dezactivează delegarea către sub-agenți pentru această cerere. Combinat cu stream: true și fără
tools, deblochează calea nativă de streaming pass-through pe tier-urile cu sub-agenți.
"1"x-codai-no-task?"1"1 renunță la contorizarea task-urilor. Respectat doar pentru alias-urile utilitare eligibile; pe un
model complet cererea este respinsă cu 400.
"1"x-codai-best-of?stringEșantionare best-of-N pe calea buffered (condiționată de tier; ignorată fără drept).
x-codai-best-of-depth?stringAdâncimea de sub-agent la care se aplică best-of pe calea buffered.
x-codai-client?stringIdentificator liber al clientului, înregistrat pe task-ul deschis pentru această tură.
application/json- body
Cererea publică Anthropic Messages. Câmpurile necunoscute de la nivelul superior trec validarea și sunt ignorate, dacă nu sunt listate aici ca extensie codai.
model*stringModelul sau alias-ul. Folosești codai pentru smart-router. Numele care nu sunt alias-uri codai sunt
convertite la codai.
messages*array<>Turele conversației, alternând user / assistant. Conținutul este un string sau un array de
blocuri. Transcrierile prea lungi sunt tăiate din mijloc, nu respinse.
1 <= itemsmax_tokens*integerNumărul maxim de tokeni de ieșire. Obligatoriu.
1 <= valuesystem?|array<>Promptul de sistem ca string simplu sau ca array de blocuri text (unite cu linii goale).
temperature?numberTemperatura de eșantionare. Eliminată pe modelele upstream care resping parametrii de eșantionare.
top_p?numberEșantionare nucleus. Eliminată pe modelele upstream care resping parametrii de eșantionare.
top_k?numberEșantionare top-k. Eliminată pe modelele upstream care resping parametrii de eșantionare.
stop_sequences?array<string>Secvențe de oprire personalizate.
stream?booleantrue returnează text/event-stream (vezi descrierea operației pentru lista de evenimente).
falsetools?array<>Definițiile tool-urilor pe care modelul le poate apela. Orice listă nevidă forțează calea de execuție buffered.
tool_choice?|auto lasă modelul să decidă, any forțează un apel de tool oarecare, tool forțează un tool anume. Pe
upstream-urile Fable 5 / 5.1 any și tool sunt coborâte la auto, pentru că acele modele resping
apelul forțat de tool.
metadata?Se folosește doar user_id; este trimis mai departe ca câmpul user din upstream.
thinking?|Configurarea Anthropic pentru extended thinking. Acceptată pentru compatibilitate cu SDK-ul, dar NU este
trimisă mai departe — gateway-ul decide forma de thinking per model upstream (enabled + budget_tokens
pe modelele vechi, adaptive pe cele noi). Folosești în schimb header-ele x-codai-thinking /
x-codai-thinking-budget.
reasoning_effort?stringExtensie codai (parametru de body standard OpenAI). Tier-ul de efort pentru alocatorul de calcul;
header-ul x-codai-effort are prioritate.
"minimal""low""medium""high""max"Mesajul asistentului. JSON când stream este false sau lipsește; o secvență de evenimente SSE (vezi
descrierea operației) când stream este true.
- response
Răspuns fără streaming. model reia modelul sau alias-ul cerut, nu upstream-ul care a răspuns (vezi x-codai-routed-to).
id*stringtype*"message""message"role*"assistant""assistant"model*stringcontent*array<|>Întotdeauna cel puțin un bloc; un răspuns gol este un singur bloc text cu text: ''.
stop_reason*stringMapat din motivul de oprire upstream (content_filter devine end_turn).
"end_turn""max_tokens""stop_sequence""tool_use"stop_sequence*stringÎntotdeauna null pe calea buffered.
usage*curl -X POST 'https://ai.codai.ro/v1/messages' \ -H 'Content-Type: application/json' \ -d '{ "model": "codai", "messages": [ { "role": "user", "content": "string" } ], "max_tokens": 4096}'{ "id": "msg_1f0d5b7a-4c2e-4a9b-9c1d-2e3f4a5b6c7d", "type": "message", "role": "assistant", "model": "codai", "content": [ { "type": "text", "text": "string" } ], "stop_reason": "end_turn", "stop_sequence": "string", "usage": { "input_tokens": 0, "output_tokens": 0, "cache_read_input_tokens": 0, "cache_creation_input_tokens": 0 }}bearerAuthAutorizareBearer <codai_…>O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).
x-request-id?stringId de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128x-codai-session-id?stringGrupează cererile unei conversații pentru chitanțe, stickiness și prompt caching.
length <= 128x-codai-effort?stringNivelul de efort; când este prezent are prioritate și reasoning.effort din body nu mai este mapat.
"minimal""low""medium""high""max"x-codai-cache?string0/false dezactivează prompt caching pentru un id de model direct (ignorat pentru alias-ul codai). Forwardat către apelul interior chat-completions.
x-codai-no-task?stringForwardat către apelul interior; valid doar pe alias-urile utilitare (400 pe codai).
x-codai-incognito?stringForwardat către apelul interior — tură stateless, nimic persistat.
x-codai-client?stringForwardat către apelul interior — eticheta suprafeței client pentru atribuirea task-urilor.
application/json- body
model?string"codai"input?|array<>Prompt-ul ca un singur string de user sau ca array de item-uri de input.
instructions?stringDevine mesajul system de la început.
stream?booleanfalsemax_output_tokens?integerMapat la max_tokens.
1 <= valuetemperature?numbertop_p?numbertools?array<>tool_choice?|Trecut neschimbat către chat completions.
reasoning?Doar effort este mapat (xhigh → max, none → minimal, valorile necunoscute sunt eliminate). Ignorat când trimiți x-codai-effort.
previous_response_id?stringNU este suportat — orice valoare este respinsă cu 400. Trimite în loc întregul context în input.
background?booleanNU este suportat — true este respins cu 400.
[key: string]?anyUn obiect response când stream este false; altfel un
text/event-stream de evenimente response.* (vezi descrierea).
Răspunsurile non-stream poartă aceleași header-e x-codai-* ca
/v1/chat/completions (rutare, trace, cost, task).
- response
id*stringobject*"response""response"created_at*integerSecunde Unix.
status*"completed""completed"model*stringModelul upstream care a servit apelul interior.
output*array<|>Mai întâi item-urile function-call, apoi cel mult un mesaj assistant.
output_text*stringCopie de conveniență a textului assistant (string gol când nu există).
usage*curl -X POST 'https://ai.codai.ro/v1/responses' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "resp_chatcmpl_9f1c2b7e4d", "object": "response", "created_at": 0, "status": "completed", "model": "string", "output": [ { "type": "function_call", "id": "fc_toolu_01Xy9k3mQ", "call_id": "string", "name": "string", "arguments": "string", "status": "completed" } ], "output_text": "string", "usage": { "input_tokens": 0, "input_tokens_details": { "cached_tokens": 0 }, "output_tokens": 0, "total_tokens": 0 }}Ultima actualizare: