janito 2.15.0__tar.gz → 2.17.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 (326) hide show
  1. {janito-2.15.0 → janito-2.17.0}/CHANGELOG.md +131 -18
  2. janito-2.17.0/CHANGELOG_2.16.0.md +81 -0
  3. {janito-2.15.0 → janito-2.17.0}/PKG-INFO +1 -1
  4. janito-2.17.0/docs/cerebras-setup.md +56 -0
  5. janito-2.17.0/docs/supported-providers-models.md +65 -0
  6. {janito-2.15.0 → janito-2.17.0}/janito/agent/setup_agent.py +1 -1
  7. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/session.py +42 -1
  8. janito-2.17.0/janito/cli/cli_commands/list_drivers.py +162 -0
  9. janito-2.17.0/janito/cli/cli_commands/list_providers_region.py +85 -0
  10. janito-2.17.0/janito/cli/cli_commands/set_api_key.py +30 -0
  11. {janito-2.15.0 → janito-2.17.0}/janito/cli/core/getters.py +7 -3
  12. {janito-2.15.0 → janito-2.17.0}/janito/cli/main_cli.py +38 -3
  13. {janito-2.15.0 → janito-2.17.0}/janito/cli/prompt_setup.py +3 -0
  14. {janito-2.15.0 → janito-2.17.0}/janito/cli/single_shot_mode/handler.py +43 -1
  15. {janito-2.15.0 → janito-2.17.0}/janito/drivers/azure_openai/driver.py +14 -5
  16. janito-2.17.0/janito/drivers/cerebras/__init__.py +1 -0
  17. {janito-2.15.0 → janito-2.17.0}/janito/drivers/openai/driver.py +16 -5
  18. {janito-2.15.0 → janito-2.17.0}/janito/drivers/zai/driver.py +19 -22
  19. {janito-2.15.0 → janito-2.17.0}/janito/formatting_token.py +9 -5
  20. janito-2.17.0/janito/llm/auth_utils.py +21 -0
  21. {janito-2.15.0 → janito-2.17.0}/janito/providers/__init__.py +1 -0
  22. {janito-2.15.0 → janito-2.17.0}/janito/providers/alibaba/provider.py +11 -9
  23. {janito-2.15.0 → janito-2.17.0}/janito/providers/anthropic/provider.py +4 -5
  24. {janito-2.15.0 → janito-2.17.0}/janito/providers/azure_openai/provider.py +4 -5
  25. janito-2.17.0/janito/providers/cerebras/__init__.py +1 -0
  26. janito-2.17.0/janito/providers/cerebras/model_info.py +76 -0
  27. janito-2.17.0/janito/providers/cerebras/provider.py +145 -0
  28. {janito-2.15.0 → janito-2.17.0}/janito/providers/deepseek/provider.py +4 -5
  29. {janito-2.15.0 → janito-2.17.0}/janito/providers/google/provider.py +4 -5
  30. janito-2.17.0/janito/providers/moonshotai/provider.py +104 -0
  31. {janito-2.15.0 → janito-2.17.0}/janito/providers/openai/provider.py +45 -39
  32. {janito-2.15.0 → janito-2.17.0}/janito/providers/zai/provider.py +3 -9
  33. janito-2.17.0/janito/regions/__init__.py +16 -0
  34. janito-2.17.0/janito/regions/cli.py +124 -0
  35. janito-2.17.0/janito/regions/geo_utils.py +240 -0
  36. janito-2.17.0/janito/regions/provider_regions.py +158 -0
  37. {janito-2.15.0 → janito-2.17.0}/janito.egg-info/PKG-INFO +1 -1
  38. {janito-2.15.0 → janito-2.17.0}/janito.egg-info/SOURCES.txt +14 -1
  39. {janito-2.15.0 → janito-2.17.0}/mkdocs.yml +1 -1
  40. janito-2.17.0/tests/test_provider_cerebras.py +93 -0
  41. janito-2.15.0/docs/supported-providers-models.md +0 -95
  42. janito-2.15.0/janito/cli/cli_commands/list_drivers.py +0 -137
  43. janito-2.15.0/janito/cli/cli_commands/set_api_key.py +0 -19
  44. janito-2.15.0/janito/providers/moonshotai/provider.py +0 -95
  45. {janito-2.15.0 → janito-2.17.0}/.codespellrc +0 -0
  46. {janito-2.15.0 → janito-2.17.0}/.gitattributes +0 -0
  47. /janito-2.15.0/.github/workflows/python-app.yml → /janito-2.17.0/.github/workflows/python-app.yml.disabled +0 -0
  48. {janito-2.15.0 → janito-2.17.0}/.gitignore +0 -0
  49. {janito-2.15.0 → janito-2.17.0}/.pre-commit-config.yaml +0 -0
  50. {janito-2.15.0 → janito-2.17.0}/.secrets.baseline +0 -0
  51. {janito-2.15.0 → janito-2.17.0}/.vscode/settings.json +0 -0
  52. {janito-2.15.0 → janito-2.17.0}/LICENSE +0 -0
  53. {janito-2.15.0 → janito-2.17.0}/README-dev.md +0 -0
  54. {janito-2.15.0 → janito-2.17.0}/README.md +0 -0
  55. {janito-2.15.0 → janito-2.17.0}/UPDATING_DOCS.md +0 -0
  56. {janito-2.15.0 → janito-2.17.0}/adding_mcp.txt +0 -0
  57. {janito-2.15.0 → janito-2.17.0}/docs/DIV.md +0 -0
  58. {janito-2.15.0 → janito-2.17.0}/docs/Interfaces.txt +0 -0
  59. {janito-2.15.0 → janito-2.17.0}/docs/TOOLBAR-STYLING.md +0 -0
  60. {janito-2.15.0 → janito-2.17.0}/docs/about/costs.md +0 -0
  61. {janito-2.15.0 → janito-2.17.0}/docs/about/vs-webchats.md +0 -0
  62. {janito-2.15.0 → janito-2.17.0}/docs/about/why.md +0 -0
  63. {janito-2.15.0 → janito-2.17.0}/docs/alternatives.md +0 -0
  64. {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  65. {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  66. {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  67. {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/our-approach.md +0 -0
  68. {janito-2.15.0 → janito-2.17.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  69. {janito-2.15.0 → janito-2.17.0}/docs/concepts/analysis-style.md +0 -0
  70. {janito-2.15.0 → janito-2.17.0}/docs/concepts/human-guided-ai.md +0 -0
  71. {janito-2.15.0 → janito-2.17.0}/docs/concepts/index.md +0 -0
  72. {janito-2.15.0 → janito-2.17.0}/docs/concepts/language-model-clients.md +0 -0
  73. {janito-2.15.0 → janito-2.17.0}/docs/concepts/prompt-design-style.md +0 -0
  74. {janito-2.15.0 → janito-2.17.0}/docs/deepseek-setup.md +0 -0
  75. {janito-2.15.0 → janito-2.17.0}/docs/driver-flow.md +0 -0
  76. {janito-2.15.0 → janito-2.17.0}/docs/driver-request-cancellation.md +0 -0
  77. {janito-2.15.0 → janito-2.17.0}/docs/drivers/events.md +0 -0
  78. {janito-2.15.0 → janito-2.17.0}/docs/drivers.md +0 -0
  79. {janito-2.15.0 → janito-2.17.0}/docs/event-bus.md +0 -0
  80. {janito-2.15.0 → janito-2.17.0}/docs/guides/configuration.md +0 -0
  81. {janito-2.15.0 → janito-2.17.0}/docs/guides/developing.md +0 -0
  82. {janito-2.15.0 → janito-2.17.0}/docs/guides/disabled-tools.md +0 -0
  83. {janito-2.15.0 → janito-2.17.0}/docs/guides/installation.md +0 -0
  84. {janito-2.15.0 → janito-2.17.0}/docs/guides/profiles.md +0 -0
  85. {janito-2.15.0 → janito-2.17.0}/docs/guides/prompting/README.md +0 -0
  86. {janito-2.15.0 → janito-2.17.0}/docs/guides/single-shot-terminal.md +0 -0
  87. {janito-2.15.0 → janito-2.17.0}/docs/guides/terminal-shell.md +0 -0
  88. {janito-2.15.0 → janito-2.17.0}/docs/guides/tools-developer-guide.md +0 -0
  89. {janito-2.15.0 → janito-2.17.0}/docs/guides/using.md +0 -0
  90. {janito-2.15.0 → janito-2.17.0}/docs/guides/using_tools.md +0 -0
  91. {janito-2.15.0 → janito-2.17.0}/docs/imgs/code-generation-observability.png +0 -0
  92. {janito-2.15.0 → janito-2.17.0}/docs/imgs/code_generation_observability.png +0 -0
  93. {janito-2.15.0 → janito-2.17.0}/docs/imgs/happy-programmer.png +0 -0
  94. {janito-2.15.0 → janito-2.17.0}/docs/imgs/happy-programmer.svg +0 -0
  95. {janito-2.15.0 → janito-2.17.0}/docs/imgs/terminal-one-shot.png +0 -0
  96. {janito-2.15.0 → janito-2.17.0}/docs/imgs/terminal-shell.png +0 -0
  97. {janito-2.15.0 → janito-2.17.0}/docs/imgs/terminal_one_shot.png +0 -0
  98. {janito-2.15.0 → janito-2.17.0}/docs/imgs/terminal_shell.png +0 -0
  99. {janito-2.15.0 → janito-2.17.0}/docs/index.md +0 -0
  100. {janito-2.15.0 → janito-2.17.0}/docs/llm-drivers-required-config.md +0 -0
  101. {janito-2.15.0 → janito-2.17.0}/docs/llm-drivers.md +0 -0
  102. {janito-2.15.0 → janito-2.17.0}/docs/meta/developer-toolchain.md +0 -0
  103. {janito-2.15.0 → janito-2.17.0}/docs/meta/quality-checks.txt +0 -0
  104. {janito-2.15.0 → janito-2.17.0}/docs/moonshotai-setup.md +0 -0
  105. {janito-2.15.0 → janito-2.17.0}/docs/reference/api.md +0 -0
  106. {janito-2.15.0 → janito-2.17.0}/docs/reference/azure-openai.md +0 -0
  107. {janito-2.15.0 → janito-2.17.0}/docs/reference/cli-options.md +0 -0
  108. {janito-2.15.0 → janito-2.17.0}/docs/reference/message-handler-model.md +0 -0
  109. {janito-2.15.0 → janito-2.17.0}/docs/reference/rich-message-handler.md +0 -0
  110. {janito-2.15.0 → janito-2.17.0}/docs/security.md +0 -0
  111. {janito-2.15.0 → janito-2.17.0}/docs/tools/search-text.md +0 -0
  112. {janito-2.15.0 → janito-2.17.0}/docs/tools-index.md +0 -0
  113. {janito-2.15.0 → janito-2.17.0}/docs/tools-natural-results.md +0 -0
  114. {janito-2.15.0 → janito-2.17.0}/docs/tools-precision.md +0 -0
  115. {janito-2.15.0 → janito-2.17.0}/docs/z-ai-setup.md +0 -0
  116. {janito-2.15.0 → janito-2.17.0}/git_diff.txt +0 -0
  117. {janito-2.15.0 → janito-2.17.0}/github_diff +0 -0
  118. {janito-2.15.0 → janito-2.17.0}/janito/README.md +0 -0
  119. {janito-2.15.0 → janito-2.17.0}/janito/__init__.py +0 -0
  120. {janito-2.15.0 → janito-2.17.0}/janito/__main__.py +0 -0
  121. {janito-2.15.0 → janito-2.17.0}/janito/_version.py +0 -0
  122. {janito-2.15.0 → janito-2.17.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  123. {janito-2.15.0 → janito-2.17.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  124. {janito-2.15.0 → janito-2.17.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  125. {janito-2.15.0 → janito-2.17.0}/janito/cli/__init__.py +0 -0
  126. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/bindings.py +0 -0
  127. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  128. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  129. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/script_runner.py +0 -0
  130. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
  131. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  132. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  133. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  134. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  135. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  136. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  137. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  138. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  139. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  140. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  141. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  142. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  143. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  144. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  145. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  146. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  147. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  148. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  149. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  150. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  151. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  152. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  153. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  154. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  155. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  156. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  157. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  158. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  159. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  160. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  161. {janito-2.15.0 → janito-2.17.0}/janito/cli/chat_mode/toolbar.py +0 -0
  162. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_config.py +0 -0
  163. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_models.py +0 -0
  164. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  165. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_providers.py +0 -0
  166. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/list_tools.py +0 -0
  167. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/model_selection.py +0 -0
  168. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/model_utils.py +0 -0
  169. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/show_config.py +0 -0
  170. {janito-2.15.0 → janito-2.17.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  171. {janito-2.15.0 → janito-2.17.0}/janito/cli/config.py +0 -0
  172. {janito-2.15.0 → janito-2.17.0}/janito/cli/console.py +0 -0
  173. {janito-2.15.0 → janito-2.17.0}/janito/cli/core/__init__.py +0 -0
  174. {janito-2.15.0 → janito-2.17.0}/janito/cli/core/event_logger.py +0 -0
  175. {janito-2.15.0 → janito-2.17.0}/janito/cli/core/model_guesser.py +0 -0
  176. {janito-2.15.0 → janito-2.17.0}/janito/cli/core/runner.py +0 -0
  177. {janito-2.15.0 → janito-2.17.0}/janito/cli/core/setters.py +0 -0
  178. {janito-2.15.0 → janito-2.17.0}/janito/cli/core/unsetters.py +0 -0
  179. {janito-2.15.0 → janito-2.17.0}/janito/cli/main.py +0 -0
  180. {janito-2.15.0 → janito-2.17.0}/janito/cli/prompt_core.py +0 -0
  181. {janito-2.15.0 → janito-2.17.0}/janito/cli/prompt_handler.py +0 -0
  182. {janito-2.15.0 → janito-2.17.0}/janito/cli/rich_terminal_reporter.py +0 -0
  183. {janito-2.15.0 → janito-2.17.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  184. {janito-2.15.0 → janito-2.17.0}/janito/cli/utils.py +0 -0
  185. {janito-2.15.0 → janito-2.17.0}/janito/cli/verbose_output.py +0 -0
  186. {janito-2.15.0 → janito-2.17.0}/janito/config.py +0 -0
  187. {janito-2.15.0 → janito-2.17.0}/janito/config_manager.py +0 -0
  188. {janito-2.15.0 → janito-2.17.0}/janito/conversation_history.py +0 -0
  189. {janito-2.15.0 → janito-2.17.0}/janito/dir_walk_utils.py +0 -0
  190. {janito-2.15.0 → janito-2.17.0}/janito/docs/GETTING_STARTED.md +0 -0
  191. {janito-2.15.0 → janito-2.17.0}/janito/driver_events.py +0 -0
  192. {janito-2.15.0 → janito-2.17.0}/janito/drivers/dashscope.bak.zip +0 -0
  193. {janito-2.15.0 → janito-2.17.0}/janito/drivers/openai/README.md +0 -0
  194. {janito-2.15.0 → janito-2.17.0}/janito/drivers/openai_responses.bak.zip +0 -0
  195. {janito-2.15.0 → janito-2.17.0}/janito/drivers/zai/__init__.py +0 -0
  196. {janito-2.15.0 → janito-2.17.0}/janito/event_bus/__init__.py +0 -0
  197. {janito-2.15.0 → janito-2.17.0}/janito/event_bus/bus.py +0 -0
  198. {janito-2.15.0 → janito-2.17.0}/janito/event_bus/event.py +0 -0
  199. {janito-2.15.0 → janito-2.17.0}/janito/event_bus/handler.py +0 -0
  200. {janito-2.15.0 → janito-2.17.0}/janito/event_bus/queue_bus.py +0 -0
  201. {janito-2.15.0 → janito-2.17.0}/janito/exceptions.py +0 -0
  202. {janito-2.15.0 → janito-2.17.0}/janito/formatting.py +0 -0
  203. {janito-2.15.0 → janito-2.17.0}/janito/gitignore_utils.py +0 -0
  204. {janito-2.15.0 → janito-2.17.0}/janito/i18n/__init__.py +0 -0
  205. {janito-2.15.0 → janito-2.17.0}/janito/i18n/messages.py +0 -0
  206. {janito-2.15.0 → janito-2.17.0}/janito/i18n/pt.py +0 -0
  207. {janito-2.15.0 → janito-2.17.0}/janito/llm/README.md +0 -0
  208. {janito-2.15.0 → janito-2.17.0}/janito/llm/__init__.py +0 -0
  209. {janito-2.15.0 → janito-2.17.0}/janito/llm/agent.py +0 -0
  210. {janito-2.15.0 → janito-2.17.0}/janito/llm/auth.py +0 -0
  211. {janito-2.15.0 → janito-2.17.0}/janito/llm/driver.py +0 -0
  212. {janito-2.15.0 → janito-2.17.0}/janito/llm/driver_config.py +0 -0
  213. {janito-2.15.0 → janito-2.17.0}/janito/llm/driver_config_builder.py +0 -0
  214. {janito-2.15.0 → janito-2.17.0}/janito/llm/driver_input.py +0 -0
  215. {janito-2.15.0 → janito-2.17.0}/janito/llm/message_parts.py +0 -0
  216. {janito-2.15.0 → janito-2.17.0}/janito/llm/model.py +0 -0
  217. {janito-2.15.0 → janito-2.17.0}/janito/llm/provider.py +0 -0
  218. {janito-2.15.0 → janito-2.17.0}/janito/mkdocs.yml +0 -0
  219. {janito-2.15.0 → janito-2.17.0}/janito/perf_singleton.py +0 -0
  220. {janito-2.15.0 → janito-2.17.0}/janito/performance_collector.py +0 -0
  221. {janito-2.15.0 → janito-2.17.0}/janito/platform_discovery.py +0 -0
  222. {janito-2.15.0 → janito-2.17.0}/janito/provider_config.py +0 -0
  223. {janito-2.15.0 → janito-2.17.0}/janito/provider_registry.py +0 -0
  224. {janito-2.15.0 → janito-2.17.0}/janito/providers/alibaba/__init__.py +0 -0
  225. {janito-2.15.0 → janito-2.17.0}/janito/providers/alibaba/model_info.py +0 -0
  226. {janito-2.15.0 → janito-2.17.0}/janito/providers/anthropic/model_info.py +0 -0
  227. {janito-2.15.0 → janito-2.17.0}/janito/providers/azure_openai/model_info.py +0 -0
  228. {janito-2.15.0 → janito-2.17.0}/janito/providers/dashscope.bak.zip +0 -0
  229. {janito-2.15.0 → janito-2.17.0}/janito/providers/deepseek/__init__.py +0 -0
  230. {janito-2.15.0 → janito-2.17.0}/janito/providers/deepseek/model_info.py +0 -0
  231. {janito-2.15.0 → janito-2.17.0}/janito/providers/google/__init__.py +0 -0
  232. {janito-2.15.0 → janito-2.17.0}/janito/providers/google/model_info.py +0 -0
  233. {janito-2.15.0 → janito-2.17.0}/janito/providers/moonshotai/__init__.py +0 -0
  234. {janito-2.15.0 → janito-2.17.0}/janito/providers/moonshotai/model_info.py +0 -0
  235. {janito-2.15.0 → janito-2.17.0}/janito/providers/openai/__init__.py +0 -0
  236. {janito-2.15.0 → janito-2.17.0}/janito/providers/openai/model_info.py +0 -0
  237. {janito-2.15.0 → janito-2.17.0}/janito/providers/openai/schema_generator.py +0 -0
  238. {janito-2.15.0 → janito-2.17.0}/janito/providers/registry.py +0 -0
  239. {janito-2.15.0 → janito-2.17.0}/janito/providers/zai/__init__.py +0 -0
  240. {janito-2.15.0 → janito-2.17.0}/janito/providers/zai/model_info.py +0 -0
  241. {janito-2.15.0 → janito-2.17.0}/janito/providers/zai/schema_generator.py +0 -0
  242. {janito-2.15.0 → janito-2.17.0}/janito/report_events.py +0 -0
  243. {janito-2.15.0 → janito-2.17.0}/janito/shell.bak.zip +0 -0
  244. {janito-2.15.0 → janito-2.17.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  245. {janito-2.15.0 → janito-2.17.0}/janito/tools/README.md +0 -0
  246. {janito-2.15.0 → janito-2.17.0}/janito/tools/__init__.py +0 -0
  247. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/__init__.py +0 -0
  248. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/__init__.py +0 -0
  249. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/adapter.py +0 -0
  250. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/ask_user.py +0 -0
  251. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/copy_file.py +0 -0
  252. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/create_directory.py +0 -0
  253. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/create_file.py +0 -0
  254. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  255. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/fetch_url.py +0 -0
  256. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/find_files.py +0 -0
  257. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  258. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  259. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  260. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  261. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  262. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  263. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/move_file.py +0 -0
  264. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  265. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/open_url.py +0 -0
  266. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/python_code_run.py +0 -0
  267. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/python_command_run.py +0 -0
  268. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/python_file_run.py +0 -0
  269. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/read_files.py +0 -0
  270. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/remove_directory.py +0 -0
  271. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/remove_file.py +0 -0
  272. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  273. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
  274. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
  275. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  276. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/core.py +0 -0
  277. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  278. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  279. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  280. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  281. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  282. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  283. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  284. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  285. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  286. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  287. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  288. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  289. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  290. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  291. {janito-2.15.0 → janito-2.17.0}/janito/tools/adapters/local/view_file.py +0 -0
  292. {janito-2.15.0 → janito-2.17.0}/janito/tools/disabled_tools.py +0 -0
  293. {janito-2.15.0 → janito-2.17.0}/janito/tools/inspect_registry.py +0 -0
  294. {janito-2.15.0 → janito-2.17.0}/janito/tools/outline_file.bak.zip +0 -0
  295. {janito-2.15.0 → janito-2.17.0}/janito/tools/path_security.py +0 -0
  296. {janito-2.15.0 → janito-2.17.0}/janito/tools/permissions.py +0 -0
  297. {janito-2.15.0 → janito-2.17.0}/janito/tools/permissions_parse.py +0 -0
  298. {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_base.py +0 -0
  299. {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_events.py +0 -0
  300. {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_run_exception.py +0 -0
  301. {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_use_tracker.py +0 -0
  302. {janito-2.15.0 → janito-2.17.0}/janito/tools/tool_utils.py +0 -0
  303. {janito-2.15.0 → janito-2.17.0}/janito/tools/tools_adapter.py +0 -0
  304. {janito-2.15.0 → janito-2.17.0}/janito/tools/tools_schema.py +0 -0
  305. {janito-2.15.0 → janito-2.17.0}/janito/utils.py +0 -0
  306. {janito-2.15.0 → janito-2.17.0}/janito.egg-info/dependency_links.txt +0 -0
  307. {janito-2.15.0 → janito-2.17.0}/janito.egg-info/entry_points.txt +0 -0
  308. {janito-2.15.0 → janito-2.17.0}/janito.egg-info/requires.txt +0 -0
  309. {janito-2.15.0 → janito-2.17.0}/janito.egg-info/top_level.txt +0 -0
  310. {janito-2.15.0 → janito-2.17.0}/pyproject.toml +0 -0
  311. {janito-2.15.0 → janito-2.17.0}/pytest.ini +0 -0
  312. {janito-2.15.0 → janito-2.17.0}/requirements-dev.txt +0 -0
  313. {janito-2.15.0 → janito-2.17.0}/requirements.txt +0 -0
  314. {janito-2.15.0 → janito-2.17.0}/setup.cfg +0 -0
  315. {janito-2.15.0 → janito-2.17.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  316. {janito-2.15.0 → janito-2.17.0}/tests/adapters/local/test_read_files.py +0 -0
  317. {janito-2.15.0 → janito-2.17.0}/tests/test_cli_list_models.py +0 -0
  318. {janito-2.15.0 → janito-2.17.0}/tests/test_cli_list_providers.py +0 -0
  319. {janito-2.15.0 → janito-2.17.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  320. {janito-2.15.0 → janito-2.17.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
  321. {janito-2.15.0 → janito-2.17.0}/tests/test_cli_version.py +0 -0
  322. {janito-2.15.0 → janito-2.17.0}/tests/test_disabled_tools.py +0 -0
  323. {janito-2.15.0 → janito-2.17.0}/tests/test_provider_alibaba.py +0 -0
  324. {janito-2.15.0 → janito-2.17.0}/tests/test_provider_moonshotai.py +0 -0
  325. {janito-2.15.0 → janito-2.17.0}/tools/release.py +0 -0
  326. {janito-2.15.0 → janito-2.17.0}/tox.ini +0 -0
@@ -2,31 +2,144 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [2.12.0] - 2025-08-05
5
+ ## [Unreleased]
6
+
7
+ ## [2.17.0] - 2025-08-05
6
8
 
7
9
  ### Added
8
- - **Enhanced Provider Documentation**: Updated supported-providers-models.md with comprehensive provider information including drivers and dependencies
9
- - **Improved Driver Listing**: Enhanced list_drivers command with better dependency detection and duplicate removal
10
- - **Z.AI Provider**: Added ZAIModelDriver with OpenAI SDK compatibility for Z.AI API
11
- - **Google Gemini Provider**: Added support for Gemini Pro and Gemini 1.5 Pro models via OpenAI-compatible API
12
- - **DeepSeek Provider**: Added support for deepseek-chat and deepseek-coder models via OpenAI-compatible API
13
- - **Alibaba Provider**: Added support for qwen-turbo, qwen-plus, qwen-max, and qwen3-coder-plus models via OpenAI-compatible API
14
- - **MoonshotAI Provider**: Enhanced with additional models and OpenAI-compatible API support
15
- - **Azure OpenAI Provider**: Added support for GPT-4o and GPT-4o-mini models
10
+
11
+ - **New Provider Support**
12
+ - **Cerebras Provider**: Added complete support for Cerebras with qwen-3-coder-480b model
13
+ - qwen-3-coder-480b: 32k context, reasoning-focused model with function calling support
14
+
15
+ - **Enhanced UX**
16
+ - Improved error handling for invalid provider names in set-api-key command
17
+ - Better error messages when provider is not found
16
18
 
17
19
  ### Changed
18
- - **CLI Core**: Updated getter functions to exit after execution for better CLI behavior
19
- - **Driver Architecture**: Enhanced ZAI driver to use OpenAI SDK instead of Z.AI SDK for better compatibility
20
- - **Dependency Management**: Improved dependency detection in list_drivers command with duplicate removal
21
- - **Provider Registry**: Enhanced provider information display with driver names and dependency status
22
- - **Model Support**: Updated all providers to use OpenAI-compatible API where applicable, expanding model availability
20
+
21
+ - **Provider Improvements**
22
+ - Updated Alibaba endpoint to international URL for better global access
23
+ - Simplified region display to 2-letter codes for cleaner output
24
+ - Improved driver listing and region display functionality
25
+
26
+ - **Zero Mode Enhancement**
27
+ - Zero mode now properly disables system prompt and tools for minimal interaction
23
28
 
24
29
  ### Fixed
25
- - **Driver Configuration**: Fixed AttributeError in ZAI provider by initializing _driver_config properly
26
- - **Import Handling**: Added proper import error handling for optional dependencies in ZAI driver
27
- - **CLI Integration**: Fixed list_drivers integration into main CLI flow
28
30
 
29
- ## [2.11.0] - 2025-08-04
31
+ - **Bug Fixes**
32
+ - Added missing tools adapter to Cerebras provider
33
+ - Improved error handling for invalid provider names in set-api-key command
34
+
35
+ ## [2.16.0] - 2025-01-08
36
+
37
+ ### Added
38
+
39
+ - **New CLI Features**
40
+ - `--python` flag: Start directly with Python developer profile without manual selection
41
+ - `--multi` option: Enable default multiline input in chat mode
42
+ - `--list-drivers` command: List available LLM drivers and their dependencies
43
+ - `--list-providers-region` command: Show providers with region information
44
+
45
+ - **New Providers**
46
+ - **Z.AI Provider**: Complete support for Z.AI with GLM-4.5, GLM-4, and GLM-4V models
47
+ - GLM-4.5: 128k context with thinking support for advanced reasoning
48
+ - GLM-4: General-purpose model with 128k context
49
+ - GLM-4V: Vision model for image understanding with 128k context
50
+ - **Alibaba Cloud Provider**: Support for Qwen models including qwen-turbo, qwen-plus, qwen-max, and qwen3-coder-plus
51
+
52
+ - **Enhanced UX**
53
+ - Model information display now includes backend hostname in both chat and single-shot modes
54
+ - Improved region management with geolocation utilities
55
+ - Enhanced error handling for missing API keys and dependencies
56
+
57
+ ### Changed
58
+
59
+ - **Provider Improvements**
60
+ - Updated Z.AI provider to use official SDK with improved model support
61
+ - Changed default GLM model from air to regular version
62
+ - Updated Alibaba endpoint to international URL for better global access
63
+ - Simplified region display to 2-letter codes for cleaner output
64
+
65
+ - **Documentation**
66
+ - Updated documentation URLs to use GitHub Pages default domain
67
+ - Fixed documentation URL to docs.janito.dev
68
+ - Enhanced provider documentation with new Z.AI and Alibaba Cloud details
69
+
70
+ ### Fixed
71
+
72
+ - **Bug Fixes**
73
+ - Fixed AttributeError when ZAIProvider API key is missing
74
+ - Removed accidentally committed test files
75
+ - Improved error handling and user experience in profile selection
76
+ - Fixed various import order issues for better code organization
77
+
78
+ - **Code Quality**
79
+ - Refactored provider registry for reduced complexity
80
+ - Improved CLI argument handling and validation
81
+ - Enhanced terminal output styling and formatting
82
+
83
+ ### Security
84
+
85
+ - **Enhanced Security**
86
+ - Improved privilege checking and status display in chat sessions
87
+ - Enhanced error handling for missing dependencies and API keys
88
+ - Better validation of provider configurations
89
+
90
+ ### Technical Improvements
91
+
92
+ - **Architecture**
93
+ - Refactored core CLI and runner modules for better maintainability
94
+ - Improved prompt handling and streamlined main CLI logic
95
+ - Enhanced provider registry with new visual indicators
96
+ - Better separation of concerns in driver and provider implementations
97
+
98
+ - **Performance**
99
+ - Optimized model information retrieval
100
+ - Improved startup performance with better configuration handling
101
+ - Enhanced memory usage in chat sessions
102
+
103
+ ### Developer Experience
104
+
105
+ - **Testing**
106
+ - Added comprehensive tests for new CLI commands
107
+ - Improved test coverage for provider configurations
108
+ - Enhanced error handling in test scenarios
109
+
110
+ - **Documentation**
111
+ - Updated all provider documentation with new features
112
+ - Added comprehensive setup guides for new providers
113
+ - Improved CLI usage examples and syntax highlighting
114
+
115
+ ## [2.15.0] - 2025-08-05
116
+
117
+ ## [2.16.0] - 2025-01-08
118
+
119
+ ### Added
120
+
121
+ - Added `--python` CLI flag to start with the Python developer profile without manual profile selection
122
+ - Added `--list-drivers` CLI command to list available LLM drivers and their dependencies
123
+ - Added `--multi` CLI option for default multiline input in chat mode
124
+ - Enhanced model information display with backend hostname in both chat and single-shot modes
125
+
126
+ ### Changed
127
+
128
+ - Updated Z.AI provider to use official SDK with improved model support
129
+ - Changed default GLM model from air to regular version
130
+ - Updated documentation URLs to use GitHub Pages default domain
131
+
132
+ ### Fixed
133
+
134
+ - Fixed AttributeError when ZAIProvider API key is missing
135
+ - Removed accidentally committed test files
136
+ - Improved error handling and user experience in profile selection
137
+
138
+ ### Security
139
+
140
+ - Enhanced privilege checking and status display in chat sessions
141
+
142
+ ## [2.15.0] - 2025-08-05
30
143
 
31
144
  ### Added
32
145
 
@@ -0,0 +1,81 @@
1
+ # Changelog v2.16.0
2
+
3
+ ## [2.16.0] - 2025-01-08
4
+
5
+ ### Added
6
+
7
+ - **New CLI Features**
8
+ - `--python` flag: Start directly with Python developer profile without manual selection
9
+ - `--multi` option: Enable default multiline input in chat mode
10
+ - `--list-drivers` command: List available LLM drivers and their dependencies
11
+ - `--list-providers-region` command: Show providers with region information
12
+
13
+ - **New Providers**
14
+ - **Z.AI Provider**: Complete support for Z.AI with GLM-4.5, GLM-4, and GLM-4V models
15
+ - GLM-4.5: 128k context with thinking support for advanced reasoning
16
+ - GLM-4: General-purpose model with 128k context
17
+ - GLM-4V: Vision model for image understanding with 128k context
18
+ - **Alibaba Cloud Provider**: Support for Qwen models including qwen-turbo, qwen-plus, qwen-max, and qwen3-coder-plus
19
+
20
+ - **Enhanced UX**
21
+ - Model information display now includes backend hostname in both chat and single-shot modes
22
+ - Improved region management with geolocation utilities
23
+ - Enhanced error handling for missing API keys and dependencies
24
+
25
+ ### Changed
26
+
27
+ - **Provider Improvements**
28
+ - Updated Z.AI provider to use official SDK with improved model support
29
+ - Changed default GLM model from air to regular version
30
+ - Updated Alibaba endpoint to international URL for better global access
31
+ - Simplified region display to 2-letter codes for cleaner output
32
+
33
+ - **Documentation**
34
+ - Updated documentation URLs to use GitHub Pages default domain
35
+ - Fixed documentation URL to docs.janito.dev
36
+ - Enhanced provider documentation with new Z.AI and Alibaba Cloud details
37
+
38
+ ### Fixed
39
+
40
+ - **Bug Fixes**
41
+ - Fixed AttributeError when ZAIProvider API key is missing
42
+ - Removed accidentally committed test files
43
+ - Improved error handling and user experience in profile selection
44
+ - Fixed various import order issues for better code organization
45
+
46
+ - **Code Quality**
47
+ - Refactored provider registry for reduced complexity
48
+ - Improved CLI argument handling and validation
49
+ - Enhanced terminal output styling and formatting
50
+
51
+ ### Security
52
+
53
+ - **Enhanced Security**
54
+ - Improved privilege checking and status display in chat sessions
55
+ - Enhanced error handling for missing dependencies and API keys
56
+ - Better validation of provider configurations
57
+
58
+ ### Technical Improvements
59
+
60
+ - **Architecture**
61
+ - Refactored core CLI and runner modules for better maintainability
62
+ - Improved prompt handling and streamlined main CLI logic
63
+ - Enhanced provider registry with new visual indicators
64
+ - Better separation of concerns in driver and provider implementations
65
+
66
+ - **Performance**
67
+ - Optimized model information retrieval
68
+ - Improved startup performance with better configuration handling
69
+ - Enhanced memory usage in chat sessions
70
+
71
+ ### Developer Experience
72
+
73
+ - **Testing**
74
+ - Added comprehensive tests for new CLI commands
75
+ - Improved test coverage for provider configurations
76
+ - Enhanced error handling in test scenarios
77
+
78
+ - **Documentation**
79
+ - Updated all provider documentation with new features
80
+ - Added comprehensive setup guides for new providers
81
+ - Improved CLI usage examples and syntax highlighting
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.15.0
3
+ Version: 2.17.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,56 @@
1
+ # Cerebras Setup Guide
2
+
3
+ This guide will help you set up Janito to use Cerebras as an LLM provider.
4
+
5
+ ## Prerequisites
6
+
7
+ 1. A Cerebras account
8
+ 2. An API key from Cerebras
9
+
10
+ ## Getting an API Key
11
+
12
+ 1. Visit the [Cerebras API Keys page](https://api.cerebras.ai/)
13
+ 2. Log in to your account
14
+ 3. Generate a new API key
15
+ 4. Copy the API key for use in Janito
16
+
17
+ ## Configuration
18
+
19
+ To configure Janito to use Cerebras, you need to set your API key:
20
+
21
+ ```bash
22
+ janito --set-api-key YOUR_CEREBRAS_API_KEY -p cerebras
23
+ ```
24
+
25
+ Replace `YOUR_CEREBRAS_API_KEY` with the API key you obtained from Cerebras.
26
+
27
+ ## Usage
28
+
29
+ After setting up your API key, you can use Cerebras models with Janito:
30
+
31
+ ```bash
32
+ janito -p cerebras "Hello, how are you?"
33
+ ```
34
+
35
+ By default, Janito will use the `qwen-3-coder-480b` model. You can specify a different model if needed:
36
+
37
+ ```bash
38
+ janito -p cerebras -m qwen-3-coder-480b "Explain quantum computing"
39
+ ```
40
+
41
+ ## Available Models
42
+
43
+ Cerebras offers several models through their API:
44
+
45
+ - `qwen-3-coder-480b`: 32k context, reasoning-focused model with function calling support
46
+
47
+ ## Troubleshooting
48
+
49
+ If you encounter issues:
50
+
51
+ 1. Verify your API key is correct and active
52
+ 2. Check that you have internet connectivity
53
+ 3. Ensure you're using a supported model name
54
+ 4. Check the Cerebras status page for any service outages
55
+
56
+ For further assistance, consult the [Cerebras documentation](https://api.cerebras.ai/docs) or [Janito documentation](https://docs.janito.dev).
@@ -0,0 +1,65 @@
1
+ # Supported Providers and Models
2
+
3
+ This page lists the supported providers and their available models.
4
+
5
+ ## OpenAI
6
+
7
+ - GPT-3.5 Turbo
8
+ - GPT-4
9
+ - GPT-4 Turbo
10
+
11
+ ## Google
12
+
13
+ - Gemini Pro
14
+ - Gemini 1.5 Pro
15
+
16
+ ## Anthropic
17
+
18
+ - Claude 2
19
+ - Claude 3 Opus
20
+ - Claude 3 Sonnet
21
+ - Claude 3 Haiku
22
+
23
+ ## MoonshotAI
24
+
25
+ - kimi-k2-turbo-preview
26
+ - kimi-k2-turbo-preview
27
+ - kimi-k1-8k
28
+ - kimi-k1-32k
29
+ - kimi-k1-128k
30
+
31
+ - Llama-3-8b-8192
32
+ - Llama-3-70b-8192
33
+
34
+ ## Alibaba
35
+
36
+ - qwen-turbo
37
+ - qwen-plus
38
+ - qwen-max
39
+ - qwen3-coder-plus (default)
40
+ - qwen3-coder-480b-a35b-instruct
41
+
42
+ ## Z.AI
43
+
44
+ - glm-4.5
45
+ - glm-4.5-air
46
+
47
+ ## Cerebras
48
+
49
+ **Production Models:**
50
+ - llama-4-scout-17b-16e-instruct
51
+ - llama-3.3-70b
52
+ - llama3.1-8b
53
+ - qwen-3-32b
54
+
55
+ **Preview Models:**
56
+ - llama-4-maverick-17b-128e-instruct
57
+ - qwen-3-235b-a22b-instruct-2507
58
+ - qwen-3-235b-a22b-thinking-2507
59
+ - qwen-3-coder-480b
60
+ - gpt-oss-120b
61
+
62
+ **Notes:**
63
+ - qwen-3-coder-480b: 32k context, reasoning-focused model with function calling support
64
+
65
+ <!-- Removed links to model_info.py files for all providers to avoid broken references. -->
@@ -167,7 +167,7 @@ def setup_agent(
167
167
  """
168
168
  Creates an agent. A system prompt is rendered from a template only when a profile is specified.
169
169
  """
170
- if no_tools_mode:
170
+ if no_tools_mode or zero_mode:
171
171
  tools_provider = None
172
172
  else:
173
173
  tools_provider = get_local_tools_adapter()
@@ -115,9 +115,15 @@ class ChatSession:
115
115
  def _select_profile_and_role(self, args, role):
116
116
  profile = getattr(args, "profile", None) if args is not None else None
117
117
  role_arg = getattr(args, "role", None) if args is not None else None
118
+ python_profile = getattr(args, "python", False) if args is not None else False
118
119
  profile_system_prompt = None
119
120
  no_tools_mode = False
120
- if profile is None and role_arg is None:
121
+
122
+ # Handle --python flag
123
+ if python_profile and profile is None and role_arg is None:
124
+ profile = "Developer with Python Tools"
125
+
126
+ if profile is None and role_arg is None and not python_profile:
121
127
  try:
122
128
  from janito.cli.chat_mode.session_profile_select import select_profile
123
129
 
@@ -277,6 +283,41 @@ class ChatSession:
277
283
  else None
278
284
  )
279
285
  start_time = time.time()
286
+
287
+ # Print rule line with model info before processing prompt
288
+ model_name = (
289
+ self.agent.get_model_name()
290
+ if hasattr(self.agent, "get_model_name")
291
+ else "Unknown"
292
+ )
293
+ provider_name = (
294
+ self.agent.get_provider_name()
295
+ if hasattr(self.agent, "get_provider_name")
296
+ else "Unknown"
297
+ )
298
+
299
+ # Get backend hostname if available
300
+ 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
314
+
315
+ self.console.print(
316
+ Rule(
317
+ f"[bold blue]Model: {model_name} ({provider_name}) | Backend: {backend_hostname}[/bold blue]"
318
+ )
319
+ )
320
+
280
321
  self._prompt_handler.run_prompt(cmd_input)
281
322
  end_time = time.time()
282
323
  elapsed = end_time - start_time
@@ -0,0 +1,162 @@
1
+ """
2
+ CLI Command: List available LLM drivers and their dependencies
3
+ """
4
+
5
+ import importlib
6
+ import sys
7
+ from pathlib import Path
8
+ from rich.console import Console
9
+ from rich.table import Table
10
+ from rich.panel import Panel
11
+ from rich.text import Text
12
+
13
+ console = Console()
14
+
15
+
16
+ def _detect_dependencies_from_content(content, class_name):
17
+ """Detect dependencies from module content."""
18
+ dependencies = []
19
+
20
+ if "import openai" in content or "from openai" in content:
21
+ dependencies.append("openai")
22
+ if "import zai" in content or "from zai" in content:
23
+ dependencies.append("zai")
24
+ if "import anthropic" in content or "from anthropic" in content:
25
+ dependencies.append("anthropic")
26
+ if "import google" in content or "from google" in content:
27
+ dependencies.append("google-generativeai")
28
+
29
+ # Remove openai from zai driver dependencies
30
+ if "ZAIModelDriver" in class_name and "openai" in dependencies:
31
+ dependencies.remove("openai")
32
+
33
+ return dependencies
34
+
35
+
36
+ def _check_dependency_status(dependencies):
37
+ """Check if dependencies are available."""
38
+ if not dependencies:
39
+ return ["No external dependencies"]
40
+
41
+ dep_status = []
42
+ for dep in dependencies:
43
+ try:
44
+ importlib.import_module(dep)
45
+ dep_status.append(f"✅ {dep}")
46
+ except ImportError:
47
+ dep_status.append(f"❌ {dep}")
48
+
49
+ return dep_status
50
+
51
+
52
+ def _get_single_driver_info(module_path, class_name):
53
+ """Get information for a single driver."""
54
+ try:
55
+ module = importlib.import_module(module_path)
56
+ driver_class = getattr(module, class_name)
57
+
58
+ available = getattr(driver_class, "available", True)
59
+ unavailable_reason = getattr(driver_class, "unavailable_reason", None)
60
+
61
+ # Read module file to detect imports
62
+ module_file = Path(module.__file__)
63
+ with open(module_file, "r", encoding="utf-8") as f:
64
+ content = f.read()
65
+
66
+ dependencies = _detect_dependencies_from_content(content, class_name)
67
+ dep_status = _check_dependency_status(dependencies)
68
+
69
+ return {
70
+ "name": class_name,
71
+ "available": available,
72
+ "reason": unavailable_reason,
73
+ "dependencies": dep_status,
74
+ }
75
+
76
+ except (ImportError, AttributeError) as e:
77
+ return {
78
+ "name": class_name,
79
+ "module": module_path,
80
+ "available": False,
81
+ "reason": str(e),
82
+ "dependencies": ["❌ Module not found"],
83
+ }
84
+
85
+
86
+ def get_driver_info():
87
+ """Get information about all available drivers."""
88
+ drivers = []
89
+
90
+ # Define known driver modules
91
+ driver_modules = [
92
+ ("janito.drivers.openai.driver", "OpenAIModelDriver"),
93
+ ("janito.drivers.azure_openai.driver", "AzureOpenAIModelDriver"),
94
+ ("janito.drivers.zai.driver", "ZAIModelDriver"),
95
+ ("janito.drivers.cerebras.driver", "CerebrasModelDriver"),
96
+ ]
97
+
98
+ for module_path, class_name in driver_modules:
99
+ driver_info = _get_single_driver_info(module_path, class_name)
100
+ drivers.append(driver_info)
101
+
102
+ return drivers
103
+
104
+
105
+ def _create_driver_table(drivers):
106
+ """Create and populate the drivers table."""
107
+ table = Table(title="Available LLM Drivers")
108
+ table.add_column("Driver", style="cyan", no_wrap=True)
109
+ table.add_column("Status", style="bold")
110
+ table.add_column("Dependencies", style="yellow")
111
+
112
+ for driver in drivers:
113
+ name = driver["name"]
114
+
115
+ if driver["available"]:
116
+ status = "[green]✅ Available[/green]"
117
+ if driver["reason"]:
118
+ status = f"[yellow]⚠️ Available ({driver['reason']})[/yellow]"
119
+ else:
120
+ status = f"[red]❌ Unavailable[/red]"
121
+ if driver["reason"]:
122
+ status = f"[red]❌ {driver['reason']}[/red]"
123
+
124
+ deps = "\n".join(driver["dependencies"])
125
+ table.add_row(name, status, deps)
126
+
127
+ return table
128
+
129
+
130
+ def _get_missing_dependencies(drivers):
131
+ """Get list of missing dependencies."""
132
+ missing_deps = []
133
+ for driver in drivers:
134
+ for dep_status in driver["dependencies"]:
135
+ if dep_status.startswith("❌"):
136
+ dep_name = dep_status.split()[1]
137
+ if dep_name not in missing_deps:
138
+ missing_deps.append(dep_name)
139
+ return missing_deps
140
+
141
+
142
+ def handle_list_drivers(args=None):
143
+ """List all available LLM drivers with their status and dependencies."""
144
+ drivers = get_driver_info()
145
+
146
+ if not drivers:
147
+ console.print("[red]No drivers found[/red]")
148
+ return
149
+
150
+ table = _create_driver_table(drivers)
151
+ console.print(table)
152
+
153
+ # Installation help - only show for missing dependencies
154
+ missing_deps = _get_missing_dependencies(drivers)
155
+ if missing_deps:
156
+ console.print(
157
+ f"\n[dim]💡 Install missing deps: pip install {' '.join(missing_deps)}[/dim]"
158
+ )
159
+
160
+
161
+ if __name__ == "__main__":
162
+ handle_list_drivers()
@@ -0,0 +1,85 @@
1
+ """
2
+ CLI Command: List providers with their regional API information
3
+ """
4
+
5
+ import json
6
+ from typing import Dict, List
7
+ from rich.console import Console
8
+ from rich.table import Table
9
+ from rich.panel import Panel
10
+
11
+ from janito.regions.provider_regions import PROVIDER_REGIONS, get_all_providers
12
+ from janito.regions.geo_utils import get_region_info
13
+
14
+ console = Console()
15
+
16
+
17
+ def handle_list_providers_region(args=None):
18
+ """List all providers with their regional API information."""
19
+
20
+ # Get user location info
21
+ user_info = get_region_info()
22
+ user_region = user_info["major_region"]
23
+
24
+ # Get all providers
25
+ providers = get_all_providers()
26
+
27
+ # Create table
28
+ table = Table(title="LLM Providers by Region")
29
+ table.add_column("Provider", style="cyan", no_wrap=True)
30
+ table.add_column("Region", style="green")
31
+ table.add_column("Endpoint", style="bright_white")
32
+
33
+ for provider in sorted(providers):
34
+ regions = PROVIDER_REGIONS.get(provider, [])
35
+ if not regions:
36
+ table.add_row(provider, "N/A", "N/A", "N/A", "N/A")
37
+ continue
38
+
39
+ # Find the best region for the user
40
+ best_region = None
41
+ for region in regions:
42
+ if region.region_code.startswith(user_region):
43
+ best_region = region
44
+ break
45
+
46
+ # If no exact match, use first available
47
+ if not best_region:
48
+ best_region = regions[0]
49
+
50
+ # Extract 2-letter region code
51
+ if provider == "azure-openai":
52
+ region_code = "ALL"
53
+ else:
54
+ region_code = (
55
+ user_region
56
+ if any(r.region_code.startswith(user_region) for r in regions)
57
+ else (
58
+ "APAC"
59
+ if best_region.region_code == "ASIA-PACIFIC"
60
+ else best_region.region_code[:2]
61
+ )
62
+ )
63
+
64
+ table.add_row(
65
+ provider,
66
+ region_code,
67
+ best_region.endpoint,
68
+ )
69
+
70
+ console.print(table)
71
+
72
+ # Show user location info
73
+ console.print(
74
+ f"\n[dim]Your location: {user_info['country_code']} ({user_region})[/dim]"
75
+ )
76
+ console.print(f"[dim]Detection source: {user_info['source']}[/dim]")
77
+
78
+ # Show region mapping info
79
+ console.print(
80
+ "\n[dim]Regions: US (United States), EU (Europe), CN (China), CH (Switzerland), APAC (Asia Pacific)[/dim]"
81
+ )
82
+
83
+
84
+ if __name__ == "__main__":
85
+ handle_list_providers_region()