code-puppy 0.0.183__tar.gz → 0.0.185__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. {code_puppy-0.0.183 → code_puppy-0.0.185}/PKG-INFO +1 -1
  2. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/base_agent.py +63 -2
  3. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/model_factory.py +40 -2
  4. code_puppy-0.0.185/code_puppy/models.json +71 -0
  5. {code_puppy-0.0.183 → code_puppy-0.0.185}/pyproject.toml +1 -1
  6. code_puppy-0.0.183/code_puppy/models.json +0 -128
  7. {code_puppy-0.0.183 → code_puppy-0.0.185}/.gitignore +0 -0
  8. {code_puppy-0.0.183 → code_puppy-0.0.185}/LICENSE +0 -0
  9. {code_puppy-0.0.183 → code_puppy-0.0.185}/README.md +0 -0
  10. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/__init__.py +0 -0
  11. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/__main__.py +0 -0
  12. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/__init__.py +0 -0
  13. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_c_reviewer.py +0 -0
  14. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_code_puppy.py +0 -0
  15. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_code_reviewer.py +0 -0
  16. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_cpp_reviewer.py +0 -0
  17. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_creator_agent.py +0 -0
  18. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_golang_reviewer.py +0 -0
  19. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_javascript_reviewer.py +0 -0
  20. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_manager.py +0 -0
  21. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_python_reviewer.py +0 -0
  22. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_qa_expert.py +0 -0
  23. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_qa_kitten.py +0 -0
  24. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_security_auditor.py +0 -0
  25. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/agent_typescript_reviewer.py +0 -0
  26. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/agents/json_agent.py +0 -0
  27. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/callbacks.py +0 -0
  28. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/__init__.py +0 -0
  29. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/command_handler.py +0 -0
  30. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/file_path_completion.py +0 -0
  31. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/load_context_completion.py +0 -0
  32. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/__init__.py +0 -0
  33. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/add_command.py +0 -0
  34. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/base.py +0 -0
  35. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/handler.py +0 -0
  36. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/help_command.py +0 -0
  37. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/install_command.py +0 -0
  38. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/list_command.py +0 -0
  39. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/logs_command.py +0 -0
  40. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/remove_command.py +0 -0
  41. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/restart_command.py +0 -0
  42. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/search_command.py +0 -0
  43. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  44. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/start_command.py +0 -0
  45. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/status_command.py +0 -0
  46. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  47. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/stop_command.py +0 -0
  48. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/test_command.py +0 -0
  49. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/utils.py +0 -0
  50. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  51. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/model_picker_completion.py +0 -0
  52. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/motd.py +0 -0
  53. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
  54. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/command_line/utils.py +0 -0
  55. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/config.py +0 -0
  56. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/http_utils.py +0 -0
  57. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/main.py +0 -0
  58. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/__init__.py +0 -0
  59. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/async_lifecycle.py +0 -0
  60. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/blocking_startup.py +0 -0
  61. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  62. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/circuit_breaker.py +0 -0
  63. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/config_wizard.py +0 -0
  64. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/dashboard.py +0 -0
  65. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/error_isolation.py +0 -0
  66. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/examples/retry_example.py +0 -0
  67. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/health_monitor.py +0 -0
  68. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/managed_server.py +0 -0
  69. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/manager.py +0 -0
  70. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/registry.py +0 -0
  71. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/retry_manager.py +0 -0
  72. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  73. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/status_tracker.py +0 -0
  74. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/mcp_/system_tools.py +0 -0
  75. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/messaging/__init__.py +0 -0
  76. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/messaging/message_queue.py +0 -0
  77. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/messaging/queue_console.py +0 -0
  78. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/messaging/renderers.py +0 -0
  79. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/messaging/spinner/__init__.py +0 -0
  80. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  81. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  82. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/messaging/spinner/textual_spinner.py +0 -0
  83. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/plugins/__init__.py +0 -0
  84. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/reopenable_async_client.py +0 -0
  85. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/round_robin_model.py +0 -0
  86. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/status_display.py +0 -0
  87. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/summarization_agent.py +0 -0
  88. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/__init__.py +0 -0
  89. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/agent_tools.py +0 -0
  90. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/__init__.py +0 -0
  91. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/browser_control.py +0 -0
  92. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/browser_interactions.py +0 -0
  93. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/browser_locators.py +0 -0
  94. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/browser_navigation.py +0 -0
  95. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  96. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/browser_scripts.py +0 -0
  97. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/browser_workflows.py +0 -0
  98. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/camoufox_manager.py +0 -0
  99. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/browser/vqa_agent.py +0 -0
  100. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/command_runner.py +0 -0
  101. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/common.py +0 -0
  102. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/file_modifications.py +0 -0
  103. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/file_operations.py +0 -0
  104. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tools/tools_content.py +0 -0
  105. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/__init__.py +0 -0
  106. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/app.py +0 -0
  107. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/__init__.py +0 -0
  108. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/chat_view.py +0 -0
  109. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/command_history_modal.py +0 -0
  110. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/copy_button.py +0 -0
  111. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/custom_widgets.py +0 -0
  112. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/human_input_modal.py +0 -0
  113. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/input_area.py +0 -0
  114. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/sidebar.py +0 -0
  115. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/components/status_bar.py +0 -0
  116. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/messages.py +0 -0
  117. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/models/__init__.py +0 -0
  118. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/models/chat_message.py +0 -0
  119. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/models/command_history.py +0 -0
  120. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/models/enums.py +0 -0
  121. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/screens/__init__.py +0 -0
  122. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/screens/help.py +0 -0
  123. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/screens/mcp_install_wizard.py +0 -0
  124. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/screens/settings.py +0 -0
  125. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui/screens/tools.py +0 -0
  126. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/tui_state.py +0 -0
  127. {code_puppy-0.0.183 → code_puppy-0.0.185}/code_puppy/version_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-puppy
