@llumiverse/core 1.2.0 → 1.4.0-dev.20260629.090753Z

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 (145) hide show
  1. package/lib/CompletionStream.d.ts +48 -0
  2. package/lib/CompletionStream.d.ts.map +1 -0
  3. package/lib/{esm/CompletionStream.js → CompletionStream.js} +142 -67
  4. package/lib/CompletionStream.js.map +1 -0
  5. package/lib/{types/Driver.d.ts → Driver.d.ts} +38 -5
  6. package/lib/Driver.d.ts.map +1 -0
  7. package/lib/{esm/Driver.js → Driver.js} +152 -107
  8. package/lib/Driver.js.map +1 -0
  9. package/lib/{types/async.d.ts → async.d.ts} +3 -3
  10. package/lib/async.d.ts.map +1 -0
  11. package/lib/{esm/async.js → async.js} +4 -4
  12. package/lib/async.js.map +1 -0
  13. package/lib/{types/conversation-utils.d.ts → conversation-utils.d.ts} +9 -0
  14. package/lib/conversation-utils.d.ts.map +1 -0
  15. package/lib/{esm/conversation-utils.js → conversation-utils.js} +78 -15
  16. package/lib/conversation-utils.js.map +1 -0
  17. package/lib/embeddings.d.ts +58 -0
  18. package/lib/embeddings.d.ts.map +1 -0
  19. package/lib/embeddings.js +131 -0
  20. package/lib/embeddings.js.map +1 -0
  21. package/lib/formatters/commons.d.ts +3 -0
  22. package/lib/formatters/commons.d.ts.map +1 -0
  23. package/lib/formatters/commons.js +4 -0
  24. package/lib/formatters/commons.js.map +1 -0
  25. package/lib/{types/formatters → formatters}/generic.d.ts +2 -2
  26. package/lib/formatters/generic.d.ts.map +1 -0
  27. package/lib/{esm/formatters → formatters}/generic.js +8 -8
  28. package/lib/formatters/generic.js.map +1 -0
  29. package/lib/formatters/index.d.ts +4 -0
  30. package/lib/formatters/index.d.ts.map +1 -0
  31. package/lib/formatters/index.js +4 -0
  32. package/lib/formatters/index.js.map +1 -0
  33. package/lib/{types/formatters → formatters}/nova.d.ts +4 -4
  34. package/lib/formatters/nova.d.ts.map +1 -0
  35. package/lib/{esm/formatters → formatters}/nova.js +19 -17
  36. package/lib/formatters/nova.js.map +1 -0
  37. package/lib/http-agent.d.ts +53 -0
  38. package/lib/http-agent.d.ts.map +1 -0
  39. package/lib/http-agent.js +141 -0
  40. package/lib/http-agent.js.map +1 -0
  41. package/lib/index.d.ts +8 -0
  42. package/lib/index.d.ts.map +1 -0
  43. package/lib/index.js +7 -0
  44. package/lib/index.js.map +1 -0
  45. package/lib/{types/json.d.ts → json.d.ts} +1 -1
  46. package/lib/json.d.ts.map +1 -0
  47. package/lib/{esm/json.js → json.js} +4 -3
  48. package/lib/json.js.map +1 -0
  49. package/lib/logger.d.ts +3 -0
  50. package/lib/logger.d.ts.map +1 -0
  51. package/lib/logger.js +42 -0
  52. package/lib/logger.js.map +1 -0
  53. package/lib/resolver.d.ts +2 -0
  54. package/lib/resolver.d.ts.map +1 -0
  55. package/lib/{esm/resolver.js → resolver.js} +7 -4
  56. package/lib/resolver.js.map +1 -0
  57. package/lib/stream.d.ts.map +1 -0
  58. package/lib/stream.js.map +1 -0
  59. package/lib/{types/validation.d.ts → validation.d.ts} +1 -1
  60. package/lib/validation.d.ts.map +1 -0
  61. package/lib/validation.js +100 -0
  62. package/lib/validation.js.map +1 -0
  63. package/package.json +29 -38
  64. package/src/CompletionStream.ts +208 -115
  65. package/src/Driver.error.test.ts +101 -72
  66. package/src/Driver.ts +208 -152
  67. package/src/async.ts +30 -30
  68. package/src/conversation-utils.ts +92 -16
  69. package/src/embeddings.ts +157 -0
  70. package/src/formatters/commons.ts +2 -2
  71. package/src/formatters/generic.ts +20 -17
  72. package/src/formatters/index.ts +3 -3
  73. package/src/formatters/nova.ts +53 -51
  74. package/src/http-agent.test.ts +281 -0
  75. package/src/http-agent.ts +177 -0
  76. package/src/index.ts +7 -5
  77. package/src/json.ts +6 -5
  78. package/src/logger.ts +42 -0
  79. package/src/resolver.ts +12 -9
  80. package/src/stream.ts +4 -5
  81. package/src/validation.ts +42 -29
  82. package/lib/cjs/CompletionStream.js +0 -293
  83. package/lib/cjs/CompletionStream.js.map +0 -1
  84. package/lib/cjs/Driver.js +0 -300
  85. package/lib/cjs/Driver.js.map +0 -1
  86. package/lib/cjs/async.js +0 -131
  87. package/lib/cjs/async.js.map +0 -1
  88. package/lib/cjs/conversation-utils.js +0 -579
  89. package/lib/cjs/conversation-utils.js.map +0 -1
  90. package/lib/cjs/formatters/commons.js +0 -7
  91. package/lib/cjs/formatters/commons.js.map +0 -1
  92. package/lib/cjs/formatters/generic.js +0 -59
  93. package/lib/cjs/formatters/generic.js.map +0 -1
  94. package/lib/cjs/formatters/index.js +0 -20
  95. package/lib/cjs/formatters/index.js.map +0 -1
  96. package/lib/cjs/formatters/nova.js +0 -99
  97. package/lib/cjs/formatters/nova.js.map +0 -1
  98. package/lib/cjs/index.js +0 -22
  99. package/lib/cjs/index.js.map +0 -1
  100. package/lib/cjs/json.js +0 -29
  101. package/lib/cjs/json.js.map +0 -1
  102. package/lib/cjs/package.json +0 -3
  103. package/lib/cjs/resolver.js +0 -45
  104. package/lib/cjs/resolver.js.map +0 -1
  105. package/lib/cjs/stream.js +0 -30
  106. package/lib/cjs/stream.js.map +0 -1
  107. package/lib/cjs/validation.js +0 -96
  108. package/lib/cjs/validation.js.map +0 -1
  109. package/lib/esm/CompletionStream.js.map +0 -1
  110. package/lib/esm/Driver.js.map +0 -1
  111. package/lib/esm/async.js.map +0 -1
  112. package/lib/esm/conversation-utils.js.map +0 -1
  113. package/lib/esm/formatters/commons.js +0 -4
  114. package/lib/esm/formatters/commons.js.map +0 -1
  115. package/lib/esm/formatters/generic.js.map +0 -1
  116. package/lib/esm/formatters/index.js +0 -4
  117. package/lib/esm/formatters/index.js.map +0 -1
  118. package/lib/esm/formatters/nova.js.map +0 -1
  119. package/lib/esm/index.js +0 -6
  120. package/lib/esm/index.js.map +0 -1
  121. package/lib/esm/json.js.map +0 -1
  122. package/lib/esm/resolver.js.map +0 -1
  123. package/lib/esm/stream.js.map +0 -1
  124. package/lib/esm/validation.js +0 -88
  125. package/lib/esm/validation.js.map +0 -1
  126. package/lib/types/CompletionStream.d.ts +0 -20
  127. package/lib/types/CompletionStream.d.ts.map +0 -1
  128. package/lib/types/Driver.d.ts.map +0 -1
  129. package/lib/types/async.d.ts.map +0 -1
  130. package/lib/types/conversation-utils.d.ts.map +0 -1
  131. package/lib/types/formatters/commons.d.ts +0 -3
  132. package/lib/types/formatters/commons.d.ts.map +0 -1
  133. package/lib/types/formatters/generic.d.ts.map +0 -1
  134. package/lib/types/formatters/index.d.ts +0 -4
  135. package/lib/types/formatters/index.d.ts.map +0 -1
  136. package/lib/types/formatters/nova.d.ts.map +0 -1
  137. package/lib/types/index.d.ts +0 -6
  138. package/lib/types/index.d.ts.map +0 -1
  139. package/lib/types/json.d.ts.map +0 -1
  140. package/lib/types/resolver.d.ts +0 -2
  141. package/lib/types/resolver.d.ts.map +0 -1
  142. package/lib/types/stream.d.ts.map +0 -1
  143. package/lib/types/validation.d.ts.map +0 -1
  144. /package/lib/{types/stream.d.ts → stream.d.ts} +0 -0
  145. /package/lib/{esm/stream.js → stream.js} +0 -0
