janito 2.15.0__py3-none-any.whl → 2.16.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/chat_mode/session.py +42 -1
- janito/cli/cli_commands/list_drivers.py +117 -93
- janito/cli/cli_commands/list_providers_region.py +85 -0
- janito/cli/core/getters.py +7 -3
- janito/cli/main_cli.py +38 -3
- janito/cli/single_shot_mode/handler.py +43 -1
- janito/drivers/azure_openai/driver.py +14 -5
- janito/drivers/openai/driver.py +16 -5
- janito/drivers/zai/driver.py +19 -22
- janito/formatting_token.py +9 -5
- janito/llm/auth_utils.py +21 -0
- janito/providers/alibaba/provider.py +13 -9
- janito/providers/anthropic/provider.py +4 -5
- janito/providers/azure_openai/provider.py +4 -5
- janito/providers/deepseek/provider.py +4 -5
- janito/providers/google/provider.py +4 -5
- janito/providers/moonshotai/provider.py +46 -37
- janito/providers/openai/provider.py +45 -39
- janito/providers/zai/provider.py +3 -9
- janito/regions/__init__.py +16 -0
- janito/regions/cli.py +124 -0
- janito/regions/geo_utils.py +240 -0
- janito/regions/provider_regions.py +158 -0
- {janito-2.15.0.dist-info → janito-2.16.0.dist-info}/METADATA +1 -1
- {janito-2.15.0.dist-info → janito-2.16.0.dist-info}/RECORD +29 -23
- {janito-2.15.0.dist-info → janito-2.16.0.dist-info}/WHEEL +0 -0
- {janito-2.15.0.dist-info → janito-2.16.0.dist-info}/entry_points.txt +0 -0
- {janito-2.15.0.dist-info → janito-2.16.0.dist-info}/licenses/LICENSE +0 -0
- {janito-2.15.0.dist-info → janito-2.16.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,240 @@
|
|
1
|
+
"""
|
2
|
+
Geolocation utilities for determining user location and optimal regions.
|
3
|
+
|
4
|
+
This module provides utilities to detect user location and determine
|
5
|
+
optimal API regions based on geographic proximity.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import os
|
9
|
+
import json
|
10
|
+
import subprocess
|
11
|
+
import sys
|
12
|
+
from typing import Optional, Tuple
|
13
|
+
from pathlib import Path
|
14
|
+
|
15
|
+
|
16
|
+
def _get_geoip_location() -> Optional[str]:
|
17
|
+
"""Try to get location using geoip2 if available."""
|
18
|
+
try:
|
19
|
+
import geoip2.database
|
20
|
+
import geoip2.errors
|
21
|
+
import urllib.request
|
22
|
+
|
23
|
+
# Common GeoIP database locations
|
24
|
+
db_paths = [
|
25
|
+
"/usr/share/GeoIP/GeoLite2-City.mmdb",
|
26
|
+
"/var/lib/GeoIP/GeoLite2-City.mmdb",
|
27
|
+
str(Path.home() / ".local/share/GeoIP/GeoLite2-City.mmdb"),
|
28
|
+
]
|
29
|
+
|
30
|
+
for db_path in db_paths:
|
31
|
+
if Path(db_path).exists():
|
32
|
+
reader = geoip2.database.Reader(db_path)
|
33
|
+
try:
|
34
|
+
with urllib.request.urlopen(
|
35
|
+
"https://api.ipify.org", timeout=2
|
36
|
+
) as response:
|
37
|
+
ip = response.read().decode().strip()
|
38
|
+
|
39
|
+
response = reader.city(ip)
|
40
|
+
country_code = response.country.iso_code
|
41
|
+
reader.close()
|
42
|
+
|
43
|
+
if country_code:
|
44
|
+
return country_code.upper()
|
45
|
+
except Exception:
|
46
|
+
reader.close()
|
47
|
+
continue
|
48
|
+
except (ImportError, Exception):
|
49
|
+
pass
|
50
|
+
return None
|
51
|
+
|
52
|
+
|
53
|
+
def _get_ipinfo_location() -> Optional[str]:
|
54
|
+
"""Try to get location using ipinfo.io via curl."""
|
55
|
+
try:
|
56
|
+
import subprocess
|
57
|
+
|
58
|
+
result = subprocess.run(
|
59
|
+
["curl", "-s", "https://ipinfo.io/country"],
|
60
|
+
capture_output=True,
|
61
|
+
text=True,
|
62
|
+
timeout=3,
|
63
|
+
)
|
64
|
+
if result.returncode == 0 and result.stdout.strip():
|
65
|
+
return result.stdout.strip().upper()
|
66
|
+
except (subprocess.TimeoutExpired, FileNotFoundError, Exception):
|
67
|
+
pass
|
68
|
+
return None
|
69
|
+
|
70
|
+
|
71
|
+
def _get_locale_location() -> Optional[str]:
|
72
|
+
"""Try to get location from system locale."""
|
73
|
+
try:
|
74
|
+
import locale
|
75
|
+
|
76
|
+
loc = locale.getdefaultlocale()[0]
|
77
|
+
if loc:
|
78
|
+
parts = loc.split("_")
|
79
|
+
if len(parts) > 1:
|
80
|
+
return parts[-1].upper()
|
81
|
+
except Exception:
|
82
|
+
pass
|
83
|
+
return None
|
84
|
+
|
85
|
+
|
86
|
+
def get_user_location() -> Tuple[str, str]:
|
87
|
+
"""
|
88
|
+
Detect user's location using geoip lookup.
|
89
|
+
|
90
|
+
Returns:
|
91
|
+
Tuple of (country_code, region_name)
|
92
|
+
|
93
|
+
Note:
|
94
|
+
This is a best-effort detection. Falls back to environment variables
|
95
|
+
or defaults to 'US' if detection fails.
|
96
|
+
"""
|
97
|
+
# Try environment variable first
|
98
|
+
user_region = os.getenv("JANITO_REGION")
|
99
|
+
if user_region:
|
100
|
+
return user_region.upper(), f"Environment: {user_region}"
|
101
|
+
|
102
|
+
# Try different detection methods
|
103
|
+
country_code = (
|
104
|
+
_get_geoip_location()
|
105
|
+
or _get_ipinfo_location()
|
106
|
+
or _get_locale_location()
|
107
|
+
or "US"
|
108
|
+
)
|
109
|
+
|
110
|
+
source = (
|
111
|
+
"GeoIP"
|
112
|
+
if _get_geoip_location()
|
113
|
+
else (
|
114
|
+
"ipinfo.io"
|
115
|
+
if _get_ipinfo_location()
|
116
|
+
else ("Locale" if _get_locale_location() else "Default")
|
117
|
+
)
|
118
|
+
)
|
119
|
+
|
120
|
+
return country_code, f"{source}: {country_code}"
|
121
|
+
|
122
|
+
|
123
|
+
def get_closest_region(country_code: str) -> str:
|
124
|
+
"""
|
125
|
+
Map country code to closest major region.
|
126
|
+
|
127
|
+
Args:
|
128
|
+
country_code: ISO country code (e.g., 'US', 'DE', 'CN')
|
129
|
+
|
130
|
+
Returns:
|
131
|
+
Major region identifier (US, EU, CN, CH, ASIA)
|
132
|
+
"""
|
133
|
+
country_code = country_code.upper()
|
134
|
+
|
135
|
+
# US and Americas
|
136
|
+
if country_code in ["US", "CA", "MX", "BR", "AR", "CL", "CO", "PE"]:
|
137
|
+
return "US"
|
138
|
+
|
139
|
+
# European Union and Europe
|
140
|
+
if country_code in [
|
141
|
+
"AT",
|
142
|
+
"BE",
|
143
|
+
"BG",
|
144
|
+
"HR",
|
145
|
+
"CY",
|
146
|
+
"CZ",
|
147
|
+
"DK",
|
148
|
+
"EE",
|
149
|
+
"FI",
|
150
|
+
"FR",
|
151
|
+
"DE",
|
152
|
+
"GR",
|
153
|
+
"HU",
|
154
|
+
"IE",
|
155
|
+
"IT",
|
156
|
+
"LV",
|
157
|
+
"LT",
|
158
|
+
"LU",
|
159
|
+
"MT",
|
160
|
+
"NL",
|
161
|
+
"PL",
|
162
|
+
"PT",
|
163
|
+
"RO",
|
164
|
+
"SK",
|
165
|
+
"SI",
|
166
|
+
"ES",
|
167
|
+
"SE",
|
168
|
+
"GB",
|
169
|
+
"NO",
|
170
|
+
"CH",
|
171
|
+
"IS",
|
172
|
+
"LI",
|
173
|
+
]:
|
174
|
+
return "EU"
|
175
|
+
|
176
|
+
# China and nearby
|
177
|
+
if country_code in ["CN", "HK", "MO", "TW"]:
|
178
|
+
return "CN"
|
179
|
+
|
180
|
+
# Switzerland
|
181
|
+
if country_code == "CH":
|
182
|
+
return "CH"
|
183
|
+
|
184
|
+
# Asia Pacific
|
185
|
+
if country_code in [
|
186
|
+
"JP",
|
187
|
+
"KR",
|
188
|
+
"SG",
|
189
|
+
"MY",
|
190
|
+
"TH",
|
191
|
+
"VN",
|
192
|
+
"PH",
|
193
|
+
"ID",
|
194
|
+
"IN",
|
195
|
+
"AU",
|
196
|
+
"NZ",
|
197
|
+
"BD",
|
198
|
+
"LK",
|
199
|
+
"MM",
|
200
|
+
"KH",
|
201
|
+
"LA",
|
202
|
+
"BN",
|
203
|
+
"MV",
|
204
|
+
]:
|
205
|
+
return "ASIA"
|
206
|
+
|
207
|
+
# Middle East
|
208
|
+
if country_code in ["AE", "SA", "QA", "KW", "OM", "BH", "IL", "TR"]:
|
209
|
+
return "ASIA"
|
210
|
+
|
211
|
+
# Africa
|
212
|
+
if country_code in ["ZA", "NG", "KE", "EG", "MA", "TN", "GH", "UG"]:
|
213
|
+
return "EU" # Route through EU for better connectivity
|
214
|
+
|
215
|
+
# Default to US for unknown regions
|
216
|
+
return "US"
|
217
|
+
|
218
|
+
|
219
|
+
def get_region_info() -> dict:
|
220
|
+
"""
|
221
|
+
Get comprehensive region information for the current user.
|
222
|
+
|
223
|
+
Returns:
|
224
|
+
Dictionary with location details
|
225
|
+
"""
|
226
|
+
country_code, source = get_user_location()
|
227
|
+
major_region = get_closest_region(country_code)
|
228
|
+
|
229
|
+
return {
|
230
|
+
"country_code": country_code,
|
231
|
+
"major_region": major_region,
|
232
|
+
"source": source,
|
233
|
+
"timestamp": str(__import__("datetime").datetime.now()),
|
234
|
+
}
|
235
|
+
|
236
|
+
|
237
|
+
if __name__ == "__main__":
|
238
|
+
# Test the geolocation functionality
|
239
|
+
info = get_region_info()
|
240
|
+
print(json.dumps(info, indent=2))
|
@@ -0,0 +1,158 @@
|
|
1
|
+
"""
|
2
|
+
Static region definitions for LLM providers.
|
3
|
+
|
4
|
+
This module contains region mappings for major LLM providers with their
|
5
|
+
respective API endpoints and data center locations.
|
6
|
+
"""
|
7
|
+
|
8
|
+
from typing import Dict, List, Optional
|
9
|
+
from dataclasses import dataclass
|
10
|
+
|
11
|
+
|
12
|
+
@dataclass
|
13
|
+
class RegionEndpoint:
|
14
|
+
"""Represents a provider's endpoint in a specific region."""
|
15
|
+
|
16
|
+
region_code: str
|
17
|
+
name: str
|
18
|
+
endpoint: str
|
19
|
+
location: str # City, Country format
|
20
|
+
priority: int = 1 # Lower = higher priority
|
21
|
+
|
22
|
+
|
23
|
+
# Region definitions for major LLM providers
|
24
|
+
PROVIDER_REGIONS: Dict[str, List[RegionEndpoint]] = {
|
25
|
+
"openai": [
|
26
|
+
RegionEndpoint(
|
27
|
+
"US-WEST", "US West", "https://api.openai.com/v1", "San Francisco, US", 1
|
28
|
+
),
|
29
|
+
],
|
30
|
+
"anthropic": [
|
31
|
+
RegionEndpoint(
|
32
|
+
"US-WEST", "US West", "https://api.anthropic.com", "San Francisco, US", 1
|
33
|
+
),
|
34
|
+
],
|
35
|
+
"google": [
|
36
|
+
RegionEndpoint(
|
37
|
+
"EU-WEST",
|
38
|
+
"EU West",
|
39
|
+
"https://generativelanguage.googleapis.com/v1beta",
|
40
|
+
"Delfzijl, NL",
|
41
|
+
1,
|
42
|
+
),
|
43
|
+
],
|
44
|
+
"azure-openai": [
|
45
|
+
RegionEndpoint(
|
46
|
+
"US-EAST",
|
47
|
+
"East US",
|
48
|
+
"https://{resource}.openai.azure.com",
|
49
|
+
"Virginia, US",
|
50
|
+
1,
|
51
|
+
),
|
52
|
+
RegionEndpoint(
|
53
|
+
"US-WEST",
|
54
|
+
"West US",
|
55
|
+
"https://{resource}.openai.azure.com",
|
56
|
+
"California, US",
|
57
|
+
2,
|
58
|
+
),
|
59
|
+
RegionEndpoint(
|
60
|
+
"EU-WEST",
|
61
|
+
"West Europe",
|
62
|
+
"https://{resource}.openai.azure.com",
|
63
|
+
"Netherlands, NL",
|
64
|
+
3,
|
65
|
+
),
|
66
|
+
RegionEndpoint(
|
67
|
+
"EU-NORTH",
|
68
|
+
"North Europe",
|
69
|
+
"https://{resource}.openai.azure.com",
|
70
|
+
"Ireland, IE",
|
71
|
+
4,
|
72
|
+
),
|
73
|
+
],
|
74
|
+
"alibaba": [
|
75
|
+
RegionEndpoint(
|
76
|
+
"SG",
|
77
|
+
"Singapore",
|
78
|
+
"https://dashscope-intl.aliyuncs.com/api/v1",
|
79
|
+
"Singapore, SG",
|
80
|
+
1,
|
81
|
+
),
|
82
|
+
RegionEndpoint(
|
83
|
+
"CN-EAST",
|
84
|
+
"China East",
|
85
|
+
"https://dashscope.aliyuncs.com/api/v1",
|
86
|
+
"Hangzhou, CN",
|
87
|
+
2,
|
88
|
+
),
|
89
|
+
],
|
90
|
+
"moonshot": [
|
91
|
+
RegionEndpoint(
|
92
|
+
"US-WEST", "US West", "https://api.moonshot.ai/v1", "San Francisco, US", 1
|
93
|
+
),
|
94
|
+
RegionEndpoint(
|
95
|
+
"CN-EAST", "China East", "https://api.moonshot.cn/v1", "Shanghai, CN", 2
|
96
|
+
),
|
97
|
+
RegionEndpoint(
|
98
|
+
"CN-NORTH", "China North", "https://api.moonshot.cn/v1", "Beijing, CN", 3
|
99
|
+
),
|
100
|
+
],
|
101
|
+
"zai": [
|
102
|
+
RegionEndpoint(
|
103
|
+
"ASIA-PACIFIC",
|
104
|
+
"Asia Pacific",
|
105
|
+
"https://api.z.ai/api/paas/v4",
|
106
|
+
"Singapore, SG",
|
107
|
+
1,
|
108
|
+
),
|
109
|
+
],
|
110
|
+
}
|
111
|
+
|
112
|
+
# Geographic region mappings
|
113
|
+
REGION_MAPPINGS = {
|
114
|
+
"US": ["US-EAST", "US-WEST", "US-CENTRAL", "US-NORTH", "US-SOUTH"],
|
115
|
+
"EU": ["EU-CENTRAL", "EU-WEST", "EU-NORTH", "EU-SOUTH", "EU-EAST"],
|
116
|
+
"CN": ["CN-EAST", "CN-NORTH", "CN-SOUTH", "CN-WEST", "CN-CENTRAL"],
|
117
|
+
"CH": ["CH-NORTH", "CH-SOUTH", "CH-EAST", "CH-WEST"],
|
118
|
+
"ASIA": ["ASIA-EAST", "ASIA-PACIFIC", "ASIA-SOUTH", "ASIA-CENTRAL"],
|
119
|
+
"GLOBAL": ["GLOBAL", "WORLDWIDE"],
|
120
|
+
}
|
121
|
+
|
122
|
+
|
123
|
+
def get_provider_regions(provider: str) -> List[RegionEndpoint]:
|
124
|
+
"""Get all regions for a specific provider."""
|
125
|
+
return PROVIDER_REGIONS.get(provider.lower(), [])
|
126
|
+
|
127
|
+
|
128
|
+
def get_optimal_endpoint(provider: str, user_region: str = "US") -> Optional[str]:
|
129
|
+
"""
|
130
|
+
Get the optimal endpoint for a provider based on user region.
|
131
|
+
|
132
|
+
Args:
|
133
|
+
provider: The provider name (e.g., 'openai', 'anthropic')
|
134
|
+
user_region: User's geographic region (US, EU, CN, CH, ASIA)
|
135
|
+
|
136
|
+
Returns:
|
137
|
+
The optimal endpoint URL or None if provider not found
|
138
|
+
"""
|
139
|
+
regions = get_provider_regions(provider)
|
140
|
+
if not regions:
|
141
|
+
return None
|
142
|
+
|
143
|
+
# Map user region to provider regions
|
144
|
+
preferred_region_codes = REGION_MAPPINGS.get(user_region.upper(), [])
|
145
|
+
|
146
|
+
# Find the highest priority region that matches
|
147
|
+
for region_code in preferred_region_codes:
|
148
|
+
for region in regions:
|
149
|
+
if region.region_code == region_code:
|
150
|
+
return region.endpoint
|
151
|
+
|
152
|
+
# Fallback to first available region
|
153
|
+
return regions[0].endpoint if regions else None
|
154
|
+
|
155
|
+
|
156
|
+
def get_all_providers() -> List[str]:
|
157
|
+
"""Get list of all supported providers."""
|
158
|
+
return list(PROVIDER_REGIONS.keys())
|
@@ -9,7 +9,7 @@ janito/dir_walk_utils.py,sha256=ON9EyVH7Aaik8WtCH5z8DQis9ycdoNVkjNvU16HH498,1193
|
|
9
9
|
janito/driver_events.py,sha256=51ab7KW_W6fVZVeO0ez-HJFY4NbTI327ZlEmEsEkxQc,3405
|
10
10
|
janito/exceptions.py,sha256=l4AepRdWwAuLp5fUygrBBgO9rpwgfV6JvY1afOdq2pw,913
|
11
11
|
janito/formatting.py,sha256=SMvOmL6bst3KGcI7OLa5D4DE127fQYuHZS3oY8OPsn8,2031
|
12
|
-
janito/formatting_token.py,sha256=
|
12
|
+
janito/formatting_token.py,sha256=UefBF8Nn3BU8bJNQRrJWB3i3zXEwkRRZMPGuAOJaDYI,2440
|
13
13
|
janito/gitignore_utils.py,sha256=P3iF9fMWAomqULq2xsoqHtI9uNIFSPcagljrxZshmLw,4110
|
14
14
|
janito/mkdocs.yml,sha256=hceV1mnCuj5Eo42jJQHSAhqHC4emiMExgnISiiwqSow,925
|
15
15
|
janito/perf_singleton.py,sha256=g1h0Sdf4ydzegeEpJlMhQt4H0GQZ2hryXrdYOTL-b30,113
|
@@ -28,7 +28,7 @@ janito/cli/__init__.py,sha256=xaPDOrWphBbCR63Xpcx_yfpXSJIlCaaICc4j2qpWqrM,194
|
|
28
28
|
janito/cli/config.py,sha256=HkZ14701HzIqrvaNyDcDhGlVHfpX_uHlLp2rHmhRm_k,872
|
29
29
|
janito/cli/console.py,sha256=gJolqzWL7jEPLxeuH-CwBDRFpXt976KdZOEAB2tdBDs,64
|
30
30
|
janito/cli/main.py,sha256=s5odou0txf8pzTf1ADk2yV7T5m8B6cejJ81e7iu776U,312
|
31
|
-
janito/cli/main_cli.py,sha256=
|
31
|
+
janito/cli/main_cli.py,sha256=21XPZ5Kp4ye2kEzkhcBtWe60Pe7XYAtzlZOf5RHNDuU,15280
|
32
32
|
janito/cli/prompt_core.py,sha256=F68J4Xl6jZMYFN4oBBYZFj15Jp-HTYoLub4bw2XpNRU,11648
|
33
33
|
janito/cli/prompt_handler.py,sha256=SnPTlL64noeAMGlI08VBDD5IDD8jlVMIYA4-fS8zVLg,215
|
34
34
|
janito/cli/prompt_setup.py,sha256=1s5yccFaWMgDkUjkvnTYGEWJAFPJ6hIiqwbrLfzWxMI,2038
|
@@ -39,7 +39,7 @@ janito/cli/chat_mode/bindings.py,sha256=odjc5_-YW1t2FRhBUNRNoBMoQIg5sMz3ktV7xG0A
|
|
39
39
|
janito/cli/chat_mode/chat_entry.py,sha256=RFdPd23jsA2DMHRacpjAdwI_1dFBaWrtnwyQEgb2fHA,475
|
40
40
|
janito/cli/chat_mode/prompt_style.py,sha256=vsqQ9xxmrYjj1pWuVe9CayQf39fo2EIXrkKPkflSVn4,805
|
41
41
|
janito/cli/chat_mode/script_runner.py,sha256=wOwEn4bgmjqHqjTqtfyaSOnRPsGf4ZVW-YAWhEeqxXU,6507
|
42
|
-
janito/cli/chat_mode/session.py,sha256=
|
42
|
+
janito/cli/chat_mode/session.py,sha256=Dlb64LUeER8QEsWGYX0D664tcQjEn8Nx855dmk7vj4M,14903
|
43
43
|
janito/cli/chat_mode/session_profile_select.py,sha256=CJ2g3VbPGWfBNrNkYYX57oIJZJ-hIZBNGB-zcdjC9vk,5379
|
44
44
|
janito/cli/chat_mode/toolbar.py,sha256=bJ9jPaTInp2gB3yjSVJp8mpNEFiOslzNhVaiqpXJhKc,3025
|
45
45
|
janito/cli/chat_mode/shell/autocomplete.py,sha256=lE68MaVaodbA2VfUM0_YLqQVLBJAE_BJsd5cMtwuD-g,793
|
@@ -73,10 +73,11 @@ janito/cli/chat_mode/shell/session/__init__.py,sha256=uTYE_QpZFEn7v9QE5o1LdulpCW
|
|
73
73
|
janito/cli/chat_mode/shell/session/history.py,sha256=tYav6GgjAZkvWhlI_rfG6OArNqW6Wn2DTv39Hb20QYc,1262
|
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
|
-
janito/cli/cli_commands/list_drivers.py,sha256=
|
76
|
+
janito/cli/cli_commands/list_drivers.py,sha256=8WhcVL4igdkyyeaxScsYZwqvDgfM_ZSaJgZ1BokjZUk,5056
|
77
77
|
janito/cli/cli_commands/list_models.py,sha256=_rqHz89GsNLcH0GGkFqPue7ah4ZbN9YHm0lEP30Aa-A,1111
|
78
78
|
janito/cli/cli_commands/list_profiles.py,sha256=9-HV2EbtP2AdubbMoakjbu7Oq4Ss9UDyO7Eb6CC52wI,2681
|
79
79
|
janito/cli/cli_commands/list_providers.py,sha256=v8OQ8ULnuzNuvgkeKqGXGj69eOiavAlPGhzfR0zavhg,185
|
80
|
+
janito/cli/cli_commands/list_providers_region.py,sha256=qrMj_gtgEMty8UH0P_O5SgWCVJ9ZKxGUp_GdsE4_EH4,2548
|
80
81
|
janito/cli/cli_commands/list_tools.py,sha256=JFRdlhPeA3BzhJ2PkjIt3u137IJoNc-vYSjUuPlaOXw,3593
|
81
82
|
janito/cli/cli_commands/model_selection.py,sha256=ANWtwC5glZkGMdaNtARDbEG3QmuBUcDLVxzzC5jeBNo,1643
|
82
83
|
janito/cli/cli_commands/model_utils.py,sha256=U0j2FTpcIBc4eAc40MXz5tyAK3m8lkakpOS2l2bGh4A,2868
|
@@ -85,21 +86,21 @@ janito/cli/cli_commands/show_config.py,sha256=eYMcuvU-d7mvvuctbQacZFERqcKHEnxaRR
|
|
85
86
|
janito/cli/cli_commands/show_system_prompt.py,sha256=9ZJGW7lIGJ9LX2JZiWVEm4AbaD0qEQO7LF89jPgk52I,5232
|
86
87
|
janito/cli/core/__init__.py,sha256=YH95fhgY9yBX8RgqX9dSrEkl4exjV0T4rbmJ6xUpG-Y,196
|
87
88
|
janito/cli/core/event_logger.py,sha256=1X6lR0Ax7AgF8HlPWFoY5Ystuu7Bh4ooTo78vXzeGB0,2008
|
88
|
-
janito/cli/core/getters.py,sha256=
|
89
|
+
janito/cli/core/getters.py,sha256=qk1wO9f77gKOJB2dsqDMv2DgcKT3KE1VPL8-pxv7yys,2335
|
89
90
|
janito/cli/core/model_guesser.py,sha256=jzkkiQ-J2buT2Omh6jYZHa8-zCJxqKQBL08Z58pe1_o,1741
|
90
91
|
janito/cli/core/runner.py,sha256=3vP92XEUzzHeOWbMHg82iISsXVUAM7y8YKWGNSIMyA8,8337
|
91
92
|
janito/cli/core/setters.py,sha256=PD3aT1y1q8XWQVtRNfrU0dtlW4JGdn6BMJyP7FCQWhc,4623
|
92
93
|
janito/cli/core/unsetters.py,sha256=FEw9gCt0vRvoCt0kRSNfVB2tzi_TqppJIx2nHPP59-k,2012
|
93
94
|
janito/cli/single_shot_mode/__init__.py,sha256=Ct99pKe9tINzVW6oedZJfzfZQKWpXz-weSSCn0hrwHY,115
|
94
|
-
janito/cli/single_shot_mode/handler.py,sha256=
|
95
|
+
janito/cli/single_shot_mode/handler.py,sha256=uZ3iYy6TJqdujAB6B0GEb_mrWUz_JMXckzt5n7FGzgk,5405
|
95
96
|
janito/docs/GETTING_STARTED.md,sha256=EbXV7B3XxjSy1E0XQJFOVITVbTmZBVB7pjth2Mb4_rg,2835
|
96
97
|
janito/drivers/dashscope.bak.zip,sha256=9Pv4Xyciju8jO1lEMFVgYXexoZkxmDO3Ig6vw3ODfL8,4936
|
97
98
|
janito/drivers/openai_responses.bak.zip,sha256=E43eDCHGa2tCtdjzj_pMnWDdnsOZzj8BJTR5tJp8wcM,13352
|
98
|
-
janito/drivers/azure_openai/driver.py,sha256=
|
99
|
+
janito/drivers/azure_openai/driver.py,sha256=L2rQOl1d0BHaDChHLtZszAeuWNoyYIgwuYuahE1qJps,4152
|
99
100
|
janito/drivers/openai/README.md,sha256=bgPdaYX0pyotCoJ9t3cJbYM-teQ_YM1DAFEKLCMP32Q,666
|
100
|
-
janito/drivers/openai/driver.py,sha256=
|
101
|
+
janito/drivers/openai/driver.py,sha256=ITwonFiux8pVIlCuD9jy1og3sGc-rHH2_LQFRHZvBRc,19152
|
101
102
|
janito/drivers/zai/__init__.py,sha256=rleES3ZJEslJ8M02TdTPyxHKXxA4-e2fDJa6yjuzY8s,22
|
102
|
-
janito/drivers/zai/driver.py,sha256=
|
103
|
+
janito/drivers/zai/driver.py,sha256=uOR7VFEMjd7Dw_zSFO1SN5SgBCIG8b4CEzRMIUXBgUQ,18859
|
103
104
|
janito/event_bus/__init__.py,sha256=VG6GOhKMBh0O_92D-zW8a3YitJPKDajGgPiFezTXlNE,77
|
104
105
|
janito/event_bus/bus.py,sha256=LokZbAdwcWhWOyKSp7H3Ism57x4EZhxlRPjl3NE4UKU,2847
|
105
106
|
janito/event_bus/event.py,sha256=MtgcBPD7cvCuubiLIyo-BWcsNSO-941HLk6bScHTJtQ,427
|
@@ -112,6 +113,7 @@ janito/llm/README.md,sha256=6GRqCu_a9va5HCB1YqNqbshyWKFyAGlnXugrjom-xj8,1213
|
|
112
113
|
janito/llm/__init__.py,sha256=dpyVH51qVRCw-PDyAFLAxq0zd4jl5MDcuV6Cri0D-dQ,134
|
113
114
|
janito/llm/agent.py,sha256=JE59p1YSnB-KnCI8kHIcqcxTY30MlMVZ_RzzDM4KiD4,20735
|
114
115
|
janito/llm/auth.py,sha256=8Dl_orUEPhn2X6XjkO2Nr-j1HFT2YDxk1qJl9hSFI88,2286
|
116
|
+
janito/llm/auth_utils.py,sha256=7GH7bIScKhVWJW6ugcDrJLcYRamj5dl_l8N1rrvR4Ws,663
|
115
117
|
janito/llm/driver.py,sha256=stiicPe_MXTuWW4q6MSwK7PCj8UZcA_30pGACu6xYUQ,10039
|
116
118
|
janito/llm/driver_config.py,sha256=OW0ae49EfgKDqaThuDjZBiaN78voNzwiZ6szERMqJos,1406
|
117
119
|
janito/llm/driver_config_builder.py,sha256=BvWGx7vaBR5NyvPY1XNAP3lAgo1uf-T25CSsIo2kkCU,1401
|
@@ -124,28 +126,32 @@ janito/providers/dashscope.bak.zip,sha256=BwXxRmZreEivvRtmqbr5BR62IFVlNjAf4y6DrF
|
|
124
126
|
janito/providers/registry.py,sha256=Ygwv9eVrTXOKhv0EKxSWQXO5WMHvajWE2Q_Lc3p7dKo,730
|
125
127
|
janito/providers/alibaba/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
126
128
|
janito/providers/alibaba/model_info.py,sha256=evAW2CZUX9qgRAzDhZTp47ZNj4G1T7W66gkV60Nfan8,1264
|
127
|
-
janito/providers/alibaba/provider.py,sha256=
|
129
|
+
janito/providers/alibaba/provider.py,sha256=wB8wJEro4ao7osLJyZqd6jpuiTpfbpVTeGEmgZsnWDM,4220
|
128
130
|
janito/providers/anthropic/model_info.py,sha256=m6pBh0Ia8_xC1KZ7ke_4HeHIFw7nWjnYVItnRpkCSWc,1206
|
129
|
-
janito/providers/anthropic/provider.py,sha256=
|
131
|
+
janito/providers/anthropic/provider.py,sha256=aGynBxCFc7oTyvGNDUkbutJCKurC_9J4AkReC2LTPYo,3023
|
130
132
|
janito/providers/azure_openai/model_info.py,sha256=TMSqEpQROIIYUGAyulYJ5xGhj7CbLoaKL_JXeLbXaG0,689
|
131
|
-
janito/providers/azure_openai/provider.py,sha256=
|
133
|
+
janito/providers/azure_openai/provider.py,sha256=3pUYcdHrIcK1N1Pmw96tJvFo4lVse2wfZhGS9D2N3dw,5404
|
132
134
|
janito/providers/deepseek/__init__.py,sha256=4sISEpq4bJO29vxFK9cfnO-SRUmKoD7oSdeCvz0hVno,36
|
133
135
|
janito/providers/deepseek/model_info.py,sha256=tAlFRtWiyNF_MKZ1gy5_-VNlvqoIwAinv6bAv9dNFsc,465
|
134
|
-
janito/providers/deepseek/provider.py,sha256=
|
136
|
+
janito/providers/deepseek/provider.py,sha256=eU-wwVqJog_oJ8VyQyohm6OMHlvrddSszqTfT9Aoc-U,4106
|
135
137
|
janito/providers/google/__init__.py,sha256=hE3OGJvLEhvNLhIK_XmCGIdrIj8MKlyGgdOLJ4mdess,38
|
136
138
|
janito/providers/google/model_info.py,sha256=AakTmzvWm1GPvFzGAq6-PeE_Dpq7BmAAqmh3L8N5KKo,1126
|
137
|
-
janito/providers/google/provider.py,sha256=
|
139
|
+
janito/providers/google/provider.py,sha256=NQVG5kovHOc2SDgWjVIwYGMqshvMUAqRAk9iMntQ52k,3606
|
138
140
|
janito/providers/moonshotai/__init__.py,sha256=nThTAtynq4O2Iidm95daKOCKXi5APRJYtRK2Wr3SDpM,31
|
139
141
|
janito/providers/moonshotai/model_info.py,sha256=MpPAB3tZVvZ8V7tZsiJpk5SReHjVcnwwbp63aUebx9Y,718
|
140
|
-
janito/providers/moonshotai/provider.py,sha256=
|
142
|
+
janito/providers/moonshotai/provider.py,sha256=Lynw2cAF0IA9QPIRN4oY6Yr0cEwyVggpaQQrmkcgHuE,3874
|
141
143
|
janito/providers/openai/__init__.py,sha256=f0m16-sIqScjL9Mp4A0CQBZx6H3PTEy0cnE08jeaB5U,38
|
142
144
|
janito/providers/openai/model_info.py,sha256=cz08O26Ychm-aP3T8guJRqpR96Im9Cwtgl2iMgM7tJs,3384
|
143
|
-
janito/providers/openai/provider.py,sha256=
|
145
|
+
janito/providers/openai/provider.py,sha256=nEYTj-NF9BLc-uQ25QpxaFBLVtJ0GEGFgc22SlTTLJA,4727
|
144
146
|
janito/providers/openai/schema_generator.py,sha256=hTqeLcPTR8jeKn5DUUpo7b-EZ-V-g1WwXiX7MbHnFzE,2234
|
145
147
|
janito/providers/zai/__init__.py,sha256=qtIr9_QBFaXG8xB6cRDGhS7se6ir11CWseI9azLMRBo,24
|
146
148
|
janito/providers/zai/model_info.py,sha256=ldwD8enpxXv1G-YsDw4YJn31YsVueQ4vj5HgoYvnPxo,1183
|
147
|
-
janito/providers/zai/provider.py,sha256=
|
149
|
+
janito/providers/zai/provider.py,sha256=aKqDTdcwWk-FT70wTbTrTzlWx2NwRWkLoB64upiliU8,5066
|
148
150
|
janito/providers/zai/schema_generator.py,sha256=0kuxbrWfNKGO9fzxFStqOpTT09ldyI6vYxeDxFN4ku8,4091
|
151
|
+
janito/regions/__init__.py,sha256=DVUiWPXGKX73tj3PJcLJXdQTwhiYWlcWPNpPcNNeYhk,484
|
152
|
+
janito/regions/cli.py,sha256=dFiHj1XxqhegqK1kFz-08QpYgiYniEi_ZQiDqjyUaJs,3612
|
153
|
+
janito/regions/geo_utils.py,sha256=nLJ2x0tx1xMNI0_cMEiji-X8denynsaPYmXR9gGg8uk,5908
|
154
|
+
janito/regions/provider_regions.py,sha256=QJdbsdgjg-WcTRqPLGtm3pHJAm2o0-Y9MgE_vNzENEk,4619
|
149
155
|
janito/tools/DOCSTRING_STANDARD.txt,sha256=VLPwNgjxRVD_xZSSVvUZ4H-4bBwM-VKh_RyfzYQsYSs,1735
|
150
156
|
janito/tools/README.md,sha256=5HkLpF5k4PENJER7SlDPRXj0yo9mpHvAHW4uuzhq4ak,115
|
151
157
|
janito/tools/__init__.py,sha256=W1B39PztC2UF7PS2WyLH6el32MFOETMlN1-LurOROCg,1171
|
@@ -207,9 +213,9 @@ janito/tools/adapters/local/validate_file_syntax/ps1_validator.py,sha256=TeIkPt0
|
|
207
213
|
janito/tools/adapters/local/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
|
208
214
|
janito/tools/adapters/local/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
|
209
215
|
janito/tools/adapters/local/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
|
210
|
-
janito-2.
|
211
|
-
janito-2.
|
212
|
-
janito-2.
|
213
|
-
janito-2.
|
214
|
-
janito-2.
|
215
|
-
janito-2.
|
216
|
+
janito-2.16.0.dist-info/licenses/LICENSE,sha256=GSAKapQH5ZIGWlpQTA7v5YrfECyaxaohUb1vJX-qepw,1090
|
217
|
+
janito-2.16.0.dist-info/METADATA,sha256=R3XPF2v8VmjybUFGs6ReYnItEfJk5kblKsSOjY7LvEo,16365
|
218
|
+
janito-2.16.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
219
|
+
janito-2.16.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
|
220
|
+
janito-2.16.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
|
221
|
+
janito-2.16.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|