|
29 | 29 |
|
30 | 30 | logger = logging.getLogger(__name__) |
31 | 31 |
|
32 | | -# Available Claude models |
33 | | -MODELS = { |
| 32 | +# Available models per provider |
| 33 | +ANTHROPIC_MODELS = { |
34 | 34 | "sonnet": ("claude-sonnet-4-20250514", "Sonnet 4"), |
35 | 35 | "opus": ("claude-opus-4-20250514", "Opus 4"), |
36 | 36 | "haiku": ("claude-3-5-haiku-20241022", "Haiku 3.5"), |
37 | 37 | } |
38 | 38 |
|
| 39 | +OPENROUTER_MODELS = { |
| 40 | + "sonnet": ("anthropic/claude-sonnet-4-20250514", "Sonnet 4"), |
| 41 | + "opus": ("anthropic/claude-opus-4-20250514", "Opus 4"), |
| 42 | + "haiku": ("anthropic/claude-3.5-haiku", "Haiku 3.5"), |
| 43 | + "deepseek": ("deepseek/deepseek-chat-v3-0324", "DeepSeek V3"), |
| 44 | + "gpt4o": ("openai/gpt-4o", "GPT-4o"), |
| 45 | + "gemini": ("google/gemini-2.5-flash-preview", "Gemini 2.5 Flash"), |
| 46 | +} |
| 47 | + |
| 48 | + |
| 49 | +def get_models() -> dict[str, tuple[str, str]]: |
| 50 | + """Get available models based on configured provider.""" |
| 51 | + if settings.llm_provider.lower() == "openrouter": |
| 52 | + return OPENROUTER_MODELS |
| 53 | + return ANTHROPIC_MODELS |
| 54 | + |
39 | 55 |
|
40 | 56 | class RateLimiter: |
41 | 57 | """Simple in-memory rate limiter. |
@@ -308,7 +324,7 @@ async def _handle_health(self, message: Message) -> None: |
308 | 324 |
|
309 | 325 | # Get user's selected model from database |
310 | 326 | model_key = await self._state.get_user_model(user_id) |
311 | | - model_id = MODELS.get(model_key, MODELS["sonnet"])[0] |
| 327 | + model_id = get_models().get(model_key, get_models()["sonnet"])[0] |
312 | 328 |
|
313 | 329 | # Use agent to check health via SSH |
314 | 330 | result = await self._agent.run( |
@@ -350,7 +366,7 @@ async def _handle_logs(self, message: Message) -> None: |
350 | 366 |
|
351 | 367 | # Get user's selected model from database |
352 | 368 | model_key = await self._state.get_user_model(user_id) |
353 | | - model_id = MODELS.get(model_key, MODELS["sonnet"])[0] |
| 369 | + model_id = get_models().get(model_key, get_models()["sonnet"])[0] |
354 | 370 |
|
355 | 371 | # Use agent to read logs via SSH |
356 | 372 | result = await self._agent.run( |
@@ -452,11 +468,11 @@ async def _handle_model(self, message: Message) -> None: |
452 | 468 |
|
453 | 469 | user_id = message.from_user.id if message.from_user else 0 |
454 | 470 | current_key = await self._state.get_user_model(user_id) |
455 | | - current_name = MODELS.get(current_key, MODELS["sonnet"])[1] |
| 471 | + current_name = get_models().get(current_key, get_models()["sonnet"])[1] |
456 | 472 |
|
457 | 473 | # Build inline keyboard |
458 | 474 | buttons = [] |
459 | | - for key, (_model_id, name) in MODELS.items(): |
| 475 | + for key, (_model_id, name) in get_models().items(): |
460 | 476 | marker = " ✓" if key == current_key else "" |
461 | 477 | buttons.append( |
462 | 478 | InlineKeyboardButton( |
@@ -490,17 +506,17 @@ async def _handle_model_callback(self, callback: CallbackQuery) -> None: |
490 | 506 | # Extract model key from callback data |
491 | 507 | model_key = callback.data.split(":")[1] if callback.data else "sonnet" |
492 | 508 |
|
493 | | - if model_key not in MODELS: |
| 509 | + if model_key not in get_models(): |
494 | 510 | await callback.answer("Неизвестная модель", show_alert=True) |
495 | 511 | return |
496 | 512 |
|
497 | 513 | # Save user preference to database |
498 | 514 | await self._state.set_user_model(user_id, model_key) |
499 | | - model_name = MODELS[model_key][1] |
| 515 | + model_name = get_models()[model_key][1] |
500 | 516 |
|
501 | 517 | # Update keyboard with new selection |
502 | 518 | buttons = [] |
503 | | - for key, (_model_id, name) in MODELS.items(): |
| 519 | + for key, (_model_id, name) in get_models().items(): |
504 | 520 | marker = " ✓" if key == model_key else "" |
505 | 521 | buttons.append( |
506 | 522 | InlineKeyboardButton( |
@@ -542,7 +558,7 @@ async def _handle_message(self, message: Message) -> None: |
542 | 558 |
|
543 | 559 | # Get user's selected model from database |
544 | 560 | model_key = await self._state.get_user_model(user_id) |
545 | | - model_id = MODELS.get(model_key, MODELS["sonnet"])[0] |
| 561 | + model_id = get_models().get(model_key, get_models()["sonnet"])[0] |
546 | 562 |
|
547 | 563 | # Run agent |
548 | 564 | result = await self._agent.run(user_id=user_id, query=text, model=model_id) |
|
0 commit comments