janito 2.18.0__tar.gz → 2.19.1__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 (332) hide show
  1. {janito-2.18.0 → janito-2.19.1}/CHANGELOG.md +19 -1
  2. {janito-2.18.0 → janito-2.19.1}/PKG-INFO +1 -1
  3. janito-2.19.1/docs/alibaba-setup.md +70 -0
  4. janito-2.19.1/docs/index.md +53 -0
  5. janito-2.19.1/docs/overrides/partials/copyright.html +6 -0
  6. janito-2.19.1/docs/supported-providers-models.md +94 -0
  7. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/list_models.py +16 -2
  8. janito-2.19.1/janito/cli/cli_commands/list_providers.py +15 -0
  9. janito-2.19.1/janito/cli/cli_commands/model_utils.py +117 -0
  10. janito-2.19.1/janito/cli/cli_commands/ping_providers.py +55 -0
  11. {janito-2.18.0 → janito-2.19.1}/janito/cli/main_cli.py +18 -0
  12. janito-2.19.1/janito/i18n/it.py +46 -0
  13. {janito-2.18.0 → janito-2.19.1}/janito/llm/model.py +1 -0
  14. {janito-2.18.0 → janito-2.19.1}/janito/provider_registry.py +11 -1
  15. janito-2.19.1/janito/providers/alibaba/model_info.py +97 -0
  16. {janito-2.18.0 → janito-2.19.1}/janito/providers/alibaba/provider.py +1 -1
  17. {janito-2.18.0 → janito-2.19.1}/janito/report_events.py +1 -0
  18. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/run_powershell_command.py +5 -14
  19. {janito-2.18.0 → janito-2.19.1}/janito/tools/tool_base.py +2 -0
  20. {janito-2.18.0 → janito-2.19.1}/janito.egg-info/PKG-INFO +1 -1
  21. {janito-2.18.0 → janito-2.19.1}/janito.egg-info/SOURCES.txt +6 -0
  22. {janito-2.18.0 → janito-2.19.1}/mkdocs.yml +5 -0
  23. janito-2.19.1/mkdocs_hooks.py +51 -0
  24. janito-2.18.0/docs/supported-providers-models.md +0 -73
  25. janito-2.18.0/janito/cli/cli_commands/list_providers.py +0 -10
  26. janito-2.18.0/janito/cli/cli_commands/model_utils.py +0 -97
  27. janito-2.18.0/janito/providers/alibaba/model_info.py +0 -40
  28. {janito-2.18.0 → janito-2.19.1}/.codespellrc +0 -0
  29. {janito-2.18.0 → janito-2.19.1}/.gitattributes +0 -0
  30. {janito-2.18.0 → janito-2.19.1}/.github/workflows/python-app.yml.disabled +0 -0
  31. {janito-2.18.0 → janito-2.19.1}/.gitignore +0 -0
  32. {janito-2.18.0 → janito-2.19.1}/.pre-commit-config.yaml +0 -0
  33. {janito-2.18.0 → janito-2.19.1}/.secrets.baseline +0 -0
  34. {janito-2.18.0 → janito-2.19.1}/.vscode/settings.json +0 -0
  35. {janito-2.18.0 → janito-2.19.1}/CHANGELOG_2.16.0.md +0 -0
  36. {janito-2.18.0 → janito-2.19.1}/LICENSE +0 -0
  37. {janito-2.18.0 → janito-2.19.1}/README-dev.md +0 -0
  38. {janito-2.18.0 → janito-2.19.1}/README.md +0 -0
  39. {janito-2.18.0 → janito-2.19.1}/UPDATING_DOCS.md +0 -0
  40. {janito-2.18.0 → janito-2.19.1}/adding_mcp.txt +0 -0
  41. {janito-2.18.0 → janito-2.19.1}/docs/DIV.md +0 -0
  42. {janito-2.18.0 → janito-2.19.1}/docs/Interfaces.txt +0 -0
  43. {janito-2.18.0 → janito-2.19.1}/docs/TOOLBAR-STYLING.md +0 -0
  44. {janito-2.18.0 → janito-2.19.1}/docs/about/costs.md +0 -0
  45. {janito-2.18.0 → janito-2.19.1}/docs/about/vs-webchats.md +0 -0
  46. {janito-2.18.0 → janito-2.19.1}/docs/about/why.md +0 -0
  47. {janito-2.18.0 → janito-2.19.1}/docs/alternatives.md +0 -0
  48. {janito-2.18.0 → janito-2.19.1}/docs/cerebras-setup.md +0 -0
  49. {janito-2.18.0 → janito-2.19.1}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  50. {janito-2.18.0 → janito-2.19.1}/docs/code_intelligence/code-generation-challenges.md +0 -0
  51. {janito-2.18.0 → janito-2.19.1}/docs/code_intelligence/code-generation-observability.md +0 -0
  52. {janito-2.18.0 → janito-2.19.1}/docs/code_intelligence/our-approach.md +0 -0
  53. {janito-2.18.0 → janito-2.19.1}/docs/code_intelligence/why-string-replacement.md +0 -0
  54. {janito-2.18.0 → janito-2.19.1}/docs/concepts/analysis-style.md +0 -0
  55. {janito-2.18.0 → janito-2.19.1}/docs/concepts/human-guided-ai.md +0 -0
  56. {janito-2.18.0 → janito-2.19.1}/docs/concepts/index.md +0 -0
  57. {janito-2.18.0 → janito-2.19.1}/docs/concepts/language-model-clients.md +0 -0
  58. {janito-2.18.0 → janito-2.19.1}/docs/concepts/prompt-design-style.md +0 -0
  59. {janito-2.18.0 → janito-2.19.1}/docs/deepseek-setup.md +0 -0
  60. {janito-2.18.0 → janito-2.19.1}/docs/driver-flow.md +0 -0
  61. {janito-2.18.0 → janito-2.19.1}/docs/driver-request-cancellation.md +0 -0
  62. {janito-2.18.0 → janito-2.19.1}/docs/drivers/events.md +0 -0
  63. {janito-2.18.0 → janito-2.19.1}/docs/drivers.md +0 -0
  64. {janito-2.18.0 → janito-2.19.1}/docs/event-bus.md +0 -0
  65. {janito-2.18.0 → janito-2.19.1}/docs/guides/configuration.md +0 -0
  66. {janito-2.18.0 → janito-2.19.1}/docs/guides/developing.md +0 -0
  67. {janito-2.18.0 → janito-2.19.1}/docs/guides/disabled-tools.md +0 -0
  68. {janito-2.18.0 → janito-2.19.1}/docs/guides/installation.md +0 -0
  69. {janito-2.18.0 → janito-2.19.1}/docs/guides/profiles.md +0 -0
  70. {janito-2.18.0 → janito-2.19.1}/docs/guides/prompting/README.md +0 -0
  71. {janito-2.18.0 → janito-2.19.1}/docs/guides/single-shot-terminal.md +0 -0
  72. {janito-2.18.0 → janito-2.19.1}/docs/guides/terminal-shell.md +0 -0
  73. {janito-2.18.0 → janito-2.19.1}/docs/guides/tools-developer-guide.md +0 -0
  74. {janito-2.18.0 → janito-2.19.1}/docs/guides/using.md +0 -0
  75. {janito-2.18.0 → janito-2.19.1}/docs/guides/using_tools.md +0 -0
  76. {janito-2.18.0 → janito-2.19.1}/docs/imgs/code-generation-observability.png +0 -0
  77. {janito-2.18.0 → janito-2.19.1}/docs/imgs/code_generation_observability.png +0 -0
  78. {janito-2.18.0 → janito-2.19.1}/docs/imgs/happy-programmer.png +0 -0
  79. {janito-2.18.0 → janito-2.19.1}/docs/imgs/happy-programmer.svg +0 -0
  80. {janito-2.18.0 → janito-2.19.1}/docs/imgs/terminal-one-shot.png +0 -0
  81. {janito-2.18.0 → janito-2.19.1}/docs/imgs/terminal-shell.png +0 -0
  82. {janito-2.18.0 → janito-2.19.1}/docs/imgs/terminal_one_shot.png +0 -0
  83. {janito-2.18.0 → janito-2.19.1}/docs/imgs/terminal_shell.png +0 -0
  84. {janito-2.18.0 → janito-2.19.1}/docs/llm-drivers-required-config.md +0 -0
  85. {janito-2.18.0 → janito-2.19.1}/docs/llm-drivers.md +0 -0
  86. {janito-2.18.0 → janito-2.19.1}/docs/meta/developer-toolchain.md +0 -0
  87. {janito-2.18.0 → janito-2.19.1}/docs/meta/quality-checks.txt +0 -0
  88. {janito-2.18.0 → janito-2.19.1}/docs/moonshotai-setup.md +0 -0
  89. {janito-2.18.0 → janito-2.19.1}/docs/openai-setup.md +0 -0
  90. {janito-2.18.0 → janito-2.19.1}/docs/reference/api.md +0 -0
  91. {janito-2.18.0 → janito-2.19.1}/docs/reference/azure-openai.md +0 -0
  92. {janito-2.18.0 → janito-2.19.1}/docs/reference/cli-options.md +0 -0
  93. {janito-2.18.0 → janito-2.19.1}/docs/reference/message-handler-model.md +0 -0
  94. {janito-2.18.0 → janito-2.19.1}/docs/reference/rich-message-handler.md +0 -0
  95. {janito-2.18.0 → janito-2.19.1}/docs/security.md +0 -0
  96. {janito-2.18.0 → janito-2.19.1}/docs/tools/search-text.md +0 -0
  97. {janito-2.18.0 → janito-2.19.1}/docs/tools-index.md +0 -0
  98. {janito-2.18.0 → janito-2.19.1}/docs/tools-natural-results.md +0 -0
  99. {janito-2.18.0 → janito-2.19.1}/docs/tools-precision.md +0 -0
  100. {janito-2.18.0 → janito-2.19.1}/docs/z-ai-setup.md +0 -0
  101. {janito-2.18.0 → janito-2.19.1}/git_diff.txt +0 -0
  102. {janito-2.18.0 → janito-2.19.1}/github_diff +0 -0
  103. {janito-2.18.0 → janito-2.19.1}/janito/README.md +0 -0
  104. {janito-2.18.0 → janito-2.19.1}/janito/__init__.py +0 -0
  105. {janito-2.18.0 → janito-2.19.1}/janito/__main__.py +0 -0
  106. {janito-2.18.0 → janito-2.19.1}/janito/_version.py +0 -0
  107. {janito-2.18.0 → janito-2.19.1}/janito/agent/setup_agent.py +0 -0
  108. {janito-2.18.0 → janito-2.19.1}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  109. {janito-2.18.0 → janito-2.19.1}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  110. {janito-2.18.0 → janito-2.19.1}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  111. {janito-2.18.0 → janito-2.19.1}/janito/cli/__init__.py +0 -0
  112. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/bindings.py +0 -0
  113. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/chat_entry.py +0 -0
  114. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/prompt_style.py +0 -0
  115. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/script_runner.py +0 -0
  116. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/session.py +0 -0
  117. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/session_profile_select.py +0 -0
  118. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  119. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  120. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  121. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  122. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  123. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  124. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  125. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  126. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  127. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  128. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  129. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  130. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  131. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  132. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  133. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  134. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  135. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  136. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  137. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  138. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  139. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  140. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  141. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  142. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  143. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/input_history.py +0 -0
  144. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  145. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/session/history.py +0 -0
  146. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  147. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  148. {janito-2.18.0 → janito-2.19.1}/janito/cli/chat_mode/toolbar.py +0 -0
  149. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/list_config.py +0 -0
  150. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/list_drivers.py +0 -0
  151. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/list_profiles.py +0 -0
  152. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/list_providers_region.py +0 -0
  153. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/list_tools.py +0 -0
  154. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/model_selection.py +0 -0
  155. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/set_api_key.py +0 -0
  156. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/show_config.py +0 -0
  157. {janito-2.18.0 → janito-2.19.1}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  158. {janito-2.18.0 → janito-2.19.1}/janito/cli/config.py +0 -0
  159. {janito-2.18.0 → janito-2.19.1}/janito/cli/console.py +0 -0
  160. {janito-2.18.0 → janito-2.19.1}/janito/cli/core/__init__.py +0 -0
  161. {janito-2.18.0 → janito-2.19.1}/janito/cli/core/event_logger.py +0 -0
  162. {janito-2.18.0 → janito-2.19.1}/janito/cli/core/getters.py +0 -0
  163. {janito-2.18.0 → janito-2.19.1}/janito/cli/core/model_guesser.py +0 -0
  164. {janito-2.18.0 → janito-2.19.1}/janito/cli/core/runner.py +0 -0
  165. {janito-2.18.0 → janito-2.19.1}/janito/cli/core/setters.py +0 -0
  166. {janito-2.18.0 → janito-2.19.1}/janito/cli/core/unsetters.py +0 -0
  167. {janito-2.18.0 → janito-2.19.1}/janito/cli/main.py +0 -0
  168. {janito-2.18.0 → janito-2.19.1}/janito/cli/prompt_core.py +0 -0
  169. {janito-2.18.0 → janito-2.19.1}/janito/cli/prompt_handler.py +0 -0
  170. {janito-2.18.0 → janito-2.19.1}/janito/cli/prompt_setup.py +0 -0
  171. {janito-2.18.0 → janito-2.19.1}/janito/cli/rich_terminal_reporter.py +0 -0
  172. {janito-2.18.0 → janito-2.19.1}/janito/cli/single_shot_mode/__init__.py +0 -0
  173. {janito-2.18.0 → janito-2.19.1}/janito/cli/single_shot_mode/handler.py +0 -0
  174. {janito-2.18.0 → janito-2.19.1}/janito/cli/utils.py +0 -0
  175. {janito-2.18.0 → janito-2.19.1}/janito/cli/verbose_output.py +0 -0
  176. {janito-2.18.0 → janito-2.19.1}/janito/config.py +0 -0
  177. {janito-2.18.0 → janito-2.19.1}/janito/config_manager.py +0 -0
  178. {janito-2.18.0 → janito-2.19.1}/janito/conversation_history.py +0 -0
  179. {janito-2.18.0 → janito-2.19.1}/janito/dir_walk_utils.py +0 -0
  180. {janito-2.18.0 → janito-2.19.1}/janito/docs/GETTING_STARTED.md +0 -0
  181. {janito-2.18.0 → janito-2.19.1}/janito/driver_events.py +0 -0
  182. {janito-2.18.0 → janito-2.19.1}/janito/drivers/azure_openai/driver.py +0 -0
  183. {janito-2.18.0 → janito-2.19.1}/janito/drivers/cerebras/__init__.py +0 -0
  184. {janito-2.18.0 → janito-2.19.1}/janito/drivers/dashscope.bak.zip +0 -0
  185. {janito-2.18.0 → janito-2.19.1}/janito/drivers/openai/README.md +0 -0
  186. {janito-2.18.0 → janito-2.19.1}/janito/drivers/openai/driver.py +0 -0
  187. {janito-2.18.0 → janito-2.19.1}/janito/drivers/openai_responses.bak.zip +0 -0
  188. {janito-2.18.0 → janito-2.19.1}/janito/drivers/zai/__init__.py +0 -0
  189. {janito-2.18.0 → janito-2.19.1}/janito/drivers/zai/driver.py +0 -0
  190. {janito-2.18.0 → janito-2.19.1}/janito/event_bus/__init__.py +0 -0
  191. {janito-2.18.0 → janito-2.19.1}/janito/event_bus/bus.py +0 -0
  192. {janito-2.18.0 → janito-2.19.1}/janito/event_bus/event.py +0 -0
  193. {janito-2.18.0 → janito-2.19.1}/janito/event_bus/handler.py +0 -0
  194. {janito-2.18.0 → janito-2.19.1}/janito/event_bus/queue_bus.py +0 -0
  195. {janito-2.18.0 → janito-2.19.1}/janito/exceptions.py +0 -0
  196. {janito-2.18.0 → janito-2.19.1}/janito/formatting.py +0 -0
  197. {janito-2.18.0 → janito-2.19.1}/janito/formatting_token.py +0 -0
  198. {janito-2.18.0 → janito-2.19.1}/janito/gitignore_utils.py +0 -0
  199. {janito-2.18.0 → janito-2.19.1}/janito/i18n/__init__.py +0 -0
  200. {janito-2.18.0 → janito-2.19.1}/janito/i18n/messages.py +0 -0
  201. {janito-2.18.0 → janito-2.19.1}/janito/i18n/pt.py +0 -0
  202. {janito-2.18.0 → janito-2.19.1}/janito/llm/README.md +0 -0
  203. {janito-2.18.0 → janito-2.19.1}/janito/llm/__init__.py +0 -0
  204. {janito-2.18.0 → janito-2.19.1}/janito/llm/agent.py +0 -0
  205. {janito-2.18.0 → janito-2.19.1}/janito/llm/auth.py +0 -0
  206. {janito-2.18.0 → janito-2.19.1}/janito/llm/auth_utils.py +0 -0
  207. {janito-2.18.0 → janito-2.19.1}/janito/llm/driver.py +0 -0
  208. {janito-2.18.0 → janito-2.19.1}/janito/llm/driver_config.py +0 -0
  209. {janito-2.18.0 → janito-2.19.1}/janito/llm/driver_config_builder.py +0 -0
  210. {janito-2.18.0 → janito-2.19.1}/janito/llm/driver_input.py +0 -0
  211. {janito-2.18.0 → janito-2.19.1}/janito/llm/message_parts.py +0 -0
  212. {janito-2.18.0 → janito-2.19.1}/janito/llm/provider.py +0 -0
  213. {janito-2.18.0 → janito-2.19.1}/janito/mkdocs.yml +0 -0
  214. {janito-2.18.0 → janito-2.19.1}/janito/perf_singleton.py +0 -0
  215. {janito-2.18.0 → janito-2.19.1}/janito/performance_collector.py +0 -0
  216. {janito-2.18.0 → janito-2.19.1}/janito/platform_discovery.py +0 -0
  217. {janito-2.18.0 → janito-2.19.1}/janito/provider_config.py +0 -0
  218. {janito-2.18.0 → janito-2.19.1}/janito/providers/__init__.py +0 -0
  219. {janito-2.18.0 → janito-2.19.1}/janito/providers/alibaba/__init__.py +0 -0
  220. {janito-2.18.0 → janito-2.19.1}/janito/providers/anthropic/model_info.py +0 -0
  221. {janito-2.18.0 → janito-2.19.1}/janito/providers/anthropic/provider.py +0 -0
  222. {janito-2.18.0 → janito-2.19.1}/janito/providers/azure_openai/model_info.py +0 -0
  223. {janito-2.18.0 → janito-2.19.1}/janito/providers/azure_openai/provider.py +0 -0
  224. {janito-2.18.0 → janito-2.19.1}/janito/providers/cerebras/__init__.py +0 -0
  225. {janito-2.18.0 → janito-2.19.1}/janito/providers/cerebras/model_info.py +0 -0
  226. {janito-2.18.0 → janito-2.19.1}/janito/providers/cerebras/provider.py +0 -0
  227. {janito-2.18.0 → janito-2.19.1}/janito/providers/dashscope.bak.zip +0 -0
  228. {janito-2.18.0 → janito-2.19.1}/janito/providers/deepseek/__init__.py +0 -0
  229. {janito-2.18.0 → janito-2.19.1}/janito/providers/deepseek/model_info.py +0 -0
  230. {janito-2.18.0 → janito-2.19.1}/janito/providers/deepseek/provider.py +0 -0
  231. {janito-2.18.0 → janito-2.19.1}/janito/providers/google/__init__.py +0 -0
  232. {janito-2.18.0 → janito-2.19.1}/janito/providers/google/model_info.py +0 -0
  233. {janito-2.18.0 → janito-2.19.1}/janito/providers/google/provider.py +0 -0
  234. {janito-2.18.0 → janito-2.19.1}/janito/providers/moonshotai/__init__.py +0 -0
  235. {janito-2.18.0 → janito-2.19.1}/janito/providers/moonshotai/model_info.py +0 -0
  236. {janito-2.18.0 → janito-2.19.1}/janito/providers/moonshotai/provider.py +0 -0
  237. {janito-2.18.0 → janito-2.19.1}/janito/providers/openai/__init__.py +0 -0
  238. {janito-2.18.0 → janito-2.19.1}/janito/providers/openai/model_info.py +0 -0
  239. {janito-2.18.0 → janito-2.19.1}/janito/providers/openai/provider.py +0 -0
  240. {janito-2.18.0 → janito-2.19.1}/janito/providers/openai/schema_generator.py +0 -0
  241. {janito-2.18.0 → janito-2.19.1}/janito/providers/registry.py +0 -0
  242. {janito-2.18.0 → janito-2.19.1}/janito/providers/zai/__init__.py +0 -0
  243. {janito-2.18.0 → janito-2.19.1}/janito/providers/zai/model_info.py +0 -0
  244. {janito-2.18.0 → janito-2.19.1}/janito/providers/zai/provider.py +0 -0
  245. {janito-2.18.0 → janito-2.19.1}/janito/providers/zai/schema_generator.py +0 -0
  246. {janito-2.18.0 → janito-2.19.1}/janito/regions/__init__.py +0 -0
  247. {janito-2.18.0 → janito-2.19.1}/janito/regions/cli.py +0 -0
  248. {janito-2.18.0 → janito-2.19.1}/janito/regions/geo_utils.py +0 -0
  249. {janito-2.18.0 → janito-2.19.1}/janito/regions/provider_regions.py +0 -0
  250. {janito-2.18.0 → janito-2.19.1}/janito/shell.bak.zip +0 -0
  251. {janito-2.18.0 → janito-2.19.1}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  252. {janito-2.18.0 → janito-2.19.1}/janito/tools/README.md +0 -0
  253. {janito-2.18.0 → janito-2.19.1}/janito/tools/__init__.py +0 -0
  254. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/__init__.py +0 -0
  255. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/__init__.py +0 -0
  256. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/adapter.py +0 -0
  257. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/ask_user.py +0 -0
  258. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/copy_file.py +0 -0
  259. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/create_directory.py +0 -0
  260. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/create_file.py +0 -0
  261. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  262. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/fetch_url.py +0 -0
  263. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/find_files.py +0 -0
  264. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  265. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  266. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  267. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  268. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  269. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  270. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/move_file.py +0 -0
  271. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  272. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/open_url.py +0 -0
  273. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/python_code_run.py +0 -0
  274. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/python_command_run.py +0 -0
  275. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/python_file_run.py +0 -0
  276. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/read_files.py +0 -0
  277. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/remove_directory.py +0 -0
  278. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/remove_file.py +0 -0
  279. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  280. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/run_bash_command.py +0 -0
  281. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  282. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/search_text/core.py +0 -0
  283. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  284. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  285. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  286. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  287. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  288. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  289. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  290. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  291. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  292. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  293. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  294. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  295. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  296. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  297. {janito-2.18.0 → janito-2.19.1}/janito/tools/adapters/local/view_file.py +0 -0
  298. {janito-2.18.0 → janito-2.19.1}/janito/tools/disabled_tools.py +0 -0
  299. {janito-2.18.0 → janito-2.19.1}/janito/tools/inspect_registry.py +0 -0
  300. {janito-2.18.0 → janito-2.19.1}/janito/tools/outline_file.bak.zip +0 -0
  301. {janito-2.18.0 → janito-2.19.1}/janito/tools/path_security.py +0 -0
  302. {janito-2.18.0 → janito-2.19.1}/janito/tools/permissions.py +0 -0
  303. {janito-2.18.0 → janito-2.19.1}/janito/tools/permissions_parse.py +0 -0
  304. {janito-2.18.0 → janito-2.19.1}/janito/tools/tool_events.py +0 -0
  305. {janito-2.18.0 → janito-2.19.1}/janito/tools/tool_run_exception.py +0 -0
  306. {janito-2.18.0 → janito-2.19.1}/janito/tools/tool_use_tracker.py +0 -0
  307. {janito-2.18.0 → janito-2.19.1}/janito/tools/tool_utils.py +0 -0
  308. {janito-2.18.0 → janito-2.19.1}/janito/tools/tools_adapter.py +0 -0
  309. {janito-2.18.0 → janito-2.19.1}/janito/tools/tools_schema.py +0 -0
  310. {janito-2.18.0 → janito-2.19.1}/janito/utils.py +0 -0
  311. {janito-2.18.0 → janito-2.19.1}/janito.egg-info/dependency_links.txt +0 -0
  312. {janito-2.18.0 → janito-2.19.1}/janito.egg-info/entry_points.txt +0 -0
  313. {janito-2.18.0 → janito-2.19.1}/janito.egg-info/requires.txt +0 -0
  314. {janito-2.18.0 → janito-2.19.1}/janito.egg-info/top_level.txt +0 -0
  315. {janito-2.18.0 → janito-2.19.1}/pyproject.toml +0 -0
  316. {janito-2.18.0 → janito-2.19.1}/pytest.ini +0 -0
  317. {janito-2.18.0 → janito-2.19.1}/requirements-dev.txt +0 -0
  318. {janito-2.18.0 → janito-2.19.1}/requirements.txt +0 -0
  319. {janito-2.18.0 → janito-2.19.1}/setup.cfg +0 -0
  320. {janito-2.18.0 → janito-2.19.1}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  321. {janito-2.18.0 → janito-2.19.1}/tests/adapters/local/test_read_files.py +0 -0
  322. {janito-2.18.0 → janito-2.19.1}/tests/test_cli_list_models.py +0 -0
  323. {janito-2.18.0 → janito-2.19.1}/tests/test_cli_list_providers.py +0 -0
  324. {janito-2.18.0 → janito-2.19.1}/tests/test_cli_list_providers_alibaba.py +0 -0
  325. {janito-2.18.0 → janito-2.19.1}/tests/test_cli_list_providers_moonshotai.py +0 -0
  326. {janito-2.18.0 → janito-2.19.1}/tests/test_cli_version.py +0 -0
  327. {janito-2.18.0 → janito-2.19.1}/tests/test_disabled_tools.py +0 -0
  328. {janito-2.18.0 → janito-2.19.1}/tests/test_provider_alibaba.py +0 -0
  329. {janito-2.18.0 → janito-2.19.1}/tests/test_provider_cerebras.py +0 -0
  330. {janito-2.18.0 → janito-2.19.1}/tests/test_provider_moonshotai.py +0 -0
  331. {janito-2.18.0 → janito-2.19.1}/tools/release.py +0 -0
  332. {janito-2.18.0 → janito-2.19.1}/tox.ini +0 -0
