Spaces:
Runtime error
Runtime error
File size: 2,974 Bytes
c8f03da d7f32ed c8f03da 49158eb c8f03da e68e9cf c8f03da e68e9cf c8f03da 29331bd c8f03da 0288607 c8f03da 808ec17 c8f03da 1cb9532 c8f03da 03991d8 c8f03da cc3751a c8f03da 808ec17 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import os
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from hugchat import hugchat
from hugchat.login import Login
from dotenv import load_dotenv
from contextlib import asynccontextmanager
import logging
# Set up logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Load environment variables
load_dotenv()
# Initialize FastAPI app
app = FastAPI()
# HuggingFace credentials from environment variables
# HuggingFace credentials from environment variables
EMAIL = "[email protected]"
PASSWORD = "Allahisgreatest17"
ASSISTANT_ID = "682e0c1f5f0c3d952a27498e"
# Cookie directory path
COOKIE_PATH_DIR = "./cookies/"
# Global chatbot instance
chatbot = None
# Pydantic model for request body
class PromptRequest(BaseModel):
prompt: str
# Ensure cookie directory exists
def ensure_cookie_directory():
if not os.path.exists(COOKIE_PATH_DIR):
os.makedirs(COOKIE_PATH_DIR)
logger.info("Created cookie directory: %s", COOKIE_PATH_DIR)
# Lifespan handler for startup and shutdown
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup: Initialize chatbot
global chatbot
try:
# Validate credentials
if not EMAIL or not PASSWORD or not ASSISTANT_ID:
raise ValueError("HuggingFace credentials or assistant ID not provided in environment variables")
# Ensure cookie directory exists
ensure_cookie_directory()
# Log in to HuggingFace
sign = Login(EMAIL, PASSWORD)
cookies = sign.login(cookie_path_dir=COOKIE_PATH_DIR, save_cookies=True)
logger.info("Successfully logged in to HuggingFace")
# Initialize chatbot
chatbot = hugchat.ChatBot(cookies=cookies.get_dict())
# Start a new conversation
chatbot.new_conversation(assistant=ASSISTANT_ID, switch_to=True)
logger.info("Chatbot initialized with assistant ID: %s", ASSISTANT_ID)
except Exception as e:
logger.error("Failed to initialize chatbot: %s", str(e))
raise HTTPException(status_code=500, detail="Failed to initialize chatbot")
yield # Application runs here
# Shutdown: Clean up (optional)
logger.info("Shutting down application")
# Attach lifespan handler to FastAPI app
app.lifespan = lifespan
# Endpoint to handle chat requests
@app.post("/ask")
async def ask(prompt_request: PromptRequest):
try:
if not chatbot:
raise HTTPException(status_code=500, detail="Chatbot not initialized")
# Send prompt to chatbot
response = chatbot.chat(prompt_request.prompt, stream=False)
logger.info("Received response for prompt: %s", prompt_request.prompt)
# Return structured response
return {"status": "success", "response": response}
except Exception as e:
logger.error("Error processing request: %s", str(e))
raise HTTPException(status_code=500, detail=f"Error: {str(e)}")
|