@jaypie/llm 1.3.4 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +166 -27
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +13 -1
- package/dist/cjs/{index.d.ts → src/index.d.ts} +1 -0
- package/dist/cjs/{util → src/util}/index.d.ts +1 -0
- package/dist/cjs/src/util/jsonSchema.d.ts +17 -0
- package/dist/esm/index.d.ts +13 -1
- package/dist/esm/index.js +191 -54
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/src/index.d.ts +17 -0
- package/dist/esm/{util → src/util}/index.d.ts +1 -0
- package/dist/esm/src/util/jsonSchema.d.ts +17 -0
- package/package.json +3 -2
- /package/dist/cjs/{Llm.d.ts → src/Llm.d.ts} +0 -0
- /package/dist/cjs/{constants.d.ts → src/constants.d.ts} +0 -0
- /package/dist/cjs/{observability → src/observability}/llmobs.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/OperateLoop.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/StreamLoop.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/adapters/AnthropicAdapter.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/adapters/BedrockAdapter.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/adapters/GoogleAdapter.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/adapters/OpenAiAdapter.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/adapters/OpenRouterAdapter.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/adapters/ProviderAdapter.interface.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/adapters/XaiAdapter.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/adapters/index.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/hooks/HookRunner.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/hooks/index.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/index.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/input/InputProcessor.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/input/index.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/response/ResponseBuilder.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/response/index.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/retry/RetryExecutor.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/retry/RetryPolicy.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/retry/createStaleRejectionGuard.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/retry/index.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/retry/isTransientNetworkError.d.ts +0 -0
- /package/dist/cjs/{operate → src/operate}/types.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/anthropic/AnthropicProvider.class.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/anthropic/client.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/anthropic/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/anthropic/types.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/anthropic/utils.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/bedrock/BedrockProvider.class.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/bedrock/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/bedrock/utils.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/google/GoogleProvider.class.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/google/client.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/google/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/google/types.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/google/utils.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openai/OpenAiProvider.class.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openai/client.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openai/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openai/responseFormat.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openai/types.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openai/utils.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openrouter/OpenRouterProvider.class.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openrouter/client.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openrouter/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/openrouter/utils.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/xai/XaiProvider.class.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/xai/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/xai/utils.d.ts +0 -0
- /package/dist/cjs/{tools → src/tools}/Toolkit.class.d.ts +0 -0
- /package/dist/cjs/{tools → src/tools}/index.d.ts +0 -0
- /package/dist/cjs/{tools → src/tools}/random.d.ts +0 -0
- /package/dist/cjs/{tools → src/tools}/roll.d.ts +0 -0
- /package/dist/cjs/{tools → src/tools}/time.d.ts +0 -0
- /package/dist/cjs/{tools → src/tools}/weather.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/LlmOperateInput.guards.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/LlmProvider.interface.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/LlmStreamChunk.interface.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/LlmTool.interface.d.ts +0 -0
- /package/dist/cjs/{upload → src/upload}/detectMimeType.d.ts +0 -0
- /package/dist/cjs/{upload → src/upload}/extractPdfPages.d.ts +0 -0
- /package/dist/cjs/{upload → src/upload}/index.d.ts +0 -0
- /package/dist/cjs/{upload → src/upload}/loadLocalFile.d.ts +0 -0
- /package/dist/cjs/{upload → src/upload}/loadS3File.d.ts +0 -0
- /package/dist/cjs/{upload → src/upload}/resolveOperateInput.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/determineModelProvider.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/extractReasoning.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/fillFormatArrays.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/formatOperateInput.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/formatOperateMessage.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/jsonSchemaToOpenApi3.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/logger.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/maxTurnsFromOptions.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/naturalZodSchema.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/random.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/repairFormatKeys.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/sse.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/tryParseNumber.d.ts +0 -0
- /package/dist/esm/{Llm.d.ts → src/Llm.d.ts} +0 -0
- /package/dist/esm/{constants.d.ts → src/constants.d.ts} +0 -0
- /package/dist/esm/{observability → src/observability}/llmobs.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/OperateLoop.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/StreamLoop.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/adapters/AnthropicAdapter.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/adapters/BedrockAdapter.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/adapters/GoogleAdapter.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/adapters/OpenAiAdapter.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/adapters/OpenRouterAdapter.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/adapters/ProviderAdapter.interface.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/adapters/XaiAdapter.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/adapters/index.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/hooks/HookRunner.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/hooks/index.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/index.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/input/InputProcessor.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/input/index.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/response/ResponseBuilder.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/response/index.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/retry/RetryExecutor.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/retry/RetryPolicy.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/retry/createStaleRejectionGuard.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/retry/index.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/retry/isTransientNetworkError.d.ts +0 -0
- /package/dist/esm/{operate → src/operate}/types.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/anthropic/AnthropicProvider.class.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/anthropic/client.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/anthropic/index.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/anthropic/types.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/anthropic/utils.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/bedrock/BedrockProvider.class.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/bedrock/index.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/bedrock/utils.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/google/GoogleProvider.class.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/google/client.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/google/index.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/google/types.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/google/utils.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openai/OpenAiProvider.class.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openai/client.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openai/index.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openai/responseFormat.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openai/types.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openai/utils.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openrouter/OpenRouterProvider.class.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openrouter/client.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openrouter/index.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/openrouter/utils.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/xai/XaiProvider.class.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/xai/index.d.ts +0 -0
- /package/dist/esm/{providers → src/providers}/xai/utils.d.ts +0 -0
- /package/dist/esm/{tools → src/tools}/Toolkit.class.d.ts +0 -0
- /package/dist/esm/{tools → src/tools}/index.d.ts +0 -0
- /package/dist/esm/{tools → src/tools}/random.d.ts +0 -0
- /package/dist/esm/{tools → src/tools}/roll.d.ts +0 -0
- /package/dist/esm/{tools → src/tools}/time.d.ts +0 -0
- /package/dist/esm/{tools → src/tools}/weather.d.ts +0 -0
- /package/dist/esm/{types → src/types}/LlmOperateInput.guards.d.ts +0 -0
- /package/dist/esm/{types → src/types}/LlmProvider.interface.d.ts +0 -0
- /package/dist/esm/{types → src/types}/LlmStreamChunk.interface.d.ts +0 -0
- /package/dist/esm/{types → src/types}/LlmTool.interface.d.ts +0 -0
- /package/dist/esm/{upload → src/upload}/detectMimeType.d.ts +0 -0
- /package/dist/esm/{upload → src/upload}/extractPdfPages.d.ts +0 -0
- /package/dist/esm/{upload → src/upload}/index.d.ts +0 -0
- /package/dist/esm/{upload → src/upload}/loadLocalFile.d.ts +0 -0
- /package/dist/esm/{upload → src/upload}/loadS3File.d.ts +0 -0
- /package/dist/esm/{upload → src/upload}/resolveOperateInput.d.ts +0 -0
- /package/dist/esm/{util → src/util}/determineModelProvider.d.ts +0 -0
- /package/dist/esm/{util → src/util}/extractReasoning.d.ts +0 -0
- /package/dist/esm/{util → src/util}/fillFormatArrays.d.ts +0 -0
- /package/dist/esm/{util → src/util}/formatOperateInput.d.ts +0 -0
- /package/dist/esm/{util → src/util}/formatOperateMessage.d.ts +0 -0
- /package/dist/esm/{util → src/util}/jsonSchemaToOpenApi3.d.ts +0 -0
- /package/dist/esm/{util → src/util}/logger.d.ts +0 -0
- /package/dist/esm/{util → src/util}/maxTurnsFromOptions.d.ts +0 -0
- /package/dist/esm/{util → src/util}/naturalZodSchema.d.ts +0 -0
- /package/dist/esm/{util → src/util}/random.d.ts +0 -0
- /package/dist/esm/{util → src/util}/repairFormatKeys.d.ts +0 -0
- /package/dist/esm/{util → src/util}/sse.d.ts +0 -0
- /package/dist/esm/{util → src/util}/tryParseNumber.d.ts +0 -0
package/dist/cjs/index.cjs
CHANGED
|
@@ -768,6 +768,119 @@ function formatOperateInput(input, options) {
|
|
|
768
768
|
return [input];
|
|
769
769
|
}
|
|
770
770
|
|
|
771
|
+
// Keywords a JSON Schema object node can carry that Natural Schema has no
|
|
772
|
+
// representation for. Anything present here (or any other unrecognized key)
|
|
773
|
+
// is dropped silently and logged, never thrown.
|
|
774
|
+
const LOSSY_OBJECT_KEYWORDS = [
|
|
775
|
+
"$defs",
|
|
776
|
+
"$id",
|
|
777
|
+
"$ref",
|
|
778
|
+
"$schema",
|
|
779
|
+
"additionalProperties",
|
|
780
|
+
"const",
|
|
781
|
+
"default",
|
|
782
|
+
"description",
|
|
783
|
+
"format",
|
|
784
|
+
"maxLength",
|
|
785
|
+
"maximum",
|
|
786
|
+
"minLength",
|
|
787
|
+
"minimum",
|
|
788
|
+
"multipleOf",
|
|
789
|
+
"nullable",
|
|
790
|
+
"allOf",
|
|
791
|
+
"anyOf",
|
|
792
|
+
"oneOf",
|
|
793
|
+
"pattern",
|
|
794
|
+
];
|
|
795
|
+
const KNOWN_KEYWORDS = new Set([
|
|
796
|
+
"type",
|
|
797
|
+
"properties",
|
|
798
|
+
"required",
|
|
799
|
+
"items",
|
|
800
|
+
"enum",
|
|
801
|
+
...LOSSY_OBJECT_KEYWORDS,
|
|
802
|
+
]);
|
|
803
|
+
/**
|
|
804
|
+
* Duck-type check for a bare JSON Schema object node: `{ type: "object", properties: {...} }`.
|
|
805
|
+
* Does not require the OpenAI-style `{ type: "json_schema", ... }` envelope.
|
|
806
|
+
*/
|
|
807
|
+
function isJsonSchema$1(value) {
|
|
808
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
809
|
+
return false;
|
|
810
|
+
}
|
|
811
|
+
const schema = value;
|
|
812
|
+
return (schema.type === "object" &&
|
|
813
|
+
typeof schema.properties === "object" &&
|
|
814
|
+
schema.properties !== null &&
|
|
815
|
+
!Array.isArray(schema.properties));
|
|
816
|
+
}
|
|
817
|
+
/**
|
|
818
|
+
* Convert a Natural Schema to JSON Schema. Lossless: Natural Schema is a
|
|
819
|
+
* strict subset of what JSON Schema can express.
|
|
820
|
+
*/
|
|
821
|
+
function naturalSchemaToJsonSchema(schema) {
|
|
822
|
+
return v4.z.toJSONSchema(naturalZodSchema(schema));
|
|
823
|
+
}
|
|
824
|
+
function logDroppedKeywords(schema, path) {
|
|
825
|
+
for (const key of Object.keys(schema)) {
|
|
826
|
+
if (!KNOWN_KEYWORDS.has(key)) {
|
|
827
|
+
log$1.debug(`[jsonSchemaToNaturalSchema] Dropping unrecognized keyword "${key}" at "${path}"`);
|
|
828
|
+
}
|
|
829
|
+
else if (LOSSY_OBJECT_KEYWORDS.includes(key) &&
|
|
830
|
+
schema[key] !== undefined) {
|
|
831
|
+
log$1.debug(`[jsonSchemaToNaturalSchema] Dropping unsupported keyword "${key}" at "${path}"`);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
function convertNode(schema, path) {
|
|
836
|
+
logDroppedKeywords(schema, path);
|
|
837
|
+
if (Array.isArray(schema.enum)) {
|
|
838
|
+
return schema.enum;
|
|
839
|
+
}
|
|
840
|
+
switch (schema.type) {
|
|
841
|
+
case "string":
|
|
842
|
+
return String;
|
|
843
|
+
case "number":
|
|
844
|
+
case "integer":
|
|
845
|
+
return Number;
|
|
846
|
+
case "boolean":
|
|
847
|
+
return Boolean;
|
|
848
|
+
case "array": {
|
|
849
|
+
const items = schema.items;
|
|
850
|
+
if (typeof items !== "object" || items === null || Array.isArray(items)) {
|
|
851
|
+
return Array;
|
|
852
|
+
}
|
|
853
|
+
return [convertNode(items, `${path}[]`)];
|
|
854
|
+
}
|
|
855
|
+
case "object": {
|
|
856
|
+
const properties = schema.properties;
|
|
857
|
+
if (!properties || Object.keys(properties).length === 0) {
|
|
858
|
+
return Object;
|
|
859
|
+
}
|
|
860
|
+
const required = new Set(Array.isArray(schema.required) ? schema.required : []);
|
|
861
|
+
const result = {};
|
|
862
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
863
|
+
if (!required.has(key)) {
|
|
864
|
+
log$1.debug(`[jsonSchemaToNaturalSchema] Field "${path}.${key}" is optional; Natural Schema has no optional marker — treating as required`);
|
|
865
|
+
}
|
|
866
|
+
result[key] = convertNode(value, `${path}.${key}`);
|
|
867
|
+
}
|
|
868
|
+
return result;
|
|
869
|
+
}
|
|
870
|
+
default:
|
|
871
|
+
log$1.debug(`[jsonSchemaToNaturalSchema] Unsupported type "${String(schema.type)}" at "${path}"; defaulting to Object`);
|
|
872
|
+
return Object;
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
/**
|
|
876
|
+
* Convert a JSON Schema object node to Natural Schema. Lossy: constraints,
|
|
877
|
+
* descriptions, defaults, unions, and optionality have no Natural Schema
|
|
878
|
+
* representation. Dropped keywords are logged at debug level, never thrown.
|
|
879
|
+
*/
|
|
880
|
+
function jsonSchemaToNaturalSchema(schema) {
|
|
881
|
+
return convertNode(schema, "$");
|
|
882
|
+
}
|
|
883
|
+
|
|
771
884
|
/**
|
|
772
885
|
* Converts a JSON Schema (Draft 2020-12) object to the OpenAPI 3.0 schema subset
|
|
773
886
|
* that Gemini's `responseSchema` accepts. This constrains generation (not just validation)
|
|
@@ -1716,11 +1829,13 @@ class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
1716
1829
|
}
|
|
1717
1830
|
formatOutputSchema(schema) {
|
|
1718
1831
|
let jsonSchema;
|
|
1719
|
-
// Check if schema is already a JsonObject
|
|
1720
|
-
|
|
1832
|
+
// Check if schema is already a JsonObject — either the OpenAI-style
|
|
1833
|
+
// `{ type: "json_schema", ... }` envelope or a bare `{ type: "object", properties }` node
|
|
1834
|
+
if ((typeof schema === "object" &&
|
|
1721
1835
|
schema !== null &&
|
|
1722
1836
|
!Array.isArray(schema) &&
|
|
1723
|
-
schema.type === "json_schema")
|
|
1837
|
+
schema.type === "json_schema") ||
|
|
1838
|
+
isJsonSchema$1(schema)) {
|
|
1724
1839
|
jsonSchema = structuredClone(schema);
|
|
1725
1840
|
jsonSchema.type = "object"; // Validator does not recognize "json_schema"
|
|
1726
1841
|
}
|
|
@@ -2382,6 +2497,10 @@ class BedrockAdapter extends BaseProviderAdapter {
|
|
|
2382
2497
|
}));
|
|
2383
2498
|
}
|
|
2384
2499
|
formatOutputSchema(schema) {
|
|
2500
|
+
// Bare JSON Schema node: `{ type: "object", properties: {...} }`
|
|
2501
|
+
if (isJsonSchema$1(schema)) {
|
|
2502
|
+
return structuredClone(schema);
|
|
2503
|
+
}
|
|
2385
2504
|
const zodSchema = schema instanceof v4.z.ZodType
|
|
2386
2505
|
? schema
|
|
2387
2506
|
: naturalZodSchema(schema);
|
|
@@ -2918,11 +3037,13 @@ class GoogleAdapter extends BaseProviderAdapter {
|
|
|
2918
3037
|
}
|
|
2919
3038
|
formatOutputSchema(schema) {
|
|
2920
3039
|
let jsonSchema;
|
|
2921
|
-
// Check if schema is already a JsonObject
|
|
2922
|
-
|
|
3040
|
+
// Check if schema is already a JsonObject — either the OpenAI-style
|
|
3041
|
+
// `{ type: "json_schema", ... }` envelope or a bare `{ type: "object", properties }` node
|
|
3042
|
+
if ((typeof schema === "object" &&
|
|
2923
3043
|
schema !== null &&
|
|
2924
3044
|
!Array.isArray(schema) &&
|
|
2925
|
-
schema.type === "json_schema")
|
|
3045
|
+
schema.type === "json_schema") ||
|
|
3046
|
+
isJsonSchema$1(schema)) {
|
|
2926
3047
|
jsonSchema = structuredClone(schema);
|
|
2927
3048
|
jsonSchema.type = "object";
|
|
2928
3049
|
}
|
|
@@ -3889,21 +4010,35 @@ class OpenAiAdapter extends BaseProviderAdapter {
|
|
|
3889
4010
|
schema.type === "json_schema") {
|
|
3890
4011
|
return schema;
|
|
3891
4012
|
}
|
|
3892
|
-
//
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3905
|
-
|
|
3906
|
-
|
|
4013
|
+
// Bare JSON Schema node: `{ type: "object", properties: {...} }`
|
|
4014
|
+
// Skip the zod round-trip and use it directly (still needs the
|
|
4015
|
+
// additionalProperties + envelope treatment below).
|
|
4016
|
+
let jsonSchema;
|
|
4017
|
+
let name = "response";
|
|
4018
|
+
let strict = true;
|
|
4019
|
+
if (isJsonSchema$1(schema)) {
|
|
4020
|
+
jsonSchema = { ...structuredClone(schema) };
|
|
4021
|
+
delete jsonSchema.$schema;
|
|
4022
|
+
}
|
|
4023
|
+
else {
|
|
4024
|
+
// Convert NaturalSchema to Zod schema if needed
|
|
4025
|
+
const zodSchema = schema instanceof v4.z.ZodType
|
|
4026
|
+
? schema
|
|
4027
|
+
: naturalZodSchema(schema);
|
|
4028
|
+
const responseFormat = zodResponseFormat(zodSchema, "response");
|
|
4029
|
+
// Re-spread to drop zod v4's non-enumerable `~standard` Standard-Schema
|
|
4030
|
+
// interop marker, then strip `$schema`: OpenAI's strict json_schema subset
|
|
4031
|
+
// does not recognize the draft-2020-12 `$schema` keyword, and shipping it
|
|
4032
|
+
// can leave strict structured-output enforcement silently disabled (the
|
|
4033
|
+
// model then free-forms, omitting required fields and corrupting keys).
|
|
4034
|
+
// Mirrors the OpenRouter adapter's sanitization.
|
|
4035
|
+
jsonSchema = {
|
|
4036
|
+
...v4.z.toJSONSchema(zodSchema),
|
|
4037
|
+
};
|
|
4038
|
+
delete jsonSchema.$schema;
|
|
4039
|
+
name = responseFormat.json_schema.name;
|
|
4040
|
+
strict = responseFormat.json_schema.strict;
|
|
4041
|
+
}
|
|
3907
4042
|
// OpenAI requires additionalProperties to be false on all objects
|
|
3908
4043
|
const checks = [jsonSchema];
|
|
3909
4044
|
while (checks.length > 0) {
|
|
@@ -3919,10 +4054,10 @@ class OpenAiAdapter extends BaseProviderAdapter {
|
|
|
3919
4054
|
checks.shift();
|
|
3920
4055
|
}
|
|
3921
4056
|
return {
|
|
3922
|
-
name
|
|
4057
|
+
name,
|
|
3923
4058
|
schema: jsonSchema,
|
|
3924
|
-
strict
|
|
3925
|
-
type:
|
|
4059
|
+
strict,
|
|
4060
|
+
type: "json_schema",
|
|
3926
4061
|
};
|
|
3927
4062
|
}
|
|
3928
4063
|
//
|
|
@@ -4564,11 +4699,13 @@ class OpenRouterAdapter extends BaseProviderAdapter {
|
|
|
4564
4699
|
}
|
|
4565
4700
|
formatOutputSchema(schema) {
|
|
4566
4701
|
let jsonSchema;
|
|
4567
|
-
// Check if schema is already a JsonObject
|
|
4568
|
-
|
|
4702
|
+
// Check if schema is already a JsonObject — either the OpenAI-style
|
|
4703
|
+
// `{ type: "json_schema", ... }` envelope or a bare `{ type: "object", properties }` node
|
|
4704
|
+
if ((typeof schema === "object" &&
|
|
4569
4705
|
schema !== null &&
|
|
4570
4706
|
!Array.isArray(schema) &&
|
|
4571
|
-
schema.type === "json_schema")
|
|
4707
|
+
schema.type === "json_schema") ||
|
|
4708
|
+
isJsonSchema$1(schema)) {
|
|
4572
4709
|
jsonSchema = structuredClone(schema);
|
|
4573
4710
|
jsonSchema.type = "object"; // Normalize type
|
|
4574
4711
|
}
|
|
@@ -9040,6 +9177,8 @@ exports.isLlmOperateInput = isLlmOperateInput;
|
|
|
9040
9177
|
exports.isLlmOperateInputContent = isLlmOperateInputContent;
|
|
9041
9178
|
exports.isLlmOperateInputFile = isLlmOperateInputFile;
|
|
9042
9179
|
exports.isLlmOperateInputImage = isLlmOperateInputImage;
|
|
9180
|
+
exports.jsonSchemaToNaturalSchema = jsonSchemaToNaturalSchema;
|
|
9181
|
+
exports.naturalSchemaToJsonSchema = naturalSchemaToJsonSchema;
|
|
9043
9182
|
exports.toolkit = toolkit;
|
|
9044
9183
|
exports.tools = tools;
|
|
9045
9184
|
//# sourceMappingURL=index.cjs.map
|