# Decide (Beta)

> Stil Decide typede spørgsmål om en tekst via API'et, og få sandsynligheder tilbage i stedet for fritekst, for én tekst eller op til 100 ad gangen.

Decide er i (Beta). Decide besvarer typede spørgsmål om en tekst med sandsynligheder i stedet for fritekst: hvilken kategori et brev hører til, hvor hurtigt det skal besvares, og om det indeholder personoplysninger. En beslutningsmodel skriver ingen tekst, så der er intet at parse. Hvert svar har hele sandsynlighedsfordelingen bag sig og en sikkerhed.

Decide kører på komplais lokale infrastruktur i Danmark uden betaling for AI. Teksten gemmes ikke.

## Før du starter

- Jeres organisation har Decide i aftalen og har godkendt behandlingen, og en administrator har givet dig adgang til Decide under **Organisation › Personer › Adgang til værktøjer** i hubben.
- Du har en personlig API-nøgle (`kp_live_...`) med scopet `decide:process`, oprettet på hubbens side **API-nøgler** på [hub.komplai.dk/api-access](https://hub.komplai.dk/api-access). Organisationens integrationsnøgle (`kp_org_...`) får 403 [integration_not_permitted](https://developers.komplai.dk/da/errors/integration_not_permitted).
- Kald i beta kan stadig ændre sig, med varsel. Brug kun testdata, indtil jeres organisation har en godkendt databehandleraftale.

## Dit første kald

Send én tekst i `state` og dine spørgsmål i `questions`, hvert under et id, du selv vælger.

```bash
curl https://api.komplai.dk/v1/decide \
  -H "Authorization: Bearer $KOMPLAI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "Hej. Jeg vil gerne have en kopi af min ansøgning om byggetilladelse fra marts. Venlig hilsen Mette Kjærgaard Holm",
    "questions": {
      "category": {
        "type": "choice",
        "instructions": "Hvad handler henvendelsen om?",
        "criteria": {
          "aktindsigt": "Borgeren beder om kopi af dokumenter eller aktindsigt",
          "klage": "Borgeren klager over en afgørelse",
          "andet": "Noget andet"
        }
      },
      "urgency": {
        "type": "score",
        "instructions": "Hvor hurtigt skal henvendelsen besvares?",
        "criteria": ["Inden for den normale frist", "Inden for en uge", "Samme dag"]
      },
      "personal_data": {
        "type": "noul",
        "instructions": "Indeholder teksten personoplysninger?",
        "criteria": {
          "true": "Ja, for eksempel et navn eller et CPR-nummer",
          "false": "Nej"
        }
      }
    }
  }'
```

```json
{
  "model": "convaiinnovations/laya/multilingual",
  "answers": {
    "category": {
      "type": "choice",
      "choice": "aktindsigt",
      "probabilities": { "aktindsigt": 0.91, "klage": 0.03, "andet": 0.06 },
      "confidence": 0.672,
      "action": { "act_probability": 0.88 }
    },
    "urgency": {
      "type": "score",
      "score": 0.32,
      "max": 2,
      "probabilities": [0.72, 0.24, 0.04],
      "confidence": 0.356
    },
    "personal_data": {
      "type": "noul",
      "noul": 0.97,
      "probabilities": { "true": 0.97, "false": 0.03 },
      "confidence": 0.806
    }
  },
  "usage": { "input_tokens": 118, "output_tokens": 0 },
  "latency_ms": 38
}
```

Svarene kommer tilbage under de samme id'er. `usage.output_tokens` er altid 0, og `latency_ms` er modellens egen tid uden netværket.

## Spørgsmålstyper

Hvert spørgsmål har `type`, `instructions` (spørgsmålet med dine egne ord) og `criteria`, hvis form afhænger af typen.

| Type | `criteria` | Svaret |
| --- | --- | --- |
| `choice` | Et objekt med 2 til 32 muligheder: en kort nøgle og hvad muligheden betyder | `choice` er nøglen med den højeste sandsynlighed, og `probabilities` giver hver nøgle dens sandsynlighed |
| `score` | En liste med 2 til 32 niveauer, laveste først | `score` er det forventede niveau (hvert niveau gange dets sandsynlighed, lagt sammen), `max` det højeste niveau, og `probabilities` én værdi pr. niveau i den rækkefølge, du sendte dem |
| `noul` | `true` og `false`, og hvad hver af dem betyder | `noul` er sandsynligheden for, at udsagnet er sandt |

Sandsynlighederne i et svar giver tilsammen 1. Hold nøglerne til mulighederne korte og maskinvenlige, for svaret nævner nøglen.

Hvert svar har også:

- `confidence`: hvor afgjort svaret er, fra 0 (jævnt fordelt) til 1 (alt på én mulighed). Det siger intet om, hvorvidt svaret er rigtigt.
- `action.act_probability`, når modellen giver den: hvor sandsynligt det er, at man kan handle på svaret, uden at en person kontrollerer det.

En forespørgsel tager fra 1 til 64 spørgsmål. De deler én læsning af teksten, så flere spørgsmål koster ikke meget mere end ét. `state` er en tekst eller et JSON-objekt, som komplai gør til tekst; lister og andre værdier afvises. Forespørgslen må højst fylde 80.000 tegn som JSON og body højst 320.000 bytes. Felter, der ikke er beskrevet, ignoreres.

## Modeller

`model` vælger beslutningsmodellen:

| `model` | Model |
| --- | --- |
| `komplai-decide` | Laya |
| `komplai-decide-claes` | Claes |

Udelad feltet for at bruge standarden: den model, du har valgt i hubben, ellers organisationens standard, ellers `komplai-decide`. `model` i svaret nævner den model, der svarede, ved dens checkpoint. En model, Decide ikke tilbyder jeres organisation, giver 409 [model_not_enabled](https://developers.komplai.dk/da/errors/model_not_enabled), og 404, når den lokale infrastruktur ikke tilbyder den lige nu. API'et vælger aldrig en anden model for dig.

## Mange tekster i ét kald

POST /v1/decide/batch stiller de samme spørgsmål om op til 100 tekster i `states` i én kørsel af modellen. Svarene kommer i `results` i samme rækkefølge som `states`, og kørslen besvares samlet eller afvises samlet. Den tæller som ét kald i din grænse for kald.

```bash
curl https://api.komplai.dk/v1/decide/batch \
  -H "Authorization: Bearer $KOMPLAI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "states": [
      "Hej. Jeg vil gerne have en kopi af min ansøgning om byggetilladelse fra marts.",
      "Jeg klager over afslaget på min ansøgning om boligstøtte. Afgørelsen er forkert, og jeg har brug for svar hurtigt."
    ],
    "questions": {
      "category": {
        "type": "choice",
        "instructions": "Hvad handler henvendelsen om?",
        "criteria": {
          "aktindsigt": "Borgeren beder om kopi af dokumenter eller aktindsigt",
          "klage": "Borgeren klager over en afgørelse",
          "andet": "Noget andet"
        }
      }
    }
  }'
```

```json
{
  "model": "convaiinnovations/laya/multilingual",
  "results": [
    {
      "answers": {
        "category": { "type": "choice", "choice": "aktindsigt", "probabilities": { "aktindsigt": 0.91, "klage": 0.03, "andet": 0.06 }, "confidence": 0.672 }
      },
      "usage": { "input_tokens": 61, "output_tokens": 0 }
    },
    {
      "answers": {
        "category": { "type": "choice", "choice": "klage", "probabilities": { "aktindsigt": 0.08, "klage": 0.86, "andet": 0.06 }, "confidence": 0.544 }
      },
      "usage": { "input_tokens": 66, "output_tokens": 0 }
    }
  ],
  "usage": { "input_tokens": 127, "output_tokens": 0 },
  "latency_ms": 52
}
```

En samlet forespørgsel må højst fylde 200.000 tegn som JSON og body højst 800.000 bytes.

## Tidsgrænser og fejl

Modellen har 30 sekunder til at svare. Fejler den, svarer den ikke i tide, eller kan den ikke nås, giver kaldet [service_unavailable](https://developers.komplai.dk/da/errors/service_unavailable). Et svar, der ikke består komplais kontrol, fx et manglende svar eller sandsynligheder, der ikke giver 1 tilsammen, sendes aldrig videre: kaldet giver [invalid_response](https://developers.komplai.dk/da/errors/invalid_response). En forespørgsel, der ikke har den beskrevne form, giver [invalid_input](https://developers.komplai.dk/da/errors/invalid_input).

## Hvor data behandles

Decide kører kun på komplais validerede beslutningsmodeller på komplais lokale infrastruktur i Danmark. Data forlader ikke EU, og organisationens egne AI-forbindelser bruges aldrig til Decide. Teksten gemmes ikke; komplai registrerer kaldets metadata, fx hvem der kaldte, hvornår og med hvilken model.

## Reference og fejl

- [Decide-referencen](https://developers.komplai.dk/da/reference/decide): alle felter i POST /v1/decide og POST /v1/decide/batch med kodeeksempler og en konsol, hvor du kan prøve hvert kald.
- [Fejl](https://developers.komplai.dk/da/errors): alle koder, og hvad du kan gøre. Grænserne for kald står under [Grænser](https://developers.komplai.dk/da/limits).

---

https://developers.komplai.dk/da/tools/decide
