janito 2.9.0__py3-none-any.whl → 2.12.0__py3-none-any.whl

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 (37) hide show
  1. janito/README.md +149 -0
  2. janito/cli/chat_mode/script_runner.py +2 -2
  3. janito/cli/chat_mode/session.py +9 -0
  4. janito/cli/core/model_guesser.py +51 -0
  5. janito/cli/core/runner.py +13 -1
  6. janito/cli/main_cli.py +8 -1
  7. janito/docs/GETTING_STARTED.md +117 -0
  8. janito/drivers/azure_openai/driver.py +7 -0
  9. janito/drivers/openai/driver.py +10 -2
  10. janito/drivers/zai/__init__.py +1 -0
  11. janito/drivers/zai/driver.py +465 -0
  12. janito/mkdocs.yml +40 -0
  13. janito/provider_registry.py +14 -4
  14. janito/providers/__init__.py +2 -1
  15. janito/providers/alibaba/__init__.py +0 -0
  16. janito/providers/alibaba/model_info.py +40 -0
  17. janito/providers/alibaba/provider.py +102 -0
  18. janito/providers/anthropic/provider.py +6 -0
  19. janito/providers/azure_openai/provider.py +6 -0
  20. janito/providers/deepseek/provider.py +6 -0
  21. janito/providers/google/provider.py +6 -0
  22. janito/providers/moonshotai/model_info.py +11 -0
  23. janito/providers/moonshotai/provider.py +7 -1
  24. janito/providers/openai/provider.py +6 -0
  25. janito/providers/zai/__init__.py +1 -0
  26. janito/providers/zai/model_info.py +55 -0
  27. janito/providers/zai/provider.py +128 -0
  28. janito/providers/zai/schema_generator.py +133 -0
  29. {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/METADATA +1 -1
  30. {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/RECORD +34 -24
  31. janito/providers/groq/__init__.py +0 -1
  32. janito/providers/groq/model_info.py +0 -45
  33. janito/providers/groq/provider.py +0 -76
  34. {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/WHEEL +0 -0
  35. {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/entry_points.txt +0 -0
  36. {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/licenses/LICENSE +0 -0
  37. {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/top_level.txt +0 -0
@@ -21,6 +21,12 @@ class AnthropicProvider(LLMProvider):
21
21
  self._tools_adapter = get_local_tools_adapter()
22
22
  self.auth_manager = auth_manager or LLMAuthManager()
23
23
  self._api_key = self.auth_manager.get_credentials(type(self).NAME)
24
+ if not self._api_key:
25
+ print(f"[ERROR] No API key found for provider '{self.name}'. Please set the API key using:")
26
+ print(f" janito --set-api-key YOUR_API_KEY -p {self.name}")
27
+ print(f"Or set the ANTHROPIC_API_KEY environment variable.")
28
+ return
29
+
24
30
  self._tools_adapter = get_local_tools_adapter()
25
31
  self._driver_config = config or LLMDriverConfig(model=None)
26
32
  if not getattr(self._driver_config, "model", None):
@@ -32,6 +32,12 @@ class AzureOpenAIProvider(LLMProvider):
32
32
  return
33
33
  self._auth_manager = auth_manager or LLMAuthManager()
34
34
  self._api_key = self._auth_manager.get_credentials(type(self).NAME)
35
+ if not self._api_key:
36
+ print(f"[ERROR] No API key found for provider '{self.name}'. Please set the API key using:")
37
+ print(f" janito --set-api-key YOUR_API_KEY -p {self.name}")
38
+ print(f"Or set the AZURE_OPENAI_API_KEY environment variable.")
39
+ return
40
+
35
41
  self._tools_adapter = get_local_tools_adapter()
36
42
  self._driver_config = config or LLMDriverConfig(model=None)
37
43
  if not self._driver_config.model:
@@ -30,6 +30,12 @@ class DeepSeekProvider(LLMProvider):
30
30
  else:
31
31
  self.auth_manager = auth_manager or LLMAuthManager()
32
32
  self._api_key = self.auth_manager.get_credentials(type(self).NAME)
33
+ if not self._api_key:
34
+ print(f"[ERROR] No API key found for provider '{self.name}'. Please set the API key using:")
35
+ print(f" janito --set-api-key YOUR_API_KEY -p {self.name}")
36
+ print(f"Or set the DEEPSEEK_API_KEY environment variable.")
37
+ return
38
+
33
39
  self._tools_adapter = get_local_tools_adapter()
34
40
  self._driver_config = config or LLMDriverConfig(model=None)
35
41
  if not self._driver_config.model:
@@ -32,6 +32,12 @@ class GoogleProvider(LLMProvider):
32
32
  else:
33
33
  self.auth_manager = auth_manager or LLMAuthManager()
34
34
  self._api_key = self.auth_manager.get_credentials(type(self).name)
35
+ if not self._api_key:
36
+ print(f"[ERROR] No API key found for provider '{self.name}'. Please set the API key using:")
37
+ print(f" janito --set-api-key YOUR_API_KEY -p {self.name}")
38
+ print(f"Or set the GOOGLE_API_KEY environment variable.")
39
+ return
40
+
35
41
  self._tools_adapter = get_local_tools_adapter()
36
42
  self._driver_config = config or LLMDriverConfig(model=None)
37
43
  # Only set default if model is not set by CLI/config
@@ -12,4 +12,15 @@ MOONSHOTAI_MODEL_SPECS = {
12
12
  open="moonshotai",
13
13
  driver="OpenAIModelDriver",
14
14
  ),
15
+ "kimi-k2-turbo-preview": LLMModelInfo(
16
+ name="kimi-k2-turbo-preview",
17
+ context=128000,
18
+ max_input=100000,
19
+ max_cot="N/A",
20
+ max_response=4096,
21
+ thinking_supported=False,
22
+ default_temp=0.2,
23
+ open="moonshotai",
24
+ driver="OpenAIModelDriver",
25
+ ),
15
26
  }
@@ -12,7 +12,7 @@ class MoonshotAIProvider(LLMProvider):
12
12
  NAME = "moonshotai"
13
13
  MAINTAINER = "João Pinto <janito@ikignosis.org>"
14
14
  MODEL_SPECS = MOONSHOTAI_MODEL_SPECS
15
- DEFAULT_MODEL = "kimi-k2-0711-preview"
15
+ DEFAULT_MODEL = "kimi-k2-turbo-preview"
16
16
 
17
17
  def __init__(
18
18
  self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
@@ -23,6 +23,12 @@ class MoonshotAIProvider(LLMProvider):
23
23
  else:
24
24
  self.auth_manager = auth_manager or LLMAuthManager()
25
25
  self._api_key = self.auth_manager.get_credentials(type(self).name)
26
+ if not self._api_key:
27
+ print(f"[ERROR] No API key found for provider '{self.name}'. Please set the API key using:")
28
+ print(f" janito --set-api-key YOUR_API_KEY -p {self.name}")
29
+ print(f"Or set the MOONSHOTAI_API_KEY environment variable.")
30
+ return
31
+
26
32
  self._tools_adapter = get_local_tools_adapter()
27
33
  self._driver_config = config or LLMDriverConfig(model=None)
28
34
  if not self._driver_config.model:
@@ -31,6 +31,12 @@ class OpenAIProvider(LLMProvider):
31
31
  else:
32
32
  self.auth_manager = auth_manager or LLMAuthManager()
33
33
  self._api_key = self.auth_manager.get_credentials(type(self).NAME)
34
+ if not self._api_key:
35
+ print(f"[ERROR] No API key found for provider '{self.name}'. Please set the API key using:")
36
+ print(f" janito --set-api-key YOUR_API_KEY -p {self.name}")
37
+ print(f"Or set the OPENAI_API_KEY environment variable.")
38
+ return
39
+
34
40
  self._tools_adapter = get_local_tools_adapter()
35
41
  self._driver_config = config or LLMDriverConfig(model=None)
36
42
  if not self._driver_config.model:
@@ -0,0 +1 @@
1
+ # Z.AI provider package
@@ -0,0 +1,55 @@
1
+ from janito.llm.model import LLMModelInfo
2
+
3
+ MODEL_SPECS = {
4
+ "glm-4.5": LLMModelInfo(
5
+ name="glm-4.5",
6
+ context=128000,
7
+ max_input=128000,
8
+ max_cot=4096,
9
+ max_response=4096,
10
+ thinking_supported=True,
11
+ other={
12
+ "description": "Z.AI's GLM-4.5 model for advanced reasoning and conversation",
13
+ "supports_tools": True,
14
+ "supports_images": True,
15
+ "supports_audio": False,
16
+ "supports_video": False,
17
+ "input_cost_per_1k": 0.0005,
18
+ "output_cost_per_1k": 0.0015,
19
+ },
20
+ ),
21
+ "glm-4": LLMModelInfo(
22
+ name="glm-4",
23
+ context=128000,
24
+ max_input=128000,
25
+ max_cot="N/A",
26
+ max_response=4096,
27
+ thinking_supported=False,
28
+ other={
29
+ "description": "Z.AI's GLM-4 model for general purpose tasks",
30
+ "supports_tools": True,
31
+ "supports_images": True,
32
+ "supports_audio": False,
33
+ "supports_video": False,
34
+ "input_cost_per_1k": 0.0003,
35
+ "output_cost_per_1k": 0.0009,
36
+ },
37
+ ),
38
+ "glm-4v": LLMModelInfo(
39
+ name="glm-4v",
40
+ context=128000,
41
+ max_input=128000,
42
+ max_cot="N/A",
43
+ max_response=4096,
44
+ thinking_supported=False,
45
+ other={
46
+ "description": "Z.AI's GLM-4V vision model for image understanding",
47
+ "supports_tools": True,
48
+ "supports_images": True,
49
+ "supports_audio": False,
50
+ "supports_video": False,
51
+ "input_cost_per_1k": 0.0004,
52
+ "output_cost_per_1k": 0.0012,
53
+ },
54
+ ),
55
+ }
@@ -0,0 +1,128 @@
1
+ from janito.llm.provider import LLMProvider
2
+ from janito.llm.model import LLMModelInfo
3
+ from janito.llm.auth import LLMAuthManager
4
+ from janito.llm.driver_config import LLMDriverConfig
5
+ from janito.drivers.zai.driver import ZAIModelDriver
6
+ from janito.tools import get_local_tools_adapter
7
+ from janito.providers.registry import LLMProviderRegistry
8
+ from .model_info import MODEL_SPECS
9
+ from queue import Queue
10
+
11
+ available = ZAIModelDriver.available
12
+ unavailable_reason = ZAIModelDriver.unavailable_reason
13
+
14
+
15
+ class ZAIProvider(LLMProvider):
16
+ name = "zai"
17
+ NAME = "zai"
18
+ MAINTAINER = "João Pinto <janito@ikignosis.org>"
19
+ MODEL_SPECS = MODEL_SPECS
20
+ DEFAULT_MODEL = "glm-4.5" # Options: glm-4.5, glm-4, glm-4v
21
+
22
+ def __init__(
23
+ self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
24
+ ):
25
+ if not self.available:
26
+ self._setup_unavailable()
27
+ else:
28
+ self._setup_available(auth_manager, config)
29
+
30
+ def _setup_unavailable(self):
31
+ # Even when the ZAI driver is unavailable we still need a tools adapter
32
+ # so that any generic logic that expects `execute_tool()` to work does not
33
+ # crash with an AttributeError when it tries to access `self._tools_adapter`.
34
+ self._tools_adapter = get_local_tools_adapter()
35
+ self._driver = None
36
+
37
+ def _setup_available(self, auth_manager, config):
38
+ self.auth_manager = auth_manager or LLMAuthManager()
39
+ self._api_key = self.auth_manager.get_credentials(type(self).NAME)
40
+ if not self._api_key:
41
+ print(
42
+ f"[ERROR] No API key found for provider '{self.name}'. Please set the API key using:"
43
+ )
44
+ print(f" janito --set-api-key YOUR_API_KEY -p {self.name}")
45
+ print(f"Or set the ZAI_API_KEY environment variable.")
46
+ return
47
+
48
+ self._tools_adapter = get_local_tools_adapter()
49
+ self._driver_config = config or LLMDriverConfig(model=None)
50
+ if not self._driver_config.model:
51
+ self._driver_config.model = self.DEFAULT_MODEL
52
+ if not self._driver_config.api_key:
53
+ self._driver_config.api_key = self._api_key
54
+
55
+ self._configure_model_tokens()
56
+ self.fill_missing_device_info(self._driver_config)
57
+ self._driver = None # to be provided by factory/agent
58
+
59
+ def _configure_model_tokens(self):
60
+ # Set only the correct token parameter for the model
61
+ model_name = self._driver_config.model
62
+ model_spec = self.MODEL_SPECS.get(model_name)
63
+ # Remove both to avoid stale values
64
+ if hasattr(self._driver_config, "max_tokens"):
65
+ self._driver_config.max_tokens = None
66
+ if hasattr(self._driver_config, "max_completion_tokens"):
67
+ self._driver_config.max_completion_tokens = None
68
+ if model_spec:
69
+ if getattr(model_spec, "thinking_supported", False):
70
+ max_cot = getattr(model_spec, "max_cot", None)
71
+ if max_cot and max_cot != "N/A":
72
+ self._driver_config.max_completion_tokens = int(max_cot)
73
+ else:
74
+ max_response = getattr(model_spec, "max_response", None)
75
+ if max_response and max_response != "N/A":
76
+ self._driver_config.max_tokens = int(max_response)
77
+
78
+ @property
79
+ def driver(self) -> ZAIModelDriver:
80
+ if not self.available:
81
+ raise ImportError(f"ZAIProvider unavailable: {self.unavailable_reason}")
82
+ return self._driver
83
+
84
+ @property
85
+ def available(self):
86
+ return available
87
+
88
+ @property
89
+ def unavailable_reason(self):
90
+ return unavailable_reason
91
+
92
+ def create_driver(self):
93
+ """
94
+ Creates and returns a new ZAIModelDriver instance with input/output queues.
95
+ """
96
+ driver = ZAIModelDriver(
97
+ tools_adapter=self._tools_adapter, provider_name=self.NAME
98
+ )
99
+ driver.config = self._driver_config
100
+ # NOTE: The caller is responsible for calling driver.start() if background processing is needed.
101
+ return driver
102
+
103
+ def create_agent(self, tools_adapter=None, agent_name: str = None, **kwargs):
104
+ from janito.llm.agent import LLMAgent
105
+
106
+ # Always create a new driver with the passed-in tools_adapter
107
+ if tools_adapter is None:
108
+ tools_adapter = get_local_tools_adapter()
109
+ # Should use new-style driver construction via queues/factory (handled elsewhere)
110
+ raise NotImplementedError(
111
+ "create_agent must be constructed via new factory using input/output queues and config."
112
+ )
113
+
114
+ @property
115
+ def model_name(self):
116
+ return self._driver_config.model
117
+
118
+ @property
119
+ def driver_config(self):
120
+ """Public, read-only access to the provider's LLMDriverConfig object."""
121
+ return self._driver_config
122
+
123
+ def execute_tool(self, tool_name: str, event_bus, *args, **kwargs):
124
+ self._tools_adapter.event_bus = event_bus
125
+ return self._tools_adapter.execute_by_name(tool_name, *args, **kwargs)
126
+
127
+
128
+ LLMProviderRegistry.register(ZAIProvider.NAME, ZAIProvider)
@@ -0,0 +1,133 @@
1
+ """
2
+ Generate OpenAI-compatible tool schemas for Z.AI API.
3
+ """
4
+
5
+ import inspect
6
+ from typing import get_type_hints, Dict, Any, Optional, List, Union
7
+ from janito.tools import Tool
8
+
9
+
10
+ def generate_tool_schemas(tool_classes):
11
+ """
12
+ Generate OpenAI-compatible tool schemas from tool classes.
13
+
14
+ Args:
15
+ tool_classes: List of Tool classes to generate schemas for
16
+
17
+ Returns:
18
+ List of OpenAI-compatible tool schemas
19
+ """
20
+ schemas = []
21
+ for tool_class in tool_classes:
22
+ schema = generate_tool_schema(tool_class)
23
+ if schema:
24
+ schemas.append(schema)
25
+ return schemas
26
+
27
+
28
+ def generate_tool_schema(tool_class):
29
+ """
30
+ Generate an OpenAI-compatible tool schema from a Tool class.
31
+
32
+ Args:
33
+ tool_class: Tool class to generate schema for
34
+
35
+ Returns:
36
+ OpenAI-compatible tool schema dict
37
+ """
38
+ if not issubclass(tool_class, Tool):
39
+ return None
40
+
41
+ tool_instance = tool_class()
42
+
43
+ # Get the execute method
44
+ execute_method = getattr(tool_class, "execute", None)
45
+ if not execute_method:
46
+ return None
47
+
48
+ # Get method signature and type hints
49
+ try:
50
+ sig = inspect.signature(execute_method)
51
+ type_hints = get_type_hints(execute_method)
52
+ except (ValueError, TypeError):
53
+ return None
54
+
55
+ # Build parameters schema
56
+ properties = {}
57
+ required = []
58
+
59
+ for param_name, param in sig.parameters.items():
60
+ if param_name == "self":
61
+ continue
62
+
63
+ param_type = type_hints.get(param_name, str)
64
+ param_schema = python_type_to_json_schema(param_type)
65
+
66
+ # Add description if available
67
+ if hasattr(tool_instance, "get_parameter_description"):
68
+ desc = tool_instance.get_parameter_description(param_name)
69
+ if desc:
70
+ param_schema["description"] = desc
71
+
72
+ properties[param_name] = param_schema
73
+
74
+ # Check if required
75
+ if param.default == inspect.Parameter.empty:
76
+ required.append(param_name)
77
+
78
+ schema = {
79
+ "type": "function",
80
+ "function": {
81
+ "name": tool_class.__name__,
82
+ "description": getattr(
83
+ tool_instance, "description", f"Execute {tool_class.__name__}"
84
+ ),
85
+ "parameters": {
86
+ "type": "object",
87
+ "properties": properties,
88
+ "required": required,
89
+ "additionalProperties": False,
90
+ },
91
+ },
92
+ }
93
+
94
+ return schema
95
+
96
+
97
+ def python_type_to_json_schema(python_type):
98
+ """
99
+ Convert Python type hints to JSON schema types.
100
+
101
+ Args:
102
+ python_type: Python type hint
103
+
104
+ Returns:
105
+ JSON schema dict
106
+ """
107
+ if python_type == str:
108
+ return {"type": "string"}
109
+ elif python_type == int:
110
+ return {"type": "integer"}
111
+ elif python_type == float:
112
+ return {"type": "number"}
113
+ elif python_type == bool:
114
+ return {"type": "boolean"}
115
+ elif hasattr(python_type, "__origin__"):
116
+ # Handle generic types
117
+ origin = python_type.__origin__
118
+ if origin == list or origin == List:
119
+ args = getattr(python_type, "__args__", (str,))
120
+ item_type = args[0] if args else str
121
+ return {"type": "array", "items": python_type_to_json_schema(item_type)}
122
+ elif origin == dict or origin == Dict:
123
+ return {"type": "object"}
124
+ elif origin == Union:
125
+ args = getattr(python_type, "__args__", ())
126
+ # Handle Optional types (Union with None)
127
+ if len(args) == 2 and type(None) in args:
128
+ non_none_type = args[0] if args[1] is type(None) else args[1]
129
+ schema = python_type_to_json_schema(non_none_type)
130
+ return schema
131
+
132
+ # Default fallback
133
+ return {"type": "string"}
@@ -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
@@ -1,3 +1,4 @@
1
+ janito/README.md,sha256=uxjCeZVAsRh5lHLm-d5tWD2y42fr17tCrLsTvr-CR0Q,3557
1
2
  janito/__init__.py,sha256=a0pFui3A_AfWJiUfg93yE-Vf4868bqG3y9yg2fkTIuY,244
2
3
  janito/__main__.py,sha256=lPQ8kAyYfyeS1KopmJ8EVY5g1YswlIqCS615mM_B_rM,70
3
4
  janito/_version.py,sha256=PtAVr2K9fOS5sv6aXzmcb7UaR5NLGMFOofL7Ndjh75o,2344
@@ -10,11 +11,12 @@ janito/exceptions.py,sha256=l4AepRdWwAuLp5fUygrBBgO9rpwgfV6JvY1afOdq2pw,913
10
11
  janito/formatting.py,sha256=SMvOmL6bst3KGcI7OLa5D4DE127fQYuHZS3oY8OPsn8,2031
11
12
  janito/formatting_token.py,sha256=9Pz0svhV0pyNuGRXSmVkGDaQC8N-koTkf50AJR_gtSo,2217
12
13
  janito/gitignore_utils.py,sha256=P3iF9fMWAomqULq2xsoqHtI9uNIFSPcagljrxZshmLw,4110
14
+ janito/mkdocs.yml,sha256=hceV1mnCuj5Eo42jJQHSAhqHC4emiMExgnISiiwqSow,925
13
15
  janito/perf_singleton.py,sha256=g1h0Sdf4ydzegeEpJlMhQt4H0GQZ2hryXrdYOTL-b30,113
14
16
  janito/performance_collector.py,sha256=RYu4av16Trj3RljJZ8-2Gbn1KlGdJUosrcVFYtwviNI,6285
15
17
  janito/platform_discovery.py,sha256=JN3kC7hkxdvuj-AyrJTlbbDJjtNHke3fdlZDqGi_uz0,4621
16
18
  janito/provider_config.py,sha256=acn2FEgWsEIyi2AxZiuCLoP2rXDd-nXcP5VB4CZHaeE,3189
17
- janito/provider_registry.py,sha256=n5fXiMoC1ye968-LLT_1VRt-iNIVDyKiDJkkn_EyfQQ,6049
19
+ janito/provider_registry.py,sha256=l0jJZ74KIebOSYXPiy7uqH8d48pckR_WTyAO4iQF98o,6571
18
20
  janito/report_events.py,sha256=q4OR_jTZNfcqaQF_fzTjgqo6_VlUIxSGWfhpT4nJWcw,938
19
21
  janito/shell.bak.zip,sha256=hznHbmgfkAkjuQDJ3w73XPQh05yrtUZQxLmtGbanbYU,22
20
22
  janito/utils.py,sha256=eXSsMgM69YyzahgCNrJQLcEbB8ssLI1MQqaa20ONxbE,376
@@ -26,7 +28,7 @@ janito/cli/__init__.py,sha256=xaPDOrWphBbCR63Xpcx_yfpXSJIlCaaICc4j2qpWqrM,194
26
28
  janito/cli/config.py,sha256=HkZ14701HzIqrvaNyDcDhGlVHfpX_uHlLp2rHmhRm_k,872
27
29
  janito/cli/console.py,sha256=gJolqzWL7jEPLxeuH-CwBDRFpXt976KdZOEAB2tdBDs,64
28
30
  janito/cli/main.py,sha256=s5odou0txf8pzTf1ADk2yV7T5m8B6cejJ81e7iu776U,312
29
- janito/cli/main_cli.py,sha256=Z6eruiCAQh7Lp451XkYC-Rnq9q1zLkmyyd5ZC2KaOik,14181
31
+ janito/cli/main_cli.py,sha256=lPY3080rvDvDPQE_lhAwEuzrUeQ2Fg-DfEt4J-bWblE,14381
30
32
  janito/cli/prompt_core.py,sha256=F68J4Xl6jZMYFN4oBBYZFj15Jp-HTYoLub4bw2XpNRU,11648
31
33
  janito/cli/prompt_handler.py,sha256=SnPTlL64noeAMGlI08VBDD5IDD8jlVMIYA4-fS8zVLg,215
32
34
  janito/cli/prompt_setup.py,sha256=1s5yccFaWMgDkUjkvnTYGEWJAFPJ6hIiqwbrLfzWxMI,2038
@@ -36,8 +38,8 @@ janito/cli/verbose_output.py,sha256=wY_B4of5e8Vv7w1fRwOZzNGU2JqbMdcFnGjtEr4hLus,
36
38
  janito/cli/chat_mode/bindings.py,sha256=odjc5_-YW1t2FRhBUNRNoBMoQIg5sMz3ktV7xG0ADFU,975
37
39
  janito/cli/chat_mode/chat_entry.py,sha256=RFdPd23jsA2DMHRacpjAdwI_1dFBaWrtnwyQEgb2fHA,475
38
40
  janito/cli/chat_mode/prompt_style.py,sha256=vsqQ9xxmrYjj1pWuVe9CayQf39fo2EIXrkKPkflSVn4,805
39
- janito/cli/chat_mode/script_runner.py,sha256=NzWHXNcf-jZZb096iFJJL2pi3kVb1beLSHHzqE5Sv2g,6500
40
- janito/cli/chat_mode/session.py,sha256=cqc4Ug3yGA8rR6vFRe5v6U4recqD0tzqgwcf2ASaPgs,12891
41
+ janito/cli/chat_mode/script_runner.py,sha256=wOwEn4bgmjqHqjTqtfyaSOnRPsGf4ZVW-YAWhEeqxXU,6507
42
+ janito/cli/chat_mode/session.py,sha256=o-Eh3oGAMpSdOj38xTubVi8_z3Pz3HUfGd-ZyeDlejw,13262
41
43
  janito/cli/chat_mode/session_profile_select.py,sha256=CJ2g3VbPGWfBNrNkYYX57oIJZJ-hIZBNGB-zcdjC9vk,5379
42
44
  janito/cli/chat_mode/toolbar.py,sha256=bJ9jPaTInp2gB3yjSVJp8mpNEFiOslzNhVaiqpXJhKc,3025
43
45
  janito/cli/chat_mode/shell/autocomplete.py,sha256=lE68MaVaodbA2VfUM0_YLqQVLBJAE_BJsd5cMtwuD-g,793
@@ -83,17 +85,21 @@ janito/cli/cli_commands/show_system_prompt.py,sha256=9ZJGW7lIGJ9LX2JZiWVEm4AbaD0
83
85
  janito/cli/core/__init__.py,sha256=YH95fhgY9yBX8RgqX9dSrEkl4exjV0T4rbmJ6xUpG-Y,196
84
86
  janito/cli/core/event_logger.py,sha256=1X6lR0Ax7AgF8HlPWFoY5Ystuu7Bh4ooTo78vXzeGB0,2008
85
87
  janito/cli/core/getters.py,sha256=AO34OBhh3f1Sx2mWVYQIvH-4fcmXG7b2471XdKNZdYs,1856
86
- janito/cli/core/runner.py,sha256=C7eePvhzIYHgsP95WGwltIhM_T4Kzyo14M7n12RevPQ,7693
88
+ janito/cli/core/model_guesser.py,sha256=jzkkiQ-J2buT2Omh6jYZHa8-zCJxqKQBL08Z58pe1_o,1741
89
+ janito/cli/core/runner.py,sha256=3vP92XEUzzHeOWbMHg82iISsXVUAM7y8YKWGNSIMyA8,8337
87
90
  janito/cli/core/setters.py,sha256=PD3aT1y1q8XWQVtRNfrU0dtlW4JGdn6BMJyP7FCQWhc,4623
88
91
  janito/cli/core/unsetters.py,sha256=FEw9gCt0vRvoCt0kRSNfVB2tzi_TqppJIx2nHPP59-k,2012
89
92
  janito/cli/single_shot_mode/__init__.py,sha256=Ct99pKe9tINzVW6oedZJfzfZQKWpXz-weSSCn0hrwHY,115
90
93
  janito/cli/single_shot_mode/handler.py,sha256=U70X7c9MHbmj1vQlTI-Ao2JvRprpLbPh9wL5gAMbEhs,3790
94
+ janito/docs/GETTING_STARTED.md,sha256=EbXV7B3XxjSy1E0XQJFOVITVbTmZBVB7pjth2Mb4_rg,2835
91
95
  janito/drivers/dashscope.bak.zip,sha256=9Pv4Xyciju8jO1lEMFVgYXexoZkxmDO3Ig6vw3ODfL8,4936
92
96
  janito/drivers/driver_registry.py,sha256=sbij7R71JJqJVeMfmaU-FKsEuZVO8oEn6Qp8020hdZw,773
93
97
  janito/drivers/openai_responses.bak.zip,sha256=E43eDCHGa2tCtdjzj_pMnWDdnsOZzj8BJTR5tJp8wcM,13352
94
- janito/drivers/azure_openai/driver.py,sha256=rxeyCElyc4XVCTl2q-tI78Oy0q5lwtQUnwBqw7vft5g,3593
98
+ janito/drivers/azure_openai/driver.py,sha256=rec2D4DDuMjdnbGNIsrnB0oiwuxL_zBykJeUGa-PffI,4074
95
99
  janito/drivers/openai/README.md,sha256=bgPdaYX0pyotCoJ9t3cJbYM-teQ_YM1DAFEKLCMP32Q,666
96
- janito/drivers/openai/driver.py,sha256=gNFmJqFl3mlbir-Qh0S0nZjD2sG4UTUpj92wPdcC5Kc,18439
100
+ janito/drivers/openai/driver.py,sha256=O0AAp-aF3TKQLp_FSsRWm_QDG_mKliLlpDjf09fWzl4,19061
101
+ janito/drivers/zai/__init__.py,sha256=rleES3ZJEslJ8M02TdTPyxHKXxA4-e2fDJa6yjuzY8s,22
102
+ janito/drivers/zai/driver.py,sha256=jI_ddVK_vT-cRTpZ_8piXSJEFZ6zLTeRyT0Jzxjtd70,18926
97
103
  janito/event_bus/__init__.py,sha256=VG6GOhKMBh0O_92D-zW8a3YitJPKDajGgPiFezTXlNE,77
98
104
  janito/event_bus/bus.py,sha256=LokZbAdwcWhWOyKSp7H3Ism57x4EZhxlRPjl3NE4UKU,2847
99
105
  janito/event_bus/event.py,sha256=MtgcBPD7cvCuubiLIyo-BWcsNSO-941HLk6bScHTJtQ,427
@@ -113,29 +119,33 @@ janito/llm/driver_input.py,sha256=Zq7IO4KdQPUraeIo6XoOaRy1IdQAyYY15RQw4JU30uA,38
113
119
  janito/llm/message_parts.py,sha256=QY_0kDjaxdoErDgKPRPv1dNkkYJuXIBmHWNLiOEKAH4,1365
114
120
  janito/llm/model.py,sha256=42hjcffZDTuzjAJoVhDcDqwIXm6rUmmi5UwTOYopf5w,1131
115
121
  janito/llm/provider.py,sha256=3FbhQPrWBSEoIdIi-5DWIh0DD_CM570EFf1NcuGyGko,7961
116
- janito/providers/__init__.py,sha256=S6AvFABVrFOfFFj_sqNnQcbgS6IVdiRWzBg-rhnhjOY,366
122
+ janito/providers/__init__.py,sha256=P2r90SUduTqn0CumjpJ9yojx2BUKDVy136xdbA8I6VU,407
117
123
  janito/providers/dashscope.bak.zip,sha256=BwXxRmZreEivvRtmqbr5BR62IFVlNjAf4y6DrF2BVJo,5998
118
124
  janito/providers/registry.py,sha256=Ygwv9eVrTXOKhv0EKxSWQXO5WMHvajWE2Q_Lc3p7dKo,730
125
+ janito/providers/alibaba/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
+ janito/providers/alibaba/model_info.py,sha256=evAW2CZUX9qgRAzDhZTp47ZNj4G1T7W66gkV60Nfan8,1264
127
+ janito/providers/alibaba/provider.py,sha256=JOkR0pKCpuG1z5KQ35TaEw6Egfp7g1gU7XiT8aeZp-0,4304
119
128
  janito/providers/anthropic/model_info.py,sha256=m6pBh0Ia8_xC1KZ7ke_4HeHIFw7nWjnYVItnRpkCSWc,1206
120
- janito/providers/anthropic/provider.py,sha256=nTsZw0IwAZbgixBNXuD7EYXdI6uYQh7wsTGxE-3R-yE,2850
129
+ janito/providers/anthropic/provider.py,sha256=JS74pDs7gSpwvG0jY-MDO5rljO0JJOffSjaL1LK1YlE,3165
121
130
  janito/providers/azure_openai/model_info.py,sha256=TMSqEpQROIIYUGAyulYJ5xGhj7CbLoaKL_JXeLbXaG0,689
122
- janito/providers/azure_openai/provider.py,sha256=CL9CE2cpkJYjvoZAK9TmpSbS-OOlmDbCiSyjw1NF9Ic,5228
131
+ janito/providers/azure_openai/provider.py,sha256=lWqHI1JG5c2wl24qFVZwdIW3lBjDwrxAHwskjOGCeWQ,5546
123
132
  janito/providers/deepseek/__init__.py,sha256=4sISEpq4bJO29vxFK9cfnO-SRUmKoD7oSdeCvz0hVno,36
124
133
  janito/providers/deepseek/model_info.py,sha256=tAlFRtWiyNF_MKZ1gy5_-VNlvqoIwAinv6bAv9dNFsc,465
125
- janito/providers/deepseek/provider.py,sha256=ATDyYJJJl-KkOTlhgZ6EEGMKCvj0LTu4GwB_GtUeXN0,3922
134
+ janito/providers/deepseek/provider.py,sha256=I78wI27Kon4pyTZuO5knhvYejfE1xZysnr36fv_EolQ,4260
126
135
  janito/providers/google/__init__.py,sha256=hE3OGJvLEhvNLhIK_XmCGIdrIj8MKlyGgdOLJ4mdess,38
127
136
  janito/providers/google/model_info.py,sha256=AakTmzvWm1GPvFzGAq6-PeE_Dpq7BmAAqmh3L8N5KKo,1126
128
- janito/providers/google/provider.py,sha256=2sJzqmkjttGOXB38W2SYhiRIPCHesdajZUKdX4O_yhk,3424
129
- janito/providers/groq/__init__.py,sha256=O0vi5p13DGcDEM3SUQmYB5_g7-UcqT-d0OrrPIsaeD4,36
130
- janito/providers/groq/model_info.py,sha256=QBgI4-keoW63sgX8MDhnFN9FHz3F3Oo3gE7XXNkamoM,1612
131
- janito/providers/groq/provider.py,sha256=8xUMY_ytSauT5RX3yovS2sDtHX1rkqNwHAEClTaJ7Ls,2697
137
+ janito/providers/google/provider.py,sha256=4oEaaqFUlGKIw4yTd_0tVWdpAx3QDEIP6cRwmVKDp-I,3760
132
138
  janito/providers/moonshotai/__init__.py,sha256=nThTAtynq4O2Iidm95daKOCKXi5APRJYtRK2Wr3SDpM,31
133
- janito/providers/moonshotai/model_info.py,sha256=p5_q73Z5YnFbh9-_pXuHrug2DW-7G5Y_9U52dhsS11Q,396
134
- janito/providers/moonshotai/provider.py,sha256=iY7qYXbJesd7cMQx89kuUFAhII0x2oSwc56JlSOF56A,3643
139
+ janito/providers/moonshotai/model_info.py,sha256=MpPAB3tZVvZ8V7tZsiJpk5SReHjVcnwwbp63aUebx9Y,718
140
+ janito/providers/moonshotai/provider.py,sha256=e3tU6QSPwaquPqSzO4f1HTe3_4eOFB092CSzmoFU8QQ,3984
135
141
  janito/providers/openai/__init__.py,sha256=f0m16-sIqScjL9Mp4A0CQBZx6H3PTEy0cnE08jeaB5U,38
136
142
  janito/providers/openai/model_info.py,sha256=cz08O26Ychm-aP3T8guJRqpR96Im9Cwtgl2iMgM7tJs,3384
137
- janito/providers/openai/provider.py,sha256=aX8F17YRyzkZFAqUONFIP4lRVe9VlEoIneSW_gPBGdY,4809
143
+ janito/providers/openai/provider.py,sha256=U9Bp9g2KQ58J6-B5vDgsXM05xASsgaWQOofewC7hiXs,5145
138
144
  janito/providers/openai/schema_generator.py,sha256=hTqeLcPTR8jeKn5DUUpo7b-EZ-V-g1WwXiX7MbHnFzE,2234
145
+ janito/providers/zai/__init__.py,sha256=qtIr9_QBFaXG8xB6cRDGhS7se6ir11CWseI9azLMRBo,24
146
+ janito/providers/zai/model_info.py,sha256=8lwwoqwuKEkrMvXWyt1iq_H_Bf0GzZk37byjSzs_YDo,1708
147
+ janito/providers/zai/provider.py,sha256=mzGICaeg1NX_PghH17TDMxz_fKLeF4QHq98eVTuRUes,5234
148
+ janito/providers/zai/schema_generator.py,sha256=xIc1U_AYKX0cIU89RyJ63mo6rk-Mebx5CQ-qFfmd4ZQ,3934
139
149
  janito/tools/DOCSTRING_STANDARD.txt,sha256=VLPwNgjxRVD_xZSSVvUZ4H-4bBwM-VKh_RyfzYQsYSs,1735
140
150
  janito/tools/README.md,sha256=5HkLpF5k4PENJER7SlDPRXj0yo9mpHvAHW4uuzhq4ak,115
141
151
  janito/tools/__init__.py,sha256=W1B39PztC2UF7PS2WyLH6el32MFOETMlN1-LurOROCg,1171
@@ -197,9 +207,9 @@ janito/tools/adapters/local/validate_file_syntax/ps1_validator.py,sha256=TeIkPt0
197
207
  janito/tools/adapters/local/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
198
208
  janito/tools/adapters/local/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
199
209
  janito/tools/adapters/local/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
200
- janito-2.9.0.dist-info/licenses/LICENSE,sha256=GSAKapQH5ZIGWlpQTA7v5YrfECyaxaohUb1vJX-qepw,1090
201
- janito-2.9.0.dist-info/METADATA,sha256=u1ZcMKG_dSEnYOZNHJ1FpjBq6KrN2Jwhg0E58Sqh8MQ,16364
202
- janito-2.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
203
- janito-2.9.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
204
- janito-2.9.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
205
- janito-2.9.0.dist-info/RECORD,,
210
+ janito-2.12.0.dist-info/licenses/LICENSE,sha256=GSAKapQH5ZIGWlpQTA7v5YrfECyaxaohUb1vJX-qepw,1090
211
+ janito-2.12.0.dist-info/METADATA,sha256=28P5foSbPIT1QiWcLpVgWVSKLmzgG2JpwEJY8aEbsPE,16365
212
+ janito-2.12.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
213
+ janito-2.12.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
214
+ janito-2.12.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
215
+ janito-2.12.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- from .provider import GroqProvider
@@ -1,45 +0,0 @@
1
- # Groq provider model specifications
2
- from janito.llm.model import LLMModelInfo
3
-
4
- MODEL_SPECS = {
5
- "moonshotai/kimi-k2-instruct": LLMModelInfo(
6
- name="moonshotai/kimi-k2-instruct",
7
- context=128000,
8
- max_input=122880,
9
- max_cot="N/A",
10
- max_response=4096,
11
- thinking_supported=False,
12
- default_temp=0.2,
13
- open="groq",
14
- driver="GroqModelDriver",
15
- other={
16
- "description": "Kimi K2 Instruct model by Moonshot AI",
17
- "supports_tools": True,
18
- "supports_streaming": True,
19
- "supports_vision": False,
20
- "supports_system_prompt": True,
21
- "supports_temperature": True,
22
- "supports_top_p": True,
23
- "supports_frequency_penalty": True,
24
- "supports_presence_penalty": True,
25
- "supports_stop_sequences": True,
26
- "supports_max_tokens": True,
27
- "supports_seed": False,
28
- "supports_json_mode": True,
29
- "supports_logprobs": False,
30
- "supports_top_logprobs": False,
31
- "supports_response_format": True,
32
- "supports_n": False,
33
- "supports_best_of": False,
34
- "supports_echo": False,
35
- "supports_logit_bias": False,
36
- "supports_user": False,
37
- "supports_assistant": False,
38
- "supports_system": False,
39
- "supports_functions": True,
40
- "supports_tool_calls": True,
41
- "supports_stream_options": False,
42
- "supports_include_usage": False,
43
- },
44
- )
45
- }