API-dokumentaatio
AIvantage on OpenAI- ja Anthropic-yhteensopiva reititin. Sovellus vaihtaa vain osoitteen ja avaimen, ja kutsut toimivat muuten ennallaan.
Osoite ja avain
- OpenAI-muoto
https://app.aivantage.fi/v1 - Anthropic-muoto
https://app.aivantage.fi
OpenAI-kirjastot käyttävät osoitetta, jonka lopussa on /v1. Anthropic-kirjastot ja Claude Code lisäävät polun itse, joten niille annetaan osoite ilman /v1:tä.
Avain luodaan portaalissa sovellukselle, ja se näytetään vain kerran. Lähetä se otsakkeessa Authorization: Bearer <AIVANTAGE_KEY> tai x-api-key: <AIVANTAGE_KEY>. Kumpikin otsake käy kumpaankin muotoon. Väärä tai poistettu avain palauttaa 401 invalid_api_key.
Rajapinnan virheviestit ovat aina englanniksi.
Rajapinnat
| Rajapinta | Käyttö |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions. Porrastus (aivantage/auto) tai lukittu malli, suoratoisto, työkalut ja kuvat. |
POST /v1/responses | OpenAI Responses API palveluntarjoajan omille työkaluille (xAI x_search ja web_search). Vain xAI-mallit, ei suoratoistoa. |
POST /v1/messages | Anthropic Messages. Anthropicin mallit sellaisinaan tai aivantage/auto, vastaus aina Anthropicin muodossa. |
POST /v1/messages/count_tokens | Anthropicin tokenilaskuri, ei laskuteta. Kun Anthropic ei voi laskea, esimerkiksi kun porrastuksessa ei ole Anthropic-mallia, reititin arvioi määrän itse ja lisää otsakkeen x-aivantage-estimate: 1. |
GET /v1/models | Sovelluksen käytettävissä olevat mallit. Otsakkeen anthropic-version kanssa Anthropicin muodossa. |
GET /v1/models/{model_id} | Yksi malli samassa muodossa. Tuntematon malli: 404 model_not_found. |
Mallit
| Mallin nimi | Toiminta |
|---|---|
aivantage/auto | Porrastus. Pyyntö menee ensin politiikan halvimmalle askeleelle, ja laatuportit nostavat sen vahvempaan malliin vain tarvittaessa. Askeleet päätetään portaalissa. Toimii rajapinnoissa /v1/chat/completions ja /v1/messages. Jos model puuttuu, /v1/chat/completions käyttää porrastusta. |
aivantage/<id> | Lukittu malli. Pyyntö menee suoraan tälle mallille ilman porrastusta. Tunnisteen voi antaa myös ilman etuliitettä (esim. claude-sonnet). Sovelluksen sallitut mallit listaa GET /v1/models. |
gpt-5.5, grok-4.7 | Palveluntarjoajan omat mallinimet eivät käy OpenAI-muodossa: vastaus on 404 model_not_found. Käytä tunnistetta listalta /v1/models. |
claude-sonnet-5-5 | Rajapinnassa /v1/messages käyvät myös Anthropicin omat nimet, päivätyt versiot (esim. -20251001) ja pääte [1m]. Muiden palveluntarjoajien malleille vastaus on 400 messages_model_not_anthropic. |
Vastauksen model-kentässä on malli, joka vastasi (aivantage/<id>). Jos sovellus on portaalissa lukittu yhteen malliin, pyyntö menee sille. Jos lukko hylkää muut mallit, toisen mallin pyyntö palauttaa 409 app_model_locked.
Suoratoisto, työkalut ja kuvat
Suoratoisto (stream: true)
| Porrastus | Toimii molemmissa muodoissa. Porrastus valitsee vastauksen ensin, ja valmis vastaus lähetetään SSE-paloina. Ensimmäinen pala tulee siis vasta, kun vastaus on valmis. Jos politiikan stream_mode on fixed, suoratoisto alkaa heti kiinteältä mallilta. |
| Lukittu malli | Aito suoratoisto palveluntarjoajalta. Rajapinnassa /v1/messages Anthropicin tapahtumat tulevat sellaisinaan. |
/v1/responses | Ei suoratoistoa: 400 stream_not_supported. |
Työkalut (function calling)
| Porrastus | Toimii. Laatuportti tarkistaa työkalukutsun: työkalun pitää olla pyynnössä ja argumenttien kelvollista JSONia pakollisine kenttineen. Virheellinen kutsu siirtää pyynnön seuraavalle askeleelle. |
| Lukittu malli | Toimii, jos malli tukee työkaluja. Muuten 403 capability_not_supported. |
/v1/messages | Anthropicin omat työkalut (esim. verkkohaku), dokumentit ja kuvat työkalun tuloksissa toimivat vain Anthropicin malleilla. Porrastuksessa tällainen pyyntö ohittaa muut askeleet. |
/v1/responses | Työkalut x_search, web_search ja function. |
Kuvat
| Porrastus | Toimii (image_url, Anthropic-muodossa image). Askeleet, joiden kohde ei tue kuvia, ohitetaan. |
| Lukittu malli | Toimii, jos malli tukee kuvia. Muuten 403 capability_not_supported. |
/v1/responses | input_image välitetään palveluntarjoajalle. |
Tietosuojasuodatin ei lue kuvia, joten kuva on aina tarkastamaton liite. Jos politiikka estää tarkastamattomat liitteet, pyyntö estetään ennen kuin mitään lähtee: 403 privacy_blocked, syy attachment_not_inspected.
Otsakkeet
Pyynnössä
Authorization: Bearerx-api-key | AIvantage-avain. Kumpi tahansa. |
X-AIvantage-End-User | Loppukäyttäjän tunniste tietosuojalokiin. Siitä tallennetaan vain avaimellinen tiiviste. Vaihtoehtoisesti OpenAI-kenttä safety_identifier tai user tai Anthropic-kenttä metadata.user_id. |
X-AIvantage-Session-Id | Istunnon tunniste tietosuojalokiin. Claude Coden X-Claude-Code-Session-Id luetaan samoin. |
X-AIvantage-Privacy-Override | Peruste, jolla pyydetään päästämään tietosuojaesto läpi. Hyväksytään vain avaimelta, jonka politiikka nimeää, sallitulla perusteella ja sallituille tunnistetyypeille. Pyyntö kirjataan aina, hyväksyttiin se tai ei. |
anthropic-version | Rajapinnassa /v1/models lista ja virheet palautetaan Anthropicin muodossa. Rajapinnassa /v1/messages otsaketta ei välitetä, koska reititin lähettää oman versionsa. |
anthropic-beta | Välitetään Anthropicille. Tiliin sidotut betat (esim. tiedostot) välitetään vain asiakkaan omalla Anthropic-avaimella (BYOK). |
Vastauksessa
x-aivantage-request-id | Pyynnön tunniste (req_…). Sama tunniste näkyy portaalin pyyntölokissa ja virherungon kentässä request_id. Kerro se tuelle. |
Retry-After | Nopeusrajan 429-vastauksessa: sekunnit, joiden jälkeen pyynnön voi yrittää uudelleen. Mukana myös x-ratelimit-limit-*, x-ratelimit-remaining-* ja x-ratelimit-reset-*. |
x-aivantage-estimate | Arvo 1, kun /v1/messages/count_tokens palauttaa reitittimen oman arvion. |
Virheet
OpenAI-muodossa virheen syy on kentässä error.code ja luokka kentässä error.type: routing_error, policy_blocked, privacy_blocked, invalid_request_error tai billing_error.
{"error": {"message": "The model is not allowed by the tenant's policy.",
"type": "policy_blocked", "code": "model_not_allowed",
"request_id": "req_…"}}
Anthropic-muodossa (/v1/messages) tyyppi tulee HTTP-tilasta Anthropicin tapaan, ja koodi on viestin lopussa hakasulkeissa. Tila 503 no_healthy_instance palautetaan muodossa 529 overloaded_error, jotta kirjastot yrittävät uudelleen. Kun palveluntarjoaja itse hylkää pyynnön, sen oma virhe palautetaan sellaisenaan.
{"type": "error",
"error": {"type": "permission_error",
"message": "The model is not allowed by the tenant's policy. [model_not_allowed]"},
"request_id": "req_…"}
Uudelleenyritys kannattaa tiloissa 429 (odota Retry-After), 502 ja 503. Muut 4xx-virheet johtuvat pyynnöstä tai asetuksista, eikä sama pyyntö onnistu uudelleen.
| HTTP | error.code | Merkitys |
|---|---|---|
| 400 | invalid_requestinvalid_request_error | Runko ei ole JSONia tai pakollinen kenttä puuttuu (model, messages, input). |
| 400 | stream_not_supportedinvalid_request_error | /v1/responses ei suoratoista. Lähetä pyyntö ilman stream: true. |
| 400 | unsupported_toolinvalid_request_error | /v1/responses hyväksyy vain työkalut x_search, web_search ja function. |
| 400 | responses_model_not_supportedrouting_error | /v1/responses tukee vain palveluntarjoajan työkaluja tarjoavia malleja (xAI, esim. aivantage/grok). |
| 400 | messages_model_not_anthropicrouting_error | Tämä rajapinta palvelee Anthropicin malleja ja aivantage/autoa; muiden palveluntarjoajien malleille käytä /v1/chat/completions-rajapintaa. |
| 400 | messages_auto_needs_anthropicrouting_error | Pyyntö käyttää Anthropicin omaa ominaisuutta, mutta porrastuksessa ei ole käytettävää Anthropic-mallia. |
| 400 | messages_shared_account_featurerouting_error | Tiedostot, kontit, skillit ja MCP-palvelimet vaativat asiakkaan oman Anthropic-avaimen (BYOK); AIvantagen jaetulla avaimella ne eivät ole käytettävissä. |
| 400 | privacy_blockedprivacy_blocked | Tietosuojasuodatin esti pyynnön: siinä oli tunniste, jonka asiakkaan politiikka estää. Pyyntöä ei lähetetty millekään mallille. |
| 401 | invalid_api_keyinvalid_request_error | Avain puuttuu, on väärä tai poistettu. Anthropic-muodossa tyyppi on authentication_error. |
| 402 | pilot_endedbilling_error | Pilotti on päättynyt eikä palvelua ole aktivoitu. Tyyppi billing_error, Anthropic-muodossa sama. |
| 402 | provider_billingrouting_error | Palveluntarjoaja hylkäsi avaimen: saldo loppu tai kuukausiraja täynnä. Viestissä on palveluntarjoajan oma selitys. |
| 403 | privacy_blockedprivacy_blocked | Tietosuojasuodatin esti pyynnön: siinä oli tunniste, jonka asiakkaan politiikka estää. Pyyntöä ei lähetetty millekään mallille. |
| 403 | privacy_own_capacity_unsupportedprivacy_blocked | Pyynnössä oli tunniste, jonka asiakkaan politiikka ohjaa vain omalle kapasiteetille, eikä oma kapasiteetti palvele tätä rajapintaa; käytä /v1/chat/completions-rajapintaa. Pyyntöä ei lähetetty millekään mallille. |
| 403 | policy_invalidpolicy_blocked | Asiakkaan käsittelypolitiikka puuttuu tai on virheellinen; pyyntöä ei käsitelty. |
| 403 | model_not_allowedpolicy_blocked | Malli ei ole asiakkaan politiikan sallima. |
| 403 | no_eligible_instancepolicy_blocked | Politiikan sallimaa kohdetta tälle mallille ei ole. |
| 403 | capability_not_supportedpolicy_blocked | Mallin palveluntarjoaja ei tue pyynnön ominaisuutta (suoratoisto, työkalut tai kuvat). |
| 403 | no_allowed_cascade_steppolicy_blocked | Porrastuksessa ei ole politiikan sallimaa askelta. |
| 403 | jurisdiction_not_allowedpolicy_blocked | Lainkäyttöalue ei ole politiikan sallima. |
| 403 | external_not_allowedpolicy_blocked | Ulkoiset pilvipalvelut eivät ole politiikan sallimia. |
| 403 | provider_not_allowedpolicy_blocked | Palveluntarjoaja ei ole politiikan sallima. |
| 403 | sovereignty_offpolicy_blocked | Suvereniteetti on pois päältä, joten AIvantagen koneita ei käytetä. |
| 403 | dedicated_to_other_tenantpolicy_blocked | Instanssi on dedikoitu toiselle asiakkaalle. |
| 403 | critical_requires_dedicatedpolicy_blocked | Vain asiakkaalle dedikoitu oma kapasiteetti on sallittu. |
| 403 | credential_not_configuredpolicy_blocked | Politiikassa ei ole määritelty, kenen avaimella palveluntarjoajaa kutsutaan (oma vai AIvantagen). |
| 403 | billing_agreement_requiredpolicy_blocked | AIvantagen omat mallit vaativat hyväksytyn laskutussopimuksen. Käytä omaa API-avaintanne (BYOK) tai aktivoi palvelu portaalissa. |
| 403 | platform_key_not_allowedpolicy_blocked | AIvantagen API-avaimia ei käytetä asiakkaan kielimallikutsuihin ilman hyväksyttyä laskutussopimusta. Käytä omaa API-avaintanne (BYOK). |
| 403 | app_model_not_allowedpolicy_blocked | Sovelluksen malli ei ole sallituilla alueilla. Valitse sovellukselle sallittu malli. |
| 403 | sovereignty_fi_unsupportedpolicy_blocked | Sovelluksen pyynnöt kulkevat vain AIvantagen raudalla Suomessa, eikä rauta palvele tätä rajapintaa; käytä /v1/chat/completions-rajapintaa. Pyyntöä ei lähetetty millekään mallille. |
| 404 | model_not_foundrouting_error | Mallia ei ole. Käytä tunnistetta aivantage/<id> tai pelkkää <id>:tä listalta /v1/models. |
| 404 | endpoint_not_supportedinvalid_request_error | Polkua ei ole (esim. /v1/embeddings). Viestissä luetellaan tuetut rajapinnat. |
| 405 | method_not_allowedinvalid_request_error | Polku on olemassa, mutta metodi on väärä (esim. GET /v1/chat/completions). |
| 409 | app_model_lockedpolicy_blocked | Sovellus on lukittu yhteen malliin, ja sovelluksen asetus hylkää muiden mallien pyynnöt. |
| 413 | context_length_exceededrouting_error | Syöte on pidempi kuin politiikan salliman mallin konteksti. Vastausta ei palautettu. |
| 429 | usage_limit_tokenspolicy_blocked | Sovelluksen kuukausittainen tokenraja on täynnä. |
| 429 | usage_limit_eurpolicy_blocked | Sovelluksen kuukausittainen euroraja on täynnä. |
| 429 | platform_spend_limitpolicy_blocked | Asiakkaan kuukausikatto AIvantagen palveluntarjoaja-avaimille on täynnä. Käytä omaa avaintanne (BYOK) tai pyydä AIvantagea nostamaan kattoa. |
| 429 | rate_limit_exceededrequests | tokens | Asiakkaan nopeusraja täynnä: pyyntöä tai tokenia minuutissa tai samanaikaisia pyyntöjä. Syy kentässä reason, odotusaika otsakkeessa Retry-After. |
| 4xx | upstream_rejectedrouting_error | Palveluntarjoaja hylkäsi pyynnön. HTTP-tila ja viesti ovat palveluntarjoajan omat. |
| 499 | client_disconnectedrouting_error | Asiakas katkaisi suoratoiston. Näkyy vain pyyntölokissa. |
| 500 | internal_errorrouting_error | Reitittimen sisäinen virhe. Kerro tuelle request_id. |
| 502 | all_targets_failedrouting_error | Kaikki politiikan sallimat kohteet epäonnistuivat; pyyntöä ei ohjattu muualle. |
| 502 | upstream_stream_errorrouting_error | Suoratoisto katkesi palveluntarjoajan päässä kesken vastauksen. Virhe tulee viimeisenä SSE-tapahtumana. |
| 503 | no_healthy_instancerouting_error | Kaikki politiikan sallimat instanssit ovat alhaalla. |
| 503 | locked_version_unavailablerouting_error | Lukittua malliversiota ei ole saatavilla; versiota ei vaihdeta ilman hyväksyntää. |
| 503 | credential_missingrouting_error | Palveluntarjoajan avain puuttuu: oma avain (BYOK) on tallentamatta tai AIvantagen avainta ei ole asetettu. |
| 503 | app_model_unavailablepolicy_blocked | Sovelluksen lukittu malli ei ole nyt saatavilla, eikä sovellukselle ole valittu varamallia. |
| 503 | sovereignty_fi_unavailablepolicy_blocked | Sovelluksen pyynnöt kulkevat vain AIvantagen raudalla Suomessa, mutta rauta ei ole nyt käytettävissä. Pyyntöä ei lähetetty millekään mallille. |
| 503 | privacy_filter_unavailableprivacy_blocked | Tietosuojasuodatin ei saanut tarkistusta valmiiksi, ja asiakkaan politiikka vaatii sen ennen lähettämistä (fail-closed). Pyyntöä ei lähetetty millekään mallille. |
| 503 | privacy_own_capacity_unavailableprivacy_blocked | Pyynnössä oli tunniste, jonka asiakkaan politiikka ohjaa vain omalle kapasiteetille, mutta politiikan sallimaa omaa kapasiteettia tälle pyynnölle ei ole. Pyyntöä ei lähetetty millekään mallille. |
Nopeusrajat (429 rate_limit_exceeded)
Muoto on sama kuin palveluntarjoajien rajoissa: error.type on requests tai tokens, error.code on rate_limit_exceeded ja reitittimen oma syy on kentässä error.reason: tenant_rate_requests, tenant_rate_tokens, tenant_concurrency.
Tietosuojaesto (privacy_blocked)
Estetty pyyntö ei lähde millekään mallille. Kenttä error.privacy kertoo syyn (reason), selityksen suomeksi ja englanniksi (message_fi, message_en) sekä kohdat (violations), ei koskaan estettyjä arvoja.
| HTTP | error.privacy.reason | Merkitys |
|---|---|---|
| 403 | entity_blocked | Pyynnössä on tunniste, jonka politiikka estää. Kohdat: error.privacy.violations (ei arvoja). |
| 403 | attachment_not_inspected | Liitettä tai kuvaa ei voitu tarkastaa, ja politiikka estää tarkastamattomat liitteet. |
| 400 | unsupported_content | Viestissä on sisältölohko, jonka tyyppiä suodatin ei tunne. |
| 503 | request_too_long | Tarkastettavaa tekstiä on enemmän kuin asiakkaan asetusten raja. |
| 503 | filter_timeout | Tarkastus ei valmistunut ajoissa, ja politiikka vaatii sen (fail-closed). |
| 503 | filter_error | Tarkastus epäonnistui, ja politiikka vaatii sen (fail-closed). |
| 503 | privacy_own_capacity_unavailable | Pyynnössä oli tunniste, jonka asiakkaan politiikka ohjaa vain omalle kapasiteetille, mutta politiikan sallimaa omaa kapasiteettia tälle pyynnölle ei ole. Pyyntöä ei lähetetty millekään mallille. |
| 403 | privacy_own_capacity_unsupported | Pyynnössä oli tunniste, jonka asiakkaan politiikka ohjaa vain omalle kapasiteetille, eikä oma kapasiteetti palvele tätä rajapintaa; käytä /v1/chat/completions-rajapintaa. Pyyntöä ei lähetetty millekään mallille. |
Jos ohitusta pyydettiin mutta sitä ei hyväksytty, kenttä error.privacy.override kertoo syyn:
key_not_allowedPolitiikka ei salli tämän avaimen ohittaa estoa.reason_not_allowedPeruste ei ole politiikan sallittujen listalla.type_not_overridableTätä tunnistetyyppiä ei saa ohittaa.
Ei tuettu
Reititin palvelee vain yllä luetellut rajapinnat. Esimerkiksi upotukset, kuvien luonti ja puhe eivät ole käytettävissä: /v1/embeddings, /v1/images/*, /v1/audio/*, /v1/files, /v1/batches, /v1/fine_tuning/*, /v1/moderations, /v1/completions, /v1/assistants, /v1/realtime.
Tuntematon /v1-polku palauttaa tilan 404 ja tuetut rajapinnat:
{"error": {"message": "POST /v1/embeddings is not supported by AIvantage. Supported: …",
"type": "invalid_request_error", "param": null,
"code": "endpoint_not_supported"}}
Esimerkit
Korvaa <AIVANTAGE_KEY> sovelluksen avaimella. Sovelluksen sivulla portaalissa on samat esimerkit sovelluksen malleilla sekä Claude Coden ja LangChainin asetukset.
OpenAI · Python
from openai import OpenAI
client = OpenAI(
base_url="https://app.aivantage.fi/v1",
api_key="<AIVANTAGE_KEY>",
)
resp = client.chat.completions.create(
model="aivantage/auto",
messages=[{"role": "user", "content": "Hei!"}],
)
print(resp.choices[0].message.content)
OpenAI · JS/TS
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://app.aivantage.fi/v1",
apiKey: "<AIVANTAGE_KEY>",
});
const resp = await client.chat.completions.create({
model: "aivantage/auto",
messages: [{ role: "user", content: "Hei!" }],
});
console.log(resp.choices[0].message.content);
Anthropic · Python
import anthropic
client = anthropic.Anthropic(
base_url="https://app.aivantage.fi",
api_key="<AIVANTAGE_KEY>",
)
msg = client.messages.create(
model="aivantage/auto",
max_tokens=1024,
messages=[{"role": "user", "content": "Hei!"}],
)
print(msg.content[0].text)
cURL
curl https://app.aivantage.fi/v1/chat/completions \
-H "Authorization: Bearer <AIVANTAGE_KEY>" \
-H "Content-Type: application/json" \
-d '{"model": "aivantage/auto", "messages": [{"role": "user", "content": "Hei!"}]}'
curl https://app.aivantage.fi/v1/messages \
-H "x-api-key: <AIVANTAGE_KEY>" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model": "aivantage/auto", "max_tokens": 256, "messages": [{"role": "user", "content": "Hei!"}]}'
Testaa toiminnot
Näillä pyynnöillä tarkistat, että kukin toiminto toimii. Anna ensin sovelluksen avain muuttujaan: export AIVANTAGE_API_KEY=…
Suojan Naamioi, Vain oma kapasiteetti ja Estä, liitteiden esto ja Suvereniteetti ovat käytössä, kun palvelu on aktivoitu. Pilotissa Suoja vain kirjaa.
Avain ja mallilista
Tarkistaa, että avain toimii ja mitkä mallit sovellus saa käyttää.
curl -s https://app.aivantage.fi/v1/models \
-H "Authorization: Bearer $AIVANTAGE_API_KEY"
Mitä pitäisi näkyä: Tila 200. Listassa on aivantage/auto, jonka kentässä aivantage.cascade ovat porrastuksen askeleet, ja jokainen sovellukselle sallittu malli. Mallin kenttä aivantage.class kertoo, missä se ajetaan (own on AIvantagen oma kapasiteetti, muut eu, us ja cn), ja aivantage.jurisdictions maat.
Väärä avain
Tarkistaa, että väärällä avaimella ei pääse sisään.
curl -s https://app.aivantage.fi/v1/models \
-H "Authorization: Bearer vaara-avain"
Mitä pitäisi näkyä: Tila 401, error.code on invalid_api_key.
Porrastus
Tarkistaa, että porrastus valitsee mallin ja vastaa.
curl -si https://app.aivantage.fi/v1/chat/completions \
-H "Authorization: Bearer $AIVANTAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/auto","messages":[{"role":"user","content":"Vastaa yhdellä sanalla: mikä on Suomen pääkaupunki?"}]}'
Mitä pitäisi näkyä: Tila 200. Kentässä model on malli, joka vastasi (aivantage/<id>), ja se on yksi mallilistan aivantage/auto-kohdan cascade-malleista. Helppo kysymys menee yleensä ensimmäiselle askeleelle. Otsake x-aivantage-request-id on sama kuin kenttä id, ja samalla tunnisteella pyyntö näkyy portaalin pyyntölokissa. Kentässä usage ovat laskutettavat tokenit.
Lukittu malli
Tarkistaa, että pyyntö menee juuri pyydetylle mallille. Vaihda malliksi jokin tunniste mallilistalta.
curl -s https://app.aivantage.fi/v1/chat/completions \
-H "Authorization: Bearer $AIVANTAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/gpt-luna","messages":[{"role":"user","content":"Sano pelkkä: ok"}]}'
Mitä pitäisi näkyä: Tila 200, ja kentässä model on pyydetty malli. Malli, jota listalla ei ole, palauttaa 404 model_not_found.
Anthropic-muoto
Tarkistaa, että Anthropic-kirjastojen rajapinta toimii samalla avaimella.
curl -s https://app.aivantage.fi/v1/messages \
-H "x-api-key: $AIVANTAGE_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/auto","max_tokens":50,"messages":[{"role":"user","content":"Sano pelkkä: ok"}]}'
Mitä pitäisi näkyä: Tila 200. Vastaus on Anthropicin muodossa (type on message), ja kentässä model on malli, joka vastasi (aivantage/<id>).
Suoratoisto
Tarkistaa, että vastaus tulee SSE-paloina.
curl -sN https://app.aivantage.fi/v1/chat/completions \
-H "Authorization: Bearer $AIVANTAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/auto","stream":true,"messages":[{"role":"user","content":"Laske yhdestä viiteen."}]}'
Mitä pitäisi näkyä: Rivejä data: {…}, joissa object on chat.completion.chunk ja joka palassa sama id ja model. Viimeisenä tulee pala, jossa on usage, ja sitten data: [DONE].
Suoja: henkilötunnus
Tarkistaa, mitä Suoja tekee henkilötunnukselle. Malli kirjoittaa tunnisteen merkki kerrallaan, joten vastauksesta näkee, mitä malli sai. Asetus: Portaalin Suoja-sivulla Henkilötunnus-rivin toimenpide.
curl -s https://app.aivantage.fi/v1/chat/completions \
-H "Authorization: Bearer $AIVANTAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/auto","messages":[{"role":"user","content":"Kirjoita tämä tunniste merkki kerrallaan välilyönnein erotettuna, ei muuta: 131052-308T"}]}'
| Asetus | Mitä pitäisi näkyä |
|---|---|
| Kirjaa | Tila 200, ja vastauksessa on 1 3 1 0 5 2 - 3 0 8 T: malli sai arvon. Löydös näkyy vain portaalissa. |
| Naamioi | Tila 200, ja vastauksessa on H E T U _ 1: malli sai paikkamerkin. Jos malli toistaa paikkamerkin sellaisenaan, AIvantage palauttaa vastaukseen alkuperäisen arvon. |
| Vain oma kapasiteetti | Tila 200, ja kentässä model on malli, jonka aivantage.class mallilistassa on own. |
| Estä | Tila 403. error.code on privacy_blocked ja error.privacy.reason entity_blocked. Kenttä error.privacy.violations kertoo kohdan, ei arvoa. |
Suvereniteetti
Tarkistaa, että pyyntö ajetaan Suomessa. Toista pyyntö ilman henkilötunnusta ja vertaa. Asetus: Sovelluksen Suvereniteetti. Kriittiset Suomeen vaatii, että henkilötunnus on Kriittiset tiedot -listalla.
curl -s https://app.aivantage.fi/v1/chat/completions \
-H "Authorization: Bearer $AIVANTAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/auto","messages":[{"role":"user","content":"Henkilötunnus 131052-308T. Sano pelkkä: ok"}]}'
| Asetus | Mitä pitäisi näkyä |
|---|---|
| Kriittiset Suomeen | Henkilötunnuksen kanssa kentässä model on malli, jonka mallilistassa aivantage.class on own ja aivantage.jurisdictions FI. Ilman tunnistetta pyyntö reititetään tavalliseen tapaan. |
| Kaikki Suomeen | Kummassakin pyynnössä kentässä model on malli, jonka aivantage.class on own ja aivantage.jurisdictions FI. |
| Suomen kapasiteetti ei käytettävissä | Tila 503 sovereignty_fi_unavailable, jos asetus on Estä. Asetuksella Päästä pilveen ja kirjaa vastaa pilvimalli. |
Tarkastamaton liite
Tarkistaa, että kuva, jota Suoja ei voi lukea, ei lähde mallille. Asetus: Suoja-sivun Edistyneet asetukset, Liitteet: Estä pyyntö.
curl -s https://app.aivantage.fi/v1/chat/completions \
-H "Authorization: Bearer $AIVANTAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/auto","messages":[{"role":"user","content":[{"type":"text","text":"Mitä kuvassa on?"},{"type":"image_url","image_url":{"url":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="}}]}]}'
Mitä pitäisi näkyä: Tila 403. error.code on privacy_blocked ja error.privacy.reason attachment_not_inspected.
Nopeusraja
Tarkistaa, että raja pysäyttää ryöpyn. Mallia aivantage/rajatesti ei ole, joten pyynnöt eivät kuluta tokeneita.
seq 800 | xargs -P 50 -I{} curl -s -o /dev/null -w '%{http_code}\n' https://app.aivantage.fi/v1/chat/completions \
-H "Authorization: Bearer $AIVANTAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/rajatesti","messages":[{"role":"user","content":"hei"}]}' | sort | uniq -c
Mitä pitäisi näkyä: Tulosteessa on rivi 429 ja loput 404. Yksittäisessä 429-vastauksessa error.code on rate_limit_exceeded, error.reason tenant_rate_requests ja otsakkeissa Retry-After ja x-ratelimit-limit-requests.
Tuntematon rajapinta
Tarkistaa, että rajapinta, jota AIvantage ei palvele, kertoo sen.
curl -s https://app.aivantage.fi/v1/embeddings \
-H "Authorization: Bearer $AIVANTAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"aivantage/auto","input":"hei"}'
Mitä pitäisi näkyä: Tila 404, error.code on endpoint_not_supported, ja viestissä luetellaan tuetut rajapinnat.