60 lines
2.4 KiB
JavaScript
60 lines
2.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.transformToChatCompletionRequest = transformToChatCompletionRequest;
|
|
exports.convertToParsedChatCompletionResponse = convertToParsedChatCompletionResponse;
|
|
exports.responseFormatFromZodObject = responseFormatFromZodObject;
|
|
const zod_to_json_schema_1 = require("zod-to-json-schema");
|
|
function transformToChatCompletionRequest(parsedRequest) {
|
|
const { responseFormat, ...rest } = parsedRequest;
|
|
// Transform responseFormat from z.ZodType to ResponseFormat
|
|
const transformedResponseFormat = responseFormatFromZodObject(responseFormat);
|
|
return {
|
|
...rest,
|
|
responseFormat: transformedResponseFormat,
|
|
};
|
|
}
|
|
function convertToParsedChatCompletionResponse(response, responseFormat) {
|
|
if (response.choices === undefined || response.choices.length === 0) {
|
|
return {
|
|
...response,
|
|
choices: response.choices === undefined ? undefined : [],
|
|
};
|
|
}
|
|
const parsedChoices = [];
|
|
for (const _choice of response.choices) {
|
|
if (_choice.message === null || typeof _choice.message === 'undefined') {
|
|
parsedChoices.push({ ..._choice, message: undefined });
|
|
}
|
|
else {
|
|
if (_choice.message.content !== null && typeof _choice.message.content !== 'undefined' && !Array.isArray(_choice.message.content)) {
|
|
parsedChoices.push({
|
|
..._choice,
|
|
message: {
|
|
..._choice.message,
|
|
parsed: responseFormat.safeParse(JSON.parse(_choice.message.content)).data,
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
...response,
|
|
choices: parsedChoices,
|
|
};
|
|
}
|
|
// Function to convert Zod schema to strict JSON schema
|
|
function responseFormatFromZodObject(responseFormat) {
|
|
const responseJsonSchema = (0, zod_to_json_schema_1.zodToJsonSchema)(responseFormat);
|
|
// It is not possible to get the variable name of a Zod object at runtime in TypeScript so we're using a placeholder name.
|
|
// This has not impact on the parsing as the initial Zod object is used to parse the response.
|
|
const placeholderName = "placeholderName";
|
|
return {
|
|
type: "json_schema",
|
|
jsonSchema: {
|
|
name: placeholderName,
|
|
schemaDefinition: responseJsonSchema,
|
|
strict: true,
|
|
},
|
|
};
|
|
}
|
|
//# sourceMappingURL=structChat.js.map
|