janito 3.12.1__py3-none-any.whl → 3.12.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,76 +1,134 @@
1
- from janito.tools.tool_base import ToolBase, ToolPermissions
2
- from janito.report_events import ReportAction
3
- from janito.plugins.tools.local.adapter import register_local_tool
4
- from janito.i18n import tr
5
- from janito.tools.loop_protection_decorator import protect_against_loops
6
- from typing import Sequence
7
-
8
-
9
- @register_local_tool
10
- class ShowImageGridTool(ToolBase):
11
- """Display multiple images in a grid inline in the terminal using rich.
12
-
13
- Args:
14
- paths (list[str]): List of image file paths.
15
- columns (int, optional): Number of columns in the grid. Default: 2.
16
- width (int, optional): Max width for each image cell. Default: None (auto).
17
- height (int, optional): Max height for each image cell. Default: None (auto).
18
- preserve_aspect (bool, optional): Preserve aspect ratio. Default: True.
19
-
20
- Returns:
21
- str: Status string summarizing the grid display.
22
- """
23
-
24
- permissions = ToolPermissions(read=True)
25
- tool_name = "show_image_grid"
26
-
27
- @protect_against_loops(max_calls=5, time_window=10.0, key_field="paths")
28
- def run(
29
- self,
30
- paths: Sequence[str],
31
- columns: int = 2,
32
- width: int | None = None,
33
- height: int | None = None,
34
- preserve_aspect: bool = True,
35
- ) -> str:
36
- from janito.tools.path_utils import expand_path
37
- from janito.tools.tool_utils import display_path
38
- import os
39
-
40
- try:
41
- from rich.console import Console
42
- from rich.columns import Columns
43
- from PIL import Image as PILImage
44
- from rich.panel import Panel
45
- except Exception as e:
46
- msg = tr("⚠️ Missing dependency: PIL/Pillow ({error})", error=e)
47
- self.report_error(msg)
48
- return msg
49
-
50
- if not paths:
51
- return tr("No images provided")
52
-
53
- self.report_action(tr("🖼️ Show image grid ({n} images)", n=len(paths)), ReportAction.READ)
54
-
55
- console = Console()
56
- images = []
57
- shown = 0
58
- for p in paths:
59
- fp = expand_path(p)
60
- if not os.path.exists(fp):
61
- self.report_warning(tr("❗ not found: {p}", p=display_path(fp)))
62
- continue
63
- try:
64
- img = PILImage.open(fp)
65
- title = f"{display_path(fp)} ({img.width}x{img.height})"
66
- images.append(Panel.fit(title, title=display_path(fp), border_style="dim"))
67
- shown += 1
68
- except Exception as e:
69
- self.report_warning(tr("⚠️ Skipped {p}: {e}", p=display_path(fp), e=e))
70
-
71
- if not images:
72
- return tr("No images could be displayed")
73
-
74
- console.print(Columns(images, equal=True, expand=True, columns=columns))
75
- self.report_success(tr("✅ Displayed {n} images", n=shown))
76
- return tr("Displayed {shown}/{total} images in a {cols}x? grid", shown=shown, total=len(paths), cols=columns)
1
+ from janito.tools.tool_base import ToolBase, ToolPermissions
2
+ from janito.report_events import ReportAction
3
+ from janito.plugins.tools.local.adapter import register_local_tool
4
+ from janito.i18n import tr
5
+ from janito.tools.loop_protection_decorator import protect_against_loops
6
+ from typing import Sequence
7
+
8
+
9
+ @register_local_tool
10
+ class ShowImageGridTool(ToolBase):
11
+ """Display multiple images in a grid inline in the terminal using rich.
12
+
13
+ Args:
14
+ paths (list[str]): List of image file paths.
15
+ columns (int, optional): Number of columns in the grid. Default: 2.
16
+ width (int, optional): Max width for each image cell. Default: None (auto).
17
+ height (int, optional): Max height for each image cell. Default: None (auto).
18
+ preserve_aspect (bool, optional): Preserve aspect ratio. Default: True.
19
+
20
+ Returns:
21
+ str: Status string summarizing the grid display.
22
+ """
23
+
24
+ permissions = ToolPermissions(read=True)
25
+ tool_name = "show_image_grid"
26
+
27
+ @protect_against_loops(max_calls=5, time_window=10.0, key_field="paths")
28
+ def run(
29
+ self,
30
+ paths: Sequence[str],
31
+ columns: int = 2,
32
+ width: int | None = None,
33
+ height: int | None = None,
34
+ preserve_aspect: bool = True,
35
+ ) -> str:
36
+ from janito.tools.path_utils import expand_path
37
+ from janito.tools.tool_utils import display_path
38
+ import os
39
+
40
+ try:
41
+ from rich.console import Console
42
+ from rich.columns import Columns
43
+ from PIL import Image as PILImage
44
+ from rich.panel import Panel
45
+ except Exception as e:
46
+ msg = tr("⚠️ Missing dependency: PIL/Pillow ({error})", error=e)
47
+ self.report_error(msg)
48
+ return msg
49
+
50
+ if not paths:
51
+ return tr("No images provided")
52
+
53
+ self.report_action(tr("🖼️ Show image grid ({n} images)", n=len(paths)), ReportAction.READ)
54
+
55
+ console = Console()
56
+ images = []
57
+ shown = 0
58
+
59
+ # Import numpy for ASCII art conversion
60
+ import numpy as np
61
+
62
+ # Create ASCII art representation function
63
+ def image_to_ascii(image, target_width=20, target_height=10):
64
+ try:
65
+ # Convert to grayscale and resize
66
+ img_gray = image.convert('L')
67
+ img_resized = img_gray.resize((target_width, target_height))
68
+
69
+ # Convert to numpy array
70
+ pixels = np.array(img_resized)
71
+
72
+ # ASCII characters from dark to light
73
+ ascii_chars = "@%#*+=-:. "
74
+
75
+ # Normalize pixels to ASCII range
76
+ ascii_art = ""
77
+ for row in pixels:
78
+ for pixel in row:
79
+ # Map pixel value (0-255) to ASCII index
80
+ ascii_index = int((pixel / 255) * (len(ascii_chars) - 1))
81
+ ascii_art += ascii_chars[ascii_index]
82
+ ascii_art += "\n"
83
+
84
+ return ascii_art.strip()
85
+ except Exception:
86
+ return None
87
+
88
+ for p in paths:
89
+ fp = expand_path(p)
90
+ if not os.path.exists(fp):
91
+ self.report_warning(tr("❗ not found: {p}", p=display_path(fp)))
92
+ continue
93
+ try:
94
+ img = PILImage.open(fp)
95
+
96
+ # Create ASCII art preview
97
+ ascii_art = image_to_ascii(img, 20, 10)
98
+
99
+ if ascii_art:
100
+ from rich.text import Text
101
+ title_text = Text(f"{display_path(fp)}\n{img.width}×{img.height}", style="bold")
102
+ ascii_text = Text(ascii_art, style="dim")
103
+ combined_text = Text.assemble(title_text, "\n", ascii_text)
104
+ panel = Panel(combined_text, title="Image", border_style="dim")
105
+ else:
106
+ # Fallback to just info if ASCII art fails
107
+ title = f"{display_path(fp)} ({img.width}x{img.height})"
108
+ panel = Panel.fit(title, title=display_path(fp), border_style="dim")
109
+
110
+ images.append(panel)
111
+ shown += 1
112
+ except Exception as e:
113
+ self.report_warning(tr("⚠️ Skipped {p}: {e}", p=display_path(fp), e=e))
114
+
115
+ if not images:
116
+ return tr("No images could be displayed")
117
+
118
+ # Use manual column layout since Columns doesn't support columns parameter
119
+ if columns > 1:
120
+ # Group images into rows
121
+ rows = []
122
+ for i in range(0, len(images), columns):
123
+ row_images = images[i:i+columns]
124
+ rows.append(Columns(row_images, equal=True, expand=True))
125
+
126
+ # Print all rows
127
+ for row in rows:
128
+ console.print(row)
129
+ else:
130
+ # Single column - print each image panel separately
131
+ for image_panel in images:
132
+ console.print(image_panel)
133
+ self.report_success(tr("✅ Displayed {n} images", n=shown))
134
+ return tr("Displayed {shown}/{total} images in a {cols}x? grid", shown=shown, total=len(paths), cols=columns)
@@ -1,105 +1,136 @@
1
- from janito.llm.model import LLMModelInfo
2
-
3
- MODEL_SPECS = {
4
- "qwen-turbo": LLMModelInfo(
5
- name="qwen-turbo",
6
- context=1008192,
7
- max_response=8192,
8
- category="Alibaba Qwen Turbo Model (OpenAI-compatible)",
9
- driver="OpenAIModelDriver",
10
- thinking_supported=True,
11
- thinking=False,
12
- max_cot=8192,
13
- ),
14
- "qwen-plus": LLMModelInfo(
15
- name="qwen-plus",
16
- context=131072,
17
- max_response=8192,
18
- category="Alibaba Qwen Plus Model (OpenAI-compatible)",
19
- driver="OpenAIModelDriver",
20
- thinking_supported=True,
21
- thinking=False,
22
- max_cot=8192,
23
- ),
24
- "qwen-max": LLMModelInfo(
25
- name="qwen-max",
26
- context=32768,
27
- max_response=8192,
28
- category="Alibaba Qwen Max Model (OpenAI-compatible)",
29
- driver="OpenAIModelDriver",
30
- thinking_supported=True,
31
- thinking=False,
32
- max_cot=8192,
33
- ),
34
- "qwen3-coder-plus": LLMModelInfo(
35
- name="qwen3-coder-plus",
36
- context=1048576,
37
- max_response=65536,
38
- category="Alibaba Qwen3 Coder Plus Model (OpenAI-compatible)",
39
- driver="OpenAIModelDriver",
40
- thinking_supported=True,
41
- thinking=False,
42
- max_cot=65536,
43
- ),
44
- "qwen3-coder-480b-a35b-instruct": LLMModelInfo(
45
- name="qwen3-coder-480b-a35b-instruct",
46
- context=262144,
47
- max_response=65536,
48
- category="Alibaba Qwen3 Coder 480B A35B Instruct Model (OpenAI-compatible)",
49
- driver="OpenAIModelDriver",
50
- thinking_supported=True,
51
- thinking=False,
52
- max_cot=65536,
53
- ),
54
- # Qwen3 1M context models (July 2025 update)
55
- "qwen3-235b-a22b-thinking-2507": LLMModelInfo(
56
- name="qwen3-235b-a22b-thinking-2507",
57
- context=131072, # Supports up to 1M with special config
58
- max_response=32768,
59
- category="Alibaba Qwen3 235B A22B Thinking Model (OpenAI-compatible)",
60
- driver="OpenAIModelDriver",
61
- thinking=True,
62
- thinking_supported=True,
63
- max_cot=32768,
64
- ),
65
- "qwen3-235b-a22b-instruct-2507": LLMModelInfo(
66
- name="qwen3-235b-a22b-instruct-2507",
67
- context=129024, # Supports up to 1M with special config
68
- max_response=32768,
69
- category="Alibaba Qwen3 235B A22B Instruct Model (OpenAI-compatible)",
70
- driver="OpenAIModelDriver",
71
- thinking_supported=True,
72
- thinking=False,
73
- max_cot=32768,
74
- ),
75
- "qwen3-30b-a3b-thinking-2507": LLMModelInfo(
76
- name="qwen3-30b-a3b-thinking-2507",
77
- context=126976, # Supports up to 1M with special config
78
- max_response=32768,
79
- category="Alibaba Qwen3 30B A3B Thinking Model (OpenAI-compatible)",
80
- driver="OpenAIModelDriver",
81
- thinking=True,
82
- thinking_supported=True,
83
- max_cot=32768,
84
- ),
85
- "qwen3-30b-a3b-instruct-2507": LLMModelInfo(
86
- name="qwen3-30b-a3b-instruct-2507",
87
- context=129024, # Supports up to 1M with special config
88
- max_response=32768,
89
- category="Alibaba Qwen3 30B A3B Instruct Model (OpenAI-compatible)",
90
- driver="OpenAIModelDriver",
91
- thinking_supported=True,
92
- thinking=False,
93
- max_cot=32768,
94
- ),
95
- "qwen3-max-preview": LLMModelInfo(
96
- name="qwen3-max-preview",
97
- context=131072, # 128K context window
98
- max_response=32768,
99
- category="Alibaba Qwen3 Max Preview Model (OpenAI-compatible)",
100
- driver="OpenAIModelDriver",
101
- thinking_supported=True,
102
- thinking=False,
103
- max_cot=32768,
104
- ),
105
- }
1
+ from janito.llm.model import LLMModelInfo
2
+
3
+ MODEL_SPECS = {
4
+ "qwen-turbo": LLMModelInfo(
5
+ name="qwen-turbo",
6
+ context=1008192,
7
+ max_response=8192,
8
+ category="Alibaba Qwen Turbo Model (OpenAI-compatible)",
9
+ driver="OpenAIModelDriver",
10
+ thinking_supported=True,
11
+ thinking=False,
12
+ max_cot=8192,
13
+ ),
14
+ "qwen-plus": LLMModelInfo(
15
+ name="qwen-plus",
16
+ context=131072,
17
+ max_response=8192,
18
+ category="Alibaba Qwen Plus Model (OpenAI-compatible)",
19
+ driver="OpenAIModelDriver",
20
+ thinking_supported=True,
21
+ thinking=False,
22
+ max_cot=8192,
23
+ ),
24
+ "qwen-flash": LLMModelInfo(
25
+ name="qwen-flash",
26
+ context=1000000,
27
+ max_response=8192,
28
+ category="Alibaba Qwen Flash Model (OpenAI-compatible)",
29
+ driver="OpenAIModelDriver",
30
+ thinking_supported=True,
31
+ thinking=False,
32
+ max_cot=8192,
33
+ ),
34
+ "qwen-max": LLMModelInfo(
35
+ name="qwen-max",
36
+ context=32768,
37
+ max_response=8192,
38
+ category="Alibaba Qwen Max Model (OpenAI-compatible)",
39
+ driver="OpenAIModelDriver",
40
+ thinking_supported=True,
41
+ thinking=False,
42
+ max_cot=8192,
43
+ ),
44
+ "qwen3-coder-plus": LLMModelInfo(
45
+ name="qwen3-coder-plus",
46
+ context=1048576,
47
+ max_response=65536,
48
+ category="Alibaba Qwen3 Coder Plus Model (OpenAI-compatible)",
49
+ driver="OpenAIModelDriver",
50
+ thinking_supported=True,
51
+ thinking=False,
52
+ max_cot=65536,
53
+ ),
54
+ "qwen3-coder-480b-a35b-instruct": LLMModelInfo(
55
+ name="qwen3-coder-480b-a35b-instruct",
56
+ context=262144,
57
+ max_response=65536,
58
+ category="Alibaba Qwen3 Coder 480B A35B Instruct Model (OpenAI-compatible)",
59
+ driver="OpenAIModelDriver",
60
+ thinking_supported=True,
61
+ thinking=False,
62
+ max_cot=65536,
63
+ ),
64
+ # Qwen3 1M context models (July 2025 update)
65
+ "qwen3-235b-a22b-thinking-2507": LLMModelInfo(
66
+ name="qwen3-235b-a22b-thinking-2507",
67
+ context=131072, # Supports up to 1M with special config
68
+ max_response=32768,
69
+ category="Alibaba Qwen3 235B A22B Thinking Model (OpenAI-compatible)",
70
+ driver="OpenAIModelDriver",
71
+ thinking=True,
72
+ thinking_supported=True,
73
+ max_cot=32768,
74
+ ),
75
+ "qwen3-235b-a22b-instruct-2507": LLMModelInfo(
76
+ name="qwen3-235b-a22b-instruct-2507",
77
+ context=129024, # Supports up to 1M with special config
78
+ max_response=32768,
79
+ category="Alibaba Qwen3 235B A22B Instruct Model (OpenAI-compatible)",
80
+ driver="OpenAIModelDriver",
81
+ thinking_supported=True,
82
+ thinking=False,
83
+ max_cot=32768,
84
+ ),
85
+ "qwen3-30b-a3b-thinking-2507": LLMModelInfo(
86
+ name="qwen3-30b-a3b-thinking-2507",
87
+ context=126976, # Supports up to 1M with special config
88
+ max_response=32768,
89
+ category="Alibaba Qwen3 30B A3B Thinking Model (OpenAI-compatible)",
90
+ driver="OpenAIModelDriver",
91
+ thinking=True,
92
+ thinking_supported=True,
93
+ max_cot=32768,
94
+ ),
95
+ "qwen3-30b-a3b-instruct-2507": LLMModelInfo(
96
+ name="qwen3-30b-a3b-instruct-2507",
97
+ context=129024, # Supports up to 1M with special config
98
+ max_response=32768,
99
+ category="Alibaba Qwen3 30B A3B Instruct Model (OpenAI-compatible)",
100
+ driver="OpenAIModelDriver",
101
+ thinking_supported=True,
102
+ thinking=False,
103
+ max_cot=32768,
104
+ ),
105
+ # Qwen3 Next models (September 2025 update)
106
+ "qwen3-next-80b-a3b-instruct": LLMModelInfo(
107
+ name="qwen3-next-80b-a3b-instruct",
108
+ context=262144, # 256K context window (Qwen3-Max Preview)
109
+ max_response=65536, # Matches Qwen3-Max Preview output limit
110
+ category="Alibaba Qwen3-Max Preview (256K) - 80B A3B Instruct Model (OpenAI-compatible)",
111
+ driver="OpenAIModelDriver",
112
+ thinking_supported=True,
113
+ thinking=False,
114
+ max_cot=65536,
115
+ ),
116
+ "qwen3-next-80b-a3b-thinking": LLMModelInfo(
117
+ name="qwen3-next-80b-a3b-thinking",
118
+ context=262144, # 256K context window (Qwen3-Max Preview)
119
+ max_response=65536, # Matches Qwen3-Max Preview output limit
120
+ category="Alibaba Qwen3-Max Preview (256K) - 80B A3B Thinking Model (OpenAI-compatible)",
121
+ driver="OpenAIModelDriver",
122
+ thinking=True,
123
+ thinking_supported=True,
124
+ max_cot=65536,
125
+ ),
126
+ "qwen3-max-preview": LLMModelInfo(
127
+ name="qwen3-max-preview",
128
+ context=262144, # 256K context window (Qwen3-Max Preview)
129
+ max_response=65536, # Matches Qwen3-Max Preview output limit
130
+ category="Alibaba Qwen3-Max Preview (256K) - Standard Model (OpenAI-compatible)",
131
+ driver="OpenAIModelDriver",
132
+ thinking_supported=True,
133
+ thinking=False,
134
+ max_cot=65536,
135
+ ),
136
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 3.12.1
3
+ Version: 3.12.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,7 +21,7 @@ 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=DIc8gcX41CHWg6YGVSqQJuQxl1iUYk9JIR07wTvHJyk,13012
24
+ janito/agent/setup_agent.py,sha256=l1Z4DsUEdanzMKCv8cd_PFzfS_ooK5AWZ22CJ0Y3ZPk,12711
25
25
  janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2,sha256=gA_Br5UoM-CS8eyoYUtoPz4v2IXCjBcaRQmZ-chEEAI,4064
26
26
  janito/agent/templates/profiles/system_prompt_template_developer.txt.j2,sha256=6cKS-UJ8pJX3voGsMFqMrJWCCYH0aX8ZWcToRCeEbI4,3747
27
27
  janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2,sha256=V9JAxdZcWkl53rmSRnrJCjHIsRM6GWEsNLno2hdKx7M,4256
@@ -30,7 +30,7 @@ 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=0_mB-FKF-5ilUVZj3xL_MTmiZ-0NGmT2jDZYceiS6xE,16920
33
+ janito/cli/main_cli.py,sha256=TKLbKG1R-BbvzxIp2MphBQg7kKxkj4QF5TZrxnjn1xk,16420
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
@@ -41,7 +41,7 @@ janito/cli/chat_mode/bindings.py,sha256=odjc5_-YW1t2FRhBUNRNoBMoQIg5sMz3ktV7xG0A
41
41
  janito/cli/chat_mode/chat_entry.py,sha256=RFdPd23jsA2DMHRacpjAdwI_1dFBaWrtnwyQEgb2fHA,475
42
42
  janito/cli/chat_mode/prompt_style.py,sha256=vsqQ9xxmrYjj1pWuVe9CayQf39fo2EIXrkKPkflSVn4,805
43
43
  janito/cli/chat_mode/script_runner.py,sha256=WFTFVWzg_VQrD2Ujj02XWjscfGgHwmjBeRxaEjWw9ps,6505
44
- janito/cli/chat_mode/session.py,sha256=yyWSd6TpY0H4pDsB5jv9sg0yVmlJYo41XjIbDDcafnI,18609
44
+ janito/cli/chat_mode/session.py,sha256=EIM-iG7Qda3NGY6Xl8kwIvtxaD6iWgGAjHWBoXRvEhE,18050
45
45
  janito/cli/chat_mode/toolbar.py,sha256=1Va-glkUGJUekOSGbKtD5ruiIfFUfPoICO0wfoEkElI,3988
46
46
  janito/cli/chat_mode/shell/autocomplete.py,sha256=lE68MaVaodbA2VfUM0_YLqQVLBJAE_BJsd5cMtwuD-g,793
47
47
  janito/cli/chat_mode/shell/commands.bak.zip,sha256=I7GFjXg2ORT5NzFpicH1vQ3kchhduQsZinzqo0xO8wU,74238
@@ -84,7 +84,7 @@ janito/cli/cli_commands/list_config.py,sha256=oiQEGaGPjwjG-PrOcakpNMbbqISTsBEs7r
84
84
  janito/cli/cli_commands/list_drivers.py,sha256=K4-8wDxtNAJF1sLhvrqWVAKQYcw6uB98EE-dSglbyRY,4965
85
85
  janito/cli/cli_commands/list_models.py,sha256=QF3Wa7OhNcJFKeBxaw0C_rDfsvJFNb-siz5uorajBvo,1595
86
86
  janito/cli/cli_commands/list_plugins.py,sha256=Lv-M6EAFiqnj0tl9Bq23s162t--81AIs2EqZxhi81lQ,7996
87
- janito/cli/cli_commands/list_profiles.py,sha256=O4k6U9iCEeNH3lM-NP_XX_E9W0h__hheLSn23241dkA,3538
87
+ janito/cli/cli_commands/list_profiles.py,sha256=apQ-RY01dItrcnJONKTE1vcuI1aKp0DGtPOTbtCoFtU,3326
88
88
  janito/cli/cli_commands/list_providers.py,sha256=oilrBjNL5mot1nz45XQQY6oeiSxoNvphhQYspNcEJpw,391
89
89
  janito/cli/cli_commands/list_providers_region.py,sha256=qrMj_gtgEMty8UH0P_O5SgWCVJ9ZKxGUp_GdsE4_EH4,2548
90
90
  janito/cli/cli_commands/list_tools.py,sha256=lHPbwXxPysxnDqatZtFOD7S49nYinE5GGgav2UT_x0E,3592
@@ -93,16 +93,16 @@ janito/cli/cli_commands/model_utils.py,sha256=4t2ZN8DYA8jxluXHiiliV8gMbF_90nKGtg
93
93
  janito/cli/cli_commands/ping_providers.py,sha256=hetZAKKZzQYRpRDT5OvRTOe4jYUVNZGjo8gFoyeRA3I,1921
94
94
  janito/cli/cli_commands/set_api_key.py,sha256=IR_hUcLjK-2oJmiIVdjc8epPsQAzqEN9MS7lSTVqmKM,1060
95
95
  janito/cli/cli_commands/show_config.py,sha256=ammzVEqJQCAdWFRrhI1zjjmzgTCH2l38REoT4gYJPP0,3467
96
- janito/cli/cli_commands/show_system_prompt.py,sha256=WQclY_bmJrHbIBRU1qx1WV4VyooyXVx_XQyX_4Rb1hs,6335
96
+ janito/cli/cli_commands/show_system_prompt.py,sha256=IDjgDFiXX9JLoRhhEq3b7Rtqmwvja8TnDY-_CrWsPR4,6133
97
97
  janito/cli/core/__init__.py,sha256=YH95fhgY9yBX8RgqX9dSrEkl4exjV0T4rbmJ6xUpG-Y,196
98
98
  janito/cli/core/event_logger.py,sha256=1X6lR0Ax7AgF8HlPWFoY5Ystuu7Bh4ooTo78vXzeGB0,2008
99
99
  janito/cli/core/getters.py,sha256=opmcSz86J-I95Klsh0c4y6lsYvNakrvRqvuA0o5ARWI,2869
100
100
  janito/cli/core/model_guesser.py,sha256=V7LBkIllSp_tP9-2B1gcl5b4b-La7mrOvE3AZQQm8lk,1716
101
- janito/cli/core/runner.py,sha256=RhuWk6biW5hj1lBrGJrVmt4TtC5laq_bhEsutuqeyAg,10336
101
+ janito/cli/core/runner.py,sha256=5TLHtt1iU4b1uFAqT94CoORr452Rzk4oHPSOnMbjBfA,9285
102
102
  janito/cli/core/setters.py,sha256=zjSUxy6iUzcrmEunFk7dA90KqbMaq2O7LTGP8wn2HxA,5378
103
103
  janito/cli/core/unsetters.py,sha256=FEw9gCt0vRvoCt0kRSNfVB2tzi_TqppJIx2nHPP59-k,2012
104
104
  janito/cli/single_shot_mode/__init__.py,sha256=Ct99pKe9tINzVW6oedZJfzfZQKWpXz-weSSCn0hrwHY,115
105
- janito/cli/single_shot_mode/handler.py,sha256=dZmUiyZ-rxzPqEUz7VILaIhVgKX_TbM0UjAJo1BB2M4,6314
105
+ janito/cli/single_shot_mode/handler.py,sha256=2sIX2hmX_FRCLI4NkPPABOpMegI0YokjelHQ20f_YG8,6129
106
106
  janito/docs/GETTING_STARTED.md,sha256=IrTTa9tBTGDBw9EQJs0J05EdzjBCcwUd04jI-gswdSc,4774
107
107
  janito/drivers/dashscope.bak.zip,sha256=9Pv4Xyciju8jO1lEMFVgYXexoZkxmDO3Ig6vw3ODfL8,4936
108
108
  janito/drivers/openai_responses.bak.zip,sha256=E43eDCHGa2tCtdjzj_pMnWDdnsOZzj8BJTR5tJp8wcM,13352
@@ -122,22 +122,23 @@ janito/i18n/it.py,sha256=jpWyCrwoZXxHaLEbmYL2B1ouOa854ecdCfpXq4mqroc,4052
122
122
  janito/i18n/messages.py,sha256=fBuwOTFoygyHPkYphm6Y0r1iE8497Z4iryVAmPhMEkg,1851
123
123
  janito/i18n/pt.py,sha256=NlTgpDSftUfFG7FGbs7TK54vQlJVMyaZDHGcWjelwMc,4168
124
124
  janito/llm/README.md,sha256=6GRqCu_a9va5HCB1YqNqbshyWKFyAGlnXugrjom-xj8,1213
125
- janito/llm/__init__.py,sha256=dpyVH51qVRCw-PDyAFLAxq0zd4jl5MDcuV6Cri0D-dQ,134
125
+ janito/llm/__init__.py,sha256=5ZtHZPIj0xyF-Yj5l0N-JYQlczLjt2w4O1uljA5uX5k,171
126
126
  janito/llm/agent.py,sha256=Q7RT42cepDkXQqUVhyvREn9EqGtSkDprV6YRc_gbOxw,23916
127
127
  janito/llm/auth.py,sha256=8Dl_orUEPhn2X6XjkO2Nr-j1HFT2YDxk1qJl9hSFI88,2286
128
128
  janito/llm/auth_utils.py,sha256=7GH7bIScKhVWJW6ugcDrJLcYRamj5dl_l8N1rrvR4Ws,663
129
- janito/llm/driver.py,sha256=stiicPe_MXTuWW4q6MSwK7PCj8UZcA_30pGACu6xYUQ,10039
129
+ janito/llm/driver.py,sha256=jwao63VOzRHKxDFvGMgbeCClWzmQyM6GGXeTfMetnnA,11370
130
130
  janito/llm/driver_config.py,sha256=OW0ae49EfgKDqaThuDjZBiaN78voNzwiZ6szERMqJos,1406
131
131
  janito/llm/driver_config_builder.py,sha256=BvWGx7vaBR5NyvPY1XNAP3lAgo1uf-T25CSsIo2kkCU,1401
132
132
  janito/llm/driver_input.py,sha256=Zq7IO4KdQPUraeIo6XoOaRy1IdQAyYY15RQw4JU30uA,389
133
133
  janito/llm/message_parts.py,sha256=QY_0kDjaxdoErDgKPRPv1dNkkYJuXIBmHWNLiOEKAH4,1365
134
134
  janito/llm/model.py,sha256=EioBkdgn8hJ0iQaKN-0KbXlsrk3YKmwR9IbvoEbdVTE,1159
135
135
  janito/llm/provider.py,sha256=3FbhQPrWBSEoIdIi-5DWIh0DD_CM570EFf1NcuGyGko,7961
136
+ janito/llm/response_cache.py,sha256=mxj030hZJPXyBy7Gzfnia54HGSi5Qw6jybkyY2MLt7s,2263
136
137
  janito/plugins/__init__.py,sha256=6tTpUDNJJCRqlGK6RBd40wP_xEowuZZh0FRGeQ5lQQA,400
137
138
  janito/plugins/auto_loader.py,sha256=8DRpPZtAUtP-et4Lzaam93MH4s_sqQXXKI8Ly5-GQf8,2329
138
139
  janito/plugins/auto_loader_fixed.py,sha256=11pL7J0bX3XOOevQa10_oUtNbH-CXkpKhxOl69Bmzro,2335
139
140
  janito/plugins/base.py,sha256=4sQdTOogtDgmLWgA3q1Z8h8s-JySRkk9nSAmg0mHoNM,4285
140
- janito/plugins/builtin.py,sha256=rAdOz5cekFfsTfXJd5-2AXW4Nh81JoBMONqj1skiTR8,2985
141
+ janito/plugins/builtin.py,sha256=TgZfiiUE2RaRIRnkeY9dFGjHIQiS3j2X5pSzDWRak3I,1954
141
142
  janito/plugins/config.py,sha256=ex5f1XsKPEgIO4DgJCohPzMKAQoUdx1OdSVU0FlSr5o,2331
142
143
  janito/plugins/core_adapter.py,sha256=zOhRMLIsqPb5r-8-pJGucEiWEB1_M5btW6TmsAm-mdE,1877
143
144
  janito/plugins/core_loader.py,sha256=VcIwuKUaR2bvRZIFEiUHaS8YulTOKrYtvO_VhKHRpGI,3576
@@ -149,7 +150,7 @@ janito/plugins/core/filemanager/tools/validate_file_syntax/__init__.py,sha256=P5
149
150
  janito/plugins/core/filemanager/tools/validate_file_syntax/core.py,sha256=EoBMJ_A5mJJs7BMhOJ4gpxBd_p8q1e4597k_V5bJNjk,3940
150
151
  janito/plugins/core/filemanager/tools/validate_file_syntax/txt_validator.py,sha256=5GbO_IhbOUjHM-klorS3dUKeEOfKXXIuK3T-1JjSIeU,909
151
152
  janito/plugins/tools/__init__.py,sha256=XKixOKtUJs1R-rGwGDXSLVLg5-Kp090gvWbsseWT4LI,92
152
- janito/plugins/tools/local/__init__.py,sha256=YXsVl-7Tsk2m878RkTEjb7lfKduUvnGTFTFa2LcT0hM,2648
153
+ janito/plugins/tools/local/__init__.py,sha256=bJONOGBzR-d4TN--IGuQcFJW7di3J5qTLoVMHIcK1jU,2634
153
154
  janito/plugins/tools/local/adapter.py,sha256=LENtKWnoHrDSnPid195R_9mSgKieNQKyH6XzaQjh7uY,8706
154
155
  janito/plugins/tools/local/ask_user.py,sha256=RJGPYHUL4tbpjpkfnickJxl_KotBLTqT75JntpOXjCY,4059
155
156
  janito/plugins/tools/local/copy_file.py,sha256=j7isTujW0z0zUMh3QXQES8RdWO7RhE-IHhq7oh6e1q8,3681
@@ -158,6 +159,7 @@ janito/plugins/tools/local/create_file.py,sha256=rWFj9M7-C8Dl4br_1ooDbabb7Q6oKwb
158
159
  janito/plugins/tools/local/delete_text_in_file.py,sha256=K0nry8fsk4ZNjWE-nDNpYYUpumZwo9m4nND8C8TFfOQ,5085
159
160
  janito/plugins/tools/local/fetch_url.py,sha256=cYOSnjiaVo9pTpGDkFKb4lUsP3x_fB2nHStf-CmZuCE,18220
160
161
  janito/plugins/tools/local/find_files.py,sha256=esFwkmJN_d-GkknSjkuBRr_DOsXFQQana-o08Y7YXts,6249
162
+ janito/plugins/tools/local/markdown_view.py,sha256=qM0INFe112LLbDlqM79vtAFHQoepWOU5zx0G8utPSWw,3685
161
163
  janito/plugins/tools/local/move_file.py,sha256=ddl3Jj3Uq7NQ19gsT8oRX_l0qjL6c7kVcH9Qg0VCNi8,4694
162
164
  janito/plugins/tools/local/open_html_in_browser.py,sha256=RUD6QOs5CjEXdFEkIhk4W4m2txI_MJw0CbO4z5t4kL0,2100
163
165
  janito/plugins/tools/local/open_url.py,sha256=BBcUPBo7kyIXPsQj5xB_2dlLiSABYwEpGPLX8NNpZ6A,1551
@@ -171,8 +173,8 @@ janito/plugins/tools/local/remove_file.py,sha256=YbTByXAnnvlQ57y-2B2qcblmOgEJpeB
171
173
  janito/plugins/tools/local/replace_text_in_file.py,sha256=OIiXsqaoVOg_umHoPnDECzY7yDCG5ZrU6zHTM1lZhfc,10964
172
174
  janito/plugins/tools/local/run_bash_command.py,sha256=cKE0VUJc_qefrU-VcTk_3ipViKZDLlbfGS8D0cEAHMg,7954
173
175
  janito/plugins/tools/local/run_powershell_command.py,sha256=nA-8rbf2NNG6eWSUwB5YkNOpCADLa_APC9y-ouk1DMc,9312
174
- janito/plugins/tools/local/show_image.py,sha256=mxw9UJdSrmVsznFck__X4jizya2H8-HAWndO75jNY_U,2931
175
- janito/plugins/tools/local/show_image_grid.py,sha256=HbFJwSQonHXFnW3_URk45q4S7fS-opnojscoSe3_QGQ,2999
176
+ janito/plugins/tools/local/show_image.py,sha256=KvHUuI54XVGinS3M08ORiQg7EN_xucg5qnWN5Id7YNA,4939
177
+ janito/plugins/tools/local/show_image_grid.py,sha256=L4zFVnmw4m_sDdK2GhgWzqoQmOrV6loUZM3RIc1vcdI,5294
176
178
  janito/plugins/tools/local/view_file.py,sha256=5VugCv4xBNeHNqDfUq3nE0y7Ylqg5pZAHe2i0TbNfes,7378
177
179
  janito/plugins/tools/local/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
178
180
  janito/plugins/tools/local/get_file_outline/core.py,sha256=E8nV5Qx7DuslRTwhONlBS1LxJJLWsE1TWeOSXMFKtFs,4609
@@ -202,7 +204,7 @@ janito/providers/__init__.py,sha256=EvOFeiqucAY9tgCosJ81p0QA6wQwMT1cR3EeIGrhSQQ,
202
204
  janito/providers/dashscope.bak.zip,sha256=BwXxRmZreEivvRtmqbr5BR62IFVlNjAf4y6DrF2BVJo,5998
203
205
  janito/providers/registry.py,sha256=Ygwv9eVrTXOKhv0EKxSWQXO5WMHvajWE2Q_Lc3p7dKo,730
204
206
  janito/providers/alibaba/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
205
- janito/providers/alibaba/model_info.py,sha256=YFKRxsTavIN2_wEgjiY8izyU5NiPPqv22094AYfaGtg,3671
207
+ janito/providers/alibaba/model_info.py,sha256=A1DL-NCFC6WhEirSfOHTXeFT14pSPvLRbV_DCbaO4jo,4893
206
208
  janito/providers/alibaba/provider.py,sha256=LBQoovAYKaUMB0O9-t3UC6bakI8lUzqHBRHwVaUZnIg,4179
207
209
  janito/providers/anthropic/model_info.py,sha256=m6pBh0Ia8_xC1KZ7ke_4HeHIFw7nWjnYVItnRpkCSWc,1206
208
210
  janito/providers/anthropic/provider.py,sha256=aGynBxCFc7oTyvGNDUkbutJCKurC_9J4AkReC2LTPYo,3023
@@ -262,9 +264,9 @@ janito/tools/tool_utils.py,sha256=alPm9DvtXSw_zPRKvP5GjbebPRf_nfvmWk2TNlL5Cws,12
262
264
  janito/tools/tools_adapter.py,sha256=Vd7A2tJ1q-EpoenkztK4he-0WhGjLFDP0vEfmXdFiNk,21361
263
265
  janito/tools/tools_schema.py,sha256=rGrKrmpPNR07VXHAJ_haGBRRO-YGLOF51BlYRep9AAQ,4415
264
266
  janito/tools/url_whitelist.py,sha256=0CPLkHTp5HgnwgjxwgXnJmwPeZQ30q4j3YjW59hiUUE,4295
265
- janito-3.12.1.dist-info/licenses/LICENSE,sha256=dXV4fOF2ZErugtN8l_Nrj5tsRTYgtjE3cgiya0UfBio,11356
266
- janito-3.12.1.dist-info/METADATA,sha256=3vothPYTeu9sadVxfHpyEqUl4djB6FWFvEh3oepMeEg,2330
267
- janito-3.12.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
268
- janito-3.12.1.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
269
- janito-3.12.1.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
270
- janito-3.12.1.dist-info/RECORD,,
267
+ janito-3.12.2.dist-info/licenses/LICENSE,sha256=dXV4fOF2ZErugtN8l_Nrj5tsRTYgtjE3cgiya0UfBio,11356
268
+ janito-3.12.2.dist-info/METADATA,sha256=s0TwrmszT1pJkAaPoD08UH_qtU5up8XFnr7EAws_jIU,2330
269
+ janito-3.12.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
270
+ janito-3.12.2.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
271
+ janito-3.12.2.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
272
+ janito-3.12.2.dist-info/RECORD,,