code-puppy 0.0.183__tar.gz → 0.0.184__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.
- {code_puppy-0.0.183 → code_puppy-0.0.184}/PKG-INFO +1 -1
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/base_agent.py +63 -2
- {code_puppy-0.0.183 → code_puppy-0.0.184}/pyproject.toml +1 -1
- {code_puppy-0.0.183 → code_puppy-0.0.184}/.gitignore +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/LICENSE +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/README.md +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_c_reviewer.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_code_reviewer.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_cpp_reviewer.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_golang_reviewer.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_javascript_reviewer.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_python_reviewer.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_qa_expert.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_security_auditor.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/agent_typescript_reviewer.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/add_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/test_command.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/motd.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/config.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/main.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/messaging/spinner/console_spinner.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/messaging/spinner/spinner_base.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/messaging/spinner/textual_spinner.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/models.json +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/camoufox_manager.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/browser/vqa_agent.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/app.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/chat_view.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/command_history_modal.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/copy_button.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/custom_widgets.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/human_input_modal.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/input_area.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/sidebar.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/status_bar.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/messages.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/models/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/models/chat_message.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/models/command_history.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/models/enums.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/screens/__init__.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/screens/help.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/screens/mcp_install_wizard.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/screens/settings.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/screens/tools.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui_state.py +0 -0
- {code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/version_checker.py +0 -0
@@ -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 =
|
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 =
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/load_context_completion.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/model_picker_completion.py
RENAMED
File without changes
|
File without changes
|
{code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/command_line/prompt_toolkit_completion.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{code_puppy-0.0.183 → code_puppy-0.0.184}/code_puppy/tui/components/command_history_modal.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|