janito 2.20.1__tar.gz → 2.21.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.20.1/janito.egg-info → janito-2.21.0}/PKG-INFO +1 -1
- {janito-2.20.1 → janito-2.21.0}/janito/README.md +47 -4
- janito-2.21.0/janito/docs/GETTING_STARTED.md +190 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/__init__.py +1 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/azure_openai/provider.py +1 -1
- janito-2.21.0/janito/providers/ibm/README.md +99 -0
- janito-2.21.0/janito/providers/ibm/__init__.py +1 -0
- janito-2.21.0/janito/providers/ibm/model_info.py +78 -0
- janito-2.21.0/janito/providers/ibm/provider.py +149 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/fetch_url.py +81 -19
- {janito-2.20.1 → janito-2.21.0/janito.egg-info}/PKG-INFO +1 -1
- {janito-2.20.1 → janito-2.21.0}/janito.egg-info/SOURCES.txt +4 -2
- janito-2.20.1/git_diff.txt +0 -0
- janito-2.20.1/github_diff +0 -0
- janito-2.20.1/janito/docs/GETTING_STARTED.md +0 -117
- {janito-2.20.1 → janito-2.21.0}/.codespellrc +0 -0
- {janito-2.20.1 → janito-2.21.0}/.gitattributes +0 -0
- {janito-2.20.1 → janito-2.21.0}/.github/workflows/python-app.yml.disabled +0 -0
- {janito-2.20.1 → janito-2.21.0}/.gitignore +0 -0
- {janito-2.20.1 → janito-2.21.0}/.pre-commit-config.yaml +0 -0
- {janito-2.20.1 → janito-2.21.0}/.secrets.baseline +0 -0
- {janito-2.20.1 → janito-2.21.0}/.vscode/settings.json +0 -0
- {janito-2.20.1 → janito-2.21.0}/CHANGELOG.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/CHANGELOG_2.16.0.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/LICENSE +0 -0
- {janito-2.20.1 → janito-2.21.0}/README-dev.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/README.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/UPDATING_DOCS.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/adding_mcp.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/DIV.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/Interfaces.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/about/costs.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/about/vs-webchats.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/about/why.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/alibaba-setup.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/alternatives.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/cerebras-setup.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/concepts/analysis-style.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/concepts/index.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/deepseek-setup.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/driver-flow.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/driver-request-cancellation.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/drivers/events.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/drivers.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/event-bus.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/configuration.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/developing.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/disabled-tools.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/installation.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/profiles.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/prompting/README.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/single-shot-terminal.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/terminal-shell.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/tools-developer-guide.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/using.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/guides/using_tools.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/index.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/llm-drivers.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/meta/quality-checks.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/mistral-setup.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/moonshotai-setup.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/openai-setup.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/overrides/partials/copyright.html +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/provider-platform-access.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/README-pt.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/README.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/configuracao.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/exemplos.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/faq-pt.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/ferramentas.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/guia-uso.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/instalacao.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/pt/perfis.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/reference/api.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/reference/azure-openai.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/reference/cli-options.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/reference/message-handler-model.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/security.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/supported-providers-models.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/tools/search-text.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/tools-index.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/tools-natural-results.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/tools-precision.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/docs/z-ai-setup.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/__main__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/_version.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/agent/setup_agent.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/script_runner.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/session.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/toolbar.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_drivers.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_models.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_profiles.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_providers.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_tools.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/model_utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/ping_providers.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/set_api_key.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/show_config.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/config.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/console.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/core/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/core/event_logger.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/core/getters.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/core/model_guesser.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/core/runner.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/core/setters.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/core/unsetters.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/main.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/main_cli.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/prompt_core.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/prompt_handler.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/prompt_setup.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/rich_terminal_reporter.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/single_shot_mode/handler.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/cli/verbose_output.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/config.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/config_manager.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/conversation_history.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/dir_walk_utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/driver_events.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/drivers/azure_openai/driver.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/drivers/cerebras/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/drivers/openai/README.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/drivers/openai/driver.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/drivers/zai/driver.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/event_bus/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/event_bus/bus.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/event_bus/event.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/event_bus/handler.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/exceptions.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/formatting.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/formatting_token.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/gitignore_utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/i18n/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/i18n/it.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/i18n/messages.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/i18n/pt.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/README.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/agent.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/auth.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/auth_utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/driver.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/driver_config.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/driver_input.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/message_parts.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/model.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/llm/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/mkdocs.yml +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/perf_singleton.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/performance_collector.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/platform_discovery.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/provider_config.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/provider_registry.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/alibaba/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/alibaba/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/anthropic/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/cerebras/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/cerebras/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/cerebras/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/deepseek/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/deepseek/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/google/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/google/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/google/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/mistral/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/mistral/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/mistral/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/moonshotai/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/moonshotai/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/moonshotai/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/openai/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/openai/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/openai/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/registry.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/zai/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/zai/model_info.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/zai/provider.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/providers/zai/schema_generator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/regions/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/regions/cli.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/regions/geo_utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/regions/provider_regions.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/report_events.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/shell.bak.zip +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/README.md +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/adapter.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/ask_user.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/copy_file.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/create_directory.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/create_file.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/find_files.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/move_file.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/open_url.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/python_code_run.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/python_command_run.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/python_file_run.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/read_files.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/remove_directory.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/remove_file.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/core.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/view_file.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/disabled_tools.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/inspect_registry.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/path_security.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/permissions.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/permissions_parse.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_base.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_events.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/tools_adapter.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/tools/tools_schema.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito/utils.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito.egg-info/requires.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/janito.egg-info/top_level.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/mkdocs.yml +0 -0
- {janito-2.20.1 → janito-2.21.0}/mkdocs_hooks.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/pyproject.toml +0 -0
- {janito-2.20.1 → janito-2.21.0}/pytest.ini +0 -0
- {janito-2.20.1 → janito-2.21.0}/requirements-dev.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/requirements.txt +0 -0
- {janito-2.20.1 → janito-2.21.0}/setup.cfg +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/adapters/local/test_read_files.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_cli_list_models.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_cli_list_providers.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_cli_version.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_disabled_tools.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_provider_alibaba.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_provider_cerebras.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tests/test_provider_moonshotai.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tools/release.py +0 -0
- {janito-2.20.1 → janito-2.21.0}/tox.ini +0 -0
@@ -43,7 +43,12 @@ janito -p google -m gemini-2.0-flash-exp "Generate unit tests"
|
|
43
43
|
|
44
44
|
### Interactive Chat Mode
|
45
45
|
|
46
|
-
Start an interactive session:
|
46
|
+
Start an interactive session (default mode):
|
47
|
+
```bash
|
48
|
+
janito
|
49
|
+
```
|
50
|
+
|
51
|
+
Or explicitly:
|
47
52
|
```bash
|
48
53
|
janito --chat
|
49
54
|
```
|
@@ -80,17 +85,23 @@ janito --set model=kimi-k1-8k
|
|
80
85
|
|
81
86
|
### OpenAI
|
82
87
|
|
83
|
-
- **Models**: gpt-4, gpt-4-turbo, gpt-3.5-turbo
|
88
|
+
- **Models**: gpt-5, gpt-4.1, gpt-4o, gpt-4-turbo, gpt-3.5-turbo
|
84
89
|
- **Setup**: Get API key from [OpenAI Platform](https://platform.openai.com/)
|
85
90
|
|
86
91
|
### Anthropic
|
87
92
|
|
88
|
-
- **Models**: claude-3-5-sonnet-20241022, claude-3-opus-
|
93
|
+
- **Models**: claude-3-7-sonnet-20250219, claude-3-5-sonnet-20241022, claude-3-opus-20250514
|
89
94
|
- **Setup**: Get API key from [Anthropic Console](https://console.anthropic.com/)
|
90
95
|
|
96
|
+
### IBM WatsonX
|
97
|
+
|
98
|
+
- **Models**: ibm/granite-3-8b-instruct, ibm/granite-3-2b-instruct, meta-llama/llama-3-1-8b-instruct, meta-llama/llama-3-1-70b-instruct, mistralai/mistral-large
|
99
|
+
- **Strengths**: Enterprise-grade AI, IBM Granite models, hosted Llama and Mistral models
|
100
|
+
- **Setup**: Get API key and project ID from [IBM Cloud](https://cloud.ibm.com/)
|
101
|
+
|
91
102
|
### Google
|
92
103
|
|
93
|
-
- **Models**: gemini-2.
|
104
|
+
- **Models**: gemini-2.5-flash, gemini-2.5-pro, gemini-2.5-flash-lite-preview-06-17
|
94
105
|
- **Setup**: Get API key from [Google AI Studio](https://makersuite.google.com/)
|
95
106
|
|
96
107
|
## Advanced Features
|
@@ -114,12 +125,44 @@ janito --role python-expert "Optimize this algorithm"
|
|
114
125
|
|
115
126
|
### Environment Variables
|
116
127
|
You can also configure via environment variables:
|
128
|
+
|
129
|
+
**MoonshotAI:**
|
117
130
|
```bash
|
118
131
|
export MOONSHOTAI_API_KEY=your_key_here
|
119
132
|
export JANITO_PROVIDER=moonshotai
|
120
133
|
export JANITO_MODEL=kimi-k1-8k
|
121
134
|
```
|
122
135
|
|
136
|
+
**OpenAI:**
|
137
|
+
```bash
|
138
|
+
export OPENAI_API_KEY=your_key_here
|
139
|
+
export JANITO_PROVIDER=openai
|
140
|
+
export JANITO_MODEL=gpt-5
|
141
|
+
```
|
142
|
+
|
143
|
+
**IBM WatsonX:**
|
144
|
+
```bash
|
145
|
+
export WATSONX_API_KEY=your_key_here
|
146
|
+
export WATSONX_PROJECT_ID=your_project_id
|
147
|
+
export WATSONX_SPACE_ID=your_space_id # optional
|
148
|
+
export JANITO_PROVIDER=ibm
|
149
|
+
export JANITO_MODEL=ibm/granite-3-8b-instruct
|
150
|
+
```
|
151
|
+
|
152
|
+
**Anthropic:**
|
153
|
+
```bash
|
154
|
+
export ANTHROPIC_API_KEY=your_key_here
|
155
|
+
export JANITO_PROVIDER=anthropic
|
156
|
+
export JANITO_MODEL=claude-3-7-sonnet-20250219
|
157
|
+
```
|
158
|
+
|
159
|
+
**Google:**
|
160
|
+
```bash
|
161
|
+
export GOOGLE_API_KEY=your_key_here
|
162
|
+
export JANITO_PROVIDER=google
|
163
|
+
export JANITO_MODEL=gemini-2.5-flash
|
164
|
+
```
|
165
|
+
|
123
166
|
## Examples
|
124
167
|
|
125
168
|
### Code Generation
|
@@ -0,0 +1,190 @@
|
|
1
|
+
# Getting Started with Janito
|
2
|
+
|
3
|
+
This guide will help you set up Janito CLI quickly and start using it with your preferred AI provider.
|
4
|
+
|
5
|
+
## Quick Setup (2 minutes)
|
6
|
+
|
7
|
+
### 1. Install Janito
|
8
|
+
```bash
|
9
|
+
pip install janito
|
10
|
+
```
|
11
|
+
|
12
|
+
### 2. Choose Your Provider
|
13
|
+
|
14
|
+
Janito supports multiple AI providers. Choose one to get started:
|
15
|
+
|
16
|
+
**MoonshotAI (Recommended for Chinese users)**
|
17
|
+
1. Go to [Moonshot AI Platform](https://platform.moonshot.cn/)
|
18
|
+
2. Sign up for an account
|
19
|
+
3. Navigate to API Keys section
|
20
|
+
4. Create a new API key
|
21
|
+
|
22
|
+
**OpenAI**
|
23
|
+
1. Go to [OpenAI Platform](https://platform.openai.com/)
|
24
|
+
2. Sign up and add payment method
|
25
|
+
3. Create an API key
|
26
|
+
|
27
|
+
**IBM WatsonX**
|
28
|
+
1. Go to [IBM Cloud](https://cloud.ibm.com/)
|
29
|
+
2. Create a WatsonX AI service
|
30
|
+
3. Get your API key and project ID
|
31
|
+
|
32
|
+
### 3. Configure Janito
|
33
|
+
|
34
|
+
**MoonshotAI Setup:**
|
35
|
+
```bash
|
36
|
+
# Set MoonshotAI as your default provider
|
37
|
+
janito --set-api-key YOUR_API_KEY -p moonshotai
|
38
|
+
|
39
|
+
# Verify it's working
|
40
|
+
janito "Hello, can you introduce yourself?"
|
41
|
+
```
|
42
|
+
|
43
|
+
**OpenAI Setup:**
|
44
|
+
```bash
|
45
|
+
# Set OpenAI as your default provider
|
46
|
+
janito --set-api-key YOUR_OPENAI_API_KEY -p openai
|
47
|
+
|
48
|
+
# Verify it's working
|
49
|
+
janito "Hello, can you introduce yourself?"
|
50
|
+
```
|
51
|
+
|
52
|
+
**IBM WatsonX Setup:**
|
53
|
+
```bash
|
54
|
+
# Set IBM WatsonX as your default provider
|
55
|
+
janito --set-api-key YOUR_WATSONX_API_KEY -p ibm
|
56
|
+
janito --set-config ibm project_id YOUR_PROJECT_ID
|
57
|
+
|
58
|
+
# Verify it's working
|
59
|
+
janito "Hello, can you introduce yourself?"
|
60
|
+
```
|
61
|
+
|
62
|
+
## Your First Commands
|
63
|
+
|
64
|
+
### Basic Usage
|
65
|
+
```bash
|
66
|
+
# Simple prompt
|
67
|
+
janito "Create a Python script to calculate fibonacci numbers"
|
68
|
+
|
69
|
+
# With specific model
|
70
|
+
janito -m kimi-k1-8k "Explain machine learning in simple terms"
|
71
|
+
|
72
|
+
# Interactive chat mode
|
73
|
+
janito --chat
|
74
|
+
```
|
75
|
+
|
76
|
+
### Working with Files
|
77
|
+
```bash
|
78
|
+
# Analyze a file
|
79
|
+
janito "Analyze the performance of my_app.py" < my_app.py
|
80
|
+
|
81
|
+
# Generate code in a specific directory
|
82
|
+
janito -W ./my_project "Create a REST API with FastAPI"
|
83
|
+
```
|
84
|
+
|
85
|
+
## Configuration Options
|
86
|
+
|
87
|
+
### Set as Default Provider
|
88
|
+
```bash
|
89
|
+
# Make your chosen provider the permanent default
|
90
|
+
janito --set provider=moonshotai # or openai, ibm, etc.
|
91
|
+
janito --set model=kimi-k1-8k # or gpt-5, ibm/granite-3-8b-instruct, etc.
|
92
|
+
```
|
93
|
+
|
94
|
+
### Environment Variables
|
95
|
+
You can also use environment variables:
|
96
|
+
|
97
|
+
**MoonshotAI:**
|
98
|
+
```bash
|
99
|
+
export MOONSHOTAI_API_KEY=your_key_here
|
100
|
+
export JANITO_PROVIDER=moonshotai
|
101
|
+
export JANITO_MODEL=kimi-k1-8k
|
102
|
+
```
|
103
|
+
|
104
|
+
**OpenAI:**
|
105
|
+
```bash
|
106
|
+
export OPENAI_API_KEY=your_key_here
|
107
|
+
export JANITO_PROVIDER=openai
|
108
|
+
export JANITO_MODEL=gpt-5
|
109
|
+
```
|
110
|
+
|
111
|
+
**IBM WatsonX:**
|
112
|
+
```bash
|
113
|
+
export WATSONX_API_KEY=your_key_here
|
114
|
+
export WATSONX_PROJECT_ID=your_project_id
|
115
|
+
export WATSONX_SPACE_ID=your_space_id # optional
|
116
|
+
export JANITO_PROVIDER=ibm
|
117
|
+
export JANITO_MODEL=ibm/granite-3-3-8b-instruct
|
118
|
+
```
|
119
|
+
|
120
|
+
## Available Models by Provider
|
121
|
+
|
122
|
+
### MoonshotAI Models
|
123
|
+
- **kimi-k1-8k**: Fast responses, good for general tasks
|
124
|
+
- **kimi-k1-32k**: Better for longer contexts
|
125
|
+
- **kimi-k1-128k**: Best for very long documents
|
126
|
+
- **kimi-k2-turbo-preview**: Latest model with enhanced capabilities
|
127
|
+
- **kimi-k2-turbo-preview**: Turbo version of the advanced reasoning model
|
128
|
+
|
129
|
+
### OpenAI Models
|
130
|
+
- **gpt-5**: Latest GPT model with advanced capabilities
|
131
|
+
- **gpt-4.1**: High-performance model for complex tasks
|
132
|
+
- **gpt-4o**: Optimized for speed and cost
|
133
|
+
- **o3-mini**: Reasoning-focused model
|
134
|
+
|
135
|
+
### IBM WatsonX Models
|
136
|
+
- **ibm/granite-3-3-8b-instruct**: IBM's latest Granite 3.3 8B Instruct model (default)
|
137
|
+
- **ibm/granite-3-8b-instruct**: IBM's Granite 3 8B Instruct model
|
138
|
+
- **meta-llama/llama-3-3-70b-instruct**: Meta Llama 3.3 70B hosted on WatsonX
|
139
|
+
- **meta-llama/llama-3-1-70b-instruct**: Meta Llama 3.1 70B hosted on WatsonX
|
140
|
+
- **mistralai/mistral-large-2407**: Latest Mistral Large model hosted on WatsonX
|
141
|
+
|
142
|
+
## Next Steps
|
143
|
+
|
144
|
+
1. **Explore tools**: Run `janito --list-tools` to see available tools
|
145
|
+
2. **Try chat mode**: Run `janito --chat` for interactive sessions
|
146
|
+
3. **Check examples**: Look at the main README.md for more usage examples
|
147
|
+
4. **Join community**: Get help and share tips with other users
|
148
|
+
|
149
|
+
## Troubleshooting
|
150
|
+
|
151
|
+
### Common Issues
|
152
|
+
|
153
|
+
**"Provider not found" error**
|
154
|
+
```bash
|
155
|
+
# Check available providers
|
156
|
+
janito --list-providers
|
157
|
+
|
158
|
+
# Re-register your provider
|
159
|
+
janito --set-api-key YOUR_KEY -p YOUR_PROVIDER
|
160
|
+
```
|
161
|
+
|
162
|
+
**"Model not available" error**
|
163
|
+
```bash
|
164
|
+
# List available models for your provider
|
165
|
+
janito -p YOUR_PROVIDER --list-models
|
166
|
+
```
|
167
|
+
|
168
|
+
**API key issues**
|
169
|
+
```bash
|
170
|
+
# Check current configuration
|
171
|
+
janito --show-config
|
172
|
+
|
173
|
+
# Reset API key
|
174
|
+
janito --set-api-key NEW_KEY -p YOUR_PROVIDER
|
175
|
+
```
|
176
|
+
|
177
|
+
**IBM WatsonX specific issues**
|
178
|
+
```bash
|
179
|
+
# Check if project ID is set
|
180
|
+
janito --show-config
|
181
|
+
|
182
|
+
# Set project ID if missing
|
183
|
+
janito --set-config ibm project_id YOUR_PROJECT_ID
|
184
|
+
```
|
185
|
+
|
186
|
+
### Getting Help
|
187
|
+
|
188
|
+
- Check the main README.md for comprehensive documentation
|
189
|
+
- Use `janito --help` for command-line options
|
190
|
+
- Visit our GitHub repository for issues and discussions
|
@@ -82,7 +82,7 @@ class AzureOpenAIProvider(LLMProvider):
|
|
82
82
|
If the model_name is not in MODEL_SPECS, return a generic info dict.
|
83
83
|
"""
|
84
84
|
if model_name is None:
|
85
|
-
# Return all known specs
|
85
|
+
# Return all known specs
|
86
86
|
return {
|
87
87
|
name: model_info.to_dict()
|
88
88
|
for name, model_info in self.MODEL_SPECS.items()
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# IBM WatsonX AI Provider
|
2
|
+
|
3
|
+
This provider enables access to IBM WatsonX AI services, including IBM's Granite models and other hosted models.
|
4
|
+
|
5
|
+
## Setup
|
6
|
+
|
7
|
+
### Prerequisites
|
8
|
+
|
9
|
+
1. **IBM Cloud Account**: You need an IBM Cloud account with WatsonX AI service enabled.
|
10
|
+
2. **API Key**: Generate an API key from your IBM Cloud dashboard.
|
11
|
+
3. **Project ID**: Create a WatsonX project and get the project ID.
|
12
|
+
|
13
|
+
### Authentication
|
14
|
+
|
15
|
+
Set up your credentials using the CLI:
|
16
|
+
|
17
|
+
```bash
|
18
|
+
# Set the API key
|
19
|
+
janito --set-api-key YOUR_IBM_API_KEY -p ibm
|
20
|
+
|
21
|
+
# Set the project ID
|
22
|
+
janito --set-config ibm project_id YOUR_PROJECT_ID
|
23
|
+
|
24
|
+
# Optional: Set space ID if using WatsonX spaces
|
25
|
+
janito --set-config ibm space_id YOUR_SPACE_ID
|
26
|
+
```
|
27
|
+
|
28
|
+
### Environment Variables
|
29
|
+
|
30
|
+
Alternatively, you can set environment variables:
|
31
|
+
|
32
|
+
```bash
|
33
|
+
export WATSONX_API_KEY="your-api-key"
|
34
|
+
export WATSONX_PROJECT_ID="your-project-id"
|
35
|
+
export WATSONX_SPACE_ID="your-space-id" # optional
|
36
|
+
```
|
37
|
+
|
38
|
+
## Available Models
|
39
|
+
|
40
|
+
The IBM provider supports the following models:
|
41
|
+
|
42
|
+
- **ibm/granite-3-8b-instruct**: IBM's Granite 3 8B Instruct model (default)
|
43
|
+
- **ibm/granite-3-2b-instruct**: IBM's Granite 3 2B Instruct model
|
44
|
+
- **meta-llama/llama-3-1-8b-instruct**: Meta Llama 3.1 8B hosted on WatsonX
|
45
|
+
- **meta-llama/llama-3-1-70b-instruct**: Meta Llama 3.1 70B hosted on WatsonX
|
46
|
+
- **mistralai/mistral-large**: Mistral Large model hosted on WatsonX
|
47
|
+
|
48
|
+
## Usage
|
49
|
+
|
50
|
+
### Command Line
|
51
|
+
|
52
|
+
```bash
|
53
|
+
# Use IBM provider with default model
|
54
|
+
janito -p ibm "Explain quantum computing"
|
55
|
+
|
56
|
+
# Use specific IBM model
|
57
|
+
janito -p ibm -m ibm/granite-3-2b-instruct "Generate a Python function"
|
58
|
+
|
59
|
+
# Interactive chat mode
|
60
|
+
janito -p ibm --chat
|
61
|
+
```
|
62
|
+
|
63
|
+
### Configuration
|
64
|
+
|
65
|
+
You can set IBM as your default provider:
|
66
|
+
|
67
|
+
```bash
|
68
|
+
janito --set-config provider ibm
|
69
|
+
```
|
70
|
+
|
71
|
+
## API Reference
|
72
|
+
|
73
|
+
The IBM provider uses IBM WatsonX's REST API with OpenAI-compatible format. The base URL is:
|
74
|
+
|
75
|
+
```
|
76
|
+
https://us-south.ml.cloud.ibm.com
|
77
|
+
```
|
78
|
+
|
79
|
+
## Limitations
|
80
|
+
|
81
|
+
- **Rate Limits**: IBM WatsonX has rate limits based on your subscription tier
|
82
|
+
- **Context Window**: Models have different context window limits (typically 128K tokens)
|
83
|
+
- **Region Support**: Currently configured for US-South region
|
84
|
+
|
85
|
+
## Troubleshooting
|
86
|
+
|
87
|
+
### Common Issues
|
88
|
+
|
89
|
+
1. **Authentication Error**: Ensure your API key and project ID are correct
|
90
|
+
2. **Model Not Found**: Check if the model is available in your WatsonX project
|
91
|
+
3. **Rate Limit Exceeded**: Wait and retry, or upgrade your subscription
|
92
|
+
|
93
|
+
### Debug Mode
|
94
|
+
|
95
|
+
Enable debug logging to see API requests:
|
96
|
+
|
97
|
+
```bash
|
98
|
+
janito -p ibm --verbose "Your prompt here"
|
99
|
+
```
|
@@ -0,0 +1 @@
|
|
1
|
+
# IBM WatsonX AI Provider
|
@@ -0,0 +1,78 @@
|
|
1
|
+
"""IBM WatsonX AI model specifications."""
|
2
|
+
|
3
|
+
from janito.llm.model import LLMModelInfo
|
4
|
+
|
5
|
+
MODEL_SPECS = {
|
6
|
+
"ibm/granite-3-8b-instruct": LLMModelInfo(
|
7
|
+
name="ibm/granite-3-8b-instruct",
|
8
|
+
context=128000,
|
9
|
+
max_input=128000,
|
10
|
+
max_response=4096,
|
11
|
+
max_cot=4096,
|
12
|
+
thinking_supported=False,
|
13
|
+
category="IBM WatsonX",
|
14
|
+
),
|
15
|
+
"ibm/granite-3-3-8b-instruct": LLMModelInfo(
|
16
|
+
name="ibm/granite-3-3-8b-instruct",
|
17
|
+
context=128000,
|
18
|
+
max_input=128000,
|
19
|
+
max_response=4096,
|
20
|
+
max_cot=4096,
|
21
|
+
thinking_supported=False,
|
22
|
+
category="IBM WatsonX",
|
23
|
+
),
|
24
|
+
"meta-llama/llama-3-1-70b-instruct": LLMModelInfo(
|
25
|
+
name="meta-llama/llama-3-1-70b-instruct",
|
26
|
+
context=128000,
|
27
|
+
max_input=128000,
|
28
|
+
max_response=4096,
|
29
|
+
max_cot=4096,
|
30
|
+
thinking_supported=False,
|
31
|
+
category="IBM WatsonX",
|
32
|
+
),
|
33
|
+
"meta-llama/llama-3-3-70b-instruct": LLMModelInfo(
|
34
|
+
name="meta-llama/llama-3-3-70b-instruct",
|
35
|
+
context=128000,
|
36
|
+
max_input=128000,
|
37
|
+
max_response=4096,
|
38
|
+
max_cot=4096,
|
39
|
+
thinking_supported=False,
|
40
|
+
category="IBM WatsonX",
|
41
|
+
),
|
42
|
+
"mistralai/mistral-large": LLMModelInfo(
|
43
|
+
name="mistralai/mistral-large",
|
44
|
+
context=128000,
|
45
|
+
max_input=128000,
|
46
|
+
max_response=4096,
|
47
|
+
max_cot=4096,
|
48
|
+
thinking_supported=False,
|
49
|
+
category="IBM WatsonX",
|
50
|
+
),
|
51
|
+
"mistralai/mistral-large-2407": LLMModelInfo(
|
52
|
+
name="mistralai/mistral-large-2407",
|
53
|
+
context=128000,
|
54
|
+
max_input=128000,
|
55
|
+
max_response=4096,
|
56
|
+
max_cot=4096,
|
57
|
+
thinking_supported=False,
|
58
|
+
category="IBM WatsonX",
|
59
|
+
),
|
60
|
+
"openai/gpt-oss-120b": LLMModelInfo(
|
61
|
+
name="openai/gpt-oss-120b",
|
62
|
+
context=128000,
|
63
|
+
max_input=128000,
|
64
|
+
max_response=4096,
|
65
|
+
max_cot=4096,
|
66
|
+
thinking_supported=True,
|
67
|
+
category="IBM WatsonX",
|
68
|
+
),
|
69
|
+
"openai/gpt-oss-20b": LLMModelInfo(
|
70
|
+
name="openai/gpt-oss-20b",
|
71
|
+
context=128000,
|
72
|
+
max_input=128000,
|
73
|
+
max_response=4096,
|
74
|
+
max_cot=4096,
|
75
|
+
thinking_supported=True,
|
76
|
+
category="IBM WatsonX",
|
77
|
+
),
|
78
|
+
}
|
@@ -0,0 +1,149 @@
|
|
1
|
+
"""IBM WatsonX AI Provider implementation."""
|
2
|
+
|
3
|
+
from janito.llm.provider import LLMProvider
|
4
|
+
from janito.llm.auth import LLMAuthManager
|
5
|
+
from janito.llm.driver_config import LLMDriverConfig
|
6
|
+
from janito.tools import get_local_tools_adapter
|
7
|
+
from janito.providers.registry import LLMProviderRegistry
|
8
|
+
from .model_info import MODEL_SPECS
|
9
|
+
|
10
|
+
try:
|
11
|
+
from janito.drivers.openai.driver import OpenAIModelDriver
|
12
|
+
|
13
|
+
available = True
|
14
|
+
unavailable_reason = None
|
15
|
+
except ImportError as e:
|
16
|
+
available = False
|
17
|
+
unavailable_reason = str(e)
|
18
|
+
|
19
|
+
|
20
|
+
class IBMProvider(LLMProvider):
|
21
|
+
"""IBM WatsonX AI Provider for accessing IBM's AI services."""
|
22
|
+
|
23
|
+
name = "ibm"
|
24
|
+
NAME = "ibm"
|
25
|
+
MAINTAINER = "João Pinto <janito@ikignosis.org>"
|
26
|
+
MODEL_SPECS = MODEL_SPECS
|
27
|
+
DEFAULT_MODEL = "ibm/granite-3-3-8b-instruct"
|
28
|
+
|
29
|
+
def __init__(
|
30
|
+
self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
|
31
|
+
):
|
32
|
+
self._tools_adapter = get_local_tools_adapter()
|
33
|
+
self._driver = None
|
34
|
+
|
35
|
+
if not self.available:
|
36
|
+
return
|
37
|
+
|
38
|
+
self._initialize_config(auth_manager, config)
|
39
|
+
self._setup_model_config()
|
40
|
+
|
41
|
+
def _initialize_config(self, auth_manager, config):
|
42
|
+
"""Initialize configuration and API credentials."""
|
43
|
+
self.auth_manager = auth_manager or LLMAuthManager()
|
44
|
+
|
45
|
+
# IBM WatsonX uses multiple credentials
|
46
|
+
self._api_key = self.auth_manager.get_credentials(type(self).NAME)
|
47
|
+
if not self._api_key:
|
48
|
+
from janito.llm.auth_utils import handle_missing_api_key
|
49
|
+
|
50
|
+
handle_missing_api_key(self.name, "WATSONX_API_KEY")
|
51
|
+
|
52
|
+
# Get project ID for WatsonX
|
53
|
+
self._project_id = self.auth_manager.get_credentials(
|
54
|
+
f"{type(self).NAME}_project_id"
|
55
|
+
)
|
56
|
+
if not self._project_id:
|
57
|
+
from janito.llm.auth_utils import handle_missing_api_key
|
58
|
+
|
59
|
+
handle_missing_api_key(self.name, "WATSONX_PROJECT_ID")
|
60
|
+
|
61
|
+
# Get region/space ID
|
62
|
+
self._space_id = self.auth_manager.get_credentials(
|
63
|
+
f"{type(self).NAME}_space_id"
|
64
|
+
)
|
65
|
+
|
66
|
+
self._driver_config = config or LLMDriverConfig(model=None)
|
67
|
+
if not self._driver_config.model:
|
68
|
+
self._driver_config.model = self.DEFAULT_MODEL
|
69
|
+
if not self._driver_config.api_key:
|
70
|
+
self._driver_config.api_key = self._api_key
|
71
|
+
|
72
|
+
def _setup_model_config(self):
|
73
|
+
"""Configure token limits based on model specifications."""
|
74
|
+
model_name = self._driver_config.model
|
75
|
+
model_spec = self.MODEL_SPECS.get(model_name)
|
76
|
+
|
77
|
+
# Reset token parameters
|
78
|
+
if hasattr(self._driver_config, "max_tokens"):
|
79
|
+
self._driver_config.max_tokens = None
|
80
|
+
if hasattr(self._driver_config, "max_completion_tokens"):
|
81
|
+
self._driver_config.max_completion_tokens = None
|
82
|
+
|
83
|
+
if model_spec:
|
84
|
+
if getattr(model_spec, "thinking_supported", False):
|
85
|
+
max_cot = getattr(model_spec, "max_cot", None)
|
86
|
+
if max_cot and max_cot != "N/A":
|
87
|
+
self._driver_config.max_completion_tokens = int(max_cot)
|
88
|
+
else:
|
89
|
+
max_response = getattr(model_spec, "max_response", None)
|
90
|
+
if max_response and max_response != "N/A":
|
91
|
+
self._driver_config.max_tokens = int(max_response)
|
92
|
+
|
93
|
+
# Set IBM WatsonX specific parameters
|
94
|
+
self._driver_config.base_url = "https://us-south.ml.cloud.ibm.com"
|
95
|
+
self._driver_config.project_id = self._project_id
|
96
|
+
if self._space_id:
|
97
|
+
self._driver_config.space_id = self._space_id
|
98
|
+
|
99
|
+
self.fill_missing_device_info(self._driver_config)
|
100
|
+
|
101
|
+
@property
|
102
|
+
def driver(self):
|
103
|
+
if not self.available:
|
104
|
+
raise ImportError(f"IBMProvider unavailable: {self.unavailable_reason}")
|
105
|
+
return self._driver
|
106
|
+
|
107
|
+
@property
|
108
|
+
def available(self):
|
109
|
+
return available
|
110
|
+
|
111
|
+
@property
|
112
|
+
def unavailable_reason(self):
|
113
|
+
return unavailable_reason
|
114
|
+
|
115
|
+
def create_driver(self):
|
116
|
+
"""
|
117
|
+
Creates and returns a new OpenAIModelDriver instance configured for IBM WatsonX.
|
118
|
+
IBM WatsonX uses OpenAI-compatible API format.
|
119
|
+
"""
|
120
|
+
driver = OpenAIModelDriver(
|
121
|
+
tools_adapter=self._tools_adapter, provider_name=self.NAME
|
122
|
+
)
|
123
|
+
driver.config = self._driver_config
|
124
|
+
return driver
|
125
|
+
|
126
|
+
def create_agent(self, tools_adapter=None, agent_name: str = None, **kwargs):
|
127
|
+
from janito.llm.agent import LLMAgent
|
128
|
+
|
129
|
+
if tools_adapter is None:
|
130
|
+
tools_adapter = get_local_tools_adapter()
|
131
|
+
raise NotImplementedError(
|
132
|
+
"create_agent must be constructed via new factory using input/output queues and config."
|
133
|
+
)
|
134
|
+
|
135
|
+
@property
|
136
|
+
def model_name(self):
|
137
|
+
return self._driver_config.model
|
138
|
+
|
139
|
+
@property
|
140
|
+
def driver_config(self):
|
141
|
+
"""Public, read-only access to the provider's LLMDriverConfig object."""
|
142
|
+
return self._driver_config
|
143
|
+
|
144
|
+
def execute_tool(self, tool_name: str, event_bus, *args, **kwargs):
|
145
|
+
self._tools_adapter.event_bus = event_bus
|
146
|
+
return self._tools_adapter.execute_by_name(tool_name, *args, **kwargs)
|
147
|
+
|
148
|
+
|
149
|
+
LLMProviderRegistry.register(IBMProvider.NAME, IBMProvider)
|