| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.addOutputText = exports.validateInputTools = exports.shouldParseToolCall = exports.isAutoParsableTool = exports.makeParseableResponseTool = exports.hasAutoParseableInput = exports.parseResponse = exports.maybeParseResponse = void 0;
- const error_1 = require("../error.js");
- const parser_1 = require("../lib/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);
- }
- exports.maybeParseResponse = maybeParseResponse;
- 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;
- }
- exports.parseResponse = parseResponse;
- 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 ((0, parser_1.isAutoParsableResponseFormat)(params.text?.format)) {
- return true;
- }
- return false;
- }
- exports.hasAutoParseableInput = hasAutoParseableInput;
- function makeParseableResponseTool(tool, { parser, callback, }) {
- const obj = { ...tool };
- Object.defineProperties(obj, {
- $brand: {
- value: 'auto-parseable-tool',
- enumerable: false,
- },
- $parseRaw: {
- value: parser,
- enumerable: false,
- },
- $callback: {
- value: callback,
- enumerable: false,
- },
- });
- return obj;
- }
- exports.makeParseableResponseTool = makeParseableResponseTool;
- function isAutoParsableTool(tool) {
- return tool?.['$brand'] === 'auto-parseable-tool';
- }
- exports.isAutoParsableTool = isAutoParsableTool;
- 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 shouldParseToolCall(params, toolCall) {
- if (!params) {
- return false;
- }
- const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);
- return isAutoParsableTool(inputTool) || inputTool?.strict || false;
- }
- exports.shouldParseToolCall = shouldParseToolCall;
- function validateInputTools(tools) {
- for (const tool of tools ?? []) {
- if (tool.type !== 'function') {
- throw new error_1.OpenAIError(`Currently only \`function\` tool types support auto-parsing; Received \`${tool.type}\``);
- }
- if (tool.function.strict !== true) {
- throw new error_1.OpenAIError(`The \`${tool.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`);
- }
- }
- }
- exports.validateInputTools = validateInputTools;
- 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('');
- }
- exports.addOutputText = addOutputText;
- //# sourceMappingURL=ResponsesParser.js.map
|