fix: 修复豆包智能体对话报错的缺陷
--bug=1047570 --user=王孝刚 【github#1374】【大模型】豆包模型对接企业微信,可以正常询问问题。对接豆包智能体大模型,在企业微信询问问题,后台日志报错 https://www.tapd.cn/57709429/s/1595490
This commit is contained in:
parent
723b8b5b02
commit
f5fcc01113
@ -1,13 +1,13 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
|
|
||||||
from typing import List, Dict, Optional, Any, Iterator, Type, cast
|
from typing import List, Dict, Optional, Any, Iterator, Type, cast
|
||||||
from langchain_core.callbacks import CallbackManagerForLLMRun
|
|
||||||
from langchain_core.language_models import LanguageModelInput
|
from langchain_core.language_models import LanguageModelInput
|
||||||
from langchain_core.messages import BaseMessage, AIMessageChunk, BaseMessageChunk
|
from langchain_core.messages import BaseMessage, get_buffer_string
|
||||||
from langchain_core.outputs import ChatGenerationChunk, ChatGeneration
|
from langchain_core.outputs import ChatGenerationChunk, ChatGeneration
|
||||||
from langchain_core.runnables import RunnableConfig, ensure_config
|
from langchain_core.runnables import RunnableConfig, ensure_config
|
||||||
from langchain_openai import ChatOpenAI
|
from langchain_openai import ChatOpenAI
|
||||||
from langchain_openai.chat_models.base import _convert_delta_to_message_chunk
|
|
||||||
|
from common.config.tokenizer_manage_config import TokenizerManage
|
||||||
|
|
||||||
|
|
||||||
class BaseChatOpenAI(ChatOpenAI):
|
class BaseChatOpenAI(ChatOpenAI):
|
||||||
@ -17,9 +17,21 @@ class BaseChatOpenAI(ChatOpenAI):
|
|||||||
return self.usage_metadata
|
return self.usage_metadata
|
||||||
|
|
||||||
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
|
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
|
||||||
|
if self.usage_metadata is None or self.usage_metadata == {}:
|
||||||
|
try:
|
||||||
|
return super().get_num_tokens_from_messages(messages)
|
||||||
|
except Exception as e:
|
||||||
|
tokenizer = TokenizerManage.get_tokenizer()
|
||||||
|
return sum([len(tokenizer.encode(get_buffer_string([m]))) for m in messages])
|
||||||
return self.usage_metadata.get('input_tokens', 0)
|
return self.usage_metadata.get('input_tokens', 0)
|
||||||
|
|
||||||
def get_num_tokens(self, text: str) -> int:
|
def get_num_tokens(self, text: str) -> int:
|
||||||
|
if self.usage_metadata is None or self.usage_metadata == {}:
|
||||||
|
try:
|
||||||
|
return super().get_num_tokens(text)
|
||||||
|
except Exception as e:
|
||||||
|
tokenizer = TokenizerManage.get_tokenizer()
|
||||||
|
return len(tokenizer.encode(text))
|
||||||
return self.get_last_generation_info().get('output_tokens', 0)
|
return self.get_last_generation_info().get('output_tokens', 0)
|
||||||
|
|
||||||
def _stream(
|
def _stream(
|
||||||
@ -54,5 +66,6 @@ class BaseChatOpenAI(ChatOpenAI):
|
|||||||
**kwargs,
|
**kwargs,
|
||||||
).generations[0][0],
|
).generations[0][0],
|
||||||
).message
|
).message
|
||||||
self.usage_metadata = chat_result.response_metadata['token_usage'] if 'token_usage' in chat_result.response_metadata else chat_result.usage_metadata
|
self.usage_metadata = chat_result.response_metadata[
|
||||||
|
'token_usage'] if 'token_usage' in chat_result.response_metadata else chat_result.usage_metadata
|
||||||
return chat_result
|
return chat_result
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user