3
- Version: 0.0.183
3
+ Version: 0.0.185
4
4
  Summary: Code generation agent
5
5
  Project-URL: repository, https://github.com/mpfaffenberger/code_puppy
6
6
  Project-URL: HomePage, https://github.com/mpfaffenberger/code_puppy
@@ -729,6 +729,63 @@ class BaseAgent(ABC):
729
729
  manager = get_mcp_manager()
730
730
  return manager.get_servers_for_agent()
731
731
 
732
+ def _load_model_with_fallback(
733
+ self,
734
+ requested_model_name: str,
735
+ models_config: Dict[str, Any],
736
+ message_group: str,
737
+ ) -> Tuple[Any, str]:
738
+ """Load the requested model, applying a friendly fallback when unavailable."""
739
+ try:
740
+ model = ModelFactory.get_model(requested_model_name, models_config)
741
+ return model, requested_model_name
742
+ except ValueError as exc:
743
+ available_models = list(models_config.keys())
744
+ available_str = (
745
+ ", ".join(sorted(available_models))
746
+ if available_models
747
+ else "no configured models"
748
+ )
749
+ emit_warning(
750
+ (
751
+ f"[yellow]Model '{requested_model_name}' not found. "
752
+ f"Available models: {available_str}[/yellow]"
753
+ ),
754
+ message_group=message_group,
755
+ )
756
+
757
+ fallback_candidates: List[str] = []
758
+ global_candidate = get_global_model_name()
759
+ if global_candidate:
760
+ fallback_candidates.append(global_candidate)
761
+
762
+ for candidate in available_models:
763
+ if candidate not in fallback_candidates:
764
+ fallback_candidates.append(candidate)
765
+
766
+ for candidate in fallback_candidates:
767
+ if not candidate or candidate == requested_model_name:
768
+ continue
769
+ try:
770
+ model = ModelFactory.get_model(candidate, models_config)
771
+ emit_info(
772
+ f"[bold cyan]Using fallback model: {candidate}[/bold cyan]",
773
+ message_group=message_group,
774
+ )
775
+ return model, candidate
776
+ except ValueError:
777
+ continue
778
+
779
+ friendly_message = (
780
+ "No valid model could be loaded. Update the model configuration or set "
781
+ "a valid model with `config set`."
782
+ )
783
+ emit_error(
784
+ f"[bold red]{friendly_message}[/bold red]",
785
+ message_group=message_group,
786
+ )
787
+ raise ValueError(friendly_message) from exc
788
+
732
789
  def reload_code_generation_agent(self, message_group: Optional[str] = None):
