together 1.5.35__py3-none-any.whl → 2.0.0a7__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 (208) hide show
  1. together/__init__.py +101 -114
  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/{cli → lib/cli}/api/endpoints.py +66 -84
  30. together/{cli/api/evaluation.py → lib/cli/api/evals.py} +152 -43
  31. together/{cli → lib/cli}/api/files.py +20 -17
  32. together/{cli/api/finetune.py → lib/cli/api/fine_tuning.py} +116 -172
  33. together/{cli → lib/cli}/api/models.py +34 -27
  34. together/lib/cli/api/utils.py +50 -0
  35. together/{cli → lib/cli}/cli.py +16 -26
  36. together/{constants.py → lib/constants.py} +11 -24
  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 +397 -0
  44. together/{utils → lib/utils}/__init__.py +6 -14
  45. together/{utils → lib/utils}/_log.py +11 -16
  46. together/{utils → lib/utils}/files.py +90 -288
  47. together/lib/utils/serializer.py +10 -0
  48. together/{utils → lib/utils}/tools.py +19 -55
  49. together/resources/__init__.py +225 -39
  50. together/resources/audio/__init__.py +72 -48
  51. together/resources/audio/audio.py +198 -0
  52. together/resources/audio/speech.py +574 -128
  53. together/resources/audio/transcriptions.py +247 -261
  54. together/resources/audio/translations.py +221 -241
  55. together/resources/audio/voices.py +111 -41
  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 -263
  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 +884 -225
  64. together/resources/embeddings.py +172 -68
  65. together/resources/endpoints.py +589 -490
  66. together/resources/evals.py +452 -0
  67. together/resources/files.py +397 -129
  68. together/resources/fine_tuning.py +1033 -0
  69. together/resources/hardware.py +181 -0
  70. together/resources/images.py +258 -104
  71. together/resources/jobs.py +214 -0
  72. together/resources/models.py +223 -193
  73. together/resources/rerank.py +190 -92
  74. together/resources/videos.py +286 -214
  75. together/types/__init__.py +66 -167
  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_create_response.py +10 -0
  157. together/types/video_job.py +57 -0
  158. together-2.0.0a7.dist-info/METADATA +730 -0
  159. together-2.0.0a7.dist-info/RECORD +165 -0
  160. {together-1.5.35.dist-info → together-2.0.0a7.dist-info}/WHEEL +1 -1
  161. together-2.0.0a7.dist-info/entry_points.txt +2 -0
  162. {together-1.5.35.dist-info → together-2.0.0a7.dist-info}/licenses/LICENSE +1 -1
  163. together/abstract/api_requestor.py +0 -770
  164. together/cli/api/chat.py +0 -298
  165. together/cli/api/completions.py +0 -119
  166. together/cli/api/images.py +0 -93
  167. together/cli/api/utils.py +0 -139
  168. together/client.py +0 -186
  169. together/error.py +0 -194
  170. together/filemanager.py +0 -635
  171. together/legacy/__init__.py +0 -0
  172. together/legacy/base.py +0 -27
  173. together/legacy/complete.py +0 -93
  174. together/legacy/embeddings.py +0 -27
  175. together/legacy/files.py +0 -146
  176. together/legacy/finetune.py +0 -177
  177. together/legacy/images.py +0 -27
  178. together/legacy/models.py +0 -44
  179. together/resources/batch.py +0 -165
  180. together/resources/code_interpreter.py +0 -82
  181. together/resources/evaluation.py +0 -808
  182. together/resources/finetune.py +0 -1388
  183. together/together_response.py +0 -50
  184. together/types/abstract.py +0 -26
  185. together/types/audio_speech.py +0 -311
  186. together/types/batch.py +0 -54
  187. together/types/chat_completions.py +0 -210
  188. together/types/code_interpreter.py +0 -57
  189. together/types/common.py +0 -67
  190. together/types/completions.py +0 -107
  191. together/types/embeddings.py +0 -35
  192. together/types/endpoints.py +0 -123
  193. together/types/error.py +0 -16
  194. together/types/evaluation.py +0 -93
  195. together/types/files.py +0 -93
  196. together/types/finetune.py +0 -465
  197. together/types/images.py +0 -42
  198. together/types/models.py +0 -96
  199. together/types/rerank.py +0 -43
  200. together/types/videos.py +0 -69
  201. together/utils/api_helpers.py +0 -124
  202. together/version.py +0 -6
  203. together-1.5.35.dist-info/METADATA +0 -583
  204. together-1.5.35.dist-info/RECORD +0 -77
  205. together-1.5.35.dist-info/entry_points.txt +0 -3
  206. /together/{abstract → lib/cli}/__init__.py +0 -0
  207. /together/{cli → lib/cli/api}/__init__.py +0 -0
  208. /together/{cli/api/__init__.py → py.typed} +0 -0
