janito 2.3.0__py3-none-any.whl → 2.3.1__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/__init__.py +6 -6
- janito/cli/chat_mode/shell/autocomplete.py +21 -21
- janito/cli/chat_mode/shell/commands/clear.py +12 -12
- janito/cli/chat_mode/shell/commands/multi.py +51 -51
- janito/cli/chat_mode/shell/input_history.py +62 -62
- janito/cli/cli_commands/list_models.py +35 -35
- janito/cli/cli_commands/list_providers.py +9 -9
- janito/cli/cli_commands/list_tools.py +53 -53
- janito/cli/cli_commands/model_selection.py +50 -50
- janito/cli/cli_commands/model_utils.py +95 -95
- janito/cli/cli_commands/set_api_key.py +19 -19
- janito/cli/cli_commands/show_config.py +51 -51
- janito/cli/cli_commands/show_system_prompt.py +62 -62
- janito/cli/core/__init__.py +4 -4
- janito/cli/core/event_logger.py +59 -59
- janito/cli/core/getters.py +33 -33
- janito/cli/core/unsetters.py +54 -54
- janito/cli/single_shot_mode/__init__.py +6 -6
- janito/config.py +5 -5
- janito/config_manager.py +112 -112
- janito/drivers/anthropic/driver.py +113 -113
- janito/formatting_token.py +54 -54
- janito/i18n/__init__.py +35 -35
- janito/i18n/messages.py +23 -23
- janito/i18n/pt.py +47 -47
- janito/llm/__init__.py +5 -5
- janito/llm/agent.py +443 -443
- janito/llm/auth.py +63 -63
- janito/llm/driver_config_builder.py +34 -34
- janito/llm/driver_input.py +12 -12
- janito/llm/message_parts.py +60 -60
- janito/llm/model.py +38 -38
- janito/llm/provider.py +196 -196
- janito/provider_registry.py +176 -176
- janito/providers/anthropic/model_info.py +22 -22
- janito/providers/anthropic/provider.py +2 -0
- janito/providers/azure_openai/model_info.py +16 -16
- janito/providers/azure_openai/provider.py +3 -0
- janito/providers/deepseek/__init__.py +1 -1
- janito/providers/deepseek/model_info.py +16 -16
- janito/providers/deepseek/provider.py +94 -91
- janito/providers/google/provider.py +3 -0
- janito/providers/mistralai/provider.py +3 -0
- janito/providers/openai/provider.py +4 -0
- janito/tools/adapters/__init__.py +1 -1
- janito/tools/adapters/local/ask_user.py +102 -102
- janito/tools/adapters/local/copy_file.py +84 -84
- janito/tools/adapters/local/create_directory.py +69 -69
- janito/tools/adapters/local/create_file.py +82 -82
- janito/tools/adapters/local/fetch_url.py +97 -97
- janito/tools/adapters/local/find_files.py +138 -138
- janito/tools/adapters/local/get_file_outline/__init__.py +1 -1
- janito/tools/adapters/local/get_file_outline/core.py +117 -117
- janito/tools/adapters/local/get_file_outline/java_outline.py +40 -40
- janito/tools/adapters/local/get_file_outline/markdown_outline.py +14 -14
- janito/tools/adapters/local/get_file_outline/python_outline.py +303 -303
- janito/tools/adapters/local/get_file_outline/python_outline_v2.py +156 -156
- janito/tools/adapters/local/get_file_outline/search_outline.py +33 -33
- janito/tools/adapters/local/python_code_run.py +166 -166
- janito/tools/adapters/local/python_command_run.py +164 -164
- janito/tools/adapters/local/python_file_run.py +163 -163
- janito/tools/adapters/local/run_bash_command.py +176 -176
- janito/tools/adapters/local/run_powershell_command.py +219 -219
- janito/tools/adapters/local/search_text/__init__.py +1 -1
- janito/tools/adapters/local/search_text/core.py +201 -201
- janito/tools/adapters/local/search_text/pattern_utils.py +73 -73
- janito/tools/adapters/local/search_text/traverse_directory.py +145 -145
- janito/tools/adapters/local/validate_file_syntax/__init__.py +1 -1
- janito/tools/adapters/local/validate_file_syntax/core.py +106 -106
- janito/tools/adapters/local/validate_file_syntax/css_validator.py +35 -35
- janito/tools/adapters/local/validate_file_syntax/html_validator.py +93 -93
- janito/tools/adapters/local/validate_file_syntax/js_validator.py +27 -27
- janito/tools/adapters/local/validate_file_syntax/json_validator.py +6 -6
- janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +109 -109
- janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +32 -32
- janito/tools/adapters/local/validate_file_syntax/python_validator.py +5 -5
- janito/tools/adapters/local/validate_file_syntax/xml_validator.py +11 -11
- janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +6 -6
- janito/tools/adapters/local/view_file.py +167 -167
- janito/tools/inspect_registry.py +17 -17
- janito/tools/tool_base.py +105 -105
- janito/tools/tool_events.py +58 -58
- janito/tools/tool_run_exception.py +12 -12
- janito/tools/tool_use_tracker.py +81 -81
- janito/tools/tool_utils.py +45 -45
- janito/tools/tools_schema.py +104 -104
- janito/version.py +4 -4
- {janito-2.3.0.dist-info → janito-2.3.1.dist-info}/METADATA +390 -388
- {janito-2.3.0.dist-info → janito-2.3.1.dist-info}/RECORD +93 -93
- {janito-2.3.0.dist-info → janito-2.3.1.dist-info}/WHEEL +0 -0
- {janito-2.3.0.dist-info → janito-2.3.1.dist-info}/entry_points.txt +0 -0
- {janito-2.3.0.dist-info → janito-2.3.1.dist-info}/licenses/LICENSE +0 -0
- {janito-2.3.0.dist-info → janito-2.3.1.dist-info}/top_level.txt +0 -0
janito/provider_registry.py
CHANGED
@@ -1,176 +1,176 @@
|
|
1
|
-
"""
|
2
|
-
ProviderRegistry: Handles provider listing and selection logic for janito CLI.
|
3
|
-
"""
|
4
|
-
|
5
|
-
from rich.table import Table
|
6
|
-
from janito.cli.console import shared_console
|
7
|
-
from janito.providers.registry import LLMProviderRegistry
|
8
|
-
from janito.providers.provider_static_info import STATIC_PROVIDER_METADATA
|
9
|
-
from janito.llm.auth import LLMAuthManager
|
10
|
-
import sys
|
11
|
-
from janito.exceptions import MissingProviderSelectionException
|
12
|
-
|
13
|
-
|
14
|
-
class ProviderRegistry:
|
15
|
-
def list_providers(self):
|
16
|
-
"""List all supported LLM providers as a table using rich, showing if auth is configured and supported model names."""
|
17
|
-
providers = self._get_provider_names()
|
18
|
-
table = self._create_table()
|
19
|
-
rows = self._get_all_provider_rows(providers)
|
20
|
-
self._add_rows_to_table(table, rows)
|
21
|
-
self._print_table(table)
|
22
|
-
|
23
|
-
def _get_provider_names(self):
|
24
|
-
return list(STATIC_PROVIDER_METADATA.keys())
|
25
|
-
|
26
|
-
def _create_table(self):
|
27
|
-
table = Table(title="Supported LLM Providers")
|
28
|
-
table.add_column("Provider", style="cyan")
|
29
|
-
table.add_column("Maintainer", style="yellow", justify="center")
|
30
|
-
table.add_column("Model Names", style="magenta")
|
31
|
-
return table
|
32
|
-
|
33
|
-
def _get_all_provider_rows(self, providers):
|
34
|
-
rows = []
|
35
|
-
for p in providers:
|
36
|
-
info = self._get_provider_info(p)
|
37
|
-
# info is (provider_name, maintainer, model_names, skip)
|
38
|
-
if len(info) == 4 and info[3]:
|
39
|
-
continue # skip providers flagged as not implemented
|
40
|
-
rows.append(info[:3])
|
41
|
-
rows.sort(key=self._maintainer_sort_key)
|
42
|
-
return rows
|
43
|
-
|
44
|
-
def _add_rows_to_table(self, table, rows):
|
45
|
-
for idx, (p, maintainer, model_names) in enumerate(rows):
|
46
|
-
table.add_row(p, maintainer, model_names)
|
47
|
-
if idx != len(rows) - 1:
|
48
|
-
table.add_section()
|
49
|
-
|
50
|
-
def _print_table(self, table):
|
51
|
-
"""Print the table using rich when running in a terminal; otherwise fall back to a plain ASCII listing.
|
52
|
-
This avoids UnicodeDecodeError when the parent process captures the output with a non-UTF8 encoding.
|
53
|
-
"""
|
54
|
-
import sys
|
55
|
-
|
56
|
-
if sys.stdout.isatty():
|
57
|
-
# Safe to use rich's unicode output when attached to an interactive terminal.
|
58
|
-
shared_console.print(table)
|
59
|
-
return
|
60
|
-
|
61
|
-
# Fallback: plain ASCII output
|
62
|
-
print("Supported LLM Providers")
|
63
|
-
print("Provider | Maintainer | Model Names")
|
64
|
-
for row in table.rows:
|
65
|
-
# row is a rich.table.Row -> row.cells is a list of Text objects
|
66
|
-
cells_text = [str(cell) for cell in row.cells]
|
67
|
-
ascii_row = " | ".join(cells_text).encode("ascii", "ignore").decode("ascii")
|
68
|
-
print(ascii_row)
|
69
|
-
shared_console.print(table)
|
70
|
-
|
71
|
-
def _get_provider_info(self, provider_name):
|
72
|
-
static_info = STATIC_PROVIDER_METADATA.get(provider_name, {})
|
73
|
-
maintainer_val = static_info.get("maintainer", "-")
|
74
|
-
maintainer = (
|
75
|
-
"[red]🚨 Needs maintainer[/red]"
|
76
|
-
if maintainer_val == "Needs maintainer"
|
77
|
-
else f"👤 {maintainer_val}"
|
78
|
-
)
|
79
|
-
model_names = "-"
|
80
|
-
unavailable_reason = None
|
81
|
-
skip = False
|
82
|
-
try:
|
83
|
-
provider_class = LLMProviderRegistry.get(provider_name)
|
84
|
-
creds = LLMAuthManager().get_credentials(provider_name)
|
85
|
-
provider_instance = None
|
86
|
-
instantiation_failed = False
|
87
|
-
try:
|
88
|
-
provider_instance = provider_class()
|
89
|
-
except NotImplementedError:
|
90
|
-
skip = True
|
91
|
-
unavailable_reason = "Not implemented"
|
92
|
-
model_names = f"[red]❌ Not implemented[/red]"
|
93
|
-
except Exception as e:
|
94
|
-
instantiation_failed = True
|
95
|
-
unavailable_reason = (
|
96
|
-
f"Unavailable (import error or missing dependency): {str(e)}"
|
97
|
-
)
|
98
|
-
model_names = f"[red]❌ {unavailable_reason}[/red]"
|
99
|
-
if not instantiation_failed and provider_instance is not None:
|
100
|
-
available, unavailable_reason = self._get_availability(
|
101
|
-
provider_instance
|
102
|
-
)
|
103
|
-
if (
|
104
|
-
not available
|
105
|
-
and unavailable_reason
|
106
|
-
and "not implemented" in str(unavailable_reason).lower()
|
107
|
-
):
|
108
|
-
skip = True
|
109
|
-
if available:
|
110
|
-
model_names = self._get_model_names(provider_name)
|
111
|
-
else:
|
112
|
-
model_names = f"[red]❌ {unavailable_reason}[/red]"
|
113
|
-
except Exception as import_error:
|
114
|
-
model_names = f"[red]❌ Unavailable (cannot import provider module): {str(import_error)}[/red]"
|
115
|
-
return (provider_name, maintainer, model_names, skip)
|
116
|
-
|
117
|
-
def _get_availability(self, provider_instance):
|
118
|
-
try:
|
119
|
-
available = getattr(provider_instance, "available", True)
|
120
|
-
unavailable_reason = getattr(provider_instance, "unavailable_reason", None)
|
121
|
-
except Exception as e:
|
122
|
-
available = False
|
123
|
-
unavailable_reason = f"Error reading runtime availability: {str(e)}"
|
124
|
-
return available, unavailable_reason
|
125
|
-
|
126
|
-
def _get_model_names(self, provider_name):
|
127
|
-
provider_to_specs = {
|
128
|
-
"openai": "janito.providers.openai.model_info",
|
129
|
-
"azure_openai": "janito.providers.azure_openai.model_info",
|
130
|
-
"google": "janito.providers.google.model_info",
|
131
|
-
"mistralai": "janito.providers.mistralai.model_info",
|
132
|
-
"deepseek": "janito.providers.deepseek.model_info",
|
133
|
-
}
|
134
|
-
if provider_name in provider_to_specs:
|
135
|
-
try:
|
136
|
-
mod = __import__(
|
137
|
-
provider_to_specs[provider_name], fromlist=["MODEL_SPECS"]
|
138
|
-
)
|
139
|
-
return ", ".join(mod.MODEL_SPECS.keys())
|
140
|
-
except Exception:
|
141
|
-
return "(Error)"
|
142
|
-
return "-"
|
143
|
-
|
144
|
-
def _maintainer_sort_key(self, row):
|
145
|
-
maint = row[1]
|
146
|
-
is_needs_maint = "Needs maintainer" in maint
|
147
|
-
return (is_needs_maint, row[2] != "✅ Auth")
|
148
|
-
|
149
|
-
def get_provider(self, provider_name):
|
150
|
-
"""Return the provider class for the given provider name. Returns None if not found."""
|
151
|
-
from janito.providers.registry import LLMProviderRegistry
|
152
|
-
|
153
|
-
if not provider_name:
|
154
|
-
print("Error: Provider name must be specified.")
|
155
|
-
return None
|
156
|
-
provider_class = LLMProviderRegistry.get(provider_name)
|
157
|
-
if provider_class is None:
|
158
|
-
available = ', '.join(LLMProviderRegistry.list_providers())
|
159
|
-
print(f"Error: Provider '{provider_name}' is not recognized. Available providers: {available}.")
|
160
|
-
return None
|
161
|
-
return provider_class
|
162
|
-
|
163
|
-
def get_instance(self, provider_name, config=None):
|
164
|
-
"""Return an instance of the provider for the given provider name, optionally passing a config object. Returns None if not found."""
|
165
|
-
provider_class = self.get_provider(provider_name)
|
166
|
-
if provider_class is None:
|
167
|
-
return None
|
168
|
-
if config is not None:
|
169
|
-
return provider_class(config=config)
|
170
|
-
return provider_class()
|
171
|
-
|
172
|
-
|
173
|
-
# For backward compatibility
|
174
|
-
def list_providers():
|
175
|
-
"""Legacy function for listing providers, now uses ProviderRegistry class."""
|
176
|
-
ProviderRegistry().list_providers()
|
1
|
+
"""
|
2
|
+
ProviderRegistry: Handles provider listing and selection logic for janito CLI.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from rich.table import Table
|
6
|
+
from janito.cli.console import shared_console
|
7
|
+
from janito.providers.registry import LLMProviderRegistry
|
8
|
+
from janito.providers.provider_static_info import STATIC_PROVIDER_METADATA
|
9
|
+
from janito.llm.auth import LLMAuthManager
|
10
|
+
import sys
|
11
|
+
from janito.exceptions import MissingProviderSelectionException
|
12
|
+
|
13
|
+
|
14
|
+
class ProviderRegistry:
|
15
|
+
def list_providers(self):
|
16
|
+
"""List all supported LLM providers as a table using rich, showing if auth is configured and supported model names."""
|
17
|
+
providers = self._get_provider_names()
|
18
|
+
table = self._create_table()
|
19
|
+
rows = self._get_all_provider_rows(providers)
|
20
|
+
self._add_rows_to_table(table, rows)
|
21
|
+
self._print_table(table)
|
22
|
+
|
23
|
+
def _get_provider_names(self):
|
24
|
+
return list(STATIC_PROVIDER_METADATA.keys())
|
25
|
+
|
26
|
+
def _create_table(self):
|
27
|
+
table = Table(title="Supported LLM Providers")
|
28
|
+
table.add_column("Provider", style="cyan")
|
29
|
+
table.add_column("Maintainer", style="yellow", justify="center")
|
30
|
+
table.add_column("Model Names", style="magenta")
|
31
|
+
return table
|
32
|
+
|
33
|
+
def _get_all_provider_rows(self, providers):
|
34
|
+
rows = []
|
35
|
+
for p in providers:
|
36
|
+
info = self._get_provider_info(p)
|
37
|
+
# info is (provider_name, maintainer, model_names, skip)
|
38
|
+
if len(info) == 4 and info[3]:
|
39
|
+
continue # skip providers flagged as not implemented
|
40
|
+
rows.append(info[:3])
|
41
|
+
rows.sort(key=self._maintainer_sort_key)
|
42
|
+
return rows
|
43
|
+
|
44
|
+
def _add_rows_to_table(self, table, rows):
|
45
|
+
for idx, (p, maintainer, model_names) in enumerate(rows):
|
46
|
+
table.add_row(p, maintainer, model_names)
|
47
|
+
if idx != len(rows) - 1:
|
48
|
+
table.add_section()
|
49
|
+
|
50
|
+
def _print_table(self, table):
|
51
|
+
"""Print the table using rich when running in a terminal; otherwise fall back to a plain ASCII listing.
|
52
|
+
This avoids UnicodeDecodeError when the parent process captures the output with a non-UTF8 encoding.
|
53
|
+
"""
|
54
|
+
import sys
|
55
|
+
|
56
|
+
if sys.stdout.isatty():
|
57
|
+
# Safe to use rich's unicode output when attached to an interactive terminal.
|
58
|
+
shared_console.print(table)
|
59
|
+
return
|
60
|
+
|
61
|
+
# Fallback: plain ASCII output
|
62
|
+
print("Supported LLM Providers")
|
63
|
+
print("Provider | Maintainer | Model Names")
|
64
|
+
for row in table.rows:
|
65
|
+
# row is a rich.table.Row -> row.cells is a list of Text objects
|
66
|
+
cells_text = [str(cell) for cell in row.cells]
|
67
|
+
ascii_row = " | ".join(cells_text).encode("ascii", "ignore").decode("ascii")
|
68
|
+
print(ascii_row)
|
69
|
+
shared_console.print(table)
|
70
|
+
|
71
|
+
def _get_provider_info(self, provider_name):
|
72
|
+
static_info = STATIC_PROVIDER_METADATA.get(provider_name, {})
|
73
|
+
maintainer_val = static_info.get("maintainer", "-")
|
74
|
+
maintainer = (
|
75
|
+
"[red]🚨 Needs maintainer[/red]"
|
76
|
+
if maintainer_val == "Needs maintainer"
|
77
|
+
else f"👤 {maintainer_val}"
|
78
|
+
)
|
79
|
+
model_names = "-"
|
80
|
+
unavailable_reason = None
|
81
|
+
skip = False
|
82
|
+
try:
|
83
|
+
provider_class = LLMProviderRegistry.get(provider_name)
|
84
|
+
creds = LLMAuthManager().get_credentials(provider_name)
|
85
|
+
provider_instance = None
|
86
|
+
instantiation_failed = False
|
87
|
+
try:
|
88
|
+
provider_instance = provider_class()
|
89
|
+
except NotImplementedError:
|
90
|
+
skip = True
|
91
|
+
unavailable_reason = "Not implemented"
|
92
|
+
model_names = f"[red]❌ Not implemented[/red]"
|
93
|
+
except Exception as e:
|
94
|
+
instantiation_failed = True
|
95
|
+
unavailable_reason = (
|
96
|
+
f"Unavailable (import error or missing dependency): {str(e)}"
|
97
|
+
)
|
98
|
+
model_names = f"[red]❌ {unavailable_reason}[/red]"
|
99
|
+
if not instantiation_failed and provider_instance is not None:
|
100
|
+
available, unavailable_reason = self._get_availability(
|
101
|
+
provider_instance
|
102
|
+
)
|
103
|
+
if (
|
104
|
+
not available
|
105
|
+
and unavailable_reason
|
106
|
+
and "not implemented" in str(unavailable_reason).lower()
|
107
|
+
):
|
108
|
+
skip = True
|
109
|
+
if available:
|
110
|
+
model_names = self._get_model_names(provider_name)
|
111
|
+
else:
|
112
|
+
model_names = f"[red]❌ {unavailable_reason}[/red]"
|
113
|
+
except Exception as import_error:
|
114
|
+
model_names = f"[red]❌ Unavailable (cannot import provider module): {str(import_error)}[/red]"
|
115
|
+
return (provider_name, maintainer, model_names, skip)
|
116
|
+
|
117
|
+
def _get_availability(self, provider_instance):
|
118
|
+
try:
|
119
|
+
available = getattr(provider_instance, "available", True)
|
120
|
+
unavailable_reason = getattr(provider_instance, "unavailable_reason", None)
|
121
|
+
except Exception as e:
|
122
|
+
available = False
|
123
|
+
unavailable_reason = f"Error reading runtime availability: {str(e)}"
|
124
|
+
return available, unavailable_reason
|
125
|
+
|
126
|
+
def _get_model_names(self, provider_name):
|
127
|
+
provider_to_specs = {
|
128
|
+
"openai": "janito.providers.openai.model_info",
|
129
|
+
"azure_openai": "janito.providers.azure_openai.model_info",
|
130
|
+
"google": "janito.providers.google.model_info",
|
131
|
+
"mistralai": "janito.providers.mistralai.model_info",
|
132
|
+
"deepseek": "janito.providers.deepseek.model_info",
|
133
|
+
}
|
134
|
+
if provider_name in provider_to_specs:
|
135
|
+
try:
|
136
|
+
mod = __import__(
|
137
|
+
provider_to_specs[provider_name], fromlist=["MODEL_SPECS"]
|
138
|
+
)
|
139
|
+
return ", ".join(mod.MODEL_SPECS.keys())
|
140
|
+
except Exception:
|
141
|
+
return "(Error)"
|
142
|
+
return "-"
|
143
|
+
|
144
|
+
def _maintainer_sort_key(self, row):
|
145
|
+
maint = row[1]
|
146
|
+
is_needs_maint = "Needs maintainer" in maint
|
147
|
+
return (is_needs_maint, row[2] != "✅ Auth")
|
148
|
+
|
149
|
+
def get_provider(self, provider_name):
|
150
|
+
"""Return the provider class for the given provider name. Returns None if not found."""
|
151
|
+
from janito.providers.registry import LLMProviderRegistry
|
152
|
+
|
153
|
+
if not provider_name:
|
154
|
+
print("Error: Provider name must be specified.")
|
155
|
+
return None
|
156
|
+
provider_class = LLMProviderRegistry.get(provider_name)
|
157
|
+
if provider_class is None:
|
158
|
+
available = ', '.join(LLMProviderRegistry.list_providers())
|
159
|
+
print(f"Error: Provider '{provider_name}' is not recognized. Available providers: {available}.")
|
160
|
+
return None
|
161
|
+
return provider_class
|
162
|
+
|
163
|
+
def get_instance(self, provider_name, config=None):
|
164
|
+
"""Return an instance of the provider for the given provider name, optionally passing a config object. Returns None if not found."""
|
165
|
+
provider_class = self.get_provider(provider_name)
|
166
|
+
if provider_class is None:
|
167
|
+
return None
|
168
|
+
if config is not None:
|
169
|
+
return provider_class(config=config)
|
170
|
+
return provider_class()
|
171
|
+
|
172
|
+
|
173
|
+
# For backward compatibility
|
174
|
+
def list_providers():
|
175
|
+
"""Legacy function for listing providers, now uses ProviderRegistry class."""
|
176
|
+
ProviderRegistry().list_providers()
|
@@ -1,22 +1,22 @@
|
|
1
|
-
from janito.llm.model import LLMModelInfo
|
2
|
-
|
3
|
-
MODEL_SPECS = {
|
4
|
-
"claude-3-opus-20240229": LLMModelInfo(
|
5
|
-
name="claude-3-opus-20240229",
|
6
|
-
max_response=200000,
|
7
|
-
default_temp=0.7,
|
8
|
-
driver="AnthropicModelDriver",
|
9
|
-
),
|
10
|
-
"claude-3-sonnet-20240229": LLMModelInfo(
|
11
|
-
name="claude-3-sonnet-20240229",
|
12
|
-
max_response=200000,
|
13
|
-
default_temp=0.7,
|
14
|
-
driver="AnthropicModelDriver",
|
15
|
-
),
|
16
|
-
"claude-3-haiku-20240307": LLMModelInfo(
|
17
|
-
name="claude-3-haiku-20240307",
|
18
|
-
max_response=200000,
|
19
|
-
default_temp=0.7,
|
20
|
-
driver="AnthropicModelDriver",
|
21
|
-
),
|
22
|
-
}
|
1
|
+
from janito.llm.model import LLMModelInfo
|
2
|
+
|
3
|
+
MODEL_SPECS = {
|
4
|
+
"claude-3-opus-20240229": LLMModelInfo(
|
5
|
+
name="claude-3-opus-20240229",
|
6
|
+
max_response=200000,
|
7
|
+
default_temp=0.7,
|
8
|
+
driver="AnthropicModelDriver",
|
9
|
+
),
|
10
|
+
"claude-3-sonnet-20240229": LLMModelInfo(
|
11
|
+
name="claude-3-sonnet-20240229",
|
12
|
+
max_response=200000,
|
13
|
+
default_temp=0.7,
|
14
|
+
driver="AnthropicModelDriver",
|
15
|
+
),
|
16
|
+
"claude-3-haiku-20240307": LLMModelInfo(
|
17
|
+
name="claude-3-haiku-20240307",
|
18
|
+
max_response=200000,
|
19
|
+
default_temp=0.7,
|
20
|
+
driver="AnthropicModelDriver",
|
21
|
+
),
|
22
|
+
}
|
@@ -23,6 +23,8 @@ class AnthropicProvider(LLMProvider):
|
|
23
23
|
def __init__(
|
24
24
|
self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
|
25
25
|
):
|
26
|
+
# Ensure we always have a tools adapter, even if the driver itself is unavailable.
|
27
|
+
self._tools_adapter = get_local_tools_adapter()
|
26
28
|
if not self.available:
|
27
29
|
self._driver = None
|
28
30
|
return
|
@@ -1,16 +1,16 @@
|
|
1
|
-
from janito.llm.model import LLMModelInfo
|
2
|
-
from janito.providers.openai.model_info import MODEL_SPECS as OPENAI_MODEL_SPECS
|
3
|
-
|
4
|
-
MODEL_SPECS = {
|
5
|
-
"azure_openai_deployment": LLMModelInfo(
|
6
|
-
name="azure_openai_deployment",
|
7
|
-
context=OPENAI_MODEL_SPECS["gpt-4o"].context,
|
8
|
-
max_input=OPENAI_MODEL_SPECS["gpt-4o"].max_input,
|
9
|
-
max_cot=OPENAI_MODEL_SPECS["gpt-4o"].max_cot,
|
10
|
-
max_response=OPENAI_MODEL_SPECS["gpt-4o"].max_response,
|
11
|
-
thinking_supported=OPENAI_MODEL_SPECS["gpt-4o"].thinking_supported,
|
12
|
-
default_temp=OPENAI_MODEL_SPECS["gpt-4o"].default_temp,
|
13
|
-
open="azure_openai",
|
14
|
-
driver="AzureOpenAIModelDriver",
|
15
|
-
)
|
16
|
-
}
|
1
|
+
from janito.llm.model import LLMModelInfo
|
2
|
+
from janito.providers.openai.model_info import MODEL_SPECS as OPENAI_MODEL_SPECS
|
3
|
+
|
4
|
+
MODEL_SPECS = {
|
5
|
+
"azure_openai_deployment": LLMModelInfo(
|
6
|
+
name="azure_openai_deployment",
|
7
|
+
context=OPENAI_MODEL_SPECS["gpt-4o"].context,
|
8
|
+
max_input=OPENAI_MODEL_SPECS["gpt-4o"].max_input,
|
9
|
+
max_cot=OPENAI_MODEL_SPECS["gpt-4o"].max_cot,
|
10
|
+
max_response=OPENAI_MODEL_SPECS["gpt-4o"].max_response,
|
11
|
+
thinking_supported=OPENAI_MODEL_SPECS["gpt-4o"].thinking_supported,
|
12
|
+
default_temp=OPENAI_MODEL_SPECS["gpt-4o"].default_temp,
|
13
|
+
open="azure_openai",
|
14
|
+
driver="AzureOpenAIModelDriver",
|
15
|
+
)
|
16
|
+
}
|
@@ -23,6 +23,9 @@ class AzureOpenAIProvider(LLMProvider):
|
|
23
23
|
def __init__(
|
24
24
|
self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
|
25
25
|
):
|
26
|
+
# Always create a tools adapter so that provider.execute_tool() works even when
|
27
|
+
# the underlying driver is not available (e.g. OpenAI SDK not installed).
|
28
|
+
self._tools_adapter = get_local_tools_adapter()
|
26
29
|
if not self.available:
|
27
30
|
self._driver = None
|
28
31
|
return
|
@@ -1 +1 @@
|
|
1
|
-
# Deepseek provider package marker
|
1
|
+
# Deepseek provider package marker
|
@@ -1,16 +1,16 @@
|
|
1
|
-
MODEL_SPECS = {
|
2
|
-
"deepseek-chat": {
|
3
|
-
"description": "DeepSeek Chat Model (OpenAI-compatible)",
|
4
|
-
"context_window": 8192,
|
5
|
-
"max_tokens": 4096,
|
6
|
-
"family": "deepseek",
|
7
|
-
"default": True,
|
8
|
-
},
|
9
|
-
"deepseek-reasoner": {
|
10
|
-
"description": "DeepSeek Reasoner Model (OpenAI-compatible)",
|
11
|
-
"context_window": 8192,
|
12
|
-
"max_tokens": 4096,
|
13
|
-
"family": "deepseek",
|
14
|
-
"default": False,
|
15
|
-
},
|
16
|
-
}
|
1
|
+
MODEL_SPECS = {
|
2
|
+
"deepseek-chat": {
|
3
|
+
"description": "DeepSeek Chat Model (OpenAI-compatible)",
|
4
|
+
"context_window": 8192,
|
5
|
+
"max_tokens": 4096,
|
6
|
+
"family": "deepseek",
|
7
|
+
"default": True,
|
8
|
+
},
|
9
|
+
"deepseek-reasoner": {
|
10
|
+
"description": "DeepSeek Reasoner Model (OpenAI-compatible)",
|
11
|
+
"context_window": 8192,
|
12
|
+
"max_tokens": 4096,
|
13
|
+
"family": "deepseek",
|
14
|
+
"default": False,
|
15
|
+
},
|
16
|
+
}
|