733
790
  """Force-reload the pydantic-ai Agent based on current config and model."""
734
791
  from code_puppy.tools import register_tools_for_agent
@@ -743,7 +800,11 @@ class BaseAgent(ABC):
743
800
  message_group=message_group,
744
801
  )
745
802
  models_config = ModelFactory.load_config()
746
- model = ModelFactory.get_model(model_name, models_config)
803
+ model, resolved_model_name = self._load_model_with_fallback(
804
+ model_name,
805
+ models_config,
806
+ message_group,
807
+ )
747
808
 
748
809
  emit_info(
749
810
  f"[bold magenta]Loading Agent: {self.name}[/bold magenta]",
@@ -786,7 +847,7 @@ class BaseAgent(ABC):
786
847
  register_tools_for_agent(p_agent, agent_tools)
787
848
 
788
849
  self._code_generation_agent = p_agent
789
- self._last_model_name = model_name
850
+ self._last_model_name = resolved_model_name
790
851
  # expose for run_with_mcp
791
852
  self.pydantic_agent = p_agent
792
853
  return self._code_generation_agent
@@ -31,6 +31,12 @@ from .round_robin_model import RoundRobinModel
31
31
  # Example: "X-Api-Key": "$OPENAI_API_KEY" will use the value from os.environ.get("OPENAI_API_KEY")
32
32
 
33
33
 
34
+ class ZaiChatModel(OpenAIChatModel):
35
+ def _process_response(self, response):
36
+ response.object = 'chat.completion'
37
+ return super()._process_response(response)
38
+
39
+
34
40
  def get_custom_config(model_config):
35
41
  custom_config = model_config.get("custom_endpoint", {})
36
42
  if not custom_config:
@@ -51,8 +57,23 @@ def get_custom_config(model_config):
51
57
  f"Please set the environment variable: export {env_var_name}=your_value"
52
58
  )
53
59
  value = resolved_value
60
+ elif "$" in value:
61
+ tokens = value.split(" ")
62
+ resolved_values = []
63
+ for token in tokens:
64
+ if token.startswith("$"):
65
+ env_var = token[1:]
66
+ resolved_value = os.environ.get(env_var)
67
+ if resolved_value is None:
68
+ raise ValueError(
69
+ f"Environment variable '{env_var}' is required for custom endpoint headers but is not set. "
70
+ f"Please set the environment variable: export {env_var}=your_value"
71
+ )
72
+ resolved_values.append(resolved_value)
73
+ else:
74
+ resolved_values.append(token)
75
+ value = " ".join(resolved_values)
54
76
  headers[key] = value
55
-
56
77
  api_key = None
57
78
  if "api_key" in custom_config:
58
79
  if custom_config["api_key"].startswith("$"):
@@ -223,7 +244,24 @@ class ModelFactory:
223
244
  model = OpenAIChatModel(model_name=model_config["name"], provider=provider)
224
245
  setattr(model, "provider", provider)
225
246
  return model
226
-
247
+ elif model_type == "zai_coding":
248
+ zai_model = ZaiChatModel(
249
+ model_name=model_config["name"],
250
+ provider=OpenAIProvider(
251
+ api_key=os.getenv('ZAI_API_KEY'),
252
+ base_url='https://api.z.ai/api/coding/paas/v4'
253
+ )
254
+ )
255
+ return zai_model
256
+ elif model_type == "zai_api":
257
+ zai_model = ZaiChatModel(
258
+ model_name=model_config["name"],
259
+ provider=OpenAIProvider(
260
+ api_key=os.getenv('ZAI_API_KEY'),
261
+ base_url='https://api.z.ai/api/paas/v4/'
262
+ )
263
+ )
264
+ return zai_model
227
265
  elif model_type == "custom_gemini":