@@ -1,10 +1,14 @@
1
1
  import json as json_lib
2
+ from typing import Any, Dict, List, Literal, Optional
2
3
 
3
4
  import click
4
5
  from tabulate import tabulate
5
6
 
6
- from together import Together
7
- from together.types.models import ModelObject, ModelUploadResponse
7
+ from together import Together, omit
8
+ from together._models import BaseModel
9
+ from together._response import APIResponse as APIResponse
10
+ from together.lib.resources.models import filter_by_dedicated_models
11
+ from together.types.model_upload_response import ModelUploadResponse
8
12
 
9
13
 
10
14
  @click.group()
@@ -26,16 +30,19 @@ def models(ctx: click.Context) -> None:
26
30
  help="Output in JSON format",
27
31
  )
28
32
  @click.pass_context
29
- def list(ctx: click.Context, type: str | None, json: bool) -> None:
33
+ def list(ctx: click.Context, type: Optional[str], json: bool) -> None:
30
34
  """List models"""
31
35
  client: Together = ctx.obj
32
36
 
33
- response = client.models.list(dedicated=(type == "dedicated"))
37
+ response = client.models.list()
38
+ models_list = response
34
39
 
35
- display_list = []
40
+ if type == "dedicated":
41
+ models_list = filter_by_dedicated_models(client, models_list)
36
42
 
37
- model: ModelObject
38
- for model in response:
43
+ display_list: List[Dict[str, Any]] = []
44
+ model: BaseModel
45
+ for model in models_list:
39
46
  display_list.append(
40
47
  {
41
48
  "ID": model.id,
@@ -44,8 +51,8 @@ def list(ctx: click.Context, type: str | None, json: bool) -> None:
44
51
  "Type": model.type,
45
52
  "Context Length": model.context_length,
46
53
  "License": model.license,
47
- "Input per 1M token": model.pricing.input,
48
- "Output per 1M token": model.pricing.output,
54
+ "Input per 1M token": model.pricing.input if model.pricing else None,
55
+ "Output per 1M token": model.pricing.output if model.pricing else None,
49
56
  }
50
57
  )
51
58
 
@@ -98,12 +105,12 @@ def upload(
98
105
  ctx: click.Context,
99
106
  model_name: str,
100
107
  model_source: str,
101
- model_type: str,
102
- hf_token: str | None,
103
- description: str | None,
104
- base_model: str | None,
105
- lora_model: str | None,
108
+ hf_token: Optional[str],
109
+ description: Optional[str],
110
+ base_model: Optional[str],
111
+ lora_model: Optional[str],
106
112
  json: bool,
113
+ model_type: Optional[Literal["model", "adapter"]] = "model",
107
114
  ) -> None:
108
115
  """Upload a custom model or adapter from Hugging Face or S3"""
109
116
  client: Together = ctx.obj
