janito 3.16.0__py3-none-any.whl → 3.16.2__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.
@@ -1,168 +1,182 @@
1
- from rich.console import Console
2
- from rich.markdown import Markdown
3
- from rich.pretty import Pretty
4
- from rich.panel import Panel
5
- from rich.text import Text
6
- from janito.event_bus.handler import EventHandlerBase
7
- import janito.driver_events as driver_events
8
- from janito.report_events import ReportSubtype, ReportAction
9
- from janito.event_bus.bus import event_bus
10
- from janito.llm import message_parts
11
- import janito.agent_events as agent_events
12
-
13
-
14
- import sys
15
-
16
-
17
- class RichTerminalReporter(EventHandlerBase):
18
- """
19
- Handles UI rendering for janito events using Rich.
20
-
21
- - For ResponseReceived events, iterates over the 'parts' field and displays each part appropriately:
22
- - TextMessagePart: rendered as Markdown (uses 'content' field)
23
- - Other MessageParts: displayed using Pretty or a suitable Rich representation
24
- - For RequestFinished events, output is printed only if raw mode is enabled (using Pretty formatting).
25
- - Report events (info, success, error, etc.) are always printed with appropriate styling.
26
- """
27
-
28
- def __init__(self, raw_mode=False):
29
- from janito.cli.console import shared_console
30
-
31
- self.console = shared_console
32
- self.raw_mode = raw_mode
33
- import janito.report_events as report_events
34
-
35
- import janito.tools.tool_events as tool_events
36
-
37
- super().__init__(driver_events, report_events, tool_events, agent_events)
38
- self._waiting_printed = False
39
-
40
- def on_RequestStarted(self, event):
41
- # Print waiting message with provider and model name
42
- provider = None
43
- model = None
44
- if hasattr(event, "payload") and isinstance(event.payload, dict):
45
- provider = event.payload.get("provider_name")
46
- model = event.payload.get("model") or event.payload.get("model_name")
47
- if not provider:
48
- provider = getattr(event, "provider_name", None)
49
- if not provider:
50
- provider = getattr(event, "driver_name", None)
51
- if not provider:
52
- provider = "LLM"
53
- if not model:
54
- model = getattr(event, "model", None)
55
- if not model:
56
- model = getattr(event, "model_name", None)
57
- if not model:
58
- model = "?"
59
- self.console.print(
60
- f"[bold cyan]Waiting for {provider} (model: {model})...[/bold cyan]", end=""
61
- )
62
- self._waiting_printed = True
63
-
64
- def on_AgentWaitingForResponse(self, event):
65
- # Agent waiting - set flag but don't print anything
66
- self._waiting_printed = True
67
-
68
- def on_ResponseReceived(self, event):
69
- parts = event.parts if hasattr(event, "parts") else None
70
- if not parts:
71
- self.console.print("[No response parts to display]")
72
- self.console.file.flush()
73
- return
74
- for part in parts:
75
- if isinstance(part, message_parts.TextMessagePart):
76
- self.console.print(Markdown(part.content))
77
- self.console.file.flush()
78
-
79
- def delete_current_line(self):
80
- """
81
- Clears the entire current line in the terminal and returns the cursor to column 1.
82
- """
83
- # Use raw ANSI escape sequences but write directly to the underlying file
84
- # to bypass Rich's escaping/interpretation
85
- if hasattr(self.console, 'file') and hasattr(self.console.file, 'write'):
86
- self.console.file.write("\r\033[2K")
87
- self.console.file.flush()
88
- else:
89
- # Fallback to sys.stdout if console.file is not available
90
- import sys
91
- sys.stdout.write("\r\033[2K")
92
- sys.stdout.flush()
93
-
94
- def on_RequestFinished(self, event):
95
- if self._waiting_printed:
96
- self.delete_current_line()
97
- self._waiting_printed = False
98
-
99
- def on_AgentReceivedResponse(self, event):
100
- # Clear any waiting message when agent receives response
101
- if self._waiting_printed:
102
- self.delete_current_line()
103
- self._waiting_printed = False
104
-
105
- def on_ToolCallError(self, event):
106
- # Optionally handle tool call errors in a user-friendly way
107
- error = getattr(event, "error", None)
108
- tool = getattr(event, "tool_name", None)
109
- if error and tool:
110
- self.console.print(f"[bold red]Tool Error ({tool}):[/] {error}")
111
- self.console.file.flush()
112
-
113
- def on_ReportEvent(self, event):
114
- # Special handling for security-related report events
115
- subtype = getattr(event, "subtype", None)
116
- msg = getattr(event, "message", None)
117
- action = getattr(event, "action", None)
118
- tool = getattr(event, "tool", None)
119
- context = getattr(event, "context", None)
120
- if (
121
- subtype == ReportSubtype.ERROR
122
- and msg
123
- and "[SECURITY] Path access denied" in msg
124
- ):
125
- # Highlight security errors with a distinct style
126
- self.console.print(
127
- Panel(f"{msg}", title="[red]SECURITY VIOLATION[/red]", style="bold red")
128
- )
129
- self.console.file.flush()
130
- return
131
-
132
- msg = event.message if hasattr(event, "message") else None
133
- subtype = event.subtype if hasattr(event, "subtype") else None
134
- if not msg or not subtype:
135
- return
136
- if subtype == ReportSubtype.ACTION_INFO:
137
- # Clear any waiting message before showing action info
138
- if self._waiting_printed:
139
- self.delete_current_line()
140
- self._waiting_printed = False
141
- # Use orange for all write/modification actions
142
- modification_actions = (
143
- getattr(ReportAction, "UPDATE", None),
144
- getattr(ReportAction, "WRITE", None),
145
- getattr(ReportAction, "DELETE", None),
146
- getattr(ReportAction, "CREATE", None),
147
- )
148
- style = (
149
- "orange1"
150
- if getattr(event, "action", None) in modification_actions
151
- else "cyan"
152
- )
153
- self.console.print(Text(msg, style=style), end="")
154
- self.console.file.flush()
155
- elif subtype in (
156
- ReportSubtype.SUCCESS,
157
- ReportSubtype.ERROR,
158
- ReportSubtype.WARNING,
159
- ):
160
- self.console.print(msg)
161
- self.console.file.flush()
162
- elif subtype == ReportSubtype.STDOUT:
163
- print(msg)
164
- elif subtype == ReportSubtype.STDERR:
165
- print(msg, file=sys.stderr)
166
- else:
167
- self.console.print(msg)
168
- self.console.file.flush()
1
+ from rich.console import Console
2
+ from rich.markdown import Markdown
3
+ from rich.pretty import Pretty
4
+ from rich.panel import Panel
5
+ from rich.text import Text
6
+ from janito.event_bus.handler import EventHandlerBase
7
+ import janito.driver_events as driver_events
8
+ from janito.report_events import ReportSubtype, ReportAction
9
+ from janito.event_bus.bus import event_bus
10
+ from janito.llm import message_parts
11
+ import janito.agent_events as agent_events
12
+
13
+
14
+ import sys
15
+
16
+
17
+ class RichTerminalReporter(EventHandlerBase):
18
+ """
19
+ Handles UI rendering for janito events using Rich.
20
+
21
+ - For ResponseReceived events, iterates over the 'parts' field and displays each part appropriately:
22
+ - TextMessagePart: rendered as Markdown (uses 'content' field)
23
+ - Other MessageParts: displayed using Pretty or a suitable Rich representation
24
+ - For RequestFinished events, output is printed only if raw mode is enabled (using Pretty formatting).
25
+ - Report events (info, success, error, etc.) are always printed with appropriate styling.
26
+ """
27
+
28
+ def __init__(self, raw_mode=False):
29
+ from janito.cli.console import shared_console
30
+
31
+ self.console = shared_console
32
+ self.raw_mode = raw_mode
33
+ import janito.report_events as report_events
34
+
35
+ import janito.tools.tool_events as tool_events
36
+
37
+ super().__init__(driver_events, report_events, tool_events, agent_events)
38
+ self._waiting_printed = False
39
+
40
+ def on_RequestStarted(self, event):
41
+ # Print waiting message with provider and model name
42
+ provider = None
43
+ model = None
44
+ if hasattr(event, "payload") and isinstance(event.payload, dict):
45
+ provider = event.payload.get("provider_name")
46
+ model = event.payload.get("model") or event.payload.get("model_name")
47
+ if not provider:
48
+ provider = getattr(event, "provider_name", None)
49
+ if not provider:
50
+ provider = getattr(event, "driver_name", None)
51
+ if not provider:
52
+ provider = "LLM"
53
+ if not model:
54
+ model = getattr(event, "model", None)
55
+ if not model:
56
+ model = getattr(event, "model_name", None)
57
+ if not model:
58
+ model = "?"
59
+ self.console.print(
60
+ f"[bold cyan]Waiting for {provider} (model: {model})...[/bold cyan]", end=""
61
+ )
62
+ self._waiting_printed = True
63
+
64
+ def on_AgentWaitingForResponse(self, event):
65
+ # Agent waiting - set flag but don't print anything
66
+ self._waiting_printed = True
67
+
68
+ def on_ResponseReceived(self, event):
69
+ parts = event.parts if hasattr(event, "parts") else None
70
+ if not parts:
71
+ self.console.print("[No response parts to display]")
72
+ self.console.file.flush()
73
+ return
74
+ for part in parts:
75
+ if isinstance(part, message_parts.TextMessagePart):
76
+ self.console.print(Markdown(part.content))
77
+ self.console.file.flush()
78
+
79
+ def delete_current_line(self):
80
+ """
81
+ Clears the entire current line in the terminal and returns the cursor to column 1.
82
+ """
83
+ # Use raw ANSI escape sequences but write directly to the underlying file
84
+ # to bypass Rich's escaping/interpretation
85
+ if hasattr(self.console, "file") and hasattr(self.console.file, "write"):
86
+ self.console.file.write("\r\033[2K")
87
+ self.console.file.flush()
88
+ else:
89
+ # Fallback to sys.stdout if console.file is not available
90
+ import sys
91
+
92
+ sys.stdout.write("\r\033[2K")
93
+ sys.stdout.flush()
94
+
95
+ def on_RequestFinished(self, event):
96
+ # Check if this is an error status and display the error message
97
+ status = getattr(event, "status", None)
98
+ if status == driver_events.RequestStatus.ERROR:
99
+ error_msg = getattr(event, "error", "Unknown error occurred")
100
+ self.console.print(f"[bold red]Request Error:[/bold red] {error_msg}")
101
+
102
+ # Optionally print the traceback if available and in raw mode
103
+ if self.raw_mode:
104
+ traceback = getattr(event, "traceback", None)
105
+ if traceback:
106
+ self.console.print("[bold yellow]Traceback:[/bold yellow]")
107
+ self.console.print(traceback)
108
+
109
+ if self._waiting_printed:
110
+ self.delete_current_line()
111
+ self._waiting_printed = False
112
+
113
+ def on_AgentReceivedResponse(self, event):
114
+ # Clear any waiting message when agent receives response
115
+ if self._waiting_printed:
116
+ self.delete_current_line()
117
+ self._waiting_printed = False
118
+
119
+ def on_ToolCallError(self, event):
120
+ # Optionally handle tool call errors in a user-friendly way
121
+ error = getattr(event, "error", None)
122
+ tool = getattr(event, "tool_name", None)
123
+ if error and tool:
124
+ self.console.print(f"[bold red]Tool Error ({tool}):[/] {error}")
125
+ self.console.file.flush()
126
+
127
+ def on_ReportEvent(self, event):
128
+ # Special handling for security-related report events
129
+ subtype = getattr(event, "subtype", None)
130
+ msg = getattr(event, "message", None)
131
+ action = getattr(event, "action", None)
132
+ tool = getattr(event, "tool", None)
133
+ context = getattr(event, "context", None)
134
+ if (
135
+ subtype == ReportSubtype.ERROR
136
+ and msg
137
+ and "[SECURITY] Path access denied" in msg
138
+ ):
139
+ # Highlight security errors with a distinct style
140
+ self.console.print(
141
+ Panel(f"{msg}", title="[red]SECURITY VIOLATION[/red]", style="bold red")
142
+ )
143
+ self.console.file.flush()
144
+ return
145
+
146
+ msg = event.message if hasattr(event, "message") else None
147
+ subtype = event.subtype if hasattr(event, "subtype") else None
148
+ if not msg or not subtype:
149
+ return
150
+ if subtype == ReportSubtype.ACTION_INFO:
151
+ # Clear any waiting message before showing action info
152
+ if self._waiting_printed:
153
+ self.delete_current_line()
154
+ self._waiting_printed = False
155
+ # Use orange for all write/modification actions
156
+ modification_actions = (
157
+ getattr(ReportAction, "UPDATE", None),
158
+ getattr(ReportAction, "WRITE", None),
159
+ getattr(ReportAction, "DELETE", None),
160
+ getattr(ReportAction, "CREATE", None),
161
+ )
162
+ style = (
163
+ "orange1"
164
+ if getattr(event, "action", None) in modification_actions
165
+ else "cyan"
166
+ )
167
+ self.console.print(Text(msg, style=style), end="")
168
+ self.console.file.flush()
169
+ elif subtype in (
170
+ ReportSubtype.SUCCESS,
171
+ ReportSubtype.ERROR,
172
+ ReportSubtype.WARNING,
173
+ ):
174
+ self.console.print(msg)
175
+ self.console.file.flush()
176
+ elif subtype == ReportSubtype.STDOUT:
177
+ print(msg)
178
+ elif subtype == ReportSubtype.STDERR:
179
+ print(msg, file=sys.stderr)
180
+ else:
181
+ self.console.print(msg)
182
+ self.console.file.flush()
@@ -1,72 +1,76 @@
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.tools import get_local_tools_adapter
6
- from janito.providers.registry import LLMProviderRegistry
7
- from janito.providers.anthropic.model_info import MODEL_SPECS
8
- from janito.drivers.openai.driver import OpenAIModelDriver
9
-
10
-
11
- class AnthropicProvider(LLMProvider):
12
- """Anthropic LLM Provider implementation."""
13
-
14
- name = "anthropic"
15
- NAME = "anthropic" # For backward compatibility
16
- MAINTAINER = "Alberto Minetti <alberto.minetti@gmail.com>"
17
- MODEL_SPECS = MODEL_SPECS
18
- DEFAULT_MODEL = "claude-3-7-sonnet-20250219"
19
- available = OpenAIModelDriver.available
20
- unavailable_reason = OpenAIModelDriver.unavailable_reason
21
-
22
- def __init__(
23
- self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
24
- ):
25
- self._tools_adapter = get_local_tools_adapter()
26
-
27
- # Call parent constructor to initialize base functionality
28
- super().__init__(auth_manager=auth_manager, config=config, tools_adapter=self._tools_adapter)
29
-
30
- # Initialize API key and configure Anthropic-specific settings
31
- if self.available:
32
- self._initialize_anthropic_config()
33
-
34
- def _initialize_anthropic_config(self):
35
- """Initialize Anthropic-specific configuration."""
36
- # Initialize API key
37
- api_key = self.auth_manager.get_credentials(self.name)
38
- if not api_key:
39
- from janito.llm.auth_utils import handle_missing_api_key
40
- handle_missing_api_key(self.name, "ANTHROPIC_API_KEY")
41
-
42
- # Set API key in config
43
- if not self.config.api_key:
44
- self.config.api_key = api_key
45
-
46
- # Set the Anthropic OpenAI-compatible API endpoint
47
- self.config.base_url = "https://api.anthropic.com/v1/"
48
-
49
- def create_driver(self) -> OpenAIModelDriver:
50
- """
51
- Create and return a new OpenAIModelDriver instance for Anthropic.
52
-
53
- Returns:
54
- A new OpenAIModelDriver instance configured for Anthropic API
55
- """
56
- if not self.available:
57
- raise ImportError(f"AnthropicProvider unavailable: {self.unavailable_reason}")
58
-
59
- driver = OpenAIModelDriver(
60
- tools_adapter=self.tools_adapter,
61
- provider_name=self.name
62
- )
63
- driver.config = self.config
64
- return driver
65
-
66
- def execute_tool(self, tool_name: str, event_bus, *args, **kwargs):
67
- """Execute a tool by name."""
68
- self.tools_adapter.event_bus = event_bus
69
- return self.tools_adapter.execute_by_name(tool_name, *args, **kwargs)
70
-
71
-
72
- LLMProviderRegistry.register(AnthropicProvider.NAME, AnthropicProvider)
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.tools import get_local_tools_adapter
6
+ from janito.providers.registry import LLMProviderRegistry
7
+ from janito.providers.anthropic.model_info import MODEL_SPECS
8
+ from janito.drivers.openai.driver import OpenAIModelDriver
9
+
10
+
11
+ class AnthropicProvider(LLMProvider):
12
+ """Anthropic LLM Provider implementation."""
13
+
14
+ name = "anthropic"
15
+ NAME = "anthropic" # For backward compatibility
16
+ MAINTAINER = "Alberto Minetti <alberto.minetti@gmail.com>"
17
+ MODEL_SPECS = MODEL_SPECS
18
+ DEFAULT_MODEL = "claude-sonnet-4-5-20250929"
19
+ available = OpenAIModelDriver.available
20
+ unavailable_reason = OpenAIModelDriver.unavailable_reason
21
+
22
+ def __init__(
23
+ self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
24
+ ):
25
+ self._tools_adapter = get_local_tools_adapter()
26
+
27
+ # Call parent constructor to initialize base functionality
28
+ super().__init__(
29
+ auth_manager=auth_manager, config=config, tools_adapter=self._tools_adapter
30
+ )
31
+
32
+ # Initialize API key and configure Anthropic-specific settings
33
+ if self.available:
34
+ self._initialize_anthropic_config()
35
+
36
+ def _initialize_anthropic_config(self):
37
+ """Initialize Anthropic-specific configuration."""
38
+ # Initialize API key
39
+ api_key = self.auth_manager.get_credentials(self.name)
40
+ if not api_key:
41
+ from janito.llm.auth_utils import handle_missing_api_key
42
+
43
+ handle_missing_api_key(self.name, "ANTHROPIC_API_KEY")
44
+
45
+ # Set API key in config
46
+ if not self.config.api_key:
47
+ self.config.api_key = api_key
48
+
49
+ # Set the Anthropic OpenAI-compatible API endpoint
50
+ self.config.base_url = "https://api.anthropic.com/v1/"
51
+
52
+ def create_driver(self) -> OpenAIModelDriver:
53
+ """
54
+ Create and return a new OpenAIModelDriver instance for Anthropic.
55
+
56
+ Returns:
57
+ A new OpenAIModelDriver instance configured for Anthropic API
58
+ """
59
+ if not self.available:
60
+ raise ImportError(
61
+ f"AnthropicProvider unavailable: {self.unavailable_reason}"
62
+ )
63
+
64
+ driver = OpenAIModelDriver(
65
+ tools_adapter=self.tools_adapter, provider_name=self.name
66
+ )
67
+ driver.config = self.config
68
+ return driver
69
+
70
+ def execute_tool(self, tool_name: str, event_bus, *args, **kwargs):
71
+ """Execute a tool by name."""
72
+ self.tools_adapter.event_bus = event_bus
73
+ return self.tools_adapter.execute_by_name(tool_name, *args, **kwargs)
74
+
75
+
76
+ LLMProviderRegistry.register(AnthropicProvider.NAME, AnthropicProvider)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 3.16.0
3
+ Version: 3.16.2
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
@@ -21,20 +21,20 @@ janito/provider_registry.py,sha256=IRNB35Cjn4PSXMWOxKBjPg0DfUEOoL4vh63OSPxhMtk,6
21
21
  janito/report_events.py,sha256=q4OR_jTZNfcqaQF_fzTjgqo6_VlUIxSGWfhpT4nJWcw,938
