Skip to content

Commit c9562ab

Browse files
authored
feat(http): add user agent (#71)
1 parent cf7f851 commit c9562ab

File tree

7 files changed

+58
-11
lines changed

7 files changed

+58
-11
lines changed

dashscope/aigc/generation.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ def call(
149149
to_merge_incremental_output = True
150150
parameters['incremental_output'] = True
151151

152+
# Pass incremental_to_full flag via headers user-agent
153+
if 'headers' not in parameters:
154+
parameters['headers'] = {}
155+
flag = '1' if to_merge_incremental_output else '0'
156+
parameters['headers']['user-agent'] = f'incremental_to_full/{flag}'
157+
152158
response = super().call(model=model,
153159
task_group=task_group,
154160
task=Generation.task,
@@ -354,6 +360,12 @@ async def call(
354360
to_merge_incremental_output = True
355361
parameters['incremental_output'] = True
356362

363+
# Pass incremental_to_full flag via headers user-agent
364+
if 'headers' not in parameters:
365+
parameters['headers'] = {}
366+
flag = '1' if to_merge_incremental_output else '0'
367+
parameters['headers']['user-agent'] = f'incremental_to_full/{flag}'
368+
357369
response = await super().call(model=model,
358370
task_group=task_group,
359371
task=Generation.task,

dashscope/aigc/multimodal_conversation.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ def call(
120120
to_merge_incremental_output = True
121121
kwargs['incremental_output'] = True
122122

123+
# Pass incremental_to_full flag via headers user-agent
124+
if 'headers' not in kwargs:
125+
kwargs['headers'] = {}
126+
flag = '1' if to_merge_incremental_output else '0'
127+
kwargs['headers']['user-agent'] = f'incremental_to_full/{flag}'
128+
123129
response = super().call(model=model,
124130
task_group=task_group,
125131
task=MultiModalConversation.task,
@@ -287,6 +293,15 @@ async def call(
287293
to_merge_incremental_output = True
288294
kwargs['incremental_output'] = True
289295

296+
# Pass incremental_to_full flag via headers user-agent
297+
if 'headers' not in kwargs:
298+
kwargs['headers'] = {}
299+
flag = '1' if to_merge_incremental_output else '0'
300+
kwargs['headers']['user-agent'] = (
301+
kwargs['headers'].get('user-agent', '') +
302+
f'; incremental_to_full/{flag}'
303+
)
304+
290305
response = await super().call(model=model,
291306
task_group=task_group,
292307
task=AioMultiModalConversation.task,

dashscope/api_entities/aiohttp_request.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ def __init__(self,
2323
async_request: bool = False,
2424
query: bool = False,
2525
timeout: int = DEFAULT_REQUEST_TIMEOUT_SECONDS,
26-
task_id: str = None) -> None:
26+
task_id: str = None,
27+
user_agent: str = '') -> None:
2728
"""HttpSSERequest, processing http server sent event stream.
2829
2930
Args:
@@ -33,9 +34,11 @@ def __init__(self,
3334
stream (bool, optional): Is stream request. Defaults to True.
3435
timeout (int, optional): Total request timeout.
3536
Defaults to DEFAULT_REQUEST_TIMEOUT_SECONDS.
37+
user_agent (str, optional): Additional user agent string to
38+
append. Defaults to ''.
3639
"""
3740

38-
super().__init__()
41+
super().__init__(user_agent=user_agent)
3942
self.url = url
4043
self.async_request = async_request
4144
self.headers = {

dashscope/api_entities/api_request_factory.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,15 @@ def _get_protocol_params(kwargs):
3131
base_address = kwargs.pop('base_address', None)
3232
flattened_output = kwargs.pop('flattened_output', False)
3333
extra_url_parameters = kwargs.pop('extra_url_parameters', None)
34+
35+
# Extract user-agent from headers if present
36+
user_agent = ''
37+
if headers and 'user-agent' in headers:
38+
user_agent = headers.pop('user-agent')
39+
3440
return (api_protocol, ws_stream_mode, is_binary_input, http_method, stream,
3541
async_request, query, headers, request_timeout, form, resources,
36-
base_address, flattened_output, extra_url_parameters)
42+
base_address, flattened_output, extra_url_parameters, user_agent)
3743

3844

3945
def _build_api_request(model: str,
@@ -46,8 +52,8 @@ def _build_api_request(model: str,
4652
**kwargs):
4753
(api_protocol, ws_stream_mode, is_binary_input, http_method, stream,
4854
async_request, query, headers, request_timeout, form, resources,
49-
base_address, flattened_output,
50-
extra_url_parameters) = _get_protocol_params(kwargs)
55+
base_address, flattened_output, extra_url_parameters,
56+
user_agent) = _get_protocol_params(kwargs)
5157
task_id = kwargs.pop('task_id', None)
5258
enable_encryption = kwargs.pop('enable_encryption', False)
5359
encryption = None
@@ -87,7 +93,8 @@ def _build_api_request(model: str,
8793
timeout=request_timeout,
8894
task_id=task_id,
8995
flattened_output=flattened_output,
90-
encryption=encryption)
96+
encryption=encryption,
97+
user_agent=user_agent)
9198
elif api_protocol == ApiProtocol.WEBSOCKET:
9299
if base_address is not None:
93100
websocket_url = base_address
@@ -101,7 +108,8 @@ def _build_api_request(model: str,
101108
is_binary_input=is_binary_input,
102109
timeout=request_timeout,
103110
flattened_output=flattened_output,
104-
pre_task_id=pre_task_id)
111+
pre_task_id=pre_task_id,
112+
user_agent=user_agent)
105113
else:
106114
raise UnsupportedApiProtocol(
107115
'Unsupported protocol: %s, support [http, https, websocket]' %

dashscope/api_entities/base_request.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010

1111
class BaseRequest(ABC):
12-
def __init__(self) -> None:
12+
def __init__(self, user_agent: str = '') -> None:
1313
try:
1414
platform_info = platform.platform()
1515
except Exception:
@@ -26,6 +26,11 @@ def __init__(self) -> None:
2626
platform_info,
2727
processor_info,
2828
)
29+
30+
# Append user_agent if provided and not empty
31+
if user_agent:
32+
ua += '; ' + user_agent
33+
2934
self.headers = {'user-agent': ua}
3035
disable_data_inspection = os.environ.get(
3136
DASHSCOPE_DISABLE_DATA_INSPECTION_ENV, 'true')

dashscope/api_entities/http_request.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ def __init__(self,
3333
timeout: int = DEFAULT_REQUEST_TIMEOUT_SECONDS,
3434
task_id: str = None,
3535
flattened_output: bool = False,
36-
encryption: Optional[Encryption] = None) -> None:
36+
encryption: Optional[Encryption] = None,
37+
user_agent: str = '') -> None:
3738
"""HttpSSERequest, processing http server sent event stream.
3839
3940
Args:
@@ -43,9 +44,11 @@ def __init__(self,
4344
stream (bool, optional): Is stream request. Defaults to True.
4445
timeout (int, optional): Total request timeout.
4546
Defaults to DEFAULT_REQUEST_TIMEOUT_SECONDS.
47+
user_agent (str, optional): Additional user agent string to
48+
append. Defaults to ''.
4649
"""
4750

48-
super().__init__()
51+
super().__init__(user_agent=user_agent)
4952
self.url = url
5053
self.flattened_output = flattened_output
5154
self.async_request = async_request

dashscope/api_entities/websocket_request.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ def __init__(
3434
timeout: int = DEFAULT_REQUEST_TIMEOUT_SECONDS,
3535
flattened_output: bool = False,
3636
pre_task_id=None,
37+
user_agent: str = '',
3738
) -> None:
38-
super().__init__()
39+
super().__init__(user_agent=user_agent)
3940
"""HttpRequest.
4041
4142
Args:

0 commit comments

Comments
 (0)