33from typing import Dict , List , Union , Iterable , Optional , Callable , Iterator , AsyncIterator
44
55import httpx
6+ import warnings
67from typing_extensions import Literal
78
89from ..._types import Body , Query , Headers
3233
3334__all__ = ["Completions" , "AsyncCompletions" ]
3435
35-
3636class Completions (SyncAPIResource ):
3737 @cached_property
3838 def with_raw_response (self ) -> CompletionsWithRawResponse :
@@ -50,10 +50,20 @@ def _process_messages(self, messages: Iterable[ChatCompletionMessageParam],
5050 if isinstance (current_content , str ):
5151 message ["content" ] = f (current_content )
5252 elif isinstance (current_content , Iterable ):
53- raise TypeError ("content type {} is not supported end-to-end encryption" .
54- format (type (message .get ('content' ))))
53+ for part in current_content :
54+ if part .get ("type" , None ) == "text" :
55+ part ["text" ] = f (part ["text" ])
56+ elif part .get ("type" , None ) == "image_url" :
57+ if part ["image_url" ]["url" ].startswith ('data:' ):
58+ part ["image_url" ]["url" ] = f (part ["image_url" ]["url" ])
59+ else :
60+ warnings .warn ("encryption is not supported for image url, "
61+ "please use base64 image if you want encryption" )
62+ else :
63+ raise TypeError ("encryption is not supported for content type {}" .
64+ format (type (part )))
5565 else :
56- raise TypeError ("content type {} is not supported end-to-end encryption " .
66+ raise TypeError ("encryption is not supported for content type {} " .
5767 format (type (message .get ('content' ))))
5868
5969 def _encrypt (self , model : str , messages : Iterable [ChatCompletionMessageParam ], extra_headers : Headers
@@ -177,8 +187,21 @@ def _process_messages(self, messages: Iterable[ChatCompletionMessageParam],
177187 current_content = message .get ("content" )
178188 if isinstance (current_content , str ):
179189 message ["content" ] = f (current_content )
190+ elif isinstance (current_content , Iterable ):
191+ for part in current_content :
192+ if part .get ("type" , None ) == "text" :
193+ part ["text" ] = f (part ["text" ])
194+ elif part .get ("type" , None ) == "image_url" :
195+ if part ["image_url" ]["url" ].startswith ('data:' ):
196+ part ["image_url" ]["url" ] = f (part ["image_url" ]["url" ])
197+ else :
198+ warnings .warn ("encryption is not supported for image url, "
199+ "please use base64 image if you want encryption" )
200+ else :
201+ raise TypeError ("encryption is not supported for content type {}" .
202+ format (type (part )))
180203 else :
181- raise TypeError ("content type {} is not supported end-to-end encryption " .
204+ raise TypeError ("encryption is not supported for content type {} " .
182205 format (type (message .get ('content' ))))
183206
184207 def _encrypt (self , model : str , messages : Iterable [ChatCompletionMessageParam ], extra_headers : Headers
0 commit comments