dashscope 1.24.1__py3-none-any.whl → 1.24.3__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.
Potentially problematic release.
This version of dashscope might be problematic. Click here for more details.
- dashscope/__init__.py +2 -1
- dashscope/aigc/__init__.py +2 -1
- dashscope/aigc/image_synthesis.py +353 -48
- dashscope/aigc/multimodal_conversation.py +122 -1
- dashscope/aigc/video_synthesis.py +281 -32
- dashscope/api_entities/api_request_factory.py +1 -1
- dashscope/api_entities/dashscope_response.py +2 -2
- dashscope/api_entities/http_request.py +49 -3
- dashscope/cli.py +54 -14
- dashscope/client/base_api.py +295 -3
- dashscope/utils/oss_utils.py +2 -2
- dashscope/version.py +1 -1
- {dashscope-1.24.1.dist-info → dashscope-1.24.3.dist-info}/METADATA +2 -1
- {dashscope-1.24.1.dist-info → dashscope-1.24.3.dist-info}/RECORD +18 -18
- {dashscope-1.24.1.dist-info → dashscope-1.24.3.dist-info}/WHEEL +0 -0
- {dashscope-1.24.1.dist-info → dashscope-1.24.3.dist-info}/entry_points.txt +0 -0
- {dashscope-1.24.1.dist-info → dashscope-1.24.3.dist-info}/licenses/LICENSE +0 -0
- {dashscope-1.24.1.dist-info → dashscope-1.24.3.dist-info}/top_level.txt +0 -0
|
@@ -4,9 +4,8 @@ from typing import Any, Dict, Union
|
|
|
4
4
|
|
|
5
5
|
from dashscope.api_entities.dashscope_response import (DashScopeAPIResponse,
|
|
6
6
|
VideoSynthesisResponse)
|
|
7
|
-
from dashscope.client.base_api import BaseAsyncApi
|
|
7
|
+
from dashscope.client.base_api import BaseAsyncApi, BaseAsyncAioApi
|
|
8
8
|
from dashscope.common.constants import PROMPT
|
|
9
|
-
from dashscope.common.error import InputRequired
|
|
10
9
|
from dashscope.common.utils import _get_task_group_and_task
|
|
11
10
|
from dashscope.utils.oss_utils import check_and_upload_local
|
|
12
11
|
|
|
@@ -91,7 +90,7 @@ class VideoSynthesis(BaseAsyncApi):
|
|
|
91
90
|
**kwargs)
|
|
92
91
|
|
|
93
92
|
@classmethod
|
|
94
|
-
def
|
|
93
|
+
def _get_input(cls,
|
|
95
94
|
model: str,
|
|
96
95
|
prompt: Any = None,
|
|
97
96
|
img_url: str = None,
|
|
@@ -101,41 +100,14 @@ class VideoSynthesis(BaseAsyncApi):
|
|
|
101
100
|
template: str = None,
|
|
102
101
|
api_key: str = None,
|
|
103
102
|
extra_input: Dict = None,
|
|
104
|
-
workspace: str = None,
|
|
105
103
|
task: str = None,
|
|
104
|
+
function: str = None,
|
|
106
105
|
head_frame: str = None,
|
|
107
106
|
tail_frame: str = None,
|
|
108
107
|
first_frame_url: str = None,
|
|
109
108
|
last_frame_url: str = None,
|
|
110
|
-
**kwargs)
|
|
111
|
-
"""Create a video synthesis task, and return task information.
|
|
112
|
-
|
|
113
|
-
Args:
|
|
114
|
-
model (str): The model, reference ``Models``.
|
|
115
|
-
prompt (Any): The prompt for video synthesis.
|
|
116
|
-
extend_prompt (bool): @deprecated, use prompt_extend in parameters
|
|
117
|
-
negative_prompt (str): The negative prompt is the opposite of the prompt meaning.
|
|
118
|
-
template (str): LoRa input, such as gufeng, katong, etc.
|
|
119
|
-
img_url (str): The input image url, Generate the URL of the image referenced by the video.
|
|
120
|
-
api_key (str, optional): The api api_key. Defaults to None.
|
|
121
|
-
workspace (str): The dashscope workspace id.
|
|
122
|
-
extra_input (Dict): The extra input parameters.
|
|
123
|
-
task (str): The task of api, ref doc.
|
|
124
|
-
first_frame_url (str): The URL of the first frame image for generating the video.
|
|
125
|
-
last_frame_url (str): The URL of the last frame image for generating the video.
|
|
126
|
-
**kwargs:
|
|
127
|
-
size(str, `optional`): The output video size(width*height).
|
|
128
|
-
duration(int, optional): The duration. Duration of video generation. The default value is 5, in seconds.
|
|
129
|
-
seed(int, optional): The seed. The random seed for video generation. The default value is 5.
|
|
109
|
+
**kwargs):
|
|
130
110
|
|
|
131
|
-
Raises:
|
|
132
|
-
InputRequired: The prompt cannot be empty.
|
|
133
|
-
|
|
134
|
-
Returns:
|
|
135
|
-
DashScopeAPIResponse: The video synthesis
|
|
136
|
-
task id in the response.
|
|
137
|
-
"""
|
|
138
|
-
task_group, function = _get_task_group_and_task(__name__)
|
|
139
111
|
inputs = {PROMPT: prompt, 'extend_prompt': extend_prompt}
|
|
140
112
|
if negative_prompt:
|
|
141
113
|
inputs['negative_prompt'] = negative_prompt
|
|
@@ -192,6 +164,61 @@ class VideoSynthesis(BaseAsyncApi):
|
|
|
192
164
|
task = VideoSynthesis.task
|
|
193
165
|
if model is not None and model and 'kf2v' in model:
|
|
194
166
|
task = 'image2video'
|
|
167
|
+
|
|
168
|
+
return inputs, kwargs, task
|
|
169
|
+
|
|
170
|
+
@classmethod
|
|
171
|
+
def async_call(cls,
|
|
172
|
+
model: str,
|
|
173
|
+
prompt: Any = None,
|
|
174
|
+
img_url: str = None,
|
|
175
|
+
# """@deprecated, use prompt_extend in parameters """
|
|
176
|
+
extend_prompt: bool = True,
|
|
177
|
+
negative_prompt: str = None,
|
|
178
|
+
template: str = None,
|
|
179
|
+
api_key: str = None,
|
|
180
|
+
extra_input: Dict = None,
|
|
181
|
+
workspace: str = None,
|
|
182
|
+
task: str = None,
|
|
183
|
+
head_frame: str = None,
|
|
184
|
+
tail_frame: str = None,
|
|
185
|
+
first_frame_url: str = None,
|
|
186
|
+
last_frame_url: str = None,
|
|
187
|
+
**kwargs) -> VideoSynthesisResponse:
|
|
188
|
+
"""Create a video synthesis task, and return task information.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
model (str): The model, reference ``Models``.
|
|
192
|
+
prompt (Any): The prompt for video synthesis.
|
|
193
|
+
extend_prompt (bool): @deprecated, use prompt_extend in parameters
|
|
194
|
+
negative_prompt (str): The negative prompt is the opposite of the prompt meaning.
|
|
195
|
+
template (str): LoRa input, such as gufeng, katong, etc.
|
|
196
|
+
img_url (str): The input image url, Generate the URL of the image referenced by the video.
|
|
197
|
+
api_key (str, optional): The api api_key. Defaults to None.
|
|
198
|
+
workspace (str): The dashscope workspace id.
|
|
199
|
+
extra_input (Dict): The extra input parameters.
|
|
200
|
+
task (str): The task of api, ref doc.
|
|
201
|
+
first_frame_url (str): The URL of the first frame image for generating the video.
|
|
202
|
+
last_frame_url (str): The URL of the last frame image for generating the video.
|
|
203
|
+
**kwargs:
|
|
204
|
+
size(str, `optional`): The output video size(width*height).
|
|
205
|
+
duration(int, optional): The duration. Duration of video generation. The default value is 5, in seconds.
|
|
206
|
+
seed(int, optional): The seed. The random seed for video generation. The default value is 5.
|
|
207
|
+
|
|
208
|
+
Raises:
|
|
209
|
+
InputRequired: The prompt cannot be empty.
|
|
210
|
+
|
|
211
|
+
Returns:
|
|
212
|
+
DashScopeAPIResponse: The video synthesis
|
|
213
|
+
task id in the response.
|
|
214
|
+
"""
|
|
215
|
+
task_group, function = _get_task_group_and_task(__name__)
|
|
216
|
+
|
|
217
|
+
inputs, kwargs, task = cls._get_input(
|
|
218
|
+
model, prompt, img_url, extend_prompt, negative_prompt, template, api_key,
|
|
219
|
+
extra_input, task, function, head_frame, tail_frame,
|
|
220
|
+
first_frame_url, last_frame_url, **kwargs)
|
|
221
|
+
|
|
195
222
|
response = super().async_call(
|
|
196
223
|
model=model,
|
|
197
224
|
task_group=task_group,
|
|
@@ -305,3 +332,225 @@ class VideoSynthesis(BaseAsyncApi):
|
|
|
305
332
|
api_key=api_key,
|
|
306
333
|
workspace=workspace,
|
|
307
334
|
**kwargs)
|
|
335
|
+
|
|
336
|
+
class AioVideoSynthesis(BaseAsyncAioApi):
|
|
337
|
+
@classmethod
|
|
338
|
+
async def call(cls,
|
|
339
|
+
model: str,
|
|
340
|
+
prompt: Any = None,
|
|
341
|
+
img_url: str = None,
|
|
342
|
+
# """@deprecated, use prompt_extend in parameters """
|
|
343
|
+
extend_prompt: bool = True,
|
|
344
|
+
negative_prompt: str = None,
|
|
345
|
+
template: str = None,
|
|
346
|
+
api_key: str = None,
|
|
347
|
+
extra_input: Dict = None,
|
|
348
|
+
workspace: str = None,
|
|
349
|
+
task: str = None,
|
|
350
|
+
head_frame: str = None,
|
|
351
|
+
tail_frame: str = None,
|
|
352
|
+
first_frame_url: str = None,
|
|
353
|
+
last_frame_url: str = None,
|
|
354
|
+
**kwargs) -> VideoSynthesisResponse:
|
|
355
|
+
"""Call video synthesis service and get result.
|
|
356
|
+
|
|
357
|
+
Args:
|
|
358
|
+
model (str): The model, reference ``Models``.
|
|
359
|
+
prompt (Any): The prompt for video synthesis.
|
|
360
|
+
extend_prompt (bool): @deprecated, use prompt_extend in parameters
|
|
361
|
+
negative_prompt (str): The negative prompt is the opposite of the prompt meaning.
|
|
362
|
+
template (str): LoRa input, such as gufeng, katong, etc.
|
|
363
|
+
img_url (str): The input image url, Generate the URL of the image referenced by the video.
|
|
364
|
+
api_key (str, optional): The api api_key. Defaults to None.
|
|
365
|
+
workspace (str): The dashscope workspace id.
|
|
366
|
+
extra_input (Dict): The extra input parameters.
|
|
367
|
+
task (str): The task of api, ref doc.
|
|
368
|
+
first_frame_url (str): The URL of the first frame image for generating the video.
|
|
369
|
+
last_frame_url (str): The URL of the last frame image for generating the video.
|
|
370
|
+
**kwargs:
|
|
371
|
+
size(str, `optional`): The output video size(width*height).
|
|
372
|
+
duration(int, optional): The duration. Duration of video generation. The default value is 5, in seconds.
|
|
373
|
+
seed(int, optional): The seed. The random seed for video generation. The default value is 5.
|
|
374
|
+
|
|
375
|
+
Raises:
|
|
376
|
+
InputRequired: The prompt cannot be empty.
|
|
377
|
+
|
|
378
|
+
Returns:
|
|
379
|
+
VideoSynthesisResponse: The video synthesis result.
|
|
380
|
+
"""
|
|
381
|
+
task_group, f = _get_task_group_and_task(__name__)
|
|
382
|
+
inputs, kwargs, task = VideoSynthesis._get_input(
|
|
383
|
+
model, prompt, img_url, extend_prompt, negative_prompt, template, api_key,
|
|
384
|
+
extra_input, task, f, head_frame, tail_frame,
|
|
385
|
+
first_frame_url, last_frame_url, **kwargs)
|
|
386
|
+
response = await super().call(model, inputs, task_group, task, f, api_key, workspace, **kwargs)
|
|
387
|
+
return VideoSynthesisResponse.from_api_response(response)
|
|
388
|
+
|
|
389
|
+
@classmethod
|
|
390
|
+
async def async_call(cls,
|
|
391
|
+
model: str,
|
|
392
|
+
prompt: Any = None,
|
|
393
|
+
img_url: str = None,
|
|
394
|
+
# """@deprecated, use prompt_extend in parameters """
|
|
395
|
+
extend_prompt: bool = True,
|
|
396
|
+
negative_prompt: str = None,
|
|
397
|
+
template: str = None,
|
|
398
|
+
api_key: str = None,
|
|
399
|
+
extra_input: Dict = None,
|
|
400
|
+
workspace: str = None,
|
|
401
|
+
task: str = None,
|
|
402
|
+
head_frame: str = None,
|
|
403
|
+
tail_frame: str = None,
|
|
404
|
+
first_frame_url: str = None,
|
|
405
|
+
last_frame_url: str = None,
|
|
406
|
+
**kwargs) -> VideoSynthesisResponse:
|
|
407
|
+
"""Create a video synthesis task, and return task information.
|
|
408
|
+
|
|
409
|
+
Args:
|
|
410
|
+
model (str): The model, reference ``Models``.
|
|
411
|
+
prompt (Any): The prompt for video synthesis.
|
|
412
|
+
extend_prompt (bool): @deprecated, use prompt_extend in parameters
|
|
413
|
+
negative_prompt (str): The negative prompt is the opposite of the prompt meaning.
|
|
414
|
+
template (str): LoRa input, such as gufeng, katong, etc.
|
|
415
|
+
img_url (str): The input image url, Generate the URL of the image referenced by the video.
|
|
416
|
+
api_key (str, optional): The api api_key. Defaults to None.
|
|
417
|
+
workspace (str): The dashscope workspace id.
|
|
418
|
+
extra_input (Dict): The extra input parameters.
|
|
419
|
+
task (str): The task of api, ref doc.
|
|
420
|
+
first_frame_url (str): The URL of the first frame image for generating the video.
|
|
421
|
+
last_frame_url (str): The URL of the last frame image for generating the video.
|
|
422
|
+
**kwargs:
|
|
423
|
+
size(str, `optional`): The output video size(width*height).
|
|
424
|
+
duration(int, optional): The duration. Duration of video generation. The default value is 5, in seconds.
|
|
425
|
+
seed(int, optional): The seed. The random seed for video generation. The default value is 5.
|
|
426
|
+
|
|
427
|
+
Raises:
|
|
428
|
+
InputRequired: The prompt cannot be empty.
|
|
429
|
+
|
|
430
|
+
Returns:
|
|
431
|
+
DashScopeAPIResponse: The video synthesis
|
|
432
|
+
task id in the response.
|
|
433
|
+
"""
|
|
434
|
+
task_group, function = _get_task_group_and_task(__name__)
|
|
435
|
+
|
|
436
|
+
inputs, kwargs, task = VideoSynthesis._get_input(
|
|
437
|
+
model, prompt, img_url, extend_prompt, negative_prompt, template, api_key,
|
|
438
|
+
extra_input, task, function, head_frame, tail_frame,
|
|
439
|
+
first_frame_url, last_frame_url, **kwargs)
|
|
440
|
+
|
|
441
|
+
response = await super().async_call(
|
|
442
|
+
model=model,
|
|
443
|
+
task_group=task_group,
|
|
444
|
+
task=VideoSynthesis.task if task is None else task,
|
|
445
|
+
function=function,
|
|
446
|
+
api_key=api_key,
|
|
447
|
+
input=inputs,
|
|
448
|
+
workspace=workspace,
|
|
449
|
+
**kwargs)
|
|
450
|
+
return VideoSynthesisResponse.from_api_response(response)
|
|
451
|
+
|
|
452
|
+
@classmethod
|
|
453
|
+
async def fetch(cls,
|
|
454
|
+
task: Union[str, VideoSynthesisResponse],
|
|
455
|
+
api_key: str = None,
|
|
456
|
+
workspace: str = None,
|
|
457
|
+
**kwargs) -> VideoSynthesisResponse:
|
|
458
|
+
"""Fetch video synthesis task status or result.
|
|
459
|
+
|
|
460
|
+
Args:
|
|
461
|
+
task (Union[str, VideoSynthesisResponse]): The task_id or
|
|
462
|
+
VideoSynthesisResponse return by async_call().
|
|
463
|
+
api_key (str, optional): The api api_key. Defaults to None.
|
|
464
|
+
workspace (str): The dashscope workspace id.
|
|
465
|
+
|
|
466
|
+
Returns:
|
|
467
|
+
VideoSynthesisResponse: The task status or result.
|
|
468
|
+
"""
|
|
469
|
+
response = await super().fetch(task, api_key=api_key, workspace=workspace)
|
|
470
|
+
return VideoSynthesisResponse.from_api_response(response)
|
|
471
|
+
|
|
472
|
+
@classmethod
|
|
473
|
+
async def wait(cls,
|
|
474
|
+
task: Union[str, VideoSynthesisResponse],
|
|
475
|
+
api_key: str = None,
|
|
476
|
+
workspace: str = None,
|
|
477
|
+
**kwargs) -> VideoSynthesisResponse:
|
|
478
|
+
"""Wait for video synthesis task to complete, and return the result.
|
|
479
|
+
|
|
480
|
+
Args:
|
|
481
|
+
task (Union[str, VideoSynthesisResponse]): The task_id or
|
|
482
|
+
VideoSynthesisResponse return by async_call().
|
|
483
|
+
api_key (str, optional): The api api_key. Defaults to None.
|
|
484
|
+
workspace (str): The dashscope workspace id.
|
|
485
|
+
|
|
486
|
+
Returns:
|
|
487
|
+
VideoSynthesisResponse: The task result.
|
|
488
|
+
"""
|
|
489
|
+
response = await super().wait(task, api_key, workspace=workspace)
|
|
490
|
+
return VideoSynthesisResponse.from_api_response(response)
|
|
491
|
+
|
|
492
|
+
@classmethod
|
|
493
|
+
async def cancel(cls,
|
|
494
|
+
task: Union[str, VideoSynthesisResponse],
|
|
495
|
+
api_key: str = None,
|
|
496
|
+
workspace: str = None,
|
|
497
|
+
**kwargs) -> DashScopeAPIResponse:
|
|
498
|
+
"""Cancel video synthesis task.
|
|
499
|
+
Only tasks whose status is PENDING can be canceled.
|
|
500
|
+
|
|
501
|
+
Args:
|
|
502
|
+
task (Union[str, VideoSynthesisResponse]): The task_id or
|
|
503
|
+
VideoSynthesisResponse return by async_call().
|
|
504
|
+
api_key (str, optional): The api api_key. Defaults to None.
|
|
505
|
+
workspace (str): The dashscope workspace id.
|
|
506
|
+
|
|
507
|
+
Returns:
|
|
508
|
+
DashScopeAPIResponse: The response data.
|
|
509
|
+
"""
|
|
510
|
+
return await super().cancel(task, api_key, workspace=workspace)
|
|
511
|
+
|
|
512
|
+
@classmethod
|
|
513
|
+
async def list(cls,
|
|
514
|
+
start_time: str = None,
|
|
515
|
+
end_time: str = None,
|
|
516
|
+
model_name: str = None,
|
|
517
|
+
api_key_id: str = None,
|
|
518
|
+
region: str = None,
|
|
519
|
+
status: str = None,
|
|
520
|
+
page_no: int = 1,
|
|
521
|
+
page_size: int = 10,
|
|
522
|
+
api_key: str = None,
|
|
523
|
+
workspace: str = None,
|
|
524
|
+
**kwargs) -> DashScopeAPIResponse:
|
|
525
|
+
"""List async tasks.
|
|
526
|
+
|
|
527
|
+
Args:
|
|
528
|
+
start_time (str, optional): The tasks start time,
|
|
529
|
+
for example: 20230420000000. Defaults to None.
|
|
530
|
+
end_time (str, optional): The tasks end time,
|
|
531
|
+
for example: 20230420000000. Defaults to None.
|
|
532
|
+
model_name (str, optional): The tasks model name. Defaults to None.
|
|
533
|
+
api_key_id (str, optional): The tasks api-key-id. Defaults to None.
|
|
534
|
+
region (str, optional): The service region,
|
|
535
|
+
for example: cn-beijing. Defaults to None.
|
|
536
|
+
status (str, optional): The status of tasks[PENDING,
|
|
537
|
+
RUNNING, SUCCEEDED, FAILED, CANCELED]. Defaults to None.
|
|
538
|
+
page_no (int, optional): The page number. Defaults to 1.
|
|
539
|
+
page_size (int, optional): The page size. Defaults to 10.
|
|
540
|
+
api_key (str, optional): The user api-key. Defaults to None.
|
|
541
|
+
workspace (str): The dashscope workspace id.
|
|
542
|
+
|
|
543
|
+
Returns:
|
|
544
|
+
DashScopeAPIResponse: The response data.
|
|
545
|
+
"""
|
|
546
|
+
return await super().list(start_time=start_time,
|
|
547
|
+
end_time=end_time,
|
|
548
|
+
model_name=model_name,
|
|
549
|
+
api_key_id=api_key_id,
|
|
550
|
+
region=region,
|
|
551
|
+
status=status,
|
|
552
|
+
page_no=page_no,
|
|
553
|
+
page_size=page_size,
|
|
554
|
+
api_key=api_key,
|
|
555
|
+
workspace=workspace,
|
|
556
|
+
**kwargs)
|
|
@@ -445,8 +445,8 @@ class ImageSynthesisOutput(DictMixin):
|
|
|
445
445
|
results: List[ImageSynthesisResult]
|
|
446
446
|
|
|
447
447
|
def __init__(self,
|
|
448
|
-
task_id: str,
|
|
449
|
-
task_status: str,
|
|
448
|
+
task_id: str = None,
|
|
449
|
+
task_status: str = None,
|
|
450
450
|
results: List[ImageSynthesisResult] = [],
|
|
451
451
|
**kwargs):
|
|
452
452
|
res = []
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
|
2
|
-
|
|
2
|
+
import datetime
|
|
3
3
|
import json
|
|
4
|
+
import ssl
|
|
4
5
|
from http import HTTPStatus
|
|
5
6
|
from typing import Optional
|
|
6
7
|
|
|
7
8
|
import aiohttp
|
|
9
|
+
import certifi
|
|
8
10
|
import requests
|
|
9
11
|
|
|
10
12
|
from dashscope.api_entities.base_request import AioBaseRequest
|
|
@@ -119,12 +121,18 @@ class HttpRequest(AioBaseRequest):
|
|
|
119
121
|
|
|
120
122
|
async def _handle_aio_request(self):
|
|
121
123
|
try:
|
|
124
|
+
connector = aiohttp.TCPConnector(
|
|
125
|
+
ssl=ssl.create_default_context(
|
|
126
|
+
cafile=certifi.where()))
|
|
122
127
|
async with aiohttp.ClientSession(
|
|
128
|
+
connector=connector,
|
|
123
129
|
timeout=aiohttp.ClientTimeout(total=self.timeout),
|
|
124
130
|
headers=self.headers) as session:
|
|
125
131
|
logger.debug('Starting request: %s' % self.url)
|
|
126
132
|
if self.method == HTTPMethod.POST:
|
|
127
|
-
is_form, obj =
|
|
133
|
+
is_form, obj = False, {}
|
|
134
|
+
if hasattr(self, 'data') and self.data is not None:
|
|
135
|
+
is_form, obj = self.data.get_aiohttp_payload()
|
|
128
136
|
if is_form:
|
|
129
137
|
headers = {**self.headers, **obj.headers}
|
|
130
138
|
response = await session.post(url=self.url,
|
|
@@ -136,8 +144,14 @@ class HttpRequest(AioBaseRequest):
|
|
|
136
144
|
json=obj,
|
|
137
145
|
headers=self.headers)
|
|
138
146
|
elif self.method == HTTPMethod.GET:
|
|
147
|
+
# 添加条件判断
|
|
148
|
+
params = {}
|
|
149
|
+
if hasattr(self, 'data') and self.data is not None:
|
|
150
|
+
params = getattr(self.data, 'parameters', {})
|
|
151
|
+
if params:
|
|
152
|
+
params = self.__handle_parameters(params)
|
|
139
153
|
response = await session.get(url=self.url,
|
|
140
|
-
params=
|
|
154
|
+
params=params,
|
|
141
155
|
headers=self.headers)
|
|
142
156
|
else:
|
|
143
157
|
raise UnsupportedHTTPMethod('Unsupported http method: %s' %
|
|
@@ -153,6 +167,32 @@ class HttpRequest(AioBaseRequest):
|
|
|
153
167
|
logger.error(e)
|
|
154
168
|
raise e
|
|
155
169
|
|
|
170
|
+
@staticmethod
|
|
171
|
+
def __handle_parameters(params: dict) -> dict:
|
|
172
|
+
def __format(value):
|
|
173
|
+
if isinstance(value, bool):
|
|
174
|
+
return str(value).lower()
|
|
175
|
+
elif isinstance(value, (str, int, float)):
|
|
176
|
+
return value
|
|
177
|
+
elif value is None:
|
|
178
|
+
return ''
|
|
179
|
+
elif isinstance(value, (datetime.datetime, datetime.date)):
|
|
180
|
+
return value.isoformat()
|
|
181
|
+
elif isinstance(value, (list, tuple)):
|
|
182
|
+
return ','.join(str(__format(x)) for x in value)
|
|
183
|
+
elif isinstance(value, dict):
|
|
184
|
+
return json.dumps(value)
|
|
185
|
+
else:
|
|
186
|
+
try:
|
|
187
|
+
return str(value)
|
|
188
|
+
except Exception as e:
|
|
189
|
+
raise ValueError(f"Unsupported type {type(value)} for param formatting: {e}")
|
|
190
|
+
|
|
191
|
+
formatted = {}
|
|
192
|
+
for k, v in params.items():
|
|
193
|
+
formatted[k] = __format(v)
|
|
194
|
+
return formatted
|
|
195
|
+
|
|
156
196
|
async def _handle_aio_response(self, response: aiohttp.ClientResponse):
|
|
157
197
|
request_id = ''
|
|
158
198
|
if (response.status == HTTPStatus.OK and self.stream
|
|
@@ -211,6 +251,12 @@ class HttpRequest(AioBaseRequest):
|
|
|
211
251
|
usage = None
|
|
212
252
|
if 'output' in json_content and json_content['output'] is not None:
|
|
213
253
|
output = json_content['output']
|
|
254
|
+
# Compatible with wan
|
|
255
|
+
elif 'data' in json_content and json_content['data'] is not None\
|
|
256
|
+
and isinstance(json_content['data'], list)\
|
|
257
|
+
and len(json_content['data']) > 0\
|
|
258
|
+
and 'task_id' in json_content['data'][0]:
|
|
259
|
+
output = json_content
|
|
214
260
|
if 'usage' in json_content:
|
|
215
261
|
usage = json_content['usage']
|
|
216
262
|
if 'request_id' in json_content:
|
dashscope/cli.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
import argparse
|
|
3
|
+
import json
|
|
3
4
|
import sys
|
|
4
5
|
import time
|
|
5
6
|
import os
|
|
@@ -216,7 +217,8 @@ class Oss:
|
|
|
216
217
|
|
|
217
218
|
oss_url = OssUtils.upload(model=args.model,
|
|
218
219
|
file_path=file_path,
|
|
219
|
-
api_key=api_key
|
|
220
|
+
api_key=api_key,
|
|
221
|
+
base_address=args.base_url)
|
|
220
222
|
|
|
221
223
|
if not oss_url:
|
|
222
224
|
print('Failed to upload file: %s' % file_path)
|
|
@@ -229,7 +231,8 @@ class Files:
|
|
|
229
231
|
def upload(cls, args):
|
|
230
232
|
rsp = dashscope.Files.upload(file_path=args.file,
|
|
231
233
|
purpose=args.purpose,
|
|
232
|
-
description=args.description
|
|
234
|
+
description=args.description,
|
|
235
|
+
base_address=args.base_url)
|
|
233
236
|
print(rsp)
|
|
234
237
|
if rsp.status_code == HTTPStatus.OK:
|
|
235
238
|
print('Upload success, file id: %s' %
|
|
@@ -239,32 +242,31 @@ class Files:
|
|
|
239
242
|
|
|
240
243
|
@classmethod
|
|
241
244
|
def get(cls, args):
|
|
242
|
-
rsp = dashscope.Files.get(file_id=args.id)
|
|
245
|
+
rsp = dashscope.Files.get(file_id=args.id, base_address=args.base_url)
|
|
243
246
|
if rsp.status_code == HTTPStatus.OK:
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
+
if rsp.output:
|
|
248
|
+
print('file info:\n%s' % json.dumps(rsp.output, ensure_ascii=False, indent=4))
|
|
249
|
+
else:
|
|
250
|
+
print('There is no uploaded file.')
|
|
247
251
|
else:
|
|
248
252
|
print_failed_message(rsp)
|
|
249
253
|
|
|
250
254
|
@classmethod
|
|
251
255
|
def list(cls, args):
|
|
252
256
|
rsp = dashscope.Files.list(page=args.start_page,
|
|
253
|
-
page_size=args.page_size
|
|
257
|
+
page_size=args.page_size,
|
|
258
|
+
base_address=args.base_url)
|
|
254
259
|
if rsp.status_code == HTTPStatus.OK:
|
|
255
|
-
if rsp.output
|
|
256
|
-
|
|
257
|
-
print('file_id: %s, name: %s, description: %s, time: %s' %
|
|
258
|
-
(f['file_id'], f['name'], f['description'],
|
|
259
|
-
f['gmt_create']))
|
|
260
|
+
if rsp.output:
|
|
261
|
+
print('file list info:\n%s' % json.dumps(rsp.output, ensure_ascii=False, indent=4))
|
|
260
262
|
else:
|
|
261
|
-
print('There is no uploaded
|
|
263
|
+
print('There is no uploaded files.')
|
|
262
264
|
else:
|
|
263
265
|
print_failed_message(rsp)
|
|
264
266
|
|
|
265
267
|
@classmethod
|
|
266
268
|
def delete(cls, args):
|
|
267
|
-
rsp = dashscope.Files.delete(args.id)
|
|
269
|
+
rsp = dashscope.Files.delete(args.id, base_address=args.base_url)
|
|
268
270
|
if rsp.status_code == HTTPStatus.OK:
|
|
269
271
|
print('Delete success')
|
|
270
272
|
else:
|
|
@@ -529,6 +531,13 @@ def main():
|
|
|
529
531
|
required=False,
|
|
530
532
|
help='The dashscope api key',
|
|
531
533
|
)
|
|
534
|
+
oss_upload.add_argument(
|
|
535
|
+
'-u',
|
|
536
|
+
'--base_url',
|
|
537
|
+
type=str,
|
|
538
|
+
help='The base url.',
|
|
539
|
+
required=False,
|
|
540
|
+
)
|
|
532
541
|
oss_upload.set_defaults(func=Oss.upload)
|
|
533
542
|
|
|
534
543
|
file_upload = sub_parsers.add_parser('files.upload')
|
|
@@ -555,21 +564,45 @@ def main():
|
|
|
555
564
|
help='The file description.',
|
|
556
565
|
required=False,
|
|
557
566
|
)
|
|
567
|
+
file_upload.add_argument(
|
|
568
|
+
'-u',
|
|
569
|
+
'--base_url',
|
|
570
|
+
type=str,
|
|
571
|
+
help='The base url.',
|
|
572
|
+
required=False,
|
|
573
|
+
)
|
|
558
574
|
file_upload.set_defaults(func=Files.upload)
|
|
575
|
+
|
|
559
576
|
file_get = sub_parsers.add_parser('files.get')
|
|
560
577
|
file_get.add_argument('-i',
|
|
561
578
|
'--id',
|
|
562
579
|
type=str,
|
|
563
580
|
required=True,
|
|
564
581
|
help='The file ID')
|
|
582
|
+
file_get.add_argument(
|
|
583
|
+
'-u',
|
|
584
|
+
'--base_url',
|
|
585
|
+
type=str,
|
|
586
|
+
help='The base url.',
|
|
587
|
+
required=False,
|
|
588
|
+
)
|
|
565
589
|
file_get.set_defaults(func=Files.get)
|
|
590
|
+
|
|
566
591
|
file_delete = sub_parsers.add_parser('files.delete')
|
|
567
592
|
file_delete.add_argument('-i',
|
|
568
593
|
'--id',
|
|
569
594
|
type=str,
|
|
570
595
|
required=True,
|
|
571
596
|
help='The files ID')
|
|
597
|
+
file_delete.add_argument(
|
|
598
|
+
'-u',
|
|
599
|
+
'--base_url',
|
|
600
|
+
type=str,
|
|
601
|
+
help='The base url.',
|
|
602
|
+
required=False,
|
|
603
|
+
)
|
|
572
604
|
file_delete.set_defaults(func=Files.delete)
|
|
605
|
+
|
|
573
606
|
file_list = sub_parsers.add_parser('files.list')
|
|
574
607
|
file_list.add_argument('-s',
|
|
575
608
|
'--start_page',
|
|
@@ -581,6 +614,13 @@ def main():
|
|
|
581
614
|
type=int,
|
|
582
615
|
default=10,
|
|
583
616
|
help='The page size, default 10')
|
|
617
|
+
file_list.add_argument(
|
|
618
|
+
'-u',
|
|
619
|
+
'--base_url',
|
|
620
|
+
type=str,
|
|
621
|
+
help='The base url.',
|
|
622
|
+
required=False,
|
|
623
|
+
)
|
|
584
624
|
file_list.set_defaults(func=Files.list)
|
|
585
625
|
|
|
586
626
|
deployments_call = sub_parsers.add_parser('deployments.call')
|