228
266
  url, headers, verify, api_key = get_custom_config(model_config)
229
267
  os.environ["GEMINI_API_KEY"] = api_key
@@ -0,0 +1,71 @@
1
+ {
2
+ "gpt-5": {
3
+ "type": "openai",
4
+ "name": "gpt-5",
5
+ "context_length": 400000
6
+ },
7
+ "Cerebras-Qwen3-Coder-480b": {
8
+ "type": "cerebras",
9
+ "name": "qwen-3-coder-480b",
10
+ "custom_endpoint": {
11
+ "url": "https://api.cerebras.ai/v1",
12
+ "api_key": "$CEREBRAS_API_KEY"
13
+ },
14
+ "context_length": 131072
15
+ },
16
+ "Cerebras-Qwen3-235b-a22b-instruct-2507": {
17
+ "type": "cerebras",
18
+ "name": "qwen-3-235b-a22b-instruct-2507",
19
+ "custom_endpoint": {
20
+ "url": "https://api.cerebras.ai/v1",
21
+ "api_key": "$CEREBRAS_API_KEY"
22
+ },
23
+ "context_length": 64000
24
+ },
25
+ "Cerebras-gpt-oss-120b": {
26
+ "type": "cerebras",
27
+ "name": "gpt-oss-120b",
28
+ "custom_endpoint": {
29
+ "url": "https://api.cerebras.ai/v1",
30
+ "api_key": "$CEREBRAS_API_KEY"
31
+ },
32
+ "context_length": 131072
33
+ },
34
+ "Cerebras-Qwen-3-32b": {
35
+ "type": "cerebras",
36
+ "name": "qwen-3-32b",
37
+ "custom_endpoint": {
38
+ "url": "https://api.cerebras.ai/v1",
39
+ "api_key": "$CEREBRAS_API_KEY"
40
+ },
41
+ "context_length": 65536
42
+ },
43
+ "claude-4-0-sonnet": {
44
+ "type": "anthropic",
45
+ "name": "claude-sonnet-4-20250514",
46
+ "context_length": 200000
47
+ },
48
+ "claude-4-5-sonnet": {
49
+ "type": "anthropic",
50
+ "name": "claude-sonnet-4-5-20250929",
51
+ "context_length": 200000
52
+ },
53
+ "glm-4.5-coding": {
54
+ "type": "zai_coding",
55
+ "name": "glm-4.5"
56
+ },
57
+ "glm-4.6-coding": {
58
+ "type": "zai_coding",
59
+ "name": "glm-4.6",
60
+ "context_length": 200000
61
+ },
62
+ "glm-4.5": {
63
+ "type": "zai_api",
64
+ "name": "glm-4.5"
65
+ },
66
+ "glm-4.6": {
67
+ "type": "zai_api",
68
+ "name": "glm-4.6",
69
+ "context_length": 200000
70
+ }
71
+ }
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy"
7
- version = "0.0.183"
7
+ version = "0.0.185"
8
8
  description = "Code generation agent"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,128 +0,0 @@
