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
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import Any, List, Union, Literal, Optional
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing_extensions import TypeAlias
|
|
5
|
+
|
|
6
|
+
from pydantic import Field, StrictBool
|
|
7
|
+
|
|
8
|
+
from ..._models import BaseModel
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FinetuneJobStatus(str, Enum):
|
|
12
|
+
"""
|
|
13
|
+
Possible fine-tune job status
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
STATUS_PENDING = "pending"
|
|
17
|
+
STATUS_QUEUED = "queued"
|
|
18
|
+
STATUS_RUNNING = "running"
|
|
19
|
+
STATUS_COMPRESSING = "compressing"
|
|
20
|
+
STATUS_UPLOADING = "uploading"
|
|
21
|
+
STATUS_CANCEL_REQUESTED = "cancel_requested"
|
|
22
|
+
STATUS_CANCELLED = "cancelled"
|
|
23
|
+
STATUS_ERROR = "error"
|
|
24
|
+
STATUS_USER_ERROR = "user_error"
|
|
25
|
+
STATUS_COMPLETED = "completed"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class FinetuneEventType(str, Enum):
|
|
29
|
+
"""
|
|
30
|
+
Fine-tune job event types
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
JOB_PENDING = "JOB_PENDING"
|
|
34
|
+
JOB_START = "JOB_START"
|
|
35
|
+
JOB_STOPPED = "JOB_STOPPED"
|
|
36
|
+
MODEL_DOWNLOADING = "MODEL_DOWNLOADING"
|
|
37
|
+
MODEL_DOWNLOAD_COMPLETE = "MODEL_DOWNLOAD_COMPLETE"
|
|
38
|
+
TRAINING_DATA_DOWNLOADING = "TRAINING_DATA_DOWNLOADING"
|
|
39
|
+
TRAINING_DATA_DOWNLOAD_COMPLETE = "TRAINING_DATA_DOWNLOAD_COMPLETE"
|
|
40
|
+
VALIDATION_DATA_DOWNLOADING = "VALIDATION_DATA_DOWNLOADING"
|
|
41
|
+
VALIDATION_DATA_DOWNLOAD_COMPLETE = "VALIDATION_DATA_DOWNLOAD_COMPLETE"
|
|
42
|
+
WANDB_INIT = "WANDB_INIT"
|
|
43
|
+
TRAINING_START = "TRAINING_START"
|
|
44
|
+
CHECKPOINT_SAVE = "CHECKPOINT_SAVE"
|
|
45
|
+
BILLING_LIMIT = "BILLING_LIMIT"
|
|
46
|
+
EPOCH_COMPLETE = "EPOCH_COMPLETE"
|
|
47
|
+
EVAL_COMPLETE = "EVAL_COMPLETE"
|
|
48
|
+
TRAINING_COMPLETE = "TRAINING_COMPLETE"
|
|
49
|
+
MODEL_COMPRESSING = "COMPRESSING_MODEL"
|
|
50
|
+
MODEL_COMPRESSION_COMPLETE = "MODEL_COMPRESSION_COMPLETE"
|
|
51
|
+
MODEL_UPLOADING = "MODEL_UPLOADING"
|
|
52
|
+
MODEL_UPLOAD_COMPLETE = "MODEL_UPLOAD_COMPLETE"
|
|
53
|
+
MODEL_UPLOADING_TO_HF = "MODEL_UPLOADING_TO_HF"
|
|
54
|
+
MODEL_UPLOAD_TO_HF_COMPLETE = "MODEL_UPLOAD_TO_HF_COMPLETE"
|
|
55
|
+
JOB_COMPLETE = "JOB_COMPLETE"
|
|
56
|
+
JOB_ERROR = "JOB_ERROR"
|
|
57
|
+
JOB_USER_ERROR = "JOB_USER_ERROR"
|
|
58
|
+
CANCEL_REQUESTED = "CANCEL_REQUESTED"
|
|
59
|
+
JOB_RESTARTED = "JOB_RESTARTED"
|
|
60
|
+
REFUND = "REFUND"
|
|
61
|
+
WARNING = "WARNING"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class FinetuneEventLevels(str, Enum):
|
|
65
|
+
"""
|
|
66
|
+
Fine-tune job event status levels
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
NULL = ""
|
|
70
|
+
INFO = "Info"
|
|
71
|
+
WARNING = "Warning"
|
|
72
|
+
ERROR = "Error"
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class FinetuneEvent(BaseModel):
|
|
76
|
+
"""
|
|
77
|
+
Fine-tune event type
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
# object type
|
|
81
|
+
object: Literal["fine-tune-event"]
|
|
82
|
+
# created at datetime stamp
|
|
83
|
+
created_at: Union[str, None] = None
|
|
84
|
+
# event log level
|
|
85
|
+
level: Union[FinetuneEventLevels, str, None] = None
|
|
86
|
+
# event message string
|
|
87
|
+
message: Union[str, None] = None
|
|
88
|
+
# event type
|
|
89
|
+
type: Union[FinetuneEventType, None] = None
|
|
90
|
+
# optional: model parameter count
|
|
91
|
+
param_count: Union[int, None] = None
|
|
92
|
+
# optional: dataset token count
|
|
93
|
+
token_count: Union[int, None] = None
|
|
94
|
+
# optional: weights & biases url
|
|
95
|
+
wandb_url: Union[str, None] = None
|
|
96
|
+
# event hash
|
|
97
|
+
hash: Union[str, None] = None
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class FullTrainingType(BaseModel):
|
|
101
|
+
"""
|
|
102
|
+
Training type for full fine-tuning
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
type: Union[Literal["Full"], Literal[""]] = "Full"
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class LoRATrainingType(BaseModel):
|
|
109
|
+
"""
|
|
110
|
+
Training type for LoRA adapters training
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
lora_r: int
|
|
114
|
+
lora_alpha: int
|
|
115
|
+
lora_dropout: float = 0.0
|
|
116
|
+
lora_trainable_modules: str = "all-linear"
|
|
117
|
+
type: Literal["Lora"] = "Lora"
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class UnknownTrainingType(BaseModel):
|
|
121
|
+
"""
|
|
122
|
+
Catch-all for unknown training types (forward compatibility).
|
|
123
|
+
Accepts any training type not explicitly defined.
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
type: str
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
TrainingType: TypeAlias = Union[
|
|
130
|
+
FullTrainingType,
|
|
131
|
+
LoRATrainingType,
|
|
132
|
+
UnknownTrainingType,
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class FinetuneFullTrainingLimits(BaseModel):
|
|
137
|
+
max_batch_size: int
|
|
138
|
+
max_batch_size_dpo: int = -1
|
|
139
|
+
min_batch_size: int
|
|
140
|
+
|
|
141
|
+
def __init__(self, **data: Any) -> None:
|
|
142
|
+
super().__init__(**data)
|
|
143
|
+
if self.max_batch_size_dpo == -1:
|
|
144
|
+
half_max = self.max_batch_size // 2
|
|
145
|
+
rounded_half_max = (half_max // 8) * 8
|
|
146
|
+
self.max_batch_size_dpo = max(self.min_batch_size, rounded_half_max)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
class FinetuneLoraTrainingLimits(FinetuneFullTrainingLimits):
|
|
150
|
+
max_rank: int
|
|
151
|
+
target_modules: List[str]
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
class TrainingMethodSFT(BaseModel):
|
|
155
|
+
"""
|
|
156
|
+
Training method type for SFT training
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
method: Literal["sft"] = "sft"
|
|
160
|
+
train_on_inputs: Union[StrictBool, Literal["auto"]] = "auto"
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class TrainingMethodDPO(BaseModel):
|
|
164
|
+
"""
|
|
165
|
+
Training method type for DPO training
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
method: Literal["dpo"] = "dpo"
|
|
169
|
+
dpo_beta: Union[float, None] = None
|
|
170
|
+
dpo_normalize_logratios_by_length: bool = False
|
|
171
|
+
dpo_reference_free: bool = False
|
|
172
|
+
rpo_alpha: Union[float, None] = None
|
|
173
|
+
simpo_gamma: Union[float, None] = None
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class TrainingMethodUnknown(BaseModel):
|
|
177
|
+
"""
|
|
178
|
+
Catch-all for unknown training methods (forward compatibility).
|
|
179
|
+
Accepts any training method not explicitly defined.
|
|
180
|
+
"""
|
|
181
|
+
|
|
182
|
+
method: str
|
|
183
|
+
|
|
184
|
+
TrainingMethod: TypeAlias = Union[
|
|
185
|
+
TrainingMethodSFT,
|
|
186
|
+
TrainingMethodDPO,
|
|
187
|
+
TrainingMethodUnknown,
|
|
188
|
+
]
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class FinetuneTrainingLimits(BaseModel):
|
|
192
|
+
max_num_epochs: int
|
|
193
|
+
max_learning_rate: float
|
|
194
|
+
min_learning_rate: float
|
|
195
|
+
full_training: Optional[FinetuneFullTrainingLimits] = None
|
|
196
|
+
lora_training: Optional[FinetuneLoraTrainingLimits] = None
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class LinearLRSchedulerArgs(BaseModel):
|
|
200
|
+
"""
|
|
201
|
+
Linear learning rate scheduler arguments
|
|
202
|
+
"""
|
|
203
|
+
|
|
204
|
+
min_lr_ratio: Union[float, None] = 0.0
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
class CosineLRSchedulerArgs(BaseModel):
|
|
208
|
+
"""
|
|
209
|
+
Cosine learning rate scheduler arguments
|
|
210
|
+
"""
|
|
211
|
+
|
|
212
|
+
min_lr_ratio: Union[float, None] = 0.0
|
|
213
|
+
num_cycles: Union[float, None] = 0.5
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class LinearLRScheduler(BaseModel):
|
|
217
|
+
"""
|
|
218
|
+
Linear learning rate scheduler
|
|
219
|
+
"""
|
|
220
|
+
|
|
221
|
+
lr_scheduler_type: Literal["linear"] = "linear"
|
|
222
|
+
lr_scheduler_args: Union[LinearLRSchedulerArgs, None] = None
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class CosineLRScheduler(BaseModel):
|
|
226
|
+
"""
|
|
227
|
+
Cosine learning rate scheduler
|
|
228
|
+
"""
|
|
229
|
+
|
|
230
|
+
lr_scheduler_type: Literal["cosine"] = "cosine"
|
|
231
|
+
lr_scheduler_args: Union[CosineLRSchedulerArgs, None] = None
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
class EmptyLRScheduler(BaseModel):
|
|
235
|
+
"""
|
|
236
|
+
Empty learning rate scheduler
|
|
237
|
+
|
|
238
|
+
Placeholder for old fine-tuning jobs with no lr_scheduler_type specified
|
|
239
|
+
"""
|
|
240
|
+
|
|
241
|
+
lr_scheduler_type: Literal[""]
|
|
242
|
+
lr_scheduler_args: None = None
|
|
243
|
+
|
|
244
|
+
class UnknownLRScheduler(BaseModel):
|
|
245
|
+
"""
|
|
246
|
+
Unknown learning rate scheduler
|
|
247
|
+
|
|
248
|
+
Catch-all for unknown LR scheduler types (forward compatibility)
|
|
249
|
+
"""
|
|
250
|
+
|
|
251
|
+
lr_scheduler_type: str
|
|
252
|
+
lr_scheduler_args: Optional[Any] = None
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
FinetuneLRScheduler: TypeAlias = Union[
|
|
256
|
+
LinearLRScheduler,
|
|
257
|
+
CosineLRScheduler,
|
|
258
|
+
EmptyLRScheduler,
|
|
259
|
+
UnknownLRScheduler,
|
|
260
|
+
]
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
class FinetuneResponse(BaseModel):
|
|
264
|
+
"""
|
|
265
|
+
Fine-tune API response type
|
|
266
|
+
"""
|
|
267
|
+
|
|
268
|
+
id: str
|
|
269
|
+
"""Unique identifier for the fine-tune job"""
|
|
270
|
+
|
|
271
|
+
created_at: datetime
|
|
272
|
+
"""Creation timestamp of the fine-tune job"""
|
|
273
|
+
|
|
274
|
+
status: Optional[Union[FinetuneJobStatus, str]] = None
|
|
275
|
+
"""Status of the fine-tune job (accepts known enum values or string for forward compatibility)"""
|
|
276
|
+
|
|
277
|
+
updated_at: datetime
|
|
278
|
+
"""Last update timestamp of the fine-tune job"""
|
|
279
|
+
|
|
280
|
+
batch_size: Optional[int] = None
|
|
281
|
+
"""Batch size used for training"""
|
|
282
|
+
|
|
283
|
+
events: Optional[List[Union[FinetuneEvent, str]]] = None
|
|
284
|
+
"""Events related to this fine-tune job (accepts known enum values or string for forward compatibility)"""
|
|
285
|
+
|
|
286
|
+
from_checkpoint: Optional[str] = None
|
|
287
|
+
"""Checkpoint used to continue training"""
|
|
288
|
+
|
|
289
|
+
from_hf_model: Optional[str] = None
|
|
290
|
+
"""Hugging Face Hub repo to start training from"""
|
|
291
|
+
|
|
292
|
+
hf_model_revision: Optional[str] = None
|
|
293
|
+
"""The revision of the Hugging Face Hub model to continue training from"""
|
|
294
|
+
|
|
295
|
+
learning_rate: Optional[float] = None
|
|
296
|
+
"""Learning rate used for training"""
|
|
297
|
+
|
|
298
|
+
lr_scheduler: Optional[FinetuneLRScheduler] = None
|
|
299
|
+
"""Learning rate scheduler configuration"""
|
|
300
|
+
|
|
301
|
+
max_grad_norm: Optional[float] = None
|
|
302
|
+
"""Maximum gradient norm for clipping"""
|
|
303
|
+
|
|
304
|
+
model: Optional[str] = None
|
|
305
|
+
"""Base model used for fine-tuning"""
|
|
306
|
+
|
|
307
|
+
output_name: Optional[str] = Field(alias="model_output_name")
|
|
308
|
+
"""Output model name"""
|
|
309
|
+
|
|
310
|
+
adapter_output_name: Optional[str]
|
|
311
|
+
"""Adapter output name"""
|
|
312
|
+
|
|
313
|
+
n_checkpoints: Optional[int] = None
|
|
314
|
+
"""Number of checkpoints saved during training"""
|
|
315
|
+
|
|
316
|
+
n_epochs: Optional[int] = None
|
|
317
|
+
"""Number of training epochs"""
|
|
318
|
+
|
|
319
|
+
n_evals: Optional[int] = None
|
|
320
|
+
"""Number of evaluations during training"""
|
|
321
|
+
|
|
322
|
+
owner_address: Optional[str] = None
|
|
323
|
+
"""Owner address information"""
|
|
324
|
+
|
|
325
|
+
suffix: Optional[str] = None
|
|
326
|
+
"""Suffix added to the fine-tuned model name"""
|
|
327
|
+
|
|
328
|
+
token_count: Optional[int] = None
|
|
329
|
+
"""Count of tokens processed"""
|
|
330
|
+
|
|
331
|
+
total_price: Optional[int] = None
|
|
332
|
+
"""Total price for the fine-tuning job"""
|
|
333
|
+
|
|
334
|
+
training_file: Optional[str] = None
|
|
335
|
+
"""File-ID of the training file"""
|
|
336
|
+
|
|
337
|
+
training_method: Optional[TrainingMethod] = None
|
|
338
|
+
"""Method of training used"""
|
|
339
|
+
|
|
340
|
+
training_type: Optional[TrainingType] = None
|
|
341
|
+
"""Type of training used (full or LoRA)"""
|
|
342
|
+
|
|
343
|
+
user_id: Optional[str] = None
|
|
344
|
+
"""Identifier for the user who created the job"""
|
|
345
|
+
|
|
346
|
+
validation_file: Optional[str] = None
|
|
347
|
+
"""File-ID of the validation file"""
|
|
348
|
+
|
|
349
|
+
wandb_name: Optional[str] = None
|
|
350
|
+
"""Weights & Biases run name"""
|
|
351
|
+
|
|
352
|
+
wandb_project_name: Optional[str] = None
|
|
353
|
+
"""Weights & Biases project name"""
|
|
354
|
+
|
|
355
|
+
wandb_base_url: Union[str, None] = None
|
|
356
|
+
"""Weights & Biases base URL"""
|
|
357
|
+
|
|
358
|
+
wandb_url: Union[str, None] = None
|
|
359
|
+
"""Weights & Biases job URL"""
|
|
360
|
+
|
|
361
|
+
warmup_ratio: Optional[float] = None
|
|
362
|
+
"""Ratio of warmup steps"""
|
|
363
|
+
|
|
364
|
+
weight_decay: Optional[float] = None
|
|
365
|
+
"""Weight decay value used"""
|
|
366
|
+
|
|
367
|
+
eval_steps: Union[int, None] = None
|
|
368
|
+
"""number of steps between evals"""
|
|
369
|
+
|
|
370
|
+
job_id: Optional[str] = None
|
|
371
|
+
"""Job ID"""
|
|
372
|
+
|
|
373
|
+
param_count: Optional[int] = None
|
|
374
|
+
"""Model parameter count"""
|
|
375
|
+
|
|
376
|
+
total_steps: Optional[int] = None
|
|
377
|
+
"""Total number of training steps"""
|
|
378
|
+
|
|
379
|
+
steps_completed: Union[int, None] = None
|
|
380
|
+
"""Number of steps completed (incrementing counter)"""
|
|
381
|
+
|
|
382
|
+
epochs_completed: Union[int, None] = None
|
|
383
|
+
"""Number of epochs completed (incrementing counter)"""
|
|
384
|
+
|
|
385
|
+
evals_completed: Union[int, None] = None
|
|
386
|
+
"""Number of evaluation loops completed (incrementing counter)"""
|
|
387
|
+
|
|
388
|
+
queue_depth: Union[int, None] = None
|
|
389
|
+
"""Place in job queue (decrementing counter)"""
|
|
390
|
+
|
|
391
|
+
# # training file metadata
|
|
392
|
+
training_file_num_lines: Optional[int] = Field(None, alias="TrainingFileNumLines")
|
|
393
|
+
training_file_size: Optional[int] = Field(None, alias="TrainingFileSize")
|
|
394
|
+
train_on_inputs: Union[StrictBool, Literal["auto"], None] = "auto"
|
|
395
|
+
|
|
396
|
+
@classmethod
|
|
397
|
+
def validate_training_type(cls, v: TrainingType) -> TrainingType:
|
|
398
|
+
if v.type == "Full" or v.type == "":
|
|
399
|
+
return FullTrainingType(**v.model_dump())
|
|
400
|
+
elif v.type == "Lora":
|
|
401
|
+
return LoRATrainingType(**v.model_dump())
|
|
402
|
+
else:
|
|
403
|
+
raise ValueError("Unknown training type")
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
class FinetuneRequest(BaseModel):
|
|
407
|
+
"""
|
|
408
|
+
Fine-tune request type
|
|
409
|
+
"""
|
|
410
|
+
|
|
411
|
+
# training file ID
|
|
412
|
+
training_file: str
|
|
413
|
+
# validation file id
|
|
414
|
+
validation_file: Union[str, None] = None
|
|
415
|
+
# base model string
|
|
416
|
+
model: Union[str, None] = None
|
|
417
|
+
# number of epochs to train for
|
|
418
|
+
n_epochs: int
|
|
419
|
+
# training learning rate
|
|
420
|
+
learning_rate: float
|
|
421
|
+
# learning rate scheduler type and args
|
|
422
|
+
lr_scheduler: Union[FinetuneLRScheduler, None] = None
|
|
423
|
+
# learning rate warmup ratio
|
|
424
|
+
warmup_ratio: float
|
|
425
|
+
# max gradient norm
|
|
426
|
+
max_grad_norm: float
|
|
427
|
+
# weight decay
|
|
428
|
+
weight_decay: float
|
|
429
|
+
# number of checkpoints to save
|
|
430
|
+
n_checkpoints: Union[int, None] = None
|
|
431
|
+
# number of evaluation loops to run
|
|
432
|
+
n_evals: Union[int, None] = None
|
|
433
|
+
# training batch size
|
|
434
|
+
batch_size: Union[int, Literal["max"], None] = None
|
|
435
|
+
# up to 40 character suffix for output model name
|
|
436
|
+
suffix: Union[str, None] = None
|
|
437
|
+
# weights & biases api key
|
|
438
|
+
wandb_key: Union[str, None] = None
|
|
439
|
+
# weights & biases base url
|
|
440
|
+
wandb_base_url: Union[str, None] = None
|
|
441
|
+
# wandb project name
|
|
442
|
+
wandb_project_name: Union[str, None] = None
|
|
443
|
+
# wandb run name
|
|
444
|
+
wandb_name: Union[str, None] = None
|
|
445
|
+
# training type
|
|
446
|
+
training_type: Union[TrainingType, None] = None
|
|
447
|
+
# training method
|
|
448
|
+
training_method: TrainingMethod = Field(default_factory=TrainingMethodSFT)
|
|
449
|
+
# from step
|
|
450
|
+
from_checkpoint: Union[str, None] = None
|
|
451
|
+
from_hf_model: Union[str, None] = None
|
|
452
|
+
hf_model_revision: Union[str, None] = None
|
|
453
|
+
# hf related fields
|
|
454
|
+
hf_api_token: Union[str, None] = None
|
|
455
|
+
hf_output_repo_name: Union[str, None] = None
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
from
|
|
2
|
-
from
|
|
3
|
-
from
|
|
4
|
-
from together.utils.tools import (
|
|
1
|
+
from ._log import logfmt, log_info, log_warn, log_debug, log_warn_once
|
|
2
|
+
from .files import check_file
|
|
3
|
+
from .tools import (
|
|
5
4
|
convert_bytes,
|
|
5
|
+
normalize_key,
|
|
6
|
+
parse_timestamp,
|
|
6
7
|
convert_unix_timestamp,
|
|
7
8
|
enforce_trailing_slash,
|
|
8
9
|
finetune_price_to_dollars,
|
|
9
|
-
normalize_key,
|
|
10
|
-
parse_timestamp,
|
|
11
10
|
)
|
|
12
11
|
|
|
13
|
-
|
|
14
12
|
__all__ = [
|
|
15
|
-
"check_file",
|
|
16
|
-
"get_headers",
|
|
17
|
-
"default_api_key",
|
|
18
13
|
"log_debug",
|
|
19
14
|
"log_info",
|
|
20
15
|
"log_warn",
|
|
16
|
+
"log_warn_once",
|
|
21
17
|
"logfmt",
|
|
18
|
+
"check_file",
|
|
22
19
|
"enforce_trailing_slash",
|
|
23
20
|
"normalize_key",
|
|
24
21
|
"parse_timestamp",
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import logging
|
|
4
3
|
import os
|
|
5
4
|
import re
|
|
6
5
|
import sys
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import together
|
|
10
|
-
|
|
6
|
+
import logging
|
|
7
|
+
from typing import Any, Set, Dict
|
|
11
8
|
|
|
12
|
-
logger = logging.getLogger("together")
|
|
9
|
+
logger: logging.Logger = logging.getLogger("together")
|
|
13
10
|
|
|
14
11
|
TOGETHER_LOG = os.environ.get("TOGETHER_LOG")
|
|
15
12
|
|
|
13
|
+
WARNING_MESSAGES_ONCE: Set[str] = set()
|
|
14
|
+
|
|
16
15
|
|
|
17
16
|
def _console_log_level() -> str | None:
|
|
18
|
-
if
|
|
19
|
-
return together.log
|
|
20
|
-
elif TOGETHER_LOG in ["debug", "info"]:
|
|
17
|
+
if TOGETHER_LOG in ["debug", "info"]:
|
|
21
18
|
return TOGETHER_LOG
|
|
22
19
|
else:
|
|
23
20
|
return None
|
|
@@ -44,18 +41,26 @@ def logfmt(props: Dict[str, Any]) -> str:
|
|
|
44
41
|
def log_debug(message: str | Any, **params: Any) -> None:
|
|
45
42
|
msg = logfmt(dict(message=message, **params))
|
|
46
43
|
if _console_log_level() == "debug":
|
|
47
|
-
print(msg, file=sys.stderr)
|
|
44
|
+
print(msg, file=sys.stderr) # noqa
|
|
48
45
|
logger.debug(msg)
|
|
49
46
|
|
|
50
47
|
|
|
51
48
|
def log_info(message: str | Any, **params: Any) -> None:
|
|
52
49
|
msg = logfmt(dict(message=message, **params))
|
|
53
50
|
if _console_log_level() in ["debug", "info"]:
|
|
54
|
-
print(msg, file=sys.stderr)
|
|
51
|
+
print(msg, file=sys.stderr) # noqa
|
|
55
52
|
logger.info(msg)
|
|
56
53
|
|
|
57
54
|
|
|
58
55
|
def log_warn(message: str | Any, **params: Any) -> None:
|
|
59
56
|
msg = logfmt(dict(message=message, **params))
|
|
60
|
-
print(msg, file=sys.stderr)
|
|
61
|
-
logger.
|
|
57
|
+
print(msg, file=sys.stderr) # noqa
|
|
58
|
+
logger.warning(msg)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def log_warn_once(message: str | Any, **params: Any) -> None:
|
|
62
|
+
msg = logfmt(dict(message=message, **params))
|
|
63
|
+
if msg not in WARNING_MESSAGES_ONCE:
|
|
64
|
+
print(msg, file=sys.stderr) # noqa
|
|
65
|
+
logger.warning(msg)
|
|
66
|
+
WARNING_MESSAGES_ONCE.add(msg)
|