model-library 0.1.5__py3-none-any.whl → 0.1.7__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.
- model_library/base/base.py +114 -12
- model_library/base/delegate_only.py +15 -1
- model_library/base/input.py +10 -7
- model_library/base/output.py +5 -0
- model_library/base/utils.py +21 -7
- model_library/config/all_models.json +92 -1
- model_library/config/fireworks_models.yaml +2 -0
- model_library/config/minimax_models.yaml +18 -0
- model_library/config/zai_models.yaml +14 -0
- model_library/exceptions.py +11 -0
- model_library/logging.py +6 -2
- model_library/providers/ai21labs.py +20 -6
- model_library/providers/amazon.py +72 -48
- model_library/providers/anthropic.py +138 -85
- model_library/providers/google/batch.py +3 -3
- model_library/providers/google/google.py +92 -46
- model_library/providers/minimax.py +29 -10
- model_library/providers/mistral.py +42 -26
- model_library/providers/openai.py +131 -77
- model_library/providers/vals.py +6 -3
- model_library/providers/xai.py +125 -113
- model_library/register_models.py +5 -3
- model_library/utils.py +0 -35
- {model_library-0.1.5.dist-info → model_library-0.1.7.dist-info}/METADATA +3 -3
- {model_library-0.1.5.dist-info → model_library-0.1.7.dist-info}/RECORD +28 -28
- {model_library-0.1.5.dist-info → model_library-0.1.7.dist-info}/WHEEL +0 -0
- {model_library-0.1.5.dist-info → model_library-0.1.7.dist-info}/licenses/LICENSE +0 -0
- {model_library-0.1.5.dist-info → model_library-0.1.7.dist-info}/top_level.txt +0 -0
model_library/providers/xai.py
CHANGED
|
@@ -1,31 +1,30 @@
|
|
|
1
|
-
import asyncio
|
|
2
1
|
import io
|
|
3
|
-
|
|
2
|
+
import logging
|
|
3
|
+
from typing import Any, Literal, Sequence
|
|
4
4
|
|
|
5
5
|
import grpc
|
|
6
6
|
from typing_extensions import override
|
|
7
|
-
from xai_sdk import AsyncClient
|
|
8
|
-
from xai_sdk.aio.chat import Chat
|
|
7
|
+
from xai_sdk import AsyncClient
|
|
8
|
+
from xai_sdk.aio.chat import Chat
|
|
9
9
|
from xai_sdk.chat import Content, Response, system, tool_result, user
|
|
10
10
|
from xai_sdk.chat import image as xai_image
|
|
11
11
|
from xai_sdk.chat import tool as xai_tool
|
|
12
12
|
from xai_sdk.proto.v6.chat_pb2 import Message, Tool
|
|
13
|
-
from xai_sdk.sync.chat import Chat as SyncChat
|
|
14
13
|
|
|
15
14
|
from model_library import model_library_settings
|
|
16
15
|
from model_library.base import (
|
|
17
16
|
LLM,
|
|
17
|
+
FileBase,
|
|
18
18
|
FileInput,
|
|
19
19
|
FileWithBase64,
|
|
20
20
|
FileWithId,
|
|
21
|
-
FileWithUrl,
|
|
22
21
|
InputItem,
|
|
23
22
|
LLMConfig,
|
|
24
|
-
ProviderConfig,
|
|
25
23
|
QueryResult,
|
|
26
24
|
QueryResultCost,
|
|
27
25
|
QueryResultMetadata,
|
|
28
|
-
|
|
26
|
+
RawInput,
|
|
27
|
+
RawResponse,
|
|
29
28
|
TextInput,
|
|
30
29
|
ToolBody,
|
|
31
30
|
ToolCall,
|
|
@@ -36,36 +35,25 @@ from model_library.exceptions import (
|
|
|
36
35
|
BadInputError,
|
|
37
36
|
MaxOutputTokensExceededError,
|
|
38
37
|
ModelNoOutputError,
|
|
38
|
+
NoMatchingToolCallError,
|
|
39
39
|
RateLimitException,
|
|
40
40
|
)
|
|
41
41
|
from model_library.providers.openai import OpenAIModel
|
|
42
42
|
from model_library.register_models import register_provider
|
|
43
43
|
from model_library.utils import create_openai_client_with_defaults
|
|
44
44
|
|
|
45
|
-
Chat = AsyncChat | SyncChat
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
class XAIConfig(ProviderConfig):
|
|
49
|
-
sync_client: bool = False
|
|
50
|
-
|
|
51
45
|
|
|
52
46
|
@register_provider("grok")
|
|
53
47
|
class XAIModel(LLM):
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
_client: AsyncClient | Client | None = None
|
|
48
|
+
_client: AsyncClient | None = None
|
|
57
49
|
|
|
58
50
|
@override
|
|
59
|
-
def get_client(self) -> AsyncClient
|
|
60
|
-
if
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
api_key=model_library_settings.XAI_API_KEY,
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
return self._client
|
|
51
|
+
def get_client(self) -> AsyncClient:
|
|
52
|
+
if not XAIModel._client:
|
|
53
|
+
XAIModel._client = AsyncClient(
|
|
54
|
+
api_key=model_library_settings.XAI_API_KEY,
|
|
55
|
+
)
|
|
56
|
+
return XAIModel._client
|
|
69
57
|
|
|
70
58
|
@override
|
|
71
59
|
def __init__(
|
|
@@ -78,7 +66,7 @@ class XAIModel(LLM):
|
|
|
78
66
|
super().__init__(model_name, provider, config=config)
|
|
79
67
|
|
|
80
68
|
# https://docs.x.ai/docs/guides/migration
|
|
81
|
-
self.delegate
|
|
69
|
+
self.delegate = (
|
|
82
70
|
None
|
|
83
71
|
if self.native
|
|
84
72
|
else OpenAIModel(
|
|
@@ -97,54 +85,68 @@ class XAIModel(LLM):
|
|
|
97
85
|
)
|
|
98
86
|
)
|
|
99
87
|
|
|
88
|
+
async def get_tool_call_ids(self, input: Sequence[InputItem]) -> list[str]:
|
|
89
|
+
raw_responses = [x for x in input if isinstance(x, RawResponse)]
|
|
90
|
+
tool_call_ids: list[str] = []
|
|
91
|
+
|
|
92
|
+
calls = [
|
|
93
|
+
y
|
|
94
|
+
for x in raw_responses
|
|
95
|
+
if isinstance(x.response, Response) and x.response.tool_calls
|
|
96
|
+
for y in x.response.tool_calls
|
|
97
|
+
]
|
|
98
|
+
tool_call_ids.extend([x.id for x in calls if x.id])
|
|
99
|
+
return tool_call_ids
|
|
100
|
+
|
|
100
101
|
@override
|
|
101
102
|
async def parse_input(
|
|
102
103
|
self,
|
|
103
104
|
input: Sequence[InputItem],
|
|
104
105
|
**kwargs: Any,
|
|
105
|
-
) ->
|
|
106
|
-
|
|
106
|
+
) -> list[Message]:
|
|
107
|
+
new_input: list[Message] = []
|
|
108
|
+
|
|
107
109
|
content_user: list[Any] = []
|
|
110
|
+
|
|
111
|
+
def flush_content_user():
|
|
112
|
+
if content_user:
|
|
113
|
+
new_input.append(user(*content_user))
|
|
114
|
+
content_user.clear()
|
|
115
|
+
|
|
116
|
+
tool_call_ids = await self.get_tool_call_ids(input)
|
|
117
|
+
|
|
108
118
|
for item in input:
|
|
119
|
+
if isinstance(item, TextInput):
|
|
120
|
+
content_user.append(item.text)
|
|
121
|
+
continue
|
|
122
|
+
|
|
123
|
+
if isinstance(item, FileBase):
|
|
124
|
+
match item.type:
|
|
125
|
+
case "image":
|
|
126
|
+
parsed = await self.parse_image(item)
|
|
127
|
+
case "file":
|
|
128
|
+
parsed = await self.parse_file(item)
|
|
129
|
+
content_user.append(parsed)
|
|
130
|
+
continue
|
|
131
|
+
|
|
132
|
+
# non content user item
|
|
133
|
+
flush_content_user()
|
|
134
|
+
|
|
109
135
|
match item:
|
|
110
|
-
case
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if not (
|
|
125
|
-
isinstance(x, Response)
|
|
126
|
-
and x.finish_reason == "REASON_TOOL_CALLS"
|
|
127
|
-
and x.tool_calls
|
|
128
|
-
and any(
|
|
129
|
-
tool
|
|
130
|
-
for tool in x.tool_calls
|
|
131
|
-
if tool.id == item.tool_call.id
|
|
132
|
-
)
|
|
133
|
-
for x in chat.messages
|
|
134
|
-
):
|
|
135
|
-
raise Exception(
|
|
136
|
-
"Tool call result provided with no matching tool call"
|
|
137
|
-
)
|
|
138
|
-
chat.append(tool_result(item.result))
|
|
139
|
-
case dict(): # RawInputItem
|
|
140
|
-
item = cast(RawInputItem, item)
|
|
141
|
-
chat.append(item) # pyright: ignore[reportArgumentType]
|
|
142
|
-
case _: # RawResponse
|
|
143
|
-
item = cast(Response, item)
|
|
144
|
-
chat.append(item)
|
|
145
|
-
|
|
146
|
-
if content_user:
|
|
147
|
-
chat.append(user(*content_user))
|
|
136
|
+
case ToolResult():
|
|
137
|
+
if item.tool_call.id not in tool_call_ids:
|
|
138
|
+
raise NoMatchingToolCallError()
|
|
139
|
+
|
|
140
|
+
new_input.append(tool_result(item.result))
|
|
141
|
+
case RawResponse():
|
|
142
|
+
new_input.append(item.response)
|
|
143
|
+
case RawInput():
|
|
144
|
+
new_input.append(item.input)
|
|
145
|
+
|
|
146
|
+
# in case content user item is the last item
|
|
147
|
+
flush_content_user()
|
|
148
|
+
|
|
149
|
+
return new_input
|
|
148
150
|
|
|
149
151
|
@override
|
|
150
152
|
async def parse_image(
|
|
@@ -199,40 +201,10 @@ class XAIModel(LLM):
|
|
|
199
201
|
) -> FileWithId:
|
|
200
202
|
raise NotImplementedError()
|
|
201
203
|
|
|
202
|
-
def fetch_response_sync(
|
|
203
|
-
self,
|
|
204
|
-
chat: SyncChat,
|
|
205
|
-
) -> Response | None:
|
|
206
|
-
latest_response = None
|
|
207
|
-
for response, _ in chat.stream():
|
|
208
|
-
latest_response = response
|
|
209
|
-
|
|
210
|
-
return latest_response
|
|
211
|
-
|
|
212
|
-
async def fetch_response_async(
|
|
213
|
-
self,
|
|
214
|
-
chat: AsyncChat,
|
|
215
|
-
) -> Response | None:
|
|
216
|
-
latest_response = None
|
|
217
|
-
async for response, _ in chat.stream():
|
|
218
|
-
latest_response = response
|
|
219
|
-
|
|
220
|
-
return latest_response
|
|
221
|
-
|
|
222
204
|
@override
|
|
223
|
-
async def
|
|
224
|
-
self,
|
|
225
|
-
|
|
226
|
-
*,
|
|
227
|
-
tools: list[ToolDefinition],
|
|
228
|
-
**kwargs: object,
|
|
229
|
-
) -> QueryResult:
|
|
230
|
-
if self.reasoning_effort:
|
|
231
|
-
kwargs["reasoning_effort"] = self.reasoning_effort
|
|
232
|
-
|
|
233
|
-
if self.delegate:
|
|
234
|
-
return await self.delegate_query(input, tools=tools, **kwargs)
|
|
235
|
-
|
|
205
|
+
async def build_body(
|
|
206
|
+
self, input: Sequence[InputItem], *, tools: list[ToolDefinition], **kwargs: Any
|
|
207
|
+
) -> dict[str, Any]:
|
|
236
208
|
messages: Sequence[Message] = []
|
|
237
209
|
if "system_prompt" in kwargs:
|
|
238
210
|
messages.append(system(str(kwargs.pop("system_prompt"))))
|
|
@@ -250,20 +222,43 @@ class XAIModel(LLM):
|
|
|
250
222
|
if self.top_p is not None:
|
|
251
223
|
body["top_p"] = self.top_p
|
|
252
224
|
|
|
225
|
+
if self.reasoning_effort:
|
|
226
|
+
body["reasoning_effort"] = self.reasoning_effort
|
|
227
|
+
|
|
253
228
|
body.update(kwargs)
|
|
254
229
|
|
|
230
|
+
# use Chat object to parse raw Response and other objects into the correct formats
|
|
231
|
+
# see xai's chat.py `class BaseChat` -> `def append`
|
|
232
|
+
chat: Chat = self.get_client().chat.create("dummy")
|
|
233
|
+
parsed_input = await self.parse_input(input)
|
|
234
|
+
for message in parsed_input:
|
|
235
|
+
chat.append(message)
|
|
236
|
+
body["messages"].extend(chat.messages)
|
|
237
|
+
|
|
238
|
+
return body
|
|
239
|
+
|
|
240
|
+
@override
|
|
241
|
+
async def _query_impl(
|
|
242
|
+
self,
|
|
243
|
+
input: Sequence[InputItem],
|
|
244
|
+
*,
|
|
245
|
+
tools: list[ToolDefinition],
|
|
246
|
+
query_logger: logging.Logger,
|
|
247
|
+
**kwargs: object,
|
|
248
|
+
) -> QueryResult:
|
|
249
|
+
if self.delegate:
|
|
250
|
+
return await self.delegate_query(
|
|
251
|
+
input, tools=tools, query_logger=query_logger, **kwargs
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
body = await self.build_body(input, tools=tools, **kwargs)
|
|
255
|
+
|
|
255
256
|
try:
|
|
256
|
-
chat: Chat = self.get_client().chat.create(**body)
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
if self.provider_config.sync_client:
|
|
262
|
-
latest_response = await asyncio.to_thread(
|
|
263
|
-
self.fetch_response_sync, cast(SyncChat, chat)
|
|
264
|
-
)
|
|
265
|
-
else:
|
|
266
|
-
latest_response = await self.fetch_response_async(cast(AsyncChat, chat))
|
|
257
|
+
chat: Chat = self.get_client().chat.create(**body)
|
|
258
|
+
|
|
259
|
+
latest_response: Response | None = None
|
|
260
|
+
async for response, _ in chat.stream():
|
|
261
|
+
latest_response = response
|
|
267
262
|
|
|
268
263
|
if not latest_response:
|
|
269
264
|
raise ModelNoOutputError("Model failed to produce a response")
|
|
@@ -303,8 +298,25 @@ class XAIModel(LLM):
|
|
|
303
298
|
cache_read_tokens=latest_response.usage.cached_prompt_text_tokens,
|
|
304
299
|
),
|
|
305
300
|
tool_calls=tool_calls,
|
|
306
|
-
history=[*input, latest_response],
|
|
301
|
+
history=[*input, RawResponse(response=latest_response)],
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
@override
|
|
305
|
+
async def count_tokens(
|
|
306
|
+
self,
|
|
307
|
+
input: Sequence[InputItem],
|
|
308
|
+
*,
|
|
309
|
+
history: Sequence[InputItem] = [],
|
|
310
|
+
tools: list[ToolDefinition] = [],
|
|
311
|
+
**kwargs: object,
|
|
312
|
+
) -> int:
|
|
313
|
+
string_input = await self.stringify_input(input, history=history, tools=tools)
|
|
314
|
+
self.logger.debug(string_input)
|
|
315
|
+
|
|
316
|
+
tokens = await self.get_client().tokenize.tokenize_text(
|
|
317
|
+
string_input, self.model_name
|
|
307
318
|
)
|
|
319
|
+
return len(tokens)
|
|
308
320
|
|
|
309
321
|
@override
|
|
310
322
|
async def _calculate_cost(
|
model_library/register_models.py
CHANGED
|
@@ -7,7 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
from typing import Any, Callable, Type, TypeVar, cast, get_type_hints
|
|
8
8
|
|
|
9
9
|
import yaml
|
|
10
|
-
from pydantic import create_model, model_validator
|
|
10
|
+
from pydantic import ConfigDict, create_model, model_validator
|
|
11
11
|
from pydantic.fields import Field
|
|
12
12
|
from pydantic.main import BaseModel
|
|
13
13
|
|
|
@@ -169,10 +169,12 @@ class DefaultParameters(BaseModel):
|
|
|
169
169
|
temperature: float | None = None
|
|
170
170
|
top_p: float | None = None
|
|
171
171
|
top_k: int | None = None
|
|
172
|
-
reasoning_effort: str | None = None
|
|
172
|
+
reasoning_effort: str | bool | None = None
|
|
173
173
|
|
|
174
174
|
|
|
175
175
|
class RawModelConfig(BaseModel):
|
|
176
|
+
model_config = ConfigDict(extra="forbid", strict=True)
|
|
177
|
+
|
|
176
178
|
company: str
|
|
177
179
|
label: str
|
|
178
180
|
description: str | None = None
|
|
@@ -275,7 +277,7 @@ def _register_models() -> ModelRegistry:
|
|
|
275
277
|
|
|
276
278
|
# create model config object
|
|
277
279
|
raw_model_obj: RawModelConfig = RawModelConfig.model_validate(
|
|
278
|
-
current_model_config
|
|
280
|
+
current_model_config
|
|
279
281
|
)
|
|
280
282
|
|
|
281
283
|
provider_endpoint = (
|
model_library/utils.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from collections.abc import Mapping, Sequence
|
|
3
|
-
from typing import Any
|
|
4
3
|
|
|
5
4
|
import httpx
|
|
6
5
|
from openai import AsyncOpenAI
|
|
@@ -90,37 +89,3 @@ def get_context_window_for_model(model_name: str, default: int = 128_000) -> int
|
|
|
90
89
|
f"using default context length of {default}"
|
|
91
90
|
)
|
|
92
91
|
return default
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
def normalize_tool_result(result: Any) -> str:
|
|
96
|
-
"""Normalize tool result to non-empty string for API compatibility.
|
|
97
|
-
|
|
98
|
-
Empty results (None, empty dict/list, whitespace-only strings) are
|
|
99
|
-
converted to a single space to satisfy API requirements.
|
|
100
|
-
|
|
101
|
-
Args:
|
|
102
|
-
result: Tool result value (any type)
|
|
103
|
-
|
|
104
|
-
Returns:
|
|
105
|
-
Non-empty string representation of the result
|
|
106
|
-
"""
|
|
107
|
-
if result is None or (isinstance(result, (dict, list)) and not result):
|
|
108
|
-
return " "
|
|
109
|
-
result_str = str(result) # pyright: ignore[reportUnknownArgumentType]
|
|
110
|
-
return result_str.strip() or " "
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
def filter_empty_text_blocks(content: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
114
|
-
"""Filter out empty text blocks from content list.
|
|
115
|
-
|
|
116
|
-
Args:
|
|
117
|
-
content: List of content blocks (dicts with 'type' and potentially 'text' keys)
|
|
118
|
-
|
|
119
|
-
Returns:
|
|
120
|
-
Filtered list with empty text blocks removed
|
|
121
|
-
"""
|
|
122
|
-
return [
|
|
123
|
-
block
|
|
124
|
-
for block in content
|
|
125
|
-
if block.get("type") != "text" or block.get("text", "").strip()
|
|
126
|
-
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: model-library
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Model Library for vals.ai
|
|
5
5
|
Author-email: "Vals AI, Inc." <contact@vals.ai>
|
|
6
6
|
License: MIT
|
|
@@ -13,13 +13,13 @@ Requires-Dist: pyyaml>=6.0.2
|
|
|
13
13
|
Requires-Dist: rich
|
|
14
14
|
Requires-Dist: backoff<3.0,>=2.2.1
|
|
15
15
|
Requires-Dist: redis<7.0,>=6.2.0
|
|
16
|
-
Requires-Dist: tiktoken
|
|
16
|
+
Requires-Dist: tiktoken>=0.12.0
|
|
17
17
|
Requires-Dist: pillow
|
|
18
18
|
Requires-Dist: openai<3.0,>=2.0
|
|
19
19
|
Requires-Dist: anthropic<1.0,>=0.57.1
|
|
20
20
|
Requires-Dist: mistralai<2.0,>=1.9.10
|
|
21
21
|
Requires-Dist: xai-sdk<2.0,>=1.0.0
|
|
22
|
-
Requires-Dist: ai21<5.0,>=4.0
|
|
22
|
+
Requires-Dist: ai21<5.0,>=4.3.0
|
|
23
23
|
Requires-Dist: boto3<2.0,>=1.38.27
|
|
24
24
|
Requires-Dist: google-genai[aiohttp]>=1.51.0
|
|
25
25
|
Requires-Dist: google-cloud-storage>=1.26.0
|
|
@@ -1,64 +1,64 @@
|
|
|
1
1
|
model_library/__init__.py,sha256=AKc_15aklOf-LbcS9z1Xer_moRWNpG6Dh3kqvSQ0nOI,714
|
|
2
|
-
model_library/exceptions.py,sha256=
|
|
2
|
+
model_library/exceptions.py,sha256=4TJ1aDkpPV-gv3gLIO7pi5ORRBG2hPXSBAvOXS6I_Wg,9027
|
|
3
3
|
model_library/file_utils.py,sha256=FAZRRtDT8c4Rjfoj64Te3knEHggXAAfRRuS8WLCsSe8,3682
|
|
4
|
-
model_library/logging.py,sha256=
|
|
4
|
+
model_library/logging.py,sha256=rZrrVQlEmyZzvKx6nIOR8bKHl49wQIIW5c36Zqcigm4,888
|
|
5
5
|
model_library/model_utils.py,sha256=l8oCltGeimMGtnne_3Q1EguVtzCj61UMsLsma-1czwg,753
|
|
6
6
|
model_library/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
model_library/register_models.py,sha256
|
|
7
|
+
model_library/register_models.py,sha256=-CtFggD296wqO2nd6yC5GIWBoi0YD0kDyG8bwxBa1ec,13696
|
|
8
8
|
model_library/registry_utils.py,sha256=BVauHcP02Et2maLxowNBbdpGd32cnLz1_zSjDLVJjp0,8843
|
|
9
9
|
model_library/settings.py,sha256=QyeUqzWBpexFi014L_mZkoXP49no3SAQNJRObATXrL8,873
|
|
10
|
-
model_library/utils.py,sha256=
|
|
10
|
+
model_library/utils.py,sha256=dcww26Ph0PSihEzSN4gZ48XXxN3Bt5oWveVYX6UACyI,2922
|
|
11
11
|
model_library/base/__init__.py,sha256=TtxCXGUtkEqWZNMMofLPuC4orN7Ja2hemtbtHitt_UA,266
|
|
12
|
-
model_library/base/base.py,sha256=
|
|
12
|
+
model_library/base/base.py,sha256=nrdPS92-vFkDVJJvNVOQ8e6U1zCyZxOtFg18ZgM4o0s,17467
|
|
13
13
|
model_library/base/batch.py,sha256=-jd6L0ECc5pkj73zoX2ZYcv_9iQdqxEi1kEilwaXWSA,2895
|
|
14
|
-
model_library/base/delegate_only.py,sha256=
|
|
15
|
-
model_library/base/input.py,sha256=
|
|
16
|
-
model_library/base/output.py,sha256=
|
|
17
|
-
model_library/base/utils.py,sha256=
|
|
14
|
+
model_library/base/delegate_only.py,sha256=5v2twEuQl1jF34M8iFcaZQlk0_uBLew4B46TkHUEssw,2441
|
|
15
|
+
model_library/base/input.py,sha256=JrnvBZ_xLcEmaMjnOfUS6GFV0QWtCGpJq0RQQL2YBG8,1934
|
|
16
|
+
model_library/base/output.py,sha256=jwd3rfRFUcqm8q-O5H684ToNZPvcD_obtf6ugmhzUus,7613
|
|
17
|
+
model_library/base/utils.py,sha256=eiMTiFFXHTb44Nnz3fjxf9YQzJpdfNI7tprSi9COPu0,2268
|
|
18
18
|
model_library/config/README.md,sha256=i8_wHnlI6uHIqWN9fYBkDCglZM2p5ZMVD3SLlxiwUVk,4274
|
|
19
19
|
model_library/config/ai21labs_models.yaml,sha256=ZWHhk1cep2GQIYHqkTS_0152mF3oZg2tSzMPmvfMRSI,2478
|
|
20
20
|
model_library/config/alibaba_models.yaml,sha256=-RLWOwh3ZaCQqjaZ-4Zw0BJNVE6JVHJ8Ggm9gQJZ6QI,2082
|
|
21
|
-
model_library/config/all_models.json,sha256=
|
|
21
|
+
model_library/config/all_models.json,sha256=U-XQrbaWWhjmkawg0Bd9NTxoDN-DT0WPhmDLF6OALR4,533621
|
|
22
22
|
model_library/config/amazon_models.yaml,sha256=HgLmhpfedHCQtkPEviEJCBbAb-dNQPOnVtf4UnwrDds,7654
|
|
23
23
|
model_library/config/anthropic_models.yaml,sha256=bTc_3Oqn4wCdq-dcWcEfmXrPVZjcR8-V6pTao7sGa_E,10475
|
|
24
24
|
model_library/config/cohere_models.yaml,sha256=ZfWrS1K45Hxd5nT_gpP5YGAovJcBIlLNIdaRyE3V-7o,5022
|
|
25
25
|
model_library/config/deepseek_models.yaml,sha256=4CCrf-4UPBgFCrS6CQa3vzNiaYlD4B6dFJFK_kIYBWY,1156
|
|
26
26
|
model_library/config/dummy_model.yaml,sha256=lImYJBtBVJk_jgnLbkuSyOshQphVlYCMkw-UiJIBYhY,877
|
|
27
|
-
model_library/config/fireworks_models.yaml,sha256=
|
|
27
|
+
model_library/config/fireworks_models.yaml,sha256=bAlXvjkdt-CnRp66WbfDv2qTrF5UHceRd2pvrsBERMk,6324
|
|
28
28
|
model_library/config/google_models.yaml,sha256=Rg127nsBbHpk62X7WBq2ckdHo0bwYM0NVjF7T2h_1c0,16494
|
|
29
29
|
model_library/config/inception_models.yaml,sha256=YCqfQlkH_pTdHIKee5dP_aRFXw_fTIEQCpUvX2bwO0M,560
|
|
30
30
|
model_library/config/kimi_models.yaml,sha256=AAqse_BCE-lrHkJHIWJVqMtttnZQCa-5Qy5qiLUJjYs,755
|
|
31
|
-
model_library/config/minimax_models.yaml,sha256=
|
|
31
|
+
model_library/config/minimax_models.yaml,sha256=gWTuTcl1-zyCF6KRuU6DSre2Cw5gXC-TeKV2Qp4StnQ,1263
|
|
32
32
|
model_library/config/mistral_models.yaml,sha256=mYKYSzJl24lUiA_erSkom7nCBxAoeJ57Mi3090q1ArM,5162
|
|
33
33
|
model_library/config/openai_models.yaml,sha256=1lKsTQwsxMMJqXtEoYs3liy6NcaK4p8NN7b-GSFnl8k,25261
|
|
34
34
|
model_library/config/perplexity_models.yaml,sha256=WUDqhLvnB0kQhCCwPv19FYLHozet3m33Spdo6bGff3Q,2336
|
|
35
35
|
model_library/config/together_models.yaml,sha256=BeqRJonYzPvWwoLfkyH0RMRKBYUrCSEQhg_25Nvx97M,23867
|
|
36
36
|
model_library/config/xai_models.yaml,sha256=2KRNNQy3kV-4xxSfhj7Uhp9TZF-S5qPlM8Ef-04zv8Y,7985
|
|
37
|
-
model_library/config/zai_models.yaml,sha256=
|
|
37
|
+
model_library/config/zai_models.yaml,sha256=lcYMh2FCrLWkKqdCnarRlwDoL3SbutRBNAiMPBUYQiw,1894
|
|
38
38
|
model_library/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
-
model_library/providers/ai21labs.py,sha256=
|
|
39
|
+
model_library/providers/ai21labs.py,sha256=NXoEu0NFwxLVJIN751tEuKLFYk4ECSDnWMik35pL5Y4,6277
|
|
40
40
|
model_library/providers/alibaba.py,sha256=k6LZErV_l9oTFTdKTwyw1SXD509Rl3AqFbN8umCryEE,2941
|
|
41
|
-
model_library/providers/amazon.py,sha256=
|
|
42
|
-
model_library/providers/anthropic.py,sha256=
|
|
41
|
+
model_library/providers/amazon.py,sha256=F8anL4pmeadA0P9luUZSSnEcke90WH7mCa3afJ2akgM,14156
|
|
42
|
+
model_library/providers/anthropic.py,sha256=xbSZx6R54UhNQij-vwFKPCIQJoTzxLblJMIxdqGcsqs,23094
|
|
43
43
|
model_library/providers/azure.py,sha256=brQNCED-zHvYjL5K5hdjFBNso6hJZg0HTHNnAgJPPG0,1408
|
|
44
44
|
model_library/providers/cohere.py,sha256=lCBm1PP1l_UOa1pKFMIZM3C0wCv3QWB6UP0-jvjkFa4,1066
|
|
45
45
|
model_library/providers/deepseek.py,sha256=7T4lxDiV5wmWUK7TAKwr332_T6uyXNCOiirZOCCETL0,1159
|
|
46
46
|
model_library/providers/fireworks.py,sha256=w-5mOF5oNzqx_0ijCoTm1lSn2ZHwhp6fURKhV3LEqIc,2309
|
|
47
47
|
model_library/providers/inception.py,sha256=Nrky53iujIM9spAWoNRtoJg2inFiL0li6E75vT3b6V8,1107
|
|
48
48
|
model_library/providers/kimi.py,sha256=zzvcKpZLsM1xPebpLeMxNKTt_FRiLN1rFWrIly7wfXA,1092
|
|
49
|
-
model_library/providers/minimax.py,sha256=
|
|
50
|
-
model_library/providers/mistral.py,sha256=
|
|
51
|
-
model_library/providers/openai.py,sha256=
|
|
49
|
+
model_library/providers/minimax.py,sha256=ckVyoXdtVxGT3aU-AknBQCa7_mOckNMfOXSgwbrJNIY,1610
|
|
50
|
+
model_library/providers/mistral.py,sha256=kmp74jEETMnB8fQ5VNfNVkksIrPMGJwJeXJDnTVwKa8,10117
|
|
51
|
+
model_library/providers/openai.py,sha256=gMykcN5eHFHqCrK9y5twc18h7XSMI68mB9YGYnpt93A,34522
|
|
52
52
|
model_library/providers/perplexity.py,sha256=eIzzkaZ4ZMlRKFVI9bnwyo91iJkh7aEmJ-0_4OKeAWc,1083
|
|
53
53
|
model_library/providers/together.py,sha256=7Y4QLnX8c_fyXUud-W_C1gidmROQainTgODBwbvFyXQ,2033
|
|
54
|
-
model_library/providers/vals.py,sha256=
|
|
55
|
-
model_library/providers/xai.py,sha256=
|
|
54
|
+
model_library/providers/vals.py,sha256=dbaL8toYTssm8qVlrgqzqwCeeTV9h-xfA37uBuoWtfg,9894
|
|
55
|
+
model_library/providers/xai.py,sha256=eA3CsiOWIF_vKxNZC95INUKOazz54R6vpVrGM8VR1tY,10719
|
|
56
56
|
model_library/providers/zai.py,sha256=O_GM6KlJ0fM2wYoxO9xrCWfnpYH7IpoKEzjiD4jB8Kc,1050
|
|
57
57
|
model_library/providers/google/__init__.py,sha256=ypuLVL_QJEQ7C3S47FhC9y4wyawYOdGikAViJmACI0U,115
|
|
58
|
-
model_library/providers/google/batch.py,sha256=
|
|
59
|
-
model_library/providers/google/google.py,sha256=
|
|
60
|
-
model_library-0.1.
|
|
61
|
-
model_library-0.1.
|
|
62
|
-
model_library-0.1.
|
|
63
|
-
model_library-0.1.
|
|
64
|
-
model_library-0.1.
|
|
58
|
+
model_library/providers/google/batch.py,sha256=ycK2arf00lhZQNgyM5Yd01LAScul6rvVv--dUcRWWSA,9977
|
|
59
|
+
model_library/providers/google/google.py,sha256=txQaet1HobyjYd3dp9Mgonx3x5ln3LMuW10Qsyum3B4,17809
|
|
60
|
+
model_library-0.1.7.dist-info/licenses/LICENSE,sha256=x6mf4o7U_wHaaqcfxoU-0R6uYJLbqL_TNuoULP3asaA,1070
|
|
61
|
+
model_library-0.1.7.dist-info/METADATA,sha256=436seE0dN2884VkHzGHyp36aARqBxqKMKRccmKYG3_E,6989
|
|
62
|
+
model_library-0.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
63
|
+
model_library-0.1.7.dist-info/top_level.txt,sha256=HtQYxA_7RP8UT35I6VcUw20L6edI0Zf2t5Ys1uDGVjs,14
|
|
64
|
+
model_library-0.1.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|