ernestmindres commited on
Commit
b94d46c
·
verified ·
1 Parent(s): 4e50f39

Update model_handler.py

Browse files
Files changed (1) hide show
  1. model_handler.py +99 -99
model_handler.py CHANGED
@@ -1,99 +1,99 @@
1
- import os
2
- import requests
3
- import json
4
- import time
5
- import sys
6
- from config import GEMINI_API_KEY_INTERNAL, GEMINI_MODEL_NAME, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE
7
-
8
- # Le modèle est maintenant une API externe
9
- # On utilise requests pour simplifier l'intégration et simuler l'appel curl de l'utilisateur.
10
-
11
- # URL de l'API Gemini
12
- API_URL = f"https://generativelanguage.googleapis.com/v1beta/models/{GEMINI_MODEL_NAME}:generateContent"
13
-
14
- # Indicateur de chargement du "modèle" (ici, de la clé API)
15
- MODEL_LOADED_SUCCESSFULLY = False
16
-
17
- # Vérification simple de la clé API
18
- if GEMINI_API_KEY_INTERNAL:
19
- print(f"INFO: Clé API Gemini détectée. Modèle configuré pour utiliser {GEMINI_MODEL_NAME}.")
20
- MODEL_LOADED_SUCCESSFULLY = True
21
- else:
22
- print("ALERTE: Clé API Gemini non trouvée dans la configuration. Le service de génération ne fonctionnera pas.", file=sys.stderr)
23
-
24
-
25
- # Le prompt système (System Instruction) pour guider le modèle
26
- SYSTEM_PROMPT = "Vous êtes un assistant IA appler Ernestmind, expert en programmation, développement web (full-stack), et résolution de problèmes techniques. Répondez de manière concise, précise et professionnelle selon la langue utilisateur, en utilisant la mise en forme Markdown appropriée (blocs de code si nécessaire)."
27
-
28
- def get_model_instance():
29
- """
30
- Simule la récupération de l'instance du modèle, renvoyant simplement l'état du service API.
31
- """
32
- class GeminiAPIClient:
33
- def __init__(self, model_name):
34
- self.model_name = model_name
35
- self.model_path = f"API Gemini ({self.model_name})"
36
-
37
- return GeminiAPIClient(GEMINI_MODEL_NAME)
38
-
39
-
40
- def generate_code_response(user_prompt, max_tokens, temperature):
41
- """
42
- Génère la réponse via l'API REST de Gemini.
43
- """
44
- if not MODEL_LOADED_SUCCESSFULLY:
45
- return "Erreur de configuration: L'API Gemini n'est pas initialisée (clé manquante)."
46
-
47
- # Payload de la requête API REST
48
- payload = {
49
- "contents": [
50
- {
51
- "role": "user",
52
- "parts": [
53
- # Combinaison du System Prompt et du User Prompt pour une meilleure instruction
54
- {"text": f"SYSTEM INSTRUCTION: {SYSTEM_PROMPT}\n\nUSER QUERY: {user_prompt}"}
55
- ]
56
- }
57
- ],
58
- "config": {
59
- "maxOutputTokens": max_tokens,
60
- "temperature": temperature,
61
- }
62
- }
63
-
64
- # En-têtes HTTP
65
- headers = {
66
- 'Content-Type': 'application/json',
67
- # Utilisation de la clé dans l'en-tête, comme dans l'exemple curl de l'utilisateur.
68
- 'X-goog-api-key': GEMINI_API_KEY_INTERNAL,
69
- }
70
-
71
- try:
72
- # Appel à l'API REST
73
- # Augmentation du timeout pour les réponses potentiellement longues
74
- response = requests.post(API_URL, headers=headers, data=json.dumps(payload), timeout=180)
75
-
76
- # Vérification du statut HTTP
77
- if response.status_code != 200:
78
- error_data = response.json()
79
- error_details = error_data.get('error', {}).get('message', 'Détails non disponibles')
80
- print(f"Erreur d'API Gemini (Code {response.status_code}): {error_details}", file=sys.stderr)
81
- return f"Erreur de l'API Gemini: {error_details}"
82
-
83
- # Extraction du texte
84
- response_data = response.json()
85
-
86
- # Le texte est dans response_data['candidates'][0]['content']['parts'][0]['text']
87
- candidates = response_data.get('candidates')
88
- if candidates and candidates[0].get('content'):
89
- text = candidates[0]['content']['parts'][0]['text']
90
- return text.strip()
91
-
92
- return "Réponse vide reçue de l'API Gemini."
93
-
94
- except requests.exceptions.RequestException as e:
95
- print(f"Erreur réseau lors de l'appel API Gemini: {e}", file=sys.stderr)
96
- return f"Erreur de communication avec l'API Gemini: {e}"
97
- except Exception as e:
98
- print(f"Erreur inattendue lors de la génération: {e}", file=sys.stderr)
99
- return f"Erreur interne lors du traitement de la réponse: {e}"
 