@@ -111,23 +118,23 @@ def upload(
111
118
  response: ModelUploadResponse = client.models.upload(
112
119
  model_name=model_name,
113
120
  model_source=model_source,
114
- model_type=model_type,
115
- hf_token=hf_token,
116
- description=description,
117
- base_model=base_model,
118
- lora_model=lora_model,
121
+ model_type=model_type or omit,
122
+ hf_token=hf_token or omit,
123
+ description=description or omit,
124
+ base_model=base_model or omit,
125
+ lora_model=lora_model or omit,
119
126
  )
120
127
 
121
128
  if json:
122
129
  click.echo(json_lib.dumps(response.model_dump(), indent=2))
123
130
  else:
124
131
  click.echo(f"Model upload job created successfully!")
125
- if response.job_id:
126
- click.echo(f"Job ID: {response.job_id}")
127
- if response.model_name:
128
- click.echo(f"Model Name: {response.model_name}")
129
- if response.model_id:
130
- click.echo(f"Model ID: {response.model_id}")
131
- if response.model_source:
132
- click.echo(f"Model Source: {response.model_source}")
132
+ if response.data.job_id:
133
+ click.echo(f"Job ID: {response.data.job_id}")
134
+ if response.data.x_model_name:
135
+ click.echo(f"Model Name: {response.data.x_model_name}")
136
+ if response.data.x_model_id:
137
+ click.echo(f"Model ID: {response.data.x_model_id}")
138
+ if response.data.x_model_source:
139
+ click.echo(f"Model Source: {response.data.x_model_source}")
133
140
  click.echo(f"Message: {response.message}")
@@ -0,0 +1,50 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Literal
4
+ from gettext import gettext as _
5
+ from typing_extensions import override
6
+
7
+ import click
8
+
9
+
10
+ class AutoIntParamType(click.ParamType):
11
+ name = "integer_or_max"
12
+ _number_class = int
13
+
14
+ @override
15
+ def convert(
16
+ self, value: str, param: click.Parameter | None, ctx: click.Context | None
17
+ ) -> int | Literal["max"] | None:
18
+ if value == "max":
19
+ return "max"
20
+ try:
21
+ return int(value)
22
+ except ValueError:
23
+ self.fail(
24
+ _("{value!r} is not a valid {number_type}.").format(value=value, number_type=self.name),
25
+ param,
26
+ ctx,
27
+ )
28
+
29
+
30
+ class BooleanWithAutoParamType(click.ParamType):
31
+ name = "boolean_or_auto"
32
+
33
+ @override
34
+ def convert(
35
+ self, value: str, param: click.Parameter | None, ctx: click.Context | None
36
+ ) -> bool | Literal["auto"] | None:
37
+ if value == "auto":
38
+ return "auto"
39
+ try:
40
+ return bool(value)
41
+ except ValueError:
42
+ self.fail(
43
+ _("{value!r} is not a valid {type}.").format(value=value, type=self.name),
44
+ param,
45
+ ctx,
46
+ )
47
+
48
+
49
+ INT_WITH_MAX = AutoIntParamType()
50
+ BOOL_WITH_AUTO = BooleanWithAutoParamType()
@@ -6,21 +6,19 @@ from typing import Any
6
6
  import click
7
7
 
8
8
  import together
9
- from together.cli.api.chat import chat, interactive
10
- from together.cli.api.completions import completions
11
- from together.cli.api.endpoints import endpoints
12
- from together.cli.api.evaluation import evaluation
13
- from together.cli.api.files import files
14
- from together.cli.api.finetune import fine_tuning
15
- from together.cli.api.images import images
16
- from together.cli.api.models import models
17
- from together.constants import MAX_RETRIES, TIMEOUT_SECS
9
+ from together._version import __version__
10
+ from together._constants import DEFAULT_TIMEOUT
11
+ from together.lib.cli.api.evals import evals
12
+ from together.lib.cli.api.files import files
13
+ from together.lib.cli.api.models import models
14
+ from together.lib.cli.api.endpoints import endpoints
15
+ from together.lib.cli.api.fine_tuning import fine_tuning
18
16
 
19
17
 
20
- def print_version(ctx: click.Context, params: Any, value: Any) -> None:
18
+ def print_version(ctx: click.Context, _params: Any, value: Any) -> None:
21
19
  if not value or ctx.resilient_parsing:
22
20
  return
23
- click.echo(f"Version {together.version}")
21
+ click.echo(f"Version {__version__}")
24
22
  ctx.exit()
25
23
 
26
24
 
@@ -32,16 +30,12 @@ def print_version(ctx: click.Context, params: Any, value: Any) -> None:
32
30
  help="API Key. Defaults to environment variable `TOGETHER_API_KEY`",
33
31
  default=os.getenv("TOGETHER_API_KEY"),
34
32
  )
35
- @click.option(
36
- "--base-url", type=str, help="API Base URL. Defaults to Together AI endpoint."
37
- )
38
- @click.option(
39
- "--timeout", type=int, help=f"Request timeout. Defaults to {TIMEOUT_SECS} seconds"
40
- )
33
+ @click.option("--base-url", type=str, help="API Base URL. Defaults to Together AI endpoint.")
34
+ @click.option("--timeout", type=int, help=f"Request timeout. Defaults to {DEFAULT_TIMEOUT} seconds")
41
35
  @click.option(
42
36
  "--max-retries",
43
37
  type=int,
44
- help=f"Maximum number of HTTP retries. Defaults to {MAX_RETRIES}.",
38
+ help=f"Maximum number of HTTP retries.",
45
39
  )
