rishik1111 commited on
Commit
15784ff
·
1 Parent(s): b1f812f

feat: Replace Gemini with Groq Cloud Llama-3.3 ultra-fast LLM API integration

Browse files
Files changed (3) hide show
  1. .env.example +8 -8
  2. config.py +5 -5
  3. llm_synthesis/llm_fallback.py +5 -8
.env.example CHANGED
@@ -1,11 +1,11 @@
1
  # Sarvam AI STT API Key (Saaras v3)
2
  SARVAM_API_KEY=your_sarvam_api_key_here
3
 
4
- # Primary LLM Generation API Settings (Gemini Flash / OpenAI-compatible adapter)
5
- GEMINI_API_KEY=your_gemini_api_key_here
6
- LLM_API_KEY=your_gemini_api_key_here
7
- LLM_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/
8
- LLM_MODEL=gemini-2.5-flash
9
 
10
  # Cerebras High-Speed Backup Provider
11
  CEREBRAS_API_KEY=your_cerebras_api_key_here
@@ -20,9 +20,9 @@ ADAPTION_API_KEY=your_adaption_api_key_here
20
  EMBEDDING_MODEL_NAME=intfloat/multilingual-e5-small
21
 
22
  # Storage & Index paths
23
- DATA_DIR=./data
24
- INDEX_DIR=./data/indexes
25
- PROCESSED_DIR=./data/processed
26
 
27
  # Server Configuration
28
  HOST=0.0.0.0
 
1
  # Sarvam AI STT API Key (Saaras v3)
2
  SARVAM_API_KEY=your_sarvam_api_key_here
3
 
4
+ # Primary LLM Generation API Settings (Groq Cloud Llama-3.3 / OpenAI-compatible adapter)
5
+ GROQ_API_KEY=your_groq_api_key_here
6
+ LLM_API_KEY=your_groq_api_key_here
7
+ LLM_BASE_URL=https://api.groq.com/openai/v1
8
+ LLM_MODEL=llama-3.3-70b-versatile
9
 
10
  # Cerebras High-Speed Backup Provider
11
  CEREBRAS_API_KEY=your_cerebras_api_key_here
 
20
  EMBEDDING_MODEL_NAME=intfloat/multilingual-e5-small
21
 
22
  # Storage & Index paths
23
+ DATA_DIR=./knowledge_base
24
+ INDEX_DIR=./knowledge_base/indexes
25
+ PROCESSED_DIR=./knowledge_base/processed
26
 
27
  # Server Configuration
28
  HOST=0.0.0.0
config.py CHANGED
@@ -191,11 +191,11 @@ DYNAMIC_SEMANTIC_CACHE_ENABLED = os.getenv("DYNAMIC_SEMANTIC_CACHE_ENABLED", "tr
191
  DYNAMIC_SEMANTIC_CACHE_MAX_ENTRIES = int(os.getenv("DYNAMIC_SEMANTIC_CACHE_MAX_ENTRIES", "2048"))
192
  DYNAMIC_SEMANTIC_CACHE_THRESHOLD = float(os.getenv("DYNAMIC_SEMANTIC_CACHE_THRESHOLD", "0.92"))
193
 
194
- # Tier-1 Primary: Gemini Flash / OpenAI-compatible (High-speed instruction model, ~250ms)
195
- GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", os.getenv("GOOGLE_API_KEY", ""))
196
- LLM_API_KEY = os.getenv("LLM_API_KEY", GEMINI_API_KEY or os.getenv("GROQ_API_KEY", ""))
197
- LLM_BASE_URL = os.getenv("LLM_BASE_URL", "https://generativelanguage.googleapis.com/v1beta/openai/" if (GEMINI_API_KEY or not os.getenv("GROQ_API_KEY")) else "https://api.groq.com/openai/v1")
198
- LLM_MODEL = os.getenv("LLM_MODEL", "gemini-2.5-flash" if ("googleapis.com" in LLM_BASE_URL or GEMINI_API_KEY or not os.getenv("GROQ_API_KEY")) else "llama-3.3-70b-versatile")
199
  LLM_TIMEOUT_SECONDS = 15.0
200
 
201
  # Tier-2 & Tier-3 Backup: Cerebras High-Speed LPU (120B model for high instruction following)
 
191
  DYNAMIC_SEMANTIC_CACHE_MAX_ENTRIES = int(os.getenv("DYNAMIC_SEMANTIC_CACHE_MAX_ENTRIES", "2048"))
192
  DYNAMIC_SEMANTIC_CACHE_THRESHOLD = float(os.getenv("DYNAMIC_SEMANTIC_CACHE_THRESHOLD", "0.92"))
193
 
194
+ # Tier-1 Primary: Groq High-Speed Llama-3.3 / Mixtral API (~150ms)
195
+ GROQ_API_KEY = os.getenv("GROQ_API_KEY", os.getenv("LLM_API_KEY", ""))
196
+ LLM_API_KEY = os.getenv("LLM_API_KEY", GROQ_API_KEY)
197
+ LLM_BASE_URL = os.getenv("LLM_BASE_URL", "https://api.groq.com/openai/v1")
198
+ LLM_MODEL = os.getenv("LLM_MODEL", "llama-3.3-70b-versatile")
199
  LLM_TIMEOUT_SECONDS = 15.0
200
 
201
  # Tier-2 & Tier-3 Backup: Cerebras High-Speed LPU (120B model for high instruction following)
llm_synthesis/llm_fallback.py CHANGED
@@ -79,7 +79,6 @@ class LLMAdapter:
79
  headers = {
80
  "Content-Type": "application/json",
81
  "Authorization": f"Bearer {api_key.strip()}",
82
- "x-goog-api-key": api_key.strip(),
83
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) VoiceRAG/1.0",
84
  }