22
22
  janito/shell.bak.zip,sha256=hznHbmgfkAkjuQDJ3w73XPQh05yrtUZQxLmtGbanbYU,22
23
23
  janito/utils.py,sha256=eXSsMgM69YyzahgCNrJQLcEbB8ssLI1MQqaa20ONxbE,376
24
- janito/agent/setup_agent.py,sha256=WVuWkVRkMo9NOTXdSPE5HGe88g5bgIa8T777eW7_KcA,12899
25
- janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2,sha256=A33q_KPtowfD5IofHAYxJrfLKQIFr13cVLleCbM5Aik,4052
26
- janito/agent/templates/profiles/system_prompt_template_developer.txt.j2,sha256=rho3zGkoLol5faiALIEPe8-FgT3-VdpyddIwgzv1xDU,3745
27
- janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2,sha256=Tv7mIxUHrZqc8bSeX41bZN8uIaDTdeKuBnHSbnDHDKE,4226
28
- janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2,sha256=Zgoa26AlR37rjYAPl-4ydA3NdHm8ylT831IaMiGTd5o,1722
24
+ janito/agent/setup_agent.py,sha256=NZmbIZfFyRW7B1DYa57q2ylM-cC-Y9vkkjrXU702gKY,12973
25
+ janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2,sha256=70AntMlMV2a4mzQXM4ieWpPJc3ydtZU-KKqmmn7YMJI,3823
26
+ janito/agent/templates/profiles/system_prompt_template_developer.txt.j2,sha256=gN1DCJmHCdQ7PQZzl2slDArhMaBhEIgGdU8biu9jgzU,3506
27
+ janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2,sha256=4py-FjgNggjjz9f0ckOHKfgp3cdynq0HlMi1NLzH2EA,3985
28
+ janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2,sha256=hkTtdc012FOyPPrZLAj6YL3rrnhWcAbm-CzsoEA4DiQ,1389
29
29
  janito/cli/__init__.py,sha256=xaPDOrWphBbCR63Xpcx_yfpXSJIlCaaICc4j2qpWqrM,194
