Coding Beta
Beta: i brug, men detaljer kan stadig ændre sig.
Coding er i Beta. Coding giver kodeassistenter et OpenAI-kompatibelt chatsvar, der streames som server-sent events, med tekst, ræsonnement og funktionskald. komplai kører aldrig et værktøj: klienten kører det på din maskine, spørger dig, hvor det er nødvendigt, og sender resultatet med i næste forespørgsel.
Coding bruger organisationens adgang til Chat og de godkendte modeller. Modellen kører i komplais EU-cloud, og forbruget tæller med i organisationens månedlige loft for AI-forbrug. Coding kræver ingen særskilt licens.
Før du starter
- Coding er slået til for jeres organisation, organisationens Chat kører i komplais EU-cloud med en godkendt opsætning, og du har adgang til Chat. Ellers giver alle kald 403 coding_not_enabled. Et svar kræver også et månedligt loft for AI-forbrug for måneden; uden det giver kaldet 403 ai_credit_not_granted.
- Du har en personlig API-nøgle (
kp_live_...) med scopescoding:readogcoding:complete. komplais coding-klient opretter en, når du logger ind med organisationen, og den gælder i 30 dage; Coding-klient viser hvordan. Du kan også oprette en nøgle med begge scopes på hubbens side API-nøgler på hub.komplai.dk/api-access. Organisationens integrationsnøgle (kp_org_...) får 403 integration_not_permitted.
De tre kald
| Kald | Scope | Hvad det gør |
|---|---|---|
| GET /v1/coding/account | coding:read | Organisationen, de gældende vilkår som contract, hvor et kalds data sendes hen, det månedlige loft for AI-forbrug og månedens forbrug, standardmodellen og kodemodellerne |
| GET /v1/coding/models | coding:read | Kodemodellerne med deres grænser i OpenAI's listeformat |
| POST /v1/coding/chat/completions | coding:complete | Et streamet svar |
- Læs kontoen, og vis vilkårene til personen, før vedkommende forbinder.
- Vælg en model fra kontoens
modelseller fra GET /v1/coding/models. - Stream et svar med den gældende
contractiX-Komplai-Contractog et nyt UUID iX-Request-Id.
Læs kontoen
curl https://api.komplai.dk/v1/coding/account \
-H "Authorization: Bearer $KOMPLAI_TOKEN"Svaret, forkortet:
{
"id": "2e7c4b9a-5d1f-4a3e-8b6c-9f0d1e2a3b4c",
"name": "Eksempel Kommune",
"contract": "86fb88e41acf1ec181a16eaf5d7725059473b626b7d4289ee1b9c3b2aaed45b0",
"defaultModel": "mistral-small-3.2-24b-instruct-2506",
"data": {
"recipients": "komplai → EU-cloud",
"region": "komplais API: Hetzner, Tyskland. Model: komplais EU-cloud, EU · Frankrig.",
"checkedAt": "2026-10-13"
},
"models": [
{
"id": "mistral-small-3.2-24b-instruct-2506",
"name": "Mistral Small 3.2 (24B)",
"context_length": 128000,
"max_output_tokens": 32768,
"capabilities": { "function_calling": true },
"reasoning_efforts": []
}
],
"credential": {
"scopes": ["coding:read", "coding:complete"],
"expiresAt": "2026-11-19T08:00:00.000Z"
}
}contractidentificerer de gældende vilkår: udbyderen og dens vilkår, datatilstanden, organisationens aftale og kodemodellerne med deres priser. Send den med hver forespørgsel til POST /v1/coding/chat/completions.dataoplyser, hvem der modtager et kalds data, hvor det behandles, udbyderens vilkår for træning og opbevaring, hvordan forbruget opgøres, hvad komplai gemmer, kilden til udbyderens vilkår og hvornår komplai kontrollerede dem. Vis vilkårene til personen, før vedkommende forbinder.balanceindeholder det månedlige loft for AI-forbrug og månedens forbrug, det reserverede og det, der er tilbage. Hver model imodelshar udbyderens priser.credentialviser nøglens scopes, og hvornår den udløber.
Stream et svar
Gem kontrakten i en variabel, og send forespørgslen. -N får curl til at skrive hver hændelse, så snart den kommer.
KOMPLAI_CODING_CONTRACT=$(curl -s https://api.komplai.dk/v1/coding/account \
-H "Authorization: Bearer $KOMPLAI_TOKEN" | jq -r .contract)
curl -N https://api.komplai.dk/v1/coding/chat/completions \
-H "Authorization: Bearer $KOMPLAI_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Komplai-Contract: $KOMPLAI_CODING_CONTRACT" \
-H "X-Request-Id: $(uuidgen)" \
-d '{
"model": "mistral-small-3.2-24b-instruct-2506",
"stream": true,
"max_tokens": 256,
"messages": [
{"role": "system", "content": "Du er en omhyggelig kodeassistent."},
{"role": "user", "content": "Hvad giver udtrykket 1 + 1?"}
]
}'data: {"id":"chatcmpl-5f1e9d2c","object":"chat.completion.chunk","created":1792483200,"model":"mistral-small-3.2-24b-instruct-2506","choices":[{"index":0,"delta":{"role":"assistant","content":"Udtrykket giver 2"},"finish_reason":null}]}
data: {"id":"chatcmpl-5f1e9d2c","object":"chat.completion.chunk","created":1792483200,"model":"mistral-small-3.2-24b-instruct-2506","choices":[{"index":0,"delta":{"content":": summen af 1 og 1."},"finish_reason":null}]}
data: {"id":"chatcmpl-5f1e9d2c","object":"chat.completion.chunk","created":1792483200,"model":"mistral-small-3.2-24b-instruct-2506","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":31,"completion_tokens":14}}
data: [DONE]Hver data-linje er en chat.completion.chunk fra modellen, som komplai har kontrolleret, før den sendes videre: tekst i choices[0].delta.content, ræsonnement i reasoning_content, funktionskald i tool_calls og forbruget i den sidste chunk. data: [DONE] afslutter et komplet svar.
En stream uden [DONE] er ikke et komplet svar
Fejler kaldet, efter streamen er begyndt, er den sidste hændelse data: {"error": {"message": ..., "code": ..., "request_id": ..., "doc_url": ...}}, og der kommer ingen [DONE]. Behandl resultatet som ukendt, ligesom en stream, der stopper for tidligt.
Forespørgslen skal have:
model: et id fra GET /v1/coding/models. Et andet id giver model_not_enabled.stream: true.stream_optionser valgfri; forbruget står altid i streamen.- Præcis ét af
max_tokensogmax_completion_tokens, fra 1 til 32.000 og inden for modellensmax_output_tokens. Input og output skal tilsammen kunne være i modellens kontekst, ellers context_limit.
En forespørgsel har højst 512 beskeder og 64 værktøjer, og body højst 2.000.000 bytes. reasoning_effort tager en af modellens reasoning_efforts; en anden værdi giver reasoning_not_supported. Svaret skal være færdigt inden for 600 sekunder, ellers timeout.
Funktionskald
Beskriv de funktioner, modellen må kalde, i tools. Vil modellen bruge en, indeholder streamen tool_calls og slutter med finish_reason: "tool_calls". Din klient kører funktionen, spørger personen, hvor det er nødvendigt, og sender næste forespørgsel med samtalen indtil nu: assistentbeskeden med dens tool_calls og derefter en tool-besked med resultatet for hvert kald.
[
{"role": "user", "content": "Hvad står der i README.md?"},
{
"role": "assistant",
"content": null,
"tool_calls": [
{"id": "call_7b2d", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\":\"README.md\"}"}}
]
},
{"role": "tool", "tool_call_id": "call_7b2d", "content": "# Mit projekt\nEt lille kommandolinjeværktøj."}
]Hvert funktionskald skal besvares med sit tool_call_id, før næste besked kommer. Send tidligere reasoning_content uændret tilbage på assistentbeskeden. tool_choice tager auto, none, required eller én funktion ved navn.
Forespørgsels-id og gentagelser
X-Request-Id tager et nyt UUID (version 4) for hver ny logisk handling. Ved du ikke, om en handling nåede frem til komplai, fx efter en afbrudt forbindelse, så send den igen med samme id. komplai svarer så duplicate_request i stedet for at kalde udbyderen en gang til. Gentag aldrig automatisk med et nyt id efter coding_service_unavailable eller timeout, for kaldet kan have nået modellen og talt med i loftet. Request-Id i svaret gentager dit id.
Når vilkårene ændres
Ændres udbyderen, dens vilkår, datatilstanden, aftalen eller kodemodellerne og deres priser, ændres contract også, og et svar med den gamle giver terms_changed. Læs kontoen igen, vis de nye vilkår til personen, og send den nye kontrakt. Godkend aldrig nye vilkår automatisk. Almindeligt AI-forbrug ændrer ikke kontrakten.
Det månedlige loft for AI-forbrug
Før udbyderen kaldes, reserverer komplai det mest, kaldet kan koste, under organisationens månedlige loft for AI-forbrug. Forbruget måles derefter til udbyderens pris. Cachet input har sin egen pris, hvor udbyderen har en, og ræsonnement tæller som outputtokens. Kaldene stopper, når loftet eller organisationens egen grænse er nået (ai_credit_exhausted), eller når din personlige grænse er nået (person_ai_credit_exhausted). API'et skifter aldrig til en anden model.
Hvor data behandles
Prompts, kode og værktøjsresultater sendes til kodemodellen i komplais EU-cloud i Frankrig. komplais API kører på komplais servere i Tyskland. Data forlader ikke EU. komplai gemmer hverken prompts, svar eller værktøjsresultater, kun kaldets metadata til regnskab og revision. Udbyderens egne vilkår for træning og opbevaring står i kontoens data.
Reference og fejl
- Coding-referencen: alle felter i de tre kald med kodeeksempler.
- Coding-klient: komplais klient til kommandolinjen og OpenCode, der logger ind, læser kontoen og sender headerne for dig.
- Fejl: alle koder, og hvad du kan gøre.