janito 2.12.0__tar.gz → 2.15.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.12.0 → janito-2.15.0}/CHANGELOG.md +23 -1
- {janito-2.12.0 → janito-2.15.0}/PKG-INFO +1 -1
- {janito-2.12.0 → janito-2.15.0}/docs/index.md +1 -0
- janito-2.15.0/docs/supported-providers-models.md +95 -0
- janito-2.15.0/docs/z-ai-setup.md +83 -0
- {janito-2.12.0 → janito-2.15.0}/janito/agent/setup_agent.py +1 -1
- janito-2.15.0/janito/cli/cli_commands/list_drivers.py +137 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/core/getters.py +6 -1
- {janito-2.12.0 → janito-2.15.0}/janito/cli/main_cli.py +8 -10
- {janito-2.12.0 → janito-2.15.0}/janito/drivers/zai/driver.py +23 -12
- {janito-2.12.0 → janito-2.15.0}/janito/providers/zai/model_info.py +5 -22
- {janito-2.12.0 → janito-2.15.0}/janito/providers/zai/provider.py +4 -1
- {janito-2.12.0 → janito-2.15.0}/janito/providers/zai/schema_generator.py +7 -5
- {janito-2.12.0 → janito-2.15.0}/janito.egg-info/PKG-INFO +1 -1
- {janito-2.12.0 → janito-2.15.0}/janito.egg-info/SOURCES.txt +2 -1
- {janito-2.12.0 → janito-2.15.0}/mkdocs.yml +1 -0
- janito-2.12.0/docs/supported-providers-models.md +0 -48
- janito-2.12.0/janito/drivers/driver_registry.py +0 -27
- {janito-2.12.0 → janito-2.15.0}/.codespellrc +0 -0
- {janito-2.12.0 → janito-2.15.0}/.gitattributes +0 -0
- {janito-2.12.0 → janito-2.15.0}/.github/workflows/python-app.yml +0 -0
- {janito-2.12.0 → janito-2.15.0}/.gitignore +0 -0
- {janito-2.12.0 → janito-2.15.0}/.pre-commit-config.yaml +0 -0
- {janito-2.12.0 → janito-2.15.0}/.secrets.baseline +0 -0
- {janito-2.12.0 → janito-2.15.0}/.vscode/settings.json +0 -0
- {janito-2.12.0 → janito-2.15.0}/LICENSE +0 -0
- {janito-2.12.0 → janito-2.15.0}/README-dev.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/README.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/UPDATING_DOCS.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/adding_mcp.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/DIV.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/Interfaces.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/about/costs.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/about/vs-webchats.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/about/why.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/alternatives.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/concepts/analysis-style.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/concepts/index.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/deepseek-setup.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/driver-flow.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/driver-request-cancellation.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/drivers/events.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/drivers.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/event-bus.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/configuration.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/developing.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/disabled-tools.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/installation.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/profiles.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/prompting/README.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/single-shot-terminal.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/terminal-shell.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/tools-developer-guide.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/using.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/guides/using_tools.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/llm-drivers.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/meta/quality-checks.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/moonshotai-setup.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/reference/api.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/reference/azure-openai.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/reference/cli-options.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/reference/message-handler-model.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/security.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/tools/search-text.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/tools-index.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/tools-natural-results.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/docs/tools-precision.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/git_diff.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/github_diff +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/README.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/__main__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/_version.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/script_runner.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/session.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/chat_mode/toolbar.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/list_models.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/list_profiles.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/list_providers.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/list_tools.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/model_utils.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/set_api_key.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/show_config.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/config.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/console.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/core/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/core/event_logger.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/core/model_guesser.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/core/runner.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/core/setters.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/core/unsetters.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/main.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/prompt_core.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/prompt_handler.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/prompt_setup.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/rich_terminal_reporter.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/single_shot_mode/handler.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/utils.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/cli/verbose_output.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/config.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/config_manager.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/conversation_history.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/dir_walk_utils.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/docs/GETTING_STARTED.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/driver_events.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/drivers/azure_openai/driver.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/drivers/openai/README.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/drivers/openai/driver.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/event_bus/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/event_bus/bus.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/event_bus/event.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/event_bus/handler.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/exceptions.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/formatting.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/formatting_token.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/gitignore_utils.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/i18n/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/i18n/messages.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/i18n/pt.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/README.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/agent.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/auth.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/driver.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/driver_config.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/driver_input.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/message_parts.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/model.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/llm/provider.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/mkdocs.yml +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/perf_singleton.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/performance_collector.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/platform_discovery.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/provider_config.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/provider_registry.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/alibaba/model_info.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/alibaba/provider.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/anthropic/provider.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/azure_openai/provider.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/deepseek/model_info.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/deepseek/provider.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/google/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/google/model_info.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/google/provider.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/moonshotai/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/moonshotai/model_info.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/moonshotai/provider.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/openai/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/openai/model_info.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/openai/provider.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/registry.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/providers/zai/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/report_events.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/shell.bak.zip +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/README.md +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/adapter.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/ask_user.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/copy_file.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/create_directory.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/create_file.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/fetch_url.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/find_files.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/move_file.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/open_url.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/python_code_run.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/python_command_run.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/python_file_run.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/read_files.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/remove_directory.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/remove_file.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/search_text/core.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/adapters/local/view_file.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/disabled_tools.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/inspect_registry.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/path_security.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/permissions.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/permissions_parse.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/tool_base.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/tool_events.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/tool_utils.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/tools_adapter.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/tools/tools_schema.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito/utils.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito.egg-info/requires.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/janito.egg-info/top_level.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/pyproject.toml +0 -0
- {janito-2.12.0 → janito-2.15.0}/pytest.ini +0 -0
- {janito-2.12.0 → janito-2.15.0}/requirements-dev.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/requirements.txt +0 -0
- {janito-2.12.0 → janito-2.15.0}/setup.cfg +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/adapters/local/test_read_files.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/test_cli_list_models.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/test_cli_list_providers.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/test_cli_version.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/test_disabled_tools.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/test_provider_alibaba.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tests/test_provider_moonshotai.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tools/release.py +0 -0
- {janito-2.12.0 → janito-2.15.0}/tox.ini +0 -0
@@ -2,7 +2,29 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
-
## [
|
5
|
+
## [2.12.0] - 2025-08-05
|
6
|
+
|
7
|
+
### Added
|
8
|
+
- **Enhanced Provider Documentation**: Updated supported-providers-models.md with comprehensive provider information including drivers and dependencies
|
9
|
+
- **Improved Driver Listing**: Enhanced list_drivers command with better dependency detection and duplicate removal
|
10
|
+
- **Z.AI Provider**: Added ZAIModelDriver with OpenAI SDK compatibility for Z.AI API
|
11
|
+
- **Google Gemini Provider**: Added support for Gemini Pro and Gemini 1.5 Pro models via OpenAI-compatible API
|
12
|
+
- **DeepSeek Provider**: Added support for deepseek-chat and deepseek-coder models via OpenAI-compatible API
|
13
|
+
- **Alibaba Provider**: Added support for qwen-turbo, qwen-plus, qwen-max, and qwen3-coder-plus models via OpenAI-compatible API
|
14
|
+
- **MoonshotAI Provider**: Enhanced with additional models and OpenAI-compatible API support
|
15
|
+
- **Azure OpenAI Provider**: Added support for GPT-4o and GPT-4o-mini models
|
16
|
+
|
17
|
+
### Changed
|
18
|
+
- **CLI Core**: Updated getter functions to exit after execution for better CLI behavior
|
19
|
+
- **Driver Architecture**: Enhanced ZAI driver to use OpenAI SDK instead of Z.AI SDK for better compatibility
|
20
|
+
- **Dependency Management**: Improved dependency detection in list_drivers command with duplicate removal
|
21
|
+
- **Provider Registry**: Enhanced provider information display with driver names and dependency status
|
22
|
+
- **Model Support**: Updated all providers to use OpenAI-compatible API where applicable, expanding model availability
|
23
|
+
|
24
|
+
### 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
|
6
28
|
|
7
29
|
## [2.11.0] - 2025-08-04
|
8
30
|
|
@@ -21,5 +21,6 @@ Janito is a lightweight language model client focused on software development ac
|
|
21
21
|
- [What Is a Language Model Client?](concepts/language-model-clients.md) — Thin vs. Thick Clients explained
|
22
22
|
- [Configuring Janito for DeepSeek](deepseek-setup.md) — How to set up and use DeepSeek models
|
23
23
|
- [Configuring Janito for MoonshotAI](moonshotai-setup.md) — How to set up and use MoonshotAI models
|
24
|
+
- [Configuring Janito for Z.ai](z-ai-setup.md) — How to set up and use Z.ai models
|
24
25
|
- **Concepts & Terminology:** See the [concepts](concepts/index.md) section for more foundational explanations.
|
25
26
|
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# Supported Providers and Models
|
2
|
+
|
3
|
+
This page lists the supported providers and their available models.
|
4
|
+
|
5
|
+
## OpenAI
|
6
|
+
|
7
|
+
- **Driver**: OpenAIModelDriver
|
8
|
+
- **Dependencies**: ✅ openai
|
9
|
+
|
10
|
+
**Models:**
|
11
|
+
|
12
|
+
- GPT-3.5 Turbo
|
13
|
+
- GPT-4
|
14
|
+
- GPT-4 Turbo
|
15
|
+
- GPT-4o
|
16
|
+
- GPT-4o-mini
|
17
|
+
|
18
|
+
## Azure OpenAI
|
19
|
+
|
20
|
+
- **Driver**: AzureOpenAIModelDriver
|
21
|
+
- **Dependencies**: ✅ openai
|
22
|
+
|
23
|
+
**Models:**
|
24
|
+
|
25
|
+
- GPT-4o
|
26
|
+
- GPT-4o-mini
|
27
|
+
- GPT-4 Turbo
|
28
|
+
|
29
|
+
## Anthropic
|
30
|
+
|
31
|
+
- **Driver**: OpenAIModelDriver (via OpenAI-compatible API)
|
32
|
+
- **Dependencies**: ✅ openai
|
33
|
+
|
34
|
+
**Models:**
|
35
|
+
|
36
|
+
- Claude 3.7 Sonnet (claude-3-7-sonnet-20250219)
|
37
|
+
- Claude 3.5 Sonnet (claude-3-5-sonnet-20241022)
|
38
|
+
- Claude 3.5 Haiku (claude-3-5-haiku-20241022)
|
39
|
+
- Claude 3 Opus (claude-3-opus-20240229)
|
40
|
+
- Claude 3 Haiku (claude-3-haiku-20240307)
|
41
|
+
|
42
|
+
## Z.AI
|
43
|
+
|
44
|
+
- **Driver**: ZAIModelDriver
|
45
|
+
- **Dependencies**: ❌ zai (install with `pip install zai`)
|
46
|
+
|
47
|
+
**Models:**
|
48
|
+
|
49
|
+
- glm-4.5
|
50
|
+
- glm-4.5-air
|
51
|
+
|
52
|
+
## MoonshotAI
|
53
|
+
|
54
|
+
- **Driver**: OpenAIModelDriver (via OpenAI-compatible API)
|
55
|
+
- **Dependencies**: ✅ openai
|
56
|
+
|
57
|
+
**Models:**
|
58
|
+
|
59
|
+
- kimi-k2-turbo-preview
|
60
|
+
- kimi-k1-8k
|
61
|
+
- kimi-k1-32k
|
62
|
+
- kimi-k1-128k
|
63
|
+
|
64
|
+
## Alibaba
|
65
|
+
|
66
|
+
- **Driver**: OpenAIModelDriver (via OpenAI-compatible API)
|
67
|
+
- **Dependencies**: ✅ openai
|
68
|
+
|
69
|
+
**Models:**
|
70
|
+
|
71
|
+
- qwen-turbo
|
72
|
+
- qwen-plus
|
73
|
+
- qwen-max
|
74
|
+
- qwen3-coder-plus
|
75
|
+
- qwen3-coder-480b-a35b-instruct
|
76
|
+
|
77
|
+
## Google Gemini
|
78
|
+
|
79
|
+
- **Driver**: OpenAIModelDriver (via OpenAI-compatible API)
|
80
|
+
- **Dependencies**: ✅ openai
|
81
|
+
|
82
|
+
**Models:**
|
83
|
+
|
84
|
+
- Gemini Pro
|
85
|
+
- Gemini 1.5 Pro
|
86
|
+
|
87
|
+
## DeepSeek
|
88
|
+
|
89
|
+
- **Driver**: OpenAIModelDriver (via OpenAI-compatible API)
|
90
|
+
- **Dependencies**: ✅ openai
|
91
|
+
|
92
|
+
**Models:**
|
93
|
+
|
94
|
+
- deepseek-chat
|
95
|
+
- deepseek-coder
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Z.ai API Setup Guide
|
2
|
+
|
3
|
+
This guide explains how to set up and use Z.ai's API with your API key.
|
4
|
+
|
5
|
+
## Getting Your API Key
|
6
|
+
|
7
|
+
1. Visit [Z.ai API Management](https://z.ai/manage-apikey/apikey-list)
|
8
|
+
2. Log in to your Z.ai account
|
9
|
+
3. Navigate to the API Keys section
|
10
|
+
4. Create a new API key if you don't have one yet
|
11
|
+
|
12
|
+
## API Key Format
|
13
|
+
|
14
|
+
Z.ai uses a new key format that includes both a user ID and secret:
|
15
|
+
```
|
16
|
+
{id}.{secret}
|
17
|
+
```
|
18
|
+
|
19
|
+
**Important Security Notes:**
|
20
|
+
|
21
|
+
- Never share your API keys
|
22
|
+
- Do not expose keys in browsers or client-side code
|
23
|
+
- Leaked keys may be automatically regenerated for security
|
24
|
+
- Store keys securely in environment variables or secure vaults
|
25
|
+
|
26
|
+
## Setting Up Your Environment
|
27
|
+
|
28
|
+
### Environment Variable (Recommended)
|
29
|
+
|
30
|
+
Set your API key as an environment variable:
|
31
|
+
|
32
|
+
**Linux/macOS:**
|
33
|
+
```bash
|
34
|
+
export ZAI_API_KEY="your-id.your-secret"
|
35
|
+
```
|
36
|
+
|
37
|
+
**Windows (Command Prompt):**
|
38
|
+
```cmd
|
39
|
+
set ZAI_API_KEY=your-id.your-secret
|
40
|
+
```
|
41
|
+
|
42
|
+
**Windows (PowerShell):**
|
43
|
+
```powershell
|
44
|
+
$env:ZAI_API_KEY="your-id.your-secret"
|
45
|
+
```
|
46
|
+
|
47
|
+
### Configuration File
|
48
|
+
|
49
|
+
You can also store your API key in a configuration file (ensure proper file permissions):
|
50
|
+
|
51
|
+
```json
|
52
|
+
{
|
53
|
+
"zai_api_key": "your-id.your-secret"
|
54
|
+
}
|
55
|
+
```
|
56
|
+
|
57
|
+
## Rate Limits and Billing
|
58
|
+
|
59
|
+
- Check your [API Management dashboard](https://z.ai/manage-apikey/apikey-list) for current rate limits
|
60
|
+
- Monitor your usage and billing information
|
61
|
+
- Contact support for API recharge if needed
|
62
|
+
|
63
|
+
## Support
|
64
|
+
|
65
|
+
For API-related support:
|
66
|
+
|
67
|
+
- Visit [Z.ai Contact](https://z.ai/contact) for product support
|
68
|
+
- Join the [Discord community](https://z.ai/contact) to chat with developers
|
69
|
+
- Check the [API documentation](https://z.ai/model-api) for model-specific details
|
70
|
+
|
71
|
+
## Available Models
|
72
|
+
|
73
|
+
Z.ai provides several models including:
|
74
|
+
|
75
|
+
- **GLM-4.5**: Latest flagship model with reasoning, coding, and agent functionalities
|
76
|
+
- **GLM-4.5-Air**: Lightweight flagship model with cost-effectiveness
|
77
|
+
- **GLM-4.5-Flash**: Most advanced free model
|
78
|
+
- **GLM-4-32B-0414-128K**: General-purpose LLM for business and technical domains
|
79
|
+
- **CogVideoX-3**: Text-to-video model for high-fidelity motion
|
80
|
+
- **Vidu Q1**: High-fidelity 1080p video generation
|
81
|
+
- **Vidu 2**: Fast, low-cost 720p video generation
|
82
|
+
|
83
|
+
For complete model specifications and capabilities, visit [Z.ai Models](https://z.ai/model-api).
|
@@ -12,7 +12,7 @@ from queue import Queue
|
|
12
12
|
from rich import print as rich_print
|
13
13
|
from janito.tools import get_local_tools_adapter
|
14
14
|
from janito.llm.agent import LLMAgent
|
15
|
-
|
15
|
+
|
16
16
|
from janito.platform_discovery import PlatformDiscovery
|
17
17
|
from janito.tools.tool_base import ToolPermissions
|
18
18
|
from janito.tools.permissions import get_global_allowed_permissions
|
@@ -0,0 +1,137 @@
|
|
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 get_driver_info():
|
17
|
+
"""Get information about all available drivers."""
|
18
|
+
drivers = []
|
19
|
+
|
20
|
+
# Define known driver modules
|
21
|
+
driver_modules = [
|
22
|
+
("janito.drivers.openai.driver", "OpenAIModelDriver"),
|
23
|
+
("janito.drivers.azure_openai.driver", "AzureOpenAIModelDriver"),
|
24
|
+
("janito.drivers.zai.driver", "ZAIModelDriver"),
|
25
|
+
]
|
26
|
+
|
27
|
+
for module_path, class_name in driver_modules:
|
28
|
+
try:
|
29
|
+
# Import the module
|
30
|
+
module = importlib.import_module(module_path)
|
31
|
+
driver_class = getattr(module, class_name)
|
32
|
+
|
33
|
+
# Get availability info
|
34
|
+
available = getattr(driver_class, 'available', True)
|
35
|
+
unavailable_reason = getattr(driver_class, 'unavailable_reason', None)
|
36
|
+
|
37
|
+
# Get dependencies from module imports
|
38
|
+
dependencies = []
|
39
|
+
module_file = Path(module.__file__)
|
40
|
+
|
41
|
+
# Read module file to detect imports
|
42
|
+
with open(module_file, 'r', encoding='utf-8') as f:
|
43
|
+
content = f.read()
|
44
|
+
|
45
|
+
# Simple dependency detection
|
46
|
+
if 'import openai' in content or 'from openai' in content:
|
47
|
+
dependencies.append('openai')
|
48
|
+
if 'import zai' in content or 'from zai' in content:
|
49
|
+
dependencies.append('zai')
|
50
|
+
if 'import anthropic' in content or 'from anthropic' in content:
|
51
|
+
dependencies.append('anthropic')
|
52
|
+
if 'import google' in content or 'from google' in content:
|
53
|
+
dependencies.append('google-generativeai')
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
# Remove duplicates while preserving order
|
58
|
+
seen = set()
|
59
|
+
dependencies = [dep for dep in dependencies if not (dep in seen or seen.add(dep))]
|
60
|
+
|
61
|
+
# Check if dependencies are available
|
62
|
+
dep_status = []
|
63
|
+
for dep in dependencies:
|
64
|
+
try:
|
65
|
+
importlib.import_module(dep)
|
66
|
+
dep_status.append(f"✅ {dep}")
|
67
|
+
except ImportError:
|
68
|
+
dep_status.append(f"❌ {dep}")
|
69
|
+
|
70
|
+
if not dependencies:
|
71
|
+
dep_status = ["No external dependencies"]
|
72
|
+
|
73
|
+
drivers.append({
|
74
|
+
'name': class_name,
|
75
|
+
'available': available,
|
76
|
+
'reason': unavailable_reason,
|
77
|
+
'dependencies': dep_status
|
78
|
+
})
|
79
|
+
|
80
|
+
except (ImportError, AttributeError) as e:
|
81
|
+
drivers.append({
|
82
|
+
'name': class_name,
|
83
|
+
'module': module_path,
|
84
|
+
'available': False,
|
85
|
+
'reason': str(e),
|
86
|
+
'dependencies': ["❌ Module not found"]
|
87
|
+
})
|
88
|
+
|
89
|
+
return drivers
|
90
|
+
|
91
|
+
|
92
|
+
def handle_list_drivers(args=None):
|
93
|
+
"""List all available LLM drivers with their status and dependencies."""
|
94
|
+
drivers = get_driver_info()
|
95
|
+
|
96
|
+
if not drivers:
|
97
|
+
console.print("[red]No drivers found[/red]")
|
98
|
+
return
|
99
|
+
|
100
|
+
# Create table
|
101
|
+
table = Table(title="Available LLM Drivers")
|
102
|
+
table.add_column("Driver", style="cyan", no_wrap=True)
|
103
|
+
table.add_column("Status", style="bold")
|
104
|
+
table.add_column("Dependencies", style="yellow")
|
105
|
+
|
106
|
+
for driver in drivers:
|
107
|
+
name = driver['name']
|
108
|
+
|
109
|
+
if driver['available']:
|
110
|
+
status = "[green]✅ Available[/green]"
|
111
|
+
if driver['reason']:
|
112
|
+
status = f"[yellow]⚠️ Available ({driver['reason']})[/yellow]"
|
113
|
+
else:
|
114
|
+
status = f"[red]❌ Unavailable[/red]"
|
115
|
+
if driver['reason']:
|
116
|
+
status = f"[red]❌ {driver['reason']}[/red]"
|
117
|
+
|
118
|
+
deps = "\n".join(driver['dependencies'])
|
119
|
+
|
120
|
+
table.add_row(name, status, deps)
|
121
|
+
|
122
|
+
console.print(table)
|
123
|
+
|
124
|
+
# Installation help
|
125
|
+
# Get unique missing dependencies
|
126
|
+
missing_deps = set()
|
127
|
+
for driver in drivers:
|
128
|
+
for dep_status in driver['dependencies']:
|
129
|
+
if dep_status.startswith('❌'):
|
130
|
+
missing_deps.add(dep_status[2:].strip())
|
131
|
+
|
132
|
+
if missing_deps:
|
133
|
+
console.print(f"\n[dim]💡 Install missing deps: pip install {' '.join(sorted(missing_deps))}[/dim]")
|
134
|
+
|
135
|
+
|
136
|
+
if __name__ == "__main__":
|
137
|
+
handle_list_drivers()
|
@@ -7,6 +7,7 @@ from janito.cli.cli_commands.list_models import handle_list_models
|
|
7
7
|
from janito.cli.cli_commands.list_tools import handle_list_tools
|
8
8
|
from janito.cli.cli_commands.show_config import handle_show_config
|
9
9
|
from janito.cli.cli_commands.list_config import handle_list_config
|
10
|
+
from janito.cli.cli_commands.list_drivers import handle_list_drivers
|
10
11
|
from functools import partial
|
11
12
|
from janito.provider_registry import ProviderRegistry
|
12
13
|
|
@@ -17,6 +18,7 @@ GETTER_KEYS = [
|
|
17
18
|
"list_models",
|
18
19
|
"list_tools",
|
19
20
|
"list_config",
|
21
|
+
"list_drivers",
|
20
22
|
]
|
21
23
|
|
22
24
|
|
@@ -42,7 +44,10 @@ def handle_getter(args, config_mgr=None):
|
|
42
44
|
"list_profiles": partial(handle_list_profiles, args),
|
43
45
|
"show_config": partial(handle_show_config, args),
|
44
46
|
"list_config": partial(handle_list_config, args),
|
47
|
+
"list_drivers": partial(handle_list_drivers, args),
|
45
48
|
}
|
46
49
|
for arg in GETTER_KEYS:
|
47
50
|
if getattr(args, arg, False) and arg in GETTER_DISPATCH:
|
48
|
-
|
51
|
+
GETTER_DISPATCH[arg]()
|
52
|
+
import sys
|
53
|
+
sys.exit(0)
|
@@ -117,6 +117,10 @@ definition = [
|
|
117
117
|
["--list-providers"],
|
118
118
|
{"action": "store_true", "help": "List supported LLM providers"},
|
119
119
|
),
|
120
|
+
(
|
121
|
+
["--list-drivers"],
|
122
|
+
{"action": "store_true", "help": "List available LLM drivers and their dependencies"},
|
123
|
+
),
|
120
124
|
(
|
121
125
|
["-l", "--list-models"],
|
122
126
|
{"action": "store_true", "help": "List all supported models"},
|
@@ -206,6 +210,7 @@ GETTER_KEYS = [
|
|
206
210
|
"list_models",
|
207
211
|
"list_tools",
|
208
212
|
"list_config",
|
213
|
+
"list_drivers",
|
209
214
|
]
|
210
215
|
|
211
216
|
|
@@ -321,14 +326,8 @@ class JanitoCLI:
|
|
321
326
|
if run_mode == RunMode.SET:
|
322
327
|
if self._run_set_mode():
|
323
328
|
return
|
324
|
-
# Special handling: provider is not required for list_providers, list_tools, show_config
|
325
|
-
if run_mode == RunMode.GET
|
326
|
-
self.args.list_providers
|
327
|
-
or self.args.list_tools
|
328
|
-
or self.args.list_profiles
|
329
|
-
or self.args.show_config
|
330
|
-
or self.args.list_config
|
331
|
-
):
|
329
|
+
# Special handling: provider is not required for list_providers, list_tools, show_config, list_drivers
|
330
|
+
if run_mode == RunMode.GET:
|
332
331
|
self._maybe_print_verbose_provider_model()
|
333
332
|
handle_getter(self.args)
|
334
333
|
return
|
@@ -364,8 +363,7 @@ class JanitoCLI:
|
|
364
363
|
agent_role,
|
365
364
|
verbose_tools=self.args.verbose_tools,
|
366
365
|
)
|
367
|
-
|
368
|
-
handle_getter(self.args)
|
366
|
+
|
369
367
|
|
370
368
|
def _run_set_mode(self):
|
371
369
|
if handle_api_key_set(self.args):
|
@@ -12,10 +12,18 @@ from janito.llm.driver_input import DriverInput
|
|
12
12
|
from janito.driver_events import RequestFinished, RequestStatus, RateLimitRetry
|
13
13
|
from janito.llm.message_parts import TextMessagePart, FunctionCallMessagePart
|
14
14
|
|
15
|
-
|
15
|
+
try:
|
16
|
+
import openai
|
17
|
+
available = True
|
18
|
+
unavailable_reason = None
|
19
|
+
except ImportError:
|
20
|
+
available = False
|
21
|
+
unavailable_reason = "openai module not installed"
|
16
22
|
|
17
23
|
|
18
24
|
class ZAIModelDriver(LLMDriver):
|
25
|
+
available = available
|
26
|
+
unavailable_reason = unavailable_reason
|
19
27
|
def _get_message_from_result(self, result):
|
20
28
|
"""Extract the message object from the provider result (Z.AI-specific)."""
|
21
29
|
if hasattr(result, "choices") and result.choices:
|
@@ -52,15 +60,15 @@ class ZAIModelDriver(LLMDriver):
|
|
52
60
|
# Z.AI-specific parameters
|
53
61
|
if config.model:
|
54
62
|
api_kwargs["model"] = config.model
|
55
|
-
#
|
56
|
-
if (
|
63
|
+
# Use max_tokens for Z.ai SDK compatibility
|
64
|
+
if hasattr(config, "max_tokens") and config.max_tokens is not None:
|
65
|
+
api_kwargs["max_tokens"] = int(config.max_tokens)
|
66
|
+
elif (
|
57
67
|
hasattr(config, "max_completion_tokens")
|
58
68
|
and config.max_completion_tokens is not None
|
59
69
|
):
|
60
|
-
|
61
|
-
|
62
|
-
# For models that do not support 'max_tokens', map to 'max_completion_tokens'
|
63
|
-
api_kwargs["max_completion_tokens"] = int(config.max_tokens)
|
70
|
+
# Fallback to max_completion_tokens if max_tokens not set
|
71
|
+
api_kwargs["max_tokens"] = int(config.max_completion_tokens)
|
64
72
|
for p in (
|
65
73
|
"temperature",
|
66
74
|
"top_p",
|
@@ -260,10 +268,6 @@ class ZAIModelDriver(LLMDriver):
|
|
260
268
|
api_key_display = str(config.api_key)
|
261
269
|
if api_key_display and len(api_key_display) > 8:
|
262
270
|
api_key_display = api_key_display[:4] + "..." + api_key_display[-4:]
|
263
|
-
client_kwargs = {
|
264
|
-
"api_key": config.api_key,
|
265
|
-
"base_url": "https://api.z.ai/api/paas/v4",
|
266
|
-
}
|
267
271
|
|
268
272
|
# HTTP debug wrapper
|
269
273
|
if os.environ.get("ZAI_DEBUG_HTTP", "0") == "1":
|
@@ -280,7 +284,14 @@ class ZAIModelDriver(LLMDriver):
|
|
280
284
|
flush=True,
|
281
285
|
)
|
282
286
|
|
283
|
-
|
287
|
+
# Use OpenAI SDK for Z.AI API compatibility
|
288
|
+
try:
|
289
|
+
import openai
|
290
|
+
except ImportError:
|
291
|
+
raise ImportError("openai module is not available. Please install it with: pip install openai")
|
292
|
+
client = openai.OpenAI(
|
293
|
+
api_key=config.api_key, base_url="https://api.z.ai/api/paas/v4/"
|
294
|
+
)
|
284
295
|
return client
|
285
296
|
except Exception as e:
|
286
297
|
print(
|
@@ -18,15 +18,15 @@ MODEL_SPECS = {
|
|
18
18
|
"output_cost_per_1k": 0.0015,
|
19
19
|
},
|
20
20
|
),
|
21
|
-
"glm-4": LLMModelInfo(
|
22
|
-
name="glm-4",
|
21
|
+
"glm-4.5-air": LLMModelInfo(
|
22
|
+
name="glm-4.5-air",
|
23
23
|
context=128000,
|
24
24
|
max_input=128000,
|
25
|
-
max_cot=
|
25
|
+
max_cot=4096,
|
26
26
|
max_response=4096,
|
27
|
-
thinking_supported=
|
27
|
+
thinking_supported=True,
|
28
28
|
other={
|
29
|
-
"description": "Z.AI's GLM-4 model
|
29
|
+
"description": "Z.AI's GLM-4.5-Air model - compact and efficient version",
|
30
30
|
"supports_tools": True,
|
31
31
|
"supports_images": True,
|
32
32
|
"supports_audio": False,
|
@@ -35,21 +35,4 @@ MODEL_SPECS = {
|
|
35
35
|
"output_cost_per_1k": 0.0009,
|
36
36
|
},
|
37
37
|
),
|
38
|
-
"glm-4v": LLMModelInfo(
|
39
|
-
name="glm-4v",
|
40
|
-
context=128000,
|
41
|
-
max_input=128000,
|
42
|
-
max_cot="N/A",
|
43
|
-
max_response=4096,
|
44
|
-
thinking_supported=False,
|
45
|
-
other={
|
46
|
-
"description": "Z.AI's GLM-4V vision model for image understanding",
|
47
|
-
"supports_tools": True,
|
48
|
-
"supports_images": True,
|
49
|
-
"supports_audio": False,
|
50
|
-
"supports_video": False,
|
51
|
-
"input_cost_per_1k": 0.0004,
|
52
|
-
"output_cost_per_1k": 0.0012,
|
53
|
-
},
|
54
|
-
),
|
55
38
|
}
|
@@ -17,7 +17,7 @@ class ZAIProvider(LLMProvider):
|
|
17
17
|
NAME = "zai"
|
18
18
|
MAINTAINER = "João Pinto <janito@ikignosis.org>"
|
19
19
|
MODEL_SPECS = MODEL_SPECS
|
20
|
-
DEFAULT_MODEL = "glm-4.5" # Options: glm-4.5, glm-4
|
20
|
+
DEFAULT_MODEL = "glm-4.5" # Options: glm-4.5, glm-4.5-air
|
21
21
|
|
22
22
|
def __init__(
|
23
23
|
self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
|
@@ -33,6 +33,8 @@ class ZAIProvider(LLMProvider):
|
|
33
33
|
# crash with an AttributeError when it tries to access `self._tools_adapter`.
|
34
34
|
self._tools_adapter = get_local_tools_adapter()
|
35
35
|
self._driver = None
|
36
|
+
# Initialize _driver_config to avoid AttributeError
|
37
|
+
self._driver_config = LLMDriverConfig(model=None)
|
36
38
|
|
37
39
|
def _setup_available(self, auth_manager, config):
|
38
40
|
self.auth_manager = auth_manager or LLMAuthManager()
|
@@ -43,6 +45,7 @@ class ZAIProvider(LLMProvider):
|
|
43
45
|
)
|
44
46
|
print(f" janito --set-api-key YOUR_API_KEY -p {self.name}")
|
45
47
|
print(f"Or set the ZAI_API_KEY environment variable.")
|
48
|
+
self._tools_adapter = get_local_tools_adapter()
|
46
49
|
return
|
47
50
|
|
48
51
|
self._tools_adapter = get_local_tools_adapter()
|
@@ -4,7 +4,7 @@ Generate OpenAI-compatible tool schemas for Z.AI API.
|
|
4
4
|
|
5
5
|
import inspect
|
6
6
|
from typing import get_type_hints, Dict, Any, Optional, List, Union
|
7
|
-
from janito.tools import
|
7
|
+
from janito.tools.tool_base import ToolBase
|
8
8
|
|
9
9
|
|
10
10
|
def generate_tool_schemas(tool_classes):
|
@@ -35,14 +35,16 @@ def generate_tool_schema(tool_class):
|
|
35
35
|
Returns:
|
36
36
|
OpenAI-compatible tool schema dict
|
37
37
|
"""
|
38
|
-
if not issubclass(tool_class,
|
38
|
+
if not issubclass(tool_class, ToolBase):
|
39
39
|
return None
|
40
40
|
|
41
41
|
tool_instance = tool_class()
|
42
42
|
|
43
|
-
# Get the execute method
|
43
|
+
# Get the execute or run method
|
44
44
|
execute_method = getattr(tool_class, "execute", None)
|
45
|
-
if
|
45
|
+
if execute_method is None:
|
46
|
+
execute_method = getattr(tool_class, "run", None)
|
47
|
+
if execute_method is None:
|
46
48
|
return None
|
47
49
|
|
48
50
|
# Get method signature and type hints
|
@@ -78,7 +80,7 @@ def generate_tool_schema(tool_class):
|
|
78
80
|
schema = {
|
79
81
|
"type": "function",
|
80
82
|
"function": {
|
81
|
-
"name": tool_class.__name__,
|
83
|
+
"name": getattr(tool_instance, "tool_name", tool_class.__name__),
|
82
84
|
"description": getattr(
|
83
85
|
tool_instance, "description", f"Execute {tool_class.__name__}"
|
84
86
|
),
|
@@ -37,6 +37,7 @@ docs/supported-providers-models.md
|
|
37
37
|
docs/tools-index.md
|
38
38
|
docs/tools-natural-results.md
|
39
39
|
docs/tools-precision.md
|
40
|
+
docs/z-ai-setup.md
|
40
41
|
docs/about/costs.md
|
41
42
|
docs/about/vs-webchats.md
|
42
43
|
docs/about/why.md
|
@@ -159,6 +160,7 @@ janito/cli/chat_mode/shell/session/__init__.py
|
|
159
160
|
janito/cli/chat_mode/shell/session/history.py
|
160
161
|
janito/cli/chat_mode/shell/session/manager.py
|
161
162
|
janito/cli/cli_commands/list_config.py
|
163
|
+
janito/cli/cli_commands/list_drivers.py
|
162
164
|
janito/cli/cli_commands/list_models.py
|
163
165
|
janito/cli/cli_commands/list_profiles.py
|
164
166
|
janito/cli/cli_commands/list_providers.py
|
@@ -179,7 +181,6 @@ janito/cli/single_shot_mode/__init__.py
|
|
179
181
|
janito/cli/single_shot_mode/handler.py
|
180
182
|
janito/docs/GETTING_STARTED.md
|
181
183
|
janito/drivers/dashscope.bak.zip
|
182
|
-
janito/drivers/driver_registry.py
|
183
184
|
janito/drivers/openai_responses.bak.zip
|
184
185
|
janito/drivers/azure_openai/driver.py
|
185
186
|
janito/drivers/openai/README.md
|
@@ -37,6 +37,7 @@ nav:
|
|
37
37
|
- Overview: supported-providers-models.md
|
38
38
|
- DeepSeek Setup: deepseek-setup.md
|
39
39
|
- MoonshotAI Setup: moonshotai-setup.md
|
40
|
+
- Z.ai Setup: z-ai-setup.md
|
40
41
|
- Concepts:
|
41
42
|
- Overview: concepts/index.md
|
42
43
|
- What Is a Language Model Client?: concepts/language-model-clients.md
|