bep40 commited on
Commit
ae0fb6b
·
verified ·
1 Parent(s): 64a5da0

Upload patch_models.py

Browse files
Files changed (1) hide show
  1. patch_models.py +67 -22
patch_models.py CHANGED
@@ -102,9 +102,9 @@ new_func = '''def _available_models() -> list[dict[str, Any]]:
102
  "tier": "free",
103
  },
104
  {
105
- "id": "deepseek/deepseek-v4-flash",
106
  "label": "DeepSeek V4 Flash (OR)",
107
- "provider": "huggingface",
108
  "tier": "free",
109
  },
110
  {
@@ -122,14 +122,14 @@ new_func = '''def _available_models() -> list[dict[str, Any]]:
122
  "recommended": True,
123
  },
124
  {
125
- "id": "tencent/hy3-preview",
126
  "label": "Hy3 Preview",
127
  "provider": "openrouter",
128
  "tier": "free",
129
  "recommended": True,
130
  },
131
  {
132
- "id": "cohere/north-mini-code:free",
133
  "label": "Riverflow V2.5 Pro",
134
  "provider": "openrouter",
135
  "tier": "free",
@@ -182,11 +182,11 @@ else:
182
  ' {"id": "Qwen/Qwen3-Coder-Next", "label": "Qwen3 Coder Next", "provider": "huggingface", "tier": "free", "recommended": True},\n'
183
  ' {"id": "google/gemma-3-1b-it", "label": "Gemma 3 1B", "provider": "huggingface", "tier": "free", "recommended": True},\n'
184
  ' {"id": "openai/google/gemini-2.0-flash-001", "label": "Gemini 2.0 Flash", "provider": "openrouter", "tier": "free"},\n'
185
- ' {"id": "deepseek/deepseek-v4-flash", "label": "DeepSeek V4 Flash (OR)", "provider": "huggingface", "tier": "free"},\n'
186
  ' {"id": "openai/google/gemma-4-9b-it:free", "label": "Gemma 4 9B", "provider": "openrouter", "tier": "free", "recommended": True},\n'
187
  ' {"id": "openai/google/gemma-4-31b-it:free", "label": "Gemma 4 31B", "provider": "openrouter", "tier": "free", "recommended": True},\n'
188
- ' {"id": "tencent/hy3-preview", "label": "Hy3 Preview", "provider": "openrouter", "tier": "free", "recommended": True},\n'
189
- ' {"id": "cohere/north-mini-code:free", "label": "Riverflow V2.5 Pro", "provider": "openrouter", "tier": "free", "recommended": True},\n'
190
  ' {"id": "openai/nvidia/nemotron-3-super-120b-a12b:free", "label": "Nemotron 3 Super 120B", "provider": "openrouter", "tier": "free"},\n'
191
  ' {"id": "openai/nvidia/nemotron-3-ultra-550b-a55b:free", "label": "Nemotron 3 Ultra 550B", "provider": "openrouter", "tier": "free", "recommended": True},\n'
192
  ' {"id": "openai/poolside/laguna-m.1:free", "label": "Laguna M.1", "provider": "openrouter", "tier": "free", "recommended": True},\n'
@@ -216,6 +216,7 @@ with open(AGENT_FILE, "w") as f:
216
  with open(LLM_PARAMS_FILE) as f:
217
  llm_content = f.read()
218
 
 
219
  old_block = """ hf_model = normalized_model
220
  api_key = _resolve_hf_router_token(session_hf_token)
221
  params = {
@@ -230,7 +231,7 @@ new_block = """ hf_model = normalized_model
230
  # === PATCH: Route models to OpenRouter via LiteLLM ===
231
  # Models with openai/<provider>/ prefix go to OpenRouter.
232
  # Keep the "openai/" prefix — LiteLLM needs it for provider detection.
233
- _or_prefixes = ("openai/google/", "openai/deepseek/", "openai/nvidia/", "openai/poolside/", "openai/sourceful/", "openai/openrouter/")
234
  if normalized_model.startswith(_or_prefixes):
235
  return {
236
  "model": normalized_model,
@@ -239,32 +240,76 @@ new_block = """ hf_model = normalized_model
239
  }
240
  # === END PATCH ===
241
 
242
- params = {
243
- "model": f"openai/{hf_model}",
244
- "api_base": HF_ROUTER_BASE_URL,
245
- "api_key": api_key,
246
- }"""
 
 
 
 
 
 
 
 
247
 
248
  if old_block in llm_content:
249
  llm_content = llm_content.replace(old_block, new_block)
250
- print("OK: Patched _resolve_llm_params")
251
- elif "openai/openrouter/" in llm_content:
252
- print("OK: Already patched")
253
  else:
254
- idx = llm_content.find("hf_model = normalized_model")
 
 
255
  if idx >= 0:
256
- print(f"WARN: Target block not found at idx {idx}")
257
- import sys
258
- sys.exit(1)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
 
260
  try:
261
  ast.parse(llm_content)
262
  print("OK: llm_params.py syntax OK")
263
  except SyntaxError as e:
264
- print(f"FAIL: Syntax error: {e}")
265
  raise
266
 
267
  with open(LLM_PARAMS_FILE, "w") as f:
268
  f.write(llm_content)
269
 
270
- print("OK: Backend patched - 16 models, owl-alpha default, OpenRouter routing (keep openai/ prefix)")
 
102
  "tier": "free",
103
  },
104
  {
105
+ "id": "openai/deepseek/deepseek-v4-flash:free",
106
  "label": "DeepSeek V4 Flash (OR)",
107
+ "provider": "openrouter",
108
  "tier": "free",
109
  },
110
  {
 
122
  "recommended": True,
123
  },
124
  {
125
+ "id": "openai/tencent/hy3-preview:free",
126
  "label": "Hy3 Preview",
127
  "provider": "openrouter",
128
  "tier": "free",
129
  "recommended": True,
130
  },
131
  {
132
+ "id": "openai/cohere/north-mini-code:free",
133
  "label": "Riverflow V2.5 Pro",
134
  "provider": "openrouter",
135
  "tier": "free",
 
182
  ' {"id": "Qwen/Qwen3-Coder-Next", "label": "Qwen3 Coder Next", "provider": "huggingface", "tier": "free", "recommended": True},\n'
183
  ' {"id": "google/gemma-3-1b-it", "label": "Gemma 3 1B", "provider": "huggingface", "tier": "free", "recommended": True},\n'
184
  ' {"id": "openai/google/gemini-2.0-flash-001", "label": "Gemini 2.0 Flash", "provider": "openrouter", "tier": "free"},\n'
185
+ ' {"id": "openai/deepseek/deepseek-v4-flash:free", "label": "DeepSeek V4 Flash (OR)", "provider": "openrouter", "tier": "free"},\n'
186
  ' {"id": "openai/google/gemma-4-9b-it:free", "label": "Gemma 4 9B", "provider": "openrouter", "tier": "free", "recommended": True},\n'
187
  ' {"id": "openai/google/gemma-4-31b-it:free", "label": "Gemma 4 31B", "provider": "openrouter", "tier": "free", "recommended": True},\n'
188
+ ' {"id": "openai/tencent/hy3-preview:free", "label": "Hy3 Preview", "provider": "openrouter", "tier": "free", "recommended": True},\n'
189
+ ' {"id": "openai/cohere/north-mini-code:free", "label": "Riverflow V2.5 Pro", "provider": "openrouter", "tier": "free", "recommended": True},\n'
190
  ' {"id": "openai/nvidia/nemotron-3-super-120b-a12b:free", "label": "Nemotron 3 Super 120B", "provider": "openrouter", "tier": "free"},\n'
191
  ' {"id": "openai/nvidia/nemotron-3-ultra-550b-a55b:free", "label": "Nemotron 3 Ultra 550B", "provider": "openrouter", "tier": "free", "recommended": True},\n'
192
  ' {"id": "openai/poolside/laguna-m.1:free", "label": "Laguna M.1", "provider": "openrouter", "tier": "free", "recommended": True},\n'
 
216
  with open(LLM_PARAMS_FILE) as f:
217
  llm_content = f.read()
218
 
219
+ # First, try to replace the full block (original version)
220
  old_block = """ hf_model = normalized_model
221
  api_key = _resolve_hf_router_token(session_hf_token)
222
  params = {
 
231
  # === PATCH: Route models to OpenRouter via LiteLLM ===
232
  # Models with openai/<provider>/ prefix go to OpenRouter.
233
  # Keep the "openai/" prefix — LiteLLM needs it for provider detection.
234
+ _or_prefixes = ("openai/google/", "openai/deepseek/", "openai/nvidia/", "openai/poolside/", "openai/sourceful/", "openai/tencent/", "openai/cohere/", "openai/openrouter/")
235
  if normalized_model.startswith(_or_prefixes):
236
  return {
237
  "model": normalized_model,
 
240
  }
241
  # === END PATCH ===
242
 
243
+ # Don't double-prefix: if model already starts with openai/, use as-is for HF Router
244
+ if normalized_model.startswith("openai/"):
245
+ params = {
246
+ "model": normalized_model,
247
+ "api_base": HF_ROUTER_BASE_URL,
248
+ "api_key": api_key,
249
+ }
250
+ else:
251
+ params = {
252
+ "model": f"openai/{hf_model}",
253
+ "api_base": HF_ROUTER_BASE_URL,
254
+ "api_key": api_key,
255
+ }"""
256
 
257
  if old_block in llm_content:
258
  llm_content = llm_content.replace(old_block, new_block)
259
+ print("OK: Patched _resolve_llm_params (full block replace)")
260
+ elif "openai/tencent/" in llm_content:
261
+ print("OK: Already patched with tencent/cohere prefixes")
262
  else:
263
+ # Try updating just the _or_prefixes tuple if already patched
264
+ # First check if already patched
265
+ idx = llm_content.find('_or_prefixes = (')
266
  if idx >= 0:
267
+ # Already has the OR patch, need to update prefixes
268
+ old_prefixes = llm_content[idx:llm_content.find(')', idx)+1]
269
+ new_prefixes = '_or_prefixes = ("openai/google/", "openai/deepseek/", "openai/nvidia/", "openai/poolside/", "openai/sourceful/", "openai/tencent/", "openai/cohere/", "openai/openrouter/")'
270
+ if old_prefixes != new_prefixes:
271
+ llm_content = llm_content.replace(old_prefixes, new_prefixes)
272
+ print("OK: Updated _or_prefixes to include tencent + cohere")
273
+ else:
274
+ print("OK: _or_prefixes already up to date")
275
+
276
+ # Also fix the HF Router routing to handle openai/ prefix properly
277
+ old_hf_route = ''' params = {
278
+ "model": f"openai/{hf_model}",
279
+ "api_base": HF_ROUTER_BASE_URL,
280
+ "api_key": api_key,
281
+ }'''
282
+ new_hf_route = ''' # Don't double-prefix: if model already starts with openai/, use as-is for HF Router
283
+ if normalized_model.startswith("openai/"):
284
+ params = {
285
+ "model": normalized_model,
286
+ "api_base": HF_ROUTER_BASE_URL,
287
+ "api_key": api_key,
288
+ }
289
+ else:
290
+ params = {
291
+ "model": f"openai/{hf_model}",
292
+ "api_base": HF_ROUTER_BASE_URL,
293
+ "api_key": api_key,
294
+ }'''
295
+ if old_hf_route in llm_content:
296
+ llm_content = llm_content.replace(old_hf_route, new_hf_route)
297
+ print("OK: Fixed HF Router routing to avoid double openai/ prefix")
298
+ else:
299
+ print("OK: HF Router routing already handles openai/ prefix")
300
+ else:
301
+ print("FAIL: Could not find _or_prefixes or original block!")
302
+ import sys
303
+ sys.exit(1)
304
 
305
  try:
306
  ast.parse(llm_content)
307
  print("OK: llm_params.py syntax OK")
308
  except SyntaxError as e:
309
+ print(f"FAIL: Syntax error in llm_params.py: {e}")
310
  raise
311
 
312
  with open(LLM_PARAMS_FILE, "w") as f:
313
  f.write(llm_content)
314
 
315
+ print("OK: Backend patched - 16 models, OR routing with tencent/cohere, HF Router fix for openai/ prefix")