together 1.2.11__py3-none-any.whl → 2.0.0a8__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/__init__.py +101 -63
- together/_base_client.py +1995 -0
- together/_client.py +1033 -0
- together/_compat.py +219 -0
- together/_constants.py +14 -0
- together/_exceptions.py +108 -0
- together/_files.py +123 -0
- together/_models.py +857 -0
- together/_qs.py +150 -0
- together/_resource.py +43 -0
- together/_response.py +830 -0
- together/_streaming.py +370 -0
- together/_types.py +260 -0
- together/_utils/__init__.py +64 -0
- together/_utils/_compat.py +45 -0
- together/_utils/_datetime_parse.py +136 -0
- together/_utils/_logs.py +25 -0
- together/_utils/_proxy.py +65 -0
- together/_utils/_reflection.py +42 -0
- together/_utils/_resources_proxy.py +24 -0
- together/_utils/_streams.py +12 -0
- together/_utils/_sync.py +58 -0
- together/_utils/_transform.py +457 -0
- together/_utils/_typing.py +156 -0
- together/_utils/_utils.py +421 -0
- together/_version.py +4 -0
- together/lib/.keep +4 -0
- together/lib/__init__.py +23 -0
- together/lib/cli/api/endpoints.py +467 -0
- together/lib/cli/api/evals.py +588 -0
- together/{cli → lib/cli}/api/files.py +20 -17
- together/lib/cli/api/fine_tuning.py +566 -0
- together/lib/cli/api/models.py +140 -0
- together/lib/cli/api/utils.py +50 -0
- together/{cli → lib/cli}/cli.py +17 -23
- together/lib/constants.py +61 -0
- together/lib/resources/__init__.py +11 -0
- together/lib/resources/files.py +999 -0
- together/lib/resources/fine_tuning.py +280 -0
- together/lib/resources/models.py +35 -0
- together/lib/types/__init__.py +13 -0
- together/lib/types/error.py +9 -0
- together/lib/types/fine_tuning.py +455 -0
- together/{utils → lib/utils}/__init__.py +7 -10
- together/{utils → lib/utils}/_log.py +18 -13
- together/lib/utils/files.py +628 -0
- together/lib/utils/serializer.py +10 -0
- together/{utils → lib/utils}/tools.py +17 -2
- together/resources/__init__.py +225 -24
- together/resources/audio/__init__.py +75 -0
- together/resources/audio/audio.py +198 -0
- together/resources/audio/speech.py +605 -0
- together/resources/audio/transcriptions.py +282 -0
- together/resources/audio/translations.py +256 -0
- together/resources/audio/voices.py +135 -0
- together/resources/batches.py +417 -0
- together/resources/chat/__init__.py +30 -21
- together/resources/chat/chat.py +102 -0
- together/resources/chat/completions.py +1063 -257
- together/resources/code_interpreter/__init__.py +33 -0
- together/resources/code_interpreter/code_interpreter.py +258 -0
- together/resources/code_interpreter/sessions.py +135 -0
- together/resources/completions.py +890 -225
- together/resources/embeddings.py +172 -68
- together/resources/endpoints.py +711 -0
- together/resources/evals.py +452 -0
- together/resources/files.py +397 -120
- together/resources/fine_tuning.py +1033 -0
- together/resources/hardware.py +181 -0
- together/resources/images.py +256 -108
- together/resources/jobs.py +214 -0
- together/resources/models.py +251 -44
- together/resources/rerank.py +190 -92
- together/resources/videos.py +374 -0
- together/types/__init__.py +66 -73
- together/types/audio/__init__.py +10 -0
- together/types/audio/speech_create_params.py +75 -0
- together/types/audio/transcription_create_params.py +54 -0
- together/types/audio/transcription_create_response.py +111 -0
- together/types/audio/translation_create_params.py +40 -0
- together/types/audio/translation_create_response.py +70 -0
- together/types/audio/voice_list_response.py +23 -0
- together/types/audio_speech_stream_chunk.py +16 -0
- together/types/autoscaling.py +13 -0
- together/types/autoscaling_param.py +15 -0
- together/types/batch_create_params.py +24 -0
- together/types/batch_create_response.py +14 -0
- together/types/batch_job.py +45 -0
- together/types/batch_list_response.py +10 -0
- together/types/chat/__init__.py +18 -0
- together/types/chat/chat_completion.py +60 -0
- together/types/chat/chat_completion_chunk.py +61 -0
- together/types/chat/chat_completion_structured_message_image_url_param.py +18 -0
- together/types/chat/chat_completion_structured_message_text_param.py +13 -0
- together/types/chat/chat_completion_structured_message_video_url_param.py +18 -0
- together/types/chat/chat_completion_usage.py +13 -0
- together/types/chat/chat_completion_warning.py +9 -0
- together/types/chat/completion_create_params.py +329 -0
- together/types/code_interpreter/__init__.py +5 -0
- together/types/code_interpreter/session_list_response.py +31 -0
- together/types/code_interpreter_execute_params.py +45 -0
- together/types/completion.py +42 -0
- together/types/completion_chunk.py +66 -0
- together/types/completion_create_params.py +138 -0
- together/types/dedicated_endpoint.py +44 -0
- together/types/embedding.py +24 -0
- together/types/embedding_create_params.py +31 -0
- together/types/endpoint_create_params.py +43 -0
- together/types/endpoint_list_avzones_response.py +11 -0
- together/types/endpoint_list_params.py +18 -0
- together/types/endpoint_list_response.py +41 -0
- together/types/endpoint_update_params.py +27 -0
- together/types/eval_create_params.py +263 -0
- together/types/eval_create_response.py +16 -0
- together/types/eval_list_params.py +21 -0
- together/types/eval_list_response.py +10 -0
- together/types/eval_status_response.py +100 -0
- together/types/evaluation_job.py +139 -0
- together/types/execute_response.py +108 -0
- together/types/file_delete_response.py +13 -0
- together/types/file_list.py +12 -0
- together/types/file_purpose.py +9 -0
- together/types/file_response.py +31 -0
- together/types/file_type.py +7 -0
- together/types/fine_tuning_cancel_response.py +194 -0
- together/types/fine_tuning_content_params.py +24 -0
- together/types/fine_tuning_delete_params.py +11 -0
- together/types/fine_tuning_delete_response.py +12 -0
- together/types/fine_tuning_list_checkpoints_response.py +21 -0
- together/types/fine_tuning_list_events_response.py +12 -0
- together/types/fine_tuning_list_response.py +199 -0
- together/types/finetune_event.py +41 -0
- together/types/finetune_event_type.py +33 -0
- together/types/finetune_response.py +177 -0
- together/types/hardware_list_params.py +16 -0
- together/types/hardware_list_response.py +58 -0
- together/types/image_data_b64.py +15 -0
- together/types/image_data_url.py +15 -0
- together/types/image_file.py +23 -0
- together/types/image_generate_params.py +85 -0
- together/types/job_list_response.py +47 -0
- together/types/job_retrieve_response.py +43 -0
- together/types/log_probs.py +18 -0
- together/types/model_list_response.py +10 -0
- together/types/model_object.py +42 -0
- together/types/model_upload_params.py +36 -0
- together/types/model_upload_response.py +23 -0
- together/types/rerank_create_params.py +36 -0
- together/types/rerank_create_response.py +36 -0
- together/types/tool_choice.py +23 -0
- together/types/tool_choice_param.py +23 -0
- together/types/tools_param.py +23 -0
- together/types/training_method_dpo.py +22 -0
- together/types/training_method_sft.py +18 -0
- together/types/video_create_params.py +86 -0
- together/types/video_job.py +57 -0
- together-2.0.0a8.dist-info/METADATA +680 -0
- together-2.0.0a8.dist-info/RECORD +164 -0
- {together-1.2.11.dist-info → together-2.0.0a8.dist-info}/WHEEL +1 -1
- together-2.0.0a8.dist-info/entry_points.txt +2 -0
- {together-1.2.11.dist-info → together-2.0.0a8.dist-info/licenses}/LICENSE +1 -1
- together/abstract/api_requestor.py +0 -723
- together/cli/api/chat.py +0 -276
- together/cli/api/completions.py +0 -119
- together/cli/api/finetune.py +0 -272
- together/cli/api/images.py +0 -82
- together/cli/api/models.py +0 -42
- together/client.py +0 -157
- together/constants.py +0 -31
- together/error.py +0 -191
- together/filemanager.py +0 -388
- together/legacy/__init__.py +0 -0
- together/legacy/base.py +0 -27
- together/legacy/complete.py +0 -93
- together/legacy/embeddings.py +0 -27
- together/legacy/files.py +0 -146
- together/legacy/finetune.py +0 -177
- together/legacy/images.py +0 -27
- together/legacy/models.py +0 -44
- together/resources/finetune.py +0 -489
- together/together_response.py +0 -50
- together/types/abstract.py +0 -26
- together/types/chat_completions.py +0 -171
- together/types/common.py +0 -65
- together/types/completions.py +0 -104
- together/types/embeddings.py +0 -35
- together/types/error.py +0 -16
- together/types/files.py +0 -89
- together/types/finetune.py +0 -265
- together/types/images.py +0 -42
- together/types/models.py +0 -44
- together/types/rerank.py +0 -43
- together/utils/api_helpers.py +0 -84
- together/utils/files.py +0 -204
- together/version.py +0 -6
- together-1.2.11.dist-info/METADATA +0 -408
- together-1.2.11.dist-info/RECORD +0 -58
- together-1.2.11.dist-info/entry_points.txt +0 -3
- /together/{abstract → lib/cli}/__init__.py +0 -0
- /together/{cli → lib/cli/api}/__init__.py +0 -0
- /together/{cli/api/__init__.py → py.typed} +0 -0
together/resources/finetune.py
DELETED
|
@@ -1,489 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
from together.abstract import api_requestor
|
|
6
|
-
from together.filemanager import DownloadManager
|
|
7
|
-
from together.together_response import TogetherResponse
|
|
8
|
-
from together.types import (
|
|
9
|
-
FinetuneDownloadResult,
|
|
10
|
-
FinetuneList,
|
|
11
|
-
FinetuneListEvents,
|
|
12
|
-
FinetuneRequest,
|
|
13
|
-
FinetuneResponse,
|
|
14
|
-
FullTrainingType,
|
|
15
|
-
LoRATrainingType,
|
|
16
|
-
TogetherClient,
|
|
17
|
-
TogetherRequest,
|
|
18
|
-
TrainingType,
|
|
19
|
-
)
|
|
20
|
-
from together.types.finetune import DownloadCheckpointType
|
|
21
|
-
from together.utils import log_warn, normalize_key
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class FineTuning:
|
|
25
|
-
def __init__(self, client: TogetherClient) -> None:
|
|
26
|
-
self._client = client
|
|
27
|
-
|
|
28
|
-
def create(
|
|
29
|
-
self,
|
|
30
|
-
*,
|
|
31
|
-
training_file: str,
|
|
32
|
-
model: str,
|
|
33
|
-
n_epochs: int = 1,
|
|
34
|
-
validation_file: str | None = "",
|
|
35
|
-
n_evals: int | None = 0,
|
|
36
|
-
n_checkpoints: int | None = 1,
|
|
37
|
-
batch_size: int | None = 16,
|
|
38
|
-
learning_rate: float | None = 0.00001,
|
|
39
|
-
lora: bool = False,
|
|
40
|
-
lora_r: int | None = 8,
|
|
41
|
-
lora_dropout: float | None = 0,
|
|
42
|
-
lora_alpha: float | None = 8,
|
|
43
|
-
lora_trainable_modules: str | None = "all-linear",
|
|
44
|
-
suffix: str | None = None,
|
|
45
|
-
wandb_api_key: str | None = None,
|
|
46
|
-
) -> FinetuneResponse:
|
|
47
|
-
"""
|
|
48
|
-
Method to initiate a fine-tuning job
|
|
49
|
-
|
|
50
|
-
Args:
|
|
51
|
-
training_file (str): File-ID of a file uploaded to the Together API
|
|
52
|
-
model (str): Name of the base model to run fine-tune job on
|
|
53
|
-
n_epochs (int, optional): Number of epochs for fine-tuning. Defaults to 1.
|
|
54
|
-
validation file (str, optional): File ID of a file uploaded to the Together API for validation.
|
|
55
|
-
n_evals (int, optional): Number of evaluation loops to run. Defaults to 0.
|
|
56
|
-
n_checkpoints (int, optional): Number of checkpoints to save during fine-tuning.
|
|
57
|
-
Defaults to 1.
|
|
58
|
-
batch_size (int, optional): Batch size for fine-tuning. Defaults to 32.
|
|
59
|
-
learning_rate (float, optional): Learning rate multiplier to use for training
|
|
60
|
-
Defaults to 0.00001.
|
|
61
|
-
lora (bool, optional): Whether to use LoRA adapters. Defaults to True.
|
|
62
|
-
lora_r (int, optional): Rank of LoRA adapters. Defaults to 8.
|
|
63
|
-
lora_dropout (float, optional): Dropout rate for LoRA adapters. Defaults to 0.
|
|
64
|
-
lora_alpha (float, optional): Alpha for LoRA adapters. Defaults to 8.
|
|
65
|
-
lora_trainable_modules (str, optional): Trainable modules for LoRA adapters. Defaults to "all-linear".
|
|
66
|
-
suffix (str, optional): Up to 40 character suffix that will be added to your fine-tuned model name.
|
|
67
|
-
Defaults to None.
|
|
68
|
-
wandb_api_key (str, optional): API key for Weights & Biases integration.
|
|
69
|
-
Defaults to None.
|
|
70
|
-
|
|
71
|
-
Returns:
|
|
72
|
-
FinetuneResponse: Object containing information about fine-tuning job.
|
|
73
|
-
"""
|
|
74
|
-
|
|
75
|
-
requestor = api_requestor.APIRequestor(
|
|
76
|
-
client=self._client,
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
training_type: TrainingType = FullTrainingType()
|
|
80
|
-
if lora:
|
|
81
|
-
training_type = LoRATrainingType(
|
|
82
|
-
lora_r=lora_r,
|
|
83
|
-
lora_alpha=lora_alpha,
|
|
84
|
-
lora_dropout=lora_dropout,
|
|
85
|
-
lora_trainable_modules=lora_trainable_modules,
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
parameter_payload = FinetuneRequest(
|
|
89
|
-
model=model,
|
|
90
|
-
training_file=training_file,
|
|
91
|
-
validation_file=validation_file,
|
|
92
|
-
n_epochs=n_epochs,
|
|
93
|
-
n_evals=n_evals,
|
|
94
|
-
n_checkpoints=n_checkpoints,
|
|
95
|
-
batch_size=batch_size,
|
|
96
|
-
learning_rate=learning_rate,
|
|
97
|
-
training_type=training_type,
|
|
98
|
-
suffix=suffix,
|
|
99
|
-
wandb_key=wandb_api_key,
|
|
100
|
-
).model_dump(exclude_none=True)
|
|
101
|
-
|
|
102
|
-
response, _, _ = requestor.request(
|
|
103
|
-
options=TogetherRequest(
|
|
104
|
-
method="POST",
|
|
105
|
-
url="fine-tunes",
|
|
106
|
-
params=parameter_payload,
|
|
107
|
-
),
|
|
108
|
-
stream=False,
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
assert isinstance(response, TogetherResponse)
|
|
112
|
-
|
|
113
|
-
# TODO: Remove it after the 21st of August
|
|
114
|
-
log_warn(
|
|
115
|
-
"The default value of batch size has been changed from 32 to 16 since together version >= 1.2.6"
|
|
116
|
-
)
|
|
117
|
-
|
|
118
|
-
# TODO: Remove after next LoRA default change
|
|
119
|
-
log_warn(
|
|
120
|
-
"Some of the jobs run _directly_ from the together-python library might be trained using LoRA adapters. "
|
|
121
|
-
"The version range when this change occurred is from 1.2.3 to 1.2.6."
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
return FinetuneResponse(**response.data)
|
|
125
|
-
|
|
126
|
-
def list(self) -> FinetuneList:
|
|
127
|
-
"""
|
|
128
|
-
Lists fine-tune job history
|
|
129
|
-
|
|
130
|
-
Returns:
|
|
131
|
-
FinetuneList: Object containing a list of fine-tune jobs
|
|
132
|
-
"""
|
|
133
|
-
|
|
134
|
-
requestor = api_requestor.APIRequestor(
|
|
135
|
-
client=self._client,
|
|
136
|
-
)
|
|
137
|
-
|
|
138
|
-
response, _, _ = requestor.request(
|
|
139
|
-
options=TogetherRequest(
|
|
140
|
-
method="GET",
|
|
141
|
-
url="fine-tunes",
|
|
142
|
-
),
|
|
143
|
-
stream=False,
|
|
144
|
-
)
|
|
145
|
-
|
|
146
|
-
assert isinstance(response, TogetherResponse)
|
|
147
|
-
|
|
148
|
-
return FinetuneList(**response.data)
|
|
149
|
-
|
|
150
|
-
def retrieve(self, id: str) -> FinetuneResponse:
|
|
151
|
-
"""
|
|
152
|
-
Retrieves fine-tune job details
|
|
153
|
-
|
|
154
|
-
Args:
|
|
155
|
-
id (str): Fine-tune ID to retrieve. A string that starts with `ft-`.
|
|
156
|
-
|
|
157
|
-
Returns:
|
|
158
|
-
FinetuneResponse: Object containing information about fine-tuning job.
|
|
159
|
-
"""
|
|
160
|
-
|
|
161
|
-
requestor = api_requestor.APIRequestor(
|
|
162
|
-
client=self._client,
|
|
163
|
-
)
|
|
164
|
-
|
|
165
|
-
response, _, _ = requestor.request(
|
|
166
|
-
options=TogetherRequest(
|
|
167
|
-
method="GET",
|
|
168
|
-
url=f"fine-tunes/{id}",
|
|
169
|
-
),
|
|
170
|
-
stream=False,
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
assert isinstance(response, TogetherResponse)
|
|
174
|
-
|
|
175
|
-
return FinetuneResponse(**response.data)
|
|
176
|
-
|
|
177
|
-
def cancel(self, id: str) -> FinetuneResponse:
|
|
178
|
-
"""
|
|
179
|
-
Method to cancel a running fine-tuning job
|
|
180
|
-
|
|
181
|
-
Args:
|
|
182
|
-
id (str): Fine-tune ID to cancel. A string that starts with `ft-`.
|
|
183
|
-
|
|
184
|
-
Returns:
|
|
185
|
-
FinetuneResponse: Object containing information about cancelled fine-tuning job.
|
|
186
|
-
"""
|
|
187
|
-
|
|
188
|
-
requestor = api_requestor.APIRequestor(
|
|
189
|
-
client=self._client,
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
response, _, _ = requestor.request(
|
|
193
|
-
options=TogetherRequest(
|
|
194
|
-
method="POST",
|
|
195
|
-
url=f"fine-tunes/{id}/cancel",
|
|
196
|
-
),
|
|
197
|
-
stream=False,
|
|
198
|
-
)
|
|
199
|
-
|
|
200
|
-
assert isinstance(response, TogetherResponse)
|
|
201
|
-
|
|
202
|
-
return FinetuneResponse(**response.data)
|
|
203
|
-
|
|
204
|
-
def list_events(self, id: str) -> FinetuneListEvents:
|
|
205
|
-
"""
|
|
206
|
-
Lists events of a fine-tune job
|
|
207
|
-
|
|
208
|
-
Args:
|
|
209
|
-
id (str): Fine-tune ID to list events for. A string that starts with `ft-`.
|
|
210
|
-
|
|
211
|
-
Returns:
|
|
212
|
-
FinetuneListEvents: Object containing list of fine-tune events
|
|
213
|
-
"""
|
|
214
|
-
|
|
215
|
-
requestor = api_requestor.APIRequestor(
|
|
216
|
-
client=self._client,
|
|
217
|
-
)
|
|
218
|
-
|
|
219
|
-
response, _, _ = requestor.request(
|
|
220
|
-
options=TogetherRequest(
|
|
221
|
-
method="GET",
|
|
222
|
-
url=f"fine-tunes/{id}/events",
|
|
223
|
-
),
|
|
224
|
-
stream=False,
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
assert isinstance(response, TogetherResponse)
|
|
228
|
-
|
|
229
|
-
return FinetuneListEvents(**response.data)
|
|
230
|
-
|
|
231
|
-
def download(
|
|
232
|
-
self,
|
|
233
|
-
id: str,
|
|
234
|
-
*,
|
|
235
|
-
output: Path | str | None = None,
|
|
236
|
-
checkpoint_step: int = -1,
|
|
237
|
-
checkpoint_type: DownloadCheckpointType = DownloadCheckpointType.DEFAULT,
|
|
238
|
-
) -> FinetuneDownloadResult:
|
|
239
|
-
"""
|
|
240
|
-
Downloads compressed fine-tuned model or checkpoint to local disk.
|
|
241
|
-
|
|
242
|
-
Defaults file location to `$PWD/{model_name}.{extension}`
|
|
243
|
-
|
|
244
|
-
Args:
|
|
245
|
-
id (str): Fine-tune ID to download. A string that starts with `ft-`.
|
|
246
|
-
output (pathlib.Path | str, optional): Specifies output file name for downloaded model.
|
|
247
|
-
Defaults to None.
|
|
248
|
-
checkpoint_step (int, optional): Specifies step number for checkpoint to download.
|
|
249
|
-
Defaults to -1 (download the final model)
|
|
250
|
-
checkpoint_type (CheckpointType, optional): Specifies which checkpoint to download.
|
|
251
|
-
Defaults to CheckpointType.DEFAULT.
|
|
252
|
-
|
|
253
|
-
Returns:
|
|
254
|
-
FinetuneDownloadResult: Object containing downloaded model metadata
|
|
255
|
-
"""
|
|
256
|
-
|
|
257
|
-
url = f"finetune/download?ft_id={id}"
|
|
258
|
-
|
|
259
|
-
if checkpoint_step > 0:
|
|
260
|
-
url += f"&checkpoint_step={checkpoint_step}"
|
|
261
|
-
|
|
262
|
-
ft_job = self.retrieve(id)
|
|
263
|
-
|
|
264
|
-
if isinstance(ft_job.training_type, FullTrainingType):
|
|
265
|
-
if checkpoint_type != DownloadCheckpointType.DEFAULT:
|
|
266
|
-
raise ValueError(
|
|
267
|
-
"Only DEFAULT checkpoint type is allowed for FullTrainingType"
|
|
268
|
-
)
|
|
269
|
-
url += f"&checkpoint=modelOutputPath"
|
|
270
|
-
elif isinstance(ft_job.training_type, LoRATrainingType):
|
|
271
|
-
if checkpoint_type == DownloadCheckpointType.DEFAULT:
|
|
272
|
-
checkpoint_type = DownloadCheckpointType.MERGED
|
|
273
|
-
|
|
274
|
-
if checkpoint_type == DownloadCheckpointType.MERGED:
|
|
275
|
-
url += f"&checkpoint={DownloadCheckpointType.MERGED.value}"
|
|
276
|
-
elif checkpoint_type == DownloadCheckpointType.ADAPTER:
|
|
277
|
-
url += f"&checkpoint={DownloadCheckpointType.ADAPTER.value}"
|
|
278
|
-
else:
|
|
279
|
-
raise ValueError(
|
|
280
|
-
f"Invalid checkpoint type for LoRATrainingType: {checkpoint_type}"
|
|
281
|
-
)
|
|
282
|
-
|
|
283
|
-
remote_name = ft_job.output_name
|
|
284
|
-
|
|
285
|
-
download_manager = DownloadManager(self._client)
|
|
286
|
-
|
|
287
|
-
if isinstance(output, str):
|
|
288
|
-
output = Path(output)
|
|
289
|
-
|
|
290
|
-
downloaded_filename, file_size = download_manager.download(
|
|
291
|
-
url, output, normalize_key(remote_name or id), fetch_metadata=True
|
|
292
|
-
)
|
|
293
|
-
|
|
294
|
-
return FinetuneDownloadResult(
|
|
295
|
-
object="local",
|
|
296
|
-
id=id,
|
|
297
|
-
checkpoint_step=checkpoint_step,
|
|
298
|
-
filename=downloaded_filename,
|
|
299
|
-
size=file_size,
|
|
300
|
-
)
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
class AsyncFineTuning:
|
|
304
|
-
def __init__(self, client: TogetherClient) -> None:
|
|
305
|
-
self._client = client
|
|
306
|
-
|
|
307
|
-
async def create(
|
|
308
|
-
self,
|
|
309
|
-
*,
|
|
310
|
-
training_file: str,
|
|
311
|
-
model: str,
|
|
312
|
-
n_epochs: int = 1,
|
|
313
|
-
validation_file: str | None = "",
|
|
314
|
-
n_evals: int = 0,
|
|
315
|
-
n_checkpoints: int | None = 1,
|
|
316
|
-
batch_size: int | None = 32,
|
|
317
|
-
learning_rate: float = 0.00001,
|
|
318
|
-
suffix: str | None = None,
|
|
319
|
-
wandb_api_key: str | None = None,
|
|
320
|
-
) -> FinetuneResponse:
|
|
321
|
-
"""
|
|
322
|
-
Async method to initiate a fine-tuning job
|
|
323
|
-
|
|
324
|
-
Args:
|
|
325
|
-
training_file (str): File-ID of a file uploaded to the Together API
|
|
326
|
-
model (str): Name of the base model to run fine-tune job on
|
|
327
|
-
n_epochs (int, optional): Number of epochs for fine-tuning. Defaults to 1.
|
|
328
|
-
validation file (str, optional): File ID of a file uploaded to the Together API for validation.
|
|
329
|
-
n_evals (int, optional): Number of evaluation loops to run. Defaults to 0.
|
|
330
|
-
n_checkpoints (int, optional): Number of checkpoints to save during fine-tuning.
|
|
331
|
-
Defaults to 1.
|
|
332
|
-
batch_size (int, optional): Batch size for fine-tuning. Defaults to 32.
|
|
333
|
-
learning_rate (float, optional): Learning rate multiplier to use for training
|
|
334
|
-
Defaults to 0.00001.
|
|
335
|
-
suffix (str, optional): Up to 40 character suffix that will be added to your fine-tuned model name.
|
|
336
|
-
Defaults to None.
|
|
337
|
-
wandb_api_key (str, optional): API key for Weights & Biases integration.
|
|
338
|
-
Defaults to None.
|
|
339
|
-
|
|
340
|
-
Returns:
|
|
341
|
-
FinetuneResponse: Object containing information about fine-tuning job.
|
|
342
|
-
"""
|
|
343
|
-
|
|
344
|
-
requestor = api_requestor.APIRequestor(
|
|
345
|
-
client=self._client,
|
|
346
|
-
)
|
|
347
|
-
|
|
348
|
-
parameter_payload = FinetuneRequest(
|
|
349
|
-
model=model,
|
|
350
|
-
training_file=training_file,
|
|
351
|
-
validation_file=validation_file,
|
|
352
|
-
n_epochs=n_epochs,
|
|
353
|
-
n_evals=n_evals,
|
|
354
|
-
n_checkpoints=n_checkpoints,
|
|
355
|
-
batch_size=batch_size,
|
|
356
|
-
learning_rate=learning_rate,
|
|
357
|
-
suffix=suffix,
|
|
358
|
-
wandb_key=wandb_api_key,
|
|
359
|
-
).model_dump(exclude_none=True)
|
|
360
|
-
|
|
361
|
-
response, _, _ = await requestor.arequest(
|
|
362
|
-
options=TogetherRequest(
|
|
363
|
-
method="POST",
|
|
364
|
-
url="fine-tunes",
|
|
365
|
-
params=parameter_payload,
|
|
366
|
-
),
|
|
367
|
-
stream=False,
|
|
368
|
-
)
|
|
369
|
-
|
|
370
|
-
assert isinstance(response, TogetherResponse)
|
|
371
|
-
|
|
372
|
-
return FinetuneResponse(**response.data)
|
|
373
|
-
|
|
374
|
-
async def list(self) -> FinetuneList:
|
|
375
|
-
"""
|
|
376
|
-
Async method to list fine-tune job history
|
|
377
|
-
|
|
378
|
-
Returns:
|
|
379
|
-
FinetuneList: Object containing a list of fine-tune jobs
|
|
380
|
-
"""
|
|
381
|
-
|
|
382
|
-
requestor = api_requestor.APIRequestor(
|
|
383
|
-
client=self._client,
|
|
384
|
-
)
|
|
385
|
-
|
|
386
|
-
response, _, _ = await requestor.arequest(
|
|
387
|
-
options=TogetherRequest(
|
|
388
|
-
method="GET",
|
|
389
|
-
url="fine-tunes",
|
|
390
|
-
),
|
|
391
|
-
stream=False,
|
|
392
|
-
)
|
|
393
|
-
|
|
394
|
-
assert isinstance(response, TogetherResponse)
|
|
395
|
-
|
|
396
|
-
return FinetuneList(**response.data)
|
|
397
|
-
|
|
398
|
-
async def retrieve(self, id: str) -> FinetuneResponse:
|
|
399
|
-
"""
|
|
400
|
-
Async method to retrieve fine-tune job details
|
|
401
|
-
|
|
402
|
-
Args:
|
|
403
|
-
id (str): Fine-tune ID to retrieve. A string that starts with `ft-`.
|
|
404
|
-
|
|
405
|
-
Returns:
|
|
406
|
-
FinetuneResponse: Object containing information about fine-tuning job.
|
|
407
|
-
"""
|
|
408
|
-
|
|
409
|
-
requestor = api_requestor.APIRequestor(
|
|
410
|
-
client=self._client,
|
|
411
|
-
)
|
|
412
|
-
|
|
413
|
-
response, _, _ = await requestor.arequest(
|
|
414
|
-
options=TogetherRequest(
|
|
415
|
-
method="GET",
|
|
416
|
-
url=f"fine-tunes/{id}",
|
|
417
|
-
),
|
|
418
|
-
stream=False,
|
|
419
|
-
)
|
|
420
|
-
|
|
421
|
-
assert isinstance(response, TogetherResponse)
|
|
422
|
-
|
|
423
|
-
return FinetuneResponse(**response.data)
|
|
424
|
-
|
|
425
|
-
async def cancel(self, id: str) -> FinetuneResponse:
|
|
426
|
-
"""
|
|
427
|
-
Async method to cancel a running fine-tuning job
|
|
428
|
-
|
|
429
|
-
Args:
|
|
430
|
-
id (str): Fine-tune ID to cancel. A string that starts with `ft-`.
|
|
431
|
-
|
|
432
|
-
Returns:
|
|
433
|
-
FinetuneResponse: Object containing information about cancelled fine-tuning job.
|
|
434
|
-
"""
|
|
435
|
-
|
|
436
|
-
requestor = api_requestor.APIRequestor(
|
|
437
|
-
client=self._client,
|
|
438
|
-
)
|
|
439
|
-
|
|
440
|
-
response, _, _ = await requestor.arequest(
|
|
441
|
-
options=TogetherRequest(
|
|
442
|
-
method="POST",
|
|
443
|
-
url=f"fine-tunes/{id}/cancel",
|
|
444
|
-
),
|
|
445
|
-
stream=False,
|
|
446
|
-
)
|
|
447
|
-
|
|
448
|
-
assert isinstance(response, TogetherResponse)
|
|
449
|
-
|
|
450
|
-
return FinetuneResponse(**response.data)
|
|
451
|
-
|
|
452
|
-
async def list_events(self, id: str) -> FinetuneListEvents:
|
|
453
|
-
"""
|
|
454
|
-
Async method to lists events of a fine-tune job
|
|
455
|
-
|
|
456
|
-
Args:
|
|
457
|
-
id (str): Fine-tune ID to list events for. A string that starts with `ft-`.
|
|
458
|
-
|
|
459
|
-
Returns:
|
|
460
|
-
FinetuneListEvents: Object containing list of fine-tune events
|
|
461
|
-
"""
|
|
462
|
-
|
|
463
|
-
requestor = api_requestor.APIRequestor(
|
|
464
|
-
client=self._client,
|
|
465
|
-
)
|
|
466
|
-
|
|
467
|
-
response, _, _ = await requestor.arequest(
|
|
468
|
-
options=TogetherRequest(
|
|
469
|
-
method="GET",
|
|
470
|
-
url=f"fine-tunes/{id}/events",
|
|
471
|
-
),
|
|
472
|
-
stream=False,
|
|
473
|
-
)
|
|
474
|
-
|
|
475
|
-
assert isinstance(response, TogetherResponse)
|
|
476
|
-
|
|
477
|
-
return FinetuneListEvents(**response.data)
|
|
478
|
-
|
|
479
|
-
async def download(
|
|
480
|
-
self, id: str, *, output: str | None = None, checkpoint_step: int = -1
|
|
481
|
-
) -> str:
|
|
482
|
-
"""
|
|
483
|
-
TODO: Implement async download method
|
|
484
|
-
"""
|
|
485
|
-
|
|
486
|
-
raise NotImplementedError(
|
|
487
|
-
"AsyncFineTuning.download not implemented. "
|
|
488
|
-
"Please use FineTuning.download function instead."
|
|
489
|
-
)
|
together/together_response.py
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import Any, Dict
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class TogetherResponse:
|
|
7
|
-
"""
|
|
8
|
-
API Response class. Stores headers and response data.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
def __init__(self, data: Dict[str, Any], headers: Dict[str, Any]):
|
|
12
|
-
self._headers = headers
|
|
13
|
-
self.data = data
|
|
14
|
-
|
|
15
|
-
@property
|
|
16
|
-
def request_id(self) -> str | None:
|
|
17
|
-
"""
|
|
18
|
-
Fetches request id from headers
|
|
19
|
-
"""
|
|
20
|
-
if "cf-ray" in self._headers:
|
|
21
|
-
return str(self._headers["cf-ray"])
|
|
22
|
-
return None
|
|
23
|
-
|
|
24
|
-
@property
|
|
25
|
-
def requests_remaining(self) -> int | None:
|
|
26
|
-
"""
|
|
27
|
-
Number of requests remaining at current rate limit
|
|
28
|
-
"""
|
|
29
|
-
if "x-ratelimit-remaining" in self._headers:
|
|
30
|
-
return int(self._headers["x-ratelimit-remaining"])
|
|
31
|
-
return None
|
|
32
|
-
|
|
33
|
-
@property
|
|
34
|
-
def processed_by(self) -> str | None:
|
|
35
|
-
"""
|
|
36
|
-
Processing host server name
|
|
37
|
-
"""
|
|
38
|
-
if "x-hostname" in self._headers:
|
|
39
|
-
return str(self._headers["x-hostname"])
|
|
40
|
-
return None
|
|
41
|
-
|
|
42
|
-
@property
|
|
43
|
-
def response_ms(self) -> int | None:
|
|
44
|
-
"""
|
|
45
|
-
Server request completion time
|
|
46
|
-
"""
|
|
47
|
-
if "x-total-time" in self._headers:
|
|
48
|
-
h = self._headers["x-total-time"]
|
|
49
|
-
return None if h is None else round(float(h))
|
|
50
|
-
return None
|
together/types/abstract.py
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from dataclasses import dataclass
|
|
4
|
-
from typing import Dict
|
|
5
|
-
|
|
6
|
-
import pydantic
|
|
7
|
-
from pydantic import ConfigDict
|
|
8
|
-
from typing_extensions import ClassVar
|
|
9
|
-
|
|
10
|
-
from together.constants import BASE_URL, MAX_RETRIES, TIMEOUT_SECS
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
PYDANTIC_V2 = pydantic.VERSION.startswith("2.")
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
@dataclass
|
|
17
|
-
class TogetherClient:
|
|
18
|
-
api_key: str | None = None
|
|
19
|
-
base_url: str | None = BASE_URL
|
|
20
|
-
timeout: float | None = TIMEOUT_SECS
|
|
21
|
-
max_retries: int | None = MAX_RETRIES
|
|
22
|
-
supplied_headers: Dict[str, str] | None = None
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class BaseModel(pydantic.BaseModel):
|
|
26
|
-
model_config: ClassVar[ConfigDict] = ConfigDict(extra="allow")
|