from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from pydantic import BaseModel
import json, requests
app=FastAPI()
CFG="config.json"
class Config(BaseModel):
base_url:str
api_key:str
model:str
class Prompt(BaseModel):
prompt:str
def load():
try:
return json.load(open(CFG))
except:
return {"base_url":"https://openrouter.ai/api/v1","api_key":"","model":"google/gemma-3-27b-it"}
HTML="""
Simple AI Backend
Base URL
API Key
Model
"""
@app.get("/")
def home(): return HTMLResponse(HTML)
@app.get("/config")
def config(): return load()
@app.post("/save")
def save(cfg:Config):
json.dump(cfg.model_dump(),open(CFG,"w"),indent=2)
return {"success":True}
@app.post("/generate")
def generate(data:Prompt):
c=load()
r=requests.post(c["base_url"].rstrip("/")+"/chat/completions",
headers={"Authorization":"Bearer "+c["api_key"],"Content-Type":"application/json"},
json={"model":c["model"],"messages":[{"role":"user","content":data.prompt}]},timeout=300)
r.raise_for_status()
return {"text":r.json()["choices"][0]["message"]["content"]}