janito 2.19.0__py3-none-any.whl → 2.20.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/cli/cli_commands/list_models.py +1 -3
- janito/drivers/openai/driver.py +13 -7
- janito/i18n/it.py +46 -0
- janito/provider_registry.py +11 -1
- janito/providers/__init__.py +1 -0
- janito/providers/mistral/__init__.py +1 -0
- janito/providers/mistral/model_info.py +81 -0
- janito/providers/mistral/provider.py +124 -0
- janito/report_events.py +1 -0
- janito/tools/adapters/local/run_powershell_command.py +5 -14
- janito/tools/tool_base.py +2 -0
- {janito-2.19.0.dist-info → janito-2.20.0.dist-info}/METADATA +1 -1
- {janito-2.19.0.dist-info → janito-2.20.0.dist-info}/RECORD +17 -13
- {janito-2.19.0.dist-info → janito-2.20.0.dist-info}/WHEEL +0 -0
- {janito-2.19.0.dist-info → janito-2.20.0.dist-info}/entry_points.txt +0 -0
- {janito-2.19.0.dist-info → janito-2.20.0.dist-info}/licenses/LICENSE +0 -0
- {janito-2.19.0.dist-info → janito-2.20.0.dist-info}/top_level.txt +0 -0
@@ -2,8 +2,8 @@
|
|
2
2
|
CLI Command: List models for the specified/current provider
|
3
3
|
"""
|
4
4
|
|
5
|
-
from janito.cli.cli_commands.model_utils import _print_models_table
|
6
5
|
import sys
|
6
|
+
from janito.cli.cli_commands.model_utils import _print_models_table
|
7
7
|
|
8
8
|
_provider_instance = None
|
9
9
|
|
@@ -36,8 +36,6 @@ def handle_list_models(args, provider_instance):
|
|
36
36
|
|
37
37
|
for m in models:
|
38
38
|
table.add_row(str(m))
|
39
|
-
|
40
|
-
import sys
|
41
39
|
if sys.stdout.isatty():
|
42
40
|
shared_console.print(table)
|
43
41
|
else:
|
janito/drivers/openai/driver.py
CHANGED
@@ -64,14 +64,20 @@ class OpenAIModelDriver(LLMDriver):
|
|
64
64
|
if config.model:
|
65
65
|
api_kwargs["model"] = config.model
|
66
66
|
# Prefer max_completion_tokens if present, else fallback to max_tokens (for backward compatibility)
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
# Skip max_completion_tokens for Mistral as their API doesn't support it
|
68
|
+
is_mistral = config.base_url and "mistral.ai" in str(config.base_url)
|
69
|
+
if not is_mistral:
|
70
|
+
if (
|
71
|
+
hasattr(config, "max_completion_tokens")
|
72
|
+
and config.max_completion_tokens is not None
|
73
|
+
):
|
74
|
+
api_kwargs["max_completion_tokens"] = int(config.max_completion_tokens)
|
75
|
+
elif hasattr(config, "max_tokens") and config.max_tokens is not None:
|
76
|
+
# For models that do not support 'max_tokens', map to 'max_completion_tokens'
|
77
|
+
api_kwargs["max_completion_tokens"] = int(config.max_tokens)
|
72
78
|
elif hasattr(config, "max_tokens") and config.max_tokens is not None:
|
73
|
-
# For
|
74
|
-
api_kwargs["
|
79
|
+
# For Mistral, use max_tokens directly
|
80
|
+
api_kwargs["max_tokens"] = int(config.max_tokens)
|
75
81
|
for p in (
|
76
82
|
"temperature",
|
77
83
|
"top_p",
|
janito/i18n/it.py
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# pragma: allowlist secret
|
2
|
+
translations = {
|
3
|
+
"36107ed78ab25f6fb12ad8ce13018cd1ce6735d1": "Avvio del server web...",
|
4
|
+
"70a0d194687568a47aa617fd85036ace1e69a982": "Vuoi davvero uscire? (s/n): ",
|
5
|
+
"5c9ebcbbd7632ecb328bd52958b17158afaa32c6": "F12 = Azione Rapida (segue l'azione raccomandata)",
|
6
|
+
"fe21121e2934234b68d19b2757532117d440c1e3": "Chiave API non trovata. Si prega di configurare 'api_key' nel file di configurazione.",
|
7
|
+
"c9e3759b1756eba35b381ce2b72cd659e132b01f": "Ciao, {name}!",
|
8
|
+
"ca1fee2f55baabdc2e4b0e9529c89ee024e62079": "Nessun prompt fornito nei messaggi",
|
9
|
+
"f7449d23d0c500ae2a0b31e04f92b47a4d8ae845": "max_tokens deve essere un intero, ricevuto: {resolved_max_tokens!r}",
|
10
|
+
"70a9ed8edb6da12e208431a31aa16ba54419b26f": "Risposta non valida/malformed da OpenAI (tentativo {attempt}/{max_retries}). Riprovo tra {wait_time} secondi...",
|
11
|
+
"a873085e3b06184fb5d27e842f97b06b6190976d": "Numero massimo di tentativi per risposta non valida raggiunto. Generazione errore.",
|
12
|
+
"66a34568bbe846bb1bde3619eb4d6dfa10211104": "L'API non supporta l'uso degli strumenti.",
|
13
|
+
"09b81476b75586da4116b83f8be70d77b174cec3": "Limite di richieste API OpenAI (429) (tentativo {attempt}/{max_retries}): {e}. Riprovo tra {wait_time} secondi...",
|
14
|
+
"5717a35dd2a1533fb7e15edc8c9329cb69f3410b": "Errore server API OpenAI (tentativo {attempt}/{max_retries}): {e}. Riprovo tra {wait_time} secondi...",
|
15
|
+
"02e760ba15ed863176c1290ac8a9b923963103cd": "Errore client API OpenAI {status_code}: {e}. Nessun nuovo tentativo.",
|
16
|
+
"2e52b0bbc8f16226b70e3e20f95c9245d2bcdb47": "Errore API OpenAI (tentativo {attempt}/{max_retries}): {e}. Riprovo tra {wait_time} secondi...",
|
17
|
+
"012cc970e039fdd79c452fc676202c814ffc76ae": "Numero massimo di tentativi per errore API OpenAI raggiunto. Generazione errore.",
|
18
|
+
"d0438e45667d31e0022b2497b5901cd4300f084b": "QueuedMessageHandler.handle_message si aspetta un dizionario con 'type' e 'message', ricevuto {msg_type}: {msg!r}",
|
19
|
+
"9d3460187ffa19c7c8a4020157072b1087e1bd2f": "[QueuedMessageHandler] {msg_type}: {msg}",
|
20
|
+
"3813833343430e8afa8fce33385c5e39fb24dd60": "[QueuedMessageHandler] {msg_type}: {message}",
|
21
|
+
"0be9a22226e16a40797010d23a0f581542dca40e": "[ToolExecutor] {tool_name} chiamato con argomenti: {args}",
|
22
|
+
"42c68edcb25442f518b1af77c6a2ddc07461aae0": "[ToolExecutor] Motivo chiamata: {tool_call_reason}",
|
23
|
+
"002ff598115d84595ffeee6219cb5c03d3a1d4a6": "Domanda",
|
24
|
+
"35747d13dcd91e8e8790c7f767d5ed764f541b9e": "procedi",
|
25
|
+
"33dde3a1afbc418768a69fa53168d9b0638fe1aa": "avanti",
|
26
|
+
"eee0bbba4ff92adbeb038a77df0466d660f15716": "continua",
|
27
|
+
"edee9402d198b04ac77dcf5dc9cc3dac44573782": "prossimo",
|
28
|
+
"8fdb7e2fa84f4faf0d9b92f466df424ec47a165b": "ok",
|
29
|
+
"5f8f924671cda79b5205a6bf1b776f347c4a7a07": "Opzioni di configurazione disponibili:\n",
|
30
|
+
"cef780a309cd234750764d42697882c24168ddab": "{key:15} {desc} (predefinito: {default})",
|
31
|
+
"68c2cc7f0ceaa3e499ecb4db331feb4debbbcc23": "Modello",
|
32
|
+
"c3f104d1365744b538bfde9f4adb6a6df4b80355": "Funzione",
|
33
|
+
"99a0efc6cfd85d8ff2732a6718140f822cb90472": "Stile",
|
34
|
+
"f1702b4686278becffc88baabe6f4b7a8355532c": "Messaggi",
|
35
|
+
"c38c6c1f3a2743f8626703abb302e403d20ff81c": "Token",
|
36
|
+
"a817d7eb8e0f1dab755ab5203a082e5c3c094fce": "Prompt",
|
37
|
+
"2ff255684a2277f806fcebf3fe338ed27857f350": "Completamento",
|
38
|
+
"b25928c69902557b0ef0a628490a3a1768d7b82f": "Totale",
|
39
|
+
"76e63d65c883ed50df40ac3aeef0c2d6a1c4ad60": "Azione Rapida",
|
40
|
+
"5397e0583f14f6c88de06b1ef28f460a1fb5b0ae": "Sì",
|
41
|
+
"816c52fd2bdd94a63cd0944823a6c0aa9384c103": "No",
|
42
|
+
"c47ae15370cfe1ed2781eedc1dc2547d12d9e972": "Aiuto",
|
43
|
+
"cc3dbd47e1cf9003a55d3366b3adbcd72275e525": "Nuovo Task",
|
44
|
+
"efa5a8b84e1afe65c81ecfce28c398c48f19ddc2": "Benvenuto su Janito{version_str}! Modalità chat attiva. Digita /exit per uscire.",
|
45
|
+
"b314d6e1460f86e0f21abc5aceb7935a2a0667e8": "Benvenuto su Janito{version_str} in modalità [white on magenta]VANILLA[/white on magenta]! Strumenti, prompt di sistema e temperatura sono disattivati, a meno che non siano sovrascritti.",
|
46
|
+
}
|
janito/provider_registry.py
CHANGED
@@ -39,7 +39,17 @@ class ProviderRegistry:
|
|
39
39
|
if len(info) == 4 and info[3]:
|
40
40
|
continue # skip providers flagged as not implemented
|
41
41
|
rows.append(info[:3])
|
42
|
-
|
42
|
+
|
43
|
+
# Group providers by openness (open-source first, then proprietary)
|
44
|
+
open_providers = {'cerebras', 'deepseek', 'alibaba', 'moonshotai', 'zai'}
|
45
|
+
|
46
|
+
def sort_key(row):
|
47
|
+
provider_name = row[0]
|
48
|
+
is_open = provider_name in open_providers
|
49
|
+
# Sort open providers alphabetically first, then proprietary alphabetically
|
50
|
+
return (not is_open, provider_name)
|
51
|
+
|
52
|
+
rows.sort(key=sort_key)
|
43
53
|
return rows
|
44
54
|
|
45
55
|
def _add_rows_to_table(self, table, rows):
|
janito/providers/__init__.py
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
# Codestral provider module
|
@@ -0,0 +1,81 @@
|
|
1
|
+
from janito.llm.model import LLMModelInfo
|
2
|
+
|
3
|
+
MODEL_SPECS = {
|
4
|
+
"codestral-latest": LLMModelInfo(
|
5
|
+
name="codestral-latest",
|
6
|
+
context=256000,
|
7
|
+
max_input=250000,
|
8
|
+
max_cot="N/A",
|
9
|
+
max_response=4096,
|
10
|
+
thinking_supported=False,
|
11
|
+
default_temp=0.2,
|
12
|
+
open="mistral",
|
13
|
+
driver="OpenAIModelDriver",
|
14
|
+
),
|
15
|
+
"codestral-2405": LLMModelInfo(
|
16
|
+
name="codestral-2405",
|
17
|
+
context=256000,
|
18
|
+
max_input=250000,
|
19
|
+
max_cot="N/A",
|
20
|
+
max_response=4096,
|
21
|
+
thinking_supported=False,
|
22
|
+
default_temp=0.2,
|
23
|
+
open="mistral",
|
24
|
+
driver="OpenAIModelDriver",
|
25
|
+
),
|
26
|
+
"mistral-small-latest": LLMModelInfo(
|
27
|
+
name="mistral-small-latest",
|
28
|
+
context=32000,
|
29
|
+
max_input=28000,
|
30
|
+
max_cot="N/A",
|
31
|
+
max_response=4096,
|
32
|
+
thinking_supported=False,
|
33
|
+
default_temp=0.7,
|
34
|
+
open="mistral",
|
35
|
+
driver="OpenAIModelDriver",
|
36
|
+
),
|
37
|
+
"mistral-medium-latest": LLMModelInfo(
|
38
|
+
name="mistral-medium-latest",
|
39
|
+
context=32000,
|
40
|
+
max_input=28000,
|
41
|
+
max_cot="N/A",
|
42
|
+
max_response=4096,
|
43
|
+
thinking_supported=False,
|
44
|
+
default_temp=0.7,
|
45
|
+
open="mistral",
|
46
|
+
driver="OpenAIModelDriver",
|
47
|
+
),
|
48
|
+
"mistral-large-latest": LLMModelInfo(
|
49
|
+
name="mistral-large-latest",
|
50
|
+
context=128000,
|
51
|
+
max_input=120000,
|
52
|
+
max_cot="N/A",
|
53
|
+
max_response=4096,
|
54
|
+
thinking_supported=False,
|
55
|
+
default_temp=0.7,
|
56
|
+
open="mistral",
|
57
|
+
driver="OpenAIModelDriver",
|
58
|
+
),
|
59
|
+
"devstral-small-latest": LLMModelInfo(
|
60
|
+
name="devstral-small-latest",
|
61
|
+
context=128000,
|
62
|
+
max_input=120000,
|
63
|
+
max_cot="N/A",
|
64
|
+
max_response=4096,
|
65
|
+
thinking_supported=False,
|
66
|
+
default_temp=0.7,
|
67
|
+
open="mistral",
|
68
|
+
driver="OpenAIModelDriver",
|
69
|
+
),
|
70
|
+
"devstral-medium-latest": LLMModelInfo(
|
71
|
+
name="devstral-medium-latest",
|
72
|
+
context=128000,
|
73
|
+
max_input=120000,
|
74
|
+
max_cot="N/A",
|
75
|
+
max_response=4096,
|
76
|
+
thinking_supported=False,
|
77
|
+
default_temp=0.7,
|
78
|
+
open="mistral",
|
79
|
+
driver="OpenAIModelDriver",
|
80
|
+
),
|
81
|
+
}
|
@@ -0,0 +1,124 @@
|
|
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.openai.driver import OpenAIModelDriver
|
6
|
+
from janito.tools import get_local_tools_adapter
|
7
|
+
from janito.providers.registry import LLMProviderRegistry
|
8
|
+
from .model_info import MODEL_SPECS
|
9
|
+
|
10
|
+
available = OpenAIModelDriver.available
|
11
|
+
unavailable_reason = OpenAIModelDriver.unavailable_reason
|
12
|
+
|
13
|
+
|
14
|
+
class MistralProvider(LLMProvider):
|
15
|
+
name = "mistral"
|
16
|
+
NAME = "mistral"
|
17
|
+
MAINTAINER = "João Pinto <janito@ikignosis.org>"
|
18
|
+
MODEL_SPECS = MODEL_SPECS
|
19
|
+
DEFAULT_MODEL = "mistral-large-latest"
|
20
|
+
|
21
|
+
def __init__(
|
22
|
+
self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
|
23
|
+
):
|
24
|
+
self._tools_adapter = get_local_tools_adapter()
|
25
|
+
self._driver = None
|
26
|
+
|
27
|
+
if not self.available:
|
28
|
+
return
|
29
|
+
|
30
|
+
self._initialize_config(auth_manager, config)
|
31
|
+
self._setup_model_config()
|
32
|
+
|
33
|
+
def _initialize_config(self, auth_manager, config):
|
34
|
+
"""Initialize configuration and API key."""
|
35
|
+
self.auth_manager = auth_manager or LLMAuthManager()
|
36
|
+
self._api_key = self.auth_manager.get_credentials(type(self).NAME)
|
37
|
+
if not self._api_key:
|
38
|
+
from janito.llm.auth_utils import handle_missing_api_key
|
39
|
+
|
40
|
+
handle_missing_api_key(self.name, "MISTRAL_API_KEY")
|
41
|
+
|
42
|
+
self._driver_config = config or LLMDriverConfig(model=None)
|
43
|
+
if not self._driver_config.model:
|
44
|
+
self._driver_config.model = self.DEFAULT_MODEL
|
45
|
+
if not self._driver_config.api_key:
|
46
|
+
self._driver_config.api_key = self._api_key
|
47
|
+
|
48
|
+
# Set Mistral-specific base URL
|
49
|
+
self._driver_config.base_url = "https://api.mistral.ai/v1"
|
50
|
+
|
51
|
+
def _setup_model_config(self):
|
52
|
+
"""Configure token limits based on model specifications."""
|
53
|
+
model_name = self._driver_config.model
|
54
|
+
model_spec = self.MODEL_SPECS.get(model_name)
|
55
|
+
|
56
|
+
# Reset token parameters
|
57
|
+
if hasattr(self._driver_config, "max_tokens"):
|
58
|
+
self._driver_config.max_tokens = None
|
59
|
+
if hasattr(self._driver_config, "max_completion_tokens"):
|
60
|
+
self._driver_config.max_completion_tokens = None
|
61
|
+
|
62
|
+
if model_spec:
|
63
|
+
if getattr(model_spec, "thinking_supported", False):
|
64
|
+
max_cot = getattr(model_spec, "max_cot", None)
|
65
|
+
if max_cot and max_cot != "N/A":
|
66
|
+
self._driver_config.max_tokens = int(max_cot)
|
67
|
+
else:
|
68
|
+
max_response = getattr(model_spec, "max_response", None)
|
69
|
+
if max_response and max_response != "N/A":
|
70
|
+
self._driver_config.max_tokens = int(max_response)
|
71
|
+
|
72
|
+
self.fill_missing_device_info(self._driver_config)
|
73
|
+
|
74
|
+
@property
|
75
|
+
def driver(self) -> OpenAIModelDriver:
|
76
|
+
if not self.available:
|
77
|
+
raise ImportError(f"MistralProvider unavailable: {self.unavailable_reason}")
|
78
|
+
return self._driver
|
79
|
+
|
80
|
+
@property
|
81
|
+
def available(self):
|
82
|
+
return available
|
83
|
+
|
84
|
+
@property
|
85
|
+
def unavailable_reason(self):
|
86
|
+
return unavailable_reason
|
87
|
+
|
88
|
+
def create_driver(self):
|
89
|
+
"""
|
90
|
+
Creates and returns a new OpenAIModelDriver instance with input/output queues.
|
91
|
+
"""
|
92
|
+
driver = OpenAIModelDriver(
|
93
|
+
tools_adapter=self._tools_adapter, provider_name=self.NAME
|
94
|
+
)
|
95
|
+
driver.config = self._driver_config
|
96
|
+
# NOTE: The caller is responsible for calling driver.start() if background processing is needed.
|
97
|
+
return driver
|
98
|
+
|
99
|
+
def create_agent(self, tools_adapter=None, agent_name: str = None, **kwargs):
|
100
|
+
from janito.llm.agent import LLMAgent
|
101
|
+
|
102
|
+
# Always create a new driver with the passed-in tools_adapter
|
103
|
+
if tools_adapter is None:
|
104
|
+
tools_adapter = get_local_tools_adapter()
|
105
|
+
# Should use new-style driver construction via queues/factory (handled elsewhere)
|
106
|
+
raise NotImplementedError(
|
107
|
+
"create_agent must be constructed via new factory using input/output queues and config."
|
108
|
+
)
|
109
|
+
|
110
|
+
@property
|
111
|
+
def model_name(self):
|
112
|
+
return self._driver_config.model
|
113
|
+
|
114
|
+
@property
|
115
|
+
def driver_config(self):
|
116
|
+
"""Public, read-only access to the provider's LLMDriverConfig object."""
|
117
|
+
return self._driver_config
|
118
|
+
|
119
|
+
def execute_tool(self, tool_name: str, event_bus, *args, **kwargs):
|
120
|
+
self._tools_adapter.event_bus = event_bus
|
121
|
+
return self._tools_adapter.execute_by_name(tool_name, *args, **kwargs)
|
122
|
+
|
123
|
+
|
124
|
+
LLMProviderRegistry.register(MistralProvider.NAME, MistralProvider)
|
janito/report_events.py
CHANGED
@@ -39,17 +39,11 @@ class RunPowershellCommandTool(ToolBase):
|
|
39
39
|
ReportAction.EXECUTE,
|
40
40
|
)
|
41
41
|
if require_confirmation:
|
42
|
-
|
43
|
-
tr(
|
44
|
-
|
45
|
-
command=command,
|
46
|
-
)
|
42
|
+
self.report_warning(
|
43
|
+
tr("⚠️ Confirmation requested, but no handler (auto-confirmed)."),
|
44
|
+
ReportAction.USER_INPUT
|
47
45
|
)
|
48
|
-
|
49
|
-
self.report_warning(
|
50
|
-
tr("⚠️ Execution cancelled by user."), ReportAction.EXECUTE
|
51
|
-
)
|
52
|
-
return False
|
46
|
+
return True # Auto-confirm for now
|
53
47
|
return True
|
54
48
|
|
55
49
|
def _launch_process(self, shell_exe, command_with_encoding):
|
@@ -143,10 +137,7 @@ class RunPowershellCommandTool(ToolBase):
|
|
143
137
|
tr("🖥️ Running PowerShell command: {command} ...\n", command=command),
|
144
138
|
ReportAction.EXECUTE,
|
145
139
|
)
|
146
|
-
|
147
|
-
command, require_confirmation, requires_user_input
|
148
|
-
):
|
149
|
-
return tr("❌ Command execution cancelled by user.")
|
140
|
+
self._confirm_and_warn(command, require_confirmation, requires_user_input)
|
150
141
|
from janito.platform_discovery import PlatformDiscovery
|
151
142
|
|
152
143
|
pd = PlatformDiscovery()
|
janito/tools/tool_base.py
CHANGED
@@ -16,8 +16,8 @@ janito/perf_singleton.py,sha256=g1h0Sdf4ydzegeEpJlMhQt4H0GQZ2hryXrdYOTL-b30,113
|
|
16
16
|
janito/performance_collector.py,sha256=RYu4av16Trj3RljJZ8-2Gbn1KlGdJUosrcVFYtwviNI,6285
|
17
17
|
janito/platform_discovery.py,sha256=JN3kC7hkxdvuj-AyrJTlbbDJjtNHke3fdlZDqGi_uz0,4621
|
18
18
|
janito/provider_config.py,sha256=acn2FEgWsEIyi2AxZiuCLoP2rXDd-nXcP5VB4CZHaeE,3189
|
19
|
-
janito/provider_registry.py,sha256=
|
20
|
-
janito/report_events.py,sha256=
|
19
|
+
janito/provider_registry.py,sha256=Qh2ujKjaa5HZmr7YOHxUy983jSDaCD-AXaZFBVC85XY,7001
|
20
|
+
janito/report_events.py,sha256=m72U9TQfbQfKcCDT8O4nYhVI6IFfQQG1ZXQa3Vhq0y4,940
|
21
21
|
janito/shell.bak.zip,sha256=hznHbmgfkAkjuQDJ3w73XPQh05yrtUZQxLmtGbanbYU,22
|
22
22
|
janito/utils.py,sha256=eXSsMgM69YyzahgCNrJQLcEbB8ssLI1MQqaa20ONxbE,376
|
23
23
|
janito/agent/setup_agent.py,sha256=HQU_h1P8VXiOVURjQ4SwvO-R3rujs6xUcPvrNniRDok,11618
|
@@ -74,7 +74,7 @@ janito/cli/chat_mode/shell/session/history.py,sha256=tYav6GgjAZkvWhlI_rfG6OArNqW
|
|
74
74
|
janito/cli/chat_mode/shell/session/manager.py,sha256=MwD9reHsRaly0CyRB-S1JJ0wPKz2g8Xdj2VvlU35Hgc,1001
|
75
75
|
janito/cli/cli_commands/list_config.py,sha256=oiQEGaGPjwjG-PrOcakpNMbbqISTsBEs7rkGH3ceQsI,1179
|
76
76
|
janito/cli/cli_commands/list_drivers.py,sha256=r2ENykUcvf_9XYp6LHd3RvLXGXyVUA6oe_Pr0dyv92I,5124
|
77
|
-
janito/cli/cli_commands/list_models.py,sha256=
|
77
|
+
janito/cli/cli_commands/list_models.py,sha256=7Cyjfwht77nm6_h1DRY2A-Nkkm1Kiy0e339EYglVqEI,1619
|
78
78
|
janito/cli/cli_commands/list_profiles.py,sha256=9-HV2EbtP2AdubbMoakjbu7Oq4Ss9UDyO7Eb6CC52wI,2681
|
79
79
|
janito/cli/cli_commands/list_providers.py,sha256=3ywm1Ohv7yVqV1E9hB-3Jz8BwzhyCScKxffq6iDI4nA,391
|
80
80
|
janito/cli/cli_commands/list_providers_region.py,sha256=qrMj_gtgEMty8UH0P_O5SgWCVJ9ZKxGUp_GdsE4_EH4,2548
|
@@ -100,7 +100,7 @@ janito/drivers/openai_responses.bak.zip,sha256=E43eDCHGa2tCtdjzj_pMnWDdnsOZzj8BJ
|
|
100
100
|
janito/drivers/azure_openai/driver.py,sha256=L2rQOl1d0BHaDChHLtZszAeuWNoyYIgwuYuahE1qJps,4152
|
101
101
|
janito/drivers/cerebras/__init__.py,sha256=yGkKANI4xKT_2j6x1-RBJhmaRzEGyt1DFaBSLt7EtYU,25
|
102
102
|
janito/drivers/openai/README.md,sha256=bgPdaYX0pyotCoJ9t3cJbYM-teQ_YM1DAFEKLCMP32Q,666
|
103
|
-
janito/drivers/openai/driver.py,sha256=
|
103
|
+
janito/drivers/openai/driver.py,sha256=NbR_1Btr7QpJjNzJ3CxJa1-Kfw17lImZFU9fyKDLSRo,19567
|
104
104
|
janito/drivers/zai/__init__.py,sha256=rleES3ZJEslJ8M02TdTPyxHKXxA4-e2fDJa6yjuzY8s,22
|
105
105
|
janito/drivers/zai/driver.py,sha256=uOR7VFEMjd7Dw_zSFO1SN5SgBCIG8b4CEzRMIUXBgUQ,18859
|
106
106
|
janito/event_bus/__init__.py,sha256=VG6GOhKMBh0O_92D-zW8a3YitJPKDajGgPiFezTXlNE,77
|
@@ -109,6 +109,7 @@ janito/event_bus/event.py,sha256=MtgcBPD7cvCuubiLIyo-BWcsNSO-941HLk6bScHTJtQ,427
|
|
109
109
|
janito/event_bus/handler.py,sha256=RhBtT1E48VEM2-k8u3HYsESw7VX5qAgiB8ZTJeKXhHc,1322
|
110
110
|
janito/event_bus/queue_bus.py,sha256=l4phun3pxXxi8ZlIq8ChYaiYDVO1PZeXoOzyi3vyu20,1558
|
111
111
|
janito/i18n/__init__.py,sha256=6zCIu6pSQpoMJvIRK9oOD3pkzbNeJik3lFDXse0X6ag,994
|
112
|
+
janito/i18n/it.py,sha256=jpWyCrwoZXxHaLEbmYL2B1ouOa854ecdCfpXq4mqroc,4052
|
112
113
|
janito/i18n/messages.py,sha256=fBuwOTFoygyHPkYphm6Y0r1iE8497Z4iryVAmPhMEkg,1851
|
113
114
|
janito/i18n/pt.py,sha256=NlTgpDSftUfFG7FGbs7TK54vQlJVMyaZDHGcWjelwMc,4168
|
114
115
|
janito/llm/README.md,sha256=6GRqCu_a9va5HCB1YqNqbshyWKFyAGlnXugrjom-xj8,1213
|
@@ -123,7 +124,7 @@ janito/llm/driver_input.py,sha256=Zq7IO4KdQPUraeIo6XoOaRy1IdQAyYY15RQw4JU30uA,38
|
|
123
124
|
janito/llm/message_parts.py,sha256=QY_0kDjaxdoErDgKPRPv1dNkkYJuXIBmHWNLiOEKAH4,1365
|
124
125
|
janito/llm/model.py,sha256=EioBkdgn8hJ0iQaKN-0KbXlsrk3YKmwR9IbvoEbdVTE,1159
|
125
126
|
janito/llm/provider.py,sha256=3FbhQPrWBSEoIdIi-5DWIh0DD_CM570EFf1NcuGyGko,7961
|
126
|
-
janito/providers/__init__.py,sha256=
|
127
|
+
janito/providers/__init__.py,sha256=HWgChDOEWKjXavZXwMlKKtdghiy7pxs4KUx3HfhyyUM,492
|
127
128
|
janito/providers/dashscope.bak.zip,sha256=BwXxRmZreEivvRtmqbr5BR62IFVlNjAf4y6DrF2BVJo,5998
|
128
129
|
janito/providers/registry.py,sha256=Ygwv9eVrTXOKhv0EKxSWQXO5WMHvajWE2Q_Lc3p7dKo,730
|
129
130
|
janito/providers/alibaba/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -142,6 +143,9 @@ janito/providers/deepseek/provider.py,sha256=eU-wwVqJog_oJ8VyQyohm6OMHlvrddSszqT
|
|
142
143
|
janito/providers/google/__init__.py,sha256=hE3OGJvLEhvNLhIK_XmCGIdrIj8MKlyGgdOLJ4mdess,38
|
143
144
|
janito/providers/google/model_info.py,sha256=AakTmzvWm1GPvFzGAq6-PeE_Dpq7BmAAqmh3L8N5KKo,1126
|
144
145
|
janito/providers/google/provider.py,sha256=NQVG5kovHOc2SDgWjVIwYGMqshvMUAqRAk9iMntQ52k,3606
|
146
|
+
janito/providers/mistral/__init__.py,sha256=L8X53_KdP8xjmwdxwPmcDHY5iiVZm2xKE4xixsjibHk,27
|
147
|
+
janito/providers/mistral/model_info.py,sha256=1Zlac_Bss3wuMELROXTVDfeSeWaI1quhhi0ISEE9NQU,2266
|
148
|
+
janito/providers/mistral/provider.py,sha256=v7zIl2EZajLF8zVyLhqhmaCzeXhyanK1X9wuX-bcCgc,4773
|
145
149
|
janito/providers/moonshotai/__init__.py,sha256=nThTAtynq4O2Iidm95daKOCKXi5APRJYtRK2Wr3SDpM,31
|
146
150
|
janito/providers/moonshotai/model_info.py,sha256=MpPAB3tZVvZ8V7tZsiJpk5SReHjVcnwwbp63aUebx9Y,718
|
147
151
|
janito/providers/moonshotai/provider.py,sha256=Lynw2cAF0IA9QPIRN4oY6Yr0cEwyVggpaQQrmkcgHuE,3874
|
@@ -166,7 +170,7 @@ janito/tools/outline_file.bak.zip,sha256=EeI2cBXCwTdWVgJDNiroxKeYlkjwo6NLKeXz3J-
|
|
166
170
|
janito/tools/path_security.py,sha256=40b0hV0X3449Dht93A04Q3c9AYSsBQsBFy2BjzM83lA,8214
|
167
171
|
janito/tools/permissions.py,sha256=_viTVXyetZC01HjI2s5c3klIJ8-RkWB1ShdOaV__loY,1508
|
168
172
|
janito/tools/permissions_parse.py,sha256=LHadt0bWglm9Q2BbbVVbKePg4oa7QLeRQ-ChQZsE_dI,384
|
169
|
-
janito/tools/tool_base.py,sha256=
|
173
|
+
janito/tools/tool_base.py,sha256=6meJZwbsqDIerh84T_C6K9G706wqoSkoR1vnrRk6mvo,3693
|
170
174
|
janito/tools/tool_events.py,sha256=czRtC2TYakAySBZvfHS_Q6_NY_7_krxzAzAL1ggRFWA,1527
|
171
175
|
janito/tools/tool_run_exception.py,sha256=43yWgTaGBGEtRteo6FvTrane6fEVGo9FU1uOdjMRWJE,525
|
172
176
|
janito/tools/tool_use_tracker.py,sha256=IaEmA22D6RuL1xMUCScOMGv0crLPwEJVGmj49cydIaM,2662
|
@@ -194,7 +198,7 @@ janito/tools/adapters/local/remove_directory.py,sha256=g1wkHcWNgtv3mfuZ4GfvqtKU3
|
|
194
198
|
janito/tools/adapters/local/remove_file.py,sha256=cSs7EIhEqblnLmwjUKrUq2M8axyT2oTXJqZs5waOAFw,2090
|
195
199
|
janito/tools/adapters/local/replace_text_in_file.py,sha256=zFGWORuaw50ZlEFf3q_s7K25Tt0QXu8yOXDeodY6kcE,10791
|
196
200
|
janito/tools/adapters/local/run_bash_command.py,sha256=iiOz2oBiPcyYG6ySOIS8zOuQ9XpYv6DiUwGiPKciADw,7623
|
197
|
-
janito/tools/adapters/local/run_powershell_command.py,sha256=
|
201
|
+
janito/tools/adapters/local/run_powershell_command.py,sha256=p9SNZ2D4CMgbwtCIQ3jwlWWNYXMOPzosdQnkToT8QKI,8961
|
198
202
|
janito/tools/adapters/local/view_file.py,sha256=-6Li0SegDUcUdH9jAulunQZj-Bm4A2MhSVbmtBFXtXQ,7137
|
199
203
|
janito/tools/adapters/local/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
|
200
204
|
janito/tools/adapters/local/get_file_outline/core.py,sha256=L_fS39v5ufLc9BK02tWMiH0nWQcXPAmbmwBNv1s_IhU,4373
|
@@ -218,9 +222,9 @@ janito/tools/adapters/local/validate_file_syntax/ps1_validator.py,sha256=TeIkPt0
|
|
218
222
|
janito/tools/adapters/local/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
|
219
223
|
janito/tools/adapters/local/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
|
220
224
|
janito/tools/adapters/local/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
|
221
|
-
janito-2.
|
222
|
-
janito-2.
|
223
|
-
janito-2.
|
224
|
-
janito-2.
|
225
|
-
janito-2.
|
226
|
-
janito-2.
|
225
|
+
janito-2.20.0.dist-info/licenses/LICENSE,sha256=GSAKapQH5ZIGWlpQTA7v5YrfECyaxaohUb1vJX-qepw,1090
|
226
|
+
janito-2.20.0.dist-info/METADATA,sha256=3d4nPJxG75tqvVS4wrbuZ18mG9m9f0BCYwLoqLscdU4,16365
|
227
|
+
janito-2.20.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
228
|
+
janito-2.20.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
|
229
|
+
janito-2.20.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
|
230
|
+
janito-2.20.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|