From 2d4833b49e2e6fb62766d915a911f8215cf5f25f Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Wed, 7 Jan 2026 21:14:21 -0500 Subject: [PATCH] feat: enhance agent schema with per-tool options for configuration - Added `tool_options` schema to support per-tool configurations, including `defer_loading` and `allowed_callers`. - Updated agent data model to incorporate new tool options, ensuring flexibility in tool behavior management. - Modified type definitions to reflect the new `tool_options` structure for agents. --- packages/api/src/agents/validation.ts | 10 ++++++++++ packages/data-schemas/src/schema/agent.ts | 5 +++++ packages/data-schemas/src/types/agent.ts | 4 +++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/api/src/agents/validation.ts b/packages/api/src/agents/validation.ts index 4798ffeb80..d427b3639e 100644 --- a/packages/api/src/agents/validation.ts +++ b/packages/api/src/agents/validation.ts @@ -51,6 +51,15 @@ export const graphEdgeSchema = z.object({ promptKey: z.string().optional(), }); +/** Per-tool options schema (defer_loading, allowed_callers) */ +export const toolOptionsSchema = z.object({ + defer_loading: z.boolean().optional(), + allowed_callers: z.array(z.enum(['direct', 'code_execution'])).optional(), +}); + +/** Agent tool options - map of tool_id to tool options */ +export const agentToolOptionsSchema = z.record(z.string(), toolOptionsSchema).optional(); + /** Base agent schema with all common fields */ export const agentBaseSchema = z.object({ name: z.string().nullable().optional(), @@ -68,6 +77,7 @@ export const agentBaseSchema = z.object({ recursion_limit: z.number().optional(), conversation_starters: z.array(z.string()).optional(), tool_resources: agentToolResourcesSchema, + tool_options: agentToolOptionsSchema, support_contact: agentSupportContactSchema, category: z.string().optional(), }); diff --git a/packages/data-schemas/src/schema/agent.ts b/packages/data-schemas/src/schema/agent.ts index 51739f552a..32bba8bef8 100644 --- a/packages/data-schemas/src/schema/agent.ts +++ b/packages/data-schemas/src/schema/agent.ts @@ -118,6 +118,11 @@ const agentSchema = new Schema( default: [], index: true, }, + /** Per-tool configuration (defer_loading, allowed_callers) */ + tool_options: { + type: Schema.Types.Mixed, + default: undefined, + }, }, { timestamps: true, diff --git a/packages/data-schemas/src/types/agent.ts b/packages/data-schemas/src/types/agent.ts index b150b2ec3f..3549e88b4a 100644 --- a/packages/data-schemas/src/types/agent.ts +++ b/packages/data-schemas/src/types/agent.ts @@ -1,5 +1,5 @@ import { Document, Types } from 'mongoose'; -import type { GraphEdge } from 'librechat-data-provider'; +import type { GraphEdge, AgentToolOptions } from 'librechat-data-provider'; export interface ISupportContact { name?: string; @@ -42,4 +42,6 @@ export interface IAgent extends Omit { is_promoted?: boolean; /** MCP server names extracted from tools for efficient querying */ mcpServerNames?: string[]; + /** Per-tool configuration (defer_loading, allowed_callers) */ + tool_options?: AgentToolOptions; }