together 1.5.29__py3-none-any.whl → 1.5.31__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.
- together/abstract/api_requestor.py +44 -3
- together/cli/api/chat.py +24 -2
- together/cli/api/endpoints.py +56 -6
- together/constants.py +3 -3
- together/filemanager.py +45 -22
- together/resources/audio/__init__.py +9 -0
- together/resources/audio/speech.py +8 -2
- together/resources/audio/transcriptions.py +20 -2
- together/resources/audio/voices.py +65 -0
- together/resources/endpoints.py +98 -7
- together/types/__init__.py +4 -0
- together/types/audio_speech.py +127 -14
- together/types/chat_completions.py +6 -0
- together/types/common.py +1 -0
- together/types/files.py +1 -0
- together/utils/files.py +183 -54
- {together-1.5.29.dist-info → together-1.5.31.dist-info}/METADATA +2 -1
- {together-1.5.29.dist-info → together-1.5.31.dist-info}/RECORD +21 -20
- {together-1.5.29.dist-info → together-1.5.31.dist-info}/WHEEL +0 -0
- {together-1.5.29.dist-info → together-1.5.31.dist-info}/entry_points.txt +0 -0
- {together-1.5.29.dist-info → together-1.5.31.dist-info}/licenses/LICENSE +0 -0
together/utils/files.py
CHANGED
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
from traceback import format_exc
|
|
8
8
|
from typing import Any, Dict, List
|
|
9
9
|
|
|
10
|
+
from tqdm import tqdm
|
|
10
11
|
|
|
11
12
|
from together.constants import (
|
|
12
13
|
MAX_FILE_SIZE_GB,
|
|
@@ -102,81 +103,163 @@ def check_file(
|
|
|
102
103
|
return report_dict
|
|
103
104
|
|
|
104
105
|
|
|
105
|
-
def
|
|
106
|
-
"""
|
|
106
|
+
def _check_conversation_type(messages: List[Dict[str, str | bool]], idx: int) -> None:
|
|
107
|
+
"""Check that the conversation has correct type.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
messages: The messages in the conversation.
|
|
111
|
+
Can be any type, this function ensures that the messages are a list of dictionaries.
|
|
112
|
+
idx: Line number in the file.
|
|
113
|
+
|
|
114
|
+
Raises:
|
|
115
|
+
InvalidFileFormatError: If the conversation type is invalid.
|
|
116
|
+
"""
|
|
107
117
|
if not isinstance(messages, list):
|
|
108
118
|
raise InvalidFileFormatError(
|
|
109
119
|
message=f"Invalid format on line {idx + 1} of the input file. "
|
|
110
|
-
f"
|
|
120
|
+
f"The `messages` column must be a list. Found {type(messages)}",
|
|
111
121
|
line_number=idx + 1,
|
|
112
122
|
error_source="key_value",
|
|
113
123
|
)
|
|
114
|
-
if
|
|
124
|
+
if len(messages) == 0:
|
|
115
125
|
raise InvalidFileFormatError(
|
|
116
126
|
message=f"Invalid format on line {idx + 1} of the input file. "
|
|
117
|
-
f"
|
|
127
|
+
f"The `messages` column must not be empty.",
|
|
118
128
|
line_number=idx + 1,
|
|
119
129
|
error_source="key_value",
|
|
120
130
|
)
|
|
121
131
|
|
|
122
|
-
has_weights = any("weight" in message for message in messages)
|
|
123
|
-
|
|
124
|
-
previous_role = None
|
|
125
132
|
for message in messages:
|
|
126
133
|
if not isinstance(message, dict):
|
|
127
134
|
raise InvalidFileFormatError(
|
|
128
135
|
message=f"Invalid format on line {idx + 1} of the input file. "
|
|
129
|
-
f"
|
|
136
|
+
f"The `messages` column must be a list of dicts. Found {type(message)}",
|
|
130
137
|
line_number=idx + 1,
|
|
131
138
|
error_source="key_value",
|
|
132
139
|
)
|
|
140
|
+
|
|
133
141
|
for column in REQUIRED_COLUMNS_MESSAGE:
|
|
134
142
|
if column not in message:
|
|
135
143
|
raise InvalidFileFormatError(
|
|
136
|
-
message=f"
|
|
137
|
-
"of the the input file.",
|
|
144
|
+
message=f"Missing required column `{column}` in message on line {idx + 1}.",
|
|
138
145
|
line_number=idx + 1,
|
|
139
146
|
error_source="key_value",
|
|
140
147
|
)
|
|
141
|
-
|
|
142
|
-
if not isinstance(message[column], str):
|
|
143
|
-
raise InvalidFileFormatError(
|
|
144
|
-
message=f"Invalid format on line {idx + 1} in the column {column} for turn `{message}` "
|
|
145
|
-
f"of the input file. Expected string. Found {type(message[column])}",
|
|
146
|
-
line_number=idx + 1,
|
|
147
|
-
error_source="text_field",
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
if has_weights and "weight" in message:
|
|
151
|
-
weight = message["weight"]
|
|
152
|
-
if not isinstance(weight, int):
|
|
153
|
-
raise InvalidFileFormatError(
|
|
154
|
-
message="Weight must be an integer",
|
|
155
|
-
line_number=idx + 1,
|
|
156
|
-
error_source="key_value",
|
|
157
|
-
)
|
|
158
|
-
if weight not in {0, 1}:
|
|
148
|
+
if not isinstance(message[column], str):
|
|
159
149
|
raise InvalidFileFormatError(
|
|
160
|
-
message="
|
|
150
|
+
message=f"Column `{column}` is not a string on line {idx + 1}. Found {type(message[column])}",
|
|
161
151
|
line_number=idx + 1,
|
|
162
|
-
error_source="
|
|
152
|
+
error_source="text_field",
|
|
163
153
|
)
|
|
164
|
-
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def _check_conversation_roles(
|
|
157
|
+
require_assistant_role: bool, assistant_role_exists: bool, idx: int
|
|
158
|
+
) -> None:
|
|
159
|
+
"""Check that the conversation has correct roles.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
require_assistant_role: Whether to require at least one assistant role.
|
|
163
|
+
assistant_role_exists: Whether an assistant role exists in the conversation.
|
|
164
|
+
idx: Line number in the file.
|
|
165
|
+
|
|
166
|
+
Raises:
|
|
167
|
+
InvalidFileFormatError: If the conversation roles are invalid.
|
|
168
|
+
"""
|
|
169
|
+
if require_assistant_role and not assistant_role_exists:
|
|
170
|
+
raise InvalidFileFormatError(
|
|
171
|
+
message=f"Invalid format on line {idx + 1} of the input file. "
|
|
172
|
+
"At least one message with the assistant role must be present in the example.",
|
|
173
|
+
line_number=idx + 1,
|
|
174
|
+
error_source="key_value",
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def _check_message_weight(message: Dict[str, str | bool], idx: int) -> None:
|
|
179
|
+
"""Check that the message has a weight with the correct type and value.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
message: The message to check.
|
|
183
|
+
idx: Line number in the file.
|
|
184
|
+
|
|
185
|
+
Raises:
|
|
186
|
+
InvalidFileFormatError: If the message weight is invalid.
|
|
187
|
+
"""
|
|
188
|
+
if "weight" in message:
|
|
189
|
+
weight = message["weight"]
|
|
190
|
+
if not isinstance(weight, int):
|
|
165
191
|
raise InvalidFileFormatError(
|
|
166
|
-
message=f"
|
|
167
|
-
f"Possible roles in the conversation are: {POSSIBLE_ROLES_CONVERSATION}",
|
|
192
|
+
message=f"Weight must be an integer on line {idx + 1}.",
|
|
168
193
|
line_number=idx + 1,
|
|
169
194
|
error_source="key_value",
|
|
170
195
|
)
|
|
171
|
-
|
|
172
|
-
if previous_role == message["role"]:
|
|
196
|
+
if weight not in {0, 1}:
|
|
173
197
|
raise InvalidFileFormatError(
|
|
174
|
-
message=f"
|
|
175
|
-
"`user` and `assistant` roles must alternate user/assistant/user/assistant/...",
|
|
198
|
+
message=f"Weight must be either 0 or 1 on line {idx + 1}.",
|
|
176
199
|
line_number=idx + 1,
|
|
177
200
|
error_source="key_value",
|
|
178
201
|
)
|
|
179
|
-
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _check_message_role(
|
|
205
|
+
message: Dict[str, str | bool], previous_role: str | None, idx: int
|
|
206
|
+
) -> str | bool:
|
|
207
|
+
"""Check that the message has correct roles.
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
message: The message to check.
|
|
211
|
+
previous_role: The role of the previous message.
|
|
212
|
+
idx: Line number in the file.
|
|
213
|
+
|
|
214
|
+
Returns:
|
|
215
|
+
str: The role of the current message.
|
|
216
|
+
|
|
217
|
+
Raises:
|
|
218
|
+
InvalidFileFormatError: If the message role is invalid.
|
|
219
|
+
"""
|
|
220
|
+
if message["role"] not in POSSIBLE_ROLES_CONVERSATION:
|
|
221
|
+
raise InvalidFileFormatError(
|
|
222
|
+
message=f"Invalid role `{message['role']}` in conversation on line {idx + 1}. "
|
|
223
|
+
f"Possible roles: {', '.join(POSSIBLE_ROLES_CONVERSATION)}",
|
|
224
|
+
line_number=idx + 1,
|
|
225
|
+
error_source="key_value",
|
|
226
|
+
)
|
|
227
|
+
if previous_role is not None and message["role"] == previous_role:
|
|
228
|
+
raise InvalidFileFormatError(
|
|
229
|
+
message=f"Invalid role turns on line {idx + 1} of the input file. "
|
|
230
|
+
"After the optional system message, conversation roles must alternate between user/assistant/user/assistant.",
|
|
231
|
+
line_number=idx + 1,
|
|
232
|
+
error_source="key_value",
|
|
233
|
+
)
|
|
234
|
+
return message["role"]
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def validate_messages(
|
|
238
|
+
messages: List[Dict[str, str | bool]], idx: int, require_assistant_role: bool = True
|
|
239
|
+
) -> None:
|
|
240
|
+
"""Validate the messages column.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
messages: List of message dictionaries to validate.
|
|
244
|
+
idx: Line number in the file.
|
|
245
|
+
require_assistant_role: Whether to require at least one assistant role.
|
|
246
|
+
|
|
247
|
+
Raises:
|
|
248
|
+
InvalidFileFormatError: If the messages are invalid.
|
|
249
|
+
"""
|
|
250
|
+
_check_conversation_type(messages, idx)
|
|
251
|
+
|
|
252
|
+
has_weights = any("weight" in message for message in messages)
|
|
253
|
+
previous_role = None
|
|
254
|
+
assistant_role_exists = False
|
|
255
|
+
|
|
256
|
+
for message in messages:
|
|
257
|
+
if has_weights:
|
|
258
|
+
_check_message_weight(message, idx)
|
|
259
|
+
previous_role = _check_message_role(message, previous_role, idx)
|
|
260
|
+
assistant_role_exists |= previous_role == "assistant"
|
|
261
|
+
|
|
262
|
+
_check_conversation_roles(require_assistant_role, assistant_role_exists, idx)
|
|
180
263
|
|
|
181
264
|
|
|
182
265
|
def validate_preference_openai(example: Dict[str, Any], idx: int = 0) -> None:
|
|
@@ -203,37 +286,73 @@ def validate_preference_openai(example: Dict[str, Any], idx: int = 0) -> None:
|
|
|
203
286
|
error_source="key_value",
|
|
204
287
|
)
|
|
205
288
|
|
|
206
|
-
validate_messages(example["input"]["messages"], idx)
|
|
289
|
+
validate_messages(example["input"]["messages"], idx, require_assistant_role=False)
|
|
290
|
+
|
|
291
|
+
if example["input"]["messages"][-1]["role"] == "assistant":
|
|
292
|
+
raise InvalidFileFormatError(
|
|
293
|
+
message=f"The last message in the input conversation must not be from the assistant on line {idx + 1}.",
|
|
294
|
+
line_number=idx + 1,
|
|
295
|
+
error_source="key_value",
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
keys = ["preferred_output", "non_preferred_output"]
|
|
207
299
|
|
|
208
|
-
for
|
|
209
|
-
if not
|
|
300
|
+
for key in keys:
|
|
301
|
+
if key not in example:
|
|
210
302
|
raise InvalidFileFormatError(
|
|
211
|
-
message=f"The dataset is malformed, the `{
|
|
303
|
+
message=f"The dataset is malformed, the `{key}` field must be present in the input dictionary on line {idx + 1}.",
|
|
212
304
|
line_number=idx + 1,
|
|
213
305
|
error_source="key_value",
|
|
214
306
|
)
|
|
215
307
|
|
|
216
|
-
if
|
|
308
|
+
if not isinstance(example[key], list):
|
|
217
309
|
raise InvalidFileFormatError(
|
|
218
|
-
message=f"The dataset is malformed, the `{
|
|
310
|
+
message=f"The dataset is malformed, the `{key}` field must be a list on line {idx + 1}.",
|
|
219
311
|
line_number=idx + 1,
|
|
220
312
|
error_source="key_value",
|
|
221
313
|
)
|
|
222
|
-
|
|
314
|
+
|
|
315
|
+
if len(example[key]) != 1:
|
|
223
316
|
raise InvalidFileFormatError(
|
|
224
|
-
message=f"The dataset is malformed, the `{
|
|
317
|
+
message=f"The dataset is malformed, the `{key}` list must contain exactly one message on line {idx + 1}.",
|
|
225
318
|
line_number=idx + 1,
|
|
226
319
|
error_source="key_value",
|
|
227
320
|
)
|
|
228
|
-
|
|
321
|
+
|
|
322
|
+
if not isinstance(example[key][0], dict):
|
|
229
323
|
raise InvalidFileFormatError(
|
|
230
|
-
message=f"The dataset is malformed, the `{
|
|
324
|
+
message=f"The dataset is malformed, the first element of `{key}` must be a dictionary on line {idx + 1}.",
|
|
231
325
|
line_number=idx + 1,
|
|
232
326
|
error_source="key_value",
|
|
233
327
|
)
|
|
234
328
|
|
|
235
|
-
|
|
236
|
-
|
|
329
|
+
if "role" not in example[key][0]:
|
|
330
|
+
raise InvalidFileFormatError(
|
|
331
|
+
message=f"The dataset is malformed, the first element of `{key}` must have a 'role' field on line {idx + 1}.",
|
|
332
|
+
line_number=idx + 1,
|
|
333
|
+
error_source="key_value",
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
if example[key][0]["role"] != "assistant":
|
|
337
|
+
raise InvalidFileFormatError(
|
|
338
|
+
message=f"The dataset is malformed, the first element of `{key}` must have the 'assistant' role on line {idx + 1}.",
|
|
339
|
+
line_number=idx + 1,
|
|
340
|
+
error_source="key_value",
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
if "content" not in example[key][0]:
|
|
344
|
+
raise InvalidFileFormatError(
|
|
345
|
+
message=f"The dataset is malformed, the first element of `{key}` must have a 'content' field on line {idx + 1}.",
|
|
346
|
+
line_number=idx + 1,
|
|
347
|
+
error_source="key_value",
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
if not isinstance(example[key][0]["content"], str):
|
|
351
|
+
raise InvalidFileFormatError(
|
|
352
|
+
message=f"The dataset is malformed, the 'content' field in `{key}` must be a string on line {idx + 1}.",
|
|
353
|
+
line_number=idx + 1,
|
|
354
|
+
error_source="key_value",
|
|
355
|
+
)
|
|
237
356
|
|
|
238
357
|
|
|
239
358
|
def _check_utf8(file: Path) -> Dict[str, Any]:
|
|
@@ -245,14 +364,19 @@ def _check_utf8(file: Path) -> Dict[str, Any]:
|
|
|
245
364
|
Dict[str, Any]: A dictionary with the results of the check.
|
|
246
365
|
"""
|
|
247
366
|
report_dict: Dict[str, Any] = {}
|
|
367
|
+
|
|
248
368
|
try:
|
|
369
|
+
# Dry-run UTF-8 decode: iterate through file to validate encoding
|
|
249
370
|
with file.open(encoding="utf-8") as f:
|
|
250
|
-
f
|
|
371
|
+
for _ in f:
|
|
372
|
+
pass
|
|
373
|
+
|
|
251
374
|
report_dict["utf8"] = True
|
|
252
375
|
except UnicodeDecodeError as e:
|
|
253
376
|
report_dict["utf8"] = False
|
|
254
377
|
report_dict["message"] = f"File is not UTF-8 encoded. Error raised: {e}."
|
|
255
378
|
report_dict["is_check_passed"] = False
|
|
379
|
+
|
|
256
380
|
return report_dict
|
|
257
381
|
|
|
258
382
|
|
|
@@ -352,7 +476,7 @@ def _check_jsonl(file: Path, purpose: FilePurpose | str) -> Dict[str, Any]:
|
|
|
352
476
|
with file.open() as f:
|
|
353
477
|
idx = -1
|
|
354
478
|
try:
|
|
355
|
-
for idx, line in enumerate(f):
|
|
479
|
+
for idx, line in tqdm(enumerate(f), desc="Validating file", unit=" lines"):
|
|
356
480
|
json_line = json.loads(line)
|
|
357
481
|
|
|
358
482
|
if not isinstance(json_line, dict):
|
|
@@ -410,7 +534,12 @@ def _check_jsonl(file: Path, purpose: FilePurpose | str) -> Dict[str, Any]:
|
|
|
410
534
|
message_column = JSONL_REQUIRED_COLUMNS_MAP[
|
|
411
535
|
DatasetFormat.CONVERSATION
|
|
412
536
|
][0]
|
|
413
|
-
|
|
537
|
+
require_assistant = purpose != FilePurpose.Eval
|
|
538
|
+
validate_messages(
|
|
539
|
+
json_line[message_column],
|
|
540
|
+
idx,
|
|
541
|
+
require_assistant_role=require_assistant,
|
|
542
|
+
)
|
|
414
543
|
else:
|
|
415
544
|
for column in JSONL_REQUIRED_COLUMNS_MAP[current_format]:
|
|
416
545
|
if not isinstance(json_line[column], str):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: together
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.31
|
|
4
4
|
Summary: Python client for Together's Cloud Platform!
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.14
|
|
18
18
|
Provides-Extra: pyarrow
|
|
19
19
|
Requires-Dist: aiohttp (>=3.9.3,<4.0.0)
|
|
20
|
+
Requires-Dist: black (>=25.9.0,<26.0.0)
|
|
20
21
|
Requires-Dist: click (>=8.1.7,<9.0.0)
|
|
21
22
|
Requires-Dist: eval-type-backport (>=0.1.3,<0.3.0)
|
|
22
23
|
Requires-Dist: filelock (>=3.13.1,<4.0.0)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
together/__init__.py,sha256=B8T7ybZ7D6jJNRTuFDVjOFlImCNag8tNZXpZdXz7xNM,1530
|
|
2
2
|
together/abstract/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
together/abstract/api_requestor.py,sha256=
|
|
3
|
+
together/abstract/api_requestor.py,sha256=CPFsQXEqIoXDcqxlDQyumbTMtGmL7CQYtSYrkb3binU,27556
|
|
4
4
|
together/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
together/cli/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
together/cli/api/chat.py,sha256=
|
|
6
|
+
together/cli/api/chat.py,sha256=auJh0WZwpY16vFLJojkzLJYnjU1IgNz_ybf7sQtKga0,9941
|
|
7
7
|
together/cli/api/completions.py,sha256=l-Zw5t7hojL3w8xd_mitS2NRB72i5Z0xwkzH0rT5XMc,4263
|
|
8
|
-
together/cli/api/endpoints.py,sha256=
|
|
8
|
+
together/cli/api/endpoints.py,sha256=S3px19iGTKy5KS1nuKrvUUMoqc_KtrZHyIwjwjqX7uQ,14624
|
|
9
9
|
together/cli/api/evaluation.py,sha256=36SsujC5qicf-8l8GA8wqRtEC8NKzsAjL-_nYhePpQM,14691
|
|
10
10
|
together/cli/api/files.py,sha256=QLYEXRkY8J2Gg1SbTCtzGfoTMvosoeACNK83L_oLubs,3397
|
|
11
11
|
together/cli/api/finetune.py,sha256=zG8Peg7DuptMpT5coqqGbRdaxM5SxQgte9tIv7tMJbM,18437
|
|
@@ -14,9 +14,9 @@ together/cli/api/models.py,sha256=BRWRiguuJ8OwAD8crajpZ7RyCHA35tyOZvi3iLWQ7k4,36
|
|
|
14
14
|
together/cli/api/utils.py,sha256=IuqYWPnLI38_Bqd7lj8V_SnGdYc59pRmMbQmciS4FsM,1326
|
|
15
15
|
together/cli/cli.py,sha256=PVahUjOfAQIjo209FoPKljcCA_OIpOYQ9MAsCjfEMu0,2134
|
|
16
16
|
together/client.py,sha256=KD33kAPkWTcnXjge4rLK_L3UsJYsxNUkvL6b9SgTEf0,6324
|
|
17
|
-
together/constants.py,sha256=
|
|
17
|
+
together/constants.py,sha256=IaKMIamFia9nyq8jPrmqu5y0YL5mC_474AAIUXYFsdk,1964
|
|
18
18
|
together/error.py,sha256=HU6247CyzCFjaxL9A0XYbXZ6fY_ebRg0FEYjI4Skogs,5515
|
|
19
|
-
together/filemanager.py,sha256=
|
|
19
|
+
together/filemanager.py,sha256=bynQp2yGoFMZcgVtgFlkYxTbnk6n_GxdiEpY0q50kbk,19448
|
|
20
20
|
together/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
together/legacy/base.py,sha256=ehrX1SCfRbK5OA83wL1q7-tfF-yuZOUxzjxYfFtdvvQ,727
|
|
22
22
|
together/legacy/complete.py,sha256=NRJX-vjnkg4HrgDo9LS3jFfhwfXpeGxcl24dcrLPK3A,2439
|
|
@@ -26,17 +26,18 @@ together/legacy/finetune.py,sha256=nL2Ytt8FOVtGbcMumnn1gyf4aEFrRok8GolWJJaHQAg,5
|
|
|
26
26
|
together/legacy/images.py,sha256=bJJRs-6C7-NexPyaeyHiYlHOU51yls5-QAiqtO4xrZU,626
|
|
27
27
|
together/legacy/models.py,sha256=85ZN9Ids_FjdYNDRv5k7sgrtVWPKPHqkDplORtVUGHg,1087
|
|
28
28
|
together/resources/__init__.py,sha256=iOo8bNF8J7EKgShrEZSWpeULTgyHnuxmRrwmVHyGy4Y,1280
|
|
29
|
-
together/resources/audio/__init__.py,sha256=
|
|
30
|
-
together/resources/audio/speech.py,sha256=
|
|
31
|
-
together/resources/audio/transcriptions.py,sha256=
|
|
29
|
+
together/resources/audio/__init__.py,sha256=S8moxi0iEOw3NZMtXN0TPDP37k1q9tNZx-qH4SV72hQ,1439
|
|
30
|
+
together/resources/audio/speech.py,sha256=3lVxJPQM1bbStkAJWym3eJua-AxuYSP9jBZy0jLls_M,5446
|
|
31
|
+
together/resources/audio/transcriptions.py,sha256=99EF-Kyt-oySF887U4Wtzg49jTf6L_ln8AZVhvrl1HA,12377
|
|
32
32
|
together/resources/audio/translations.py,sha256=_2VeYEthYzPIflDD_hlVmoXk-OCgLgnvva2vMPpaU_Q,10508
|
|
33
|
+
together/resources/audio/voices.py,sha256=Xyjv_jI5hFTvRouiryT0m4pre9_SoZOa8r5agVmoFSU,1699
|
|
33
34
|
together/resources/batch.py,sha256=dBXgh264AQPsO3pCff1vT1PAewnX9yroxa8UZQUJAqE,4584
|
|
34
35
|
together/resources/chat/__init__.py,sha256=RsTptdP8MeGjcdIjze896-J27cRvCbUoMft0X2BVlQ8,617
|
|
35
36
|
together/resources/chat/completions.py,sha256=cBsSFWi9qToQCn4V_3qJ0gwRqORjF6NFDXmHcHfIhOY,14442
|
|
36
37
|
together/resources/code_interpreter.py,sha256=vbN8Mh5MG6HQvqra7p61leIyfebgbgJTM_q2A_Fylhw,2948
|
|
37
38
|
together/resources/completions.py,sha256=5Wa-ZjPCxRcam6CDe7KgGYlTA7yJZMmd5TrRgGCL_ug,11726
|
|
38
39
|
together/resources/embeddings.py,sha256=PTvLb82yjG_-iQOyuhsilp77Fr7gZ0o6WD2KeRnKoxs,2675
|
|
39
|
-
together/resources/endpoints.py,sha256=
|
|
40
|
+
together/resources/endpoints.py,sha256=BP75wUEcOtpiUbfLAQH5GX2RL8_RnM522-D8Iz7_LUU,20378
|
|
40
41
|
together/resources/evaluation.py,sha256=eYSs9HUpW51XZjX-yNlFZlLapsuEDINJ8BjxJoYa4U0,31443
|
|
41
42
|
together/resources/files.py,sha256=_uK5xzriXNOGNw3tQGuTbCaxBRo6Az6_cXOUtBNFzDk,5434
|
|
42
43
|
together/resources/finetune.py,sha256=VeMyPG-PA16d2UAzqNTQEAKBgMvVApj97lTAHEuR0kc,44890
|
|
@@ -45,19 +46,19 @@ together/resources/models.py,sha256=WpP-x25AXYpmu-VKu_X4Up-zHwpWBBvPRpbV4FsWQrU,
|
|
|
45
46
|
together/resources/rerank.py,sha256=3Ju_aRSyZ1s_3zCSNZnSnEJErUVmt2xa3M8z1nvejMA,3931
|
|
46
47
|
together/resources/videos.py,sha256=Dn7vslH1pZVw4WYvH-69fjzqLZdKHkTK-lIbFkxh0w0,11144
|
|
47
48
|
together/together_response.py,sha256=a3dgKMPDrlfKQwxYENfNt2T4l2vSZxRWMixhHSy-q3E,1308
|
|
48
|
-
together/types/__init__.py,sha256=
|
|
49
|
+
together/types/__init__.py,sha256=eK8DXMzHp78kieDv7JpXNbcS2k3aWvyQrgLdYUtL_qM,4342
|
|
49
50
|
together/types/abstract.py,sha256=1lFQI_3WjsR_t1128AeKW0aTk6EiM6Gh1J3ZuyLLPao,642
|
|
50
|
-
together/types/audio_speech.py,sha256=
|
|
51
|
+
together/types/audio_speech.py,sha256=pUzqpx7NCjtPIq91xO2k0psetzLz29NTHHm6DS0k8Xg,9682
|
|
51
52
|
together/types/batch.py,sha256=KiI5i1En7cyIUxHhVIGoQk6Wlw19c0PXSqDWwc2KZ2c,1140
|
|
52
|
-
together/types/chat_completions.py,sha256=
|
|
53
|
+
together/types/chat_completions.py,sha256=OkEk4_Z5cf36Ae775epG_lIQ6dkKPSSKujc9wQ-tzQs,5504
|
|
53
54
|
together/types/code_interpreter.py,sha256=cjF8TKgRkJllHS4i24dWQZBGTRsG557eHSewOiip0Kk,1770
|
|
54
|
-
together/types/common.py,sha256=
|
|
55
|
+
together/types/common.py,sha256=c2_CeyjOBWbJ0RIAsWB13DG8j6N3ATU-6yH-CnFitVY,1564
|
|
55
56
|
together/types/completions.py,sha256=o3FR5ixsTUj-a3pmOUzbSQg-hESVhpqrC9UD__VCqr4,2971
|
|
56
57
|
together/types/embeddings.py,sha256=J7grkYYn7xhqeKaBO2T-8XQRtHhkzYzymovtGdIUK5A,751
|
|
57
58
|
together/types/endpoints.py,sha256=EzNhHOoQ_D9fUdNQtxQPeSWiFzdFLqpNodN0YLmv_h0,4393
|
|
58
59
|
together/types/error.py,sha256=OVlCs3cx_2WhZK4JzHT8SQyRIIqKOP1AZQ4y1PydjAE,370
|
|
59
60
|
together/types/evaluation.py,sha256=9gCAgzAwFD95MWnSgvxnSYFF27wKOTqIGn-wSOpFt2M,2385
|
|
60
|
-
together/types/files.py,sha256=
|
|
61
|
+
together/types/files.py,sha256=_pB_q8kU5QH7WE3Y8Uro6LGsgK_5zrGYzJREZL9cRH0,2025
|
|
61
62
|
together/types/finetune.py,sha256=EQAJVXqK1Ne2V2dCfUiJgOwK9_x_7TwQRrjWavap698,11396
|
|
62
63
|
together/types/images.py,sha256=IsrmIM2FVeG-kP4vhZUx5fG5EhOJ-d8fefrAmOVKNDs,926
|
|
63
64
|
together/types/models.py,sha256=V8bcy1c3uTmqwnTVphbYLF2AJ6l2P2724njl36TzfHQ,2878
|
|
@@ -66,11 +67,11 @@ together/types/videos.py,sha256=KCLk8CF0kbA_51qnHOzAWg5VA6HTlwnY-sTZ2lUR0Eo,1861
|
|
|
66
67
|
together/utils/__init__.py,sha256=5fqvj4KT2rHxKSQot2TSyV_HcvkvkGiqAiaYuJwqtm0,786
|
|
67
68
|
together/utils/_log.py,sha256=5IYNI-jYzxyIS-pUvhb0vE_Muo3MA7GgBhsu66TKP2w,1951
|
|
68
69
|
together/utils/api_helpers.py,sha256=2K0O6qeEQ2zVFvi5NBN5m2kjZJaS3-JfKFecQ7SmGaw,3746
|
|
69
|
-
together/utils/files.py,sha256=
|
|
70
|
+
together/utils/files.py,sha256=mWFFpsgVPDQg1ZCb-oTrDUFv3aXg1AItgtwXvDsFegI,25047
|
|
70
71
|
together/utils/tools.py,sha256=H2MTJhEqtBllaDvOyZehIO_IVNK3P17rSDeILtJIVag,2964
|
|
71
72
|
together/version.py,sha256=p03ivHyE0SyWU4jAnRTBi_sOwywVWoZPU4g2gzRgG-Y,126
|
|
72
|
-
together-1.5.
|
|
73
|
-
together-1.5.
|
|
74
|
-
together-1.5.
|
|
75
|
-
together-1.5.
|
|
76
|
-
together-1.5.
|
|
73
|
+
together-1.5.31.dist-info/METADATA,sha256=VXwb3-wFmS-Zika1_4B1i9aHy3F3AD7-zeSiSQJYiTQ,16583
|
|
74
|
+
together-1.5.31.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
75
|
+
together-1.5.31.dist-info/entry_points.txt,sha256=G-b5NKW6lUUf1V1fH8IPTBb7jXnK7lhbX9H1zTEJXPs,50
|
|
76
|
+
together-1.5.31.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
77
|
+
together-1.5.31.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|