remove:移除tool_use模型,修复Jargon提取问题,修改统计为tool统计

This commit is contained in:
SengokuCola
2026-03-29 16:26:34 +08:00
parent 868438e3c1
commit 82bbf0fd52
25 changed files with 906 additions and 311 deletions

View File

@@ -348,17 +348,11 @@ class MessageSequence:
if isinstance(item, TextComponent):
return {"type": "text", "data": item.text}
elif isinstance(item, ImageComponent):
if not item.content:
raise RuntimeError("ImageComponent content 未初始化")
return {"type": "image", "data": item.content, "hash": item.binary_hash}
return {"type": "image", "data": self._ensure_binary_component_content(item, "[图片]"), "hash": item.binary_hash}
elif isinstance(item, EmojiComponent):
if not item.content:
raise RuntimeError("EmojiComponent content 未初始化")
return {"type": "emoji", "data": item.content, "hash": item.binary_hash}
return {"type": "emoji", "data": self._ensure_binary_component_content(item, "[表情包]"), "hash": item.binary_hash}
elif isinstance(item, VoiceComponent):
if not item.content:
raise RuntimeError("VoiceComponent content 未初始化")
return {"type": "voice", "data": item.content, "hash": item.binary_hash}
return {"type": "voice", "data": self._ensure_binary_component_content(item, "[语音消息]"), "hash": item.binary_hash}
elif isinstance(item, AtComponent):
return {
"type": "at",
@@ -388,6 +382,14 @@ class MessageSequence:
logger.warning(f"Unofficial component type: {type(item)}, defaulting to DictComponent")
return {"type": "dict", "data": item.data}
@staticmethod
def _ensure_binary_component_content(item: ByteComponent, fallback_text: str) -> str:
"""确保二进制组件在序列化时带有稳定的文本占位。"""
if item.content:
return item.content
item.content = fallback_text
return item.content
@classmethod
def _dict_2_item(cls, item: Dict[str, Any]) -> StandardMessageComponents:
"""内部方法:将单个消息组件的字典格式转换回组件对象"""

View File

@@ -0,0 +1,59 @@
from datetime import datetime
from typing import Dict, Optional
import json
from src.common.database.database_model import ToolRecord
from . import BaseDatabaseDataModel
class MaiToolRecord(BaseDatabaseDataModel[ToolRecord]):
"""工具调用记录数据模型。"""
def __init__(
self,
tool_id: str,
timestamp: datetime,
session_id: str,
tool_name: str,
tool_reasoning: Optional[str] = None,
tool_data: Optional[Dict] = None,
tool_builtin_prompt: Optional[str] = None,
tool_display_prompt: Optional[str] = None,
):
self.tool_id = tool_id
self.timestamp = timestamp
self.session_id = session_id
self.tool_name = tool_name
self.tool_reasoning = tool_reasoning
self.tool_data = tool_data or {}
self.tool_builtin_prompt = tool_builtin_prompt
self.tool_display_prompt = tool_display_prompt
@classmethod
def from_db_instance(cls, db_record: ToolRecord):
"""从数据库实例创建数据模型对象。"""
return cls(
tool_id=db_record.tool_id,
timestamp=db_record.timestamp,
session_id=db_record.session_id,
tool_name=db_record.tool_name,
tool_reasoning=db_record.tool_reasoning,
tool_data=json.loads(db_record.tool_data) if db_record.tool_data else None,
tool_builtin_prompt=db_record.tool_builtin_prompt,
tool_display_prompt=db_record.tool_display_prompt,
)
def to_db_instance(self):
"""将数据模型对象转换为数据库实例。"""
return ToolRecord(
tool_id=self.tool_id,
timestamp=self.timestamp,
session_id=self.session_id,
tool_name=self.tool_name,
tool_reasoning=self.tool_reasoning,
tool_data=json.dumps(self.tool_data) if self.tool_data else None,
tool_builtin_prompt=self.tool_builtin_prompt,
tool_display_prompt=self.tool_display_prompt,
)