85
 
@@ -100,7 +99,7 @@ class LLMAdapter:
100
  """
101
  Generate synthesized response grounded strictly in provided context passages.
102
  Cascade Hierarchy:
103
- 1. Primary: Gemini Flash / Main LLM (e.g. gemini-2.5-flash, gemini-2.0-flash)
104
  2. Tier-2 Backup: Cerebras Gemma 4 31b (gemma-4-31b)
105
  3. Tier-3 Backup: Cerebras GPT-OSS 120b (gpt-oss-120b)
106
  4. Tier-4 Local: Deterministic multi-passage extractive fallback
@@ -108,16 +107,14 @@ class LLMAdapter:
108
  if not config.ALLOW_NETWORK_CALLS_IN_PIPELINE:
109
  return self._local_fallback_synthesize(prompt, context)
110
 
111
- # Tier 1: Primary LLM (Gemini Flash / OpenAI-compatible)
112
  if self.api_key and self.api_key.strip():
113
- # Try configured model (with instant flash fallbacks on 429)
114
  primary_models = [self.model]
115
- if "googleapis.com" in self.base_url or "gemini" in self.model.lower():
116
- for alt_m in ["gemini-2.5-flash", "gemini-2.0-flash", "gemini-1.5-flash"]:
117
  if alt_m not in primary_models:
118
  primary_models.append(alt_m)
119
- elif "groq.com" in self.base_url and self.model != "llama-3.1-8b-instant":
120
- primary_models.append("llama-3.1-8b-instant")
121
 
122
  for m in primary_models:
123
  res = self._call_chat_endpoint(
 
79
  headers = {
80
  "Content-Type": "application/json",
81
  "Authorization": f"Bearer {api_key.strip()}",
 
82
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) VoiceRAG/1.0",
83
  }
84
 
 
99
  """
100
  Generate synthesized response grounded strictly in provided context passages.
101
  Cascade Hierarchy:
102
+ 1. Primary: Groq Llama-3.3 70B / Mixtral (~150ms)
103
  2. Tier-2 Backup: Cerebras Gemma 4 31b (gemma-4-31b)
104
  3. Tier-3 Backup: Cerebras GPT-OSS 120b (gpt-oss-120b)
105
  4. Tier-4 Local: Deterministic multi-passage extractive fallback
 
107
  if not config.ALLOW_NETWORK_CALLS_IN_PIPELINE:
108
  return self._local_fallback_synthesize(prompt, context)
109
 
110
+ # Tier 1: Primary LLM (Groq Llama-3.3 / OpenAI-compatible)
111
  if self.api_key and self.api_key.strip():
112
+ # Try configured Groq model with ultra-fast fallbacks on 429
113
  primary_models = [self.model]
114
+ if "groq.com" in self.base_url or "llama" in self.model.lower() or "groq" in self.model.lower():
115
+ for alt_m in ["llama-3.3-70b-versatile", "llama-3.1-8b-instant", "mixtral-8x7b-32768", "llama3-70b-8192"]:
116
  if alt_m not in primary_models:
117
  primary_models.append(alt_m)
 
 
118
 
119
  for m in primary_models:
120
  res = self._call_chat_endpoint(