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.
- janito/README.md +149 -0
- janito/cli/chat_mode/script_runner.py +2 -2
- janito/cli/chat_mode/session.py +9 -0
- janito/cli/core/model_guesser.py +51 -0
- janito/cli/core/runner.py +13 -1
- janito/cli/main_cli.py +8 -1
- janito/docs/GETTING_STARTED.md +117 -0
- janito/drivers/azure_openai/driver.py +7 -0
- janito/drivers/openai/driver.py +10 -2
- janito/drivers/zai/__init__.py +1 -0
- janito/drivers/zai/driver.py +465 -0
- janito/mkdocs.yml +40 -0
- janito/provider_registry.py +14 -4
- janito/providers/__init__.py +2 -1
- janito/providers/alibaba/__init__.py +0 -0
- janito/providers/alibaba/model_info.py +40 -0
- janito/providers/alibaba/provider.py +102 -0
- janito/providers/anthropic/provider.py +6 -0
- janito/providers/azure_openai/provider.py +6 -0
- janito/providers/deepseek/provider.py +6 -0
- janito/providers/google/provider.py +6 -0
- janito/providers/moonshotai/model_info.py +11 -0
- janito/providers/moonshotai/provider.py +7 -1
- janito/providers/openai/provider.py +6 -0
- janito/providers/zai/__init__.py +1 -0
- janito/providers/zai/model_info.py +55 -0
- janito/providers/zai/provider.py +128 -0
- janito/providers/zai/schema_generator.py +133 -0
- {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/METADATA +1 -1
- {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/RECORD +34 -24
- janito/providers/groq/__init__.py +0 -1
- janito/providers/groq/model_info.py +0 -45
- janito/providers/groq/provider.py +0 -76
- {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/WHEEL +0 -0
- {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/entry_points.txt +0 -0
- {janito-2.9.0.dist-info → janito-2.12.0.dist-info}/licenses/LICENSE +0 -0
- {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-
|
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,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=
|
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=
|
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=
|
40
|
-
janito/cli/chat_mode/session.py,sha256=
|
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/
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
134
|
-
janito/providers/moonshotai/provider.py,sha256=
|
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=
|
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.
|
201
|
-
janito-2.
|
202
|
-
janito-2.
|
203
|
-
janito-2.
|
204
|
-
janito-2.
|
205
|
-
janito-2.
|
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
|
-
}
|