CVision-assitant commited on
Commit
4ea092a
·
verified ·
1 Parent(s): 503f91e

Update modules/llm/hybrid_llm.py

Browse files
Files changed (1) hide show
  1. modules/llm/hybrid_llm.py +33 -39
modules/llm/hybrid_llm.py CHANGED
@@ -17,35 +17,40 @@ class HybridLLM:
17
  2) Fallback NVIDIA Llama
18
 
19
  Prioridad:
20
- API ingresada por usuario > .env
21
  """
22
 
23
- # 🔐 Prioridad a claves dinámicas
24
  self.gemini_api_key = gemini_key or os.getenv("GOOGLE_API_KEY")
25
  self.nvidia_api_key = nvidia_key or os.getenv("NVIDIA_API_KEY")
26
 
27
  if not self.gemini_api_key:
28
- raise ValueError("No se encontró API Key de Gemini.")
29
 
30
  if not self.nvidia_api_key:
31
- raise ValueError("No se encontró API Key de NVIDIA.")
32
 
33
- # 🔹 Inicializar Gemini
34
  self.gemini = ChatGoogleGenerativeAI(
35
- model="gemini-3-flash-preview",
36
  temperature=0.2,
37
  google_api_key=self.gemini_api_key,
38
  convert_system_message_to_human=True
39
  )
40
 
41
- # ---------------- GEMINI ----------------
 
 
42
  def _invoke_gemini(self, prompt):
43
  print("🟢 Usando Gemini...")
44
  return self.gemini.invoke(prompt)
45
 
46
- # ---------------- NVIDIA ----------------
 
 
47
  def _invoke_nvidia(self, prompt):
48
- print("🟡 Usando NVIDIA 🤖✅👁️‍🗨️ Llama (fallback)...")
 
 
49
 
50
  headers = {
51
  "Authorization": f"Bearer {self.nvidia_api_key}",
@@ -57,21 +62,25 @@ class HybridLLM:
57
  "messages": [
58
  {
59
  "role": "user",
60
- "content": prompt
61
  }
62
  ],
63
  "temperature": 0.6,
64
  "top_p": 0.95,
65
- "max_tokens": 2048
 
66
  }
67
 
68
  response = requests.post(
69
- "https://integrate.api.nvidia.com/v1",
70
  headers=headers,
71
  json=payload,
72
  timeout=60
73
  )
74
 
 
 
 
75
  response.raise_for_status()
76
 
77
  result = response.json()
@@ -80,42 +89,27 @@ class HybridLLM:
80
 
81
  return SimpleResponse(content)
82
 
83
- # ---------------- INVOKE PRINCIPAL ----------------
 
 
84
  def invoke(self, prompt):
85
  """
86
- Flujo híbrido:
87
- 1) Gemini
88
- 2) si falla o no tiene cuota → NVIDIA
89
  """
90
 
91
  try:
92
  return self._invoke_gemini(prompt)
93
 
94
- except Exception as e:
95
- error = str(e).lower()
96
-
97
- print("⚠️ Error Gemini:", e)
98
 
99
- # 🔥 fallback inteligente
100
- quota_errors = [
101
- "429",
102
- "quota",
103
- "resource exhausted",
104
- "rate limit"
105
- ]
106
-
107
- if any(err in error for err in quota_errors):
108
- try:
109
- return self._invoke_nvidia(prompt)
110
-
111
- except Exception as nvidia_error:
112
- print("❌ Error NVIDIA:", nvidia_error)
113
- raise nvidia_error
114
-
115
- # fallback por error general
116
  try:
117
  return self._invoke_nvidia(prompt)
118
 
119
  except Exception as nvidia_error:
120
- print("❌ Error total del sistema:", nvidia_error)
121
- raise nvidia_error
 
 
 
 
17
  2) Fallback NVIDIA Llama
18
 
19
  Prioridad:
20
+ clave enviada > variable de entorno
21
  """
22
 
 
23
  self.gemini_api_key = gemini_key or os.getenv("GOOGLE_API_KEY")
24
  self.nvidia_api_key = nvidia_key or os.getenv("NVIDIA_API_KEY")
25
 
26
  if not self.gemini_api_key:
27
+ raise ValueError("❌ No se encontró GOOGLE_API_KEY")
28
 
29
  if not self.nvidia_api_key:
30
+ raise ValueError("❌ No se encontró NVIDIA_API_KEY")
31
 
32
+ # Gemini principal
33
  self.gemini = ChatGoogleGenerativeAI(
34
+ model="gemini-1.5-flash",
35
  temperature=0.2,
36
  google_api_key=self.gemini_api_key,
37
  convert_system_message_to_human=True
38
  )
39
 
40
+ # ----------------------------------------
41
+ # GEMINI
42
+ # ----------------------------------------
43
  def _invoke_gemini(self, prompt):
44
  print("🟢 Usando Gemini...")
45
  return self.gemini.invoke(prompt)
46
 
47
+ # ----------------------------------------
48
+ # NVIDIA FALLBACK
49
+ # ----------------------------------------
50
  def _invoke_nvidia(self, prompt):
51
+ print("🟡 Usando NVIDIA fallback...")
52
+
53
+ url = "https://integrate.api.nvidia.com/v1/chat/completions"
54
 
55
  headers = {
56
  "Authorization": f"Bearer {self.nvidia_api_key}",
 
62
  "messages": [
63
  {
64
  "role": "user",
65
+ "content": str(prompt)
66
  }
67
  ],
68
  "temperature": 0.6,
69
  "top_p": 0.95,
70
+ "max_tokens": 1024,
71
+ "stream": False
72
  }
73
 
74
  response = requests.post(
75
+ url,
76
  headers=headers,
77
  json=payload,
78
  timeout=60
79
  )
80
 
81
+ print("🟠 NVIDIA status:", response.status_code)
82
+ print("🟠 NVIDIA response:", response.text)
83
+
84
  response.raise_for_status()
85
 
86
  result = response.json()
 
89
 
90
  return SimpleResponse(content)
91
 
92
+ # ----------------------------------------
93
+ # INVOKE PRINCIPAL
94
+ # ----------------------------------------
95
  def invoke(self, prompt):
96
  """
97
+ Intenta Gemini primero.
98
+ Si falla por cuota o error -> NVIDIA.
 
99
  """
100
 
101
  try:
102
  return self._invoke_gemini(prompt)
103
 
104
+ except Exception as gemini_error:
105
+ print("⚠️ Error Gemini:", gemini_error)
 
 
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  try:
108
  return self._invoke_nvidia(prompt)
109
 
110
  except Exception as nvidia_error:
111
+ print("❌ Error NVIDIA:", nvidia_error)
112
+
113
+ return SimpleResponse(
114
+ f"Error general del sistema: {str(nvidia_error)}"
115
+ )