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"]}