@@ -302,10 +302,6 @@ async def chat_completion_stream_generator(
302
302
finish_reason_sent = [False ] * num_choices
303
303
num_prompt_tokens = 0
304
304
305
- tool_parsers : List [Optional [ToolParser ]] = [
306
- self .tool_parser (tokenizer ) if self .tool_parser else None
307
- ] * num_choices
308
-
309
305
if isinstance (request .tool_choice , ChatCompletionNamedToolChoiceParam ):
310
306
tool_choice_function_name = request .tool_choice .function .name
311
307
else :
@@ -324,6 +320,21 @@ async def chat_completion_stream_generator(
324
320
else :
325
321
previous_texts , all_previous_token_ids = None , None
326
322
323
+ # Prepare the tool parser if it's needed
324
+ try :
325
+ if tool_choice_auto and self .tool_parser :
326
+ tool_parsers : List [Optional [ToolParser ]] = [
327
+ self .tool_parser (tokenizer )
328
+ ] * num_choices
329
+ else :
330
+ tool_parsers = [None ] * num_choices
331
+ except RuntimeError as e :
332
+ logger .error ("Error in tool parser creation: %s" , e )
333
+ data = self .create_streaming_error_response (str (e ))
334
+ yield f"data: { data } \n \n "
335
+ yield "data: [DONE]\n \n "
336
+ return
337
+
327
338
try :
328
339
async for res in result_generator :
329
340
if res .prompt_token_ids is not None :
@@ -704,7 +715,12 @@ async def chat_completion_full_generator(
704
715
or request .tool_choice is None ) and self .enable_auto_tools \
705
716
and self .tool_parser :
706
717
707
- tool_parser = self .tool_parser (tokenizer )
718
+ try :
719
+ tool_parser = self .tool_parser (tokenizer )
720
+ except RuntimeError as e :
721
+ logger .error ("Error in tool parser creation: %s" , e )
722
+ return self .create_error_response (str (e ))
723
+
708
724
tool_call_info = tool_parser .extract_tool_calls (
709
725
output .text , request = request )
710
726
tools_called = tool_call_info .tools_called
0 commit comments