30
30
  janito/cli/config.py,sha256=HkZ14701HzIqrvaNyDcDhGlVHfpX_uHlLp2rHmhRm_k,872
31
31
  janito/cli/console.py,sha256=dWOa6mbfCQd46wVwwZfeYBxroCxdqvnAZQQ80j89qYA,70
32
32
  janito/cli/main.py,sha256=s5odou0txf8pzTf1ADk2yV7T5m8B6cejJ81e7iu776U,312
33
- janito/cli/main_cli.py,sha256=JaZUedhNdeNRaYU5j2bH0u1dD8B89olk3ZSx1_REQjI,17204
33
+ janito/cli/main_cli.py,sha256=dpHK84e_pIrkfJa2jRENQB9Y46Zn-Z9VJJmfv6NWJA4,17543
34
34
  janito/cli/prompt_core.py,sha256=x1RcX1p4wCL4YzXS76T6BZ8nt5cGiXCAB3QOlC6BJQQ,14937
35
35
  janito/cli/prompt_handler.py,sha256=SnPTlL64noeAMGlI08VBDD5IDD8jlVMIYA4-fS8zVLg,215
36
36
  janito/cli/prompt_setup.py,sha256=s48gvNfZhKjsEhf4EzL1tKIGm4wDidPMDvlM6TAPYes,2116
