mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-26 21:28:50 +01:00
🔧 refactor: Optimize Agent Tool Loading and Fix Bedrock Tool Handling (#4641)
* fix: bedrock tool name regex * fix: pass args as single input, attempt json first. * refactor: remove toolMap from agent tool load as is not used * fix: update formatAgentMessages test to use strictEqual for args comparison, testing new behavior
This commit is contained in:
parent
3428c3c647
commit
0c2a583df8
9 changed files with 11 additions and 18 deletions
|
|
@ -461,7 +461,6 @@ class AgentClient extends BaseClient {
|
|||
req: this.options.req,
|
||||
agent: this.options.agent,
|
||||
tools: this.options.tools,
|
||||
toolMap: this.options.toolMap,
|
||||
runId: this.responseMessageId,
|
||||
modelOptions: this.modelOptions,
|
||||
customHandlers: this.options.eventHandlers,
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ const { providerEndpointMap } = require('librechat-data-provider');
|
|||
* @param {string | undefined} [options.runId] - Optional run ID; otherwise, a new run ID will be generated.
|
||||
* @param {Agent} options.agent - The agent for this run.
|
||||
* @param {StructuredTool[] | undefined} [options.tools] - The tools to use in the run.
|
||||
* @param {Record<string, StructuredTool[]> | undefined} [options.toolMap] - The tool map for the run.
|
||||
* @param {Record<GraphEvents, EventHandler> | undefined} [options.customHandlers] - Custom event handlers.
|
||||
* @param {ClientOptions} [options.modelOptions] - Optional model to use; if not provided, it will use the default from modelMap.
|
||||
* @param {boolean} [options.streaming=true] - Whether to use streaming.
|
||||
|
|
@ -29,7 +28,6 @@ async function createRun({
|
|||
runId,
|
||||
tools,
|
||||
agent,
|
||||
toolMap,
|
||||
modelOptions,
|
||||
customHandlers,
|
||||
streaming = true,
|
||||
|
|
@ -47,7 +45,6 @@ async function createRun({
|
|||
|
||||
const graphConfig = {
|
||||
tools,
|
||||
toolMap,
|
||||
llmConfig,
|
||||
instructions: agent.instructions,
|
||||
additional_instructions: agent.additional_instructions,
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ const { getLogStores } = require('~/cache');
|
|||
const { logger } = require('~/config');
|
||||
|
||||
const toolNameRegex = /^[a-zA-Z0-9_-]+$/;
|
||||
const replaceSeparatorRegex = new RegExp(actionDomainSeparator, 'g');
|
||||
|
||||
/**
|
||||
* Validates tool name against regex pattern and updates if necessary.
|
||||
|
|
@ -83,8 +84,6 @@ async function domainParser(req, domain, inverse = false) {
|
|||
return key;
|
||||
}
|
||||
|
||||
const replaceSeparatorRegex = new RegExp(actionDomainSeparator, 'g');
|
||||
|
||||
if (!cachedDomain) {
|
||||
return domain.replace(replaceSeparatorRegex, '.');
|
||||
}
|
||||
|
|
@ -156,7 +155,7 @@ async function createActionTool({ action, requestBuilder, zodSchema, name, descr
|
|||
|
||||
if (name) {
|
||||
return tool(_call, {
|
||||
name,
|
||||
name: name.replace(replaceSeparatorRegex, '_'),
|
||||
description: description || '',
|
||||
schema: zodSchema,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ const initializeClient = async ({ req, res, endpointOption }) => {
|
|||
throw new Error('Agent not found');
|
||||
}
|
||||
|
||||
const { tools, toolMap } = await loadAgentTools({
|
||||
const { tools } = await loadAgentTools({
|
||||
req,
|
||||
tools: agent.tools,
|
||||
agent_id: agent.id,
|
||||
|
|
@ -100,7 +100,6 @@ const initializeClient = async ({ req, res, endpointOption }) => {
|
|||
agent,
|
||||
tools,
|
||||
sender,
|
||||
toolMap,
|
||||
contentParts,
|
||||
modelOptions,
|
||||
eventHandlers,
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ const initializeClient = async ({ req, res, endpointOption }) => {
|
|||
agent,
|
||||
sender,
|
||||
// tools,
|
||||
// toolMap,
|
||||
modelOptions,
|
||||
contentParts,
|
||||
eventHandlers,
|
||||
|
|
|
|||
|
|
@ -373,14 +373,14 @@ async function processRequiredActions(client, requiredActions) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Processes the runtime tool calls and returns a combined toolMap.
|
||||
* Processes the runtime tool calls and returns the tool classes.
|
||||
* @param {Object} params - Run params containing user and request information.
|
||||
* @param {ServerRequest} params.req - The request object.
|
||||
* @param {string} params.agent_id - The agent ID.
|
||||
* @param {Agent['tools']} params.tools - The agent's available tools.
|
||||
* @param {Agent['tool_resources']} params.tool_resources - The agent's available tool resources.
|
||||
* @param {string | undefined} [params.openAIApiKey] - The OpenAI API key.
|
||||
* @returns {Promise<{ tools?: StructuredTool[]; toolMap?: Record<string, StructuredTool>}>} The combined toolMap.
|
||||
* @returns {Promise<{ tools?: StructuredTool[] }>} The agent tools.
|
||||
*/
|
||||
async function loadAgentTools({ req, agent_id, tools, tool_resources, openAIApiKey }) {
|
||||
if (!tools || tools.length === 0) {
|
||||
|
|
@ -482,10 +482,8 @@ async function loadAgentTools({ req, agent_id, tools, tool_resources, openAIApiK
|
|||
throw new Error('No tools found for the specified tool calls.');
|
||||
}
|
||||
|
||||
const toolMap = { ...ToolMap, ...ActionToolMap };
|
||||
return {
|
||||
tools: agentTools,
|
||||
toolMap,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue