@typia/utils 12.0.0-dev.20260306 → 12.0.0-dev.20260307

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.
Files changed (60) hide show
  1. package/README.md +5 -5
  2. package/lib/converters/LlmSchemaConverter.d.ts +1 -20
  3. package/lib/converters/LlmSchemaConverter.js +0 -189
  4. package/lib/converters/LlmSchemaConverter.js.map +1 -1
  5. package/lib/converters/LlmSchemaConverter.mjs +0 -227
  6. package/lib/converters/LlmSchemaConverter.mjs.map +1 -1
  7. package/lib/http/HttpLlm.d.ts +2 -32
  8. package/lib/http/HttpLlm.js +4 -27
  9. package/lib/http/HttpLlm.js.map +1 -1
  10. package/lib/http/HttpLlm.mjs +1 -24
  11. package/lib/http/HttpLlm.mjs.map +1 -1
  12. package/lib/http/internal/HttpLlmApplicationComposer.js +13 -19
  13. package/lib/http/internal/HttpLlmApplicationComposer.js.map +1 -1
  14. package/lib/http/internal/HttpLlmApplicationComposer.mjs +7 -9
  15. package/lib/http/internal/HttpLlmApplicationComposer.mjs.map +1 -1
  16. package/lib/index.mjs +10 -10
  17. package/lib/utils/LlmJson.d.ts +67 -0
  18. package/lib/utils/LlmJson.js +106 -0
  19. package/lib/utils/LlmJson.js.map +1 -0
  20. package/lib/utils/LlmJson.mjs +113 -0
  21. package/lib/utils/LlmJson.mjs.map +1 -0
  22. package/lib/utils/index.d.ts +1 -1
  23. package/lib/utils/index.js +1 -1
  24. package/lib/utils/index.js.map +1 -1
  25. package/lib/utils/index.mjs +1 -1
  26. package/lib/utils/internal/coerceLlmArguments.d.ts +1 -0
  27. package/lib/utils/internal/coerceLlmArguments.js +233 -0
  28. package/lib/utils/internal/coerceLlmArguments.js.map +1 -0
  29. package/lib/utils/internal/coerceLlmArguments.mjs +232 -0
  30. package/lib/utils/internal/coerceLlmArguments.mjs.map +1 -0
  31. package/lib/utils/internal/parseLenientJson.d.ts +1 -0
  32. package/lib/utils/internal/parseLenientJson.js +639 -0
  33. package/lib/utils/internal/parseLenientJson.js.map +1 -0
  34. package/lib/utils/internal/parseLenientJson.mjs +640 -0
  35. package/lib/utils/internal/parseLenientJson.mjs.map +1 -0
  36. package/lib/utils/internal/stringifyValidationFailure.d.ts +2 -0
  37. package/lib/utils/{stringifyValidationFailure.js → internal/stringifyValidationFailure.js} +55 -63
  38. package/lib/utils/internal/stringifyValidationFailure.js.map +1 -0
  39. package/lib/utils/{stringifyValidationFailure.mjs → internal/stringifyValidationFailure.mjs} +54 -63
  40. package/lib/utils/internal/stringifyValidationFailure.mjs.map +1 -0
  41. package/lib/validators/internal/OpenApiOneOfValidator.mjs +5 -1
  42. package/lib/validators/internal/OpenApiOneOfValidator.mjs.map +1 -1
  43. package/package.json +2 -2
  44. package/src/converters/LlmSchemaConverter.ts +0 -277
  45. package/src/http/HttpLlm.ts +1 -44
  46. package/src/http/internal/HttpLlmApplicationComposer.ts +3 -9
  47. package/src/utils/LlmJson.ts +115 -0
  48. package/src/utils/index.ts +1 -1
  49. package/src/utils/internal/coerceLlmArguments.ts +297 -0
  50. package/src/utils/internal/parseLenientJson.ts +731 -0
  51. package/src/utils/{stringifyValidationFailure.ts → internal/stringifyValidationFailure.ts} +66 -70
  52. package/lib/http/internal/LlmDataMerger.d.ts +0 -48
  53. package/lib/http/internal/LlmDataMerger.js +0 -60
  54. package/lib/http/internal/LlmDataMerger.js.map +0 -1
  55. package/lib/http/internal/LlmDataMerger.mjs +0 -59
  56. package/lib/http/internal/LlmDataMerger.mjs.map +0 -1
  57. package/lib/utils/stringifyValidationFailure.d.ts +0 -25
  58. package/lib/utils/stringifyValidationFailure.js.map +0 -1
  59. package/lib/utils/stringifyValidationFailure.mjs.map +0 -1
  60. package/src/http/internal/LlmDataMerger.ts +0 -73
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LlmJson = void 0;
4
+ const converters_1 = require("../converters");
5
+ const validators_1 = require("../validators");
6
+ const coerceLlmArguments_1 = require("./internal/coerceLlmArguments");
7
+ const parseLenientJson_1 = require("./internal/parseLenientJson");
8
+ const stringifyValidationFailure_1 = require("./internal/stringifyValidationFailure");
9
+ /**
10
+ * JSON utilities for LLM function calling.
11
+ *
12
+ * - {@link LlmJson.parse}: Lenient JSON parser for incomplete/malformed JSON
13
+ * - {@link LlmJson.stringify}: Format validation errors for LLM feedback
14
+ * - {@link LlmJson.validate}: Create a reusable validator from schema
15
+ *
16
+ * @author Jeongho Nam - https://github.com/samchon
17
+ */
18
+ var LlmJson;
19
+ (function (LlmJson) {
20
+ /**
21
+ * Parse lenient JSON with optional schema-based coercion.
22
+ *
23
+ * Handles incomplete/malformed JSON commonly produced by LLMs:
24
+ *
25
+ * - Unclosed brackets, strings, trailing commas
26
+ * - JavaScript-style comments (`//` and multi-line)
27
+ * - Unquoted object keys, incomplete keywords (`tru`, `fal`, `nul`)
28
+ * - Markdown code block extraction, junk prefix skipping
29
+ *
30
+ * When `parameters` schema is provided, also coerces double-stringified
31
+ * values: `"42"` → `42`, `"true"` → `true`, `"{...}"` → `{...}` based on
32
+ * expected types.
33
+ *
34
+ * Type validation is NOT performed - use {@link ILlmFunction.validate}.
35
+ *
36
+ * @param input Raw JSON string (potentially incomplete or malformed)
37
+ * @param parameters Optional LLM parameters schema for type coercion
38
+ * @returns Parse result with data on success, or partial data with errors
39
+ */
40
+ function parse(input, parameters) {
41
+ const result = (0, parseLenientJson_1.parseLenientJson)(input);
42
+ // Apply schema-based coercion if parameters provided and parsing succeeded
43
+ if (parameters !== undefined && result.success) {
44
+ return {
45
+ success: true,
46
+ data: (0, coerceLlmArguments_1.coerceLlmArguments)(result.data, parameters),
47
+ };
48
+ }
49
+ return result;
50
+ }
51
+ LlmJson.parse = parse;
52
+ /**
53
+ * Format validation failure for LLM auto-correction feedback.
54
+ *
55
+ * When LLM generates invalid function call arguments, this produces annotated
56
+ * JSON with inline `// ❌` error comments at each invalid property. The output
57
+ * is wrapped in a markdown code block so that LLM can understand and correct
58
+ * its mistakes in the next turn.
59
+ *
60
+ * Below is an example of the output format:
61
+ *
62
+ * ```json
63
+ * {
64
+ * "name": "John",
65
+ * "age": "twenty", // ❌ [{"path":"$input.age","expected":"number & Type<\"uint32\">"}]
66
+ * "email": "not-an-email", // ❌ [{"path":"$input.email","expected":"string & Format<\"email\">"}]
67
+ * "hobbies": "reading" // ❌ [{"path":"$input.hobbies","expected":"Array<string>"}]
68
+ * }
69
+ * ```
70
+ *
71
+ * @param failure Validation failure from {@link ILlmFunction.validate}
72
+ */
73
+ function stringify(failure) {
74
+ return (0, stringifyValidationFailure_1.stringifyValidationFailure)(failure);
75
+ }
76
+ LlmJson.stringify = stringify;
77
+ /**
78
+ * Create a reusable validator from LLM parameters schema.
79
+ *
80
+ * When validation fails, format the failure with {@link stringify} for LLM
81
+ * auto-correction feedback.
82
+ *
83
+ * @param parameters LLM function parameters schema
84
+ * @param equals If `true`, reject extraneous properties not defined in the
85
+ * schema. Otherwise, extra properties are ignored.
86
+ * @returns Validator function that checks data against the schema
87
+ */
88
+ function validate(parameters, equals) {
89
+ const components = {
90
+ schemas: {},
91
+ };
92
+ const schema = converters_1.LlmSchemaConverter.invert({
93
+ components,
94
+ schema: parameters,
95
+ $defs: parameters.$defs,
96
+ });
97
+ return validators_1.OpenApiValidator.create({
98
+ components,
99
+ schema,
100
+ required: true,
101
+ equals,
102
+ });
103
+ }
104
+ LlmJson.validate = validate;
105
+ })(LlmJson || (exports.LlmJson = LlmJson = {}));
106
+ //# sourceMappingURL=LlmJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LlmJson.js","sourceRoot":"","sources":["../../src/utils/LlmJson.ts"],"names":[],"mappings":";;;AAOA,8CAAmD;AACnD,8CAAiD;AACjD,sEAAmE;AACnE,kEAA+D;AAC/D,sFAAmF;AAEnF;;;;;;;;GAQG;AACH,IAAiB,OAAO,CA4FvB;AA5FD,WAAiB,OAAO;IACtB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAgB,KAAK,CACnB,KAAa,EACb,UAAmC;QAEnC,MAAM,MAAM,GAAwB,IAAA,mCAAgB,EAAI,KAAK,CAAC,CAAC;QAE/D,2EAA2E;QAC3E,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAA,uCAAkB,EAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAM;aACvD,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAde,aAAK,QAcpB,CAAA;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAgB,SAAS,CAAC,OAA6B;QACrD,OAAO,IAAA,uDAA0B,EAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAFe,iBAAS,YAExB,CAAA;IAED;;;;;;;;;;OAUG;IACH,SAAgB,QAAQ,CACtB,UAAkC,EAClC,MAA4B;QAE5B,MAAM,UAAU,GAAwB;YACtC,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,MAAM,MAAM,GAAwB,+BAAkB,CAAC,MAAM,CAAC;YAC5D,UAAU;YACV,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB,CAAC,CAAC;QACH,OAAO,6BAAgB,CAAC,MAAM,CAAC;YAC7B,UAAU;YACV,MAAM;YACN,QAAQ,EAAE,IAAI;YACd,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAlBe,gBAAQ,WAkBvB,CAAA;AACH,CAAC,EA5FgB,OAAO,uBAAP,OAAO,QA4FvB"}
@@ -0,0 +1,113 @@
1
+ import { LlmSchemaConverter } from '../converters/LlmSchemaConverter.mjs';
2
+ import '../converters/OpenApiConverter.mjs';
3
+ import '../converters/internal/OpenApiExclusiveEmender.mjs';
4
+ import '../validators/LlmTypeChecker.mjs';
5
+ import '../validators/OpenApiTypeChecker.mjs';
6
+ import '../validators/OpenApiV3TypeChecker.mjs';
7
+ import '../validators/OpenApiV3_1TypeChecker.mjs';
8
+ import '../validators/SwaggerV2TypeChecker.mjs';
9
+ import { OpenApiValidator } from '../validators/OpenApiValidator.mjs';
10
+ import { coerceLlmArguments } from './internal/coerceLlmArguments.mjs';
11
+ import { parseLenientJson } from './internal/parseLenientJson.mjs';
12
+ import { stringifyValidationFailure } from './internal/stringifyValidationFailure.mjs';
13
+
14
+ /**
15
+ * JSON utilities for LLM function calling.
16
+ *
17
+ * - {@link LlmJson.parse}: Lenient JSON parser for incomplete/malformed JSON
18
+ * - {@link LlmJson.stringify}: Format validation errors for LLM feedback
19
+ * - {@link LlmJson.validate}: Create a reusable validator from schema
20
+ *
21
+ * @author Jeongho Nam - https://github.com/samchon
22
+ */
23
+ var LlmJson;
24
+ (function (LlmJson) {
25
+ /**
26
+ * Parse lenient JSON with optional schema-based coercion.
27
+ *
28
+ * Handles incomplete/malformed JSON commonly produced by LLMs:
29
+ *
30
+ * - Unclosed brackets, strings, trailing commas
31
+ * - JavaScript-style comments (`//` and multi-line)
32
+ * - Unquoted object keys, incomplete keywords (`tru`, `fal`, `nul`)
33
+ * - Markdown code block extraction, junk prefix skipping
34
+ *
35
+ * When `parameters` schema is provided, also coerces double-stringified
36
+ * values: `"42"` → `42`, `"true"` → `true`, `"{...}"` → `{...}` based on
37
+ * expected types.
38
+ *
39
+ * Type validation is NOT performed - use {@link ILlmFunction.validate}.
40
+ *
41
+ * @param input Raw JSON string (potentially incomplete or malformed)
42
+ * @param parameters Optional LLM parameters schema for type coercion
43
+ * @returns Parse result with data on success, or partial data with errors
44
+ */
45
+ function parse(input, parameters) {
46
+ const result = parseLenientJson(input);
47
+ // Apply schema-based coercion if parameters provided and parsing succeeded
48
+ if (parameters !== undefined && result.success) {
49
+ return {
50
+ success: true,
51
+ data: coerceLlmArguments(result.data, parameters),
52
+ };
53
+ }
54
+ return result;
55
+ }
56
+ LlmJson.parse = parse;
57
+ /**
58
+ * Format validation failure for LLM auto-correction feedback.
59
+ *
60
+ * When LLM generates invalid function call arguments, this produces annotated
61
+ * JSON with inline `// ❌` error comments at each invalid property. The output
62
+ * is wrapped in a markdown code block so that LLM can understand and correct
63
+ * its mistakes in the next turn.
64
+ *
65
+ * Below is an example of the output format:
66
+ *
67
+ * ```json
68
+ * {
69
+ * "name": "John",
70
+ * "age": "twenty", // ❌ [{"path":"$input.age","expected":"number & Type<\"uint32\">"}]
71
+ * "email": "not-an-email", // ❌ [{"path":"$input.email","expected":"string & Format<\"email\">"}]
72
+ * "hobbies": "reading" // ❌ [{"path":"$input.hobbies","expected":"Array<string>"}]
73
+ * }
74
+ * ```
75
+ *
76
+ * @param failure Validation failure from {@link ILlmFunction.validate}
77
+ */
78
+ function stringify(failure) {
79
+ return stringifyValidationFailure(failure);
80
+ }
81
+ LlmJson.stringify = stringify;
82
+ /**
83
+ * Create a reusable validator from LLM parameters schema.
84
+ *
85
+ * When validation fails, format the failure with {@link stringify} for LLM
86
+ * auto-correction feedback.
87
+ *
88
+ * @param parameters LLM function parameters schema
89
+ * @param equals If `true`, reject extraneous properties not defined in the
90
+ * schema. Otherwise, extra properties are ignored.
91
+ * @returns Validator function that checks data against the schema
92
+ */
93
+ function validate(parameters, equals) {
94
+ const components = {
95
+ schemas: {},
96
+ };
97
+ const schema = LlmSchemaConverter.invert({
98
+ components,
99
+ schema: parameters,
100
+ $defs: parameters.$defs,
101
+ });
102
+ return OpenApiValidator.create({
103
+ components,
104
+ schema,
105
+ required: true,
106
+ equals,
107
+ });
108
+ }
109
+ LlmJson.validate = validate;
110
+ })(LlmJson || (LlmJson = {}));
111
+
112
+ export { LlmJson };
113
+ //# sourceMappingURL=LlmJson.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LlmJson.mjs","sources":["../../src/utils/LlmJson.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;AAaA;;;;;;;;AAQG;AACG,IAAW;AAAjB,CAAA,UAAiB,OAAO,EAAA;AACtB;;;;;;;;;;;;;;;;;;;AAmBG;AACH,IAAA,SAAgB,KAAK,CACnB,KAAa,EACb,UAAmC,EAAA;AAEnC,QAAA,MAAM,MAAM,GAAwB,gBAAgB,CAAI,KAAK,CAAC;;QAG9D,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE;YAC9C,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAM;aACvD;QACH;AACA,QAAA,OAAO,MAAM;IACf;AAdgB,IAAA,OAAA,CAAA,KAAK,QAcpB;AAED;;;;;;;;;;;;;;;;;;;;AAoBG;IACH,SAAgB,SAAS,CAAC,OAA6B,EAAA;AACrD,QAAA,OAAO,0BAA0B,CAAC,OAAO,CAAC;IAC5C;AAFgB,IAAA,OAAA,CAAA,SAAS,YAExB;AAED;;;;;;;;;;AAUG;AACH,IAAA,SAAgB,QAAQ,CACtB,UAAkC,EAClC,MAA4B,EAAA;AAE5B,QAAA,MAAM,UAAU,GAAwB;AACtC,YAAA,OAAO,EAAE,EAAE;SACZ;AACD,QAAA,MAAM,MAAM,GAAwB,kBAAkB,CAAC,MAAM,CAAC;YAC5D,UAAU;AACV,YAAA,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,UAAU,CAAC,KAAK;AACxB,SAAA,CAAC;QACF,OAAO,gBAAgB,CAAC,MAAM,CAAC;YAC7B,UAAU;YACV,MAAM;AACN,YAAA,QAAQ,EAAE,IAAI;YACd,MAAM;AACP,SAAA,CAAC;IACJ;AAlBgB,IAAA,OAAA,CAAA,QAAQ,WAkBvB;AACH,CAAC,EA5FgB,OAAO,KAAP,OAAO,GAAA,EAAA,CAAA,CAAA;;;;"}
@@ -1,7 +1,7 @@
1
1
  export * from "./ArrayUtil";
