|
@@ -113,7 +113,7 @@ class LLMNode(BaseNode):
|
|
|
}
|
|
|
|
|
|
# handle invoke result
|
|
|
- result_text, usage = self._invoke_llm(
|
|
|
+ result_text, usage, finish_reason = self._invoke_llm(
|
|
|
node_data_model=node_data.model,
|
|
|
model_instance=model_instance,
|
|
|
prompt_messages=prompt_messages,
|
|
@@ -129,7 +129,8 @@ class LLMNode(BaseNode):
|
|
|
|
|
|
outputs = {
|
|
|
'text': result_text,
|
|
|
- 'usage': jsonable_encoder(usage)
|
|
|
+ 'usage': jsonable_encoder(usage),
|
|
|
+ 'finish_reason': finish_reason
|
|
|
}
|
|
|
|
|
|
return NodeRunResult(
|
|
@@ -167,14 +168,14 @@ class LLMNode(BaseNode):
|
|
|
)
|
|
|
|
|
|
# handle invoke result
|
|
|
- text, usage = self._handle_invoke_result(
|
|
|
+ text, usage, finish_reason = self._handle_invoke_result(
|
|
|
invoke_result=invoke_result
|
|
|
)
|
|
|
|
|
|
# deduct quota
|
|
|
self.deduct_llm_quota(tenant_id=self.tenant_id, model_instance=model_instance, usage=usage)
|
|
|
|
|
|
- return text, usage
|
|
|
+ return text, usage, finish_reason
|
|
|
|
|
|
def _handle_invoke_result(self, invoke_result: Generator) -> tuple[str, LLMUsage]:
|
|
|
"""
|
|
@@ -186,6 +187,7 @@ class LLMNode(BaseNode):
|
|
|
prompt_messages = []
|
|
|
full_text = ''
|
|
|
usage = None
|
|
|
+ finish_reason = None
|
|
|
for result in invoke_result:
|
|
|
text = result.delta.message.content
|
|
|
full_text += text
|
|
@@ -201,10 +203,13 @@ class LLMNode(BaseNode):
|
|
|
if not usage and result.delta.usage:
|
|
|
usage = result.delta.usage
|
|
|
|
|
|
+ if not finish_reason and result.delta.finish_reason:
|
|
|
+ finish_reason = result.delta.finish_reason
|
|
|
+
|
|
|
if not usage:
|
|
|
usage = LLMUsage.empty_usage()
|
|
|
|
|
|
- return full_text, usage
|
|
|
+ return full_text, usage, finish_reason
|
|
|
|
|
|
def _transform_chat_messages(self,
|
|
|
messages: list[LLMNodeChatModelMessage] | LLMNodeCompletionModelPromptTemplate
|