Simple-Chatbot / main.py
Tamal321's picture
feat: initialize project with FastAPI backend and OpenRouter chat integration
edb4516
import os
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse, StreamingResponse
from pydantic import BaseModel
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.getenv("OPENROUTER_API_KEY"),
)
app = FastAPI(title="Simple Chatbot")
class Message(BaseModel):
role: str
content: str
class ChatRequest(BaseModel):
messages: list[Message]
@app.post("/api/chat")
async def chat(request: ChatRequest):
"""Stream a chat completion from OpenRouter."""
def generate():
stream = client.chat.completions.create(
model="openrouter/free",
messages=[m.model_dump() for m in request.messages],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
yield chunk.choices[0].delta.content
return StreamingResponse(generate(), media_type="text/plain")
# Serve the frontend
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/")
async def root():
return FileResponse("static/index.html")