1
+ import os
2
+ import requests
3
+ import json
4
+ import time
5
+ import sys
6
+ from config import GEMINI_API_KEY_INTERNAL, GEMINI_MODEL_NAME, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE
7
+
8
+ # Le modèle est maintenant une API externe
9
+ # On utilise requests pour simplifier l'intégration et simuler l'appel curl de l'utilisateur.
10
+
11
+ # URL de l'API Gemini
12
+ API_URL = f"https://generativelanguage.googleapis.com/v1beta/models/{GEMINI_MODEL_NAME}:generateContent"
13
+
14
+ # Indicateur de chargement du "modèle" (ici, de la clé API)
15
+ MODEL_LOADED_SUCCESSFULLY = False
16
+
17
+ # Vérification simple de la clé API
18
+ if GEMINI_API_KEY_INTERNAL:
19
+ print(f"INFO: Clé API Gemini détectée. Modèle configuré pour utiliser {GEMINI_MODEL_NAME}.")
20
+ MODEL_LOADED_SUCCESSFULLY = True
21
+ else:
22
+ print("ALERTE: Clé API Gemini non trouvée dans la configuration. Le service de génération ne fonctionnera pas.", file=sys.stderr)
23
+
24
+
25
+ # Le prompt système (System Instruction) pour guider le modèle
26
+ SYSTEM_PROMPT = "Vous êtes un assistant IA appler Ernestmind, expert en programmation, développement web (full-stack), et résolution de problèmes techniques. Répondez de manière concise, précise et professionnelle selon la langue utilisateur, en utilisant la mise en forme Markdown appropriée (blocs de code si nécessaire)."
27
+
28
+ def get_model_instance():
29
+ """
30
+ Simule la récupération de l'instance du modèle, renvoyant simplement l'état du service API.
31
+ """
32
+ class GeminiAPIClient:
33
+ def __init__(self, model_name):
34
+ self.model_name = model_name
35
+ self.model_path = f"API Gemini ({self.model_name})"
36
+
37
+ return GeminiAPIClient(GEMINI_MODEL_NAME)
38
+
39
+
40
+ def generate_code_response(user_prompt, max_tokens, temperature):
41
+ """
42
+ Génère la réponse via l'API REST de Gemini.
43
+ """
44
+ if not MODEL_LOADED_SUCCESSFULLY:
45
+ return "Erreur de configuration: L'API Gemini n'est pas initialisée (clé manquante)."
46
+
47
+ # Payload de la requête API REST
48
+ payload = {
49
+ "contents": [
50
+ {
51
+ "role": "user",
52
+ "parts": [
53
+ # Combinaison du System Prompt et du User Prompt pour une meilleure instruction
54
+ {"text": f"SYSTEM INSTRUCTION: {SYSTEM_PROMPT}\n\nUSER QUERY: {user_prompt}"}
55
+ ]
56
+ }
57
+ ],
58
+ "generationConfig": { # <--- C'EST LA CORRECTION
59
+ "maxOutputTokens": max_tokens,
60
+ "temperature": temperature,
61
+ }
62
+ }
63
+
64
+ # En-têtes HTTP
65
+ headers = {
66
+ 'Content-Type': 'application/json',
67
+ # Utilisation de la clé dans l'en-tête, comme dans l'exemple curl de l'utilisateur.
68
+ 'X-goog-api-key': GEMINI_API_KEY_INTERNAL,
69
+ }
70
+
71
+ try:
72
+ # Appel à l'API REST
73
+ # Augmentation du timeout pour les réponses potentiellement longues
74
+ response = requests.post(API_URL, headers=headers, data=json.dumps(payload), timeout=180)
75
+
76
+ # Vérification du statut HTTP
77
+ if response.status_code != 200:
78
+ error_data = response.json()
79
+ error_details = error_data.get('error', {}).get('message', 'Détails non disponibles')
80
+ print(f"Erreur d'API Gemini (Code {response.status_code}): {error_details}", file=sys.stderr)
81
+ return f"Erreur de l'API Gemini: {error_details}"
82
+
83
+ # Extraction du texte
84
+ response_data = response.json()
85
+
86
+ # Le texte est dans response_data['candidates'][0]['content']['parts'][0]['text']
87
+ candidates = response_data.get('candidates')
88
+ if candidates and candidates[0].get('content'):
89
+ text = candidates[0]['content']['parts'][0]['text']
90
+ return text.strip()
91
+
92
+ return "Réponse vide reçue de l'API Gemini."
93
+
94
+ except requests.exceptions.RequestException as e:
95
+ print(f"Erreur réseau lors de l'appel API Gemini: {e}", file=sys.stderr)
96
+ return f"Erreur de communication avec l'API Gemini: {e}"
97
+ except Exception as e:
98
+ print(f"Erreur inattendue lors de la génération: {e}", file=sys.stderr)
99
+ return f"Erreur interne lors du traitement de la réponse: {e}"