2
+ export * from "./LlmJson";
2
3
  export * from "./MapUtil";
3
4
  export * from "./NamingConvention";
4
5
  export * from "./Singleton";
5
6
  export * from "./StringUtil";
6
7
  export * from "./dedent";
7
- export * from "./stringifyValidationFailure";
@@ -15,10 +15,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./ArrayUtil"), exports);
18
+ __exportStar(require("./LlmJson"), exports);
18
19
  __exportStar(require("./MapUtil"), exports);
19
20
  __exportStar(require("./NamingConvention"), exports);
20
21
  __exportStar(require("./Singleton"), exports);
21
22
  __exportStar(require("./StringUtil"), exports);
22
23
  __exportStar(require("./dedent"), exports);
23
- __exportStar(require("./stringifyValidationFailure"), exports);
24
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,4CAA0B;AAC1B,qDAAmC;AACnC,8CAA4B;AAC5B,+CAA6B;AAE7B,2CAAyB;AACzB,+DAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,qDAAmC;AACnC,8CAA4B;AAC5B,+CAA6B;AAE7B,2CAAyB"}
@@ -1,8 +1,8 @@
1
1
  export { ArrayUtil } from './ArrayUtil.mjs';
2
+ export { LlmJson } from './LlmJson.mjs';
2
3
  export { MapUtil } from './MapUtil.mjs';