37
- janito/cli/rich_terminal_reporter.py,sha256=ZIGrFQJK6VU1hM5hrH8VRJf99tsd1ox4hbop-M4a944,6552
37
+ janito/cli/rich_terminal_reporter.py,sha256=jZAOsOzFZRBId1rTGv7WwfLQ3tz5YwBUsCJ3Wg6RL0c,7397
38
38
  janito/cli/utils.py,sha256=plCQiDKIf3V8mFhhX5H9-MF2W86i-xRdWf8Xi117Z0w,677
39
39
  janito/cli/verbose_output.py,sha256=wY_B4of5e8Vv7w1fRwOZzNGU2JqbMdcFnGjtEr4hLus,7686
40
40
  janito/cli/chat_mode/bindings.py,sha256=odjc5_-YW1t2FRhBUNRNoBMoQIg5sMz3ktV7xG0ADFU,975
@@ -94,7 +94,7 @@ janito/cli/cli_commands/model_utils.py,sha256=4t2ZN8DYA8jxluXHiiliV8gMbF_90nKGtg
94
94
  janito/cli/cli_commands/ping_providers.py,sha256=hetZAKKZzQYRpRDT5OvRTOe4jYUVNZGjo8gFoyeRA3I,1921
95
95
  janito/cli/cli_commands/set_api_key.py,sha256=IR_hUcLjK-2oJmiIVdjc8epPsQAzqEN9MS7lSTVqmKM,1060
