janito 2.17.1__tar.gz → 2.19.0__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.
- {janito-2.17.1 → janito-2.19.0}/CHANGELOG.md +27 -1
- {janito-2.17.1 → janito-2.19.0}/PKG-INFO +1 -1
- janito-2.19.0/docs/alibaba-setup.md +70 -0
- {janito-2.17.1 → janito-2.19.0}/docs/cerebras-setup.md +17 -0
- janito-2.19.0/docs/openai-setup.md +85 -0
- {janito-2.17.1 → janito-2.19.0}/docs/supported-providers-models.md +13 -1
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/session.py +32 -14
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_models.py +16 -2
- janito-2.19.0/janito/cli/cli_commands/list_providers.py +15 -0
- janito-2.19.0/janito/cli/cli_commands/model_utils.py +117 -0
- janito-2.19.0/janito/cli/cli_commands/ping_providers.py +55 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/main_cli.py +18 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/model.py +1 -0
- janito-2.19.0/janito/providers/alibaba/model_info.py +97 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/alibaba/provider.py +1 -1
- {janito-2.17.1 → janito-2.19.0}/janito/providers/openai/model_info.py +33 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/openai/provider.py +1 -1
- {janito-2.17.1 → janito-2.19.0}/janito.egg-info/PKG-INFO +1 -1
- {janito-2.17.1 → janito-2.19.0}/janito.egg-info/SOURCES.txt +3 -0
- {janito-2.17.1 → janito-2.19.0}/mkdocs.yml +3 -1
- janito-2.17.1/janito/cli/cli_commands/list_providers.py +0 -10
- janito-2.17.1/janito/cli/cli_commands/model_utils.py +0 -97
- janito-2.17.1/janito/providers/alibaba/model_info.py +0 -40
- {janito-2.17.1 → janito-2.19.0}/.codespellrc +0 -0
- {janito-2.17.1 → janito-2.19.0}/.gitattributes +0 -0
- {janito-2.17.1 → janito-2.19.0}/.github/workflows/python-app.yml.disabled +0 -0
- {janito-2.17.1 → janito-2.19.0}/.gitignore +0 -0
- {janito-2.17.1 → janito-2.19.0}/.pre-commit-config.yaml +0 -0
- {janito-2.17.1 → janito-2.19.0}/.secrets.baseline +0 -0
- {janito-2.17.1 → janito-2.19.0}/.vscode/settings.json +0 -0
- {janito-2.17.1 → janito-2.19.0}/CHANGELOG_2.16.0.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/LICENSE +0 -0
- {janito-2.17.1 → janito-2.19.0}/README-dev.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/README.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/UPDATING_DOCS.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/adding_mcp.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/DIV.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/Interfaces.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/about/costs.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/about/vs-webchats.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/about/why.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/alternatives.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/concepts/analysis-style.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/concepts/index.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/deepseek-setup.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/driver-flow.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/driver-request-cancellation.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/drivers/events.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/drivers.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/event-bus.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/configuration.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/developing.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/disabled-tools.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/installation.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/profiles.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/prompting/README.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/single-shot-terminal.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/terminal-shell.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/tools-developer-guide.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/using.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/guides/using_tools.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/llm-drivers.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/meta/quality-checks.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/moonshotai-setup.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/reference/api.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/reference/azure-openai.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/reference/cli-options.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/reference/message-handler-model.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/security.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/tools/search-text.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/tools-index.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/tools-natural-results.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/tools-precision.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/docs/z-ai-setup.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/git_diff.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/github_diff +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/README.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/__main__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/_version.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/agent/setup_agent.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/script_runner.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/toolbar.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_drivers.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_profiles.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_tools.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/set_api_key.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/show_config.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/config.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/console.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/core/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/core/event_logger.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/core/getters.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/core/model_guesser.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/core/runner.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/core/setters.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/core/unsetters.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/main.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/prompt_core.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/prompt_handler.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/prompt_setup.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/rich_terminal_reporter.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/single_shot_mode/handler.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/utils.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/cli/verbose_output.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/config.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/config_manager.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/conversation_history.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/dir_walk_utils.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/docs/GETTING_STARTED.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/driver_events.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/drivers/azure_openai/driver.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/drivers/cerebras/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/drivers/openai/README.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/drivers/openai/driver.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/drivers/zai/driver.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/event_bus/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/event_bus/bus.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/event_bus/event.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/event_bus/handler.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/exceptions.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/formatting.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/formatting_token.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/gitignore_utils.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/i18n/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/i18n/messages.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/i18n/pt.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/README.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/agent.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/auth.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/auth_utils.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/driver.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/driver_config.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/driver_input.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/message_parts.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/llm/provider.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/mkdocs.yml +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/perf_singleton.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/performance_collector.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/platform_discovery.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/provider_config.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/provider_registry.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/anthropic/provider.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/azure_openai/provider.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/cerebras/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/cerebras/model_info.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/cerebras/provider.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/deepseek/model_info.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/deepseek/provider.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/google/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/google/model_info.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/google/provider.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/moonshotai/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/moonshotai/model_info.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/moonshotai/provider.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/openai/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/registry.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/zai/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/zai/model_info.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/zai/provider.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/providers/zai/schema_generator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/regions/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/regions/cli.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/regions/geo_utils.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/regions/provider_regions.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/report_events.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/shell.bak.zip +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/README.md +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/adapter.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/ask_user.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/copy_file.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/create_directory.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/create_file.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/fetch_url.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/find_files.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/move_file.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/open_url.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/python_code_run.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/python_command_run.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/python_file_run.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/read_files.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/remove_directory.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/remove_file.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/core.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/view_file.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/disabled_tools.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/inspect_registry.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/path_security.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/permissions.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/permissions_parse.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_base.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_events.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_utils.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/tools_adapter.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/tools/tools_schema.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito/utils.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito.egg-info/requires.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/janito.egg-info/top_level.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/pyproject.toml +0 -0
- {janito-2.17.1 → janito-2.19.0}/pytest.ini +0 -0
- {janito-2.17.1 → janito-2.19.0}/requirements-dev.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/requirements.txt +0 -0
- {janito-2.17.1 → janito-2.19.0}/setup.cfg +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/adapters/local/test_read_files.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_cli_list_models.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_cli_list_providers.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_cli_version.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_disabled_tools.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_provider_alibaba.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_provider_cerebras.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tests/test_provider_moonshotai.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tools/release.py +0 -0
- {janito-2.17.1 → janito-2.19.0}/tox.ini +0 -0
@@ -2,7 +2,33 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
-
## [
|
5
|
+
## [2.19.0] - 2025-08-08
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- **Alibaba Cloud Provider**: Added support for new Qwen3 1M context models
|
10
|
+
- `qwen3-235b-a22b-thinking-2507`: 1M context thinking model
|
11
|
+
- `qwen3-235b-a22b-instruct-2507`: 1M context instruct model
|
12
|
+
- `qwen3-30b-a3b-thinking-2507`: 1M context thinking model
|
13
|
+
- `qwen3-30b-a3b-instruct-2507`: 1M context instruct model
|
14
|
+
- **Thinking Mode Support**: Added thinking mode indicators (📖) for models that support chain-of-thought reasoning
|
15
|
+
- **Default Model Highlighting**: Added star (⭐) indicators to highlight default models in provider listings
|
16
|
+
- **Provider Connectivity Testing**: Added `--ping` flag to test connectivity with all providers when used with `--list-providers`
|
17
|
+
- **Enhanced Model Display**: Improved model listing with better formatting of context sizes and response limits
|
18
|
+
|
19
|
+
### Changed
|
20
|
+
|
21
|
+
- **Alibaba Cloud Provider**: Updated default model from `qwen3-coder-plus` to `qwen3-235b-a22b-instruct-2507` (129k context)
|
22
|
+
- **Model Information**: Added thinking mode support tracking in LLMModelInfo class
|
23
|
+
- **Documentation**: Updated Alibaba setup guide with comprehensive configuration instructions
|
24
|
+
|
25
|
+
## [2.18.0] - 2025-08-07
|
26
|
+
|
27
|
+
### Added
|
28
|
+
|
29
|
+
- Added OpenAI GPT-5 models (gpt-5, gpt-5-mini, gpt-5-nano) and set default model to gpt-5
|
30
|
+
- Chat session: improved backend hostname detection
|
31
|
+
- Cleaned up test file
|
6
32
|
|
7
33
|
## [2.17.0] - 2025-08-05
|
8
34
|
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# Alibaba Cloud Qwen Setup Guide
|
2
|
+
|
3
|
+
This guide explains how to set up the Alibaba Cloud Qwen provider for Janito.
|
4
|
+
|
5
|
+
## Prerequisites
|
6
|
+
|
7
|
+
- An Alibaba Cloud account
|
8
|
+
- Access to the Alibaba Cloud Qwen model service
|
9
|
+
- API key for authentication
|
10
|
+
|
11
|
+
## Getting Your API Key
|
12
|
+
|
13
|
+
1. Log in to your [Alibaba Cloud account](https://account.alibabacloud.com)
|
14
|
+
2. Navigate to the **Qwen Model Service** in the console
|
15
|
+
3. Go to **API Keys** or **Security Settings**
|
16
|
+
4. Create a new API key or use an existing one
|
17
|
+
5. Copy the API key value
|
18
|
+
|
19
|
+
## Setting Up the API Key
|
20
|
+
|
21
|
+
You can set your API key using the Janito CLI:
|
22
|
+
|
23
|
+
```bash
|
24
|
+
janito --set-api-key alibaba:your-api-key-here
|
25
|
+
```
|
26
|
+
|
27
|
+
Alternatively, you can set the environment variable:
|
28
|
+
|
29
|
+
```bash
|
30
|
+
export ALIBABA_API_KEY=your-api-key-here
|
31
|
+
```
|
32
|
+
|
33
|
+
## Configuration
|
34
|
+
|
35
|
+
The Alibaba provider uses the following environment variable:
|
36
|
+
|
37
|
+
- `ALIBABA_API_KEY`: Your Alibaba Cloud API key
|
38
|
+
|
39
|
+
## Available Models
|
40
|
+
|
41
|
+
The Alibaba provider supports the following models:
|
42
|
+
|
43
|
+
- `qwen-turbo`: Fast, lightweight model for simple tasks
|
44
|
+
- `qwen-plus`: Balanced performance and capability
|
45
|
+
- `qwen-max`: Most capable model for complex tasks
|
46
|
+
- `qwen3-coder-plus`: Coding-focused model with 128k context
|
47
|
+
- `qwen3-coder-480b-a35b-instruct`: Advanced coding model
|
48
|
+
- `qwen3-235b-a22b-thinking-2507`: 1M context thinking model
|
49
|
+
- `qwen3-235b-a22b-instruct-2507`: 1M context instruct model
|
50
|
+
- `qwen3-30b-a3b-thinking-2507`: 1M context thinking model
|
51
|
+
- `qwen3-30b-a3b-instruct-2507`: 1M context instruct model
|
52
|
+
|
53
|
+
## Default Model
|
54
|
+
|
55
|
+
The default model is `qwen3-235b-a22b-instruct-2507`, which provides 129k context and is suitable for general-purpose tasks.
|
56
|
+
|
57
|
+
## Troubleshooting
|
58
|
+
|
59
|
+
**Q: I'm getting authentication errors**
|
60
|
+
A: Verify your API key is correct and has the necessary permissions in the Alibaba Cloud console.
|
61
|
+
|
62
|
+
**Q: The model is not responding**
|
63
|
+
A: Check your internet connection and verify the Alibaba Cloud Qwen service is available in your region.
|
64
|
+
|
65
|
+
**Q: I want to use a different model**
|
66
|
+
A: Use the `--model` flag when running Janito:
|
67
|
+
|
68
|
+
```bash
|
69
|
+
janito --provider alibaba --model qwen-max
|
70
|
+
```
|
@@ -42,6 +42,23 @@ janito -p cerebras -m qwen-3-coder-480b "Explain quantum computing"
|
|
42
42
|
|
43
43
|
Cerebras offers several models through their API:
|
44
44
|
|
45
|
+
**Production Models:**
|
46
|
+
|
47
|
+
- `llama-4-scout-17b-16e-instruct`
|
48
|
+
- `llama-3.3-70b`
|
49
|
+
- `llama3.1-8b`
|
50
|
+
- `qwen-3-32b`
|
51
|
+
|
52
|
+
**Preview Models:**
|
53
|
+
|
54
|
+
- `llama-4-maverick-17b-128e-instruct`
|
55
|
+
- `qwen-3-235b-a22b-instruct-2507`
|
56
|
+
- `qwen-3-235b-a22b-thinking-2507`
|
57
|
+
- `qwen-3-coder-480b`
|
58
|
+
- `gpt-oss-120b`
|
59
|
+
|
60
|
+
**Notes:**
|
61
|
+
|
45
62
|
- `qwen-3-coder-480b`: 32k context, reasoning-focused model with function calling support
|
46
63
|
|
47
64
|
## Troubleshooting
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# OpenAI Setup Guide
|
2
|
+
|
3
|
+
This guide will help you set up Janito to work with OpenAI's models.
|
4
|
+
|
5
|
+
## Prerequisites
|
6
|
+
|
7
|
+
1. An OpenAI account
|
8
|
+
2. An API key from OpenAI
|
9
|
+
|
10
|
+
## Getting an API Key
|
11
|
+
|
12
|
+
1. Go to [OpenAI's API Keys page](https://platform.openai.com/api-keys)
|
13
|
+
2. Sign in to your OpenAI account
|
14
|
+
3. Click on "Create new secret key"
|
15
|
+
4. Copy the generated key and save it in a secure location
|
16
|
+
|
17
|
+
## Configuration
|
18
|
+
|
19
|
+
You can configure your OpenAI API key in several ways:
|
20
|
+
|
21
|
+
### Option 1: Using the CLI
|
22
|
+
|
23
|
+
```bash
|
24
|
+
janito --set-api-key openai YOUR_API_KEY
|
25
|
+
```
|
26
|
+
|
27
|
+
### Option 2: Environment Variable
|
28
|
+
|
29
|
+
Set the `OPENAI_API_KEY` environment variable:
|
30
|
+
|
31
|
+
```bash
|
32
|
+
export OPENAI_API_KEY=YOUR_API_KEY
|
33
|
+
```
|
34
|
+
|
35
|
+
On Windows:
|
36
|
+
```cmd
|
37
|
+
set OPENAI_API_KEY=YOUR_API_KEY
|
38
|
+
```
|
39
|
+
|
40
|
+
### Option 3: Configuration File
|
41
|
+
|
42
|
+
Add the following to your Janito configuration file:
|
43
|
+
|
44
|
+
```yaml
|
45
|
+
providers:
|
46
|
+
openai:
|
47
|
+
api_key: YOUR_API_KEY
|
48
|
+
```
|
49
|
+
|
50
|
+
## Available Models
|
51
|
+
|
52
|
+
Janito supports the following OpenAI models:
|
53
|
+
|
54
|
+
- GPT-5 (default)
|
55
|
+
- GPT-5 Mini
|
56
|
+
- GPT-5 Nano
|
57
|
+
- GPT-4
|
58
|
+
- GPT-4 Turbo
|
59
|
+
- GPT-3.5 Turbo
|
60
|
+
|
61
|
+
## Usage
|
62
|
+
|
63
|
+
After configuration, you can use OpenAI models with Janito:
|
64
|
+
|
65
|
+
```bash
|
66
|
+
# Use the default model (GPT-5)
|
67
|
+
janito "Explain quantum computing"
|
68
|
+
|
69
|
+
# Specify a specific model
|
70
|
+
janito -m gpt-4 "Explain quantum computing"
|
71
|
+
|
72
|
+
# Use in chat mode
|
73
|
+
janito -c
|
74
|
+
|
75
|
+
# Use in chat mode with a specific model
|
76
|
+
janito -c -m gpt-4-turbo
|
77
|
+
```
|
78
|
+
|
79
|
+
## Troubleshooting
|
80
|
+
|
81
|
+
If you encounter issues:
|
82
|
+
|
83
|
+
1. Verify your API key is correct and active
|
84
|
+
2. Check that you have sufficient credits in your OpenAI account
|
85
|
+
3. Ensure your network connection can reach OpenAI's API endpoints
|
@@ -4,9 +4,14 @@ This page lists the supported providers and their available models.
|
|
4
4
|
|
5
5
|
## OpenAI
|
6
6
|
|
7
|
-
- GPT-
|
7
|
+
- GPT-5 (default)
|
8
|
+
- GPT-5 Mini
|
9
|
+
- GPT-5 Nano
|
8
10
|
- GPT-4
|
9
11
|
- GPT-4 Turbo
|
12
|
+
- GPT-3.5 Turbo
|
13
|
+
|
14
|
+
For setup instructions, see the [OpenAI Setup Guide](openai-setup.md).
|
10
15
|
|
11
16
|
## Google
|
12
17
|
|
@@ -38,6 +43,10 @@ This page lists the supported providers and their available models.
|
|
38
43
|
- qwen-max
|
39
44
|
- qwen3-coder-plus (default)
|
40
45
|
- qwen3-coder-480b-a35b-instruct
|
46
|
+
- qwen3-235b-a22b-thinking-2507
|
47
|
+
- qwen3-235b-a22b-instruct-2507
|
48
|
+
- qwen3-30b-a3b-thinking-2507
|
49
|
+
- qwen3-30b-a3b-instruct-2507
|
41
50
|
|
42
51
|
## Z.AI
|
43
52
|
|
@@ -47,12 +56,14 @@ This page lists the supported providers and their available models.
|
|
47
56
|
## Cerebras
|
48
57
|
|
49
58
|
**Production Models:**
|
59
|
+
|
50
60
|
- llama-4-scout-17b-16e-instruct
|
51
61
|
- llama-3.3-70b
|
52
62
|
- llama3.1-8b
|
53
63
|
- qwen-3-32b
|
54
64
|
|
55
65
|
**Preview Models:**
|
66
|
+
|
56
67
|
- llama-4-maverick-17b-128e-instruct
|
57
68
|
- qwen-3-235b-a22b-instruct-2507
|
58
69
|
- qwen-3-235b-a22b-thinking-2507
|
@@ -60,6 +71,7 @@ This page lists the supported providers and their available models.
|
|
60
71
|
- gpt-oss-120b
|
61
72
|
|
62
73
|
**Notes:**
|
74
|
+
|
63
75
|
- qwen-3-coder-480b: 32k context, reasoning-focused model with function calling support
|
64
76
|
|
65
77
|
<!-- Removed links to model_info.py files for all providers to avoid broken references. -->
|
@@ -296,21 +296,39 @@ class ChatSession:
|
|
296
296
|
else "Unknown"
|
297
297
|
)
|
298
298
|
|
299
|
-
# Get backend hostname if available
|
300
299
|
backend_hostname = "Unknown"
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
)
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
300
|
+
candidates = []
|
301
|
+
drv = getattr(self.agent, "driver", None)
|
302
|
+
if drv is not None:
|
303
|
+
cfg = getattr(drv, "config", None)
|
304
|
+
if cfg is not None:
|
305
|
+
b = getattr(cfg, "base_url", None)
|
306
|
+
if b:
|
307
|
+
candidates.append(b)
|
308
|
+
direct_base = getattr(drv, "base_url", None)
|
309
|
+
if direct_base:
|
310
|
+
candidates.append(direct_base)
|
311
|
+
cfg2 = getattr(self.agent, "config", None)
|
312
|
+
if cfg2 is not None:
|
313
|
+
b2 = getattr(cfg2, "base_url", None)
|
314
|
+
if b2:
|
315
|
+
candidates.append(b2)
|
316
|
+
top_base = getattr(self.agent, "base_url", None)
|
317
|
+
if top_base:
|
318
|
+
candidates.append(top_base)
|
319
|
+
from urllib.parse import urlparse
|
320
|
+
for candidate in candidates:
|
321
|
+
try:
|
322
|
+
if not candidate:
|
323
|
+
continue
|
324
|
+
parsed = urlparse(str(candidate))
|
325
|
+
host = parsed.netloc or parsed.path
|
326
|
+
if host:
|
327
|
+
backend_hostname = host
|
328
|
+
break
|
329
|
+
except Exception:
|
330
|
+
backend_hostname = str(candidate)
|
331
|
+
break
|
314
332
|
|
315
333
|
self.console.print(
|
316
334
|
Rule(
|
@@ -27,9 +27,23 @@ def handle_list_models(args, provider_instance):
|
|
27
27
|
if models and isinstance(models[0], dict):
|
28
28
|
_print_models_table(models, provider_name)
|
29
29
|
else:
|
30
|
-
|
30
|
+
# Fallback for simple string model lists
|
31
|
+
from rich.table import Table
|
32
|
+
from janito.cli.console import shared_console
|
33
|
+
|
34
|
+
table = Table(title=f"Supported models for provider '{provider_name}'")
|
35
|
+
table.add_column("Model Name", style="cyan")
|
36
|
+
|
31
37
|
for m in models:
|
32
|
-
|
38
|
+
table.add_row(str(m))
|
39
|
+
|
40
|
+
import sys
|
41
|
+
if sys.stdout.isatty():
|
42
|
+
shared_console.print(table)
|
43
|
+
else:
|
44
|
+
print(f"Supported models for provider '{provider_name}':")
|
45
|
+
for m in models:
|
46
|
+
print(f"- {m}")
|
33
47
|
except Exception as e:
|
34
48
|
print(f"Error listing models for provider '{provider_name}': {e}")
|
35
49
|
return
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"""
|
2
|
+
CLI Command: List supported LLM providers
|
3
|
+
"""
|
4
|
+
|
5
|
+
from janito.provider_registry import list_providers
|
6
|
+
from janito.cli.cli_commands.ping_providers import handle_ping_providers
|
7
|
+
|
8
|
+
|
9
|
+
def handle_list_providers(args=None):
|
10
|
+
# Check if ping flag is set
|
11
|
+
if args and getattr(args, 'ping', False):
|
12
|
+
handle_ping_providers(args)
|
13
|
+
else:
|
14
|
+
list_providers()
|
15
|
+
return
|
@@ -0,0 +1,117 @@
|
|
1
|
+
"""
|
2
|
+
Utilities for model-related CLI output
|
3
|
+
"""
|
4
|
+
|
5
|
+
|
6
|
+
def _print_models_table(models, provider_name):
|
7
|
+
from rich.table import Table
|
8
|
+
from janito.cli.console import shared_console
|
9
|
+
|
10
|
+
table = Table(title=f"Supported models for provider '{provider_name}'")
|
11
|
+
table.add_column("Model Name", style="cyan")
|
12
|
+
table.add_column("Vendor", style="yellow", justify="center")
|
13
|
+
table.add_column("Context", style="magenta", justify="center")
|
14
|
+
table.add_column("Max Input", style="green", justify="center")
|
15
|
+
table.add_column("CoT", style="blue", justify="center")
|
16
|
+
table.add_column("Max Response", style="red", justify="center")
|
17
|
+
table.add_column("Thinking", style="bright_black", justify="center")
|
18
|
+
table.add_column("Driver", style="white")
|
19
|
+
|
20
|
+
# Get default model for this provider
|
21
|
+
from janito.providers.registry import LLMProviderRegistry
|
22
|
+
try:
|
23
|
+
provider_class = LLMProviderRegistry.get(provider_name)
|
24
|
+
default_model = getattr(provider_class, "DEFAULT_MODEL", None)
|
25
|
+
except:
|
26
|
+
default_model = None
|
27
|
+
|
28
|
+
for m in models:
|
29
|
+
name = str(m.get("name", ""))
|
30
|
+
|
31
|
+
# Highlight default model with different color
|
32
|
+
if name == default_model:
|
33
|
+
name = f"[bold green]⭐ {name}[/bold green]"
|
34
|
+
|
35
|
+
vendor = "Open" if m.get("open") is True or m.get("open") == "Open" else "Locked"
|
36
|
+
|
37
|
+
context = _format_context(m.get("context", ""))
|
38
|
+
max_input = _format_k(m.get("max_input", ""))
|
39
|
+
max_cot = _format_k(m.get("max_cot", ""))
|
40
|
+
max_response = _format_k(m.get("max_response", ""))
|
41
|
+
|
42
|
+
# Determine thinking indicators
|
43
|
+
thinking_supported = m.get("thinking_supported") is True or m.get("thinking_supported") == "True"
|
44
|
+
cot_value = m.get("max_cot", "")
|
45
|
+
|
46
|
+
thinking_icon = "📖" if thinking_supported and m.get("thinking", False) else ""
|
47
|
+
# Only show CoT value if it's a valid number and thinking is supported
|
48
|
+
cot_display = ""
|
49
|
+
if thinking_supported and cot_value and str(cot_value).lower() != "n/a":
|
50
|
+
cot_display = _format_k(cot_value)
|
51
|
+
|
52
|
+
driver = _format_driver(m.get("driver", ""))
|
53
|
+
|
54
|
+
table.add_row(name, vendor, context, max_input, cot_display, max_response, thinking_icon, driver)
|
55
|
+
|
56
|
+
import sys
|
57
|
+
if sys.stdout.isatty():
|
58
|
+
shared_console.print(table)
|
59
|
+
else:
|
60
|
+
# ASCII-friendly fallback table when output is redirected
|
61
|
+
print(f"Supported models for provider '{provider_name}'")
|
62
|
+
print("Model Name | Vendor | Context | Max Input | CoT | Max Response | Thinking | Driver")
|
63
|
+
|
64
|
+
# Get default model for fallback
|
65
|
+
from janito.providers.registry import LLMProviderRegistry
|
66
|
+
try:
|
67
|
+
provider_class = LLMProviderRegistry.get(provider_name)
|
68
|
+
default_model = getattr(provider_class, "DEFAULT_MODEL", None)
|
69
|
+
except:
|
70
|
+
default_model = None
|
71
|
+
|
72
|
+
for m in models:
|
73
|
+
name = str(m.get("name", ""))
|
74
|
+
if name == default_model:
|
75
|
+
name = f"⭐ {name} (default)"
|
76
|
+
|
77
|
+
vendor = "Open" if m.get("open") is True or m.get("open") == "Open" else "Locked"
|
78
|
+
context = _format_context(m.get("context", ""))
|
79
|
+
max_input = _format_k(m.get("max_input", ""))
|
80
|
+
max_cot = _format_k(m.get("max_cot", ""))
|
81
|
+
max_response = _format_k(m.get("max_response", ""))
|
82
|
+
thinking_supported = m.get("thinking_supported") is True or m.get("thinking_supported") == "True"
|
83
|
+
cot_value = m.get("max_cot", "")
|
84
|
+
|
85
|
+
thinking = "Y" if thinking_supported and m.get("thinking", False) else ""
|
86
|
+
cot_display = ""
|
87
|
+
if thinking_supported and cot_value and str(cot_value).lower() != "n/a":
|
88
|
+
cot_display = _format_k(cot_value)
|
89
|
+
|
90
|
+
driver = _format_driver(m.get("driver", ""))
|
91
|
+
print(f"{name} | {vendor} | {context} | {max_input} | {cot_display} | {max_response} | {thinking} | {driver}")
|
92
|
+
|
93
|
+
|
94
|
+
def _format_k(val):
|
95
|
+
"""Format numeric values with k suffix for thousands."""
|
96
|
+
try:
|
97
|
+
n = int(val)
|
98
|
+
if n >= 1000:
|
99
|
+
return f"{n // 1000}k"
|
100
|
+
return str(n)
|
101
|
+
except Exception:
|
102
|
+
return str(val)
|
103
|
+
|
104
|
+
|
105
|
+
def _format_context(val):
|
106
|
+
"""Format context field which might be a single value or range."""
|
107
|
+
if isinstance(val, (list, tuple)) and len(val) == 2:
|
108
|
+
return f"{_format_k(val[0])} / {_format_k(val[1])}"
|
109
|
+
return _format_k(val)
|
110
|
+
|
111
|
+
|
112
|
+
def _format_driver(val):
|
113
|
+
"""Format driver name by removing ModelDriver suffix."""
|
114
|
+
if isinstance(val, (list, tuple)):
|
115
|
+
return ", ".join(val)
|
116
|
+
val_str = str(val)
|
117
|
+
return val_str.removesuffix("ModelDriver").strip()
|
@@ -0,0 +1,55 @@
|
|
1
|
+
from janito.provider_registry import list_providers
|
2
|
+
from janito.providers.registry import LLMProviderRegistry
|
3
|
+
from janito.cli.console import shared_console
|
4
|
+
from rich.table import Table
|
5
|
+
from rich.progress import Progress, SpinnerColumn, TextColumn
|
6
|
+
import asyncio
|
7
|
+
import time
|
8
|
+
|
9
|
+
|
10
|
+
def handle_ping_providers(args):
|
11
|
+
"""Ping/test connectivity for all providers."""
|
12
|
+
try:
|
13
|
+
# Get all providers
|
14
|
+
providers = list_providers()
|
15
|
+
|
16
|
+
# Create table for results
|
17
|
+
table = Table(title="Provider Connectivity Test")
|
18
|
+
table.add_column("Provider", style="cyan")
|
19
|
+
table.add_column("Status", style="magenta")
|
20
|
+
table.add_column("Time", style="green")
|
21
|
+
table.add_column("Details", style="yellow")
|
22
|
+
|
23
|
+
# Test each provider
|
24
|
+
for provider_name in providers:
|
25
|
+
start_time = time.time()
|
26
|
+
try:
|
27
|
+
# Get provider class
|
28
|
+
provider_class = LLMProviderRegistry.get(provider_name)
|
29
|
+
provider = provider_class()
|
30
|
+
|
31
|
+
# Test the provider (simplified - just check if we can instantiate and get models)
|
32
|
+
models = provider.get_models()
|
33
|
+
if models:
|
34
|
+
status = "✓ Connected"
|
35
|
+
details = f"{len(models)} models available"
|
36
|
+
else:
|
37
|
+
status = "⚠ No models"
|
38
|
+
details = "Provider reachable but no models returned"
|
39
|
+
|
40
|
+
except Exception as e:
|
41
|
+
status = "✗ Failed"
|
42
|
+
details = str(e)
|
43
|
+
|
44
|
+
end_time = time.time()
|
45
|
+
elapsed = f"{(end_time - start_time)*1000:.0f}ms"
|
46
|
+
|
47
|
+
table.add_row(provider_name, status, elapsed, details)
|
48
|
+
|
49
|
+
# Print results
|
50
|
+
shared_console.print(table)
|
51
|
+
|
52
|
+
except Exception as e:
|
53
|
+
print(f"Error testing provider connectivity: {e}")
|
54
|
+
|
55
|
+
return
|
@@ -124,6 +124,10 @@ definition = [
|
|
124
124
|
["--list-providers"],
|
125
125
|
{"action": "store_true", "help": "List supported LLM providers"},
|
126
126
|
),
|
127
|
+
(
|
128
|
+
["--ping"],
|
129
|
+
{"action": "store_true", "help": "Ping/test connectivity for all providers (use with --list-providers)"},
|
130
|
+
),
|
127
131
|
(
|
128
132
|
["--list-drivers"],
|
129
133
|
{
|
@@ -238,6 +242,19 @@ GETTER_KEYS = [
|
|
238
242
|
"list_drivers",
|
239
243
|
"region_info",
|
240
244
|
"list_providers_region",
|
245
|
+
"ping",
|
246
|
+
]
|
247
|
+
GETTER_KEYS = [
|
248
|
+
"show_config",
|
249
|
+
"list_providers",
|
250
|
+
"list_profiles",
|
251
|
+
"list_models",
|
252
|
+
"list_tools",
|
253
|
+
"list_config",
|
254
|
+
"list_drivers",
|
255
|
+
"region_info",
|
256
|
+
"list_providers_region",
|
257
|
+
"ping",
|
241
258
|
]
|
242
259
|
|
243
260
|
|
@@ -361,6 +378,7 @@ class JanitoCLI:
|
|
361
378
|
or self.args.show_config
|
362
379
|
or self.args.list_config
|
363
380
|
or self.args.list_drivers
|
381
|
+
or self.args.ping
|
364
382
|
):
|
365
383
|
self._maybe_print_verbose_provider_model()
|
366
384
|
handle_getter(self.args)
|