feat(llm): 引入 ToolDef IR 类型
新增 Provider 无关的工具定义中间表示 ToolDef,配套实现双向 From 转换; 旧 OpenaiToolDefinition 标记 doc(hidden)。本次仅新增类型,不影响现有 代码路径。
This commit is contained in:
@@ -1,6 +1,25 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Value;
|
||||
|
||||
/// Provider 无关的工具定义 IR(v0.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,
|
||||
|
||||
Reference in New Issue
Block a user