Skip to content

Commit 043e8d3

Browse files
author
BitsAdmin
committed
Merge branch 'feat/ark/respexpire' into 'integration_2025-09-25_1059631177986'
feat: [development task] ark runtime (1697492) See merge request iaasng/volcengine-python-sdk!833
2 parents 9804795 + 540823e commit 043e8d3

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed

volcenginesdkarkruntime/_utils/_key_agreement.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
from __future__ import annotations
1414

15+
import re
1516
import base64
1617
from typing import Tuple
1718

@@ -72,6 +73,28 @@ def aes_gcm_decrypt_base64_string(key: bytes, nonce: bytes, ciphertext: str) ->
7273
return aes_gcm_decrypt_bytes(key, nonce, cipher_bytes).decode()
7374

7475

76+
base64_pattern = r'(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})'
77+
78+
79+
def aes_gcm_decrypt_base64_list(key: bytes, nonce: bytes, ciphertext: str) -> str:
80+
# Decrypt
81+
base64_array = re.findall(base64_pattern, ciphertext)
82+
result = []
83+
for b64 in base64_array:
84+
try:
85+
result.append(aes_gcm_decrypt_base64_string(key, nonce, b64))
86+
except Exception:
87+
for i in range(20, len(b64), 4):
88+
try:
89+
decrypted = aes_gcm_decrypt_base64_string(key, nonce, b64[:i+4])
90+
result.append(decrypted)
91+
decrypted = aes_gcm_decrypt_base64_string(key, nonce, b64[i+4:])
92+
result.append(decrypted)
93+
except Exception:
94+
result.append('')
95+
return ''.join(result)
96+
97+
7598
def marshal_cryptography_pub_key(key) -> bytes:
7699
# python version of crypto/elliptic/elliptic.go Marshal
77100
# without point on curve check

volcenginesdkarkruntime/resources/chat/completions.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
from ..._types import Body, Query, Headers
3131
from ..._utils._utils import deepcopy_minimal, with_sts_token, async_with_sts_token
32-
from ..._utils._key_agreement import aes_gcm_decrypt_base64_string
32+
from ..._utils._key_agreement import aes_gcm_decrypt_base64_string, aes_gcm_decrypt_base64_list
3333
from ..._base_client import make_request_options
3434
from ..._resource import SyncAPIResource, AsyncAPIResource
3535
from ..._compat import cached_property
@@ -142,9 +142,14 @@ def _decrypt(
142142
choice.message is not None and choice.finish_reason != 'content_filter'
143143
and choice.message.content is not None
144144
):
145-
choice.message.content = aes_gcm_decrypt_base64_string(
145+
content = aes_gcm_decrypt_base64_string(
146146
key, nonce, choice.message.content
147147
)
148+
if content == '':
149+
content = aes_gcm_decrypt_base64_list(
150+
key, nonce, choice.message.content
151+
)
152+
choice.message.content = content
148153
resp.choices[index] = choice
149154
return resp
150155
else:
@@ -291,9 +296,14 @@ async def _decrypt(
291296
choice.message is not None and choice.finish_reason != 'content_filter'
292297
and choice.message.content is not None
293298
):
294-
choice.message.content = aes_gcm_decrypt_base64_string(
299+
content = aes_gcm_decrypt_base64_string(
295300
key, nonce, choice.message.content
296301
)
302+
if content == '':
303+
content = aes_gcm_decrypt_base64_list(
304+
key, nonce, choice.message.content
305+
)
306+
choice.message.content = content
297307
resp.choices[index] = choice
298308
return resp
299309
else:

volcenginesdkarkruntime/resources/responses/responses.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def create(
9090
tools: Iterable[ToolParam] | None = None,
9191
top_p: Optional[float] | None = None,
9292
max_tool_calls: Optional[int] | None = None,
93+
expire_at: Optional[int] | None = None,
9394
extra_headers: Headers | None = None,
9495
extra_query: Query | None = None,
9596
extra_body: Body | None = None,
@@ -114,7 +115,8 @@ def create(
114115
"tool_choice": tool_choice,
115116
"tools": tools,
116117
"top_p": top_p,
117-
"max_tool_calls": max_tool_calls
118+
"max_tool_calls": max_tool_calls,
119+
"expire_at": expire_at,
118120
},
119121
options=make_request_options(
120122
extra_headers=extra_headers,
@@ -203,6 +205,7 @@ async def create(
203205
tools: Iterable[ToolParam] | None = None,
204206
top_p: Optional[float] | None = None,
205207
max_tool_calls: Optional[int] | None = None,
208+
expire_at: Optional[int] | None = None,
206209
extra_headers: Headers | None = None,
207210
extra_query: Query | None = None,
208211
extra_body: Body | None = None,
@@ -228,6 +231,7 @@ async def create(
228231
"tools": tools,
229232
"top_p": top_p,
230233
"max_tool_calls": max_tool_calls,
234+
"expire_at": expire_at,
231235
},
232236
options=make_request_options(
233237
extra_headers=extra_headers,

0 commit comments

Comments
 (0)