@@ -0,0 +1,141 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { Agent } from 'undici';
3
+ /**
4
+ * Default HTTP timeouts used by {@link createDriverHttpAgent} when the
5
+ * caller does not override them. These are deliberately tighter than
6
+ * Node's undici default (5 minutes for headers and body) so a hung
7
+ * upstream LLM-provider call surfaces in seconds rather than blocking
8
+ * the whole request budget.
9
+ *
10
+ * Drivers with workloads that have legitimate long pauses (image
11
+ * generation, tool-using agent streams) should pass higher overrides
12
+ * via {@link HttpTimeoutOptions} rather than relying on the defaults.
13
+ */
14
+ export const DEFAULT_DRIVER_HTTP_TIMEOUTS = {
15
+ headersTimeout: 60_000,
16
+ bodyTimeout: 60_000,
17
+ connectTimeout: 10_000,
18
+ keepAliveTimeout: 30_000,
19
+ };
20
+ const scopedHttpAgent = new AsyncLocalStorage();
21
+ export function resolveDriverHttpTimeouts(opts) {
22
+ return {
23
+ headersTimeout: opts?.headersTimeout ?? DEFAULT_DRIVER_HTTP_TIMEOUTS.headersTimeout,
24
+ bodyTimeout: opts?.bodyTimeout ?? DEFAULT_DRIVER_HTTP_TIMEOUTS.bodyTimeout,
25
+ connectTimeout: opts?.connectTimeout ?? DEFAULT_DRIVER_HTTP_TIMEOUTS.connectTimeout,
26
+ keepAliveTimeout: opts?.keepAliveTimeout ?? DEFAULT_DRIVER_HTTP_TIMEOUTS.keepAliveTimeout,
27
+ };
28
+ }
29
+ export function mergeDriverHttpTimeoutOptions(defaults, override) {
30
+ if (!override) {
31
+ return defaults;
32
+ }
33
+ return {
34
+ ...(defaults ?? {}),
35
+ ...stripUndefinedHttpTimeoutOptions(override),
36
+ };
37
+ }
38
+ /**
39
+ * Build an undici `Agent` configured from {@link HttpTimeoutOptions},
40
+ * falling back to {@link DEFAULT_DRIVER_HTTP_TIMEOUTS} for unset fields.
41
+ *
42
+ * The Agent pools sockets — reuse it for the lifetime of the driver
43
+ * and close it on `destroy()`.
44
+ *
45
+ * Node-only. `@llumiverse/drivers` is itself Node-only in practice
46
+ * because vertexai/bedrock pull `@google-cloud/*` / `@aws-sdk/*`, so
47
+ * depending on undici from core is acceptable.
48
+ */
49
+ export function createDriverHttpAgent(opts) {
50
+ const timeouts = resolveDriverHttpTimeouts(opts);
51
+ return new Agent({
52
+ headersTimeout: timeouts.headersTimeout,
53
+ bodyTimeout: timeouts.bodyTimeout,
54
+ connectTimeout: timeouts.connectTimeout,
55
+ keepAliveTimeout: timeouts.keepAliveTimeout,
56
+ });
57
+ }
58
+ /**
59
+ * Wrap the global `fetch` so every request routes through the given Agent.
60
+ * The returned function is type-compatible with global `fetch`, so it
61
+ * can be passed directly to SDKs that accept a `fetch` option (OpenAI,
62
+ * Anthropic, `@google/genai`, Bedrock via Smithy, …) or used as a
63
+ * drop-in replacement for global `fetch` in drivers that make raw HTTP
64
+ * calls.
65
+ *
66
+ * `@vertesia/api-fetch-client` builds requests with `globalThis.Request`,
67
+ * while the undici package uses its own `Request` class. Calling
68
+ * `undici.fetch` directly can parse a global Request as `"[object Request]"`.
69
+ * Use `globalThis.fetch` (undici-backed in Node/Bun) and pass the undici
70
+ * dispatcher extension through init so the Agent timeout behavior is still
71
+ * applied without crossing Request/Response implementations.
72
+ */
73
+ export function createAgentBackedFetch(agent) {
74
+ return ((input, init) => {
75
+ const requestInput = typeof Request !== 'undefined' && input instanceof Request
76
+ ? normalizeRequestInput(input, init)
77
+ : { input, init };
78
+ const dispatcher = scopedHttpAgent.getStore() ?? agent;
79
+ return globalThis.fetch(requestInput.input, {
80
+ ...(requestInput.init ?? {}),
81
+ dispatcher,
82
+ });
83
+ });
84
+ }
85
+ const NOOP_HTTP_AGENT_SCOPE = {
86
+ run: (callback) => callback(),
87
+ close: () => Promise.resolve(),
88
+ };
89
+ export function createDriverHttpAgentScope(defaults, override) {
90
+ if (!override) {
91
+ return NOOP_HTTP_AGENT_SCOPE;
92
+ }
93
+ const agent = createDriverHttpAgent(mergeDriverHttpTimeoutOptions(defaults, override));
94
+ return {
95
+ run: (callback) => scopedHttpAgent.run(agent, callback),
96
+ close: async () => {
97
+ await agent.close().catch(() => {
98
+ /* shutdown best-effort */
99
+ });
100
+ },
101
+ };
102
+ }
103
+ function normalizeRequestInput(request, init) {
104
+ const overrides = stripUndefinedRequestInit(init);
105
+ const requestInit = {
106
+ method: request.method,
107
+ headers: request.headers,
108
+ body: request.body,
109
+ signal: request.signal,
110
+ cache: request.cache,
111
+ credentials: request.credentials,
112
+ integrity: request.integrity,
113
+ keepalive: request.keepalive,
114
+ mode: request.mode,
115
+ redirect: request.redirect,
116
+ referrer: request.referrer,
117
+ referrerPolicy: request.referrerPolicy,
118
+ };
119
+ if (request.body) {
120
+ requestInit.duplex = 'half';
121
+ }
122
+ return {
123
+ input: request.url,
124
+ init: {
125
+ ...requestInit,
126
+ ...overrides,
127
+ },
128
+ };
129
+ }
130
+ function stripUndefinedRequestInit(init) {
131
+ if (!init) {
132
+ return undefined;
133
+ }
134
+ const entries = Object.entries(init).filter(([, value]) => value !== undefined);
135
+ return Object.fromEntries(entries);
136
+ }
137
+ function stripUndefinedHttpTimeoutOptions(opts) {
138
+ const entries = Object.entries(opts).filter(([, value]) => value !== undefined);
139
+ return Object.fromEntries(entries);
140
+ }
141
+ //# sourceMappingURL=http-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-agent.js","sourceRoot":"","sources":["../src/http-agent.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * from '@llumiverse/common';
2
+ export * from './conversation-utils.js';
3
+ export type { AbstractDriver, Driver } from './Driver.js';
4
+ export * from './embeddings.js';
5
+ export * from './json.js';
6
+ export * from './logger.js';
7
+ export * from './stream.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from '@llumiverse/common';
2
+ export * from './conversation-utils.js';
3
+ export * from './embeddings.js';
4
+ export * from './json.js';
5
+ export * from './logger.js';
6
+ export * from './stream.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AAExC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -1,4 +1,4 @@
1
- import { JSONValue } from "@llumiverse/common";
1
+ import type { JSONValue } from '@llumiverse/common';
2
2
  export declare function extractAndParseJSON(text: string): JSONValue;