3
4
  export { NamingConvention } from './NamingConvention.mjs';
4
5
  export { Singleton } from './Singleton.mjs';
5
6
  export { StringUtil } from './StringUtil.mjs';
6
7
  export { dedent } from './dedent.mjs';
7
- export { stringifyValidationFailure } from './stringifyValidationFailure.mjs';
8
8
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.coerceLlmArguments = coerceLlmArguments;
4
+ const LlmTypeChecker_1 = require("../../validators/LlmTypeChecker");
5
+ const parseLenientJson_1 = require("./parseLenientJson");
6
+ /**
7
+ * Coerce LLM arguments by parsing double-stringified JSON values.
8
+ *
9
+ * When LLM produces stringified JSON for non-string schema types, this function
10
+ * attempts to parse them using the lenient JSON parser.
11
+ *
12
+ * Only applies coercion when value is string but schema expects non-string.
13
+ * Type validation is handled separately by `ILlmFunction.validate`.
14
+ *
15
+ * @param value Parsed JSON value (potentially with stringified nested values)
16
+ * @param parameters LLM parameters schema
17
+ * @returns Coerced value with double-stringified JSON parsed
18
+ * @internal
19
+ */
20
+ function coerceLlmArguments(value, parameters) {
21
+ return coerceValue(value, parameters, parameters.$defs);
22
+ }
23
+ function coerceValue(value, schema, $defs) {
24
+ // Resolve reference
25
+ if (LlmTypeChecker_1.LlmTypeChecker.isReference(schema)) {
26
+ const key = schema.$ref.replace("#/$defs/", "");
27
+ const resolved = $defs === null || $defs === void 0 ? void 0 : $defs[key];
28
+ if (resolved !== undefined) {
29
+ return coerceValue(value, resolved, $defs);
30
+ }
31
+ return value;
32
+ }
33
+ // Handle anyOf
34
+ if (LlmTypeChecker_1.LlmTypeChecker.isAnyOf(schema)) {
35
+ // Value is string
36
+ if (typeof value === "string") {
37
+ // If string is in union, don't parse - it's valid as-is
38
+ const hasString = schema.anyOf.some((s) => LlmTypeChecker_1.LlmTypeChecker.isString(resolveSchema(s, $defs)));
39
+ if (hasString) {
40
+ return value;
41
+ }
42
+ // String value but no string in union - try to parse
43
+ const parsed = (0, parseLenientJson_1.parseLenientJson)(value);
44
+ if (parsed.success) {
45
+ // Find uniquely matching schema via type + x-discriminator
46
+ const matched = findMatchingAnyOfSchema(parsed.data, schema, $defs);
47
+ if (matched !== undefined) {
48
+ return coerceValue(parsed.data, matched, $defs);
49
+ }
50
+ return parsed.data;
51
+ }
52
+ return value;
53
+ }
54
+ // Value is object - find matching schema via discriminated union
55
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
56
+ const matched = findMatchingObjectInAnyOf(value, schema, $defs);
57
+ if (matched !== undefined) {
58
+ return coerceValue(value, matched, $defs);
59
+ }
60
+ return value;
61
+ }
62
+ // Value is array - find matching array schema (only if unambiguous)
63
+ if (Array.isArray(value)) {
64
+ const arraySchemas = schema.anyOf.filter((s) => LlmTypeChecker_1.LlmTypeChecker.isArray(resolveSchema(s, $defs)));
65
+ if (arraySchemas.length === 1) {
66
+ return coerceValue(value, arraySchemas[0], $defs);
67
+ }
68
+ // Multiple or no array schemas - skip coercion
69
+ return value;
70
+ }
71
+ // Non-string primitive or no matching schema - return as-is
72
+ return value;
73
+ }
74
+ // String schema - no coercion needed (value stays as-is)
75
+ if (LlmTypeChecker_1.LlmTypeChecker.isString(schema)) {
76
+ return value;
77
+ }
78
+ // Unknown schema - no coercion needed
79
+ if (LlmTypeChecker_1.LlmTypeChecker.isUnknown(schema)) {
80
+ return value;
81
+ }
82
+ // Value is string but schema is non-string - try to parse
83
+ if (typeof value === "string") {
84
+ const parsed = (0, parseLenientJson_1.parseLenientJson)(value);
85
+ if (parsed.success) {
86
+ // Continue coercion on the parsed value (for nested stringified values)
87
+ return coerceValue(parsed.data, schema, $defs);
88
+ }
89
+ // Parse failed, return original - validate will catch type error
90
+ return value;
91
+ }
92
+ // Value is array and schema is array - recurse into items
93
+ if (Array.isArray(value) && LlmTypeChecker_1.LlmTypeChecker.isArray(schema)) {
94
+ return value.map((item) => coerceValue(item, schema.items, $defs));
95
+ }
96
+ // Value is object and schema is object - recurse into properties
97
+ if (typeof value === "object" &&
98
+ value !== null &&
99
+ !Array.isArray(value) &&
100
+ LlmTypeChecker_1.LlmTypeChecker.isObject(schema)) {
101
+ return coerceObject(value, schema, $defs);
102
+ }
103
+ // Everything else (null, boolean, number, integer) - return as-is
104
+ return value;
105
+ }
106
+ function coerceObject(value, schema, $defs) {
107
+ const result = {};
108
+ // Coerce known properties
109
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
110
+ if (key in value) {
111
+ result[key] = coerceValue(value[key], propSchema, $defs);
112
+ }
113
+ }
114
+ // Preserve additional properties - let validation handle rejection
115
+ const additionalSchema = typeof schema.additionalProperties === "object"
116
+ ? schema.additionalProperties
117
+ : undefined;
118
+ for (const key of Object.keys(value)) {
119
+ if (!(key in schema.properties)) {
120
+ result[key] = additionalSchema
121
+ ? coerceValue(value[key], additionalSchema, $defs)
122
+ : value[key];
123
+ }
124
+ }
125
+ return result;
126
+ }
127
+ function resolveSchema(schema, $defs) {
128
+ if (LlmTypeChecker_1.LlmTypeChecker.isReference(schema)) {
129
+ const key = schema.$ref.replace("#/$defs/", "");
130
+ const resolved = $defs === null || $defs === void 0 ? void 0 : $defs[key];
131
+ if (resolved !== undefined) {
132
+ return resolveSchema(resolved, $defs);
133
+ }
134
+ }
135
+ return schema;
136
+ }
137
+ /**
138
+ * Check if value roughly matches the expected schema type. Used for anyOf
139
+ * matching after parsing.
140
+ */
141
+ function matchesSchemaType(value, schema, $defs) {
142
+ if (LlmTypeChecker_1.LlmTypeChecker.isReference(schema)) {
143
+ const key = schema.$ref.replace("#/$defs/", "");
144
+ const resolved = $defs === null || $defs === void 0 ? void 0 : $defs[key];
145
+ if (resolved)
146
+ return matchesSchemaType(value, resolved, $defs);
147
+ return false;
148
+ }
149
+ if (LlmTypeChecker_1.LlmTypeChecker.isNull(schema))
150
+ return value === null;
151
+ if (LlmTypeChecker_1.LlmTypeChecker.isBoolean(schema))
152
+ return typeof value === "boolean";
153
+ if (LlmTypeChecker_1.LlmTypeChecker.isInteger(schema))
154
+ return typeof value === "number" && Number.isInteger(value);
155
+ if (LlmTypeChecker_1.LlmTypeChecker.isNumber(schema))
156
+ return typeof value === "number";
157
+ if (LlmTypeChecker_1.LlmTypeChecker.isString(schema))
158
+ return typeof value === "string";
159
+ if (LlmTypeChecker_1.LlmTypeChecker.isArray(schema))
160
+ return Array.isArray(value);
161
+ if (LlmTypeChecker_1.LlmTypeChecker.isObject(schema))
162
+ return typeof value === "object" && value !== null && !Array.isArray(value);
163
+ if (LlmTypeChecker_1.LlmTypeChecker.isUnknown(schema))
164
+ return true;
165
+ if (LlmTypeChecker_1.LlmTypeChecker.isAnyOf(schema))
166
+ return schema.anyOf.some((s) => matchesSchemaType(value, s, $defs));
167
+ return false;
168
+ }
169
+ /**
170
+ * Find the uniquely matching schema for a value among anyOf alternatives. Uses
171
+ * `x-discriminator` for object disambiguation. Returns undefined if no unique
172
+ * match can be determined.
173
+ */
174
+ function findMatchingAnyOfSchema(value, schema, $defs) {
175
+ const matching = schema.anyOf.filter((s) => matchesSchemaType(value, s, $defs));
176
+ if (matching.length === 1)
177
+ return matching[0];
178
+ if (matching.length === 0)
179
+ return undefined;
180
+ // Multiple type matches - try x-discriminator for objects
181
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
182
+ return findMatchingObjectInAnyOf(value, schema, $defs);
183
+ }
184
+ return undefined;
185
+ }
186
+ /**
187
+ * Find the matching object schema among anyOf using `x-discriminator`. If only
188
+ * one object schema exists, returns it directly. If multiple exist but no
189
+ * x-discriminator, gives up.
190
+ */
191
+ function findMatchingObjectInAnyOf(value, schema, $defs) {
192
+ var _a, _b;
193
+ const objectSchemas = schema.anyOf.filter((s) => LlmTypeChecker_1.LlmTypeChecker.isObject(resolveSchema(s, $defs)));
194
+ if (objectSchemas.length === 0)
195
+ return undefined;
196
+ if (objectSchemas.length === 1)
197
+ return objectSchemas[0];
198
+ // Multiple object schemas - require x-discriminator
199
+ const discriminator = schema["x-discriminator"];
200
+ if (discriminator === undefined)
201
+ return undefined;
202
+ const key = discriminator.propertyName;
203
+ const discriminatorValue = value[key];
204
+ // Use mapping for direct $ref lookup
205
+ if (discriminator.mapping !== undefined &&
206
+ typeof discriminatorValue === "string") {
207
+ const ref = discriminator.mapping[discriminatorValue];
208
+ if (ref !== undefined) {
209
+ for (const s of schema.anyOf) {
210
+ if (LlmTypeChecker_1.LlmTypeChecker.isReference(s) && s.$ref === ref) {
211
+ return s;
212
+ }
213
+ }
214
+ }
215
+ return undefined;
216
+ }
217
+ // No mapping - match by enum values on the discriminator property
218
+ for (const s of objectSchemas) {
219
+ const resolved = resolveSchema(s, $defs);
220
+ if (!LlmTypeChecker_1.LlmTypeChecker.isObject(resolved))
221
+ continue;
222
+ const propSchema = (_a = resolved.properties) === null || _a === void 0 ? void 0 : _a[key];
223
+ if (propSchema === undefined)
224
+ continue;
225
+ const resolvedProp = resolveSchema(propSchema, $defs);
226
+ if (LlmTypeChecker_1.LlmTypeChecker.isString(resolvedProp) &&
227
+ ((_b = resolvedProp.enum) === null || _b === void 0 ? void 0 : _b.includes(discriminatorValue))) {
228
+ return s;
229
+ }
230
+ }
231
+ return undefined;
232
+ }
233
+ //# sourceMappingURL=coerceLlmArguments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coerceLlmArguments.js","sourceRoot":"","sources":["../../../src/utils/internal/coerceLlmArguments.ts"],"names":[],"mappings":"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"}