Spaces:
Build error
Build error
File size: 2,228 Bytes
d9494a5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | import { isNonEmptyString, isObject } from '@sniptt/guards';
import { type InputJsonSchema } from '@/logic-function/input-json-schema.type';
import { isRecordObjectSchema } from '@/logic-function/is-record-object-schema';
import { isDefined } from '@/utils/validation/isDefined';
type ResolveObjectLabel = (
objectUniversalIdentifier: string,
) => string | undefined;
const buildRecordIdDescription = (
objectUniversalIdentifier: string | undefined,
resolveObjectLabel?: ResolveObjectLabel,
): string => {
const objectLabel = isNonEmptyString(objectUniversalIdentifier)
? resolveObjectLabel?.(objectUniversalIdentifier)
: undefined;
return `Id of the ${isNonEmptyString(objectLabel) ? objectLabel : 'linked'} record`;
};
export const buildToolInputJsonSchema = (
jsonSchema: InputJsonSchema,
resolveObjectLabel?: ResolveObjectLabel,
): InputJsonSchema => {
if (isRecordObjectSchema(jsonSchema)) {
return {
type: 'string',
description: buildRecordIdDescription(
jsonSchema.objectUniversalIdentifier,
resolveObjectLabel,
),
};
}
if (jsonSchema.type === 'records') {
return {
type: 'array',
items: {
type: 'string',
description: buildRecordIdDescription(
jsonSchema.objectUniversalIdentifier,
resolveObjectLabel,
),
},
};
}
const {
objectUniversalIdentifier: _objectUniversalIdentifier,
multiline: _multiline,
label: _label,
items,
properties,
additionalProperties,
...standardKeywords
} = jsonSchema;
const toolSchema: InputJsonSchema = { ...standardKeywords };
if (isDefined(items)) {
toolSchema.items = buildToolInputJsonSchema(items, resolveObjectLabel);
}
if (isDefined(properties)) {
toolSchema.properties = Object.fromEntries(
Object.entries(properties).map(([key, value]) => [
key,
buildToolInputJsonSchema(value, resolveObjectLabel),
]),
);
}
if (isDefined(additionalProperties)) {
toolSchema.additionalProperties = isObject(additionalProperties)
? buildToolInputJsonSchema(additionalProperties, resolveObjectLabel)
: additionalProperties;
}
return toolSchema;
};
|