mz_chatbot / main.py
Shurem's picture
added chatbot
41f012a
Raw
History Blame Contribute Delete
2.8 kB
"""
FastAPI Learning Assistant for Maryam & Zayn educational platform
"""
import os
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import List, Optional
from dotenv import load_dotenv
from agent import MaryamZaynChatbot
# Load environment variables
load_dotenv()
# Initialize FastAPI app
app = FastAPI(
title="Maryam & Zayn Learning Assistant API",
description="AI-powered learning assistant for Maryam & Zayn — Pakistan's first character-based educational platform",
version="1.0.0"
)
# CORS configuration for frontend access
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Configure specific origins in production
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Request/Response models
class ChatMessage(BaseModel):
role: str
content: str
class ChatRequest(BaseModel):
message: str
history: Optional[List[ChatMessage]] = []
class ChatResponse(BaseModel):
response: str
success: bool
# Initialize chatbot
chatbot = MaryamZaynChatbot()
@app.get("/")
async def root():
"""Health check endpoint"""
return {
"status": "online",
"message": "Maryam & Zayn Learning Assistant is running",
"version": "1.0.0"
}
@app.get("/health")
async def health_check():
"""Health check for deployment monitoring"""
return {"status": "healthy"}
@app.post("/chat", response_model=ChatResponse)
async def chat(request: ChatRequest):
"""
Chat endpoint for learning questions
- **message**: User's question about subjects or platform features
- **history**: Optional conversation history for context
"""
try:
# Get response from chatbot agent
response = await chatbot.chat(
message=request.message,
history=request.history
)
return ChatResponse(
response=response,
success=True
)
except Exception as e:
raise HTTPException(
status_code=500,
detail=f"Error processing chat: {str(e)}"
)
@app.get("/info")
async def get_info():
"""Get platform information"""
return {
"platform": "Maryam & Zayn",
"tagline": "Pakistan's first character-based learning platform",
"target": "Pakistani children in Classes 1–8 (ages 5–13)",
"subjects": [
"Urdu", "English", "Mathematics",
"Islamiat", "General Knowledge", "Basic Science"
],
"availability": ["Android", "iOS", "Web"]
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"main:app",
host="0.0.0.0",
port=int(os.getenv("PORT", 7860)),
reload=True
)