API i format odgovora

Upiti

Upit se šalje na krajnju točku orkestratora /query. Svaki odgovor — bez obzira na to koji ga je stupanj cjevovoda obradio — slijedi istu Pod shemu:

{
  "query": "30% of 8 miles",
  "stage_used": 1,
  "assumptions_available": false,
  "pods": [
    { "title": "Input Interpretation", "type": "text",           "content": "8 miles × 30%" },
    { "title": "Result",               "type": "primary_result", "content": "2.4 miles" },
    { "title": "Unit Conversions",     "type": "list",           "content": ["3.862 km", "3862 m", "12672 ft"] },
    { "title": "Comparisons",          "type": "list",           "content": ["≈ 16× length of the Hindenburg"] }
  ]
}

Sastavljanje podova uvijek na početak dodaje pod Input Interpretation, a na kraj Comparisons kada se numerički rezultat podudara s poznatom referencom veličine.

Vrste podova

Vrsta Značenje
text Običan tekst
primary_result Glavni odgovor
list Lista povezanih vrijednosti
latex LaTeX zapis (rezultati simboličke matematike)
image Base64/URL slika (grafovi)
assumption Označena pretpostavka korištena u izračunu
error Objašnjenje greške
did_you_mean Prijedlozi razrješenja za višeznačne entitete

Polje stage_used izvještava koji je stupanj cjevovoda proizveo odgovor (1 = brzi put gramatika, 2/3 = LLM planiranje), a assumptions_available signalizira da su priložene pretpostavke Fermijevog tipa.

Ograničenje broja zahtjeva

Flask-Limiter nameće 30 zahtjeva u minuti po API ključu (zaglavlje X-API-Key) ili IP adresi klijenta. Ograničenja se pohranjuju u Redis kada je dostupan.

Keširanje

  • Ključ keša: SHA-256 upita (neosjetljivo na velika/mala slova), s prefiksom jezika i naznake domene kada nisu zadani.
  • TTL po domeni: vrijeme 10 min, datumi 1 h, činjenice 24 h, matematika neograničeno.
  • Odgovori koji sadrže error podove nikada se ne keširaju.
  • Redis kroz compose; pričuvno ograničeni LRU u memoriji kada Redis nije dostupan.

Sigurnosne kontrole i kontrole resursa

Kontrola Mehanizam
Ograničenje duljine upita 500 znakova na /query; 1000 znakova za izraze u data API-ju
Sanitizacija izraza za grafove Regex s dopuštenim znakovima prije sympy parsera
Zaštita od SQL injekcija select polja konektora provjeravaju se prema bijelim listama stupaca
Vremenska ograničenja procesa qalc potproces: 10 s; HTTP pozivi alata: 10–30 s

Metrike

Brojači u procesu izloženi su na GET /metrics na orkestratoru.