adriansanz commited on
Commit
f290df8
·
verified ·
1 Parent(s): 20edd6d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -7
app.py CHANGED
@@ -13,10 +13,15 @@ from langchain_core.language_models import LLM
13
  from typing import Optional, List
14
  import requests
15
 
 
 
 
 
16
  class GeminiLLM(LLM):
17
  """Wrapper para usar Google Gemini como un LLM de LangChain."""
18
 
19
  api_key: str = os.getenv("GEMINI")
 
20
  model_name: str = "gemini-2.0-flash"
21
  temperature: float = 0.1
22
 
@@ -24,15 +29,11 @@ class GeminiLLM(LLM):
24
  def _llm_type(self) -> str:
25
  return "google-gemini-llm"
26
 
27
- def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
28
- """Envía el prompt a la API de Gemini y devuelve la respuesta."""
29
- if not self.api_key:
30
- raise ValueError("Debes proporcionar una API Key válida de Gemini.")
31
-
32
  url = f"https://generativelanguage.googleapis.com/v1beta/models/{self.model_name}:generateContent"
33
  headers = {
34
  "Content-Type": "application/json",
35
- "X-goog-api-key": self.api_key
36
  }
37
  data = {
38
  "contents": [
@@ -48,9 +49,24 @@ class GeminiLLM(LLM):
48
  "temperature": self.temperature
49
  }
50
  }
 
 
 
 
 
 
 
 
 
 
51
 
 
 
 
 
 
 
52
 
53
- response = requests.post(url, headers=headers, json=data)
54
  if response.status_code == 200:
55
  result = response.json()
56
  return result["candidates"][0]["content"]["parts"][0]["text"]
 
13
  from typing import Optional, List
14
  import requests
15
 
16
+ import os
17
+ import requests
18
+ from typing import Optional, List
19
+
20
  class GeminiLLM(LLM):
21
  """Wrapper para usar Google Gemini como un LLM de LangChain."""
22
 
23
  api_key: str = os.getenv("GEMINI")
24
+ fallback_api_key: str = os.getenv("GEMINI_API_KEY")
25
  model_name: str = "gemini-2.0-flash"
26
  temperature: float = 0.1
27
 
 
29
  def _llm_type(self) -> str:
30
  return "google-gemini-llm"
31
 
32
+ def _make_request(self, api_key: str, prompt: str) -> requests.Response:
 
 
 
 
33
  url = f"https://generativelanguage.googleapis.com/v1beta/models/{self.model_name}:generateContent"
34
  headers = {
35
  "Content-Type": "application/json",
36
+ "X-goog-api-key": api_key
37
  }
38
  data = {
39
  "contents": [
 
49
  "temperature": self.temperature
50
  }
51
  }
52
+ return requests.post(url, headers=headers, json=data)
53
+
54
+ def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
55
+ """Envía el prompt a la API de Gemini y devuelve la respuesta.
56
+ Si la cuota se supera, intenta con la API key alternativa."""
57
+
58
+ if not self.api_key:
59
+ raise ValueError("Debes proporcionar una API Key válida de Gemini.")
60
+
61
+ response = self._make_request(self.api_key, prompt)
62
 
63
+ # Si el error es por cuota y hay fallback API key definida, intentar con la fallback
64
+ if response.status_code == 403 and "quota" in response.text.lower():
65
+ if self.fallback_api_key:
66
+ response = self._make_request(self.fallback_api_key, prompt)
67
+ else:
68
+ return f"Error {response.status_code}: {response.text} (no hay API key alternativa)"
69
 
 
70
  if response.status_code == 200:
71
  result = response.json()
72
  return result["candidates"][0]["content"]["parts"][0]["text"]