SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
68d7816 verified
Raw History Blame Contribute Delete
1.36 kB
import type { Message } from '#/llm/message';
import type { MessageResolver } from '#/llm/requester/actor';
import type { ToolSelectState } from './state';
export function createToolSelectMessageResolver(state: ToolSelectState): MessageResolver {
return {
id: 'tool-select',
resolve: (messages) => {
let shaped: Message[] | undefined;
for (let i = 0; i < messages.length; i += 1) {
const message = messages[i] as Message;
const next = shapeMessage(message, state);
if (next === message) {
if (shaped !== undefined) shaped.push(message);
continue;
}
shaped ??= messages.slice(0, i);
if (next !== undefined) shaped.push(next);
}
return Promise.resolve(shaped ?? messages);
},
};
}
function shapeMessage(message: Message, state: ToolSelectState): Message | undefined {
if (message.role !== 'system' || message.tools === undefined || message.tools.length === 0) {
return message;
}
const kept = state.enabled()
? message.tools.filter((tool) => state.isLoadable(tool.name))
: [];
if (kept.length === message.tools.length) return message;
if (kept.length > 0) return { ...message, tools: kept };
if (message.content.length === 0) return undefined;
const { tools: _tools, ...rest } = message;
void _tools;
return rest;
}