dashscope 1.8.0__py3-none-any.whl → 1.25.6__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 (110) hide show
  1. dashscope/__init__.py +61 -14
  2. dashscope/aigc/__init__.py +10 -3
  3. dashscope/aigc/chat_completion.py +282 -0
  4. dashscope/aigc/code_generation.py +145 -0
  5. dashscope/aigc/conversation.py +71 -12
  6. dashscope/aigc/generation.py +288 -16
  7. dashscope/aigc/image_synthesis.py +473 -31
  8. dashscope/aigc/multimodal_conversation.py +299 -14
  9. dashscope/aigc/video_synthesis.py +610 -0
  10. dashscope/api_entities/aiohttp_request.py +8 -5
  11. dashscope/api_entities/api_request_data.py +4 -2
  12. dashscope/api_entities/api_request_factory.py +68 -20
  13. dashscope/api_entities/base_request.py +20 -3
  14. dashscope/api_entities/chat_completion_types.py +344 -0
  15. dashscope/api_entities/dashscope_response.py +243 -15
  16. dashscope/api_entities/encryption.py +179 -0
  17. dashscope/api_entities/http_request.py +216 -62
  18. dashscope/api_entities/websocket_request.py +43 -34
  19. dashscope/app/__init__.py +5 -0
  20. dashscope/app/application.py +203 -0
  21. dashscope/app/application_response.py +246 -0
  22. dashscope/assistants/__init__.py +16 -0
  23. dashscope/assistants/assistant_types.py +175 -0
  24. dashscope/assistants/assistants.py +311 -0
  25. dashscope/assistants/files.py +197 -0
  26. dashscope/audio/__init__.py +4 -2
  27. dashscope/audio/asr/__init__.py +17 -1
  28. dashscope/audio/asr/asr_phrase_manager.py +203 -0
  29. dashscope/audio/asr/recognition.py +167 -27
  30. dashscope/audio/asr/transcription.py +107 -14
  31. dashscope/audio/asr/translation_recognizer.py +1006 -0
  32. dashscope/audio/asr/vocabulary.py +177 -0
  33. dashscope/audio/qwen_asr/__init__.py +7 -0
  34. dashscope/audio/qwen_asr/qwen_transcription.py +189 -0
  35. dashscope/audio/qwen_omni/__init__.py +11 -0
  36. dashscope/audio/qwen_omni/omni_realtime.py +524 -0
  37. dashscope/audio/qwen_tts/__init__.py +5 -0
  38. dashscope/audio/qwen_tts/speech_synthesizer.py +77 -0
  39. dashscope/audio/qwen_tts_realtime/__init__.py +10 -0
  40. dashscope/audio/qwen_tts_realtime/qwen_tts_realtime.py +355 -0
  41. dashscope/audio/tts/__init__.py +2 -0
  42. dashscope/audio/tts/speech_synthesizer.py +5 -0
  43. dashscope/audio/tts_v2/__init__.py +12 -0
  44. dashscope/audio/tts_v2/enrollment.py +179 -0
  45. dashscope/audio/tts_v2/speech_synthesizer.py +886 -0
  46. dashscope/cli.py +157 -37
  47. dashscope/client/base_api.py +652 -87
  48. dashscope/common/api_key.py +2 -0
  49. dashscope/common/base_type.py +135 -0
  50. dashscope/common/constants.py +13 -16
  51. dashscope/common/env.py +2 -0
  52. dashscope/common/error.py +58 -22
  53. dashscope/common/logging.py +2 -0
  54. dashscope/common/message_manager.py +2 -0
  55. dashscope/common/utils.py +276 -46
  56. dashscope/customize/__init__.py +0 -0
  57. dashscope/customize/customize_types.py +192 -0
  58. dashscope/customize/deployments.py +146 -0
  59. dashscope/customize/finetunes.py +234 -0
  60. dashscope/embeddings/__init__.py +5 -1
  61. dashscope/embeddings/batch_text_embedding.py +208 -0
  62. dashscope/embeddings/batch_text_embedding_response.py +65 -0
  63. dashscope/embeddings/multimodal_embedding.py +118 -10
  64. dashscope/embeddings/text_embedding.py +13 -1
  65. dashscope/{file.py → files.py} +19 -4
  66. dashscope/io/input_output.py +2 -0
  67. dashscope/model.py +11 -2
  68. dashscope/models.py +43 -0
  69. dashscope/multimodal/__init__.py +20 -0
  70. dashscope/multimodal/dialog_state.py +56 -0
  71. dashscope/multimodal/multimodal_constants.py +28 -0
  72. dashscope/multimodal/multimodal_dialog.py +648 -0
  73. dashscope/multimodal/multimodal_request_params.py +313 -0
  74. dashscope/multimodal/tingwu/__init__.py +10 -0
  75. dashscope/multimodal/tingwu/tingwu.py +80 -0
  76. dashscope/multimodal/tingwu/tingwu_realtime.py +579 -0
  77. dashscope/nlp/__init__.py +0 -0
  78. dashscope/nlp/understanding.py +64 -0
  79. dashscope/protocol/websocket.py +3 -0
  80. dashscope/rerank/__init__.py +0 -0
  81. dashscope/rerank/text_rerank.py +69 -0
  82. dashscope/resources/qwen.tiktoken +151643 -0
  83. dashscope/threads/__init__.py +26 -0
  84. dashscope/threads/messages/__init__.py +0 -0
  85. dashscope/threads/messages/files.py +113 -0
  86. dashscope/threads/messages/messages.py +220 -0
  87. dashscope/threads/runs/__init__.py +0 -0
  88. dashscope/threads/runs/runs.py +501 -0
  89. dashscope/threads/runs/steps.py +112 -0
  90. dashscope/threads/thread_types.py +665 -0
  91. dashscope/threads/threads.py +212 -0
  92. dashscope/tokenizers/__init__.py +7 -0
  93. dashscope/tokenizers/qwen_tokenizer.py +111 -0
  94. dashscope/tokenizers/tokenization.py +125 -0
  95. dashscope/tokenizers/tokenizer.py +45 -0
  96. dashscope/tokenizers/tokenizer_base.py +32 -0
  97. dashscope/utils/__init__.py +0 -0
  98. dashscope/utils/message_utils.py +838 -0
  99. dashscope/utils/oss_utils.py +243 -0
  100. dashscope/utils/param_utils.py +29 -0
  101. dashscope/version.py +3 -1
  102. {dashscope-1.8.0.dist-info → dashscope-1.25.6.dist-info}/METADATA +53 -50
  103. dashscope-1.25.6.dist-info/RECORD +112 -0
  104. {dashscope-1.8.0.dist-info → dashscope-1.25.6.dist-info}/WHEEL +1 -1
  105. {dashscope-1.8.0.dist-info → dashscope-1.25.6.dist-info}/entry_points.txt +0 -1
  106. {dashscope-1.8.0.dist-info → dashscope-1.25.6.dist-info/licenses}/LICENSE +2 -4
  107. dashscope/deployment.py +0 -129
  108. dashscope/finetune.py +0 -149
  109. dashscope-1.8.0.dist-info/RECORD +0 -49
  110. {dashscope-1.8.0.dist-info → dashscope-1.25.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,313 @@
1
+ from dataclasses import dataclass, field, asdict
2
+ import uuid
3
+
4
+
5
+ def get_random_uuid() -> str:
6
+ """生成并返回32位UUID字符串"""
7
+ return uuid.uuid4().hex
8
+
9
+
10
+ @dataclass
11
+ class DashHeader:
12
+ action: str
13
+ task_id: str = field(default=get_random_uuid())
14
+ streaming: str = field(default="duplex") # 默认为 duplex
15
+
16
+ def to_dict(self):
17
+ return {
18
+ "action": self.action,
19
+ "task_id": self.task_id,
20
+ "request_id": self.task_id,
21
+ "streaming": self.streaming
22
+ }
23
+
24
+
25
+ class DashPayloadParameters:
26
+ def to_dict(self):
27
+ pass
28
+
29
+
30
+ class DashPayloadInput:
31
+ def to_dict(self):
32
+ pass
33
+
34
+
35
+ @dataclass
36
+ class DashPayload:
37
+ task_group: str = field(default="aigc")
38
+ function: str = field(default="generation")
39
+ model: str = field(default="")
40
+ task: str = field(default="multimodal-generation")
41
+ parameters: DashPayloadParameters = field(default=None)
42
+ input: DashPayloadInput = field(default=None)
43
+
44
+ def to_dict(self):
45
+ payload = {
46
+ "task_group": self.task_group,
47
+ "function": self.function,
48
+ "model": self.model,
49
+ "task": self.task,
50
+ }
51
+
52
+ if self.parameters is not None:
53
+ payload["parameters"] = self.parameters.to_dict()
54
+
55
+ if self.input is not None:
56
+ payload["input"] = self.input.to_dict()
57
+
58
+ return payload
59
+
60
+
61
+ @dataclass
62
+ class RequestBodyInput(DashPayloadInput):
63
+ workspace_id: str
64
+ app_id: str
65
+ directive: str
66
+ dialog_id: str
67
+
68
+ def to_dict(self):
69
+ return {
70
+ "workspace_id": self.workspace_id,
71
+ "app_id": self.app_id,
72
+ "directive": self.directive,
73
+ "dialog_id": self.dialog_id
74
+ }
75
+ @dataclass
76
+ class AsrPostProcessing:
77
+ replace_words: list = field(default=None)
78
+
79
+ def to_dict(self):
80
+ if self.replace_words is None:
81
+ return None
82
+ if len(self.replace_words) == 0:
83
+ return None
84
+ return {
85
+ "replace_words": [word.to_dict() for word in self.replace_words]
86
+ }
87
+
88
+ @dataclass
89
+ class ReplaceWord:
90
+ source: str = field(default=None)
91
+ target: str = field(default=None)
92
+ match_mode: str = field(default=None)
93
+
94
+ def to_dict(self):
95
+ return {
96
+ "source": self.source,
97
+ "target": self.target,
98
+ "match_mode": self.match_mode
99
+ }
100
+
101
+ @dataclass
102
+ class Upstream:
103
+ """struct for upstream"""
104
+ audio_format: str = field(default="pcm") # 上行语音格式,默认pcm.支持pcm/opus
105
+ type: str = field(default="AudioOnly") # 上行类型:AudioOnly 仅语音通话; AudioAndVideo 上传视频
106
+ mode: str = field(default="tap2talk") # 客户端交互模式 push2talk/tap2talk/duplex
107
+ sample_rate: int = field(default=16000) # 音频采样率
108
+ vocabulary_id: str = field(default=None)
109
+ asr_post_processing: AsrPostProcessing = field(default=None)
110
+ pass_through_params: dict = field(default=None)
111
+
112
+ def to_dict(self):
113
+ upstream: dict = {
114
+ "type": self.type,
115
+ "mode": self.mode,
116
+ "audio_format": self.audio_format,
117
+ "sample_rate": self.sample_rate,
118
+ "vocabulary_id": self.vocabulary_id,
119
+ }
120
+ if self.asr_post_processing is not None:
121
+ upstream["asr_post_processing"] = self.asr_post_processing.to_dict()
122
+
123
+ if self.pass_through_params is not None:
124
+ upstream.update(self.pass_through_params)
125
+ return upstream
126
+
127
+
128
+ @dataclass
129
+ class Downstream:
130
+ # transcript 返回用户语音识别结果
131
+ # dialog 返回对话系统回答中间结果
132
+ # 可以设置多种,以逗号分割,默认为transcript
133
+ voice: str = field(default="") # 语音音色
134
+ sample_rate: int = field(default=0) # 语音音色 # 合成音频采样率
135
+ intermediate_text: str = field(default="transcript") # 控制返回给用户那些中间文本:
136
+ debug: bool = field(default=False) # 控制是否返回debug信息
137
+ # type_: str = field(default="Audio", metadata={"alias": "type"}) # 下行类型:Text:不需要下发语音;Audio:输出语音,默认值
138
+ audio_format: str = field(default="pcm") # 下行语音格式,默认pcm 。支持pcm/mp3
139
+ volume: int = field(default=50) # 语音音量 0-100
140
+ pitch_rate: int = field(default=100) # 语音语调 50-200
141
+ speech_rate: int = field(default=100) # 语音语速 50-200
142
+ pass_through_params: dict = field(default=None)
143
+
144
+ def to_dict(self):
145
+ stream: dict = {
146
+ "intermediate_text": self.intermediate_text,
147
+ "debug": self.debug,
148
+ # "type": self.type_,
149
+ "audio_format": self.audio_format,
150
+ "volume": self.volume,
151
+ "pitch_rate": self.pitch_rate,
152
+ "speech_rate": self.speech_rate
153
+ }
154
+ if self.voice != "":
155
+ stream["voice"] = self.voice
156
+ if self.sample_rate != 0:
157
+ stream["sample_rate"] = self.sample_rate
158
+ if self.pass_through_params is not None:
159
+ stream.update(self.pass_through_params)
160
+ return stream
161
+
162
+
163
+ @dataclass
164
+ class DialogAttributes:
165
+ agent_id: str = field(default=None)
166
+ prompt: str = field(default=None)
167
+ vocabulary_id: str = field(default=None)
168
+
169
+ def to_dict(self):
170
+ return {
171
+ "agent_id": self.agent_id,
172
+ "prompt": self.prompt,
173
+ "vocabulary_id": self.vocabulary_id
174
+ }
175
+
176
+
177
+ @dataclass
178
+ class Locations:
179
+ city_name: str = field(default=None)
180
+ latitude: str = field(default=None)
181
+ longitude: str = field(default=None)
182
+
183
+ def to_dict(self):
184
+ return {
185
+ "city_name": self.city_name,
186
+ "latitude": self.latitude,
187
+ "longitude": self.longitude
188
+ }
189
+
190
+
191
+ @dataclass
192
+ class Network:
193
+ ip: str = field(default=None)
194
+
195
+ def to_dict(self):
196
+ return {
197
+ "ip": self.ip
198
+ }
199
+
200
+
201
+ @dataclass
202
+ class Device:
203
+ uuid: str = field(default=None)
204
+
205
+ def to_dict(self):
206
+ return {
207
+ "uuid": self.uuid
208
+ }
209
+
210
+
211
+ @dataclass
212
+ class ClientInfo:
213
+ user_id: str
214
+ device: Device = field(default=None)
215
+ network: Network = field(default=None)
216
+ location: Locations = field(default=None)
217
+
218
+ def to_dict(self):
219
+ info = {
220
+ "user_id": self.user_id,
221
+ "sdk": "python"
222
+ }
223
+ if self.device is not None:
224
+ info["device"] = self.device.to_dict()
225
+ if self.network is not None:
226
+ info["network"] = self.network.to_dict()
227
+ if self.location is not None:
228
+ info["location"] = self.location.to_dict()
229
+ return info
230
+
231
+
232
+ @dataclass
233
+ class BizParams:
234
+ user_defined_params: dict = field(default=None)
235
+ user_defined_tokens: dict = field(default=None)
236
+ tool_prompts: dict = field(default=None)
237
+ user_prompt_params: dict = field(default=None)
238
+ user_query_params: dict = field(default=None)
239
+ videos: list = field(default=None)
240
+ pass_through_params: dict = field(default=None)
241
+
242
+ def to_dict(self):
243
+ params = {}
244
+ if self.user_defined_params is not None:
245
+ params["user_defined_params"] = self.user_defined_params
246
+ if self.user_defined_tokens is not None:
247
+ params["user_defined_tokens"] = self.user_defined_tokens
248
+ if self.tool_prompts is not None:
249
+ params["tool_prompts"] = self.tool_prompts
250
+ if self.user_prompt_params is not None:
251
+ params["user_prompt_params"] = self.user_prompt_params
252
+ if self.user_query_params is not None:
253
+ params["user_query_params"] = self.user_query_params
254
+ if self.videos is not None:
255
+ params["videos"] = self.videos
256
+ if self.pass_through_params is not None:
257
+ params.update(self.pass_through_params)
258
+ return params
259
+
260
+
261
+ @dataclass
262
+ class RequestParameters(DashPayloadParameters):
263
+ upstream: Upstream
264
+ downstream: Downstream
265
+ client_info: ClientInfo
266
+ dialog_attributes: DialogAttributes = field(default=None)
267
+ biz_params: BizParams = field(default=None)
268
+
269
+ def to_dict(self):
270
+ params = {
271
+ "upstream": self.upstream.to_dict(),
272
+ "downstream": self.downstream.to_dict(),
273
+ "client_info": self.client_info.to_dict(),
274
+ }
275
+
276
+ if self.dialog_attributes is not None:
277
+ params["dialog_attributes"] = self.dialog_attributes.to_dict()
278
+ if self.biz_params is not None:
279
+ params["biz_params"] = self.biz_params.to_dict()
280
+ return params
281
+
282
+
283
+ @dataclass
284
+ class RequestToRespondParameters(DashPayloadParameters):
285
+ images: list = field(default=None)
286
+ biz_params: BizParams = field(default=None)
287
+
288
+ def to_dict(self):
289
+ params = {
290
+ }
291
+ if self.images is not None:
292
+ params["images"] = self.images
293
+ if self.biz_params is not None:
294
+ params["biz_params"] = self.biz_params.to_dict()
295
+ return params
296
+
297
+
298
+ @dataclass
299
+ class RequestToRespondBodyInput(DashPayloadInput):
300
+ app_id: str
301
+ directive: str
302
+ dialog_id: str
303
+ type_: str = field(metadata={"alias": "type"}, default= None)
304
+ text: str = field(default="")
305
+
306
+ def to_dict(self):
307
+ return {
308
+ "app_id": self.app_id,
309
+ "directive": self.directive,
310
+ "dialog_id": self.dialog_id,
311
+ "type": self.type_,
312
+ "text": self.text
313
+ }
@@ -0,0 +1,10 @@
1
+ # Copyright (c) Alibaba, Inc. and its affiliates.
2
+
3
+ from .tingwu import TingWu
4
+ from .tingwu_realtime import TingWuRealtime, TingWuRealtimeCallback
5
+
6
+ __all__ = [
7
+ 'TingWu',
8
+ 'TingWuRealtime',
9
+ 'TingWuRealtimeCallback'
10
+ ]
@@ -0,0 +1,80 @@
1
+ from typing import Dict, Any
2
+
3
+ from dashscope.api_entities.api_request_factory import _build_api_request
4
+ from dashscope.api_entities.dashscope_response import DashScopeAPIResponse
5
+ from dashscope.client.base_api import BaseApi
6
+ from dashscope.common.error import ModelRequired
7
+
8
+
9
+ class TingWu(BaseApi):
10
+ """API for TingWu APP.
11
+
12
+ """
13
+
14
+ task = None
15
+ task_group = None
16
+ function = None
17
+
18
+ @classmethod
19
+ def call(
20
+ cls,
21
+ model: str,
22
+ user_defined_input: Dict[str, Any],
23
+ parameters: Dict[str, Any] = None,
24
+ api_key: str = None,
25
+ **kwargs
26
+ ) -> DashScopeAPIResponse:
27
+ """Call generation model service.
28
+
29
+ Args:
30
+ model (str): The requested model, such as qwen-turbo
31
+ api_key (str, optional): The api api_key, can be None,
32
+ if None, will get by default rule(TODO: api key doc).
33
+ user_defined_input: custom input
34
+ parameters: custom parameters
35
+ **kwargs:
36
+ base_address: base address
37
+ additional parameters for request
38
+
39
+ Raises:
40
+ InvalidInput: The history and auto_history are mutually exclusive.
41
+
42
+ Returns:
43
+ Union[GenerationResponse,
44
+ Generator[GenerationResponse, None, None]]: If
45
+ stream is True, return Generator, otherwise GenerationResponse.
46
+ """
47
+ if model is None or not model:
48
+ raise ModelRequired('Model is required!')
49
+ input_config, parameters = cls._build_input_parameters(input_config=user_defined_input,
50
+ params=parameters,
51
+ **kwargs)
52
+
53
+ request = _build_api_request(
54
+ model=model,
55
+ input=input_config,
56
+ api_key=api_key,
57
+ task_group=TingWu.task_group,
58
+ task=TingWu.task,
59
+ function=TingWu.function,
60
+ is_service=False,
61
+ **parameters)
62
+ response = request.call()
63
+
64
+ return response
65
+
66
+ @classmethod
67
+ def _build_input_parameters(cls,
68
+ input_config,
69
+ params: Dict[str, Any] = None,
70
+ **kwargs):
71
+ parameters = {}
72
+ if params is not None:
73
+ parameters = params
74
+
75
+ input_param = input_config
76
+
77
+ if kwargs.keys() is not None:
78
+ for key in kwargs.keys():
79
+ parameters[key] = kwargs[key]
80
+ return input_param, {**parameters, **kwargs}