96
96
  janito/cli/cli_commands/show_config.py,sha256=ammzVEqJQCAdWFRrhI1zjjmzgTCH2l38REoT4gYJPP0,3467
97
- janito/cli/cli_commands/show_system_prompt.py,sha256=RvUaSoLFW7rLu7xMF8lNc1E2PGXCEuqQe_vglb7orqw,6321
97
+ janito/cli/cli_commands/show_system_prompt.py,sha256=on3olqfmPNAD9kfl5dAbl7BLFks57dni66QT-ke8kJI,6429
98
98
  janito/cli/core/__init__.py,sha256=YH95fhgY9yBX8RgqX9dSrEkl4exjV0T4rbmJ6xUpG-Y,196
99
99
  janito/cli/core/event_logger.py,sha256=1X6lR0Ax7AgF8HlPWFoY5Ystuu7Bh4ooTo78vXzeGB0,2008
100
100
  janito/cli/core/getters.py,sha256=opmcSz86J-I95Klsh0c4y6lsYvNakrvRqvuA0o5ARWI,2869
@@ -209,7 +209,7 @@ janito/providers/alibaba/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
209
209
  janito/providers/alibaba/model_info.py,sha256=cvw4s0YQMB6cbFkIsiu5rMCsWVnko2Cfb5bAtF--s2I,5510
