janito 2.15.0__tar.gz → 2.17.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.15.0 → janito-2.17.0}/CHANGELOG.md +131 -18
- janito-2.17.0/CHANGELOG_2.16.0.md +81 -0
- {janito-2.15.0 → janito-2.17.0}/PKG-INFO +1 -1
- janito-2.17.0/docs/cerebras-setup.md +56 -0
- janito-2.17.0/docs/supported-providers-models.md +65 -0
- {janito-2.15.0 → janito-2.17.0}/janito/agent/setup_agent.py +1 -1
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/session.py +42 -1
- janito-2.17.0/janito/cli/cli_commands/list_drivers.py +162 -0
- janito-2.17.0/janito/cli/cli_commands/list_providers_region.py +85 -0
- janito-2.17.0/janito/cli/cli_commands/set_api_key.py +30 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/core/getters.py +7 -3
- {janito-2.15.0 → janito-2.17.0}/janito/cli/main_cli.py +38 -3
- {janito-2.15.0 → janito-2.17.0}/janito/cli/prompt_setup.py +3 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/single_shot_mode/handler.py +43 -1
- {janito-2.15.0 → janito-2.17.0}/janito/drivers/azure_openai/driver.py +14 -5
- janito-2.17.0/janito/drivers/cerebras/__init__.py +1 -0
- {janito-2.15.0 → janito-2.17.0}/janito/drivers/openai/driver.py +16 -5
- {janito-2.15.0 → janito-2.17.0}/janito/drivers/zai/driver.py +19 -22
- {janito-2.15.0 → janito-2.17.0}/janito/formatting_token.py +9 -5
- janito-2.17.0/janito/llm/auth_utils.py +21 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/__init__.py +1 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/alibaba/provider.py +11 -9
- {janito-2.15.0 → janito-2.17.0}/janito/providers/anthropic/provider.py +4 -5
- {janito-2.15.0 → janito-2.17.0}/janito/providers/azure_openai/provider.py +4 -5
- janito-2.17.0/janito/providers/cerebras/__init__.py +1 -0
- janito-2.17.0/janito/providers/cerebras/model_info.py +76 -0
- janito-2.17.0/janito/providers/cerebras/provider.py +145 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/deepseek/provider.py +4 -5
- {janito-2.15.0 → janito-2.17.0}/janito/providers/google/provider.py +4 -5
- janito-2.17.0/janito/providers/moonshotai/provider.py +104 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/openai/provider.py +45 -39
- {janito-2.15.0 → janito-2.17.0}/janito/providers/zai/provider.py +3 -9
- janito-2.17.0/janito/regions/__init__.py +16 -0
- janito-2.17.0/janito/regions/cli.py +124 -0
- janito-2.17.0/janito/regions/geo_utils.py +240 -0
- janito-2.17.0/janito/regions/provider_regions.py +158 -0
- {janito-2.15.0 → janito-2.17.0}/janito.egg-info/PKG-INFO +1 -1
- {janito-2.15.0 → janito-2.17.0}/janito.egg-info/SOURCES.txt +14 -1
- {janito-2.15.0 → janito-2.17.0}/mkdocs.yml +1 -1
- janito-2.17.0/tests/test_provider_cerebras.py +93 -0
- janito-2.15.0/docs/supported-providers-models.md +0 -95
- janito-2.15.0/janito/cli/cli_commands/list_drivers.py +0 -137
- janito-2.15.0/janito/cli/cli_commands/set_api_key.py +0 -19
- janito-2.15.0/janito/providers/moonshotai/provider.py +0 -95
- {janito-2.15.0 → janito-2.17.0}/.codespellrc +0 -0
- {janito-2.15.0 → janito-2.17.0}/.gitattributes +0 -0
- /janito-2.15.0/.github/workflows/python-app.yml → /janito-2.17.0/.github/workflows/python-app.yml.disabled +0 -0
- {janito-2.15.0 → janito-2.17.0}/.gitignore +0 -0
- {janito-2.15.0 → janito-2.17.0}/.pre-commit-config.yaml +0 -0
- {janito-2.15.0 → janito-2.17.0}/.secrets.baseline +0 -0
- {janito-2.15.0 → janito-2.17.0}/.vscode/settings.json +0 -0
- {janito-2.15.0 → janito-2.17.0}/LICENSE +0 -0
- {janito-2.15.0 → janito-2.17.0}/README-dev.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/README.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/UPDATING_DOCS.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/adding_mcp.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/DIV.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/Interfaces.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/about/costs.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/about/vs-webchats.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/about/why.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/alternatives.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/concepts/analysis-style.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/concepts/index.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/deepseek-setup.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/driver-flow.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/driver-request-cancellation.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/drivers/events.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/drivers.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/event-bus.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/configuration.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/developing.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/disabled-tools.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/installation.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/profiles.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/prompting/README.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/single-shot-terminal.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/terminal-shell.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/tools-developer-guide.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/using.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/guides/using_tools.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/index.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/llm-drivers.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/meta/quality-checks.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/moonshotai-setup.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/reference/api.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/reference/azure-openai.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/reference/cli-options.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/reference/message-handler-model.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/security.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/tools/search-text.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/tools-index.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/tools-natural-results.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/tools-precision.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/docs/z-ai-setup.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/git_diff.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/github_diff +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/README.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/__main__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/_version.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/script_runner.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/toolbar.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_models.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_profiles.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_providers.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_tools.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/model_utils.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/show_config.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/config.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/console.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/core/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/core/event_logger.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/core/model_guesser.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/core/runner.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/core/setters.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/core/unsetters.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/main.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/prompt_core.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/prompt_handler.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/rich_terminal_reporter.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/utils.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/cli/verbose_output.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/config.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/config_manager.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/conversation_history.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/dir_walk_utils.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/docs/GETTING_STARTED.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/driver_events.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/drivers/openai/README.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/event_bus/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/event_bus/bus.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/event_bus/event.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/event_bus/handler.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/exceptions.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/formatting.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/gitignore_utils.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/i18n/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/i18n/messages.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/i18n/pt.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/README.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/agent.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/auth.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/driver.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/driver_config.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/driver_input.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/message_parts.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/model.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/llm/provider.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/mkdocs.yml +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/perf_singleton.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/performance_collector.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/platform_discovery.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/provider_config.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/provider_registry.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/alibaba/model_info.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/deepseek/model_info.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/google/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/google/model_info.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/moonshotai/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/moonshotai/model_info.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/openai/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/openai/model_info.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/registry.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/zai/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/zai/model_info.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/providers/zai/schema_generator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/report_events.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/shell.bak.zip +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/README.md +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/adapter.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/ask_user.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/copy_file.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/create_directory.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/create_file.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/fetch_url.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/find_files.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/move_file.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/open_url.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/python_code_run.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/python_command_run.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/python_file_run.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/read_files.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/remove_directory.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/remove_file.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/core.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/view_file.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/disabled_tools.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/inspect_registry.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/path_security.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/permissions.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/permissions_parse.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_base.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_events.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_utils.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/tools_adapter.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/tools/tools_schema.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito/utils.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito.egg-info/requires.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/janito.egg-info/top_level.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/pyproject.toml +0 -0
- {janito-2.15.0 → janito-2.17.0}/pytest.ini +0 -0
- {janito-2.15.0 → janito-2.17.0}/requirements-dev.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/requirements.txt +0 -0
- {janito-2.15.0 → janito-2.17.0}/setup.cfg +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/adapters/local/test_read_files.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/test_cli_list_models.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/test_cli_list_providers.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/test_cli_version.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/test_disabled_tools.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/test_provider_alibaba.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tests/test_provider_moonshotai.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tools/release.py +0 -0
- {janito-2.15.0 → janito-2.17.0}/tox.ini +0 -0
@@ -2,31 +2,144 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
-
## [
|
5
|
+
## [Unreleased]
|
6
|
+
|
7
|
+
## [2.17.0] - 2025-08-05
|
6
8
|
|
7
9
|
### Added
|
8
|
-
|
9
|
-
- **
|
10
|
-
- **
|
11
|
-
-
|
12
|
-
|
13
|
-
- **
|
14
|
-
-
|
15
|
-
-
|
10
|
+
|
11
|
+
- **New Provider Support**
|
12
|
+
- **Cerebras Provider**: Added complete support for Cerebras with qwen-3-coder-480b model
|
13
|
+
- qwen-3-coder-480b: 32k context, reasoning-focused model with function calling support
|
14
|
+
|
15
|
+
- **Enhanced UX**
|
16
|
+
- Improved error handling for invalid provider names in set-api-key command
|
17
|
+
- Better error messages when provider is not found
|
16
18
|
|
17
19
|
### Changed
|
18
|
-
|
19
|
-
- **
|
20
|
-
-
|
21
|
-
-
|
22
|
-
-
|
20
|
+
|
21
|
+
- **Provider Improvements**
|
22
|
+
- Updated Alibaba endpoint to international URL for better global access
|
23
|
+
- Simplified region display to 2-letter codes for cleaner output
|
24
|
+
- Improved driver listing and region display functionality
|
25
|
+
|
26
|
+
- **Zero Mode Enhancement**
|
27
|
+
- Zero mode now properly disables system prompt and tools for minimal interaction
|
23
28
|
|
24
29
|
### Fixed
|
25
|
-
- **Driver Configuration**: Fixed AttributeError in ZAI provider by initializing _driver_config properly
|
26
|
-
- **Import Handling**: Added proper import error handling for optional dependencies in ZAI driver
|
27
|
-
- **CLI Integration**: Fixed list_drivers integration into main CLI flow
|
28
30
|
|
29
|
-
|
31
|
+
- **Bug Fixes**
|
32
|
+
- Added missing tools adapter to Cerebras provider
|
33
|
+
- Improved error handling for invalid provider names in set-api-key command
|
34
|
+
|
35
|
+
## [2.16.0] - 2025-01-08
|
36
|
+
|
37
|
+
### Added
|
38
|
+
|
39
|
+
- **New CLI Features**
|
40
|
+
- `--python` flag: Start directly with Python developer profile without manual selection
|
41
|
+
- `--multi` option: Enable default multiline input in chat mode
|
42
|
+
- `--list-drivers` command: List available LLM drivers and their dependencies
|
43
|
+
- `--list-providers-region` command: Show providers with region information
|
44
|
+
|
45
|
+
- **New Providers**
|
46
|
+
- **Z.AI Provider**: Complete support for Z.AI with GLM-4.5, GLM-4, and GLM-4V models
|
47
|
+
- GLM-4.5: 128k context with thinking support for advanced reasoning
|
48
|
+
- GLM-4: General-purpose model with 128k context
|
49
|
+
- GLM-4V: Vision model for image understanding with 128k context
|
50
|
+
- **Alibaba Cloud Provider**: Support for Qwen models including qwen-turbo, qwen-plus, qwen-max, and qwen3-coder-plus
|
51
|
+
|
52
|
+
- **Enhanced UX**
|
53
|
+
- Model information display now includes backend hostname in both chat and single-shot modes
|
54
|
+
- Improved region management with geolocation utilities
|
55
|
+
- Enhanced error handling for missing API keys and dependencies
|
56
|
+
|
57
|
+
### Changed
|
58
|
+
|
59
|
+
- **Provider Improvements**
|
60
|
+
- Updated Z.AI provider to use official SDK with improved model support
|
61
|
+
- Changed default GLM model from air to regular version
|
62
|
+
- Updated Alibaba endpoint to international URL for better global access
|
63
|
+
- Simplified region display to 2-letter codes for cleaner output
|
64
|
+
|
65
|
+
- **Documentation**
|
66
|
+
- Updated documentation URLs to use GitHub Pages default domain
|
67
|
+
- Fixed documentation URL to docs.janito.dev
|
68
|
+
- Enhanced provider documentation with new Z.AI and Alibaba Cloud details
|
69
|
+
|
70
|
+
### Fixed
|
71
|
+
|
72
|
+
- **Bug Fixes**
|
73
|
+
- Fixed AttributeError when ZAIProvider API key is missing
|
74
|
+
- Removed accidentally committed test files
|
75
|
+
- Improved error handling and user experience in profile selection
|
76
|
+
- Fixed various import order issues for better code organization
|
77
|
+
|
78
|
+
- **Code Quality**
|
79
|
+
- Refactored provider registry for reduced complexity
|
80
|
+
- Improved CLI argument handling and validation
|
81
|
+
- Enhanced terminal output styling and formatting
|
82
|
+
|
83
|
+
### Security
|
84
|
+
|
85
|
+
- **Enhanced Security**
|
86
|
+
- Improved privilege checking and status display in chat sessions
|
87
|
+
- Enhanced error handling for missing dependencies and API keys
|
88
|
+
- Better validation of provider configurations
|
89
|
+
|
90
|
+
### Technical Improvements
|
91
|
+
|
92
|
+
- **Architecture**
|
93
|
+
- Refactored core CLI and runner modules for better maintainability
|
94
|
+
- Improved prompt handling and streamlined main CLI logic
|
95
|
+
- Enhanced provider registry with new visual indicators
|
96
|
+
- Better separation of concerns in driver and provider implementations
|
97
|
+
|
98
|
+
- **Performance**
|
99
|
+
- Optimized model information retrieval
|
100
|
+
- Improved startup performance with better configuration handling
|
101
|
+
- Enhanced memory usage in chat sessions
|
102
|
+
|
103
|
+
### Developer Experience
|
104
|
+
|
105
|
+
- **Testing**
|
106
|
+
- Added comprehensive tests for new CLI commands
|
107
|
+
- Improved test coverage for provider configurations
|
108
|
+
- Enhanced error handling in test scenarios
|
109
|
+
|
110
|
+
- **Documentation**
|
111
|
+
- Updated all provider documentation with new features
|
112
|
+
- Added comprehensive setup guides for new providers
|
113
|
+
- Improved CLI usage examples and syntax highlighting
|
114
|
+
|
115
|
+
## [2.15.0] - 2025-08-05
|
116
|
+
|
117
|
+
## [2.16.0] - 2025-01-08
|
118
|
+
|
119
|
+
### Added
|
120
|
+
|
121
|
+
- Added `--python` CLI flag to start with the Python developer profile without manual profile selection
|
122
|
+
- Added `--list-drivers` CLI command to list available LLM drivers and their dependencies
|
123
|
+
- Added `--multi` CLI option for default multiline input in chat mode
|
124
|
+
- Enhanced model information display with backend hostname in both chat and single-shot modes
|
125
|
+
|
126
|
+
### Changed
|
127
|
+
|
128
|
+
- Updated Z.AI provider to use official SDK with improved model support
|
129
|
+
- Changed default GLM model from air to regular version
|
130
|
+
- Updated documentation URLs to use GitHub Pages default domain
|
131
|
+
|
132
|
+
### Fixed
|
133
|
+
|
134
|
+
- Fixed AttributeError when ZAIProvider API key is missing
|
135
|
+
- Removed accidentally committed test files
|
136
|
+
- Improved error handling and user experience in profile selection
|
137
|
+
|
138
|
+
### Security
|
139
|
+
|
140
|
+
- Enhanced privilege checking and status display in chat sessions
|
141
|
+
|
142
|
+
## [2.15.0] - 2025-08-05
|
30
143
|
|
31
144
|
### Added
|
32
145
|
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# Changelog v2.16.0
|
2
|
+
|
3
|
+
## [2.16.0] - 2025-01-08
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- **New CLI Features**
|
8
|
+
- `--python` flag: Start directly with Python developer profile without manual selection
|
9
|
+
- `--multi` option: Enable default multiline input in chat mode
|
10
|
+
- `--list-drivers` command: List available LLM drivers and their dependencies
|
11
|
+
- `--list-providers-region` command: Show providers with region information
|
12
|
+
|
13
|
+
- **New Providers**
|
14
|
+
- **Z.AI Provider**: Complete support for Z.AI with GLM-4.5, GLM-4, and GLM-4V models
|
15
|
+
- GLM-4.5: 128k context with thinking support for advanced reasoning
|
16
|
+
- GLM-4: General-purpose model with 128k context
|
17
|
+
- GLM-4V: Vision model for image understanding with 128k context
|
18
|
+
- **Alibaba Cloud Provider**: Support for Qwen models including qwen-turbo, qwen-plus, qwen-max, and qwen3-coder-plus
|
19
|
+
|
20
|
+
- **Enhanced UX**
|
21
|
+
- Model information display now includes backend hostname in both chat and single-shot modes
|
22
|
+
- Improved region management with geolocation utilities
|
23
|
+
- Enhanced error handling for missing API keys and dependencies
|
24
|
+
|
25
|
+
### Changed
|
26
|
+
|
27
|
+
- **Provider Improvements**
|
28
|
+
- Updated Z.AI provider to use official SDK with improved model support
|
29
|
+
- Changed default GLM model from air to regular version
|
30
|
+
- Updated Alibaba endpoint to international URL for better global access
|
31
|
+
- Simplified region display to 2-letter codes for cleaner output
|
32
|
+
|
33
|
+
- **Documentation**
|
34
|
+
- Updated documentation URLs to use GitHub Pages default domain
|
35
|
+
- Fixed documentation URL to docs.janito.dev
|
36
|
+
- Enhanced provider documentation with new Z.AI and Alibaba Cloud details
|
37
|
+
|
38
|
+
### Fixed
|
39
|
+
|
40
|
+
- **Bug Fixes**
|
41
|
+
- Fixed AttributeError when ZAIProvider API key is missing
|
42
|
+
- Removed accidentally committed test files
|
43
|
+
- Improved error handling and user experience in profile selection
|
44
|
+
- Fixed various import order issues for better code organization
|
45
|
+
|
46
|
+
- **Code Quality**
|
47
|
+
- Refactored provider registry for reduced complexity
|
48
|
+
- Improved CLI argument handling and validation
|
49
|
+
- Enhanced terminal output styling and formatting
|
50
|
+
|
51
|
+
### Security
|
52
|
+
|
53
|
+
- **Enhanced Security**
|
54
|
+
- Improved privilege checking and status display in chat sessions
|
55
|
+
- Enhanced error handling for missing dependencies and API keys
|
56
|
+
- Better validation of provider configurations
|
57
|
+
|
58
|
+
### Technical Improvements
|
59
|
+
|
60
|
+
- **Architecture**
|
61
|
+
- Refactored core CLI and runner modules for better maintainability
|
62
|
+
- Improved prompt handling and streamlined main CLI logic
|
63
|
+
- Enhanced provider registry with new visual indicators
|
64
|
+
- Better separation of concerns in driver and provider implementations
|
65
|
+
|
66
|
+
- **Performance**
|
67
|
+
- Optimized model information retrieval
|
68
|
+
- Improved startup performance with better configuration handling
|
69
|
+
- Enhanced memory usage in chat sessions
|
70
|
+
|
71
|
+
### Developer Experience
|
72
|
+
|
73
|
+
- **Testing**
|
74
|
+
- Added comprehensive tests for new CLI commands
|
75
|
+
- Improved test coverage for provider configurations
|
76
|
+
- Enhanced error handling in test scenarios
|
77
|
+
|
78
|
+
- **Documentation**
|
79
|
+
- Updated all provider documentation with new features
|
80
|
+
- Added comprehensive setup guides for new providers
|
81
|
+
- Improved CLI usage examples and syntax highlighting
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Cerebras Setup Guide
|
2
|
+
|
3
|
+
This guide will help you set up Janito to use Cerebras as an LLM provider.
|
4
|
+
|
5
|
+
## Prerequisites
|
6
|
+
|
7
|
+
1. A Cerebras account
|
8
|
+
2. An API key from Cerebras
|
9
|
+
|
10
|
+
## Getting an API Key
|
11
|
+
|
12
|
+
1. Visit the [Cerebras API Keys page](https://api.cerebras.ai/)
|
13
|
+
2. Log in to your account
|
14
|
+
3. Generate a new API key
|
15
|
+
4. Copy the API key for use in Janito
|
16
|
+
|
17
|
+
## Configuration
|
18
|
+
|
19
|
+
To configure Janito to use Cerebras, you need to set your API key:
|
20
|
+
|
21
|
+
```bash
|
22
|
+
janito --set-api-key YOUR_CEREBRAS_API_KEY -p cerebras
|
23
|
+
```
|
24
|
+
|
25
|
+
Replace `YOUR_CEREBRAS_API_KEY` with the API key you obtained from Cerebras.
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
After setting up your API key, you can use Cerebras models with Janito:
|
30
|
+
|
31
|
+
```bash
|
32
|
+
janito -p cerebras "Hello, how are you?"
|
33
|
+
```
|
34
|
+
|
35
|
+
By default, Janito will use the `qwen-3-coder-480b` model. You can specify a different model if needed:
|
36
|
+
|
37
|
+
```bash
|
38
|
+
janito -p cerebras -m qwen-3-coder-480b "Explain quantum computing"
|
39
|
+
```
|
40
|
+
|
41
|
+
## Available Models
|
42
|
+
|
43
|
+
Cerebras offers several models through their API:
|
44
|
+
|
45
|
+
- `qwen-3-coder-480b`: 32k context, reasoning-focused model with function calling support
|
46
|
+
|
47
|
+
## Troubleshooting
|
48
|
+
|
49
|
+
If you encounter issues:
|
50
|
+
|
51
|
+
1. Verify your API key is correct and active
|
52
|
+
2. Check that you have internet connectivity
|
53
|
+
3. Ensure you're using a supported model name
|
54
|
+
4. Check the Cerebras status page for any service outages
|
55
|
+
|
56
|
+
For further assistance, consult the [Cerebras documentation](https://api.cerebras.ai/docs) or [Janito documentation](https://docs.janito.dev).
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# Supported Providers and Models
|
2
|
+
|
3
|
+
This page lists the supported providers and their available models.
|
4
|
+
|
5
|
+
## OpenAI
|
6
|
+
|
7
|
+
- GPT-3.5 Turbo
|
8
|
+
- GPT-4
|
9
|
+
- GPT-4 Turbo
|
10
|
+
|
11
|
+
## Google
|
12
|
+
|
13
|
+
- Gemini Pro
|
14
|
+
- Gemini 1.5 Pro
|
15
|
+
|
16
|
+
## Anthropic
|
17
|
+
|
18
|
+
- Claude 2
|
19
|
+
- Claude 3 Opus
|
20
|
+
- Claude 3 Sonnet
|
21
|
+
- Claude 3 Haiku
|
22
|
+
|
23
|
+
## MoonshotAI
|
24
|
+
|
25
|
+
- kimi-k2-turbo-preview
|
26
|
+
- kimi-k2-turbo-preview
|
27
|
+
- kimi-k1-8k
|
28
|
+
- kimi-k1-32k
|
29
|
+
- kimi-k1-128k
|
30
|
+
|
31
|
+
- Llama-3-8b-8192
|
32
|
+
- Llama-3-70b-8192
|
33
|
+
|
34
|
+
## Alibaba
|
35
|
+
|
36
|
+
- qwen-turbo
|
37
|
+
- qwen-plus
|
38
|
+
- qwen-max
|
39
|
+
- qwen3-coder-plus (default)
|
40
|
+
- qwen3-coder-480b-a35b-instruct
|
41
|
+
|
42
|
+
## Z.AI
|
43
|
+
|
44
|
+
- glm-4.5
|
45
|
+
- glm-4.5-air
|
46
|
+
|
47
|
+
## Cerebras
|
48
|
+
|
49
|
+
**Production Models:**
|
50
|
+
- llama-4-scout-17b-16e-instruct
|
51
|
+
- llama-3.3-70b
|
52
|
+
- llama3.1-8b
|
53
|
+
- qwen-3-32b
|
54
|
+
|
55
|
+
**Preview Models:**
|
56
|
+
- llama-4-maverick-17b-128e-instruct
|
57
|
+
- qwen-3-235b-a22b-instruct-2507
|
58
|
+
- qwen-3-235b-a22b-thinking-2507
|
59
|
+
- qwen-3-coder-480b
|
60
|
+
- gpt-oss-120b
|
61
|
+
|
62
|
+
**Notes:**
|
63
|
+
- qwen-3-coder-480b: 32k context, reasoning-focused model with function calling support
|
64
|
+
|
65
|
+
<!-- Removed links to model_info.py files for all providers to avoid broken references. -->
|
@@ -167,7 +167,7 @@ def setup_agent(
|
|
167
167
|
"""
|
168
168
|
Creates an agent. A system prompt is rendered from a template only when a profile is specified.
|
169
169
|
"""
|
170
|
-
if no_tools_mode:
|
170
|
+
if no_tools_mode or zero_mode:
|
171
171
|
tools_provider = None
|
172
172
|
else:
|
173
173
|
tools_provider = get_local_tools_adapter()
|
@@ -115,9 +115,15 @@ class ChatSession:
|
|
115
115
|
def _select_profile_and_role(self, args, role):
|
116
116
|
profile = getattr(args, "profile", None) if args is not None else None
|
117
117
|
role_arg = getattr(args, "role", None) if args is not None else None
|
118
|
+
python_profile = getattr(args, "python", False) if args is not None else False
|
118
119
|
profile_system_prompt = None
|
119
120
|
no_tools_mode = False
|
120
|
-
|
121
|
+
|
122
|
+
# Handle --python flag
|
123
|
+
if python_profile and profile is None and role_arg is None:
|
124
|
+
profile = "Developer with Python Tools"
|
125
|
+
|
126
|
+
if profile is None and role_arg is None and not python_profile:
|
121
127
|
try:
|
122
128
|
from janito.cli.chat_mode.session_profile_select import select_profile
|
123
129
|
|
@@ -277,6 +283,41 @@ class ChatSession:
|
|
277
283
|
else None
|
278
284
|
)
|
279
285
|
start_time = time.time()
|
286
|
+
|
287
|
+
# Print rule line with model info before processing prompt
|
288
|
+
model_name = (
|
289
|
+
self.agent.get_model_name()
|
290
|
+
if hasattr(self.agent, "get_model_name")
|
291
|
+
else "Unknown"
|
292
|
+
)
|
293
|
+
provider_name = (
|
294
|
+
self.agent.get_provider_name()
|
295
|
+
if hasattr(self.agent, "get_provider_name")
|
296
|
+
else "Unknown"
|
297
|
+
)
|
298
|
+
|
299
|
+
# Get backend hostname if available
|
300
|
+
backend_hostname = "Unknown"
|
301
|
+
if hasattr(self.agent, "driver") and self.agent.driver:
|
302
|
+
if hasattr(self.agent.driver, "config") and hasattr(
|
303
|
+
self.agent.driver.config, "base_url"
|
304
|
+
):
|
305
|
+
base_url = self.agent.driver.config.base_url
|
306
|
+
if base_url:
|
307
|
+
try:
|
308
|
+
from urllib.parse import urlparse
|
309
|
+
|
310
|
+
parsed = urlparse(base_url)
|
311
|
+
backend_hostname = parsed.netloc
|
312
|
+
except Exception:
|
313
|
+
backend_hostname = base_url
|
314
|
+
|
315
|
+
self.console.print(
|
316
|
+
Rule(
|
317
|
+
f"[bold blue]Model: {model_name} ({provider_name}) | Backend: {backend_hostname}[/bold blue]"
|
318
|
+
)
|
319
|
+
)
|
320
|
+
|
280
321
|
self._prompt_handler.run_prompt(cmd_input)
|
281
322
|
end_time = time.time()
|
282
323
|
elapsed = end_time - start_time
|
@@ -0,0 +1,162 @@
|
|
1
|
+
"""
|
2
|
+
CLI Command: List available LLM drivers and their dependencies
|
3
|
+
"""
|
4
|
+
|
5
|
+
import importlib
|
6
|
+
import sys
|
7
|
+
from pathlib import Path
|
8
|
+
from rich.console import Console
|
9
|
+
from rich.table import Table
|
10
|
+
from rich.panel import Panel
|
11
|
+
from rich.text import Text
|
12
|
+
|
13
|
+
console = Console()
|
14
|
+
|
15
|
+
|
16
|
+
def _detect_dependencies_from_content(content, class_name):
|
17
|
+
"""Detect dependencies from module content."""
|
18
|
+
dependencies = []
|
19
|
+
|
20
|
+
if "import openai" in content or "from openai" in content:
|
21
|
+
dependencies.append("openai")
|
22
|
+
if "import zai" in content or "from zai" in content:
|
23
|
+
dependencies.append("zai")
|
24
|
+
if "import anthropic" in content or "from anthropic" in content:
|
25
|
+
dependencies.append("anthropic")
|
26
|
+
if "import google" in content or "from google" in content:
|
27
|
+
dependencies.append("google-generativeai")
|
28
|
+
|
29
|
+
# Remove openai from zai driver dependencies
|
30
|
+
if "ZAIModelDriver" in class_name and "openai" in dependencies:
|
31
|
+
dependencies.remove("openai")
|
32
|
+
|
33
|
+
return dependencies
|
34
|
+
|
35
|
+
|
36
|
+
def _check_dependency_status(dependencies):
|
37
|
+
"""Check if dependencies are available."""
|
38
|
+
if not dependencies:
|
39
|
+
return ["No external dependencies"]
|
40
|
+
|
41
|
+
dep_status = []
|
42
|
+
for dep in dependencies:
|
43
|
+
try:
|
44
|
+
importlib.import_module(dep)
|
45
|
+
dep_status.append(f"✅ {dep}")
|
46
|
+
except ImportError:
|
47
|
+
dep_status.append(f"❌ {dep}")
|
48
|
+
|
49
|
+
return dep_status
|
50
|
+
|
51
|
+
|
52
|
+
def _get_single_driver_info(module_path, class_name):
|
53
|
+
"""Get information for a single driver."""
|
54
|
+
try:
|
55
|
+
module = importlib.import_module(module_path)
|
56
|
+
driver_class = getattr(module, class_name)
|
57
|
+
|
58
|
+
available = getattr(driver_class, "available", True)
|
59
|
+
unavailable_reason = getattr(driver_class, "unavailable_reason", None)
|
60
|
+
|
61
|
+
# Read module file to detect imports
|
62
|
+
module_file = Path(module.__file__)
|
63
|
+
with open(module_file, "r", encoding="utf-8") as f:
|
64
|
+
content = f.read()
|
65
|
+
|
66
|
+
dependencies = _detect_dependencies_from_content(content, class_name)
|
67
|
+
dep_status = _check_dependency_status(dependencies)
|
68
|
+
|
69
|
+
return {
|
70
|
+
"name": class_name,
|
71
|
+
"available": available,
|
72
|
+
"reason": unavailable_reason,
|
73
|
+
"dependencies": dep_status,
|
74
|
+
}
|
75
|
+
|
76
|
+
except (ImportError, AttributeError) as e:
|
77
|
+
return {
|
78
|
+
"name": class_name,
|
79
|
+
"module": module_path,
|
80
|
+
"available": False,
|
81
|
+
"reason": str(e),
|
82
|
+
"dependencies": ["❌ Module not found"],
|
83
|
+
}
|
84
|
+
|
85
|
+
|
86
|
+
def get_driver_info():
|
87
|
+
"""Get information about all available drivers."""
|
88
|
+
drivers = []
|
89
|
+
|
90
|
+
# Define known driver modules
|
91
|
+
driver_modules = [
|
92
|
+
("janito.drivers.openai.driver", "OpenAIModelDriver"),
|
93
|
+
("janito.drivers.azure_openai.driver", "AzureOpenAIModelDriver"),
|
94
|
+
("janito.drivers.zai.driver", "ZAIModelDriver"),
|
95
|
+
("janito.drivers.cerebras.driver", "CerebrasModelDriver"),
|
96
|
+
]
|
97
|
+
|
98
|
+
for module_path, class_name in driver_modules:
|
99
|
+
driver_info = _get_single_driver_info(module_path, class_name)
|
100
|
+
drivers.append(driver_info)
|
101
|
+
|
102
|
+
return drivers
|
103
|
+
|
104
|
+
|
105
|
+
def _create_driver_table(drivers):
|
106
|
+
"""Create and populate the drivers table."""
|
107
|
+
table = Table(title="Available LLM Drivers")
|
108
|
+
table.add_column("Driver", style="cyan", no_wrap=True)
|
109
|
+
table.add_column("Status", style="bold")
|
110
|
+
table.add_column("Dependencies", style="yellow")
|
111
|
+
|
112
|
+
for driver in drivers:
|
113
|
+
name = driver["name"]
|
114
|
+
|
115
|
+
if driver["available"]:
|
116
|
+
status = "[green]✅ Available[/green]"
|
117
|
+
if driver["reason"]:
|
118
|
+
status = f"[yellow]⚠️ Available ({driver['reason']})[/yellow]"
|
119
|
+
else:
|
120
|
+
status = f"[red]❌ Unavailable[/red]"
|
121
|
+
if driver["reason"]:
|
122
|
+
status = f"[red]❌ {driver['reason']}[/red]"
|
123
|
+
|
124
|
+
deps = "\n".join(driver["dependencies"])
|
125
|
+
table.add_row(name, status, deps)
|
126
|
+
|
127
|
+
return table
|
128
|
+
|
129
|
+
|
130
|
+
def _get_missing_dependencies(drivers):
|
131
|
+
"""Get list of missing dependencies."""
|
132
|
+
missing_deps = []
|
133
|
+
for driver in drivers:
|
134
|
+
for dep_status in driver["dependencies"]:
|
135
|
+
if dep_status.startswith("❌"):
|
136
|
+
dep_name = dep_status.split()[1]
|
137
|
+
if dep_name not in missing_deps:
|
138
|
+
missing_deps.append(dep_name)
|
139
|
+
return missing_deps
|
140
|
+
|
141
|
+
|
142
|
+
def handle_list_drivers(args=None):
|
143
|
+
"""List all available LLM drivers with their status and dependencies."""
|
144
|
+
drivers = get_driver_info()
|
145
|
+
|
146
|
+
if not drivers:
|
147
|
+
console.print("[red]No drivers found[/red]")
|
148
|
+
return
|
149
|
+
|
150
|
+
table = _create_driver_table(drivers)
|
151
|
+
console.print(table)
|
152
|
+
|
153
|
+
# Installation help - only show for missing dependencies
|
154
|
+
missing_deps = _get_missing_dependencies(drivers)
|
155
|
+
if missing_deps:
|
156
|
+
console.print(
|
157
|
+
f"\n[dim]💡 Install missing deps: pip install {' '.join(missing_deps)}[/dim]"
|
158
|
+
)
|
159
|
+
|
160
|
+
|
161
|
+
if __name__ == "__main__":
|
162
|
+
handle_list_drivers()
|
@@ -0,0 +1,85 @@
|
|
1
|
+
"""
|
2
|
+
CLI Command: List providers with their regional API information
|
3
|
+
"""
|
4
|
+
|
5
|
+
import json
|
6
|
+
from typing import Dict, List
|
7
|
+
from rich.console import Console
|
8
|
+
from rich.table import Table
|
9
|
+
from rich.panel import Panel
|
10
|
+
|
11
|
+
from janito.regions.provider_regions import PROVIDER_REGIONS, get_all_providers
|
12
|
+
from janito.regions.geo_utils import get_region_info
|
13
|
+
|
14
|
+
console = Console()
|
15
|
+
|
16
|
+
|
17
|
+
def handle_list_providers_region(args=None):
|
18
|
+
"""List all providers with their regional API information."""
|
19
|
+
|
20
|
+
# Get user location info
|
21
|
+
user_info = get_region_info()
|
22
|
+
user_region = user_info["major_region"]
|
23
|
+
|
24
|
+
# Get all providers
|
25
|
+
providers = get_all_providers()
|
26
|
+
|
27
|
+
# Create table
|
28
|
+
table = Table(title="LLM Providers by Region")
|
29
|
+
table.add_column("Provider", style="cyan", no_wrap=True)
|
30
|
+
table.add_column("Region", style="green")
|
31
|
+
table.add_column("Endpoint", style="bright_white")
|
32
|
+
|
33
|
+
for provider in sorted(providers):
|
34
|
+
regions = PROVIDER_REGIONS.get(provider, [])
|
35
|
+
if not regions:
|
36
|
+
table.add_row(provider, "N/A", "N/A", "N/A", "N/A")
|
37
|
+
continue
|
38
|
+
|
39
|
+
# Find the best region for the user
|
40
|
+
best_region = None
|
41
|
+
for region in regions:
|
42
|
+
if region.region_code.startswith(user_region):
|
43
|
+
best_region = region
|
44
|
+
break
|
45
|
+
|
46
|
+
# If no exact match, use first available
|
47
|
+
if not best_region:
|
48
|
+
best_region = regions[0]
|
49
|
+
|
50
|
+
# Extract 2-letter region code
|
51
|
+
if provider == "azure-openai":
|
52
|
+
region_code = "ALL"
|
53
|
+
else:
|
54
|
+
region_code = (
|
55
|
+
user_region
|
56
|
+
if any(r.region_code.startswith(user_region) for r in regions)
|
57
|
+
else (
|
58
|
+
"APAC"
|
59
|
+
if best_region.region_code == "ASIA-PACIFIC"
|
60
|
+
else best_region.region_code[:2]
|
61
|
+
)
|
62
|
+
)
|
63
|
+
|
64
|
+
table.add_row(
|
65
|
+
provider,
|
66
|
+
region_code,
|
67
|
+
best_region.endpoint,
|
68
|
+
)
|
69
|
+
|
70
|
+
console.print(table)
|
71
|
+
|
72
|
+
# Show user location info
|
73
|
+
console.print(
|
74
|
+
f"\n[dim]Your location: {user_info['country_code']} ({user_region})[/dim]"
|
75
|
+
)
|
76
|
+
console.print(f"[dim]Detection source: {user_info['source']}[/dim]")
|
77
|
+
|
78
|
+
# Show region mapping info
|
79
|
+
console.print(
|
80
|
+
"\n[dim]Regions: US (United States), EU (Europe), CN (China), CH (Switzerland), APAC (Asia Pacific)[/dim]"
|
81
|
+
)
|
82
|
+
|
83
|
+
|
84
|
+
if __name__ == "__main__":
|
85
|
+
handle_list_providers_region()
|