|
@@ -324,10 +324,32 @@ class AnthropicLargeLanguageModel(LargeLanguageModel):
|
|
|
output_tokens = 0
|
|
|
finish_reason = None
|
|
|
index = 0
|
|
|
+
|
|
|
+ tool_calls: list[AssistantPromptMessage.ToolCall] = []
|
|
|
+
|
|
|
for chunk in response:
|
|
|
if isinstance(chunk, MessageStartEvent):
|
|
|
- return_model = chunk.message.model
|
|
|
- input_tokens = chunk.message.usage.input_tokens
|
|
|
+ if hasattr(chunk, 'content_block'):
|
|
|
+ content_block = chunk.content_block
|
|
|
+ if isinstance(content_block, dict):
|
|
|
+ if content_block.get('type') == 'tool_use':
|
|
|
+ tool_call = AssistantPromptMessage.ToolCall(
|
|
|
+ id=content_block.get('id'),
|
|
|
+ type='function',
|
|
|
+ function=AssistantPromptMessage.ToolCall.ToolCallFunction(
|
|
|
+ name=content_block.get('name'),
|
|
|
+ arguments=''
|
|
|
+ )
|
|
|
+ )
|
|
|
+ tool_calls.append(tool_call)
|
|
|
+ elif hasattr(chunk, 'delta'):
|
|
|
+ delta = chunk.delta
|
|
|
+ if isinstance(delta, dict) and len(tool_calls) > 0:
|
|
|
+ if delta.get('type') == 'input_json_delta':
|
|
|
+ tool_calls[-1].function.arguments += delta.get('partial_json', '')
|
|
|
+ elif chunk.message:
|
|
|
+ return_model = chunk.message.model
|
|
|
+ input_tokens = chunk.message.usage.input_tokens
|
|
|
elif isinstance(chunk, MessageDeltaEvent):
|
|
|
output_tokens = chunk.usage.output_tokens
|
|
|
finish_reason = chunk.delta.stop_reason
|
|
@@ -335,13 +357,19 @@ class AnthropicLargeLanguageModel(LargeLanguageModel):
|
|
|
# transform usage
|
|
|
usage = self._calc_response_usage(model, credentials, input_tokens, output_tokens)
|
|
|
|
|
|
+ # transform empty tool call arguments to {}
|
|
|
+ for tool_call in tool_calls:
|
|
|
+ if not tool_call.function.arguments:
|
|
|
+ tool_call.function.arguments = '{}'
|
|
|
+
|
|
|
yield LLMResultChunk(
|
|
|
model=return_model,
|
|
|
prompt_messages=prompt_messages,
|
|
|
delta=LLMResultChunkDelta(
|
|
|
index=index + 1,
|
|
|
message=AssistantPromptMessage(
|
|
|
- content=''
|
|
|
+ content='',
|
|
|
+ tool_calls=tool_calls
|
|
|
),
|
|
|
finish_reason=finish_reason,
|
|
|
usage=usage
|