API
Åpent for lesing, uten nøkkel, JSON med access-control-allow-origin: *. Ment for Resonans' server, for
skript og for agenter som skal velge modell til en oppgave.
Endepunktene
| GET /api/v1 | Inngangen: aliasene og lenkene. Start her som agent. |
| GET /api/v1/aliaser | Alle aliasene, løst til modell, rute og parametere. |
| GET /api/v1/aliaser/{navn} | Ett alias: modell (det appen skal bruke), reserve (beste fra en annen leverandør), og anbefaling når laben mener det bør byttes. |
| GET /api/v1/modeller?status=fulgt | Modellene med pris, evner, fart og kvalitet. status=ny for det som er funnet i katalogen. |
| GET /api/v1/modeller/{id} | Én modell: hele kapabilitetsmatrisen og parameterne for hvert alias. |
| GET /api/v1/anbefalinger | Åpne anbefalinger om å bytte. |
Slik brukes et alias
Slå opp ved oppstart, hold svaret, og ha en innebygd standard. Laben skal aldri stå i den kritiske stien: er den nede, svarer appen som før med det den sist fikk, eller med standarden.
Bruk params som de er. De er bygd av det som er målt å virke for modellen og aliasets bruk – for eksempel reasoning_effort: "none" for gpt-5.4 med verktøy, som Resonans' egen navneregel gjettet feil på. Kallstedet legger sine egne felter (meldinger, verktøy, et lavere tak) oppå.
Følg bare leverandører du har nøkkel til. modell.leverandor og baseURL sier hvor modellen bor. En app som bare har en OpenAI-nøkkel, holder seg til OpenAI-modeller og lar resten være.
Et alias bytter bare når et menneske har godtatt det. versjon øker ved hvert bytte; logg den sammen med svaret, så et kvalitetsfall kan spores til et bytte.
Appene på telefonen spør ikke laben selv. Ekko går gjennom Resonans som før; det er Resonans' server som slår opp aliaset. Det holder Stemmegaffel utenfor appenes kjerne, som RESONANS_GRENSER.md krever.
Eksempel
// Slås opp ved oppstart og hvert kvarter – aldri per forespørsel.
const STANDARD = { model: 'gpt-4o-mini', params: { max_tokens: 2000, temperature: 0 } };
let gjeldende = STANDARD;
async function oppdater() {
try {
const r = await fetch('https://stemmegaffel.apps.hoi.by/api/v1/aliaser/json_cheap', { signal: AbortSignal.timeout(3000) });
if (r.ok) {
const a = await r.json();
if (a.modell?.leverandor === 'openai') gjeldende = { model: a.modell.model, params: a.modell.params };
}
} catch { /* behold det vi har */ }
}
await oppdater();
setInterval(oppdater, 15 * 60_000).unref();
// I kallet: modellens parametere først, kallstedets egne etterpå.
openai.chat.completions.create({ model: gjeldende.model, ...gjeldende.params, messages }); Svaret for json_cheap nå
{
"alias": "json_cheap",
"tittel": "Billig uttrekk",
"beskrivelse": "Små klassifiseringer og tekst → JSON i bakgrunnen: kvitteringer, butikk → kategori, triage.",
"profiler": [
"P4",
"P5"
],
"versjon": 1,
"endret": "2026-10-08T13:01:27.809Z",
"grunn": "startmodell",
"modell": {
"id": "openai/gpt-4o-mini",
"leverandor": "openai",
"model": "gpt-4o-mini",
"baseURL": "https://api.openai.com/v1",
"rute": "openai",
"snapshot": "gpt-4o-mini-2024-07-18",
"params": {
"max_completion_tokens": 2000,
"temperature": 0,
"response_format": {
"type": "json_object"
}
},
"evner": {
"chat": true,
"verktoy": true,
"verktoyParallelt": true,
"verktoyTvunget": true,
"strom": true,
"json": true,
"jsonSchema": true,
"bilde": true,
"bildeFlere": true,
"pdf": true,
"cache": true,
"resonnering": false,
"temperatur": true,
"ordrikhet": false,
"innsats": [],
"innsatsMedVerktoy": []
},
"pris": {
"inn": 0.15,
"cachet": 0.075,
"ut": 0.6,
"enhet": "USD per million tokens"
},
"malt": {
"kvalitet": 0.9,
"ttftP50Ms": 614,
"totalP50Ms": 1150,
"kostPerKallUsd": 0.00078
}
},
"reserve": {
"id": "openai/gpt-6-luna",
"leverandor": "openai",
"model": "gpt-6-luna",
"baseURL": "https://api.openai.com/v1",
"rute": "openai",
"snapshot": "gpt-6-luna",
"params": {
"reasoning_effort": "none",
"max_completion_tokens": 2000,
"response_format": {
"type": "json_object"
}
},
"evner": {
"chat": true,
"verktoy": true,
"verktoyParallelt": true,
"verktoyTvunget": true,
"strom": true,
"json": true,
"jsonSchema": true,
"bilde": true,
"bildeFlere": true,
"pdf": true,
"cache": true,
"resonnering": true,
"temperatur": false,
"ordrikhet": true,
"innsats": [
"none",
"low",
"medium"
],
"innsatsMedVerktoy": [
"none"
]
},
"pris": {
"inn": 0.1,
"cachet": 0.01,
"ut": 0.5,
"enhet": "USD per million tokens"
},
"malt": {
"kvalitet": 1,
"ttftP50Ms": 635,
"totalP50Ms": 1204,
"kostPerKallUsd": 0.00055
}
},
"anbefaling": {
"kandidat": "openai/gpt-6-luna",
"tekst": "openai/gpt-6-luna slår openai/gpt-4o-mini for json_cheap: kvalitet 0.90 → 1.00, kost -29 %.",
"siden": "2026-10-08T13:10:23.926Z"
},
"merknad": null
} For en agent
curl -s https://stemmegaffel.apps.hoi.by/api/v1/aliaser/reasoning | jq '.modell | {model, params, malt}' Trenger du en modell til en oppgave som ikke passer et alias, hent /api/v1/modeller og velg selv på evner, kvalitet og pris.