UNPKG

@restnfeel/agentc-starter-kit

Version:

한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템

128 lines (125 loc) 4.05 kB
import { isAutoParsableResponseFormat } from './parser.js'; function maybeParseResponse(response, params) { if (!params || !hasAutoParseableInput(params)) { return { ...response, output_parsed: null, output: response.output.map((item) => { if (item.type === 'function_call') { return { ...item, parsed_arguments: null, }; } if (item.type === 'message') { return { ...item, content: item.content.map((content) => ({ ...content, parsed: null, })), }; } else { return item; } }), }; } return parseResponse(response, params); } function parseResponse(response, params) { const output = response.output.map((item) => { if (item.type === 'function_call') { return { ...item, parsed_arguments: parseToolCall(params, item), }; } if (item.type === 'message') { const content = item.content.map((content) => { if (content.type === 'output_text') { return { ...content, parsed: parseTextFormat(params, content.text), }; } return content; }); return { ...item, content, }; } return item; }); const parsed = Object.assign({}, response, { output }); if (!Object.getOwnPropertyDescriptor(response, 'output_text')) { addOutputText(parsed); } Object.defineProperty(parsed, 'output_parsed', { enumerable: true, get() { for (const output of parsed.output) { if (output.type !== 'message') { continue; } for (const content of output.content) { if (content.type === 'output_text' && content.parsed !== null) { return content.parsed; } } } return null; }, }); return parsed; } function parseTextFormat(params, content) { if (params.text?.format?.type !== 'json_schema') { return null; } if ('$parseRaw' in params.text?.format) { const text_format = params.text?.format; return text_format.$parseRaw(content); } return JSON.parse(content); } function hasAutoParseableInput(params) { if (isAutoParsableResponseFormat(params.text?.format)) { return true; } return false; } function isAutoParsableTool(tool) { return tool?.['$brand'] === 'auto-parseable-tool'; } function getInputToolByName(input_tools, name) { return input_tools.find((tool) => tool.type === 'function' && tool.name === name); } function parseToolCall(params, toolCall) { const inputTool = getInputToolByName(params.tools ?? [], toolCall.name); return { ...toolCall, ...toolCall, parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments) : inputTool?.strict ? JSON.parse(toolCall.arguments) : null, }; } function addOutputText(rsp) { const texts = []; for (const output of rsp.output) { if (output.type !== 'message') { continue; } for (const content of output.content) { if (content.type === 'output_text') { texts.push(content.text); } } } rsp.output_text = texts.join(''); } export { addOutputText, hasAutoParseableInput, isAutoParsableTool, maybeParseResponse, parseResponse }; //# sourceMappingURL=ResponsesParser.js.map