Usman-Portfolio / app.py
Numan-Symufolk
Increase max tokens to 1024
61b5b6b
Raw
History Blame Contribute Delete
1.85 kB
"""
Usman's Agent — portfolio chat endpoint powered by Gemini API.
Deploy on a Hugging Face Space (SDK: Docker).
Set GEMINI_API_KEY as a Space secret.
The portfolio frontend POSTs to /chat with { messages: [...], system: "..." }
and expects { reply: "..." }.
"""
import os
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from google import genai
from google.genai import types
GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY", "")
MODEL_ID = os.environ.get("MODEL_ID", "gemini-2.5-flash")
MAX_NEW_TOKENS = int(os.environ.get("MAX_NEW_TOKENS", "1024"))
HISTORY_TURNS = int(os.environ.get("HISTORY_TURNS", "8"))
client = genai.Client(api_key=GEMINI_API_KEY)
app = FastAPI(title="Usman's Agent")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["POST", "GET", "OPTIONS"],
allow_headers=["*"],
)
class ChatRequest(BaseModel):
messages: list
system: str | None = None
@app.get("/")
def health():
return {"status": "ok", "model": MODEL_ID}
@app.post("/chat")
def chat(req: ChatRequest):
system = req.system or ""
turns = [m for m in req.messages if m.get("role") in ("user", "assistant")][-HISTORY_TURNS:]
history = []
for m in turns[:-1]:
role = "model" if m["role"] == "assistant" else "user"
history.append(types.Content(role=role, parts=[types.Part(text=m["content"])]))
last = turns[-1]["content"] if turns else ""
chat_session = client.chats.create(
model=MODEL_ID,
config=types.GenerateContentConfig(
system_instruction=system,
max_output_tokens=MAX_NEW_TOKENS,
temperature=0.7,
),
history=history,
)
response = chat_session.send_message(last)
reply = response.text.strip()
return {"reply": reply}