210
210
  janito/providers/alibaba/provider.py,sha256=YgGDpo19dAjmX1WlhosbUjCWGwHUeAPeT6xl7zDg3yI,3474
211
211
  janito/providers/anthropic/model_info.py,sha256=ppDB5LRdEg6NG9Q5-egMpUg-8pky21WufT0n3YlEAZo,1590
212
- janito/providers/anthropic/provider.py,sha256=x_aAP7dJ64rXk6ZbzjcF8VH8y8JV9Bko_Yx5SXjPLwc,2810
212
+ janito/providers/anthropic/provider.py,sha256=BeeVq4Q7obekANqec1Hqyrup-3YeHerRbbDf1I2D0hA,2874
213
213
  janito/providers/azure_openai/model_info.py,sha256=TMSqEpQROIIYUGAyulYJ5xGhj7CbLoaKL_JXeLbXaG0,689
214
214
  janito/providers/azure_openai/provider.py,sha256=7N3tOKrPujn9sYPcB3lNBkIVcFj-ql7_awdg462QDMQ,5144
215
215
  janito/providers/cerebras/__init__.py,sha256=w7VvVDG-AmW7axvt80TSM_HvAM7MjtH_2yM2wzy-Wok,28
@@ -266,9 +266,9 @@ janito/tools/tool_utils.py,sha256=alPm9DvtXSw_zPRKvP5GjbebPRf_nfvmWk2TNlL5Cws,12
266
266
  janito/tools/tools_adapter.py,sha256=3Phjw34mOqG0KvXzQpZKIWigfSgZWRvdYuSdvV7Dj4M,21965
