Files changed (1) hide show
  1. app.py +36 -19
app.py CHANGED
@@ -17,8 +17,17 @@ client = OpenAI(
17
  api_key=HF_TOKEN,
18
  )
19
 
20
- # 3) Modèle supporté par HF Inference (gratuit dans la limite de la free tier)
21
- MODEL_ID = "katanemo/Arch-Router-1.5B:hf-inference"
 
 
 
 
 
 
 
 
 
22
 
23
  SYSTEM_PROMPT = """
24
  Tu es ArtGPT, un assistant spécialisé à 100% dans l'art :
@@ -27,7 +36,6 @@ Tu es ArtGPT, un assistant spécialisé à 100% dans l'art :
27
  - histoire de l'art, mouvements artistiques,
28
  - direction artistique, portfolio,
29
  - conseils logiciels et création visuelle.
30
-
31
  Règles :
32
  - Tu réponds uniquement en français.
33
  - Si la question n’est pas liée à l’art ou à la création visuelle,
@@ -41,24 +49,33 @@ def answer(question: str) -> str:
41
  if not question:
42
  return "Écris une question sur l’art pour commencer 🙂"
43
 
44
- try:
45
- completion = client.chat.completions.create(
46
- model=MODEL_ID,
47
- messages=[
48
- {"role": "system", "content": SYSTEM_PROMPT},
49
- {"role": "user", "content": question},
50
- ],
51
- max_tokens=512,
52
- temperature=0.7,
53
- top_p=0.95,
54
- )
55
 
56
- # Avec la nouvelle lib openai, le contenu est dans .message.content
57
- return completion.choices[0].message.content
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
- except Exception as e:
60
- # On affiche une erreur lisible au lieu du gros JSON
61
- return f"Erreur lors de l'appel au modèle :\n\n{e}"
 
 
 
62
 
63
  demo = gr.Interface(
64
  fn=answer,
 
17
  api_key=HF_TOKEN,
18
  )
19
 
20
+ # 3) Liste de modèles à essayer, dans l'ordre : le suffixe ":fastest" laisse
21
+ # Hugging Face choisir automatiquement un fournisseur disponible pour ce
22
+ # modèle, plutôt que de figer un fournisseur précis qui peut un jour cesser
23
+ # de le proposer (c'est exactement ce qui a cassé le modèle précédent).
24
+ # Si le premier modèle de la liste n'est plus disponible un jour, le code
25
+ # essaie automatiquement le suivant au lieu d'afficher une erreur brute.
26
+ MODEL_IDS = [
27
+ "Qwen/Qwen2.5-7B-Instruct:fastest",
28
+ "meta-llama/Llama-3.1-8B-Instruct:fastest",
29
+ "mistralai/Mistral-7B-Instruct-v0.3:fastest",
30
+ ]
31
 
32
  SYSTEM_PROMPT = """
33
  Tu es ArtGPT, un assistant spécialisé à 100% dans l'art :
 
36
  - histoire de l'art, mouvements artistiques,
37
  - direction artistique, portfolio,
38
  - conseils logiciels et création visuelle.
 
39
  Règles :
40
  - Tu réponds uniquement en français.
41
  - Si la question n’est pas liée à l’art ou à la création visuelle,
 
49
  if not question:
50
  return "Écris une question sur l’art pour commencer 🙂"
51
 
52
+ last_error = None
 
 
 
 
 
 
 
 
 
 
53
 
54
+ for model_id in MODEL_IDS:
55
+ try:
56
+ completion = client.chat.completions.create(
57
+ model=model_id,
58
+ messages=[
59
+ {"role": "system", "content": SYSTEM_PROMPT},
60
+ {"role": "user", "content": question},
61
+ ],
62
+ max_tokens=512,
63
+ temperature=0.7,
64
+ top_p=0.95,
65
+ )
66
+ # Avec la nouvelle lib openai, le contenu est dans .message.content
67
+ return completion.choices[0].message.content
68
+ except Exception as e:
69
+ # On garde l'erreur de côté et on essaie le modèle suivant de la liste.
70
+ last_error = e
71
+ continue
72
 
73
+ # Si tous les modèles de la liste ont échoué, on affiche une erreur lisible
74
+ # au lieu du gros JSON brut.
75
+ return (
76
+ "Erreur lors de l'appel au modèle (tous les modèles de secours ont "
77
+ f"échoué) :\n\n{last_error}"
78
+ )
79
 
80
  demo = gr.Interface(
81
  fn=answer,