File size: 2,105 Bytes
ffabbb2
bde4d33
4969fb6
ffabbb2
57a5bec
4969fb6
 
ffabbb2
4969fb6
8eb21a5
 
7bae4bb
57a5bec
8eb21a5
 
 
 
 
 
 
 
 
ffabbb2
 
 
8eb21a5
ffabbb2
 
8eb21a5
4969fb6
ffabbb2
 
 
 
8eb21a5
4969fb6
 
 
 
 
 
795c92a
8eb21a5
 
 
 
4969fb6
 
8eb21a5
 
 
795c92a
8eb21a5
4969fb6
a01b654
4969fb6
 
 
343ddc8
8eb21a5
 
 
 
 
ffabbb2
8eb21a5
 
818b3fd
 
8eb21a5
bde4d33
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
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)