stephane000 commited on
Commit
57a5bec
·
verified ·
1 Parent(s): 343ddc8

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +38 -44
main.py CHANGED
@@ -1,66 +1,60 @@
1
  import os
2
- import json
3
  import uvicorn
4
- import re
5
  from fastapi import FastAPI
6
  from fastapi.middleware.cors import CORSMiddleware
7
- from huggingface_hub import InferenceClient
 
 
8
 
9
- # Configuration du modèle
10
- MODEL_ID = "Qwen/Qwen2.5-Coder-32B-Instruct"
11
- token = os.getenv("HF_TOKEN")
12
- client = InferenceClient(api_key=token)
 
 
 
 
 
 
13
 
14
  app = FastAPI()
15
 
 
16
  app.add_middleware(
17
  CORSMiddleware,
18
- allow_origins=["*"],
 
19
  allow_methods=["*"],
20
  allow_headers=["*"],
21
  )
22
 
23
- # --- ROUTE POUR PROJET 1 : ANTIBIODRAME ---
 
 
 
 
 
 
 
24
  @app.post("/api/chat")
25
- async def chat_antibio(data: dict):
26
- messages = data.get("messages", [])
27
  try:
28
- response = client.chat_completion(
29
- model=MODEL_ID,
30
- messages=messages,
31
- max_tokens=500,
32
- temperature=0.7
 
 
33
  )
34
- return response
35
- except Exception as e:
36
- return {"choices": [{"message": {"content": "Erreur technique Albert (Antibio)."}}]}
37
 
38
- # --- ROUTE POUR PROJET 2 : SÉISMES (VERIFY) ---
39
- @app.post("/verify")
40
- async def verify_seisme(data: dict):
41
- question_eleve = data.get("userLatex", "").strip()
42
- ville = data.get("expectedLatex", "Toulouse")
43
-
44
- system_prompt = f"""Tu es Albert, tuteur SVT. L'élève étudie les séismes à {ville}.
45
- Réponds en JSON uniquement : {{"isCorrect": boolean, "feedback": "ton aide"}}.
46
- Utilise la méthode socratique."""
47
-
48
- try:
49
- response = client.chat_completion(
50
- model=MODEL_ID,
51
- messages=[
52
- {"role": "system", "content": system_prompt},
53
- {"role": "user", "content": question_eleve}
54
- ],
55
- max_tokens=300,
56
- temperature=0.1
57
- )
58
- content = response.choices[0].message.content
59
- # Extraction du JSON au cas où l'IA bavarde autour
60
- match = re.search(r'\{.*\}', content, re.DOTALL)
61
- return json.loads(match.group()) if match else json.loads(content)
62
  except Exception as e:
63
- return {"isCorrect": False, "feedback": "Albert est indisponible pour les séismes."}
 
64
 
65
  if __name__ == "__main__":
 
66
  uvicorn.run(app, host="0.0.0.0", port=7860)
 
1
  import os
 
2
  import uvicorn
 
3
  from fastapi import FastAPI
4
  from fastapi.middleware.cors import CORSMiddleware
5
+ from openai import OpenAI
6
+ from pydantic import BaseModel
7
+ from typing import List
8
 
9
+ # 1. Configuration des accès
10
+ # Assurez-vous d'avoir défini ALBERT_API_KEY dans vos secrets Hugging Face
11
+ ALBERT_API_KEY = os.getenv("ALBERT_API_KEY")
12
+ ALBERT_BASE_URL = "https://albert.playground.etalab.gouv.fr/api/v1"
13
+
14
+ # Initialisation du client compatible Albert
15
+ client = OpenAI(
16
+ api_key=ALBERT_API_KEY,
17
+ base_url=ALBERT_BASE_URL
18
+ )
19
 
20
  app = FastAPI()
21
 
22
+ # 2. Configuration CORS pour autoriser votre frontend React
23
  app.add_middleware(
24
  CORSMiddleware,
25
+ allow_origins=["*"], # En production, remplacez par l'URL de votre front
26
+ allow_credentials=True,
27
  allow_methods=["*"],
28
  allow_headers=["*"],
29
  )
30
 
31
+ # Modèle de données pour valider les requêtes entrantes
32
+ class Message(BaseModel):
33
+ role: str
34
+ content: str
35
+
36
+ class ChatRequest(BaseModel):
37
+ messages: List[Message]
38
+
39
  @app.post("/api/chat")
40
+ async def chat_albert(request: ChatRequest):
 
41
  try:
42
+ # Appel au modèle souverain
43
+ # Note : "albert-light-pro" est un exemple, vérifiez le nom sur le playground
44
+ response = client.chat.completions.create(
45
+ model="albert-light-pro",
46
+ messages=[m.dict() for m in request.messages],
47
+ temperature=0.7,
48
+ max_tokens=1000
49
  )
50
+
51
+ # On renvoie le contenu du message à l'élève
52
+ return {"content": response.choices[0].message.content}
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  except Exception as e:
55
+ print(f"Erreur lors de l'appel à Albert : {str(e)}")
56
+ return {"content": "Désolé, le Dr. Albert est indisponible pour le moment."}
57
 
58
  if __name__ == "__main__":
59
+ # Hugging Face utilise souvent le port 7860
60
  uvicorn.run(app, host="0.0.0.0", port=7860)