1
- {
2
- "gpt-5": {
3
- "type": "openai",
4
- "name": "gpt-5",
5
- "context_length": 400000
6
- },
7
- "Cerebras-Qwen3-Coder-480b": {
8
- "type": "cerebras",
9
- "name": "qwen-3-coder-480b",
10
- "custom_endpoint": {
11
- "url": "https://api.cerebras.ai/v1",
12
- "api_key": "$CEREBRAS_API_KEY"
13
- },
14
- "context_length": 131072
15
- },
16
- "Cerebras-Qwen3-235b-a22b-instruct-2507": {
17
- "type": "cerebras",
18
- "name": "qwen-3-235b-a22b-instruct-2507",
19
- "custom_endpoint": {
20
- "url": "https://api.cerebras.ai/v1",
21
- "api_key": "$CEREBRAS_API_KEY"
22
- },
23
- "context_length": 64000
24
- },
25
- "Cerebras-gpt-oss-120b": {
26
- "type": "cerebras",
27
- "name": "gpt-oss-120b",
28
- "custom_endpoint": {
29
- "url": "https://api.cerebras.ai/v1",
30
- "api_key": "$CEREBRAS_API_KEY"
31
- },
32
- "context_length": 131072
33
- },
34
- "Cerebras-Qwen-3-32b": {
35
- "type": "cerebras",
36
- "name": "qwen-3-32b",
37
- "custom_endpoint": {
38
- "url": "https://api.cerebras.ai/v1",
39
- "api_key": "$CEREBRAS_API_KEY"
40
- },
41
- "context_length": 65536
42
- },
43
- "claude-4-0-sonnet": {
44
- "type": "anthropic",
45
- "name": "claude-sonnet-4-20250514",
46
- "context_length": 200000
47
- },
48
- "o3": {
49
- "type": "openai",
50
- "name": "o3",
51
- "context_length": 200000
52
- },
53
- "grok-4": {
54
- "type": "custom_openai",
55
- "name": "grok-4",
56
- "custom_endpoint": {
57
- "url": "https://api.x.ai/v1",
58
- "api_key": "$XAI_API_KEY"
59
- },
60
- "context_length": 256000
61
- },
62
- "grok-code-fast-1": {
63
- "type": "custom_openai",
64
- "name": "grok-code-fast-1",
65
- "custom_endpoint": {
66
- "url": "https://api.x.ai/v1",
67
- "api_key": "$XAI_API_KEY"
68
- },
69
- "context_length": 256000
70
- },
71
- "gemini-2.5-flash-preview-05-20": {
72
- "type": "gemini",
73
- "name": "gemini-2.5-flash-preview-05-20",
74
- "context_length": 1048576
75
- },
76
- "gpt-4.1": {
77
- "type": "openai",
78
- "name": "gpt-4.1",
79
- "context_length": 1000000
80
- },
81
- "Qwen/Qwen3-235B-A22B-fp8-tput": {
82
- "type": "custom_openai",
83
- "name": "Qwen/Qwen3-235B-A22B-fp8-tput",
84
- "custom_endpoint": {
85
- "url": "https://api.together.xyz/v1",
86
- "api_key": "$TOGETHER_API_KEY"
87
- },
88
- "context_length": 64000
89
- },
90
- "azure-gpt-4.1": {
91
- "type": "azure_openai",
92
- "name": "gpt-4.1",
93
- "api_version": "2024-12-01-preview",
94
- "api_key": "$AZURE_OPENAI_API_KEY",
95
- "azure_endpoint": "$AZURE_OPENAI_ENDPOINT",
96
- "context_length": 128000
97
- },
98
- "gpt-4.1-mini": {
99
- "type": "openai",
100
- "name": "gpt-4.1-mini",
101
- "context_length": 128000
102
- },
103
- "gpt-4.1-nano": {
104
- "type": "openai",
105
- "name": "gpt-4.1-nano",
106
- "context_length": 128000
107
- },
108
- "gpt-4.1-custom": {
109
- "type": "custom_openai",
110
- "name": "gpt-4.1-custom",
111
- "custom_endpoint": {
112
- "url": "https://my.cute.endpoint:8080",
113
- "headers": {
114
- "X-Api-Key": "$OPENAI_API_KEY"
115
- },
116
- "ca_certs_path": "/path/to/cert.pem"
117
- },
118
- "context_length": 128000
119
- },
120
- "ollama-llama3.3": {
121
- "type": "custom_openai",
122
- "name": "llama3.3",
123
- "custom_endpoint": {
124
- "url": "http://localhost:11434/v1"
125
- },
126
- "context_length": 8192
127
- }
128
- }
File without changes
File without changes
File without changes