janito 2.9.0__tar.gz → 2.12.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 (312) hide show
  1. {janito-2.9.0 → janito-2.12.0}/CHANGELOG.md +34 -10
  2. {janito-2.9.0/janito.egg-info → janito-2.12.0}/PKG-INFO +1 -1
  3. {janito-2.9.0 → janito-2.12.0}/docs/guides/terminal-shell.md +1 -0
  4. {janito-2.9.0 → janito-2.12.0}/docs/moonshotai-setup.md +2 -1
  5. {janito-2.9.0 → janito-2.12.0}/docs/reference/cli-options.md +2 -1
  6. {janito-2.9.0 → janito-2.12.0}/docs/supported-providers-models.md +23 -3
  7. janito-2.12.0/janito/README.md +149 -0
  8. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/script_runner.py +2 -2
  9. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/session.py +9 -0
  10. janito-2.12.0/janito/cli/core/model_guesser.py +51 -0
  11. {janito-2.9.0 → janito-2.12.0}/janito/cli/core/runner.py +13 -1
  12. {janito-2.9.0 → janito-2.12.0}/janito/cli/main_cli.py +8 -1
  13. janito-2.12.0/janito/docs/GETTING_STARTED.md +117 -0
  14. {janito-2.9.0 → janito-2.12.0}/janito/drivers/azure_openai/driver.py +7 -0
  15. {janito-2.9.0 → janito-2.12.0}/janito/drivers/openai/driver.py +10 -2
  16. janito-2.12.0/janito/drivers/zai/__init__.py +1 -0
  17. janito-2.12.0/janito/drivers/zai/driver.py +465 -0
  18. janito-2.12.0/janito/mkdocs.yml +40 -0
  19. {janito-2.9.0 → janito-2.12.0}/janito/provider_registry.py +14 -4
  20. {janito-2.9.0 → janito-2.12.0}/janito/providers/__init__.py +2 -1
  21. janito-2.12.0/janito/providers/alibaba/__init__.py +0 -0
  22. janito-2.12.0/janito/providers/alibaba/model_info.py +40 -0
  23. janito-2.12.0/janito/providers/alibaba/provider.py +102 -0
  24. {janito-2.9.0 → janito-2.12.0}/janito/providers/anthropic/provider.py +6 -0
  25. {janito-2.9.0 → janito-2.12.0}/janito/providers/azure_openai/provider.py +6 -0
  26. {janito-2.9.0 → janito-2.12.0}/janito/providers/deepseek/provider.py +6 -0
  27. {janito-2.9.0 → janito-2.12.0}/janito/providers/google/provider.py +6 -0
  28. {janito-2.9.0 → janito-2.12.0}/janito/providers/moonshotai/model_info.py +11 -0
  29. {janito-2.9.0 → janito-2.12.0}/janito/providers/moonshotai/provider.py +7 -1
  30. {janito-2.9.0 → janito-2.12.0}/janito/providers/openai/provider.py +6 -0
  31. janito-2.12.0/janito/providers/zai/__init__.py +1 -0
  32. janito-2.12.0/janito/providers/zai/model_info.py +55 -0
  33. janito-2.12.0/janito/providers/zai/provider.py +128 -0
  34. janito-2.12.0/janito/providers/zai/schema_generator.py +133 -0
  35. {janito-2.9.0 → janito-2.12.0/janito.egg-info}/PKG-INFO +1 -1
  36. {janito-2.9.0 → janito-2.12.0}/janito.egg-info/SOURCES.txt +15 -4
  37. {janito-2.9.0 → janito-2.12.0}/mkdocs.yml +1 -1
  38. janito-2.12.0/tests/test_cli_list_providers_alibaba.py +14 -0
  39. janito-2.12.0/tests/test_provider_alibaba.py +12 -0
  40. janito-2.9.0/CNAME +0 -1
  41. janito-2.9.0/janito/providers/groq/__init__.py +0 -1
  42. janito-2.9.0/janito/providers/groq/model_info.py +0 -45
  43. janito-2.9.0/janito/providers/groq/provider.py +0 -76
  44. {janito-2.9.0 → janito-2.12.0}/.codespellrc +0 -0
  45. {janito-2.9.0 → janito-2.12.0}/.gitattributes +0 -0
  46. {janito-2.9.0 → janito-2.12.0}/.github/workflows/python-app.yml +0 -0
  47. {janito-2.9.0 → janito-2.12.0}/.gitignore +0 -0
  48. {janito-2.9.0 → janito-2.12.0}/.pre-commit-config.yaml +0 -0
  49. {janito-2.9.0 → janito-2.12.0}/.secrets.baseline +0 -0
  50. {janito-2.9.0 → janito-2.12.0}/.vscode/settings.json +0 -0
  51. {janito-2.9.0 → janito-2.12.0}/LICENSE +0 -0
  52. {janito-2.9.0 → janito-2.12.0}/README-dev.md +0 -0
  53. {janito-2.9.0 → janito-2.12.0}/README.md +0 -0
  54. {janito-2.9.0 → janito-2.12.0}/UPDATING_DOCS.md +0 -0
  55. {janito-2.9.0 → janito-2.12.0}/adding_mcp.txt +0 -0
  56. {janito-2.9.0 → janito-2.12.0}/docs/DIV.md +0 -0
  57. {janito-2.9.0 → janito-2.12.0}/docs/Interfaces.txt +0 -0
  58. {janito-2.9.0 → janito-2.12.0}/docs/TOOLBAR-STYLING.md +0 -0
  59. {janito-2.9.0 → janito-2.12.0}/docs/about/costs.md +0 -0
  60. {janito-2.9.0 → janito-2.12.0}/docs/about/vs-webchats.md +0 -0
  61. {janito-2.9.0 → janito-2.12.0}/docs/about/why.md +0 -0
  62. {janito-2.9.0 → janito-2.12.0}/docs/alternatives.md +0 -0
  63. {janito-2.9.0 → janito-2.12.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  64. {janito-2.9.0 → janito-2.12.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  65. {janito-2.9.0 → janito-2.12.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  66. {janito-2.9.0 → janito-2.12.0}/docs/code_intelligence/our-approach.md +0 -0
  67. {janito-2.9.0 → janito-2.12.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  68. {janito-2.9.0 → janito-2.12.0}/docs/concepts/analysis-style.md +0 -0
  69. {janito-2.9.0 → janito-2.12.0}/docs/concepts/human-guided-ai.md +0 -0
  70. {janito-2.9.0 → janito-2.12.0}/docs/concepts/index.md +0 -0
  71. {janito-2.9.0 → janito-2.12.0}/docs/concepts/language-model-clients.md +0 -0
  72. {janito-2.9.0 → janito-2.12.0}/docs/concepts/prompt-design-style.md +0 -0
  73. {janito-2.9.0 → janito-2.12.0}/docs/deepseek-setup.md +0 -0
  74. {janito-2.9.0 → janito-2.12.0}/docs/driver-flow.md +0 -0
  75. {janito-2.9.0 → janito-2.12.0}/docs/driver-request-cancellation.md +0 -0
  76. {janito-2.9.0 → janito-2.12.0}/docs/drivers/events.md +0 -0
  77. {janito-2.9.0 → janito-2.12.0}/docs/drivers.md +0 -0
  78. {janito-2.9.0 → janito-2.12.0}/docs/event-bus.md +0 -0
  79. {janito-2.9.0 → janito-2.12.0}/docs/guides/configuration.md +0 -0
  80. {janito-2.9.0 → janito-2.12.0}/docs/guides/developing.md +0 -0
  81. {janito-2.9.0 → janito-2.12.0}/docs/guides/disabled-tools.md +0 -0
  82. {janito-2.9.0 → janito-2.12.0}/docs/guides/installation.md +0 -0
  83. {janito-2.9.0 → janito-2.12.0}/docs/guides/profiles.md +0 -0
  84. {janito-2.9.0 → janito-2.12.0}/docs/guides/prompting/README.md +0 -0
  85. {janito-2.9.0 → janito-2.12.0}/docs/guides/single-shot-terminal.md +0 -0
  86. {janito-2.9.0 → janito-2.12.0}/docs/guides/tools-developer-guide.md +0 -0
  87. {janito-2.9.0 → janito-2.12.0}/docs/guides/using.md +0 -0
  88. {janito-2.9.0 → janito-2.12.0}/docs/guides/using_tools.md +0 -0
  89. {janito-2.9.0 → janito-2.12.0}/docs/imgs/code-generation-observability.png +0 -0
  90. {janito-2.9.0 → janito-2.12.0}/docs/imgs/code_generation_observability.png +0 -0
  91. {janito-2.9.0 → janito-2.12.0}/docs/imgs/happy-programmer.png +0 -0
  92. {janito-2.9.0 → janito-2.12.0}/docs/imgs/happy-programmer.svg +0 -0
  93. {janito-2.9.0 → janito-2.12.0}/docs/imgs/terminal-one-shot.png +0 -0
  94. {janito-2.9.0 → janito-2.12.0}/docs/imgs/terminal-shell.png +0 -0
  95. {janito-2.9.0 → janito-2.12.0}/docs/imgs/terminal_one_shot.png +0 -0
  96. {janito-2.9.0 → janito-2.12.0}/docs/imgs/terminal_shell.png +0 -0
  97. {janito-2.9.0 → janito-2.12.0}/docs/index.md +0 -0
  98. {janito-2.9.0 → janito-2.12.0}/docs/llm-drivers-required-config.md +0 -0
  99. {janito-2.9.0 → janito-2.12.0}/docs/llm-drivers.md +0 -0
  100. {janito-2.9.0 → janito-2.12.0}/docs/meta/developer-toolchain.md +0 -0
  101. {janito-2.9.0 → janito-2.12.0}/docs/meta/quality-checks.txt +0 -0
  102. {janito-2.9.0 → janito-2.12.0}/docs/reference/api.md +0 -0
  103. {janito-2.9.0 → janito-2.12.0}/docs/reference/azure-openai.md +0 -0
  104. {janito-2.9.0 → janito-2.12.0}/docs/reference/message-handler-model.md +0 -0
  105. {janito-2.9.0 → janito-2.12.0}/docs/reference/rich-message-handler.md +0 -0
  106. {janito-2.9.0 → janito-2.12.0}/docs/security.md +0 -0
  107. {janito-2.9.0 → janito-2.12.0}/docs/tools/search-text.md +0 -0
  108. {janito-2.9.0 → janito-2.12.0}/docs/tools-index.md +0 -0
  109. {janito-2.9.0 → janito-2.12.0}/docs/tools-natural-results.md +0 -0
  110. {janito-2.9.0 → janito-2.12.0}/docs/tools-precision.md +0 -0
  111. {janito-2.9.0 → janito-2.12.0}/git_diff.txt +0 -0
  112. {janito-2.9.0 → janito-2.12.0}/github_diff +0 -0
  113. {janito-2.9.0 → janito-2.12.0}/janito/__init__.py +0 -0
  114. {janito-2.9.0 → janito-2.12.0}/janito/__main__.py +0 -0
  115. {janito-2.9.0 → janito-2.12.0}/janito/_version.py +0 -0
  116. {janito-2.9.0 → janito-2.12.0}/janito/agent/setup_agent.py +0 -0
  117. {janito-2.9.0 → janito-2.12.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  118. {janito-2.9.0 → janito-2.12.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  119. {janito-2.9.0 → janito-2.12.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  120. {janito-2.9.0 → janito-2.12.0}/janito/cli/__init__.py +0 -0
  121. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/bindings.py +0 -0
  122. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  123. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  124. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
  125. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  126. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  127. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  128. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  129. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  130. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  131. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  132. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  133. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  134. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  135. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  136. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  137. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  138. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  139. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  140. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  141. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  142. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  143. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  144. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  145. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  146. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  147. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  148. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  149. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  150. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  151. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  152. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  153. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  154. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  155. {janito-2.9.0 → janito-2.12.0}/janito/cli/chat_mode/toolbar.py +0 -0
  156. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/list_config.py +0 -0
  157. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/list_models.py +0 -0
  158. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  159. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/list_providers.py +0 -0
  160. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/list_tools.py +0 -0
  161. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/model_selection.py +0 -0
  162. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/model_utils.py +0 -0
  163. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  164. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/show_config.py +0 -0
  165. {janito-2.9.0 → janito-2.12.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  166. {janito-2.9.0 → janito-2.12.0}/janito/cli/config.py +0 -0
  167. {janito-2.9.0 → janito-2.12.0}/janito/cli/console.py +0 -0
  168. {janito-2.9.0 → janito-2.12.0}/janito/cli/core/__init__.py +0 -0
  169. {janito-2.9.0 → janito-2.12.0}/janito/cli/core/event_logger.py +0 -0
  170. {janito-2.9.0 → janito-2.12.0}/janito/cli/core/getters.py +0 -0
  171. {janito-2.9.0 → janito-2.12.0}/janito/cli/core/setters.py +0 -0
  172. {janito-2.9.0 → janito-2.12.0}/janito/cli/core/unsetters.py +0 -0
  173. {janito-2.9.0 → janito-2.12.0}/janito/cli/main.py +0 -0
  174. {janito-2.9.0 → janito-2.12.0}/janito/cli/prompt_core.py +0 -0
  175. {janito-2.9.0 → janito-2.12.0}/janito/cli/prompt_handler.py +0 -0
  176. {janito-2.9.0 → janito-2.12.0}/janito/cli/prompt_setup.py +0 -0
  177. {janito-2.9.0 → janito-2.12.0}/janito/cli/rich_terminal_reporter.py +0 -0
  178. {janito-2.9.0 → janito-2.12.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  179. {janito-2.9.0 → janito-2.12.0}/janito/cli/single_shot_mode/handler.py +0 -0
  180. {janito-2.9.0 → janito-2.12.0}/janito/cli/utils.py +0 -0
  181. {janito-2.9.0 → janito-2.12.0}/janito/cli/verbose_output.py +0 -0
  182. {janito-2.9.0 → janito-2.12.0}/janito/config.py +0 -0
  183. {janito-2.9.0 → janito-2.12.0}/janito/config_manager.py +0 -0
  184. {janito-2.9.0 → janito-2.12.0}/janito/conversation_history.py +0 -0
  185. {janito-2.9.0 → janito-2.12.0}/janito/dir_walk_utils.py +0 -0
  186. {janito-2.9.0 → janito-2.12.0}/janito/driver_events.py +0 -0
  187. {janito-2.9.0 → janito-2.12.0}/janito/drivers/dashscope.bak.zip +0 -0
  188. {janito-2.9.0 → janito-2.12.0}/janito/drivers/driver_registry.py +0 -0
  189. {janito-2.9.0 → janito-2.12.0}/janito/drivers/openai/README.md +0 -0
  190. {janito-2.9.0 → janito-2.12.0}/janito/drivers/openai_responses.bak.zip +0 -0
  191. {janito-2.9.0 → janito-2.12.0}/janito/event_bus/__init__.py +0 -0
  192. {janito-2.9.0 → janito-2.12.0}/janito/event_bus/bus.py +0 -0
  193. {janito-2.9.0 → janito-2.12.0}/janito/event_bus/event.py +0 -0
  194. {janito-2.9.0 → janito-2.12.0}/janito/event_bus/handler.py +0 -0
  195. {janito-2.9.0 → janito-2.12.0}/janito/event_bus/queue_bus.py +0 -0
  196. {janito-2.9.0 → janito-2.12.0}/janito/exceptions.py +0 -0
  197. {janito-2.9.0 → janito-2.12.0}/janito/formatting.py +0 -0
  198. {janito-2.9.0 → janito-2.12.0}/janito/formatting_token.py +0 -0
  199. {janito-2.9.0 → janito-2.12.0}/janito/gitignore_utils.py +0 -0
  200. {janito-2.9.0 → janito-2.12.0}/janito/i18n/__init__.py +0 -0
  201. {janito-2.9.0 → janito-2.12.0}/janito/i18n/messages.py +0 -0
  202. {janito-2.9.0 → janito-2.12.0}/janito/i18n/pt.py +0 -0
  203. {janito-2.9.0 → janito-2.12.0}/janito/llm/README.md +0 -0
  204. {janito-2.9.0 → janito-2.12.0}/janito/llm/__init__.py +0 -0
  205. {janito-2.9.0 → janito-2.12.0}/janito/llm/agent.py +0 -0
  206. {janito-2.9.0 → janito-2.12.0}/janito/llm/auth.py +0 -0
  207. {janito-2.9.0 → janito-2.12.0}/janito/llm/driver.py +0 -0
  208. {janito-2.9.0 → janito-2.12.0}/janito/llm/driver_config.py +0 -0
  209. {janito-2.9.0 → janito-2.12.0}/janito/llm/driver_config_builder.py +0 -0
  210. {janito-2.9.0 → janito-2.12.0}/janito/llm/driver_input.py +0 -0
  211. {janito-2.9.0 → janito-2.12.0}/janito/llm/message_parts.py +0 -0
  212. {janito-2.9.0 → janito-2.12.0}/janito/llm/model.py +0 -0
  213. {janito-2.9.0 → janito-2.12.0}/janito/llm/provider.py +0 -0
  214. {janito-2.9.0 → janito-2.12.0}/janito/perf_singleton.py +0 -0
  215. {janito-2.9.0 → janito-2.12.0}/janito/performance_collector.py +0 -0
  216. {janito-2.9.0 → janito-2.12.0}/janito/platform_discovery.py +0 -0
  217. {janito-2.9.0 → janito-2.12.0}/janito/provider_config.py +0 -0
  218. {janito-2.9.0 → janito-2.12.0}/janito/providers/anthropic/model_info.py +0 -0
  219. {janito-2.9.0 → janito-2.12.0}/janito/providers/azure_openai/model_info.py +0 -0
  220. {janito-2.9.0 → janito-2.12.0}/janito/providers/dashscope.bak.zip +0 -0
  221. {janito-2.9.0 → janito-2.12.0}/janito/providers/deepseek/__init__.py +0 -0
  222. {janito-2.9.0 → janito-2.12.0}/janito/providers/deepseek/model_info.py +0 -0
  223. {janito-2.9.0 → janito-2.12.0}/janito/providers/google/__init__.py +0 -0
  224. {janito-2.9.0 → janito-2.12.0}/janito/providers/google/model_info.py +0 -0
  225. {janito-2.9.0 → janito-2.12.0}/janito/providers/moonshotai/__init__.py +0 -0
  226. {janito-2.9.0 → janito-2.12.0}/janito/providers/openai/__init__.py +0 -0
  227. {janito-2.9.0 → janito-2.12.0}/janito/providers/openai/model_info.py +0 -0
  228. {janito-2.9.0 → janito-2.12.0}/janito/providers/openai/schema_generator.py +0 -0
  229. {janito-2.9.0 → janito-2.12.0}/janito/providers/registry.py +0 -0
  230. {janito-2.9.0 → janito-2.12.0}/janito/report_events.py +0 -0
  231. {janito-2.9.0 → janito-2.12.0}/janito/shell.bak.zip +0 -0
  232. {janito-2.9.0 → janito-2.12.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  233. {janito-2.9.0 → janito-2.12.0}/janito/tools/README.md +0 -0
  234. {janito-2.9.0 → janito-2.12.0}/janito/tools/__init__.py +0 -0
  235. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/__init__.py +0 -0
  236. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/__init__.py +0 -0
  237. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/adapter.py +0 -0
  238. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/ask_user.py +0 -0
  239. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/copy_file.py +0 -0
  240. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/create_directory.py +0 -0
  241. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/create_file.py +0 -0
  242. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  243. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/fetch_url.py +0 -0
  244. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/find_files.py +0 -0
  245. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  246. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  247. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  248. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  249. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  250. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  251. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/move_file.py +0 -0
  252. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  253. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/open_url.py +0 -0
  254. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/python_code_run.py +0 -0
  255. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/python_command_run.py +0 -0
  256. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/python_file_run.py +0 -0
  257. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/read_files.py +0 -0
  258. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/remove_directory.py +0 -0
  259. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/remove_file.py +0 -0
  260. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  261. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
  262. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
  263. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  264. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/search_text/core.py +0 -0
  265. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  266. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  267. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  268. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  269. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  270. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  271. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  272. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  273. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  274. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  275. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  276. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  277. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  278. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  279. {janito-2.9.0 → janito-2.12.0}/janito/tools/adapters/local/view_file.py +0 -0
  280. {janito-2.9.0 → janito-2.12.0}/janito/tools/disabled_tools.py +0 -0
  281. {janito-2.9.0 → janito-2.12.0}/janito/tools/inspect_registry.py +0 -0
  282. {janito-2.9.0 → janito-2.12.0}/janito/tools/outline_file.bak.zip +0 -0
  283. {janito-2.9.0 → janito-2.12.0}/janito/tools/path_security.py +0 -0
  284. {janito-2.9.0 → janito-2.12.0}/janito/tools/permissions.py +0 -0
  285. {janito-2.9.0 → janito-2.12.0}/janito/tools/permissions_parse.py +0 -0
  286. {janito-2.9.0 → janito-2.12.0}/janito/tools/tool_base.py +0 -0
  287. {janito-2.9.0 → janito-2.12.0}/janito/tools/tool_events.py +0 -0
  288. {janito-2.9.0 → janito-2.12.0}/janito/tools/tool_run_exception.py +0 -0
  289. {janito-2.9.0 → janito-2.12.0}/janito/tools/tool_use_tracker.py +0 -0
  290. {janito-2.9.0 → janito-2.12.0}/janito/tools/tool_utils.py +0 -0
  291. {janito-2.9.0 → janito-2.12.0}/janito/tools/tools_adapter.py +0 -0
  292. {janito-2.9.0 → janito-2.12.0}/janito/tools/tools_schema.py +0 -0
  293. {janito-2.9.0 → janito-2.12.0}/janito/utils.py +0 -0
  294. {janito-2.9.0 → janito-2.12.0}/janito.egg-info/dependency_links.txt +0 -0
  295. {janito-2.9.0 → janito-2.12.0}/janito.egg-info/entry_points.txt +0 -0
  296. {janito-2.9.0 → janito-2.12.0}/janito.egg-info/requires.txt +0 -0
  297. {janito-2.9.0 → janito-2.12.0}/janito.egg-info/top_level.txt +0 -0
  298. {janito-2.9.0 → janito-2.12.0}/pyproject.toml +0 -0
  299. {janito-2.9.0 → janito-2.12.0}/pytest.ini +0 -0
  300. {janito-2.9.0 → janito-2.12.0}/requirements-dev.txt +0 -0
  301. {janito-2.9.0 → janito-2.12.0}/requirements.txt +0 -0
  302. {janito-2.9.0 → janito-2.12.0}/setup.cfg +0 -0
  303. {janito-2.9.0 → janito-2.12.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  304. {janito-2.9.0 → janito-2.12.0}/tests/adapters/local/test_read_files.py +0 -0
  305. {janito-2.9.0 → janito-2.12.0}/tests/test_cli_list_models.py +0 -0
  306. {janito-2.9.0 → janito-2.12.0}/tests/test_cli_list_providers.py +0 -0
  307. {janito-2.9.0 → janito-2.12.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
  308. {janito-2.9.0 → janito-2.12.0}/tests/test_cli_version.py +0 -0
  309. {janito-2.9.0 → janito-2.12.0}/tests/test_disabled_tools.py +0 -0
  310. {janito-2.9.0 → janito-2.12.0}/tests/test_provider_moonshotai.py +0 -0
  311. {janito-2.9.0 → janito-2.12.0}/tools/release.py +0 -0
  312. {janito-2.9.0 → janito-2.12.0}/tox.ini +0 -0
@@ -3,23 +3,47 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
+
7
+ ## [2.11.0] - 2025-08-04
8
+
9
+ ### Added
10
+
11
+ - **Z.AI Provider**: Added complete support for Z.AI with GLM-4.5, GLM-4, and GLM-4V models
12
+ - GLM-4.5: 128k context with thinking support for advanced reasoning
13
+ - GLM-4: General-purpose model with 128k context
14
+ - GLM-4V: Vision model for image understanding with 128k context
15
+ - **Alibaba Cloud Provider**: Added support for Alibaba Cloud's Qwen models
16
+ - qwen-turbo, qwen-plus, qwen-max, and qwen3-coder-plus models
17
+ - Updated supported providers documentation to include new Z.AI and Alibaba Cloud providers
18
+
6
19
  ### Changed
7
- - Updated project URLs, author email, and documentation for migration to ikignosis organization.
8
- - Updated repository links in documentation and configuration files to point to ikignosis GitHub organization.
9
- - Changed maintainer email in provider modules to janito@ikignosis.org.
10
- - Updated homepage and repo_url in pyproject.toml and mkdocs.yml to new organization URLs.
11
20
 
21
+ - Enhanced provider registry with new visual indicators and improved model listing
22
+ - Updated documentation to reflect new provider additions and model availability
23
+
24
+ ### Removed
25
+
26
+ - Removed deprecated PROVIDERS.md file from janito/docs (content merged into supported-providers-models.md)
27
+
28
+ ## [2.9.0] - 2025-07-16
12
29
  ### Added
13
- - Added CNAME file for docs.ikignosis.org custom domain.
14
- - Added CLI command to list available system prompt profiles (`list_profiles.py`).
15
- - Added privilege status message utility (`_priv_status.py`).
30
+ - Added new `kimi-k2-turbo-preview` model to MoonshotAI provider
31
+ - Added visual indicators for default models in provider registry with star icons
16
32
 
17
- ### Style
18
- - Fixed formatting in CLI command and privilege status modules.
33
+ ### Changed
34
+ - Updated default MoonshotAI model from `kimi-k2-0711-preview` to `kimi-k2-turbo-preview`
35
+ - Updated all documentation to reflect new MoonshotAI model names and recommendations
36
+ - Updated project URLs, author email, and documentation for migration to ikignosis organization
37
+ - Updated repository links in documentation and configuration files to point to ikignosis GitHub organization
38
+ - Changed maintainer email in provider modules to janito@ikignosis.org
39
+ - Updated homepage and repo_url in pyproject.toml and mkdocs.yml to new organization URLs
40
+
41
+ ### Fixed
42
+ - Fixed duplicate entries in supported providers documentation
43
+ - Fixed formatting in CLI command and privilege status modules
19
44
 
20
45
  ## [2.8.0] - 2025-07-16
21
46
  ### Added
22
- - **Groq provider**: New provider with support for moonshotai/kimi-k2-instruct model.
23
47
  - **Parallel tool calls**: Enabled for OpenAI provider when tools are available.
24
48
  - **No-tools mode**: New CLI option to disable all tool usage.
25
49
  - **Disabled tools functionality**: Support for selectively disabling specific tools.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.9.0
3
+ Version: 2.12.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
@@ -32,6 +32,7 @@ You can use these commands at any time (prefix with `/` or just type the name):
32
32
  | `/lang <code>` | Change the interface language (e.g., `/lang pt`, `/lang en`) |
33
33
  | `/clear` | Clear the terminal screen |
34
34
  | `/multi` | Enter multiline input mode (write multi-line text, Esc+Enter) |
35
+ | `--multi` (CLI arg) | Start chat mode with multiline input as default (no need for /multi) |
35
36
  | `/config` | Show or set configuration (see: `/config show`, `/config set local|global key=value`) |
36
37
  | `/edit <filename>` | Open a file in the browser-based editor |
37
38
  | `/view` | Print the current LLM conversation history |
@@ -35,7 +35,8 @@ janito -p moonshotai "Your prompt here"
35
35
 
36
36
  Janito supports the following MoonshotAI models:
37
37
 
38
- - `kimi-k2-0711-preview` (default) - Advanced reasoning model with 128k context window
38
+ - `kimi-k2-turbo-preview` (default) - Advanced reasoning model with 128k context window
39
+ - `kimi-k2-turbo-preview` - Turbo version of the advanced reasoning model with 128k context window
39
40
  - `kimi-k1-8k` - Standard model with 8k context window
40
41
  - `kimi-k1-32k` - Standard model with 32k context window
41
42
  - `kimi-k1-128k` - Standard model with 128k context window
@@ -20,6 +20,7 @@ These options are useful for one-off runs, scripting, or experimentation. They t
20
20
  | `--verbose-agent` | Print info messages for agent event and message part handling. |
21
21
  | `-z`, `--zero` | IDE zero mode: disables system prompt & all tools for raw LLM interaction |
22
22
  | `-u`, `--unrestricted-paths` | Disable path security: allow tool arguments to use any file/directory path (DANGEROUS). See [Security](../security.md) for details. |
23
+ | `--multi` | Start chat mode with multiline input as default (no need for /multi command) |
23
24
  | `-r`, `--read` | Enable tools that require read permissions (default: off) |
24
25
  | `-w`, `--write` | Enable tools that require write permissions (default: off) |
25
26
  | `-x`, `--exec` | Enable execution/run tools (allows running code or shell tools from the CLI). (default: off) |
@@ -50,7 +51,7 @@ janito [options] [prompt]
50
51
  janito -p openai -m gpt-3.5-turbo "Your prompt here"
51
52
  janito -c myproject -p openai "Prompt for my project (uses ~/.janito/configs/myproject.json)"
52
53
  janito --list-tools
53
- janito --web # Enable clickable file links via web viewer
54
+ janito --multi # Start chat mode with multiline input as default
54
55
  janito -u -x --read --write "Run a tool with unrestricted paths (DANGEROUS)"
55
56
  ```
56
57
 
@@ -3,26 +3,46 @@
3
3
  This page lists the supported providers and their available models.
4
4
 
5
5
  ## OpenAI
6
+
6
7
  - GPT-3.5 Turbo
7
8
  - GPT-4
8
9
  - GPT-4 Turbo
9
10
 
10
11
  ## Google
12
+
11
13
  - Gemini Pro
12
14
  - Gemini 1.5 Pro
13
15
 
14
16
  ## Anthropic
17
+
15
18
  - Claude 2
16
19
  - Claude 3 Opus
17
20
  - Claude 3 Sonnet
18
21
  - Claude 3 Haiku
19
22
 
20
23
  ## MoonshotAI
21
- - Moonshot-v1-8k
22
- - Moonshot-v1-32k
23
24
 
24
- ## Groq
25
+ - kimi-k2-turbo-preview
26
+ - kimi-k2-turbo-preview
27
+ - kimi-k1-8k
28
+ - kimi-k1-32k
29
+ - kimi-k1-128k
30
+
25
31
  - Llama-3-8b-8192
26
32
  - Llama-3-70b-8192
27
33
 
34
+ ## Alibaba
35
+
36
+ - qwen-turbo
37
+ - qwen-plus
38
+ - qwen-max
39
+ - qwen3-coder-plus
40
+ - qwen3-coder-480b-a35b-instruct
41
+
42
+ ## Z.AI
43
+
44
+ - glm-4.5
45
+ - glm-4
46
+ - glm-4v
47
+
28
48
  <!-- Removed links to model_info.py files for all providers to avoid broken references. -->
@@ -0,0 +1,149 @@
1
+ # Janito CLI
2
+
3
+ A powerful command-line tool for running LLM-powered workflows with built-in tool execution capabilities.
4
+
5
+ ## Quick Start
6
+
7
+ ### Installation
8
+
9
+ ```bash
10
+ pip install janito
11
+ ```
12
+
13
+ ### First-Time Setup
14
+
15
+ 1. **Get your API key**: Sign up at [Moonshot AI](https://platform.moonshot.cn/) and get your API key
16
+ 2. **Set your API key**:
17
+ ```bash
18
+ janito --set-api-key YOUR_MOONSHOT_API_KEY -p moonshotai
19
+ ```
20
+
21
+ ### Basic Usage
22
+
23
+ **MoonshotAI (Recommended - Default Provider)**
24
+ ```bash
25
+ # Using the default provider (moonshotai) and model
26
+ janito "Create a Python script that reads a CSV file"
27
+
28
+ # Using a specific MoonshotAI model
29
+ janito -m kimi-k1-8k "Explain quantum computing"
30
+ ```
31
+
32
+ **Other Providers**
33
+ ```bash
34
+ # OpenAI
35
+ janito -p openai -m gpt-4 "Write a React component"
36
+
37
+ # Anthropic
38
+ janito -p anthropic -m claude-3-5-sonnet-20241022 "Analyze this code"
39
+
40
+ # Google
41
+ janito -p google -m gemini-2.0-flash-exp "Generate unit tests"
42
+ ```
43
+
44
+ ### Interactive Chat Mode
45
+
46
+ Start an interactive session:
47
+ ```bash
48
+ janito --chat
49
+ ```
50
+
51
+ In chat mode, you can:
52
+
53
+ - Have multi-turn conversations
54
+ - Execute code and commands
55
+ - Read and write files
56
+ - Use built-in tools
57
+
58
+ ### Available Commands
59
+
60
+ - `janito --list-providers` - List all supported providers
61
+ - `janito --list-models` - List all available models
62
+ - `janito --list-tools` - List available tools
63
+ - `janito --show-config` - Show current configuration
64
+
65
+ ### Configuration
66
+
67
+ Set default provider and model:
68
+ ```bash
69
+ janito --set provider=moonshotai
70
+ janito --set model=kimi-k1-8k
71
+ ```
72
+
73
+ ## Providers
74
+
75
+ ### MoonshotAI (Recommended)
76
+
77
+ - **Models**: kimi-k1-8k, kimi-k1-32k, kimi-k1-128k, kimi-k2-turbo-preview
78
+ - **Strengths**: Excellent Chinese/English support, competitive pricing, fast responses
79
+ - **Setup**: Get API key from [Moonshot AI Platform](https://platform.moonshot.cn/)
80
+
81
+ ### OpenAI
82
+
83
+ - **Models**: gpt-4, gpt-4-turbo, gpt-3.5-turbo
84
+ - **Setup**: Get API key from [OpenAI Platform](https://platform.openai.com/)
85
+
86
+ ### Anthropic
87
+
88
+ - **Models**: claude-3-5-sonnet-20241022, claude-3-opus-20240229
89
+ - **Setup**: Get API key from [Anthropic Console](https://console.anthropic.com/)
90
+
91
+ ### Google
92
+
93
+ - **Models**: gemini-2.0-flash-exp, gemini-1.5-pro
94
+ - **Setup**: Get API key from [Google AI Studio](https://makersuite.google.com/)
95
+
96
+ ## Advanced Features
97
+
98
+ ### Tool Usage
99
+
100
+ Janito includes powerful built-in tools for:
101
+
102
+ - File operations (read, write, search)
103
+ - Code execution
104
+ - Web scraping
105
+ - System commands
106
+ - And more...
107
+
108
+ ### Profiles and Roles
109
+ Use predefined system prompts:
110
+ ```bash
111
+ janito --profile developer "Create a REST API"
112
+ janito --role python-expert "Optimize this algorithm"
113
+ ```
114
+
115
+ ### Environment Variables
116
+ You can also configure via environment variables:
117
+ ```bash
118
+ export MOONSHOTAI_API_KEY=your_key_here
119
+ export JANITO_PROVIDER=moonshotai
120
+ export JANITO_MODEL=kimi-k1-8k
121
+ ```
122
+
123
+ ## Examples
124
+
125
+ ### Code Generation
126
+ ```bash
127
+ janito "Create a Python FastAPI application with user authentication"
128
+ ```
129
+
130
+ ### File Analysis
131
+ ```bash
132
+ janito "Analyze the performance bottlenecks in my_app.py"
133
+ ```
134
+
135
+ ### Data Processing
136
+ ```bash
137
+ janito "Process this CSV file and generate summary statistics"
138
+ ```
139
+
140
+ ### Web Development
141
+ ```bash
142
+ janito "Create a responsive landing page with Tailwind CSS"
143
+ ```
144
+
145
+ ## Support
146
+
147
+ - **Documentation**: Check individual provider directories for detailed setup guides
148
+ - **Issues**: Report bugs and feature requests on GitHub
149
+ - **Discord**: Join our community for help and discussions
@@ -52,8 +52,8 @@ class ChatScriptRunner:
52
52
  inputs: List[str],
53
53
  *,
54
54
  console: Optional[Console] = None,
55
- provider: str = "openai",
56
- model: str = "gpt-4.1",
55
+ provider: str = "moonshotai",
56
+ model: str = "kimi-k1-8k",
57
57
  use_real_agent: bool = True,
58
58
  **chat_session_kwargs,
59
59
  ) -> None:
@@ -109,6 +109,9 @@ class ChatSession:
109
109
  )
110
110
  self._support = False
111
111
 
112
+ # Check if multi-line mode should be enabled by default
113
+ self.multi_line_mode = getattr(args, "multi", False) if args else False
114
+
112
115
  def _select_profile_and_role(self, args, role):
113
116
  profile = getattr(args, "profile", None) if args is not None else None
114
117
  role_arg = getattr(args, "role", None) if args is not None else None
@@ -213,6 +216,11 @@ class ChatSession:
213
216
  f"[green]Working Dir:[/green] {cwd_display} | {priv_status}"
214
217
  )
215
218
 
219
+ if self.multi_line_mode:
220
+ self.console.print(
221
+ "[blue]Multi-line input mode enabled (Esc+Enter or Ctrl+D to submit)[/blue]"
222
+ )
223
+
216
224
  from janito.cli.chat_mode.shell.commands._priv_check import (
217
225
  user_has_any_privileges,
218
226
  )
@@ -305,6 +313,7 @@ class ChatSession:
305
313
  bottom_toolbar=lambda: get_toolbar_func(
306
314
  self.performance_collector, 0, self.shell_state
307
315
  )(),
316
+ multiline=self.multi_line_mode,
308
317
  )
309
318
 
310
319
  def _handle_input(self, session):
@@ -0,0 +1,51 @@
1
+ """
2
+ Module for guessing the provider based on model names.
3
+ """
4
+
5
+ from janito.providers.registry import LLMProviderRegistry
6
+
7
+
8
+ def guess_provider_from_model(model_name: str) -> str:
9
+ """
10
+ Guess the provider based on the model name.
11
+
12
+ Args:
13
+ model_name: The name of the model to guess the provider for
14
+
15
+ Returns:
16
+ The provider name if a match is found, None otherwise
17
+ """
18
+ if not model_name:
19
+ return None
20
+
21
+ model_name = model_name.lower()
22
+
23
+ # Check each provider's models
24
+ for provider_name in LLMProviderRegistry.list_providers():
25
+ provider_class = LLMProviderRegistry.get(provider_name)
26
+ if not provider_class:
27
+ continue
28
+
29
+ # Get model specs for this provider
30
+ try:
31
+ if hasattr(provider_class, 'MODEL_SPECS'):
32
+ model_specs = provider_class.MODEL_SPECS
33
+ for spec_model_name in model_specs.keys():
34
+ if spec_model_name.lower() == model_name:
35
+ return provider_name
36
+
37
+ # Handle special cases like moonshotai
38
+ if provider_name == "moonshotai":
39
+ try:
40
+ from janito.providers.moonshotai.model_info import MOONSHOTAI_MODEL_SPECS
41
+ for spec_model_name in MOONSHOTAI_MODEL_SPECS.keys():
42
+ if spec_model_name.lower() == model_name:
43
+ return "moonshotai"
44
+ except ImportError:
45
+ pass
46
+
47
+ except Exception:
48
+ # Skip providers that have issues accessing model specs
49
+ continue
50
+
51
+ return None
@@ -2,6 +2,7 @@
2
2
 
3
3
  from janito.llm.driver_config import LLMDriverConfig
4
4
  from janito.provider_config import get_config_provider
5
+ from janito.cli.core.model_guesser import guess_provider_from_model as _guess_provider_from_model
5
6
  from janito.cli.verbose_output import print_verbose_info
6
7
 
7
8
 
@@ -14,6 +15,17 @@ def _choose_provider(args):
14
15
  "Default provider", provider, style="magenta", align_content=True
15
16
  )
16
17
  elif provider is None:
18
+ # Try to guess provider based on model name if -m is provided
19
+ model = getattr(args, "model", None)
20
+ if model:
21
+ guessed_provider = _guess_provider_from_model(model)
22
+ if guessed_provider:
23
+ if getattr(args, "verbose", False):
24
+ print_verbose_info(
25
+ "Guessed provider", guessed_provider, style="magenta", align_content=True
26
+ )
27
+ return guessed_provider
28
+
17
29
  print(
18
30
  "Error: No provider selected and no provider found in config. Please set a provider using '-p PROVIDER', '--set provider=name', or configure a provider."
19
31
  )
@@ -191,4 +203,4 @@ def handle_runner(
191
203
 
192
204
 
193
205
  def get_prompt_mode(args):
194
- return "single_shot" if getattr(args, "user_prompt", None) else "chat_mode"
206
+ return "single_shot" if getattr(args, "user_prompt", None) else "chat_mode"
@@ -21,6 +21,13 @@ definition = [
21
21
  "help": "Disable path security: allow tool arguments to use any file/directory path (DANGEROUS)",
22
22
  },
23
23
  ),
24
+ (
25
+ ["--multi"],
26
+ {
27
+ "action": "store_true",
28
+ "help": "Start chat mode with multi-line input as default (no need for /multi command)",
29
+ },
30
+ ),
24
31
  (
25
32
  ["--profile"],
26
33
  {
@@ -214,7 +221,7 @@ class JanitoCLI:
214
221
 
215
222
  self.parser = argparse.ArgumentParser(
216
223
  description="Janito CLI - A tool for running LLM-powered workflows from the command line."
217
- "\n\nExample usage: janito -p openai -m gpt-3.5-turbo 'Your prompt here'\n\n"
224
+ "\n\nExample usage: janito -p moonshotai -m kimi-k1-8k 'Your prompt here'\n\n"
218
225
  "Use -m or --model to set the model for the session."
219
226
  )
220
227
  self._define_args()
@@ -0,0 +1,117 @@
1
+ # Getting Started with Janito
2
+
3
+ This guide will help you set up Janito CLI quickly and start using it with MoonshotAI as your default provider.
4
+
5
+ ## Quick Setup (2 minutes)
6
+
7
+ ### 1. Install Janito
8
+ ```bash
9
+ pip install janito
10
+ ```
11
+
12
+ ### 2. Get Your MoonshotAI API Key
13
+
14
+ 1. Go to [Moonshot AI Platform](https://platform.moonshot.cn/)
15
+ 2. Sign up for an account
16
+ 3. Navigate to API Keys section
17
+ 4. Create a new API key
18
+
19
+ ### 3. Configure Janito
20
+ ```bash
21
+ # Set MoonshotAI as your default provider
22
+ janito --set-api-key YOUR_API_KEY -p moonshotai
23
+
24
+ # Verify it's working
25
+ janito "Hello, can you introduce yourself?"
26
+ ```
27
+
28
+ ## Your First Commands
29
+
30
+ ### Basic Usage
31
+ ```bash
32
+ # Simple prompt
33
+ janito "Create a Python script to calculate fibonacci numbers"
34
+
35
+ # With specific model
36
+ janito -m kimi-k1-8k "Explain machine learning in simple terms"
37
+
38
+ # Interactive chat mode
39
+ janito --chat
40
+ ```
41
+
42
+ ### Working with Files
43
+ ```bash
44
+ # Analyze a file
45
+ janito "Analyze the performance of my_app.py" < my_app.py
46
+
47
+ # Generate code in a specific directory
48
+ janito -W ./my_project "Create a REST API with FastAPI"
49
+ ```
50
+
51
+ ## Configuration Options
52
+
53
+ ### Set as Default Provider
54
+ ```bash
55
+ # Make MoonshotAI your permanent default
56
+ janito --set provider=moonshotai
57
+ janito --set model=kimi-k1-8k
58
+ ```
59
+
60
+ ### Environment Variables
61
+ You can also use environment variables:
62
+ ```bash
63
+ export MOONSHOTAI_API_KEY=your_key_here
64
+ export JANITO_PROVIDER=moonshotai
65
+ export JANITO_MODEL=kimi-k1-8k
66
+ ```
67
+
68
+ ## MoonshotAI Models
69
+
70
+ Janito supports these MoonshotAI models:
71
+
72
+ - **kimi-k1-8k**: Fast responses, good for general tasks
73
+ - **kimi-k1-32k**: Better for longer contexts
74
+ - **kimi-k1-128k**: Best for very long documents
75
+ - **kimi-k2-turbo-preview**: Latest model with enhanced capabilities
76
+ - **kimi-k2-turbo-preview**: Turbo version of the advanced reasoning model
77
+
78
+ ## Next Steps
79
+
80
+ 1. **Explore tools**: Run `janito --list-tools` to see available tools
81
+ 2. **Try chat mode**: Run `janito --chat` for interactive sessions
82
+ 3. **Check examples**: Look at the main README.md for more usage examples
83
+ 4. **Join community**: Get help and share tips with other users
84
+
85
+ ## Troubleshooting
86
+
87
+ ### Common Issues
88
+
89
+ **"Provider not found" error**
90
+ ```bash
91
+ # Check available providers
92
+ janito --list-providers
93
+
94
+ # Re-register MoonshotAI
95
+ janito --set-api-key YOUR_KEY -p moonshotai
96
+ ```
97
+
98
+ **"Model not available" error**
99
+ ```bash
100
+ # List available MoonshotAI models
101
+ janito -p moonshotai --list-models
102
+ ```
103
+
104
+ **API key issues**
105
+ ```bash
106
+ # Check current configuration
107
+ janito --show-config
108
+
109
+ # Reset API key
110
+ janito --set-api-key NEW_KEY -p moonshotai
111
+ ```
112
+
113
+ ### Getting Help
114
+
115
+ - Check the main README.md for comprehensive documentation
116
+ - Use `janito --help` for command-line options
117
+ - Visit our GitHub repository for issues and discussions
@@ -63,6 +63,13 @@ class AzureOpenAIModelDriver(OpenAIModelDriver):
63
63
 
64
64
  def _instantiate_openai_client(self, config):
65
65
  try:
66
+ if not config.api_key:
67
+ provider_name = getattr(self, 'provider_name', 'Azure OpenAI')
68
+ print(f"[ERROR] No API key found for provider '{provider_name}'. Please set the API key using:")
69
+ print(f" janito --set-api-key YOUR_API_KEY -p azure-openai")
70
+ print(f"Or set the AZURE_OPENAI_API_KEY environment variable.")
71
+ raise ValueError(f"API key is required for provider '{provider_name}'")
72
+
66
73
  from openai import AzureOpenAI
67
74
 
68
75
  api_key_display = str(config.api_key)
@@ -44,9 +44,10 @@ class OpenAIModelDriver(LLMDriver):
44
44
 
45
45
  tool_classes = self.tools_adapter.get_tool_classes()
46
46
  tool_schemas = generate_tool_schemas(tool_classes)
47
- api_kwargs["tools"] = tool_schemas
47
+ if tool_schemas: # Only add tools if we have actual schemas
48
+ api_kwargs["tools"] = tool_schemas
48
49
  except Exception as e:
49
- api_kwargs["tools"] = []
50
+ # Don't add empty tools array - some providers reject it
50
51
  if hasattr(config, "verbose_api") and config.verbose_api:
51
52
  print(f"[OpenAIModelDriver] Tool schema generation failed: {e}")
52
53
  # OpenAI-specific parameters
@@ -246,6 +247,13 @@ class OpenAIModelDriver(LLMDriver):
246
247
 
247
248
  def _instantiate_openai_client(self, config):
248
249
  try:
250
+ if not config.api_key:
251
+ provider_name = getattr(self, 'provider_name', 'OpenAI-compatible')
252
+ print(f"[ERROR] No API key found for provider '{provider_name}'. Please set the API key using:")
253
+ print(f" janito --set-api-key YOUR_API_KEY -p {provider_name.lower()}")
254
+ print(f"Or set the {provider_name.upper()}_API_KEY environment variable.")
255
+ raise ValueError(f"API key is required for provider '{provider_name}'")
256
+
249
257
  api_key_display = str(config.api_key)
250
258
  if api_key_display and len(api_key_display) > 8:
251
259
  api_key_display = api_key_display[:4] + "..." + api_key_display[-4:]
@@ -0,0 +1 @@
1
+ # Z.AI driver package