hostserver3 / main.py
abdullahalioo's picture
Update main.py
cbb83bf verified
raw
history blame
3.21 kB
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from hugchat import hugchat
from hugchat.login import Login
import os
app = FastAPI()
# Pydantic model for request body
class QuestionRequest(BaseModel):
question: str
# Global variable to store the chatbot instance
chatbot = None
def setup_chatbot(email, password, cookie_path, assistant_id):
"""
Sets up the Hugging Face chatbot with login and conversation.
Args:
email (str): User email for login
password (str): User password for login
cookie_path (str): Directory to store cookies
assistant_id (str): ID of the assistant to use
Returns:
hugchat.ChatBot: Configured chatbot instance
"""
try:
# Create cookie directory if it doesn't exist
os.makedirs(cookie_path, exist_ok=True)
sign = Login(email, password)
cookies = sign.login(cookie_dir_path=cookie_path, save_cookies=True)
chatbot = hugchat.ChatBot(cookies=cookies.get_dict())
chatbot.new_conversation(assistant=assistant_id, switch_to=True)
return chatbot
except Exception as e:
raise Exception(f"Failed to set up chatbot: {e}")
# Initialize chatbot at startup
@app.on_event("startup")
async def startup_event():
global chatbot
# Credentials and configuration
EMAIL = os.getenv("EMAIL")
PASSWD = os.getenv("PASSWD")
COOKIE_PATH_DIR = "./cookies/"
ASSISTANT_ID = "682e0c1f5f0c3d952a27498e" # Replace with your actual assistant ID
chatbot = setup_chatbot(EMAIL, PASSWD, COOKIE_PATH_DIR, ASSISTANT_ID)
@app.post("/generate")
async def generate_response(request: QuestionRequest):
"""
Generates a response from the AI based on the provided question.
Args:
request (QuestionRequest): JSON body containing the question.
Returns:
dict: A dictionary containing the AI's response or an error message.
"""
global chatbot
if chatbot is None:
raise HTTPException(status_code=500, detail="Chatbot not initialized. Please try again later.")
try:
# Generate response (non-streaming for simplicity)
response_data = chatbot.chat(request.question, stream=False)
# Extract the actual response text
# The response may be a dictionary; check for 'gen' or other keys
if isinstance(response_data, dict):
# Assuming 'gen' contains the response text (list of strings)
response_text = "".join(response_data.get("gen", [])) if response_data.get("gen") else "Here's what we can do: Let's discuss your vision!"
if not response_text:
# Fallback to a default premium response if 'gen' is empty
response_text = f"Welcome, valued client! How can Abdullah Ali and our premium team bring your vision to life with a custom website or AI chatbot?"
else:
response_text = response_data # Direct string response (if hugchat returns string)
return {"response": response_text}
except Exception as e:
raise HTTPException(status_code=500, detail=f"Failed to generate response: {str(e)}")