vectorvein 0.2.10__py3-none-any.whl → 0.2.11__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.
- vectorvein/chat_clients/__init__.py +42 -1
- vectorvein/chat_clients/anthropic_client.py +12 -3
- vectorvein/chat_clients/base_client.py +61 -39
- vectorvein/chat_clients/openai_compatible_client.py +21 -1
- vectorvein/types/__init__.py +129 -0
- vectorvein/types/llm_parameters.py +1 -9
- vectorvein/types/settings.py +105 -0
- {vectorvein-0.2.10.dist-info → vectorvein-0.2.11.dist-info}/METADATA +1 -1
- {vectorvein-0.2.10.dist-info → vectorvein-0.2.11.dist-info}/RECORD +11 -9
- {vectorvein-0.2.10.dist-info → vectorvein-0.2.11.dist-info}/WHEEL +0 -0
- {vectorvein-0.2.10.dist-info → vectorvein-0.2.11.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
# @Author: Bi Ying
|
2
2
|
# @Date: 2024-07-26 14:48:55
|
3
3
|
import httpx
|
4
|
-
from typing import overload, Literal
|
4
|
+
from typing import overload, Literal, TYPE_CHECKING
|
5
5
|
|
6
6
|
from .base_client import BaseChatClient, BaseAsyncChatClient
|
7
7
|
|
@@ -26,6 +26,11 @@ from ..types.enums import BackendType, ContextLengthControlType
|
|
26
26
|
from .anthropic_client import AnthropicChatClient, AsyncAnthropicChatClient
|
27
27
|
from .utils import format_messages, get_token_counts, get_message_token_counts, ToolCallContentProcessor
|
28
28
|
|
29
|
+
|
30
|
+
if TYPE_CHECKING:
|
31
|
+
from ..settings import Settings
|
32
|
+
from ..types.settings import SettingsDict
|
33
|
+
|
29
34
|
# 后端映射
|
30
35
|
BackendMap = {
|
31
36
|
"sync": {
|
@@ -75,6 +80,7 @@ def create_chat_client(
|
|
75
80
|
random_endpoint: bool = True,
|
76
81
|
endpoint_id: str = "",
|
77
82
|
http_client: httpx.Client | None = None,
|
83
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
78
84
|
**kwargs,
|
79
85
|
) -> AnthropicChatClient: ...
|
80
86
|
|
@@ -89,6 +95,7 @@ def create_chat_client(
|
|
89
95
|
random_endpoint: bool = True,
|
90
96
|
endpoint_id: str = "",
|
91
97
|
http_client: httpx.Client | None = None,
|
98
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
92
99
|
**kwargs,
|
93
100
|
) -> DeepSeekChatClient: ...
|
94
101
|
|
@@ -103,6 +110,7 @@ def create_chat_client(
|
|
103
110
|
random_endpoint: bool = True,
|
104
111
|
endpoint_id: str = "",
|
105
112
|
http_client: httpx.Client | None = None,
|
113
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
106
114
|
**kwargs,
|
107
115
|
) -> GeminiChatClient: ...
|
108
116
|
|
@@ -117,6 +125,7 @@ def create_chat_client(
|
|
117
125
|
random_endpoint: bool = True,
|
118
126
|
endpoint_id: str = "",
|
119
127
|
http_client: httpx.Client | None = None,
|
128
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
120
129
|
**kwargs,
|
121
130
|
) -> GroqChatClient: ...
|
122
131
|
|
@@ -131,6 +140,7 @@ def create_chat_client(
|
|
131
140
|
random_endpoint: bool = True,
|
132
141
|
endpoint_id: str = "",
|
133
142
|
http_client: httpx.Client | None = None,
|
143
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
134
144
|
**kwargs,
|
135
145
|
) -> LocalChatClient: ...
|
136
146
|
|
@@ -145,6 +155,7 @@ def create_chat_client(
|
|
145
155
|
random_endpoint: bool = True,
|
146
156
|
endpoint_id: str = "",
|
147
157
|
http_client: httpx.Client | None = None,
|
158
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
148
159
|
**kwargs,
|
149
160
|
) -> MiniMaxChatClient: ...
|
150
161
|
|
@@ -159,6 +170,7 @@ def create_chat_client(
|
|
159
170
|
random_endpoint: bool = True,
|
160
171
|
endpoint_id: str = "",
|
161
172
|
http_client: httpx.Client | None = None,
|
173
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
162
174
|
**kwargs,
|
163
175
|
) -> MistralChatClient: ...
|
164
176
|
|
@@ -173,6 +185,7 @@ def create_chat_client(
|
|
173
185
|
random_endpoint: bool = True,
|
174
186
|
endpoint_id: str = "",
|
175
187
|
http_client: httpx.Client | None = None,
|
188
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
176
189
|
**kwargs,
|
177
190
|
) -> MoonshotChatClient: ...
|
178
191
|
|
@@ -187,6 +200,7 @@ def create_chat_client(
|
|
187
200
|
random_endpoint: bool = True,
|
188
201
|
endpoint_id: str = "",
|
189
202
|
http_client: httpx.Client | None = None,
|
203
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
190
204
|
**kwargs,
|
191
205
|
) -> OpenAIChatClient: ...
|
192
206
|
|
@@ -201,6 +215,7 @@ def create_chat_client(
|
|
201
215
|
random_endpoint: bool = True,
|
202
216
|
endpoint_id: str = "",
|
203
217
|
http_client: httpx.Client | None = None,
|
218
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
204
219
|
**kwargs,
|
205
220
|
) -> QwenChatClient: ...
|
206
221
|
|
@@ -215,6 +230,7 @@ def create_chat_client(
|
|
215
230
|
random_endpoint: bool = True,
|
216
231
|
endpoint_id: str = "",
|
217
232
|
http_client: httpx.Client | None = None,
|
233
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
218
234
|
**kwargs,
|
219
235
|
) -> YiChatClient: ...
|
220
236
|
|
@@ -229,6 +245,7 @@ def create_chat_client(
|
|
229
245
|
random_endpoint: bool = True,
|
230
246
|
endpoint_id: str = "",
|
231
247
|
http_client: httpx.Client | None = None,
|
248
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
232
249
|
**kwargs,
|
233
250
|
) -> ZhiPuAIChatClient: ...
|
234
251
|
|
@@ -243,6 +260,7 @@ def create_chat_client(
|
|
243
260
|
random_endpoint: bool = True,
|
244
261
|
endpoint_id: str = "",
|
245
262
|
http_client: httpx.Client | None = None,
|
263
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
246
264
|
**kwargs,
|
247
265
|
) -> BaichuanChatClient: ...
|
248
266
|
|
@@ -257,6 +275,7 @@ def create_chat_client(
|
|
257
275
|
random_endpoint: bool = True,
|
258
276
|
endpoint_id: str = "",
|
259
277
|
http_client: httpx.Client | None = None,
|
278
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
260
279
|
**kwargs,
|
261
280
|
) -> StepFunChatClient: ...
|
262
281
|
|
@@ -271,6 +290,7 @@ def create_chat_client(
|
|
271
290
|
random_endpoint: bool = True,
|
272
291
|
endpoint_id: str = "",
|
273
292
|
http_client: httpx.Client | None = None,
|
293
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
274
294
|
**kwargs,
|
275
295
|
) -> XAIChatClient: ...
|
276
296
|
|
@@ -285,6 +305,7 @@ def create_chat_client(
|
|
285
305
|
random_endpoint: bool = True,
|
286
306
|
endpoint_id: str = "",
|
287
307
|
http_client: httpx.Client | None = None,
|
308
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
288
309
|
**kwargs,
|
289
310
|
) -> BaseChatClient: ...
|
290
311
|
|
@@ -298,6 +319,7 @@ def create_chat_client(
|
|
298
319
|
random_endpoint: bool = True,
|
299
320
|
endpoint_id: str = "",
|
300
321
|
http_client: httpx.Client | None = None,
|
322
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
301
323
|
**kwargs,
|
302
324
|
) -> BaseChatClient:
|
303
325
|
if backend not in BackendMap["sync"]:
|
@@ -314,6 +336,7 @@ def create_chat_client(
|
|
314
336
|
random_endpoint=random_endpoint,
|
315
337
|
endpoint_id=endpoint_id,
|
316
338
|
http_client=http_client,
|
339
|
+
settings=settings,
|
317
340
|
**kwargs,
|
318
341
|
)
|
319
342
|
|
@@ -328,6 +351,7 @@ def create_async_chat_client(
|
|
328
351
|
random_endpoint: bool = True,
|
329
352
|
endpoint_id: str = "",
|
330
353
|
http_client: httpx.AsyncClient | None = None,
|
354
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
331
355
|
**kwargs,
|
332
356
|
) -> AsyncAnthropicChatClient: ...
|
333
357
|
|
@@ -342,6 +366,7 @@ def create_async_chat_client(
|
|
342
366
|
random_endpoint: bool = True,
|
343
367
|
endpoint_id: str = "",
|
344
368
|
http_client: httpx.AsyncClient | None = None,
|
369
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
345
370
|
**kwargs,
|
346
371
|
) -> AsyncDeepSeekChatClient: ...
|
347
372
|
|
@@ -356,6 +381,7 @@ def create_async_chat_client(
|
|
356
381
|
random_endpoint: bool = True,
|
357
382
|
endpoint_id: str = "",
|
358
383
|
http_client: httpx.AsyncClient | None = None,
|
384
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
359
385
|
**kwargs,
|
360
386
|
) -> AsyncGeminiChatClient: ...
|
361
387
|
|
@@ -370,6 +396,7 @@ def create_async_chat_client(
|
|
370
396
|
random_endpoint: bool = True,
|
371
397
|
endpoint_id: str = "",
|
372
398
|
http_client: httpx.AsyncClient | None = None,
|
399
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
373
400
|
**kwargs,
|
374
401
|
) -> AsyncGroqChatClient: ...
|
375
402
|
|
@@ -384,6 +411,7 @@ def create_async_chat_client(
|
|
384
411
|
random_endpoint: bool = True,
|
385
412
|
endpoint_id: str = "",
|
386
413
|
http_client: httpx.AsyncClient | None = None,
|
414
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
387
415
|
**kwargs,
|
388
416
|
) -> AsyncLocalChatClient: ...
|
389
417
|
|
@@ -398,6 +426,7 @@ def create_async_chat_client(
|
|
398
426
|
random_endpoint: bool = True,
|
399
427
|
endpoint_id: str = "",
|
400
428
|
http_client: httpx.AsyncClient | None = None,
|
429
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
401
430
|
**kwargs,
|
402
431
|
) -> AsyncMiniMaxChatClient: ...
|
403
432
|
|
@@ -412,6 +441,7 @@ def create_async_chat_client(
|
|
412
441
|
random_endpoint: bool = True,
|
413
442
|
endpoint_id: str = "",
|
414
443
|
http_client: httpx.AsyncClient | None = None,
|
444
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
415
445
|
**kwargs,
|
416
446
|
) -> AsyncMistralChatClient: ...
|
417
447
|
|
@@ -426,6 +456,7 @@ def create_async_chat_client(
|
|
426
456
|
random_endpoint: bool = True,
|
427
457
|
endpoint_id: str = "",
|
428
458
|
http_client: httpx.AsyncClient | None = None,
|
459
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
429
460
|
**kwargs,
|
430
461
|
) -> AsyncMoonshotChatClient: ...
|
431
462
|
|
@@ -440,6 +471,7 @@ def create_async_chat_client(
|
|
440
471
|
random_endpoint: bool = True,
|
441
472
|
endpoint_id: str = "",
|
442
473
|
http_client: httpx.AsyncClient | None = None,
|
474
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
443
475
|
**kwargs,
|
444
476
|
) -> AsyncOpenAIChatClient: ...
|
445
477
|
|
@@ -454,6 +486,7 @@ def create_async_chat_client(
|
|
454
486
|
random_endpoint: bool = True,
|
455
487
|
endpoint_id: str = "",
|
456
488
|
http_client: httpx.AsyncClient | None = None,
|
489
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
457
490
|
**kwargs,
|
458
491
|
) -> AsyncQwenChatClient: ...
|
459
492
|
|
@@ -468,6 +501,7 @@ def create_async_chat_client(
|
|
468
501
|
random_endpoint: bool = True,
|
469
502
|
endpoint_id: str = "",
|
470
503
|
http_client: httpx.AsyncClient | None = None,
|
504
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
471
505
|
**kwargs,
|
472
506
|
) -> AsyncYiChatClient: ...
|
473
507
|
|
@@ -482,6 +516,7 @@ def create_async_chat_client(
|
|
482
516
|
random_endpoint: bool = True,
|
483
517
|
endpoint_id: str = "",
|
484
518
|
http_client: httpx.AsyncClient | None = None,
|
519
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
485
520
|
**kwargs,
|
486
521
|
) -> AsyncZhiPuAIChatClient: ...
|
487
522
|
|
@@ -496,6 +531,7 @@ def create_async_chat_client(
|
|
496
531
|
random_endpoint: bool = True,
|
497
532
|
endpoint_id: str = "",
|
498
533
|
http_client: httpx.AsyncClient | None = None,
|
534
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
499
535
|
**kwargs,
|
500
536
|
) -> AsyncBaichuanChatClient: ...
|
501
537
|
|
@@ -510,6 +546,7 @@ def create_async_chat_client(
|
|
510
546
|
random_endpoint: bool = True,
|
511
547
|
endpoint_id: str = "",
|
512
548
|
http_client: httpx.AsyncClient | None = None,
|
549
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
513
550
|
**kwargs,
|
514
551
|
) -> AsyncStepFunChatClient: ...
|
515
552
|
|
@@ -524,6 +561,7 @@ def create_async_chat_client(
|
|
524
561
|
random_endpoint: bool = True,
|
525
562
|
endpoint_id: str = "",
|
526
563
|
http_client: httpx.AsyncClient | None = None,
|
564
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
527
565
|
**kwargs,
|
528
566
|
) -> AsyncXAIChatClient: ...
|
529
567
|
|
@@ -538,6 +576,7 @@ def create_async_chat_client(
|
|
538
576
|
random_endpoint: bool = True,
|
539
577
|
endpoint_id: str = "",
|
540
578
|
http_client: httpx.AsyncClient | None = None,
|
579
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
541
580
|
**kwargs,
|
542
581
|
) -> BaseAsyncChatClient: ...
|
543
582
|
|
@@ -551,6 +590,7 @@ def create_async_chat_client(
|
|
551
590
|
random_endpoint: bool = True,
|
552
591
|
endpoint_id: str = "",
|
553
592
|
http_client: httpx.AsyncClient | None = None,
|
593
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
554
594
|
**kwargs,
|
555
595
|
) -> BaseAsyncChatClient:
|
556
596
|
if backend not in BackendMap["async"]:
|
@@ -567,6 +607,7 @@ def create_async_chat_client(
|
|
567
607
|
random_endpoint=random_endpoint,
|
568
608
|
endpoint_id=endpoint_id,
|
569
609
|
http_client=http_client,
|
610
|
+
settings=settings,
|
570
611
|
**kwargs,
|
571
612
|
)
|
572
613
|
|
@@ -5,13 +5,14 @@ from typing import (
|
|
5
5
|
Any,
|
6
6
|
Dict,
|
7
7
|
List,
|
8
|
+
TYPE_CHECKING,
|
9
|
+
overload,
|
10
|
+
Generator,
|
11
|
+
AsyncGenerator,
|
8
12
|
Union,
|
9
13
|
Literal,
|
10
14
|
Iterable,
|
11
|
-
overload,
|
12
15
|
Optional,
|
13
|
-
Generator,
|
14
|
-
AsyncGenerator,
|
15
16
|
)
|
16
17
|
|
17
18
|
import httpx
|
@@ -67,6 +68,10 @@ from ..types.llm_parameters import (
|
|
67
68
|
ChatCompletionDeltaMessage,
|
68
69
|
)
|
69
70
|
|
71
|
+
if TYPE_CHECKING:
|
72
|
+
from ..settings import Settings
|
73
|
+
from ..types.settings import SettingsDict
|
74
|
+
|
70
75
|
|
71
76
|
def refactor_tool_use_params(tools: Iterable[ChatCompletionToolParam]) -> list[AnthropicToolParam]:
|
72
77
|
return [
|
@@ -186,6 +191,7 @@ class AnthropicChatClient(BaseChatClient):
|
|
186
191
|
endpoint_id: str = "",
|
187
192
|
http_client: httpx.Client | None = None,
|
188
193
|
backend_name: str | None = None,
|
194
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
189
195
|
):
|
190
196
|
super().__init__(
|
191
197
|
model,
|
@@ -196,6 +202,7 @@ class AnthropicChatClient(BaseChatClient):
|
|
196
202
|
endpoint_id,
|
197
203
|
http_client,
|
198
204
|
backend_name,
|
205
|
+
settings,
|
199
206
|
)
|
200
207
|
self.model_id = None
|
201
208
|
self.endpoint = None
|
@@ -717,6 +724,7 @@ class AsyncAnthropicChatClient(BaseAsyncChatClient):
|
|
717
724
|
endpoint_id: str = "",
|
718
725
|
http_client: httpx.AsyncClient | None = None,
|
719
726
|
backend_name: str | None = None,
|
727
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
720
728
|
):
|
721
729
|
super().__init__(
|
722
730
|
model,
|
@@ -727,6 +735,7 @@ class AsyncAnthropicChatClient(BaseAsyncChatClient):
|
|
727
735
|
endpoint_id,
|
728
736
|
http_client,
|
729
737
|
backend_name,
|
738
|
+
settings,
|
730
739
|
)
|
731
740
|
self.model_id = None
|
732
741
|
self.endpoint = None
|
@@ -27,8 +27,10 @@ from anthropic import (
|
|
27
27
|
)
|
28
28
|
from anthropic.types.thinking_config_param import ThinkingConfigParam
|
29
29
|
|
30
|
-
from ..settings import
|
30
|
+
from ..settings import Settings
|
31
|
+
from ..settings import settings as default_settings
|
31
32
|
from ..types import defaults as defs
|
33
|
+
from ..types.settings import SettingsDict
|
32
34
|
from ..types.enums import ContextLengthControlType, BackendType
|
33
35
|
from ..types.llm_parameters import (
|
34
36
|
NotGiven,
|
@@ -58,6 +60,7 @@ class BaseChatClient(ABC):
|
|
58
60
|
endpoint_id: str = "",
|
59
61
|
http_client: httpx.Client | None = None,
|
60
62
|
backend_name: str | None = None,
|
63
|
+
settings: Settings | SettingsDict | None = None, # Use default settings if not provided
|
61
64
|
):
|
62
65
|
self.model = model or self.DEFAULT_MODEL
|
63
66
|
self.stream = stream
|
@@ -70,7 +73,14 @@ class BaseChatClient(ABC):
|
|
70
73
|
if backend_name is not None:
|
71
74
|
self.BACKEND_NAME = BackendType(backend_name)
|
72
75
|
|
73
|
-
|
76
|
+
if settings is None:
|
77
|
+
self.settings = default_settings
|
78
|
+
elif isinstance(settings, dict):
|
79
|
+
self.settings = Settings(**settings)
|
80
|
+
else:
|
81
|
+
self.settings = settings
|
82
|
+
|
83
|
+
self.backend_settings = self.settings.get_backend(self.BACKEND_NAME)
|
74
84
|
|
75
85
|
self.rate_limiter = self._init_rate_limiter()
|
76
86
|
self.active_requests = defaultdict(int)
|
@@ -81,29 +91,29 @@ class BaseChatClient(ABC):
|
|
81
91
|
if endpoint_id:
|
82
92
|
self.endpoint_id = endpoint_id
|
83
93
|
self.random_endpoint = False
|
84
|
-
self.endpoint = settings.get_endpoint(self.endpoint_id)
|
94
|
+
self.endpoint = self.settings.get_endpoint(self.endpoint_id)
|
85
95
|
|
86
96
|
def _init_rate_limiter(self):
|
87
|
-
if not settings.rate_limit:
|
97
|
+
if not self.settings.rate_limit:
|
88
98
|
return None
|
89
|
-
if not settings.rate_limit.enabled:
|
99
|
+
if not self.settings.rate_limit.enabled:
|
90
100
|
return None
|
91
101
|
|
92
|
-
if settings.rate_limit.backend == "memory":
|
102
|
+
if self.settings.rate_limit.backend == "memory":
|
93
103
|
return SyncMemoryRateLimiter()
|
94
|
-
elif settings.rate_limit.backend == "redis":
|
95
|
-
if not settings.rate_limit.redis:
|
104
|
+
elif self.settings.rate_limit.backend == "redis":
|
105
|
+
if not self.settings.rate_limit.redis:
|
96
106
|
raise ValueError("Redis settings must be provided if Redis backend is selected.")
|
97
107
|
return SyncRedisRateLimiter(
|
98
|
-
host=settings.rate_limit.redis.host,
|
99
|
-
port=settings.rate_limit.redis.port,
|
100
|
-
db=settings.rate_limit.redis.db,
|
108
|
+
host=self.settings.rate_limit.redis.host,
|
109
|
+
port=self.settings.rate_limit.redis.port,
|
110
|
+
db=self.settings.rate_limit.redis.db,
|
101
111
|
)
|
102
|
-
elif settings.rate_limit.backend == "diskcache":
|
103
|
-
if not settings.rate_limit.diskcache:
|
112
|
+
elif self.settings.rate_limit.backend == "diskcache":
|
113
|
+
if not self.settings.rate_limit.diskcache:
|
104
114
|
raise ValueError("Diskcache settings must be provided if Diskcache backend is selected.")
|
105
115
|
return SyncDiskCacheRateLimiter(
|
106
|
-
cache_dir=settings.rate_limit.diskcache.cache_dir,
|
116
|
+
cache_dir=self.settings.rate_limit.diskcache.cache_dir,
|
107
117
|
)
|
108
118
|
return None
|
109
119
|
|
@@ -115,8 +125,10 @@ class BaseChatClient(ABC):
|
|
115
125
|
|
116
126
|
# Get rate limit parameters
|
117
127
|
# Priority: parameters in model.endpoints > parameters in endpoint > default parameters
|
118
|
-
rpm = self.rpm or endpoint.rpm or (settings.rate_limit.default_rpm if settings.rate_limit else 60)
|
119
|
-
tpm =
|
128
|
+
rpm = self.rpm or endpoint.rpm or (self.settings.rate_limit.default_rpm if self.settings.rate_limit else 60)
|
129
|
+
tpm = (
|
130
|
+
self.tpm or endpoint.tpm or (self.settings.rate_limit.default_tpm if self.settings.rate_limit else 1000000)
|
131
|
+
)
|
120
132
|
|
121
133
|
while self.rate_limiter:
|
122
134
|
allowed, wait_time = self.rate_limiter.check_limit(key, rpm, tpm, self._estimate_request_tokens(messages))
|
@@ -151,9 +163,9 @@ class BaseChatClient(ABC):
|
|
151
163
|
self.concurrent_requests = endpoint.get("concurrent_requests", None)
|
152
164
|
else:
|
153
165
|
self.endpoint_id = endpoint
|
154
|
-
self.endpoint = settings.get_endpoint(self.endpoint_id)
|
166
|
+
self.endpoint = self.settings.get_endpoint(self.endpoint_id)
|
155
167
|
else:
|
156
|
-
self.endpoint = settings.get_endpoint(self.endpoint_id)
|
168
|
+
self.endpoint = self.settings.get_endpoint(self.endpoint_id)
|
157
169
|
self.set_model_id_by_endpoint_id(self.endpoint_id)
|
158
170
|
elif isinstance(self.endpoint, EndpointSetting):
|
159
171
|
self.endpoint_id = self.endpoint.id
|
@@ -435,6 +447,7 @@ class BaseAsyncChatClient(ABC):
|
|
435
447
|
endpoint_id: str = "",
|
436
448
|
http_client: httpx.AsyncClient | None = None,
|
437
449
|
backend_name: str | None = None,
|
450
|
+
settings: Settings | SettingsDict | None = None, # Use default settings if not provided
|
438
451
|
):
|
439
452
|
self.model = model or self.DEFAULT_MODEL
|
440
453
|
self.stream = stream
|
@@ -447,7 +460,14 @@ class BaseAsyncChatClient(ABC):
|
|
447
460
|
if backend_name is not None:
|
448
461
|
self.BACKEND_NAME = BackendType(backend_name)
|
449
462
|
|
450
|
-
|
463
|
+
if settings is None:
|
464
|
+
self.settings = default_settings
|
465
|
+
elif isinstance(settings, dict):
|
466
|
+
self.settings = Settings(**settings)
|
467
|
+
else:
|
468
|
+
self.settings = settings
|
469
|
+
|
470
|
+
self.backend_settings = self.settings.get_backend(self.BACKEND_NAME)
|
451
471
|
|
452
472
|
self.rate_limiter = self._init_rate_limiter()
|
453
473
|
self.active_requests = defaultdict(int)
|
@@ -458,29 +478,29 @@ class BaseAsyncChatClient(ABC):
|
|
458
478
|
if endpoint_id:
|
459
479
|
self.endpoint_id = endpoint_id
|
460
480
|
self.random_endpoint = False
|
461
|
-
self.endpoint = settings.get_endpoint(self.endpoint_id)
|
481
|
+
self.endpoint = self.settings.get_endpoint(self.endpoint_id)
|
462
482
|
|
463
483
|
def _init_rate_limiter(self):
|
464
|
-
if not settings.rate_limit:
|
484
|
+
if not self.settings.rate_limit:
|
465
485
|
return None
|
466
|
-
if not settings.rate_limit.enabled:
|
486
|
+
if not self.settings.rate_limit.enabled:
|
467
487
|
return None
|
468
488
|
|
469
|
-
if settings.rate_limit.backend == "memory":
|
489
|
+
if self.settings.rate_limit.backend == "memory":
|
470
490
|
return AsyncMemoryRateLimiter()
|
471
|
-
elif settings.rate_limit.backend == "redis":
|
472
|
-
if not settings.rate_limit.redis:
|
491
|
+
elif self.settings.rate_limit.backend == "redis":
|
492
|
+
if not self.settings.rate_limit.redis:
|
473
493
|
raise ValueError("Redis settings must be provided if Redis backend is selected.")
|
474
494
|
return AsyncRedisRateLimiter(
|
475
|
-
host=settings.rate_limit.redis.host,
|
476
|
-
port=settings.rate_limit.redis.port,
|
477
|
-
db=settings.rate_limit.redis.db,
|
495
|
+
host=self.settings.rate_limit.redis.host,
|
496
|
+
port=self.settings.rate_limit.redis.port,
|
497
|
+
db=self.settings.rate_limit.redis.db,
|
478
498
|
)
|
479
|
-
elif settings.rate_limit.backend == "diskcache":
|
480
|
-
if not settings.rate_limit.diskcache:
|
499
|
+
elif self.settings.rate_limit.backend == "diskcache":
|
500
|
+
if not self.settings.rate_limit.diskcache:
|
481
501
|
raise ValueError("Diskcache settings must be provided if Diskcache backend is selected.")
|
482
502
|
return AsyncDiskCacheRateLimiter(
|
483
|
-
cache_dir=settings.rate_limit.diskcache.cache_dir,
|
503
|
+
cache_dir=self.settings.rate_limit.diskcache.cache_dir,
|
484
504
|
)
|
485
505
|
return None
|
486
506
|
|
@@ -492,8 +512,10 @@ class BaseAsyncChatClient(ABC):
|
|
492
512
|
|
493
513
|
# Get rate limit parameters
|
494
514
|
# Priority: parameters in model.endpoints > parameters in endpoint > default parameters
|
495
|
-
rpm = self.rpm or endpoint.rpm or (settings.rate_limit.default_rpm if settings.rate_limit else 60)
|
496
|
-
tpm =
|
515
|
+
rpm = self.rpm or endpoint.rpm or (self.settings.rate_limit.default_rpm if self.settings.rate_limit else 60)
|
516
|
+
tpm = (
|
517
|
+
self.tpm or endpoint.tpm or (self.settings.rate_limit.default_tpm if self.settings.rate_limit else 1000000)
|
518
|
+
)
|
497
519
|
|
498
520
|
while self.rate_limiter:
|
499
521
|
allowed, wait_time = await self.rate_limiter.check_limit(
|
@@ -530,9 +552,9 @@ class BaseAsyncChatClient(ABC):
|
|
530
552
|
self.concurrent_requests = endpoint.get("concurrent_requests", None)
|
531
553
|
else:
|
532
554
|
self.endpoint_id = endpoint
|
533
|
-
self.endpoint = settings.get_endpoint(self.endpoint_id)
|
555
|
+
self.endpoint = self.settings.get_endpoint(self.endpoint_id)
|
534
556
|
else:
|
535
|
-
self.endpoint = settings.get_endpoint(self.endpoint_id)
|
557
|
+
self.endpoint = self.settings.get_endpoint(self.endpoint_id)
|
536
558
|
self.set_model_id_by_endpoint_id(self.endpoint_id)
|
537
559
|
elif isinstance(self.endpoint, EndpointSetting):
|
538
560
|
self.endpoint_id = self.endpoint.id
|
@@ -638,7 +660,7 @@ class BaseAsyncChatClient(ABC):
|
|
638
660
|
extra_query: Query | None = None,
|
639
661
|
extra_body: Body | None = None,
|
640
662
|
timeout: float | httpx.Timeout | None | OpenAINotGiven = NOT_GIVEN,
|
641
|
-
) -> AsyncGenerator[ChatCompletionDeltaMessage,
|
663
|
+
) -> AsyncGenerator[ChatCompletionDeltaMessage, Any]:
|
642
664
|
pass
|
643
665
|
|
644
666
|
@overload
|
@@ -680,7 +702,7 @@ class BaseAsyncChatClient(ABC):
|
|
680
702
|
extra_query: Query | None = None,
|
681
703
|
extra_body: Body | None = None,
|
682
704
|
timeout: float | httpx.Timeout | None | OpenAINotGiven = NOT_GIVEN,
|
683
|
-
) -> ChatCompletionMessage | AsyncGenerator[ChatCompletionDeltaMessage,
|
705
|
+
) -> ChatCompletionMessage | AsyncGenerator[ChatCompletionDeltaMessage, Any]:
|
684
706
|
pass
|
685
707
|
|
686
708
|
@abstractmethod
|
@@ -721,7 +743,7 @@ class BaseAsyncChatClient(ABC):
|
|
721
743
|
extra_query: Query | None = None,
|
722
744
|
extra_body: Body | None = None,
|
723
745
|
timeout: float | httpx.Timeout | None | OpenAINotGiven = NOT_GIVEN,
|
724
|
-
) -> ChatCompletionMessage | AsyncGenerator[ChatCompletionDeltaMessage,
|
746
|
+
) -> ChatCompletionMessage | AsyncGenerator[ChatCompletionDeltaMessage, Any]:
|
725
747
|
pass
|
726
748
|
|
727
749
|
async def create_stream(
|
@@ -760,7 +782,7 @@ class BaseAsyncChatClient(ABC):
|
|
760
782
|
extra_query: Query | None = None,
|
761
783
|
extra_body: Body | None = None,
|
762
784
|
timeout: float | httpx.Timeout | None | OpenAINotGiven = NOT_GIVEN,
|
763
|
-
) -> AsyncGenerator[ChatCompletionDeltaMessage,
|
785
|
+
) -> AsyncGenerator[ChatCompletionDeltaMessage, Any]:
|
764
786
|
return await self.create_completion(
|
765
787
|
messages=messages,
|
766
788
|
model=model,
|
@@ -3,7 +3,19 @@
|
|
3
3
|
import re
|
4
4
|
import json
|
5
5
|
from functools import cached_property
|
6
|
-
from typing import
|
6
|
+
from typing import (
|
7
|
+
Any,
|
8
|
+
Dict,
|
9
|
+
List,
|
10
|
+
TYPE_CHECKING,
|
11
|
+
overload,
|
12
|
+
Generator,
|
13
|
+
AsyncGenerator,
|
14
|
+
Union,
|
15
|
+
Literal,
|
16
|
+
Iterable,
|
17
|
+
Optional,
|
18
|
+
)
|
7
19
|
|
8
20
|
import httpx
|
9
21
|
from openai import OpenAI, AsyncOpenAI, AzureOpenAI, AsyncAzureOpenAI
|
@@ -39,6 +51,10 @@ from ..types.llm_parameters import (
|
|
39
51
|
ChatCompletionDeltaMessage,
|
40
52
|
)
|
41
53
|
|
54
|
+
if TYPE_CHECKING:
|
55
|
+
from ..settings import Settings
|
56
|
+
from ..types.settings import SettingsDict
|
57
|
+
|
42
58
|
|
43
59
|
class OpenAICompatibleChatClient(BaseChatClient):
|
44
60
|
DEFAULT_MODEL: str = ""
|
@@ -54,6 +70,7 @@ class OpenAICompatibleChatClient(BaseChatClient):
|
|
54
70
|
endpoint_id: str = "",
|
55
71
|
http_client: httpx.Client | None = None,
|
56
72
|
backend_name: str | None = None,
|
73
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
57
74
|
):
|
58
75
|
super().__init__(
|
59
76
|
model,
|
@@ -64,6 +81,7 @@ class OpenAICompatibleChatClient(BaseChatClient):
|
|
64
81
|
endpoint_id,
|
65
82
|
http_client,
|
66
83
|
backend_name,
|
84
|
+
settings,
|
67
85
|
)
|
68
86
|
self.model_id = None
|
69
87
|
self.endpoint = None
|
@@ -527,6 +545,7 @@ class AsyncOpenAICompatibleChatClient(BaseAsyncChatClient):
|
|
527
545
|
endpoint_id: str = "",
|
528
546
|
http_client: httpx.AsyncClient | None = None,
|
529
547
|
backend_name: str | None = None,
|
548
|
+
settings: "Settings | SettingsDict | None" = None, # Use default settings if not provided
|
530
549
|
):
|
531
550
|
super().__init__(
|
532
551
|
model,
|
@@ -537,6 +556,7 @@ class AsyncOpenAICompatibleChatClient(BaseAsyncChatClient):
|
|
537
556
|
endpoint_id,
|
538
557
|
http_client,
|
539
558
|
backend_name,
|
559
|
+
settings,
|
540
560
|
)
|
541
561
|
self.model_id = None
|
542
562
|
self.endpoint = None
|
@@ -0,0 +1,129 @@
|
|
1
|
+
from .defaults import (
|
2
|
+
CONTEXT_LENGTH_CONTROL,
|
3
|
+
ENDPOINT_CONCURRENT_REQUESTS,
|
4
|
+
ENDPOINT_RPM,
|
5
|
+
ENDPOINT_TPM,
|
6
|
+
MODEL_CONTEXT_LENGTH,
|
7
|
+
MOONSHOT_DEFAULT_MODEL,
|
8
|
+
MOONSHOT_MODELS,
|
9
|
+
DEEPSEEK_DEFAULT_MODEL,
|
10
|
+
DEEPSEEK_MODELS,
|
11
|
+
BAICHUAN_DEFAULT_MODEL,
|
12
|
+
BAICHUAN_MODELS,
|
13
|
+
GROQ_DEFAULT_MODEL,
|
14
|
+
GROQ_MODELS,
|
15
|
+
QWEN_DEFAULT_MODEL,
|
16
|
+
QWEN_MODELS,
|
17
|
+
YI_DEFAULT_MODEL,
|
18
|
+
YI_MODELS,
|
19
|
+
ZHIPUAI_DEFAULT_MODEL,
|
20
|
+
ZHIPUAI_MODELS,
|
21
|
+
MISTRAL_DEFAULT_MODEL,
|
22
|
+
MISTRAL_MODELS,
|
23
|
+
OPENAI_DEFAULT_MODEL,
|
24
|
+
OPENAI_MODELS,
|
25
|
+
ANTHROPIC_DEFAULT_MODEL,
|
26
|
+
ANTHROPIC_MODELS,
|
27
|
+
MINIMAX_DEFAULT_MODEL,
|
28
|
+
MINIMAX_MODELS,
|
29
|
+
GEMINI_DEFAULT_MODEL,
|
30
|
+
GEMINI_MODELS,
|
31
|
+
ERNIE_DEFAULT_MODEL,
|
32
|
+
ERNIE_MODELS,
|
33
|
+
STEPFUN_DEFAULT_MODEL,
|
34
|
+
STEPFUN_MODELS,
|
35
|
+
XAI_DEFAULT_MODEL,
|
36
|
+
XAI_MODELS,
|
37
|
+
)
|
38
|
+
from .enums import BackendType, LLMType, ContextLengthControlType
|
39
|
+
from .exception import APIStatusError
|
40
|
+
from .llm_parameters import (
|
41
|
+
EndpointSetting,
|
42
|
+
ModelSetting,
|
43
|
+
BackendSettings,
|
44
|
+
Usage,
|
45
|
+
ChatCompletionMessage,
|
46
|
+
ChatCompletionDeltaMessage,
|
47
|
+
NotGiven,
|
48
|
+
NOT_GIVEN,
|
49
|
+
OpenAIToolParam,
|
50
|
+
ToolParam,
|
51
|
+
Tools,
|
52
|
+
ToolChoice,
|
53
|
+
)
|
54
|
+
from .settings import (
|
55
|
+
RedisConfigDict,
|
56
|
+
DiskCacheConfigDict,
|
57
|
+
RateLimitConfigDict,
|
58
|
+
ServerDict,
|
59
|
+
EndpointOptionDict,
|
60
|
+
ModelConfigDict,
|
61
|
+
BackendSettingsDict,
|
62
|
+
EndpointSettingDict,
|
63
|
+
SettingsDict,
|
64
|
+
)
|
65
|
+
|
66
|
+
|
67
|
+
__all__ = [
|
68
|
+
"CONTEXT_LENGTH_CONTROL",
|
69
|
+
"ENDPOINT_CONCURRENT_REQUESTS",
|
70
|
+
"ENDPOINT_RPM",
|
71
|
+
"ENDPOINT_TPM",
|
72
|
+
"MODEL_CONTEXT_LENGTH",
|
73
|
+
"MOONSHOT_DEFAULT_MODEL",
|
74
|
+
"MOONSHOT_MODELS",
|
75
|
+
"DEEPSEEK_DEFAULT_MODEL",
|
76
|
+
"DEEPSEEK_MODELS",
|
77
|
+
"BAICHUAN_DEFAULT_MODEL",
|
78
|
+
"BAICHUAN_MODELS",
|
79
|
+
"GROQ_DEFAULT_MODEL",
|
80
|
+
"GROQ_MODELS",
|
81
|
+
"QWEN_DEFAULT_MODEL",
|
82
|
+
"QWEN_MODELS",
|
83
|
+
"YI_DEFAULT_MODEL",
|
84
|
+
"YI_MODELS",
|
85
|
+
"ZHIPUAI_DEFAULT_MODEL",
|
86
|
+
"ZHIPUAI_MODELS",
|
87
|
+
"MISTRAL_DEFAULT_MODEL",
|
88
|
+
"MISTRAL_MODELS",
|
89
|
+
"OPENAI_DEFAULT_MODEL",
|
90
|
+
"OPENAI_MODELS",
|
91
|
+
"ANTHROPIC_DEFAULT_MODEL",
|
92
|
+
"ANTHROPIC_MODELS",
|
93
|
+
"MINIMAX_DEFAULT_MODEL",
|
94
|
+
"MINIMAX_MODELS",
|
95
|
+
"GEMINI_DEFAULT_MODEL",
|
96
|
+
"GEMINI_MODELS",
|
97
|
+
"ERNIE_DEFAULT_MODEL",
|
98
|
+
"ERNIE_MODELS",
|
99
|
+
"STEPFUN_DEFAULT_MODEL",
|
100
|
+
"STEPFUN_MODELS",
|
101
|
+
"XAI_DEFAULT_MODEL",
|
102
|
+
"XAI_MODELS",
|
103
|
+
"BackendType",
|
104
|
+
"LLMType",
|
105
|
+
"ContextLengthControlType",
|
106
|
+
"APIStatusError",
|
107
|
+
"EndpointOptionDict",
|
108
|
+
"EndpointSetting",
|
109
|
+
"ModelSetting",
|
110
|
+
"BackendSettings",
|
111
|
+
"Usage",
|
112
|
+
"ChatCompletionMessage",
|
113
|
+
"ChatCompletionDeltaMessage",
|
114
|
+
"NotGiven",
|
115
|
+
"NOT_GIVEN",
|
116
|
+
"OpenAIToolParam",
|
117
|
+
"ToolParam",
|
118
|
+
"Tools",
|
119
|
+
"ToolChoice",
|
120
|
+
"RedisConfigDict",
|
121
|
+
"DiskCacheConfigDict",
|
122
|
+
"RateLimitConfigDict",
|
123
|
+
"ServerDict",
|
124
|
+
"EndpointOptionDict",
|
125
|
+
"ModelConfigDict",
|
126
|
+
"BackendSettingsDict",
|
127
|
+
"EndpointSettingDict",
|
128
|
+
"SettingsDict",
|
129
|
+
]
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# @Author: Bi Ying
|
2
2
|
# @Date: 2024-07-26 23:48:04
|
3
3
|
from typing import List, Dict, Optional, Union, Iterable
|
4
|
-
from typing_extensions import TypedDict, NotRequired # Required by pydantic under Python < 3.12
|
5
4
|
|
6
5
|
from pydantic import BaseModel, Field
|
7
6
|
|
@@ -22,14 +21,7 @@ from openai.types.chat.chat_completion_stream_options_param import ChatCompletio
|
|
22
21
|
from openai.types.chat.chat_completion_tool_choice_option_param import ChatCompletionToolChoiceOptionParam
|
23
22
|
|
24
23
|
from . import defaults as defs
|
25
|
-
|
26
|
-
|
27
|
-
class EndpointOptionDict(TypedDict):
|
28
|
-
endpoint_id: str
|
29
|
-
model_id: str
|
30
|
-
rpm: NotRequired[int]
|
31
|
-
tpm: NotRequired[int]
|
32
|
-
concurrent_requests: NotRequired[int]
|
24
|
+
from .settings import EndpointOptionDict
|
33
25
|
|
34
26
|
|
35
27
|
class EndpointSetting(BaseModel):
|
@@ -0,0 +1,105 @@
|
|
1
|
+
from typing import Dict, List, Optional, Union, Literal
|
2
|
+
from typing_extensions import TypedDict, NotRequired # Required by pydantic under Python < 3.12
|
3
|
+
|
4
|
+
|
5
|
+
class RedisConfigDict(TypedDict):
|
6
|
+
"""TypedDict representing the RedisConfig structure."""
|
7
|
+
|
8
|
+
host: str
|
9
|
+
port: int
|
10
|
+
db: int
|
11
|
+
|
12
|
+
|
13
|
+
class DiskCacheConfigDict(TypedDict):
|
14
|
+
"""TypedDict representing the DiskCacheConfig structure."""
|
15
|
+
|
16
|
+
cache_dir: str
|
17
|
+
|
18
|
+
|
19
|
+
class RateLimitConfigDict(TypedDict):
|
20
|
+
"""TypedDict representing the RateLimitConfig structure."""
|
21
|
+
|
22
|
+
enabled: bool
|
23
|
+
backend: Literal["memory", "redis", "diskcache"]
|
24
|
+
redis: Optional[RedisConfigDict]
|
25
|
+
diskcache: Optional[DiskCacheConfigDict]
|
26
|
+
default_rpm: int
|
27
|
+
default_tpm: int
|
28
|
+
|
29
|
+
|
30
|
+
class ServerDict(TypedDict):
|
31
|
+
"""TypedDict representing the Server structure."""
|
32
|
+
|
33
|
+
host: str
|
34
|
+
port: int
|
35
|
+
url: Optional[str]
|
36
|
+
|
37
|
+
|
38
|
+
class EndpointOptionDict(TypedDict):
|
39
|
+
"""TypedDict representing the model endpoint option structure."""
|
40
|
+
|
41
|
+
endpoint_id: str
|
42
|
+
model_id: str
|
43
|
+
rpm: NotRequired[int]
|
44
|
+
tpm: NotRequired[int]
|
45
|
+
concurrent_requests: NotRequired[int]
|
46
|
+
|
47
|
+
|
48
|
+
class ModelConfigDict(TypedDict):
|
49
|
+
"""TypedDict representing the model configuration structure."""
|
50
|
+
|
51
|
+
id: str
|
52
|
+
endpoints: List[Union[str, EndpointOptionDict]]
|
53
|
+
function_call_available: bool
|
54
|
+
response_format_available: bool
|
55
|
+
native_multimodal: bool
|
56
|
+
context_length: int
|
57
|
+
max_output_tokens: Optional[int]
|
58
|
+
|
59
|
+
|
60
|
+
class BackendSettingsDict(TypedDict):
|
61
|
+
"""TypedDict representing the BackendSettings structure."""
|
62
|
+
|
63
|
+
models: Dict[str, ModelConfigDict]
|
64
|
+
|
65
|
+
|
66
|
+
class EndpointSettingDict(TypedDict):
|
67
|
+
"""TypedDict representing the EndpointSetting structure."""
|
68
|
+
|
69
|
+
id: str
|
70
|
+
api_base: Optional[str]
|
71
|
+
api_key: str
|
72
|
+
region: Optional[str]
|
73
|
+
api_schema_type: Optional[str]
|
74
|
+
credentials: Optional[dict]
|
75
|
+
is_azure: Optional[bool]
|
76
|
+
is_vertex: Optional[bool]
|
77
|
+
is_bedrock: Optional[bool]
|
78
|
+
rpm: Optional[int]
|
79
|
+
tpm: Optional[int]
|
80
|
+
concurrent_requests: Optional[int]
|
81
|
+
proxy: Optional[str]
|
82
|
+
|
83
|
+
|
84
|
+
class SettingsDict(TypedDict):
|
85
|
+
"""TypedDict representing the expected structure of the settings dictionary."""
|
86
|
+
|
87
|
+
endpoints: List[EndpointSettingDict]
|
88
|
+
token_server: Optional[ServerDict]
|
89
|
+
rate_limit: Optional[RateLimitConfigDict]
|
90
|
+
# 各模型后端配置
|
91
|
+
anthropic: BackendSettingsDict
|
92
|
+
deepseek: BackendSettingsDict
|
93
|
+
gemini: BackendSettingsDict
|
94
|
+
groq: BackendSettingsDict
|
95
|
+
local: BackendSettingsDict
|
96
|
+
minimax: BackendSettingsDict
|
97
|
+
mistral: BackendSettingsDict
|
98
|
+
moonshot: BackendSettingsDict
|
99
|
+
openai: BackendSettingsDict
|
100
|
+
qwen: BackendSettingsDict
|
101
|
+
yi: BackendSettingsDict
|
102
|
+
zhipuai: BackendSettingsDict
|
103
|
+
baichuan: BackendSettingsDict
|
104
|
+
stepfun: BackendSettingsDict
|
105
|
+
xai: BackendSettingsDict
|
@@ -1,15 +1,15 @@
|
|
1
|
-
vectorvein-0.2.
|
2
|
-
vectorvein-0.2.
|
3
|
-
vectorvein-0.2.
|
1
|
+
vectorvein-0.2.11.dist-info/METADATA,sha256=gSQgVDuAhXDNgYkTNflojyYrSZudUpV76aDOSrNsb_g,4414
|
2
|
+
vectorvein-0.2.11.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
|
3
|
+
vectorvein-0.2.11.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
|
4
4
|
vectorvein/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
vectorvein/api/__init__.py,sha256=lfY-XA46fgD2iIZTU0VYP8i07AwA03Egj4Qua0vUKrQ,738
|
6
6
|
vectorvein/api/client.py,sha256=xF-leKDQzVyyy9FnIRaz0k4eElYW1XbbzeRLcpnyk90,33047
|
7
7
|
vectorvein/api/exceptions.py,sha256=uS_PAdx0ksC0r3dgfSGWdbLMZm4qdLeWSSqCv1g3_Gc,772
|
8
8
|
vectorvein/api/models.py,sha256=xtPWMsB0yIJI7i-gY4B6MtvXv0ZIXnoeKspmeInH6fU,1449
|
9
|
-
vectorvein/chat_clients/__init__.py,sha256=
|
10
|
-
vectorvein/chat_clients/anthropic_client.py,sha256=
|
9
|
+
vectorvein/chat_clients/__init__.py,sha256=d3qraTPO_J5K9FJIqsLVCfrjev6fkm7y48g_umPaqW0,22620
|
10
|
+
vectorvein/chat_clients/anthropic_client.py,sha256=KFOyUR-Vg9Ux75KYtqgOJz2B3cSYXKQoqaaapxqZfRs,58554
|
11
11
|
vectorvein/chat_clients/baichuan_client.py,sha256=CVMvpgjdrZGv0BWnTOBD-f2ufZ3wq3496wqukumsAr4,526
|
12
|
-
vectorvein/chat_clients/base_client.py,sha256=
|
12
|
+
vectorvein/chat_clients/base_client.py,sha256=p7s-G4Wh9MSpDKEfG8wuFAeWy5DGvj5Go31hqrpQPhM,38817
|
13
13
|
vectorvein/chat_clients/deepseek_client.py,sha256=3qWu01NlJAP2N-Ff62d5-CZXZitlizE1fzb20LNetig,526
|
14
14
|
vectorvein/chat_clients/gemini_client.py,sha256=ufovIZrmAE3RLEe8h5WXombf7bARAZxnkj6ydNK2FQM,475
|
15
15
|
vectorvein/chat_clients/groq_client.py,sha256=Uow4pgdmFi93ZQSoOol2-0PhhqkW-S0XuSldvppz5U4,498
|
@@ -18,7 +18,7 @@ vectorvein/chat_clients/minimax_client.py,sha256=YOILWcsHsN5tihLTMbKJIyJr9TJREMI
|
|
18
18
|
vectorvein/chat_clients/mistral_client.py,sha256=1aKSylzBDaLYcFnaBIL4-sXSzWmXfBeON9Q0rq-ziWw,534
|
19
19
|
vectorvein/chat_clients/moonshot_client.py,sha256=gbu-6nGxx8uM_U2WlI4Wus881rFRotzHtMSoYOcruGU,526
|
20
20
|
vectorvein/chat_clients/openai_client.py,sha256=Nz6tV45pWcsOupxjnsRsGTicbQNJWIZyxuJoJ5DGMpg,527
|
21
|
-
vectorvein/chat_clients/openai_compatible_client.py,sha256=
|
21
|
+
vectorvein/chat_clients/openai_compatible_client.py,sha256=9ldl6TPinXLLH1kPtP-pVYO2D-VBy_s1Gf-XNNdd3CY,48498
|
22
22
|
vectorvein/chat_clients/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
23
|
vectorvein/chat_clients/qwen_client.py,sha256=-ryh-m9PgsO0fc4ulcCmPTy1155J8YUy15uPoJQOHA0,513
|
24
24
|
vectorvein/chat_clients/stepfun_client.py,sha256=zsD2W5ahmR4DD9cqQTXmJr3txrGuvxbRWhFlRdwNijI,519
|
@@ -30,11 +30,13 @@ vectorvein/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
30
|
vectorvein/server/token_server.py,sha256=36F9PKSNOX8ZtYBXY_l-76GQTpUSmQ2Y8EMy1H7wtdQ,1353
|
31
31
|
vectorvein/settings/__init__.py,sha256=ecGyrE_6YfX9z6Igb1rDCu1Q-qMTcVozWF3WEl_hiKA,4871
|
32
32
|
vectorvein/settings/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
|
+
vectorvein/types/__init__.py,sha256=ie7H3rTMq_Fg836vOmy96m3wzjDkqfekQecPXXEDbcM,3005
|
33
34
|
vectorvein/types/defaults.py,sha256=VrkQoyHqC_eK3g1b6egpPYLLo0ltwMHqxDscCX4y-N0,27417
|
34
35
|
vectorvein/types/enums.py,sha256=7KTJSVtQueImmbr1fSwv3rQVtc0RyMWXJmoE2tDOaso,1667
|
35
36
|
vectorvein/types/exception.py,sha256=gnW4GnJ76jND6UGnodk9xmqkcbeS7Cz2rvncA2HpD5E,69
|
36
|
-
vectorvein/types/llm_parameters.py,sha256=
|
37
|
+
vectorvein/types/llm_parameters.py,sha256=8ot02N3PS794bJTc0jlPk_XoXDGWQDTxyyF-1NmqVn0,6103
|
37
38
|
vectorvein/types/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
39
|
+
vectorvein/types/settings.py,sha256=hzLtE7ryyIIGxcExAsqh9sMNKP8-r4WczhYWIBNm-uM,2880
|
38
40
|
vectorvein/utilities/media_processing.py,sha256=7KtbLFzOYIn1e9QTN9G6C76NH8CBlV9kfAgiRKEIeXY,6263
|
39
41
|
vectorvein/utilities/rate_limiter.py,sha256=dwolIUVw2wP83Odqpx0AAaE77de1GzxkYDGH4tM_u_4,10300
|
40
42
|
vectorvein/utilities/retry.py,sha256=6KFS9R2HdhqM3_9jkjD4F36ZSpEx2YNFGOVlpOsUetM,2208
|
@@ -59,4 +61,4 @@ vectorvein/workflow/nodes/vector_db.py,sha256=t6I17q6iR3yQreiDHpRrksMdWDPIvgqJs0
|
|
59
61
|
vectorvein/workflow/nodes/video_generation.py,sha256=qmdg-t_idpxq1veukd-jv_ChICMOoInKxprV9Z4Vi2w,4118
|
60
62
|
vectorvein/workflow/nodes/web_crawlers.py,sha256=LsqomfXfqrXfHJDO1cl0Ox48f4St7X_SL12DSbAMSOw,5415
|
61
63
|
vectorvein/workflow/utils/json_to_code.py,sha256=F7dhDy8kGc8ndOeihGLRLGFGlquoxVlb02ENtxnQ0C8,5914
|
62
|
-
vectorvein-0.2.
|
64
|
+
vectorvein-0.2.11.dist-info/RECORD,,
|
File without changes
|
File without changes
|