Culture_Bot / main.py
RaghavenderReddy's picture
Upload 8 files
ebf1310 verified
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import List, Optional
import os
from dotenv import load_dotenv
from .ai_engine import CultureAI
from .content_db import CulturalDatabase
# Load environment variables
load_dotenv()
# Initialize FastAPI app
app = FastAPI(
title="CultureBot API",
description="AI-powered cultural insights and information",
version="2.1.0"
)
# Configure CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Initialize AI engine and database
culture_ai = CultureAI()
cultural_db = CulturalDatabase()
# Define Pydantic models
class ChatMessage(BaseModel):
message: str
user_id: Optional[str] = "anonymous"
class ChatResponse(BaseModel):
response: str
confidence: float
sources: List[str]
category: Optional[str] = None
class CulturalFact(BaseModel):
country: str
fact: str
category: str
source: str
@app.get("/")
async def root():
return {
"message": "Welcome to CultureBot API",
"version": "2.1.0",
"status": "active"
}
@app.post("/chat", response_model=ChatResponse)
async def chat_with_bot(message: ChatMessage):
"""
Main chat endpoint for interacting with CultureBot
"""
try:
# Get AI response
ai_response = await culture_ai.generate_response(message.message)
# Get relevant cultural facts from database
relevant_facts = cultural_db.search_facts(message.message)
return ChatResponse(
response=ai_response["response"],
confidence=ai_response["confidence"],
sources=ai_response["sources"],
category=ai_response.get("category")
)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error processing request: {str(e)}")
@app.get("/facts/random", response_model=CulturalFact)
async def get_random_fact():
"""
Get a random cultural fact
"""
try:
fact = cultural_db.get_random_fact()
return CulturalFact(**fact)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error fetching fact: {str(e)}")
@app.get("/facts/country/{country}", response_model=List[CulturalFact])
async def get_country_facts(country: str):
"""
Get cultural facts for a specific country
"""
try:
facts = cultural_db.get_facts_by_country(country)
return [CulturalFact(**fact) for fact in facts]
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error fetching country facts: {str(e)}")
@app.get("/facts/category/{category}", response_model=List[CulturalFact])
async def get_category_facts(category: str):
"""
Get cultural facts for a specific category
"""
try:
facts = cultural_db.get_facts_by_category(category)
return [CulturalFact(**fact) for fact in facts]
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error fetching category facts: {str(e)}")
@app.get("/health")
async def health_check():
"""
Health check endpoint
"""
return {
"status": "healthy",
"ai_engine": "operational",
"database": "connected"
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)