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.
Files changed (347) hide show
  1. {janito-2.20.1/janito.egg-info → janito-2.21.0}/PKG-INFO +1 -1
  2. {janito-2.20.1 → janito-2.21.0}/janito/README.md +47 -4
  3. janito-2.21.0/janito/docs/GETTING_STARTED.md +190 -0
  4. {janito-2.20.1 → janito-2.21.0}/janito/providers/__init__.py +1 -0
  5. {janito-2.20.1 → janito-2.21.0}/janito/providers/azure_openai/provider.py +1 -1
  6. janito-2.21.0/janito/providers/ibm/README.md +99 -0
  7. janito-2.21.0/janito/providers/ibm/__init__.py +1 -0
  8. janito-2.21.0/janito/providers/ibm/model_info.py +78 -0
  9. janito-2.21.0/janito/providers/ibm/provider.py +149 -0
  10. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/fetch_url.py +81 -19
  11. {janito-2.20.1 → janito-2.21.0/janito.egg-info}/PKG-INFO +1 -1
  12. {janito-2.20.1 → janito-2.21.0}/janito.egg-info/SOURCES.txt +4 -2
  13. janito-2.20.1/git_diff.txt +0 -0
  14. janito-2.20.1/github_diff +0 -0
  15. janito-2.20.1/janito/docs/GETTING_STARTED.md +0 -117
  16. {janito-2.20.1 → janito-2.21.0}/.codespellrc +0 -0
  17. {janito-2.20.1 → janito-2.21.0}/.gitattributes +0 -0
  18. {janito-2.20.1 → janito-2.21.0}/.github/workflows/python-app.yml.disabled +0 -0
  19. {janito-2.20.1 → janito-2.21.0}/.gitignore +0 -0
  20. {janito-2.20.1 → janito-2.21.0}/.pre-commit-config.yaml +0 -0
  21. {janito-2.20.1 → janito-2.21.0}/.secrets.baseline +0 -0
  22. {janito-2.20.1 → janito-2.21.0}/.vscode/settings.json +0 -0
  23. {janito-2.20.1 → janito-2.21.0}/CHANGELOG.md +0 -0
  24. {janito-2.20.1 → janito-2.21.0}/CHANGELOG_2.16.0.md +0 -0
  25. {janito-2.20.1 → janito-2.21.0}/LICENSE +0 -0
  26. {janito-2.20.1 → janito-2.21.0}/README-dev.md +0 -0
  27. {janito-2.20.1 → janito-2.21.0}/README.md +0 -0
  28. {janito-2.20.1 → janito-2.21.0}/UPDATING_DOCS.md +0 -0
  29. {janito-2.20.1 → janito-2.21.0}/adding_mcp.txt +0 -0
  30. {janito-2.20.1 → janito-2.21.0}/docs/DIV.md +0 -0
  31. {janito-2.20.1 → janito-2.21.0}/docs/Interfaces.txt +0 -0
  32. {janito-2.20.1 → janito-2.21.0}/docs/TOOLBAR-STYLING.md +0 -0
  33. {janito-2.20.1 → janito-2.21.0}/docs/about/costs.md +0 -0
  34. {janito-2.20.1 → janito-2.21.0}/docs/about/vs-webchats.md +0 -0
  35. {janito-2.20.1 → janito-2.21.0}/docs/about/why.md +0 -0
  36. {janito-2.20.1 → janito-2.21.0}/docs/alibaba-setup.md +0 -0
  37. {janito-2.20.1 → janito-2.21.0}/docs/alternatives.md +0 -0
  38. {janito-2.20.1 → janito-2.21.0}/docs/cerebras-setup.md +0 -0
  39. {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  40. {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  41. {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  42. {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/our-approach.md +0 -0
  43. {janito-2.20.1 → janito-2.21.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  44. {janito-2.20.1 → janito-2.21.0}/docs/concepts/analysis-style.md +0 -0
  45. {janito-2.20.1 → janito-2.21.0}/docs/concepts/human-guided-ai.md +0 -0
  46. {janito-2.20.1 → janito-2.21.0}/docs/concepts/index.md +0 -0
  47. {janito-2.20.1 → janito-2.21.0}/docs/concepts/language-model-clients.md +0 -0
  48. {janito-2.20.1 → janito-2.21.0}/docs/concepts/prompt-design-style.md +0 -0
  49. {janito-2.20.1 → janito-2.21.0}/docs/deepseek-setup.md +0 -0
  50. {janito-2.20.1 → janito-2.21.0}/docs/driver-flow.md +0 -0
  51. {janito-2.20.1 → janito-2.21.0}/docs/driver-request-cancellation.md +0 -0
  52. {janito-2.20.1 → janito-2.21.0}/docs/drivers/events.md +0 -0
  53. {janito-2.20.1 → janito-2.21.0}/docs/drivers.md +0 -0
  54. {janito-2.20.1 → janito-2.21.0}/docs/event-bus.md +0 -0
  55. {janito-2.20.1 → janito-2.21.0}/docs/guides/configuration.md +0 -0
  56. {janito-2.20.1 → janito-2.21.0}/docs/guides/developing.md +0 -0
  57. {janito-2.20.1 → janito-2.21.0}/docs/guides/disabled-tools.md +0 -0
  58. {janito-2.20.1 → janito-2.21.0}/docs/guides/installation.md +0 -0
  59. {janito-2.20.1 → janito-2.21.0}/docs/guides/profiles.md +0 -0
  60. {janito-2.20.1 → janito-2.21.0}/docs/guides/prompting/README.md +0 -0
  61. {janito-2.20.1 → janito-2.21.0}/docs/guides/single-shot-terminal.md +0 -0
  62. {janito-2.20.1 → janito-2.21.0}/docs/guides/terminal-shell.md +0 -0
  63. {janito-2.20.1 → janito-2.21.0}/docs/guides/tools-developer-guide.md +0 -0
  64. {janito-2.20.1 → janito-2.21.0}/docs/guides/using.md +0 -0
  65. {janito-2.20.1 → janito-2.21.0}/docs/guides/using_tools.md +0 -0
  66. {janito-2.20.1 → janito-2.21.0}/docs/imgs/code-generation-observability.png +0 -0
  67. {janito-2.20.1 → janito-2.21.0}/docs/imgs/code_generation_observability.png +0 -0
  68. {janito-2.20.1 → janito-2.21.0}/docs/imgs/happy-programmer.png +0 -0
  69. {janito-2.20.1 → janito-2.21.0}/docs/imgs/happy-programmer.svg +0 -0
  70. {janito-2.20.1 → janito-2.21.0}/docs/imgs/terminal-one-shot.png +0 -0
  71. {janito-2.20.1 → janito-2.21.0}/docs/imgs/terminal-shell.png +0 -0
  72. {janito-2.20.1 → janito-2.21.0}/docs/imgs/terminal_one_shot.png +0 -0
  73. {janito-2.20.1 → janito-2.21.0}/docs/imgs/terminal_shell.png +0 -0
  74. {janito-2.20.1 → janito-2.21.0}/docs/index.md +0 -0
  75. {janito-2.20.1 → janito-2.21.0}/docs/llm-drivers-required-config.md +0 -0
  76. {janito-2.20.1 → janito-2.21.0}/docs/llm-drivers.md +0 -0
  77. {janito-2.20.1 → janito-2.21.0}/docs/meta/developer-toolchain.md +0 -0
  78. {janito-2.20.1 → janito-2.21.0}/docs/meta/quality-checks.txt +0 -0
  79. {janito-2.20.1 → janito-2.21.0}/docs/mistral-setup.md +0 -0
  80. {janito-2.20.1 → janito-2.21.0}/docs/moonshotai-setup.md +0 -0
  81. {janito-2.20.1 → janito-2.21.0}/docs/openai-setup.md +0 -0
  82. {janito-2.20.1 → janito-2.21.0}/docs/overrides/partials/copyright.html +0 -0
  83. {janito-2.20.1 → janito-2.21.0}/docs/provider-platform-access.md +0 -0
  84. {janito-2.20.1 → janito-2.21.0}/docs/pt/README-pt.md +0 -0
  85. {janito-2.20.1 → janito-2.21.0}/docs/pt/README.md +0 -0
  86. {janito-2.20.1 → janito-2.21.0}/docs/pt/configuracao.md +0 -0
  87. {janito-2.20.1 → janito-2.21.0}/docs/pt/exemplos.md +0 -0
  88. {janito-2.20.1 → janito-2.21.0}/docs/pt/faq-pt.md +0 -0
  89. {janito-2.20.1 → janito-2.21.0}/docs/pt/ferramentas.md +0 -0
  90. {janito-2.20.1 → janito-2.21.0}/docs/pt/guia-uso.md +0 -0
  91. {janito-2.20.1 → janito-2.21.0}/docs/pt/instalacao.md +0 -0
  92. {janito-2.20.1 → janito-2.21.0}/docs/pt/perfis.md +0 -0
  93. {janito-2.20.1 → janito-2.21.0}/docs/reference/api.md +0 -0
  94. {janito-2.20.1 → janito-2.21.0}/docs/reference/azure-openai.md +0 -0
  95. {janito-2.20.1 → janito-2.21.0}/docs/reference/cli-options.md +0 -0
  96. {janito-2.20.1 → janito-2.21.0}/docs/reference/message-handler-model.md +0 -0
  97. {janito-2.20.1 → janito-2.21.0}/docs/reference/rich-message-handler.md +0 -0
  98. {janito-2.20.1 → janito-2.21.0}/docs/security.md +0 -0
  99. {janito-2.20.1 → janito-2.21.0}/docs/supported-providers-models.md +0 -0
  100. {janito-2.20.1 → janito-2.21.0}/docs/tools/search-text.md +0 -0
  101. {janito-2.20.1 → janito-2.21.0}/docs/tools-index.md +0 -0
  102. {janito-2.20.1 → janito-2.21.0}/docs/tools-natural-results.md +0 -0
  103. {janito-2.20.1 → janito-2.21.0}/docs/tools-precision.md +0 -0
  104. {janito-2.20.1 → janito-2.21.0}/docs/z-ai-setup.md +0 -0
  105. {janito-2.20.1 → janito-2.21.0}/janito/__init__.py +0 -0
  106. {janito-2.20.1 → janito-2.21.0}/janito/__main__.py +0 -0
  107. {janito-2.20.1 → janito-2.21.0}/janito/_version.py +0 -0
  108. {janito-2.20.1 → janito-2.21.0}/janito/agent/setup_agent.py +0 -0
  109. {janito-2.20.1 → janito-2.21.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  110. {janito-2.20.1 → janito-2.21.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  111. {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
  112. {janito-2.20.1 → janito-2.21.0}/janito/cli/__init__.py +0 -0
  113. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/bindings.py +0 -0
  114. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  115. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  116. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/script_runner.py +0 -0
  117. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/session.py +0 -0
  118. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
  119. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  120. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  121. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  122. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  123. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  124. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  125. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  126. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  127. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  128. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  129. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  130. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  131. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  132. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  133. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  134. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  135. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  136. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  137. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  138. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  139. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  140. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  141. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  142. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  143. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  144. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  145. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  146. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  147. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  148. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  149. {janito-2.20.1 → janito-2.21.0}/janito/cli/chat_mode/toolbar.py +0 -0
  150. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_config.py +0 -0
  151. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  152. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_models.py +0 -0
  153. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  154. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_providers.py +0 -0
  155. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  156. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/list_tools.py +0 -0
  157. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/model_selection.py +0 -0
  158. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/model_utils.py +0 -0
  159. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/ping_providers.py +0 -0
  160. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  161. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/show_config.py +0 -0
  162. {janito-2.20.1 → janito-2.21.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  163. {janito-2.20.1 → janito-2.21.0}/janito/cli/config.py +0 -0
  164. {janito-2.20.1 → janito-2.21.0}/janito/cli/console.py +0 -0
  165. {janito-2.20.1 → janito-2.21.0}/janito/cli/core/__init__.py +0 -0
  166. {janito-2.20.1 → janito-2.21.0}/janito/cli/core/event_logger.py +0 -0
  167. {janito-2.20.1 → janito-2.21.0}/janito/cli/core/getters.py +0 -0
  168. {janito-2.20.1 → janito-2.21.0}/janito/cli/core/model_guesser.py +0 -0
  169. {janito-2.20.1 → janito-2.21.0}/janito/cli/core/runner.py +0 -0
  170. {janito-2.20.1 → janito-2.21.0}/janito/cli/core/setters.py +0 -0
  171. {janito-2.20.1 → janito-2.21.0}/janito/cli/core/unsetters.py +0 -0
  172. {janito-2.20.1 → janito-2.21.0}/janito/cli/main.py +0 -0
  173. {janito-2.20.1 → janito-2.21.0}/janito/cli/main_cli.py +0 -0
  174. {janito-2.20.1 → janito-2.21.0}/janito/cli/prompt_core.py +0 -0
  175. {janito-2.20.1 → janito-2.21.0}/janito/cli/prompt_handler.py +0 -0
  176. {janito-2.20.1 → janito-2.21.0}/janito/cli/prompt_setup.py +0 -0
  177. {janito-2.20.1 → janito-2.21.0}/janito/cli/rich_terminal_reporter.py +0 -0
  178. {janito-2.20.1 → janito-2.21.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  179. {janito-2.20.1 → janito-2.21.0}/janito/cli/single_shot_mode/handler.py +0 -0
  180. {janito-2.20.1 → janito-2.21.0}/janito/cli/utils.py +0 -0
  181. {janito-2.20.1 → janito-2.21.0}/janito/cli/verbose_output.py +0 -0
  182. {janito-2.20.1 → janito-2.21.0}/janito/config.py +0 -0
  183. {janito-2.20.1 → janito-2.21.0}/janito/config_manager.py +0 -0
  184. {janito-2.20.1 → janito-2.21.0}/janito/conversation_history.py +0 -0
  185. {janito-2.20.1 → janito-2.21.0}/janito/dir_walk_utils.py +0 -0
  186. {janito-2.20.1 → janito-2.21.0}/janito/driver_events.py +0 -0
  187. {janito-2.20.1 → janito-2.21.0}/janito/drivers/azure_openai/driver.py +0 -0
  188. {janito-2.20.1 → janito-2.21.0}/janito/drivers/cerebras/__init__.py +0 -0
  189. {janito-2.20.1 → janito-2.21.0}/janito/drivers/dashscope.bak.zip +0 -0
  190. {janito-2.20.1 → janito-2.21.0}/janito/drivers/openai/README.md +0 -0
  191. {janito-2.20.1 → janito-2.21.0}/janito/drivers/openai/driver.py +0 -0
  192. {janito-2.20.1 → janito-2.21.0}/janito/drivers/openai_responses.bak.zip +0 -0
  193. {janito-2.20.1 → janito-2.21.0}/janito/drivers/zai/__init__.py +0 -0
  194. {janito-2.20.1 → janito-2.21.0}/janito/drivers/zai/driver.py +0 -0
  195. {janito-2.20.1 → janito-2.21.0}/janito/event_bus/__init__.py +0 -0
  196. {janito-2.20.1 → janito-2.21.0}/janito/event_bus/bus.py +0 -0
  197. {janito-2.20.1 → janito-2.21.0}/janito/event_bus/event.py +0 -0
  198. {janito-2.20.1 → janito-2.21.0}/janito/event_bus/handler.py +0 -0
  199. {janito-2.20.1 → janito-2.21.0}/janito/event_bus/queue_bus.py +0 -0
  200. {janito-2.20.1 → janito-2.21.0}/janito/exceptions.py +0 -0
  201. {janito-2.20.1 → janito-2.21.0}/janito/formatting.py +0 -0
  202. {janito-2.20.1 → janito-2.21.0}/janito/formatting_token.py +0 -0
  203. {janito-2.20.1 → janito-2.21.0}/janito/gitignore_utils.py +0 -0
  204. {janito-2.20.1 → janito-2.21.0}/janito/i18n/__init__.py +0 -0
  205. {janito-2.20.1 → janito-2.21.0}/janito/i18n/it.py +0 -0
  206. {janito-2.20.1 → janito-2.21.0}/janito/i18n/messages.py +0 -0
  207. {janito-2.20.1 → janito-2.21.0}/janito/i18n/pt.py +0 -0
  208. {janito-2.20.1 → janito-2.21.0}/janito/llm/README.md +0 -0
  209. {janito-2.20.1 → janito-2.21.0}/janito/llm/__init__.py +0 -0
  210. {janito-2.20.1 → janito-2.21.0}/janito/llm/agent.py +0 -0
  211. {janito-2.20.1 → janito-2.21.0}/janito/llm/auth.py +0 -0
  212. {janito-2.20.1 → janito-2.21.0}/janito/llm/auth_utils.py +0 -0
  213. {janito-2.20.1 → janito-2.21.0}/janito/llm/driver.py +0 -0
  214. {janito-2.20.1 → janito-2.21.0}/janito/llm/driver_config.py +0 -0
  215. {janito-2.20.1 → janito-2.21.0}/janito/llm/driver_config_builder.py +0 -0
  216. {janito-2.20.1 → janito-2.21.0}/janito/llm/driver_input.py +0 -0
  217. {janito-2.20.1 → janito-2.21.0}/janito/llm/message_parts.py +0 -0
  218. {janito-2.20.1 → janito-2.21.0}/janito/llm/model.py +0 -0
  219. {janito-2.20.1 → janito-2.21.0}/janito/llm/provider.py +0 -0
  220. {janito-2.20.1 → janito-2.21.0}/janito/mkdocs.yml +0 -0
  221. {janito-2.20.1 → janito-2.21.0}/janito/perf_singleton.py +0 -0
  222. {janito-2.20.1 → janito-2.21.0}/janito/performance_collector.py +0 -0
  223. {janito-2.20.1 → janito-2.21.0}/janito/platform_discovery.py +0 -0
  224. {janito-2.20.1 → janito-2.21.0}/janito/provider_config.py +0 -0
  225. {janito-2.20.1 → janito-2.21.0}/janito/provider_registry.py +0 -0
  226. {janito-2.20.1 → janito-2.21.0}/janito/providers/alibaba/__init__.py +0 -0
  227. {janito-2.20.1 → janito-2.21.0}/janito/providers/alibaba/model_info.py +0 -0
  228. {janito-2.20.1 → janito-2.21.0}/janito/providers/alibaba/provider.py +0 -0
  229. {janito-2.20.1 → janito-2.21.0}/janito/providers/anthropic/model_info.py +0 -0
  230. {janito-2.20.1 → janito-2.21.0}/janito/providers/anthropic/provider.py +0 -0
  231. {janito-2.20.1 → janito-2.21.0}/janito/providers/azure_openai/model_info.py +0 -0
  232. {janito-2.20.1 → janito-2.21.0}/janito/providers/cerebras/__init__.py +0 -0
  233. {janito-2.20.1 → janito-2.21.0}/janito/providers/cerebras/model_info.py +0 -0
  234. {janito-2.20.1 → janito-2.21.0}/janito/providers/cerebras/provider.py +0 -0
  235. {janito-2.20.1 → janito-2.21.0}/janito/providers/dashscope.bak.zip +0 -0
  236. {janito-2.20.1 → janito-2.21.0}/janito/providers/deepseek/__init__.py +0 -0
  237. {janito-2.20.1 → janito-2.21.0}/janito/providers/deepseek/model_info.py +0 -0
  238. {janito-2.20.1 → janito-2.21.0}/janito/providers/deepseek/provider.py +0 -0
  239. {janito-2.20.1 → janito-2.21.0}/janito/providers/google/__init__.py +0 -0
  240. {janito-2.20.1 → janito-2.21.0}/janito/providers/google/model_info.py +0 -0
  241. {janito-2.20.1 → janito-2.21.0}/janito/providers/google/provider.py +0 -0
  242. {janito-2.20.1 → janito-2.21.0}/janito/providers/mistral/__init__.py +0 -0
  243. {janito-2.20.1 → janito-2.21.0}/janito/providers/mistral/model_info.py +0 -0
  244. {janito-2.20.1 → janito-2.21.0}/janito/providers/mistral/provider.py +0 -0
  245. {janito-2.20.1 → janito-2.21.0}/janito/providers/moonshotai/__init__.py +0 -0
  246. {janito-2.20.1 → janito-2.21.0}/janito/providers/moonshotai/model_info.py +0 -0
  247. {janito-2.20.1 → janito-2.21.0}/janito/providers/moonshotai/provider.py +0 -0
  248. {janito-2.20.1 → janito-2.21.0}/janito/providers/openai/__init__.py +0 -0
  249. {janito-2.20.1 → janito-2.21.0}/janito/providers/openai/model_info.py +0 -0
  250. {janito-2.20.1 → janito-2.21.0}/janito/providers/openai/provider.py +0 -0
  251. {janito-2.20.1 → janito-2.21.0}/janito/providers/openai/schema_generator.py +0 -0
  252. {janito-2.20.1 → janito-2.21.0}/janito/providers/registry.py +0 -0
  253. {janito-2.20.1 → janito-2.21.0}/janito/providers/zai/__init__.py +0 -0
  254. {janito-2.20.1 → janito-2.21.0}/janito/providers/zai/model_info.py +0 -0
  255. {janito-2.20.1 → janito-2.21.0}/janito/providers/zai/provider.py +0 -0
  256. {janito-2.20.1 → janito-2.21.0}/janito/providers/zai/schema_generator.py +0 -0
  257. {janito-2.20.1 → janito-2.21.0}/janito/regions/__init__.py +0 -0
  258. {janito-2.20.1 → janito-2.21.0}/janito/regions/cli.py +0 -0
  259. {janito-2.20.1 → janito-2.21.0}/janito/regions/geo_utils.py +0 -0
  260. {janito-2.20.1 → janito-2.21.0}/janito/regions/provider_regions.py +0 -0
  261. {janito-2.20.1 → janito-2.21.0}/janito/report_events.py +0 -0
  262. {janito-2.20.1 → janito-2.21.0}/janito/shell.bak.zip +0 -0
  263. {janito-2.20.1 → janito-2.21.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  264. {janito-2.20.1 → janito-2.21.0}/janito/tools/README.md +0 -0
  265. {janito-2.20.1 → janito-2.21.0}/janito/tools/__init__.py +0 -0
  266. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/__init__.py +0 -0
  267. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/__init__.py +0 -0
  268. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/adapter.py +0 -0
  269. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/ask_user.py +0 -0
  270. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/copy_file.py +0 -0
  271. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/create_directory.py +0 -0
  272. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/create_file.py +0 -0
  273. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  274. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/find_files.py +0 -0
  275. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  276. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  277. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  278. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  279. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  280. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  281. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/move_file.py +0 -0
  282. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  283. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/open_url.py +0 -0
  284. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/python_code_run.py +0 -0
  285. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/python_command_run.py +0 -0
  286. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/python_file_run.py +0 -0
  287. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/read_files.py +0 -0
  288. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/remove_directory.py +0 -0
  289. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/remove_file.py +0 -0
  290. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  291. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
  292. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
  293. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  294. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/core.py +0 -0
  295. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  296. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  297. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  298. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  299. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  300. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  301. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  302. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  303. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  304. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  305. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  306. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  307. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  308. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  309. {janito-2.20.1 → janito-2.21.0}/janito/tools/adapters/local/view_file.py +0 -0
  310. {janito-2.20.1 → janito-2.21.0}/janito/tools/disabled_tools.py +0 -0
  311. {janito-2.20.1 → janito-2.21.0}/janito/tools/inspect_registry.py +0 -0
  312. {janito-2.20.1 → janito-2.21.0}/janito/tools/outline_file.bak.zip +0 -0
  313. {janito-2.20.1 → janito-2.21.0}/janito/tools/path_security.py +0 -0
  314. {janito-2.20.1 → janito-2.21.0}/janito/tools/permissions.py +0 -0
  315. {janito-2.20.1 → janito-2.21.0}/janito/tools/permissions_parse.py +0 -0
  316. {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_base.py +0 -0
  317. {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_events.py +0 -0
  318. {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_run_exception.py +0 -0
  319. {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_use_tracker.py +0 -0
  320. {janito-2.20.1 → janito-2.21.0}/janito/tools/tool_utils.py +0 -0
  321. {janito-2.20.1 → janito-2.21.0}/janito/tools/tools_adapter.py +0 -0
  322. {janito-2.20.1 → janito-2.21.0}/janito/tools/tools_schema.py +0 -0
  323. {janito-2.20.1 → janito-2.21.0}/janito/utils.py +0 -0
  324. {janito-2.20.1 → janito-2.21.0}/janito.egg-info/dependency_links.txt +0 -0
  325. {janito-2.20.1 → janito-2.21.0}/janito.egg-info/entry_points.txt +0 -0
  326. {janito-2.20.1 → janito-2.21.0}/janito.egg-info/requires.txt +0 -0
  327. {janito-2.20.1 → janito-2.21.0}/janito.egg-info/top_level.txt +0 -0
  328. {janito-2.20.1 → janito-2.21.0}/mkdocs.yml +0 -0
  329. {janito-2.20.1 → janito-2.21.0}/mkdocs_hooks.py +0 -0
  330. {janito-2.20.1 → janito-2.21.0}/pyproject.toml +0 -0
  331. {janito-2.20.1 → janito-2.21.0}/pytest.ini +0 -0
  332. {janito-2.20.1 → janito-2.21.0}/requirements-dev.txt +0 -0
  333. {janito-2.20.1 → janito-2.21.0}/requirements.txt +0 -0
  334. {janito-2.20.1 → janito-2.21.0}/setup.cfg +0 -0
  335. {janito-2.20.1 → janito-2.21.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  336. {janito-2.20.1 → janito-2.21.0}/tests/adapters/local/test_read_files.py +0 -0
  337. {janito-2.20.1 → janito-2.21.0}/tests/test_cli_list_models.py +0 -0
  338. {janito-2.20.1 → janito-2.21.0}/tests/test_cli_list_providers.py +0 -0
  339. {janito-2.20.1 → janito-2.21.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  340. {janito-2.20.1 → janito-2.21.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
  341. {janito-2.20.1 → janito-2.21.0}/tests/test_cli_version.py +0 -0
  342. {janito-2.20.1 → janito-2.21.0}/tests/test_disabled_tools.py +0 -0
  343. {janito-2.20.1 → janito-2.21.0}/tests/test_provider_alibaba.py +0 -0
  344. {janito-2.20.1 → janito-2.21.0}/tests/test_provider_cerebras.py +0 -0
  345. {janito-2.20.1 → janito-2.21.0}/tests/test_provider_moonshotai.py +0 -0
  346. {janito-2.20.1 → janito-2.21.0}/tools/release.py +0 -0
  347. {janito-2.20.1 → janito-2.21.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.20.1
3
+ Version: 2.21.0
4
4
  Summary: A new Python package called janito.
5
5
  Author-email: João Pinto <janito@ikignosis.org>
6
6
  Project-URL: Homepage, https://github.com/ikignosis/janito
@@ -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-20240229
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.0-flash-exp, gemini-1.5-pro
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
@@ -9,3 +9,4 @@ import janito.providers.alibaba.provider
9
9
  import janito.providers.zai.provider
10
10
  import janito.providers.cerebras.provider
11
11
  import janito.providers.mistral.provider
12
+ import janito.providers.ibm.provider
@@ -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, but note: only static ones are listed
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)