feat(llm): 引入 ToolDef IR 类型

新增 Provider 无关的工具定义中间表示 ToolDef,配套实现双向 From 转换;
旧 OpenaiToolDefinition 标记 doc(hidden)。本次仅新增类型,不影响现有
代码路径。
This commit is contained in:
徐涛
2026-07-05 10:06:52 +08:00
parent d3067e2f53
commit b1875192fd
+40
View File
@@ -1,6 +1,25 @@
use serde::{Deserialize, Serialize};
use serde_json::Value;
/// Provider 无关的工具定义 IRv0.2 引入,替换 `ToolDefinition` 别名)。
///
/// 字段最小化:仅承载跨 Provider 公共的概念(name、description、parameters)。
/// OpenAI 专属 `strict` 字段不在此表达,由 OpenAI 适配层通过
/// `MessageRequest.extra` 逃生舱在 `convert_request` 内补充。
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ToolDef {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default)]
pub parameters: Value,
}
/// 旧 OpenAI wire-format 工具定义(v0.2 降级为 `#[doc(hidden)]`)。
///
/// 由 `ToolDef` 替代;保留仅供 OpenAI 适配层消费 `ToolDef → OpenaiToolDefinition`
/// 转换与外部反序列化兼容路径使用,不作为公共 API。
#[doc(hidden)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OpenaiToolDefinition {
pub name: String,
@@ -12,6 +31,27 @@ pub struct OpenaiToolDefinition {
pub strict: Option<bool>,
}
impl From<ToolDef> for OpenaiToolDefinition {
fn from(t: ToolDef) -> Self {
Self {
name: t.name,
description: t.description,
parameters: t.parameters,
strict: None,
}
}
}
impl From<OpenaiToolDefinition> for ToolDef {
fn from(t: OpenaiToolDefinition) -> Self {
Self {
name: t.name,
description: t.description,
parameters: t.parameters,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FunctionCall {
pub name: String,