Gå til innhold

Backend – FastAPI

Fil: API/python/app/app.py

Oppstart og konfigurasjon

Applikasjonen lastes med uvicorn via START_CHATBOT_v2.ps1:

$PythonExe -m uvicorn app.app:app --host 127.0.0.1 --port 8000

Miljøvariabler lastes fra .env-filen spesifisert av ENV_PATH-miljøvariabelen (standard: API/chatbot/.env).

Nøkkelvariabler (fra .env)

Variabel Beskrivelse
GEMINI_API_KEY Google Gemini API-nøkkel
CACHE_DIR Sti til JSON-cache-mappe
LOG_DIR Sti til loggmappe
ALLOWED_TENANT_ID ⚠️ Hardkodet til "SKI" i kode

Kjent begrensning

ALLOWED_TENANT_ID = "SKI" er hardkodet på linje 20 i app.py. Alle forespørsler med annen tenant_id avvises med HTTP 403. Dette må fjernes for full multitenant-støtte.

Endepunkter

POST /api/chat

Mottar en chatmelding og returnerer AI-svar.

Forespørselsmodell:

class ChatRequest(BaseModel):
    tenant_id: str
    message: str
    history: list[dict]  # [{"role": "user"|"assistant", "content": "..."}]

Svarmodell:

{
  "reply": "Driving range er åpen fra kl. 08:00 til 21:00 i sommer."
}

Feilkoder:

Kode Årsak
403 tenant_id er ikke ALLOWED_TENANT_ID
404 Ingen cache-fil funnet for tenant
500 Gemini-feil eller intern serverfeil

GET /health

Returnerer enkel helsestatus:

{"status": "ok", "tenant": "SKI"}

Systemprompten

build_system_prompt(tenant_id) leser cache/{tenant_id}_context.json og konstruerer en systemmelding til Gemini som inneholder:

  • Klubbens navn og basisinfo
  • Relevante data fra alle synkroniserte tabeller (nyheter, aktiviteter, baneinfo, osv.)
  • Instruks om å svare kun på norsk (eller det språket gjesten bruker)
  • Instruks om å begrense svar til klubbrelevant informasjon

Logging

log_interaction(tenant_id, message, reply) skriver til {LOG_DIR}/{tenant_id}_chat.jsonl:

{"ts": "2026-05-02T14:23:00Z", "tenant": "SKI", "user": "Hei", "bot": "Hei! Hva kan jeg hjelpe deg med?"}

Logger inneholder ikke IP-adresser eller personidentifiserende informasjon.

Fil: API/chatbot/requirements.txt

fastapi==0.116.1
uvicorn[standard]==0.35.0
pyodbc==5.2.0
python-dotenv==1.1.1
google-genai>=1.15.0

Fil: API/chatbot/.env.example

Malen som brukes for å opprette .env ved installasjon. Inneholder aldri ekte verdier – se .gitignore.

GEMINI_API_KEY=your-gemini-api-key-here
DB_SERVER=your-sql-server
DB_DATABASE=master
DB_USERNAME=your-db-user
DB_PASSWORD=your-db-password
ODBC_DRIVER=ODBC Driver 17 for SQL Server
CACHE_DIR=C:\ftp\sites\clubsite-4\API\chatbot\cache
LOG_DIR=C:\ftp\sites\clubsite-4\API\chatbot\logs