1818 GlideClientError ,
1919 GlideClientMismatch ,
2020 GlideChatStreamError ,
21+ GlideServerError ,
2122)
2223from glide .lang import schemas
23- from glide .lang .schemas import ChatStreamRequest , ChatStreamMessage , ChatRequestId
24+ from glide .lang .schemas import (
25+ ChatStreamRequest ,
26+ ChatStreamMessage ,
27+ ChatRequestId ,
28+ ChatError ,
29+ )
2430from glide .logging import logger
2531from glide .typing import RouterId
2632
@@ -82,8 +88,8 @@ async def chat_stream(
8288 if err := message .ended_with_err :
8389 # fail only on fatal errors that indicate stream stop
8490 raise GlideChatStreamError (
85- f"Chat stream { req .id } ended with an error: { err .message } (code : { err .err_code } ) " ,
86- err .err_code ,
91+ f"Chat stream { req .id } ended with an error ( { err .name } ) : { err .message } " ,
92+ err .name ,
8793 )
8894
8995 yield message # returns content chunk and some error messages
@@ -113,7 +119,7 @@ async def _sender(self) -> None:
113119
114120 await self ._ws_client .send (chat_request .json ())
115121 except asyncio .CancelledError :
116- # TODO: log
122+ logger . debug ( "chat stream sender task is canceled" )
117123 break
118124
119125 async def _receiver (self ) -> None :
@@ -136,6 +142,7 @@ async def _receiver(self) -> None:
136142 exc_info = True ,
137143 )
138144 except asyncio .CancelledError :
145+ logger .debug ("chat stream receiver task is canceled" )
139146 break
140147 except Exception as e :
141148 logger .exception (e )
@@ -213,33 +220,36 @@ async def chat(
213220 """
214221 Send a chat request to a specified language router
215222 """
216- try :
217- headers = {}
223+ headers = {}
218224
219- if self ._user_agent :
220- headers ["User-Agent" ] = self ._user_agent
225+ if self ._user_agent :
226+ headers ["User-Agent" ] = self ._user_agent
221227
228+ try :
222229 resp = await self ._http_client .post (
223230 f"/language/{ router_id } /chat" ,
224231 headers = headers ,
225232 json = request .dict (by_alias = True ),
226233 )
227234
228- except httpx . NetworkError as e :
229- raise GlideUnavailable () from e
235+ if resp . is_error :
236+ err_data = ChatError ( ** resp . json ())
230237
231- if not resp .is_success :
232- raise GlideClientError (
233- f"Failed to send a chat request: { resp .text } (status_code: { resp .status_code } )"
234- )
238+ if resp .is_client_error :
239+ raise GlideClientError (err_data .message , err_data .name )
235240
236- try :
237- raw_response = resp .json ()
241+ if resp .is_server_error :
242+ raise GlideServerError (err_data .message , err_data .name )
243+
244+ raw_resp = resp .json ()
238245
239- return schemas .ChatResponse (** raw_response )
246+ return schemas .ChatResponse (** raw_resp )
247+ except httpx .NetworkError as e :
248+ raise GlideUnavailable () from e
240249 except pydantic .ValidationError as err :
241250 raise GlideClientMismatch (
242- "Failed to validate Glide API response. Please make sure Glide API and client versions are compatible"
251+ "Failed to validate Glide API response. "
252+ "Please make sure Glide API and client versions are compatible"
243253 ) from err
244254
245255 def stream_client (self , router_id : RouterId ) -> AsyncStreamChatClient :
0 commit comments