mirror of
https://github.com/hanzochat/agents.git
synced 2026-10-30 20:55:06 +00:00
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { tool, type StructuredToolInterface } from '@langchain/core/tools';
|
|
import type { LCTool } from '@/types';
|
|
|
|
/**
|
|
* Creates a schema-only tool for LLM binding in event-driven mode.
|
|
* These tools have valid schemas for the LLM to understand but should
|
|
* never be invoked directly - ToolNode handles execution via events.
|
|
*/
|
|
export function createSchemaOnlyTool(
|
|
definition: LCTool
|
|
): StructuredToolInterface {
|
|
const { name, description, parameters, responseFormat } = definition;
|
|
|
|
return tool(
|
|
async () => {
|
|
throw new Error(
|
|
`Tool "${name}" should not be invoked directly in event-driven mode. ` +
|
|
'ToolNode should dispatch ON_TOOL_EXECUTE events instead.'
|
|
);
|
|
},
|
|
{
|
|
name,
|
|
description: description ?? '',
|
|
schema: parameters ?? { type: 'object', properties: {} },
|
|
responseFormat: responseFormat ?? 'content_and_artifact',
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Creates schema-only tools for all definitions in an array.
|
|
*/
|
|
export function createSchemaOnlyTools(
|
|
definitions: LCTool[]
|
|
): StructuredToolInterface[] {
|
|
return definitions.map((def) => createSchemaOnlyTool(def));
|
|
}
|