3
3
  export declare function parseJSON(text: string): JSONValue;
4
4
  //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AASpD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAE3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAajD"}
@@ -1,7 +1,7 @@
1
1
  import { jsonrepair } from 'jsonrepair';
2
2
  function extractJsonFromText(text) {
3
- const start = text.indexOf("{");
4
- const end = text.lastIndexOf("}");
3
+ const start = text.indexOf('{');
4
+ const end = text.lastIndexOf('}');
5
5
  return text.substring(start, end + 1);
6
6
  }
7
7
  export function extractAndParseJSON(text) {
@@ -17,7 +17,8 @@ export function parseJSON(text) {
17
17
  try {
18
18
  return JSON.parse(jsonrepair(text));
19
19
  }
20
- catch (err2) { // throw the original error
20
+ catch {
21
+ // throw the original error
21
22
  throw err;
22
23
  }
23
24
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,SAAS,mBAAmB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,OAAO,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IAClC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,uBAAuB;QACvB,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACL,2BAA2B;YAC3B,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Logger } from '@llumiverse/common';
2
+ export declare function createLogger(logger: Logger | 'console' | undefined): Logger;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiCjD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,UAQlE"}
package/lib/logger.js ADDED
@@ -0,0 +1,42 @@
1
+ // Helper to create logger methods that support both message-only and object-first signatures.
2
+ function createConsoleLoggerMethod(consoleMethod) {
3
+ return ((objOrMsg, msgOrNever, ...args) => {
4
+ if (typeof objOrMsg === 'string') {
5
+ // Message-only: logger.info("message", ...args)
6
+ consoleMethod(objOrMsg, msgOrNever, ...args);
7
+ }
8
+ else if (msgOrNever !== undefined) {
9
+ // Object-first: logger.info({ obj }, "message", ...args)
10
+ consoleMethod(msgOrNever, objOrMsg, ...args);
11
+ }
12
+ else {
13
+ // Object-only: logger.info({ obj })
14
+ consoleMethod(objOrMsg, ...args);
15
+ }
16
+ });
17
+ }
18
+ const ConsoleLogger = {
19
+ debug: createConsoleLoggerMethod(console.debug.bind(console)),
20
+ info: createConsoleLoggerMethod(console.info.bind(console)),
21
+ warn: createConsoleLoggerMethod(console.warn.bind(console)),
22
+ error: createConsoleLoggerMethod(console.error.bind(console)),
23
+ };
24
+ const noop = () => void 0;
25
+ const NoopLogger = {
26
+ debug: noop,
27
+ info: noop,
28
+ warn: noop,
29
+ error: noop,
30
+ };
31
+ export function createLogger(logger) {
32
+ if (logger === 'console') {
33
+ return ConsoleLogger;
34
+ }
35
+ else if (logger) {
36
+ return logger;
37
+ }
38
+ else {
39
+ return NoopLogger;
40
+ }
41
+ }
42
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,8FAA8F;AAC9F,SAAS,yBAAyB,CAAC,aAA2C;IAC1E,OAAO,CAAC,CAAC,QAAiB,EAAE,UAAmB,EAAE,GAAG,IAAmC,EAAE,EAAE;QACvF,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/B,gDAAgD;YAChD,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,yDAAyD;YACzD,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,oCAAoC;YACpC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;QACrC,CAAC;IACL,CAAC,CAAmB,CAAC;AACzB,CAAC;AAED,MAAM,aAAa,GAAW;IAC1B,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,EAAE,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,EAAE,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;CAChE,CAAC;AAEF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,MAAM,UAAU,GAAW;IACvB,KAAK,EAAE,IAAuB;IAC9B,IAAI,EAAE,IAAsB;IAC5B,IAAI,EAAE,IAAsB;IAC5B,KAAK,EAAE,IAAuB;CACjC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,MAAsC;IAC/D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC;IACzB,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,OAAO,UAAU,CAAC;IACtB,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function resolveField(object: unknown, path: string[]): unknown;
2
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AA6BA,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAYrE"}
@@ -7,22 +7,25 @@
7
7
  * @returns the property value
8
8
  */
9
9
  function _prop(object, name) {
10
- if (object === undefined) {
10
+ if (object === undefined || object === null) {
11
11
  return undefined;
12
12
  }
13
13
  if (Array.isArray(object)) {
14
14
  const index = +name;
15
- if (isNaN(index)) {
15
+ if (Number.isNaN(index)) {
16
16
  // map array to property
17
- return object.map(item => item[name]);
17
+ return object.map((item) => item && typeof item === 'object' ? item[name] : undefined);
18
18
  }
19
19
  else {
20
20
  return object[index];
21
21
  }
22
22
  }
23
- else {
23
+ else if (typeof object === 'object') {
24
24
  return object[name];
25
25
  }
26
+ else {
27
+ return undefined;
28
+ }
26
29
  }
27
30
  export function resolveField(object, path) {
28
31
  let p = object;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,SAAS,KAAK,CAAC,MAAe,EAAE,IAAY;IACxC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC;QACpB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,wBAAwB;YACxB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACvB,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAgC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CACzF,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAQ,MAAkC,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,IAAc;IACxD,IAAI,CAAC,GAAY,MAAM,CAAC;IACxB,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBxF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAsB;IAC3D,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAsB;IAC3D,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAsB;IAC/D,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAE/E,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,WAAW,IAAI,UAAU,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { CompletionResult, ResultValidationError } from "@llumiverse/common";
1
+ import type { CompletionResult, ResultValidationError } from '@llumiverse/common';
2
2
  export declare class ValidationError extends Error implements ResultValidationError {
3
3
  code: 'validation_error' | 'json_error';
4
4
  constructor(code: 'validation_error' | 'json_error', message: string);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAa,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AA8B7F,qBAAa,eAAgB,SAAQ,KAAM,YAAW,qBAAqB;IAE5D,IAAI,EAAE,kBAAkB,GAAG,YAAY;gBAAvC,IAAI,EAAE,kBAAkB,GAAG,YAAY,EAC9C,OAAO,EAAE,MAAM;CAKtB;AAoBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAoD3F"}
@@ -0,0 +1,100 @@
1
+ import { Ajv } from 'ajv';
2
+ import addFormats from 'ajv-formats';
3
+ import { extractAndParseJSON } from './json.js';
4
+ import { resolveField } from './resolver.js';
5
+ const ajv = new Ajv({
6
+ coerceTypes: 'array',
7
+ allowDate: true,
8
+ strict: false,
9
+ useDefaults: true,
10
+ removeAdditional: 'failing',
11
+ });
12
+ // biome-ignore lint/suspicious/noTsIgnore: ajv-formats default export inconsistently callable under ESM/CJS interop
13
+ // @ts-ignore - ajv-formats default export is not callable under one of the TS configs in this monorepo
14
+ addFormats(ajv);
15
+ function errorMessage(error) {
16
+ return error instanceof Error ? error.message : String(error);
17
+ }
18
+ function getRequiredFields(schemaField) {
19
+ if (!schemaField || typeof schemaField !== 'object') {
20
+ return [];
21
+ }
22
+ const required = schemaField.required;
23
+ return Array.isArray(required) ? required.filter((field) => typeof field === 'string') : [];
24
+ }
25
+ export class ValidationError extends Error {
26
+ code;
27
+ constructor(code, message) {
28
+ super(message);
29
+ this.code = code;
30
+ this.name = 'ValidationError';
31
+ }
32
+ }
33
+ function parseCompletionAsJson(data) {
34
+ let lastError;
35
+ for (const part of data) {
36
+ if (part.type === 'text') {
37
+ const text = part.value.trim();
38
+ try {
39
+ return extractAndParseJSON(text);
40
+ }
41
+ catch (error) {
42
+ lastError = new ValidationError('json_error', errorMessage(error));
43
+ }
44
+ }
45
+ }
46
+ if (!lastError) {
47
+ lastError = new ValidationError('json_error', 'No JSON compatible response found in completion result');
48
+ }
49
+ throw lastError;
50
+ }
51
+ export function validateResult(data, schema) {
52
+ let json;
53
+ if (Array.isArray(data)) {
54
+ const jsonResults = data.filter((r) => r.type === 'json');
55
+ if (jsonResults.length > 0) {
56
+ json = jsonResults[0].value;
57
+ }
58
+ else {
59
+ try {
60
+ json = parseCompletionAsJson(data);
61
+ }
62
+ catch (error) {
63
+ throw new ValidationError('json_error', errorMessage(error));
64
+ }
65
+ }
66
+ }
67
+ else {
68
+ throw new Error('Data to validate must be an array');
69
+ }
70
+ const validate = ajv.compile(schema);
71
+ const valid = validate(json);
72
+ if (!valid && validate.errors) {
73
+ const errors = [];
74
+ for (const e of validate.errors) {
75
+ const path = e.instancePath.split('/').slice(1);
76
+ const value = resolveField(json, path);
77
+ const schemaPath = e.schemaPath.split('/').slice(1);
78
+ const schemaFieldFormat = resolveField(schema, schemaPath);
79
+ const schemaField = resolveField(schema, schemaPath.slice(0, -3));
80
+ //ignore date if empty or null
81
+ if (!value &&
82
+ typeof schemaFieldFormat === 'string' &&
83
+ ['date', 'date-time'].includes(schemaFieldFormat) &&
84
+ !getRequiredFields(schemaField).includes(path[path.length - 1])) {
85
+ }
86
+ else {
87
+ errors.push(e);
88
+ }
89
+ }
90
+ //console.log("Errors", errors)
91
+ if (errors.length > 0) {
92
+ const errorsMessage = errors
93
+ .map((e) => `${e.instancePath}: ${e.message}\n${JSON.stringify(e.params)}`)
94
+ .join(',\n\n');
95
+ throw new ValidationError('validation_error', errorsMessage);
96
+ }
97
+ }
98
+ return [{ type: 'json', value: json }];
99
+ }
100
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llumiverse/core",
3
- "version": "1.2.0",
3
+ "version": "1.4.0-dev.20260629.090753Z",
4
4
  "type": "module",
5
5
  "description": "Provide an universal API to LLMs. Support for existing LLMs can be added by writing a driver.",
6
6
  "files": [
@@ -27,32 +27,28 @@
27
27
  "huggingface",
28
28
  "togetherai"
29
29
  ],
30
- "types": "./lib/types/index.d.ts",
31
- "typesVersions": {
32
- "*": {
33
- "async": [
34
- "./lib/types/async.d.ts"
35
- ],
36
- "formatters": [
37
- "./lib/types/formatters/index.d.ts"
38
- ]
39
- }
40
- },
30
+ "main": "./lib/index.js",
31
+ "types": "./lib/index.d.ts",
41
32
  "exports": {
42
33
  ".": {
43
- "types": "./lib/types/index.d.ts",
44
- "import": "./lib/esm/index.js",
45
- "require": "./lib/cjs/index.js"
34
+ "types": "./lib/index.d.ts",
35
+ "default": "./lib/index.js"
46
36
  },
47
37
  "./async": {
48
- "types": "./lib/types/async.d.ts",
49
- "import": "./lib/esm/async.js",
50
- "require": "./lib/cjs/async.js"
38
+ "types": "./lib/async.d.ts",
39
+ "default": "./lib/async.js"
40
+ },
41
+ "./driver": {
42
+ "types": "./lib/Driver.d.ts",
43
+ "default": "./lib/Driver.js"
51
44
  },
52
45
  "./formatters": {
53
- "types": "./lib/types/formatters/index.d.ts",
54
- "import": "./lib/esm/formatters/index.js",
55
- "require": "./lib/cjs/formatters/index.js"
46
+ "types": "./lib/formatters/index.d.ts",
47
+ "default": "./lib/formatters/index.js"
48
+ },
49
+ "./http-agent": {
50
+ "types": "./lib/http-agent.d.ts",
51
+ "default": "./lib/http-agent.js"
56
52
  }
57
53
  },
58
54
  "author": "Llumiverse",
@@ -63,29 +59,24 @@
63
59
  "url": "git+ssh://git@github.com/vertesia/llumiverse.git"
64
60
  },
65
61
  "devDependencies": {
66
- "@vertesia/api-fetch-client": "^0.82.4",
67
- "rimraf": "^6.1.2",
68
- "ts-dual-module": "^0.6.3",
69
- "typescript": "^6.0.2",
70
- "vitest": "^4.0.18"
62
+ "@vertesia/api-fetch-client": "^1.3.0",
63
+ "rimraf": "^6.1.3",
64
+ "typescript": "^6.0.3",
65
+ "vitest": "^4.1.8"
71
66
  },
72
67
  "dependencies": {
73
- "@types/node": "^24.1.0",
74
- "ajv": "^8.18.0",
68
+ "@types/node": "^24.13.2",
69
+ "ajv": "^8.20.0",
75
70
  "ajv-formats": "^3.0.1",
76
- "jsonrepair": "^3.13.2",
77
- "@llumiverse/common": "1.2.0"
78
- },
79
- "ts_dual_module": {
80
- "outDir": "lib",
81
- "exports": {
82
- "async": "async.js",
83
- "formatters": "formatters/index.js"
84
- }
71
+ "jsonrepair": "^3.14.0",
72
+ "undici": "^7.27.2",
73
+ "@llumiverse/common": "1.4.0-dev.20260629.090753Z"
85
74
  },
86
75
  "scripts": {
76
+ "lint": "biome lint src",
87
77
  "test": "vitest run",
88
- "build": "pnpm exec tsmod build",
78
+ "typecheck:test": "tsc -p tsconfig.test.json --noEmit",
79
+ "build": "pnpm exec rimraf ./lib ./tsconfig.tsbuildinfo && tsc",
89
80
  "clean": "rimraf ./lib tsconfig.tsbuildinfo"
90
81
  }
91
82
  }