jojonocode commited on
Commit
1cb924f
·
verified ·
1 Parent(s): ebbe976

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -28
app.py CHANGED
@@ -11,11 +11,10 @@ HF_TOKEN = os.environ.get("HF_TOKEN")
11
 
12
  print("🚀 Chargement de Strive V6 (CPU Stable)...")
13
 
14
- # 1. Tokenizer (Configuré pour Gemma-2)
15
  tokenizer = AutoTokenizer.from_pretrained(LORA_ADAPTER, token=HF_TOKEN)
16
- tokenizer.padding_side = 'right'
17
 
18
- # 2. Modèle
19
  model = AutoModelForCausalLM.from_pretrained(
20
  BASE_MODEL,
21
  torch_dtype=torch.float32,
@@ -34,23 +33,17 @@ Créateur : Elisée Joel ADZONYA. Équipe : Yavin MITEKOR, Mariette HOUDI, Chris
34
  DIRECTIVES : Réponds exclusivement en langue Ewe (Gbe). Sois direct et concis."""
35
 
36
  def generate_response(message, history):
37
- # Construction propre du prompt Gemma-2
38
  full_prompt = f"<start_of_turn>system\n{SYSTEM_PROMPT}<end_of_turn>\n"
39
 
40
- # Gestion de l'historique (Prend les 2 derniers échanges)
41
- for interaction in history[-2:]:
42
- # Gradio peut envoyer des dicts ou des listes selon la version
43
- if isinstance(interaction, dict):
44
- user_text = interaction.get("user", "")
45
- bot_text = interaction.get("options", {}).get("value", "") # Dépend de la version Gradio
46
- if not bot_text: bot_text = interaction.get("content", "")
47
- else:
48
- user_text, bot_text = interaction
49
-
50
- full_prompt += f"<start_of_turn>user\n{user_text}<end_of_turn>\n"
51
- full_prompt += f"<start_of_turn>model\n{bot_text}<end_of_turn>\n"
52
 
53
- # Message actuel
54
  full_prompt += f"<start_of_turn>user\n{message}<end_of_turn>\n<start_of_turn>model\n"
55
 
56
  # Inférence
@@ -59,30 +52,24 @@ def generate_response(message, history):
59
  with torch.no_grad():
60
  outputs = model.generate(
61
  **inputs,
62
- max_new_tokens=200, # Augmenté pour éviter les réponses de 1 mot
63
- temperature=0.4, # Un peu plus de créativité pour éviter les réponses figées
64
  repetition_penalty=1.2,
65
  do_sample=True,
66
  pad_token_id=tokenizer.eos_token_id,
67
  eos_token_id=tokenizer.eos_token_id
68
  )
69
 
70
- # Décodage précis (en sautant le prompt)
71
- raw_output = tokenizer.decode(outputs[0], skip_special_tokens=True)
72
-
73
- # On nettoie pour ne garder que la réponse après le dernier message utilisateur
74
- # (Gemma-2 peut parfois répéter le prompt si mal géré)
75
  response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
76
 
77
  return response.strip()
78
 
79
- # --- INTERFACE ---
80
- # Utilisation de gr.Chatbot avec format 'messages' pour plus de stabilité
81
  demo = gr.ChatInterface(
82
  fn=generate_response,
83
- type="messages", # Crucial pour les nouvelles versions de Gradio
84
  title="💎 Strive AI V6 - Officiel (CPU)",
85
- description="Intelligence experte en Ewe. Si la réponse met du temps à venir, c'est normal sur CPU gratuit.",
86
  examples=["Ame kae nye Elisée ADZONYA?", "Lomé nye afi ka?", "Nàkplɔ miam aleke nàwɔ nàde ŋkɔ le sukuu me."],
87
  )
88
 
 
11
 
12
  print("🚀 Chargement de Strive V6 (CPU Stable)...")
13
 
14
+ # 1. Tokenizer
15
  tokenizer = AutoTokenizer.from_pretrained(LORA_ADAPTER, token=HF_TOKEN)
 
16
 
17
+ # 2. Modèle (Optimisé pour la RAM du Space gratuit)
18
  model = AutoModelForCausalLM.from_pretrained(
19
  BASE_MODEL,
20
  torch_dtype=torch.float32,
 
33
  DIRECTIVES : Réponds exclusivement en langue Ewe (Gbe). Sois direct et concis."""
34
 
35
  def generate_response(message, history):
36
+ # Formatage propre du prompt Gemma-2 sans l'argument 'type'
37
  full_prompt = f"<start_of_turn>system\n{SYSTEM_PROMPT}<end_of_turn>\n"
38
 
39
+ # Gestion de l'historique format standard Gradio [[user, bot], ...]
40
+ if history:
41
+ for user_msg, bot_msg in history[-2:]: # On garde les 2 derniers échanges
42
+ if user_msg and bot_msg:
43
+ full_prompt += f"<start_of_turn>user\n{user_msg}<end_of_turn>\n"
44
+ full_prompt += f"<start_of_turn>model\n{bot_msg}<end_of_turn>\n"
 
 
 
 
 
 
45
 
46
+ # Nouveau message
47
  full_prompt += f"<start_of_turn>user\n{message}<end_of_turn>\n<start_of_turn>model\n"
48
 
49
  # Inférence
 
52
  with torch.no_grad():
53
  outputs = model.generate(
54
  **inputs,
55
+ max_new_tokens=150,
56
+ temperature=0.5, # Un peu plus haut pour éviter les réponses bloquées
57
  repetition_penalty=1.2,
58
  do_sample=True,
59
  pad_token_id=tokenizer.eos_token_id,
60
  eos_token_id=tokenizer.eos_token_id
61
  )
62
 
63
+ # Décodage en ignorant le prompt de départ
 
 
 
 
64
  response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
65
 
66
  return response.strip()
67
 
68
+ # --- INTERFACE (Version sans l'argument 'type') ---
 
69
  demo = gr.ChatInterface(
70
  fn=generate_response,
 
71
  title="💎 Strive AI V6 - Officiel (CPU)",
72
+ description="Intelligence experte en Ewe. Créateur : Elisée Joel ADZONYA.",
73
  examples=["Ame kae nye Elisée ADZONYA?", "Lomé nye afi ka?", "Nàkplɔ miam aleke nàwɔ nàde ŋkɔ le sukuu me."],
74
  )
75