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)