267
267
  janito/tools/tools_schema.py,sha256=bv7jQfjh6yCbiRNPJykmbCTBgZZrOV2z_WqWQOjeY5o,4324
268
268
  janito/tools/url_whitelist.py,sha256=0CPLkHTp5HgnwgjxwgXnJmwPeZQ30q4j3YjW59hiUUE,4295
269
- janito-3.16.0.dist-info/licenses/LICENSE,sha256=dXV4fOF2ZErugtN8l_Nrj5tsRTYgtjE3cgiya0UfBio,11356
270
- janito-3.16.0.dist-info/METADATA,sha256=p2qFTzG3Frh1y4Ii8pJX1AwrzwDkmci-pq8oZLbLmZg,1722
271
- janito-3.16.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
272
- janito-3.16.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
273
- janito-3.16.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
274
- janito-3.16.0.dist-info/RECORD,,
269
+ janito-3.16.2.dist-info/licenses/LICENSE,sha256=dXV4fOF2ZErugtN8l_Nrj5tsRTYgtjE3cgiya0UfBio,11356
270
+ janito-3.16.2.dist-info/METADATA,sha256=fVraMUGJSMO1nc_qZdxPjyom6ksOfAGUIAw_2tc-VSs,1722
271
+ janito-3.16.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
272
+ janito-3.16.2.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
273
+ janito-3.16.2.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
274
+ janito-3.16.2.dist-info/RECORD,,