@@ -2,7 +2,25 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [Unreleased]
5
+ ## [2.19.0] - 2025-08-08
6
+
7
+ ### Added
8
+
9
+ - **Alibaba Cloud Provider**: Added support for new Qwen3 1M context models
10
+ - `qwen3-235b-a22b-thinking-2507`: 1M context thinking model
11
+ - `qwen3-235b-a22b-instruct-2507`: 1M context instruct model
12
+ - `qwen3-30b-a3b-thinking-2507`: 1M context thinking model
13
+ - `qwen3-30b-a3b-instruct-2507`: 1M context instruct model
14
+ - **Thinking Mode Support**: Added thinking mode indicators (📖) for models that support chain-of-thought reasoning
15
+ - **Default Model Highlighting**: Added star (⭐) indicators to highlight default models in provider listings
16
+ - **Provider Connectivity Testing**: Added `--ping` flag to test connectivity with all providers when used with `--list-providers`
17
+ - **Enhanced Model Display**: Improved model listing with better formatting of context sizes and response limits
18
+
19
+ ### Changed
20
+
21
+ - **Alibaba Cloud Provider**: Updated default model from `qwen3-coder-plus` to `qwen3-235b-a22b-instruct-2507` (129k context)
22
+ - **Model Information**: Added thinking mode support tracking in LLMModelInfo class
23
+ - **Documentation**: Updated Alibaba setup guide with comprehensive configuration instructions
6
24
 