46
40
  @click.option(
47
41
  "--version",
@@ -57,25 +51,21 @@ def main(
57
51
  api_key: str | None,
58
52
  base_url: str | None,
59
53
  timeout: int | None,
60
- max_retries: int | None,
61
54
  debug: bool | None,
55
+ max_retries: int | None,
62
56
  ) -> None:
63
57
  """This is a sample CLI tool."""
64
- together.log = "debug" if debug else None
58
+ os.environ.setdefault("TOGETHER_LOG", "debug" if debug else "info")
65
59
  ctx.obj = together.Together(
66
- api_key=api_key, base_url=base_url, timeout=timeout, max_retries=max_retries
60
+ api_key=api_key, base_url=base_url, timeout=timeout, max_retries=max_retries if max_retries is not None else 0
67
61
  )
68
62
 
69
63
 
70
- main.add_command(chat)
71
- main.add_command(interactive)
72
- main.add_command(completions)
73
- main.add_command(images)
74
64
  main.add_command(files)
75
65
  main.add_command(fine_tuning)
76
66
  main.add_command(models)
77
67
  main.add_command(endpoints)
78
- main.add_command(evaluation)
68
+ main.add_command(evals)
79
69
 
80
70
  if __name__ == "__main__":
81
71
  main()
@@ -1,16 +1,15 @@
1
1
  import enum
2
2
 
3
-
4
3
  # Session constants
5
- TIMEOUT_SECS = 600
6
- MAX_SESSION_LIFETIME_SECS = 180
7
- MAX_CONNECTION_RETRIES = 2
8
- MAX_RETRIES = 5
9
- INITIAL_RETRY_DELAY = 0.5
10
- MAX_RETRY_DELAY = 8.0
4
+ # TIMEOUT_SECS = 600
5
+ # MAX_SESSION_LIFETIME_SECS = 180
6
+ # MAX_CONNECTION_RETRIES = 2
7
+ # MAX_RETRIES = 5
8
+ # INITIAL_RETRY_DELAY = 0.5
9
+ # MAX_RETRY_DELAY = 8.0
11
10
 
12
11
  # API defaults
13
- BASE_URL = "https://api.together.xyz/v1"
12
+ # BASE_URL = "https://api.together.xyz/v1"
14
13
 
15
14
  # Download defaults
16
15
  DOWNLOAD_BLOCK_SIZE = 10 * 1024 * 1024 # 10 MB
@@ -21,31 +20,19 @@ MAX_CONCURRENT_PARTS = 4 # Maximum concurrent parts for multipart upload
21
20
 
22
21
  # Multipart upload constants
23
22
  MIN_PART_SIZE_MB = 5 # Minimum part size (S3 requirement)
24
- TARGET_PART_SIZE_MB = 250 # Target part size
25
- MAX_MULTIPART_PARTS = 250 # Maximum parts per upload
23
+ TARGET_PART_SIZE_MB = 250 # Target part size for optimal performance
24
+ MAX_MULTIPART_PARTS = 250 # Maximum parts per upload (S3 limit)
26
25
  MULTIPART_UPLOAD_TIMEOUT = 300 # Timeout in seconds for uploading each part
27
26
  MULTIPART_THRESHOLD_GB = 5.0 # threshold for switching to multipart upload
28
27
 
29
- # maximum number of GB sized files we support finetuning for
30
- MAX_FILE_SIZE_GB = 50.1
31
-
32
-
33
- # Messages
34
- MISSING_API_KEY_MESSAGE = """TOGETHER_API_KEY not found.
35
- Please set it as an environment variable or set it as together.api_key
36
- Find your TOGETHER_API_KEY at https://api.together.xyz/settings/api-keys"""
37
-
38
28
  # Minimum number of samples required for fine-tuning file
39
29
  MIN_SAMPLES = 1
40
30
 
41
31
  # the number of bytes in a gigabyte, used to convert bytes to GB for readable comparison
42
32
  NUM_BYTES_IN_GB = 2**30
43
33
 
44
- # Multimodal limits
45
- MAX_IMAGES_PER_EXAMPLE = 10
46
- MAX_IMAGE_BYTES = 10 * 1024 * 1024 # 10MB
47
- # Max length = Header length + base64 factor (4/3) * image bytes
48
- MAX_BASE64_IMAGE_LENGTH = len("data:image/jpeg;base64,") + 4 * MAX_IMAGE_BYTES // 3
34
+ # maximum number of GB sized files we support finetuning for
35
+ MAX_FILE_SIZE_GB = 50.1
49
36
 
50
37
  # expected columns for Parquet files
51
38
  PARQUET_EXPECTED_COLUMNS = ["input_ids", "attention_mask", "labels"]
@@ -0,0 +1,11 @@
1
+ from .files import (
2
+ UploadManager,
3
+ DownloadManager,
4
+ AsyncUploadManager,
5
+ )
6
+
7
+ __all__ = [
8
+ "DownloadManager",
9
+ "UploadManager",
10
+ "AsyncUploadManager",
11
+ ]