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.
Files changed (201) hide show
  1. together/__init__.py +101 -63
  2. together/_base_client.py +1995 -0
  3. together/_client.py +1033 -0
  4. together/_compat.py +219 -0
  5. together/_constants.py +14 -0
  6. together/_exceptions.py +108 -0
  7. together/_files.py +123 -0
  8. together/_models.py +857 -0
  9. together/_qs.py +150 -0
  10. together/_resource.py +43 -0
  11. together/_response.py +830 -0
  12. together/_streaming.py +370 -0
  13. together/_types.py +260 -0
  14. together/_utils/__init__.py +64 -0
  15. together/_utils/_compat.py +45 -0
  16. together/_utils/_datetime_parse.py +136 -0
  17. together/_utils/_logs.py +25 -0
  18. together/_utils/_proxy.py +65 -0
  19. together/_utils/_reflection.py +42 -0
  20. together/_utils/_resources_proxy.py +24 -0
  21. together/_utils/_streams.py +12 -0
  22. together/_utils/_sync.py +58 -0
  23. together/_utils/_transform.py +457 -0
  24. together/_utils/_typing.py +156 -0
  25. together/_utils/_utils.py +421 -0
  26. together/_version.py +4 -0
  27. together/lib/.keep +4 -0
  28. together/lib/__init__.py +23 -0
  29. together/lib/cli/api/endpoints.py +467 -0
  30. together/lib/cli/api/evals.py +588 -0
  31. together/{cli → lib/cli}/api/files.py +20 -17
  32. together/lib/cli/api/fine_tuning.py +566 -0
  33. together/lib/cli/api/models.py +140 -0
  34. together/lib/cli/api/utils.py +50 -0
  35. together/{cli → lib/cli}/cli.py +17 -23
  36. together/lib/constants.py +61 -0
  37. together/lib/resources/__init__.py +11 -0
  38. together/lib/resources/files.py +999 -0
  39. together/lib/resources/fine_tuning.py +280 -0
  40. together/lib/resources/models.py +35 -0
  41. together/lib/types/__init__.py +13 -0
  42. together/lib/types/error.py +9 -0
  43. together/lib/types/fine_tuning.py +455 -0
  44. together/{utils → lib/utils}/__init__.py +7 -10
  45. together/{utils → lib/utils}/_log.py +18 -13
  46. together/lib/utils/files.py +628 -0
  47. together/lib/utils/serializer.py +10 -0
  48. together/{utils → lib/utils}/tools.py +17 -2
  49. together/resources/__init__.py +225 -24
  50. together/resources/audio/__init__.py +75 -0
  51. together/resources/audio/audio.py +198 -0
  52. together/resources/audio/speech.py +605 -0
  53. together/resources/audio/transcriptions.py +282 -0
  54. together/resources/audio/translations.py +256 -0
  55. together/resources/audio/voices.py +135 -0
  56. together/resources/batches.py +417 -0
  57. together/resources/chat/__init__.py +30 -21
  58. together/resources/chat/chat.py +102 -0
  59. together/resources/chat/completions.py +1063 -257
  60. together/resources/code_interpreter/__init__.py +33 -0
  61. together/resources/code_interpreter/code_interpreter.py +258 -0
  62. together/resources/code_interpreter/sessions.py +135 -0
  63. together/resources/completions.py +890 -225
  64. together/resources/embeddings.py +172 -68
  65. together/resources/endpoints.py +711 -0
  66. together/resources/evals.py +452 -0
  67. together/resources/files.py +397 -120
  68. together/resources/fine_tuning.py +1033 -0
  69. together/resources/hardware.py +181 -0
  70. together/resources/images.py +256 -108
  71. together/resources/jobs.py +214 -0
  72. together/resources/models.py +251 -44
  73. together/resources/rerank.py +190 -92
  74. together/resources/videos.py +374 -0
  75. together/types/__init__.py +66 -73
  76. together/types/audio/__init__.py +10 -0
  77. together/types/audio/speech_create_params.py +75 -0
  78. together/types/audio/transcription_create_params.py +54 -0
  79. together/types/audio/transcription_create_response.py +111 -0
  80. together/types/audio/translation_create_params.py +40 -0
  81. together/types/audio/translation_create_response.py +70 -0
  82. together/types/audio/voice_list_response.py +23 -0
  83. together/types/audio_speech_stream_chunk.py +16 -0
  84. together/types/autoscaling.py +13 -0
  85. together/types/autoscaling_param.py +15 -0
  86. together/types/batch_create_params.py +24 -0
  87. together/types/batch_create_response.py +14 -0
  88. together/types/batch_job.py +45 -0
  89. together/types/batch_list_response.py +10 -0
  90. together/types/chat/__init__.py +18 -0
  91. together/types/chat/chat_completion.py +60 -0
  92. together/types/chat/chat_completion_chunk.py +61 -0
  93. together/types/chat/chat_completion_structured_message_image_url_param.py +18 -0
  94. together/types/chat/chat_completion_structured_message_text_param.py +13 -0
  95. together/types/chat/chat_completion_structured_message_video_url_param.py +18 -0
  96. together/types/chat/chat_completion_usage.py +13 -0
  97. together/types/chat/chat_completion_warning.py +9 -0
  98. together/types/chat/completion_create_params.py +329 -0
  99. together/types/code_interpreter/__init__.py +5 -0
  100. together/types/code_interpreter/session_list_response.py +31 -0
  101. together/types/code_interpreter_execute_params.py +45 -0
  102. together/types/completion.py +42 -0
  103. together/types/completion_chunk.py +66 -0
  104. together/types/completion_create_params.py +138 -0
  105. together/types/dedicated_endpoint.py +44 -0
  106. together/types/embedding.py +24 -0
  107. together/types/embedding_create_params.py +31 -0
  108. together/types/endpoint_create_params.py +43 -0
  109. together/types/endpoint_list_avzones_response.py +11 -0
  110. together/types/endpoint_list_params.py +18 -0
  111. together/types/endpoint_list_response.py +41 -0
  112. together/types/endpoint_update_params.py +27 -0
  113. together/types/eval_create_params.py +263 -0
  114. together/types/eval_create_response.py +16 -0
  115. together/types/eval_list_params.py +21 -0
  116. together/types/eval_list_response.py +10 -0
  117. together/types/eval_status_response.py +100 -0
  118. together/types/evaluation_job.py +139 -0
  119. together/types/execute_response.py +108 -0
  120. together/types/file_delete_response.py +13 -0
  121. together/types/file_list.py +12 -0
  122. together/types/file_purpose.py +9 -0
  123. together/types/file_response.py +31 -0
  124. together/types/file_type.py +7 -0
  125. together/types/fine_tuning_cancel_response.py +194 -0
  126. together/types/fine_tuning_content_params.py +24 -0
  127. together/types/fine_tuning_delete_params.py +11 -0
  128. together/types/fine_tuning_delete_response.py +12 -0
  129. together/types/fine_tuning_list_checkpoints_response.py +21 -0
  130. together/types/fine_tuning_list_events_response.py +12 -0
  131. together/types/fine_tuning_list_response.py +199 -0
  132. together/types/finetune_event.py +41 -0
  133. together/types/finetune_event_type.py +33 -0
  134. together/types/finetune_response.py +177 -0
  135. together/types/hardware_list_params.py +16 -0
  136. together/types/hardware_list_response.py +58 -0
  137. together/types/image_data_b64.py +15 -0
  138. together/types/image_data_url.py +15 -0
  139. together/types/image_file.py +23 -0
  140. together/types/image_generate_params.py +85 -0
  141. together/types/job_list_response.py +47 -0
  142. together/types/job_retrieve_response.py +43 -0
  143. together/types/log_probs.py +18 -0
  144. together/types/model_list_response.py +10 -0
  145. together/types/model_object.py +42 -0
  146. together/types/model_upload_params.py +36 -0
  147. together/types/model_upload_response.py +23 -0
  148. together/types/rerank_create_params.py +36 -0
  149. together/types/rerank_create_response.py +36 -0
  150. together/types/tool_choice.py +23 -0
  151. together/types/tool_choice_param.py +23 -0
  152. together/types/tools_param.py +23 -0
  153. together/types/training_method_dpo.py +22 -0
  154. together/types/training_method_sft.py +18 -0
  155. together/types/video_create_params.py +86 -0
  156. together/types/video_job.py +57 -0
  157. together-2.0.0a8.dist-info/METADATA +680 -0
  158. together-2.0.0a8.dist-info/RECORD +164 -0
  159. {together-1.2.11.dist-info → together-2.0.0a8.dist-info}/WHEEL +1 -1
  160. together-2.0.0a8.dist-info/entry_points.txt +2 -0
  161. {together-1.2.11.dist-info → together-2.0.0a8.dist-info/licenses}/LICENSE +1 -1
  162. together/abstract/api_requestor.py +0 -723
  163. together/cli/api/chat.py +0 -276
  164. together/cli/api/completions.py +0 -119
  165. together/cli/api/finetune.py +0 -272
  166. together/cli/api/images.py +0 -82
  167. together/cli/api/models.py +0 -42
  168. together/client.py +0 -157
  169. together/constants.py +0 -31
  170. together/error.py +0 -191
  171. together/filemanager.py +0 -388
  172. together/legacy/__init__.py +0 -0
  173. together/legacy/base.py +0 -27
  174. together/legacy/complete.py +0 -93
  175. together/legacy/embeddings.py +0 -27
  176. together/legacy/files.py +0 -146
  177. together/legacy/finetune.py +0 -177
  178. together/legacy/images.py +0 -27
  179. together/legacy/models.py +0 -44
  180. together/resources/finetune.py +0 -489
  181. together/together_response.py +0 -50
  182. together/types/abstract.py +0 -26
  183. together/types/chat_completions.py +0 -171
  184. together/types/common.py +0 -65
  185. together/types/completions.py +0 -104
  186. together/types/embeddings.py +0 -35
  187. together/types/error.py +0 -16
  188. together/types/files.py +0 -89
  189. together/types/finetune.py +0 -265
  190. together/types/images.py +0 -42
  191. together/types/models.py +0 -44
  192. together/types/rerank.py +0 -43
  193. together/utils/api_helpers.py +0 -84
  194. together/utils/files.py +0 -204
  195. together/version.py +0 -6
  196. together-1.2.11.dist-info/METADATA +0 -408
  197. together-1.2.11.dist-info/RECORD +0 -58
  198. together-1.2.11.dist-info/entry_points.txt +0 -3
  199. /together/{abstract → lib/cli}/__init__.py +0 -0
  200. /together/{cli → lib/cli/api}/__init__.py +0 -0
  201. /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 together.utils._log import log_debug, log_info, log_warn, logfmt
2
- from together.utils.api_helpers import default_api_key, get_headers
3
- from together.utils.files import check_file
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
- from typing import Any, Dict
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 together.log in ["debug", "info"]:
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.warn(msg)
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)