risques / main.py
stephane000's picture
Update main.py
a01b654 verified
import os
import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from openai import OpenAI
from pydantic import BaseModel
from typing import List
# 1. Configuration des accès
# On récupère votre secret nommé HF_RISQUES
API_KEY = os.getenv("HF_RISQUES")
ALBERT_BASE_URL = "https://albert.api.etalab.gouv.fr/v1"
# Initialisation du client (avec vérification pour éviter l'erreur de clé vide)
if not API_KEY:
print("ERREUR : Le secret HF_RISQUES n'est pas défini dans les paramètres du Space.")
client = None
else:
client = OpenAI(
api_key=API_KEY,
base_url=ALBERT_BASE_URL
)
app = FastAPI()
# 2. Configuration CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Modèle de données
class Message(BaseModel):
role: str
content: str
class ChatRequest(BaseModel):
messages: List[Message]
@app.get("/")
def read_root():
return {"status": "Le serveur Albert est en ligne"}
@app.post("/api/chat")
async def chat_albert(request: ChatRequest):
if not client:
return {"content": "Erreur : La clé API HF_RISQUES est manquante dans la configuration."}
try:
# Appel à l'API Albert
response = client.chat.completions.create(
model="mistralai/Mistral-Small-3.2-24B-Instruct-2506", # Modèle standard Albert
messages=[{"role": m.role, "content": m.content} for m in request.messages],
temperature=0.7,
max_tokens=1000
)
reponse_texte = response.choices[0].message.content
print(f"RÉPONSE ALBERT : {reponse_texte}") # Pour voir dans les logs HF
return {"content": reponse_texte}
except Exception as e:
print(f"ERREUR API : {str(e)}")
return {"content": f"Désolé, une erreur est survenue lors de la communication avec l'IA : {str(e)}"}
if __name__ == "__main__":
# Port 7860 obligatoire pour Hugging Face Spaces
uvicorn.run(app, host="0.0.0.0", port=7860)