7
25
  ## [2.18.0] - 2025-08-07
8
26
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.18.0
3
+ Version: 2.19.1
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
@@ -0,0 +1,70 @@
1
+ # Alibaba Cloud Qwen Setup Guide
2
+
3
+ This guide explains how to set up the Alibaba Cloud Qwen provider for Janito.
4
+
5
+ ## Prerequisites
6
+
7
+ - An Alibaba Cloud account
8
+ - Access to the Alibaba Cloud Qwen model service
9
+ - API key for authentication
10
+
11
+ ## Getting Your API Key
12
+
13
+ 1. Log in to your [Alibaba Cloud account](https://account.alibabacloud.com)
14
+ 2. Navigate to the **Qwen Model Service** in the console
15
+ 3. Go to **API Keys** or **Security Settings**
16
+ 4. Create a new API key or use an existing one
17
+ 5. Copy the API key value
18
+
19
+ ## Setting Up the API Key
20
+
21
+ You can set your API key using the Janito CLI:
22
+
23
+ ```bash
24
+ janito --set-api-key alibaba:your-api-key-here
25
+ ```
26
+
27
+ Alternatively, you can set the environment variable:
28
+
29
+ ```bash
30
+ export ALIBABA_API_KEY=your-api-key-here
31
+ ```
32
+
33
+ ## Configuration
34
+
35
+ The Alibaba provider uses the following environment variable:
36
+
37
+ - `ALIBABA_API_KEY`: Your Alibaba Cloud API key
38
+
39
+ ## Available Models
40
+
41
+ The Alibaba provider supports the following models:
42
+
43
+ - `qwen-turbo`: Fast, lightweight model for simple tasks
44
+ - `qwen-plus`: Balanced performance and capability
45
+ - `qwen-max`: Most capable model for complex tasks
46
+ - `qwen3-coder-plus`: Coding-focused model with 128k context
47
+ - `qwen3-coder-480b-a35b-instruct`: Advanced coding model
48
+ - `qwen3-235b-a22b-thinking-2507`: 1M context thinking model
49
+ - `qwen3-235b-a22b-instruct-2507`: 1M context instruct model
50
+ - `qwen3-30b-a3b-thinking-2507`: 1M context thinking model
51
+ - `qwen3-30b-a3b-instruct-2507`: 1M context instruct model
52
+
53
+ ## Default Model
54
+
55
+ The default model is `qwen3-235b-a22b-instruct-2507`, which provides 129k context and is suitable for general-purpose tasks.
56
+
57
+ ## Troubleshooting
58
+
59
+ **Q: I'm getting authentication errors**
60
+ A: Verify your API key is correct and has the necessary permissions in the Alibaba Cloud console.
61
+
62
+ **Q: The model is not responding**
63
+ A: Check your internet connection and verify the Alibaba Cloud Qwen service is available in your region.
64
+
65
+ **Q: I want to use a different model**
66
+ A: Use the `--model` flag when running Janito:
67
+
68
+ ```bash
69
+ janito --provider alibaba --model qwen-max
70
+ ```
@@ -0,0 +1,53 @@
1
+ # Janito Documentation
2
+
3
+ Welcome to the Janito documentation! This site contains comprehensive guides, tutorials, and reference materials for using and extending Janito.
4
+
5
+ ## What is Janito?
6
+
7
+ Janito is a powerful AI assistant designed for developers, providing intelligent code assistance, terminal integration, and extensible tooling capabilities.
8
+
9
+ ## Quick Start
10
+
11
+ - [**Installation Guide**](guides/installation.md) - Get Janito up and running
12
+ - [**Quickstart & Basic Usage**](guides/using.md) - Learn the basics
13
+ - [**Configuration**](guides/configuration.md) - Set up Janito for your needs
14
+
15
+ ## Key Features
16
+
17
+ - **Terminal Integration**: Seamless shell integration with intelligent command assistance
18
+ - **Code Intelligence**: Advanced code analysis and generation capabilities
19
+ - **Extensible Tools**: Custom tool development and integration
20
+ - **Multi-Provider Support**: Works with OpenAI, DeepSeek, MoonshotAI, and more
21
+ - **Human-Guided AI**: Collaborative AI that works with you, not instead of you
22
+
23
+ ## Documentation Sections
24
+
25
+ ### Using Janito
26
+ Learn how to use Janito effectively:
27
+ - [Terminal Shell](guides/terminal-shell.md) - Interactive terminal sessions
28
+ - [Single-Shot Commands](guides/single-shot-terminal.md) - One-off command execution
29
+ - [Profiles](guides/profiles.md) - Custom configurations for different workflows
30
+
31
+ ### Development & Extension
32
+ For developers looking to extend Janito:
33
+ - [Developer Guide](guides/developing.md) - Core development concepts
34
+ - [Tools Developer Guide](guides/tools-developer-guide.md) - Creating custom tools
35
+ - [Developer Toolchain](meta/developer-toolchain.md) - Development setup and workflows
36
+
37
+ ### Supported Providers
38
+ Janito supports multiple AI providers:
39
+ - [OpenAI](openai-setup.md)
40
+ - [DeepSeek](deepseek-setup.md)
41
+ - [MoonshotAI](moonshotai-setup.md)
42
+ - [Z.ai](z-ai-setup.md)
43
+ - [Cerebras](cerebras-setup.md)
44
+
45
+ ## Getting Help
46
+
47
+ - Check our [troubleshooting guides](guides/configuration.md)
48
+ - Review [common issues](guides/using.md)
49
+ - Explore [alternative solutions](alternatives.md)
50
+
51
+ ---
52
+
53
+ *This documentation is automatically deployed from the latest commit and will always reflect the most current version of Janito.*
@@ -0,0 +1,6 @@
1
+ <div class="md-copyright" style="text-align: center; width: 100%;">
2
+ <div class="md-copyright__highlight" style="display: inline-block;">
3
+ Generated by Janito •
4
+ <span style="color: var(--md-accent-fg-color);">{{ config.extra.commit_hash or 'unknown' }}</span>
5
+ </div>
6
+ </div>
@@ -0,0 +1,94 @@
1
+ # Supported Providers and Models
2
+
3
+ This page lists the supported providers and their available models, organized by openness and sorted alphabetically within each category.
4
+
5
+ ## Open-Source / Open-Weight Models
6
+
7
+ ### Alibaba
8
+
9
+ - **Qwen3 235B A22B Instruct** (default) - Latest 1M context model
10
+ - **Qwen3 235B A22B Thinking** - Reasoning-focused version
11
+ - **Qwen3 30B A3B Instruct** - Compact 1M context model
12
+ - **Qwen3 30B A3B Thinking** - Compact reasoning version
13
+ - **Qwen3 Coder Plus** - Specialized for programming tasks
14
+ - **Qwen3 Coder 480B** - Large-scale coding model
15
+ - **Qwen Turbo** - High-speed general purpose
16
+ - **Qwen Plus** - Balanced performance
17
+ - **Qwen Max** - Maximum capability
18
+
19
+ ### Cerebras
20
+
21
+ **Production Models:**
22
+
23
+ - **Qwen-3 32B** - General instruction following
24
+
25
+ **Preview Models:**
26
+
27
+ - **Qwen-3 Coder 480B** - Programming-focused with 32k context
28
+ - **Qwen-3 235B A22B Instruct** - Large-scale instruction model
29
+ - **Qwen-3 235B A22B Thinking** - Reasoning-focused version
30
+ - **GPT-OSS 120B** - Open-source model
31
+
32
+ **Notes:**
33
+
34
+ - All Cerebras models support 128k context window
35
+ - Models are optimized for low-latency inference
36
+ - Pricing varies by model size and capability
37
+
38
+ ### DeepSeek
39
+
40
+ - **DeepSeek Chat** (default) - General purpose chat model
41
+ - **DeepSeek Reasoner** - Specialized for complex reasoning tasks
42
+
43
+ ### MoonshotAI
44
+
45
+ - **Kimi K2 Turbo Preview** (default) - Latest generation with enhanced performance
46
+ - **Kimi K2 0711 Preview** - Previous preview version
47
+
48
+ MoonshotAI provides open-source Kimi models with competitive performance.
49
+
50
+ ### Z.AI
51
+
52
+ - **GLM-4.5** (default) - Advanced reasoning and conversation
53
+ - **GLM-4.5 Air** - Compact and efficient version
54
+
55
+ ## Proprietary Models
56
+
57
+ ### Anthropic
58
+
59
+ - **Claude 3.7 Sonnet** (default) - Latest Claude model with enhanced reasoning
60
+ - **Claude 4 Opus** - Most capable Claude model (preview)
61
+ - **Claude 4 Sonnet** - Balanced performance and capability (preview)
62
+ - **Claude 3.5 Sonnet** - Previous generation, still highly capable
63
+ - **Claude 3.5 Haiku** - Fast and efficient
64
+ - **Claude 3 Haiku** - Compact and cost-effective
65
+
66
+ ### Google
67
+
68
+ - **Gemini 2.5 Flash** (default) - Fast and efficient
69
+ - **Gemini 2.5 Pro** - Advanced capabilities with extended context
70
+ - **Gemini 2.5 Flash-Lite Preview** - Lightweight preview version
71
+
72
+ ### OpenAI
73
+
74
+ - **GPT-5** (default) - Latest generation with advanced reasoning
75
+ - **GPT-5 Mini** - Compact version of GPT-5
76
+ - **GPT-5 Nano** - Ultra-compact version
77
+ - **GPT-4.1** - Enhanced GPT-4 with improved capabilities
78
+ - **GPT-4.1-mini** - Balanced performance and efficiency
79
+ - **GPT-4.1-nano** - Lightweight version
80
+ - **GPT-4 Turbo** - High-performance GPT-4 variant
81
+ - **GPT-4o** - Multimodal GPT-4 optimized for chat
82
+ - **GPT-4o-mini** - Compact multimodal version
83
+ - **o3** - Advanced reasoning model
84
+ - **o3-mini** - Compact reasoning model
85
+ - **o4-mini** - Latest mini reasoning model
86
+ - **GPT-3.5 Turbo** - Cost-effective general purpose
87
+
88
+ For setup instructions, see the [OpenAI Setup Guide](openai-setup.md).
89
+
90
+ ### Azure OpenAI
91
+
92
+ - **Azure OpenAI Deployment** - Custom Azure OpenAI deployments
93
+
94
+ For setup instructions, see [Using Azure OpenAI with Janito](reference/azure-openai.md).
@@ -27,9 +27,23 @@ def handle_list_models(args, provider_instance):
27
27
  if models and isinstance(models[0], dict):
28
28
  _print_models_table(models, provider_name)
29
29
  else:
30
- print(f"Supported models for provider '{provider_name}':")
30
+ # Fallback for simple string model lists
31
+ from rich.table import Table
32
+ from janito.cli.console import shared_console
33
+
34
+ table = Table(title=f"Supported models for provider '{provider_name}'")
35
+ table.add_column("Model Name", style="cyan")
36
+
31
37
  for m in models:
32
- print(f"- {m}")
38
+ table.add_row(str(m))
39
+
40
+ import sys
41
+ if sys.stdout.isatty():
42
+ shared_console.print(table)
43
+ else:
44
+ print(f"Supported models for provider '{provider_name}':")
45
+ for m in models:
46
+ print(f"- {m}")
33
47
  except Exception as e:
34
48
  print(f"Error listing models for provider '{provider_name}': {e}")
35
49
  return
@@ -0,0 +1,15 @@
1
+ """
2
+ CLI Command: List supported LLM providers
3
+ """
4
+
5
+ from janito.provider_registry import list_providers
6
+ from janito.cli.cli_commands.ping_providers import handle_ping_providers
7
+
8
+
9
+ def handle_list_providers(args=None):
10
+ # Check if ping flag is set
11
+ if args and getattr(args, 'ping', False):
12
+ handle_ping_providers(args)
13
+ else:
14
+ list_providers()
15
+ return
@@ -0,0 +1,117 @@
1
+ """
2
+ Utilities for model-related CLI output
3
+ """
4
+
5
+
6
+ def _print_models_table(models, provider_name):
7
+ from rich.table import Table
8
+ from janito.cli.console import shared_console
9
+
10
+ table = Table(title=f"Supported models for provider '{provider_name}'")
11
+ table.add_column("Model Name", style="cyan")
12
+ table.add_column("Vendor", style="yellow", justify="center")
13
+ table.add_column("Context", style="magenta", justify="center")
14
+ table.add_column("Max Input", style="green", justify="center")
15
+ table.add_column("CoT", style="blue", justify="center")
16
+ table.add_column("Max Response", style="red", justify="center")
17
+ table.add_column("Thinking", style="bright_black", justify="center")
18
+ table.add_column("Driver", style="white")
19
+
20
+ # Get default model for this provider
21
+ from janito.providers.registry import LLMProviderRegistry
22
+ try:
23
+ provider_class = LLMProviderRegistry.get(provider_name)
24
+ default_model = getattr(provider_class, "DEFAULT_MODEL", None)
25
+ except:
26
+ default_model = None
27
+
28
+ for m in models:
29
+ name = str(m.get("name", ""))
30
+
31
+ # Highlight default model with different color
32
+ if name == default_model:
33
+ name = f"[bold green]⭐ {name}[/bold green]"
34
+
35
+ vendor = "Open" if m.get("open") is True or m.get("open") == "Open" else "Locked"
36
+
37
+ context = _format_context(m.get("context", ""))
38
+ max_input = _format_k(m.get("max_input", ""))
39
+ max_cot = _format_k(m.get("max_cot", ""))
40
+ max_response = _format_k(m.get("max_response", ""))
41
+
42
+ # Determine thinking indicators
43
+ thinking_supported = m.get("thinking_supported") is True or m.get("thinking_supported") == "True"
44
+ cot_value = m.get("max_cot", "")
45
+
46
+ thinking_icon = "📖" if thinking_supported and m.get("thinking", False) else ""
47
+ # Only show CoT value if it's a valid number and thinking is supported
48
+ cot_display = ""
49
+ if thinking_supported and cot_value and str(cot_value).lower() != "n/a":
50
+ cot_display = _format_k(cot_value)
51
+
52
+ driver = _format_driver(m.get("driver", ""))
53
+
54
+ table.add_row(name, vendor, context, max_input, cot_display, max_response, thinking_icon, driver)
55
+
56
+ import sys
57
+ if sys.stdout.isatty():
58
+ shared_console.print(table)
59
+ else:
60
+ # ASCII-friendly fallback table when output is redirected
61
+ print(f"Supported models for provider '{provider_name}'")
62
+ print("Model Name | Vendor | Context | Max Input | CoT | Max Response | Thinking | Driver")
63
+
64
+ # Get default model for fallback
65
+ from janito.providers.registry import LLMProviderRegistry
66
+ try:
67
+ provider_class = LLMProviderRegistry.get(provider_name)
68
+ default_model = getattr(provider_class, "DEFAULT_MODEL", None)
69
+ except:
70
+ default_model = None
71
+
72
+ for m in models:
73
+ name = str(m.get("name", ""))
74
+ if name == default_model:
75
+ name = f"⭐ {name} (default)"
76
+
77
+ vendor = "Open" if m.get("open") is True or m.get("open") == "Open" else "Locked"
78
+ context = _format_context(m.get("context", ""))
79
+ max_input = _format_k(m.get("max_input", ""))
80
+ max_cot = _format_k(m.get("max_cot", ""))
81
+ max_response = _format_k(m.get("max_response", ""))
82
+ thinking_supported = m.get("thinking_supported") is True or m.get("thinking_supported") == "True"
83
+ cot_value = m.get("max_cot", "")
84
+
85
+ thinking = "Y" if thinking_supported and m.get("thinking", False) else ""
86
+ cot_display = ""
87
+ if thinking_supported and cot_value and str(cot_value).lower() != "n/a":
88
+ cot_display = _format_k(cot_value)
89
+
90
+ driver = _format_driver(m.get("driver", ""))
91
+ print(f"{name} | {vendor} | {context} | {max_input} | {cot_display} | {max_response} | {thinking} | {driver}")
92
+
93
+
94
+ def _format_k(val):
95
+ """Format numeric values with k suffix for thousands."""
96
+ try:
97
+ n = int(val)
98
+ if n >= 1000:
99
+ return f"{n // 1000}k"
100
+ return str(n)
101
+ except Exception:
102
+ return str(val)
103
+
104
+
105
+ def _format_context(val):
106
+ """Format context field which might be a single value or range."""
107
+ if isinstance(val, (list, tuple)) and len(val) == 2:
108
+ return f"{_format_k(val[0])} / {_format_k(val[1])}"
109
+ return _format_k(val)
110
+
111
+
112
+ def _format_driver(val):
113
+ """Format driver name by removing ModelDriver suffix."""
114
+ if isinstance(val, (list, tuple)):
115
+ return ", ".join(val)
116
+ val_str = str(val)
117
+ return val_str.removesuffix("ModelDriver").strip()
@@ -0,0 +1,55 @@
1
+ from janito.provider_registry import list_providers
2
+ from janito.providers.registry import LLMProviderRegistry
3
+ from janito.cli.console import shared_console
4
+ from rich.table import Table
5
+ from rich.progress import Progress, SpinnerColumn, TextColumn
6
+ import asyncio
7
+ import time
8
+
9
+
10
+ def handle_ping_providers(args):
11
+ """Ping/test connectivity for all providers."""
12
+ try:
13
+ # Get all providers
14
+ providers = list_providers()
15
+
16
+ # Create table for results
17
+ table = Table(title="Provider Connectivity Test")
18
+ table.add_column("Provider", style="cyan")
19
+ table.add_column("Status", style="magenta")
20
+ table.add_column("Time", style="green")
21
+ table.add_column("Details", style="yellow")
22
+
23
+ # Test each provider
24
+ for provider_name in providers:
25
+ start_time = time.time()
26
+ try:
27
+ # Get provider class
28
+ provider_class = LLMProviderRegistry.get(provider_name)
29
+ provider = provider_class()
30
+
31
+ # Test the provider (simplified - just check if we can instantiate and get models)
32
+ models = provider.get_models()
33
+ if models:
34
+ status = "✓ Connected"
35
+ details = f"{len(models)} models available"
36
+ else:
37
+ status = "⚠ No models"
38
+ details = "Provider reachable but no models returned"
39
+
40
+ except Exception as e:
41
+ status = "✗ Failed"
42
+ details = str(e)
43
+
44
+ end_time = time.time()
45
+ elapsed = f"{(end_time - start_time)*1000:.0f}ms"
46
+
47
+ table.add_row(provider_name, status, elapsed, details)
48
+
49
+ # Print results
50
+ shared_console.print(table)
51
+
52
+ except Exception as e:
53
+ print(f"Error testing provider connectivity: {e}")
54
+
55
+ return
@@ -124,6 +124,10 @@ definition = [
124
124
  ["--list-providers"],
125
125
  {"action": "store_true", "help": "List supported LLM providers"},
126
126
  ),
127
+ (
128
+ ["--ping"],
129
+ {"action": "store_true", "help": "Ping/test connectivity for all providers (use with --list-providers)"},
130
+ ),
127
131
  (
128
132
  ["--list-drivers"],
129
133
  {
@@ -238,6 +242,19 @@ GETTER_KEYS = [
238
242
  "list_drivers",
239
243
  "region_info",
240
244
  "list_providers_region",
245
+ "ping",
246
+ ]
247
+ GETTER_KEYS = [
248
+ "show_config",
249
+ "list_providers",
250
+ "list_profiles",
251
+ "list_models",
252
+ "list_tools",
253
+ "list_config",
254
+ "list_drivers",
255
+ "region_info",
256
+ "list_providers_region",
257
+ "ping",
241
258
  ]
242
259
 
243
260
 
@@ -361,6 +378,7 @@ class JanitoCLI:
361
378
  or self.args.show_config
362
379
  or self.args.list_config
363
380
  or self.args.list_drivers
381
+ or self.args.ping
364
382
  ):
365
383
  self._maybe_print_verbose_provider_model()
366
384
  handle_getter(self.args)
@@ -0,0 +1,46 @@
1
+ # pragma: allowlist secret
2
+ translations = {
3
+ "36107ed78ab25f6fb12ad8ce13018cd1ce6735d1": "Avvio del server web...",
4
+ "70a0d194687568a47aa617fd85036ace1e69a982": "Vuoi davvero uscire? (s/n): ",
5
+ "5c9ebcbbd7632ecb328bd52958b17158afaa32c6": "F12 = Azione Rapida (segue l'azione raccomandata)",
6
+ "fe21121e2934234b68d19b2757532117d440c1e3": "Chiave API non trovata. Si prega di configurare 'api_key' nel file di configurazione.",
7
+ "c9e3759b1756eba35b381ce2b72cd659e132b01f": "Ciao, {name}!",
8
+ "ca1fee2f55baabdc2e4b0e9529c89ee024e62079": "Nessun prompt fornito nei messaggi",
9
+ "f7449d23d0c500ae2a0b31e04f92b47a4d8ae845": "max_tokens deve essere un intero, ricevuto: {resolved_max_tokens!r}",
10
+ "70a9ed8edb6da12e208431a31aa16ba54419b26f": "Risposta non valida/malformed da OpenAI (tentativo {attempt}/{max_retries}). Riprovo tra {wait_time} secondi...",
11
+ "a873085e3b06184fb5d27e842f97b06b6190976d": "Numero massimo di tentativi per risposta non valida raggiunto. Generazione errore.",
12
+ "66a34568bbe846bb1bde3619eb4d6dfa10211104": "L'API non supporta l'uso degli strumenti.",
13
+ "09b81476b75586da4116b83f8be70d77b174cec3": "Limite di richieste API OpenAI (429) (tentativo {attempt}/{max_retries}): {e}. Riprovo tra {wait_time} secondi...",
14
+ "5717a35dd2a1533fb7e15edc8c9329cb69f3410b": "Errore server API OpenAI (tentativo {attempt}/{max_retries}): {e}. Riprovo tra {wait_time} secondi...",
15
+ "02e760ba15ed863176c1290ac8a9b923963103cd": "Errore client API OpenAI {status_code}: {e}. Nessun nuovo tentativo.",
16
+ "2e52b0bbc8f16226b70e3e20f95c9245d2bcdb47": "Errore API OpenAI (tentativo {attempt}/{max_retries}): {e}. Riprovo tra {wait_time} secondi...",
17
+ "012cc970e039fdd79c452fc676202c814ffc76ae": "Numero massimo di tentativi per errore API OpenAI raggiunto. Generazione errore.",
18
+ "d0438e45667d31e0022b2497b5901cd4300f084b": "QueuedMessageHandler.handle_message si aspetta un dizionario con 'type' e 'message', ricevuto {msg_type}: {msg!r}",
19
+ "9d3460187ffa19c7c8a4020157072b1087e1bd2f": "[QueuedMessageHandler] {msg_type}: {msg}",
20
+ "3813833343430e8afa8fce33385c5e39fb24dd60": "[QueuedMessageHandler] {msg_type}: {message}",
21
+ "0be9a22226e16a40797010d23a0f581542dca40e": "[ToolExecutor] {tool_name} chiamato con argomenti: {args}",
22
+ "42c68edcb25442f518b1af77c6a2ddc07461aae0": "[ToolExecutor] Motivo chiamata: {tool_call_reason}",
23
+ "002ff598115d84595ffeee6219cb5c03d3a1d4a6": "Domanda",
24
+ "35747d13dcd91e8e8790c7f767d5ed764f541b9e": "procedi",
25
+ "33dde3a1afbc418768a69fa53168d9b0638fe1aa": "avanti",
26
+ "eee0bbba4ff92adbeb038a77df0466d660f15716": "continua",
27
+ "edee9402d198b04ac77dcf5dc9cc3dac44573782": "prossimo",
28
+ "8fdb7e2fa84f4faf0d9b92f466df424ec47a165b": "ok",
29
+ "5f8f924671cda79b5205a6bf1b776f347c4a7a07": "Opzioni di configurazione disponibili:\n",
30
+ "cef780a309cd234750764d42697882c24168ddab": "{key:15} {desc} (predefinito: {default})",
31
+ "68c2cc7f0ceaa3e499ecb4db331feb4debbbcc23": "Modello",
32
+ "c3f104d1365744b538bfde9f4adb6a6df4b80355": "Funzione",
33
+ "99a0efc6cfd85d8ff2732a6718140f822cb90472": "Stile",
34
+ "f1702b4686278becffc88baabe6f4b7a8355532c": "Messaggi",
35
+ "c38c6c1f3a2743f8626703abb302e403d20ff81c": "Token",
36
+ "a817d7eb8e0f1dab755ab5203a082e5c3c094fce": "Prompt",
37
+ "2ff255684a2277f806fcebf3fe338ed27857f350": "Completamento",
38
+ "b25928c69902557b0ef0a628490a3a1768d7b82f": "Totale",
39
+ "76e63d65c883ed50df40ac3aeef0c2d6a1c4ad60": "Azione Rapida",
40
+ "5397e0583f14f6c88de06b1ef28f460a1fb5b0ae": "Sì",
41
+ "816c52fd2bdd94a63cd0944823a6c0aa9384c103": "No",
42
+ "c47ae15370cfe1ed2781eedc1dc2547d12d9e972": "Aiuto",
43
+ "cc3dbd47e1cf9003a55d3366b3adbcd72275e525": "Nuovo Task",
44
+ "efa5a8b84e1afe65c81ecfce28c398c48f19ddc2": "Benvenuto su Janito{version_str}! Modalità chat attiva. Digita /exit per uscire.",
45
+ "b314d6e1460f86e0f21abc5aceb7935a2a0667e8": "Benvenuto su Janito{version_str} in modalità [white on magenta]VANILLA[/white on magenta]! Strumenti, prompt di sistema e temperatura sono disattivati, a meno che non siano sovrascritti.",
46
+ }
@@ -10,6 +10,7 @@ class LLMModelInfo:
10
10
  max_cot: Any = "N/A"
11
11
  max_response: Any = "N/A"
12
12
  thinking_supported: Any = "N/A"
13
+ thinking: bool = False
13
14
  default_temp: float = 0.2
14
15
  open: Optional[Any] = None
15
16
  category: Optional[str] = None
@@ -39,7 +39,17 @@ class ProviderRegistry:
39
39
  if len(info) == 4 and info[3]:
40
40
  continue # skip providers flagged as not implemented
41
41
  rows.append(info[:3])
42
- rows.sort(key=self._maintainer_sort_key)
42
+
43
+ # Group providers by openness (open-source first, then proprietary)
44
+ open_providers = {'cerebras', 'deepseek', 'alibaba', 'moonshotai', 'zai'}
45
+
46
+ def sort_key(row):
47
+ provider_name = row[0]
48
+ is_open = provider_name in open_providers
49
+ # Sort open providers alphabetically first, then proprietary alphabetically
50
+ return (not is_open, provider_name)
51
+
52
+ rows.sort(key=sort_key)
43
53
  return rows
44
54
 
45
55
  def _add_rows_to_table(self, table, rows):