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
@@ -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
- )
@@ -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
@@ -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")