Skip to content

Commit 51ba7fc

Browse files
author
liuhuiqi.7
committed
feat(ark e2e): support more type content
Change-Id: I1edf44faab6ee981404f124ff5df8642efaa0292
1 parent 19604bc commit 51ba7fc

File tree

1 file changed

+31
-8
lines changed

1 file changed

+31
-8
lines changed

volcenginesdkarkruntime/resources/chat/completions.py

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import Dict, List, Union, Iterable, Optional
3+
from typing import Dict, List, Union, Iterable, Optional, Callable
44

55
import httpx
66
from typing_extensions import Literal
@@ -40,15 +40,37 @@ def with_raw_response(self) -> CompletionsWithRawResponse:
4040
def with_streaming_response(self) -> CompletionsWithStreamingResponse:
4141
return CompletionsWithStreamingResponse(self)
4242

43-
def encrypt(self, model: str, messages: Iterable[ChatCompletionMessageParam], extra_headers: Headers):
43+
def _process_messages(self, messages: Iterable[ChatCompletionMessageParam],
44+
f: Callable[[str], str]):
45+
for message in messages:
46+
if message.get("content", None) is not None:
47+
if isinstance(message.get("content"), str):
48+
message["content"] = f(message.get("content"))
49+
elif isinstance(message.get("content"), Iterable):
50+
content = message.get("content")
51+
for i, c in enumerate(content):
52+
if not isinstance(c, Dict):
53+
raise TypeError("content type {} is not supported end-to-end encryption".
54+
format(type(c)))
55+
for key in c.keys():
56+
if isinstance(c[key], str):
57+
content[i][key] = f(c[key])
58+
if isinstance(c[key], Dict):
59+
for k in c[key].keys():
60+
if isinstance(c[key][k], str):
61+
content[i][key][k] = f(c[key][k])
62+
message["content"] = content
63+
else:
64+
raise TypeError("content type {} is not supported end-to-end encryption".
65+
format(type(message.get('content'))))
66+
67+
def _encrypt(self, model: str, messages: Iterable[ChatCompletionMessageParam], extra_headers: Headers):
4468
client = self._client._get_endpoint_certificate(model)
4569
self._crypto_key, self._crypto_nonce, session_token = client.generate_ecies_key_pair()
4670
extra_headers['X-Session-Token'] = session_token
47-
for message in messages:
48-
if message.get("content", None) is not None:
49-
message["content"] = client.encrypt_string_with_key(self._crypto_key,
50-
self._crypto_nonce,
51-
message.get("content"))
71+
self._process_messages(messages, lambda x: client.encrypt_string_with_key(self._crypto_key,
72+
self._crypto_nonce,
73+
x))
5274

5375
@with_sts_token
5476
def create(
@@ -81,7 +103,8 @@ def create(
81103
is_encrypt: bool | None = None,
82104
) -> ChatCompletion | Stream[ChatCompletionChunk]:
83105
if is_encrypt:
84-
self.encrypt(model, messages, extra_headers)
106+
self._encrypt(model, messages, extra_headers)
107+
print(messages)
85108

86109
return self._post(
87110
"/chat/completions",

0 commit comments

Comments
 (0)