janito 2.17.1__tar.gz → 2.19.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 (327) hide show
  1. {janito-2.17.1 → janito-2.19.0}/CHANGELOG.md +27 -1
  2. {janito-2.17.1 → janito-2.19.0}/PKG-INFO +1 -1
  3. janito-2.19.0/docs/alibaba-setup.md +70 -0
  4. {janito-2.17.1 → janito-2.19.0}/docs/cerebras-setup.md +17 -0
  5. janito-2.19.0/docs/openai-setup.md +85 -0
  6. {janito-2.17.1 → janito-2.19.0}/docs/supported-providers-models.md +13 -1
  7. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/session.py +32 -14
  8. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_models.py +16 -2
  9. janito-2.19.0/janito/cli/cli_commands/list_providers.py +15 -0
  10. janito-2.19.0/janito/cli/cli_commands/model_utils.py +117 -0
  11. janito-2.19.0/janito/cli/cli_commands/ping_providers.py +55 -0
  12. {janito-2.17.1 → janito-2.19.0}/janito/cli/main_cli.py +18 -0
  13. {janito-2.17.1 → janito-2.19.0}/janito/llm/model.py +1 -0
  14. janito-2.19.0/janito/providers/alibaba/model_info.py +97 -0
  15. {janito-2.17.1 → janito-2.19.0}/janito/providers/alibaba/provider.py +1 -1
  16. {janito-2.17.1 → janito-2.19.0}/janito/providers/openai/model_info.py +33 -0
  17. {janito-2.17.1 → janito-2.19.0}/janito/providers/openai/provider.py +1 -1
  18. {janito-2.17.1 → janito-2.19.0}/janito.egg-info/PKG-INFO +1 -1
  19. {janito-2.17.1 → janito-2.19.0}/janito.egg-info/SOURCES.txt +3 -0
  20. {janito-2.17.1 → janito-2.19.0}/mkdocs.yml +3 -1
  21. janito-2.17.1/janito/cli/cli_commands/list_providers.py +0 -10
  22. janito-2.17.1/janito/cli/cli_commands/model_utils.py +0 -97
  23. janito-2.17.1/janito/providers/alibaba/model_info.py +0 -40
  24. {janito-2.17.1 → janito-2.19.0}/.codespellrc +0 -0
  25. {janito-2.17.1 → janito-2.19.0}/.gitattributes +0 -0
  26. {janito-2.17.1 → janito-2.19.0}/.github/workflows/python-app.yml.disabled +0 -0
  27. {janito-2.17.1 → janito-2.19.0}/.gitignore +0 -0
  28. {janito-2.17.1 → janito-2.19.0}/.pre-commit-config.yaml +0 -0
  29. {janito-2.17.1 → janito-2.19.0}/.secrets.baseline +0 -0
  30. {janito-2.17.1 → janito-2.19.0}/.vscode/settings.json +0 -0
  31. {janito-2.17.1 → janito-2.19.0}/CHANGELOG_2.16.0.md +0 -0
  32. {janito-2.17.1 → janito-2.19.0}/LICENSE +0 -0
  33. {janito-2.17.1 → janito-2.19.0}/README-dev.md +0 -0
  34. {janito-2.17.1 → janito-2.19.0}/README.md +0 -0
  35. {janito-2.17.1 → janito-2.19.0}/UPDATING_DOCS.md +0 -0
  36. {janito-2.17.1 → janito-2.19.0}/adding_mcp.txt +0 -0
  37. {janito-2.17.1 → janito-2.19.0}/docs/DIV.md +0 -0
  38. {janito-2.17.1 → janito-2.19.0}/docs/Interfaces.txt +0 -0
  39. {janito-2.17.1 → janito-2.19.0}/docs/TOOLBAR-STYLING.md +0 -0
  40. {janito-2.17.1 → janito-2.19.0}/docs/about/costs.md +0 -0
  41. {janito-2.17.1 → janito-2.19.0}/docs/about/vs-webchats.md +0 -0
  42. {janito-2.17.1 → janito-2.19.0}/docs/about/why.md +0 -0
  43. {janito-2.17.1 → janito-2.19.0}/docs/alternatives.md +0 -0
  44. {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  45. {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  46. {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  47. {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/our-approach.md +0 -0
  48. {janito-2.17.1 → janito-2.19.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  49. {janito-2.17.1 → janito-2.19.0}/docs/concepts/analysis-style.md +0 -0
  50. {janito-2.17.1 → janito-2.19.0}/docs/concepts/human-guided-ai.md +0 -0
  51. {janito-2.17.1 → janito-2.19.0}/docs/concepts/index.md +0 -0
  52. {janito-2.17.1 → janito-2.19.0}/docs/concepts/language-model-clients.md +0 -0
  53. {janito-2.17.1 → janito-2.19.0}/docs/concepts/prompt-design-style.md +0 -0
  54. {janito-2.17.1 → janito-2.19.0}/docs/deepseek-setup.md +0 -0
  55. {janito-2.17.1 → janito-2.19.0}/docs/driver-flow.md +0 -0
  56. {janito-2.17.1 → janito-2.19.0}/docs/driver-request-cancellation.md +0 -0
  57. {janito-2.17.1 → janito-2.19.0}/docs/drivers/events.md +0 -0
  58. {janito-2.17.1 → janito-2.19.0}/docs/drivers.md +0 -0
  59. {janito-2.17.1 → janito-2.19.0}/docs/event-bus.md +0 -0
  60. {janito-2.17.1 → janito-2.19.0}/docs/guides/configuration.md +0 -0
  61. {janito-2.17.1 → janito-2.19.0}/docs/guides/developing.md +0 -0
  62. {janito-2.17.1 → janito-2.19.0}/docs/guides/disabled-tools.md +0 -0
  63. {janito-2.17.1 → janito-2.19.0}/docs/guides/installation.md +0 -0
  64. {janito-2.17.1 → janito-2.19.0}/docs/guides/profiles.md +0 -0
  65. {janito-2.17.1 → janito-2.19.0}/docs/guides/prompting/README.md +0 -0
  66. {janito-2.17.1 → janito-2.19.0}/docs/guides/single-shot-terminal.md +0 -0
  67. {janito-2.17.1 → janito-2.19.0}/docs/guides/terminal-shell.md +0 -0
  68. {janito-2.17.1 → janito-2.19.0}/docs/guides/tools-developer-guide.md +0 -0
  69. {janito-2.17.1 → janito-2.19.0}/docs/guides/using.md +0 -0
  70. {janito-2.17.1 → janito-2.19.0}/docs/guides/using_tools.md +0 -0
  71. {janito-2.17.1 → janito-2.19.0}/docs/imgs/code-generation-observability.png +0 -0
  72. {janito-2.17.1 → janito-2.19.0}/docs/imgs/code_generation_observability.png +0 -0
  73. {janito-2.17.1 → janito-2.19.0}/docs/imgs/happy-programmer.png +0 -0
  74. {janito-2.17.1 → janito-2.19.0}/docs/imgs/happy-programmer.svg +0 -0
  75. {janito-2.17.1 → janito-2.19.0}/docs/imgs/terminal-one-shot.png +0 -0
  76. {janito-2.17.1 → janito-2.19.0}/docs/imgs/terminal-shell.png +0 -0
  77. {janito-2.17.1 → janito-2.19.0}/docs/imgs/terminal_one_shot.png +0 -0
  78. {janito-2.17.1 → janito-2.19.0}/docs/imgs/terminal_shell.png +0 -0
  79. {janito-2.17.1 → janito-2.19.0}/docs/llm-drivers-required-config.md +0 -0
  80. {janito-2.17.1 → janito-2.19.0}/docs/llm-drivers.md +0 -0
  81. {janito-2.17.1 → janito-2.19.0}/docs/meta/developer-toolchain.md +0 -0
  82. {janito-2.17.1 → janito-2.19.0}/docs/meta/quality-checks.txt +0 -0
  83. {janito-2.17.1 → janito-2.19.0}/docs/moonshotai-setup.md +0 -0
  84. {janito-2.17.1 → janito-2.19.0}/docs/reference/api.md +0 -0
  85. {janito-2.17.1 → janito-2.19.0}/docs/reference/azure-openai.md +0 -0
  86. {janito-2.17.1 → janito-2.19.0}/docs/reference/cli-options.md +0 -0
  87. {janito-2.17.1 → janito-2.19.0}/docs/reference/message-handler-model.md +0 -0
  88. {janito-2.17.1 → janito-2.19.0}/docs/reference/rich-message-handler.md +0 -0
  89. {janito-2.17.1 → janito-2.19.0}/docs/security.md +0 -0
  90. {janito-2.17.1 → janito-2.19.0}/docs/tools/search-text.md +0 -0
  91. {janito-2.17.1 → janito-2.19.0}/docs/tools-index.md +0 -0
  92. {janito-2.17.1 → janito-2.19.0}/docs/tools-natural-results.md +0 -0
  93. {janito-2.17.1 → janito-2.19.0}/docs/tools-precision.md +0 -0
  94. {janito-2.17.1 → janito-2.19.0}/docs/z-ai-setup.md +0 -0
  95. {janito-2.17.1 → janito-2.19.0}/git_diff.txt +0 -0
  96. {janito-2.17.1 → janito-2.19.0}/github_diff +0 -0
  97. {janito-2.17.1 → janito-2.19.0}/janito/README.md +0 -0
  98. {janito-2.17.1 → janito-2.19.0}/janito/__init__.py +0 -0
  99. {janito-2.17.1 → janito-2.19.0}/janito/__main__.py +0 -0
  100. {janito-2.17.1 → janito-2.19.0}/janito/_version.py +0 -0
  101. {janito-2.17.1 → janito-2.19.0}/janito/agent/setup_agent.py +0 -0
  102. {janito-2.17.1 → janito-2.19.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  103. {janito-2.17.1 → janito-2.19.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  104. {janito-2.17.1 → janito-2.19.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  105. {janito-2.17.1 → janito-2.19.0}/janito/cli/__init__.py +0 -0
  106. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/bindings.py +0 -0
  107. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  108. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  109. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/script_runner.py +0 -0
  110. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
  111. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  112. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  113. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  114. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  115. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  116. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  117. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  118. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  119. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  120. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  121. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  122. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  123. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  124. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  125. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  126. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  127. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  128. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  129. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  130. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  131. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  132. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  133. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  134. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  135. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  136. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  137. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  138. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  139. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  140. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  141. {janito-2.17.1 → janito-2.19.0}/janito/cli/chat_mode/toolbar.py +0 -0
  142. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_config.py +0 -0
  143. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  144. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  145. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  146. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/list_tools.py +0 -0
  147. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/model_selection.py +0 -0
  148. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  149. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/show_config.py +0 -0
  150. {janito-2.17.1 → janito-2.19.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  151. {janito-2.17.1 → janito-2.19.0}/janito/cli/config.py +0 -0
  152. {janito-2.17.1 → janito-2.19.0}/janito/cli/console.py +0 -0
  153. {janito-2.17.1 → janito-2.19.0}/janito/cli/core/__init__.py +0 -0
  154. {janito-2.17.1 → janito-2.19.0}/janito/cli/core/event_logger.py +0 -0
  155. {janito-2.17.1 → janito-2.19.0}/janito/cli/core/getters.py +0 -0
  156. {janito-2.17.1 → janito-2.19.0}/janito/cli/core/model_guesser.py +0 -0
  157. {janito-2.17.1 → janito-2.19.0}/janito/cli/core/runner.py +0 -0
  158. {janito-2.17.1 → janito-2.19.0}/janito/cli/core/setters.py +0 -0
  159. {janito-2.17.1 → janito-2.19.0}/janito/cli/core/unsetters.py +0 -0
  160. {janito-2.17.1 → janito-2.19.0}/janito/cli/main.py +0 -0
  161. {janito-2.17.1 → janito-2.19.0}/janito/cli/prompt_core.py +0 -0
  162. {janito-2.17.1 → janito-2.19.0}/janito/cli/prompt_handler.py +0 -0
  163. {janito-2.17.1 → janito-2.19.0}/janito/cli/prompt_setup.py +0 -0
  164. {janito-2.17.1 → janito-2.19.0}/janito/cli/rich_terminal_reporter.py +0 -0
  165. {janito-2.17.1 → janito-2.19.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  166. {janito-2.17.1 → janito-2.19.0}/janito/cli/single_shot_mode/handler.py +0 -0
  167. {janito-2.17.1 → janito-2.19.0}/janito/cli/utils.py +0 -0
  168. {janito-2.17.1 → janito-2.19.0}/janito/cli/verbose_output.py +0 -0
  169. {janito-2.17.1 → janito-2.19.0}/janito/config.py +0 -0
  170. {janito-2.17.1 → janito-2.19.0}/janito/config_manager.py +0 -0
  171. {janito-2.17.1 → janito-2.19.0}/janito/conversation_history.py +0 -0
  172. {janito-2.17.1 → janito-2.19.0}/janito/dir_walk_utils.py +0 -0
  173. {janito-2.17.1 → janito-2.19.0}/janito/docs/GETTING_STARTED.md +0 -0
  174. {janito-2.17.1 → janito-2.19.0}/janito/driver_events.py +0 -0
  175. {janito-2.17.1 → janito-2.19.0}/janito/drivers/azure_openai/driver.py +0 -0
  176. {janito-2.17.1 → janito-2.19.0}/janito/drivers/cerebras/__init__.py +0 -0
  177. {janito-2.17.1 → janito-2.19.0}/janito/drivers/dashscope.bak.zip +0 -0
  178. {janito-2.17.1 → janito-2.19.0}/janito/drivers/openai/README.md +0 -0
  179. {janito-2.17.1 → janito-2.19.0}/janito/drivers/openai/driver.py +0 -0
  180. {janito-2.17.1 → janito-2.19.0}/janito/drivers/openai_responses.bak.zip +0 -0
  181. {janito-2.17.1 → janito-2.19.0}/janito/drivers/zai/__init__.py +0 -0
  182. {janito-2.17.1 → janito-2.19.0}/janito/drivers/zai/driver.py +0 -0
  183. {janito-2.17.1 → janito-2.19.0}/janito/event_bus/__init__.py +0 -0
  184. {janito-2.17.1 → janito-2.19.0}/janito/event_bus/bus.py +0 -0
  185. {janito-2.17.1 → janito-2.19.0}/janito/event_bus/event.py +0 -0
  186. {janito-2.17.1 → janito-2.19.0}/janito/event_bus/handler.py +0 -0
  187. {janito-2.17.1 → janito-2.19.0}/janito/event_bus/queue_bus.py +0 -0
  188. {janito-2.17.1 → janito-2.19.0}/janito/exceptions.py +0 -0
  189. {janito-2.17.1 → janito-2.19.0}/janito/formatting.py +0 -0
  190. {janito-2.17.1 → janito-2.19.0}/janito/formatting_token.py +0 -0
  191. {janito-2.17.1 → janito-2.19.0}/janito/gitignore_utils.py +0 -0
  192. {janito-2.17.1 → janito-2.19.0}/janito/i18n/__init__.py +0 -0
  193. {janito-2.17.1 → janito-2.19.0}/janito/i18n/messages.py +0 -0
  194. {janito-2.17.1 → janito-2.19.0}/janito/i18n/pt.py +0 -0
  195. {janito-2.17.1 → janito-2.19.0}/janito/llm/README.md +0 -0
  196. {janito-2.17.1 → janito-2.19.0}/janito/llm/__init__.py +0 -0
  197. {janito-2.17.1 → janito-2.19.0}/janito/llm/agent.py +0 -0
  198. {janito-2.17.1 → janito-2.19.0}/janito/llm/auth.py +0 -0
  199. {janito-2.17.1 → janito-2.19.0}/janito/llm/auth_utils.py +0 -0
  200. {janito-2.17.1 → janito-2.19.0}/janito/llm/driver.py +0 -0
  201. {janito-2.17.1 → janito-2.19.0}/janito/llm/driver_config.py +0 -0
  202. {janito-2.17.1 → janito-2.19.0}/janito/llm/driver_config_builder.py +0 -0
  203. {janito-2.17.1 → janito-2.19.0}/janito/llm/driver_input.py +0 -0
  204. {janito-2.17.1 → janito-2.19.0}/janito/llm/message_parts.py +0 -0
  205. {janito-2.17.1 → janito-2.19.0}/janito/llm/provider.py +0 -0
  206. {janito-2.17.1 → janito-2.19.0}/janito/mkdocs.yml +0 -0
  207. {janito-2.17.1 → janito-2.19.0}/janito/perf_singleton.py +0 -0
  208. {janito-2.17.1 → janito-2.19.0}/janito/performance_collector.py +0 -0
  209. {janito-2.17.1 → janito-2.19.0}/janito/platform_discovery.py +0 -0
  210. {janito-2.17.1 → janito-2.19.0}/janito/provider_config.py +0 -0
  211. {janito-2.17.1 → janito-2.19.0}/janito/provider_registry.py +0 -0
  212. {janito-2.17.1 → janito-2.19.0}/janito/providers/__init__.py +0 -0
  213. {janito-2.17.1 → janito-2.19.0}/janito/providers/alibaba/__init__.py +0 -0
  214. {janito-2.17.1 → janito-2.19.0}/janito/providers/anthropic/model_info.py +0 -0
  215. {janito-2.17.1 → janito-2.19.0}/janito/providers/anthropic/provider.py +0 -0
  216. {janito-2.17.1 → janito-2.19.0}/janito/providers/azure_openai/model_info.py +0 -0
  217. {janito-2.17.1 → janito-2.19.0}/janito/providers/azure_openai/provider.py +0 -0
  218. {janito-2.17.1 → janito-2.19.0}/janito/providers/cerebras/__init__.py +0 -0
  219. {janito-2.17.1 → janito-2.19.0}/janito/providers/cerebras/model_info.py +0 -0
  220. {janito-2.17.1 → janito-2.19.0}/janito/providers/cerebras/provider.py +0 -0
  221. {janito-2.17.1 → janito-2.19.0}/janito/providers/dashscope.bak.zip +0 -0
  222. {janito-2.17.1 → janito-2.19.0}/janito/providers/deepseek/__init__.py +0 -0
  223. {janito-2.17.1 → janito-2.19.0}/janito/providers/deepseek/model_info.py +0 -0
  224. {janito-2.17.1 → janito-2.19.0}/janito/providers/deepseek/provider.py +0 -0
  225. {janito-2.17.1 → janito-2.19.0}/janito/providers/google/__init__.py +0 -0
  226. {janito-2.17.1 → janito-2.19.0}/janito/providers/google/model_info.py +0 -0
  227. {janito-2.17.1 → janito-2.19.0}/janito/providers/google/provider.py +0 -0
  228. {janito-2.17.1 → janito-2.19.0}/janito/providers/moonshotai/__init__.py +0 -0
  229. {janito-2.17.1 → janito-2.19.0}/janito/providers/moonshotai/model_info.py +0 -0
  230. {janito-2.17.1 → janito-2.19.0}/janito/providers/moonshotai/provider.py +0 -0
  231. {janito-2.17.1 → janito-2.19.0}/janito/providers/openai/__init__.py +0 -0
  232. {janito-2.17.1 → janito-2.19.0}/janito/providers/openai/schema_generator.py +0 -0
  233. {janito-2.17.1 → janito-2.19.0}/janito/providers/registry.py +0 -0
  234. {janito-2.17.1 → janito-2.19.0}/janito/providers/zai/__init__.py +0 -0
  235. {janito-2.17.1 → janito-2.19.0}/janito/providers/zai/model_info.py +0 -0
  236. {janito-2.17.1 → janito-2.19.0}/janito/providers/zai/provider.py +0 -0
  237. {janito-2.17.1 → janito-2.19.0}/janito/providers/zai/schema_generator.py +0 -0
  238. {janito-2.17.1 → janito-2.19.0}/janito/regions/__init__.py +0 -0
  239. {janito-2.17.1 → janito-2.19.0}/janito/regions/cli.py +0 -0
  240. {janito-2.17.1 → janito-2.19.0}/janito/regions/geo_utils.py +0 -0
  241. {janito-2.17.1 → janito-2.19.0}/janito/regions/provider_regions.py +0 -0
  242. {janito-2.17.1 → janito-2.19.0}/janito/report_events.py +0 -0
  243. {janito-2.17.1 → janito-2.19.0}/janito/shell.bak.zip +0 -0
  244. {janito-2.17.1 → janito-2.19.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  245. {janito-2.17.1 → janito-2.19.0}/janito/tools/README.md +0 -0
  246. {janito-2.17.1 → janito-2.19.0}/janito/tools/__init__.py +0 -0
  247. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/__init__.py +0 -0
  248. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/__init__.py +0 -0
  249. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/adapter.py +0 -0
  250. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/ask_user.py +0 -0
  251. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/copy_file.py +0 -0
  252. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/create_directory.py +0 -0
  253. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/create_file.py +0 -0
  254. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  255. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/fetch_url.py +0 -0
  256. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/find_files.py +0 -0
  257. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  258. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  259. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  260. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  261. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  262. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  263. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/move_file.py +0 -0
  264. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  265. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/open_url.py +0 -0
  266. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/python_code_run.py +0 -0
  267. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/python_command_run.py +0 -0
  268. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/python_file_run.py +0 -0
  269. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/read_files.py +0 -0
  270. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/remove_directory.py +0 -0
  271. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/remove_file.py +0 -0
  272. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  273. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
  274. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
  275. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  276. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/core.py +0 -0
  277. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  278. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  279. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  280. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  281. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  282. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  283. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  284. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  285. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  286. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  287. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  288. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  289. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  290. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  291. {janito-2.17.1 → janito-2.19.0}/janito/tools/adapters/local/view_file.py +0 -0
  292. {janito-2.17.1 → janito-2.19.0}/janito/tools/disabled_tools.py +0 -0
  293. {janito-2.17.1 → janito-2.19.0}/janito/tools/inspect_registry.py +0 -0
  294. {janito-2.17.1 → janito-2.19.0}/janito/tools/outline_file.bak.zip +0 -0
  295. {janito-2.17.1 → janito-2.19.0}/janito/tools/path_security.py +0 -0
  296. {janito-2.17.1 → janito-2.19.0}/janito/tools/permissions.py +0 -0
  297. {janito-2.17.1 → janito-2.19.0}/janito/tools/permissions_parse.py +0 -0
  298. {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_base.py +0 -0
  299. {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_events.py +0 -0
  300. {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_run_exception.py +0 -0
  301. {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_use_tracker.py +0 -0
  302. {janito-2.17.1 → janito-2.19.0}/janito/tools/tool_utils.py +0 -0
  303. {janito-2.17.1 → janito-2.19.0}/janito/tools/tools_adapter.py +0 -0
  304. {janito-2.17.1 → janito-2.19.0}/janito/tools/tools_schema.py +0 -0
  305. {janito-2.17.1 → janito-2.19.0}/janito/utils.py +0 -0
  306. {janito-2.17.1 → janito-2.19.0}/janito.egg-info/dependency_links.txt +0 -0
  307. {janito-2.17.1 → janito-2.19.0}/janito.egg-info/entry_points.txt +0 -0
  308. {janito-2.17.1 → janito-2.19.0}/janito.egg-info/requires.txt +0 -0
  309. {janito-2.17.1 → janito-2.19.0}/janito.egg-info/top_level.txt +0 -0
  310. {janito-2.17.1 → janito-2.19.0}/pyproject.toml +0 -0
  311. {janito-2.17.1 → janito-2.19.0}/pytest.ini +0 -0
  312. {janito-2.17.1 → janito-2.19.0}/requirements-dev.txt +0 -0
  313. {janito-2.17.1 → janito-2.19.0}/requirements.txt +0 -0
  314. {janito-2.17.1 → janito-2.19.0}/setup.cfg +0 -0
  315. {janito-2.17.1 → janito-2.19.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  316. {janito-2.17.1 → janito-2.19.0}/tests/adapters/local/test_read_files.py +0 -0
  317. {janito-2.17.1 → janito-2.19.0}/tests/test_cli_list_models.py +0 -0
  318. {janito-2.17.1 → janito-2.19.0}/tests/test_cli_list_providers.py +0 -0
  319. {janito-2.17.1 → janito-2.19.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  320. {janito-2.17.1 → janito-2.19.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
  321. {janito-2.17.1 → janito-2.19.0}/tests/test_cli_version.py +0 -0
  322. {janito-2.17.1 → janito-2.19.0}/tests/test_disabled_tools.py +0 -0
  323. {janito-2.17.1 → janito-2.19.0}/tests/test_provider_alibaba.py +0 -0
  324. {janito-2.17.1 → janito-2.19.0}/tests/test_provider_cerebras.py +0 -0
  325. {janito-2.17.1 → janito-2.19.0}/tests/test_provider_moonshotai.py +0 -0
  326. {janito-2.17.1 → janito-2.19.0}/tools/release.py +0 -0
  327. {janito-2.17.1 → janito-2.19.0}/tox.ini +0 -0
@@ -2,7 +2,33 @@
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
24
+
25
+ ## [2.18.0] - 2025-08-07
26
+
27
+ ### Added
28
+
29
+ - Added OpenAI GPT-5 models (gpt-5, gpt-5-mini, gpt-5-nano) and set default model to gpt-5
30
+ - Chat session: improved backend hostname detection
31
+ - Cleaned up test file
6
32
 
7
33
  ## [2.17.0] - 2025-08-05
8
34
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.17.1
3
+ Version: 2.19.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
@@ -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
+ ```
@@ -42,6 +42,23 @@ janito -p cerebras -m qwen-3-coder-480b "Explain quantum computing"
42
42
 
43
43
  Cerebras offers several models through their API:
44
44
 
45
+ **Production Models:**
46
+
47
+ - `llama-4-scout-17b-16e-instruct`
48
+ - `llama-3.3-70b`
49
+ - `llama3.1-8b`
50
+ - `qwen-3-32b`
51
+
52
+ **Preview Models:**
53
+
54
+ - `llama-4-maverick-17b-128e-instruct`
55
+ - `qwen-3-235b-a22b-instruct-2507`
56
+ - `qwen-3-235b-a22b-thinking-2507`
57
+ - `qwen-3-coder-480b`
58
+ - `gpt-oss-120b`
59
+
60
+ **Notes:**
61
+
45
62
  - `qwen-3-coder-480b`: 32k context, reasoning-focused model with function calling support
46
63
 
47
64
  ## Troubleshooting
@@ -0,0 +1,85 @@
1
+ # OpenAI Setup Guide
2
+
3
+ This guide will help you set up Janito to work with OpenAI's models.
4
+
5
+ ## Prerequisites
6
+
7
+ 1. An OpenAI account
8
+ 2. An API key from OpenAI
9
+
10
+ ## Getting an API Key
11
+
12
+ 1. Go to [OpenAI's API Keys page](https://platform.openai.com/api-keys)
13
+ 2. Sign in to your OpenAI account
14
+ 3. Click on "Create new secret key"
15
+ 4. Copy the generated key and save it in a secure location
16
+
17
+ ## Configuration
18
+
19
+ You can configure your OpenAI API key in several ways:
20
+
21
+ ### Option 1: Using the CLI
22
+
23
+ ```bash
24
+ janito --set-api-key openai YOUR_API_KEY
25
+ ```
26
+
27
+ ### Option 2: Environment Variable
28
+
29
+ Set the `OPENAI_API_KEY` environment variable:
30
+
31
+ ```bash
32
+ export OPENAI_API_KEY=YOUR_API_KEY
33
+ ```
34
+
35
+ On Windows:
36
+ ```cmd
37
+ set OPENAI_API_KEY=YOUR_API_KEY
38
+ ```
39
+
40
+ ### Option 3: Configuration File
41
+
42
+ Add the following to your Janito configuration file:
43
+
44
+ ```yaml
45
+ providers:
46
+ openai:
47
+ api_key: YOUR_API_KEY
48
+ ```
49
+
50
+ ## Available Models
51
+
52
+ Janito supports the following OpenAI models:
53
+
54
+ - GPT-5 (default)
55
+ - GPT-5 Mini
56
+ - GPT-5 Nano
57
+ - GPT-4
58
+ - GPT-4 Turbo
59
+ - GPT-3.5 Turbo
60
+
61
+ ## Usage
62
+
63
+ After configuration, you can use OpenAI models with Janito:
64
+
65
+ ```bash
66
+ # Use the default model (GPT-5)
67
+ janito "Explain quantum computing"
68
+
69
+ # Specify a specific model
70
+ janito -m gpt-4 "Explain quantum computing"
71
+
72
+ # Use in chat mode
73
+ janito -c
74
+
75
+ # Use in chat mode with a specific model
76
+ janito -c -m gpt-4-turbo
77
+ ```
78
+
79
+ ## Troubleshooting
80
+
81
+ If you encounter issues:
82
+
83
+ 1. Verify your API key is correct and active
84
+ 2. Check that you have sufficient credits in your OpenAI account
85
+ 3. Ensure your network connection can reach OpenAI's API endpoints
@@ -4,9 +4,14 @@ This page lists the supported providers and their available models.
4
4
 
5
5
  ## OpenAI
6
6
 
7
- - GPT-3.5 Turbo
7
+ - GPT-5 (default)
8
+ - GPT-5 Mini
9
+ - GPT-5 Nano
8
10
  - GPT-4
9
11
  - GPT-4 Turbo
12
+ - GPT-3.5 Turbo
13
+
14
+ For setup instructions, see the [OpenAI Setup Guide](openai-setup.md).
10
15
 
11
16
  ## Google
12
17
 
@@ -38,6 +43,10 @@ This page lists the supported providers and their available models.
38
43
  - qwen-max
39
44
  - qwen3-coder-plus (default)
40
45
  - qwen3-coder-480b-a35b-instruct
46
+ - qwen3-235b-a22b-thinking-2507
47
+ - qwen3-235b-a22b-instruct-2507
48
+ - qwen3-30b-a3b-thinking-2507
49
+ - qwen3-30b-a3b-instruct-2507
41
50
 
42
51
  ## Z.AI
43
52
 
@@ -47,12 +56,14 @@ This page lists the supported providers and their available models.
47
56
  ## Cerebras
48
57
 
49
58
  **Production Models:**
59
+
50
60
  - llama-4-scout-17b-16e-instruct
51
61
  - llama-3.3-70b
52
62
  - llama3.1-8b
53
63
  - qwen-3-32b
54
64
 
55
65
  **Preview Models:**
66
+
56
67
  - llama-4-maverick-17b-128e-instruct
57
68
  - qwen-3-235b-a22b-instruct-2507
58
69
  - qwen-3-235b-a22b-thinking-2507
@@ -60,6 +71,7 @@ This page lists the supported providers and their available models.
60
71
  - gpt-oss-120b
61
72
 
62
73
  **Notes:**
74
+
63
75
  - qwen-3-coder-480b: 32k context, reasoning-focused model with function calling support
64
76
 
65
77
  <!-- Removed links to model_info.py files for all providers to avoid broken references. -->
@@ -296,21 +296,39 @@ class ChatSession:
296
296
  else "Unknown"
297
297
  )
298
298
 
299
- # Get backend hostname if available
300
299
  backend_hostname = "Unknown"
301
- if hasattr(self.agent, "driver") and self.agent.driver:
302
- if hasattr(self.agent.driver, "config") and hasattr(
303
- self.agent.driver.config, "base_url"
304
- ):
305
- base_url = self.agent.driver.config.base_url
306
- if base_url:
307
- try:
308
- from urllib.parse import urlparse
309
-
310
- parsed = urlparse(base_url)
311
- backend_hostname = parsed.netloc
312
- except Exception:
313
- backend_hostname = base_url
300
+ candidates = []
301
+ drv = getattr(self.agent, "driver", None)
302
+ if drv is not None:
303
+ cfg = getattr(drv, "config", None)
304
+ if cfg is not None:
305
+ b = getattr(cfg, "base_url", None)
306
+ if b:
307
+ candidates.append(b)
308
+ direct_base = getattr(drv, "base_url", None)
309
+ if direct_base:
310
+ candidates.append(direct_base)
311
+ cfg2 = getattr(self.agent, "config", None)
312
+ if cfg2 is not None:
313
+ b2 = getattr(cfg2, "base_url", None)
314
+ if b2:
315
+ candidates.append(b2)
316
+ top_base = getattr(self.agent, "base_url", None)
317
+ if top_base:
318
+ candidates.append(top_base)
319
+ from urllib.parse import urlparse
320
+ for candidate in candidates:
321
+ try:
322
+ if not candidate:
323
+ continue
324
+ parsed = urlparse(str(candidate))
325
+ host = parsed.netloc or parsed.path
326
+ if host:
327
+ backend_hostname = host
328
+ break
329
+ except Exception:
330
+ backend_hostname = str(candidate)
331
+ break
314
332
 
315
333
  self.console.print(
316
334
  Rule(
@@ -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)
@@ -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