@elsium-ai/core 0.2.2 → 0.3.0
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/config.d.ts.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +251 -1
- package/dist/registry.d.ts +9 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/schema.d.ts +8 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/stream.d.ts +0 -1
- package/dist/stream.d.ts.map +1 -1
- package/dist/tokens.d.ts +15 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/types.d.ts +34 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBjE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBjE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAoBjE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { Role, TextContent, ImageContent, ContentPart, ToolCall, ToolResult, Message, TokenUsage, CostBreakdown, StopReason, LLMResponse, StreamEvent, XRayData, StreamCheckpoint, ProviderConfig, CompletionRequest, ToolDefinition, MiddlewareContext, MiddlewareNext, Middleware, } from './types';
|
|
1
|
+
export type { Role, TextContent, ImageContent, AudioContent, DocumentContent, ContentPart, ToolCall, ToolResult, Message, TokenUsage, CostBreakdown, StopReason, LLMResponse, StreamEvent, XRayData, StreamCheckpoint, ProviderConfig, CompletionRequest, ToolDefinition, TenantContext, MiddlewareContext, MiddlewareNext, Middleware, } from './types';
|
|
2
2
|
export { ElsiumError } from './errors';
|
|
3
3
|
export type { ErrorCode, ErrorDetails } from './errors';
|
|
4
4
|
export { ok, err, isOk, isErr, unwrap, unwrapOr, tryCatch, tryCatchSync } from './result';
|
|
@@ -8,6 +8,11 @@ export type { StreamTransformer, ResilientStreamOptions } from './stream';
|
|
|
8
8
|
export { createLogger } from './logger';
|
|
9
9
|
export type { Logger, LogLevel, LogEntry, LoggerOptions } from './logger';
|
|
10
10
|
export { env, envNumber, envBool } from './config';
|
|
11
|
+
export { zodToJsonSchema } from './schema';
|
|
12
|
+
export { createRegistry } from './registry';
|
|
13
|
+
export type { Registry } from './registry';
|
|
14
|
+
export { countTokens, createContextManager } from './tokens';
|
|
15
|
+
export type { ContextStrategy, ContextManagerConfig, ContextManager } from './tokens';
|
|
11
16
|
export { generateId, generateTraceId, extractText, sleep, retry } from './utils';
|
|
12
17
|
export { createCircuitBreaker } from './circuit-breaker';
|
|
13
18
|
export type { CircuitBreakerConfig, CircuitBreaker, CircuitState } from './circuit-breaker';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACX,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,GACV,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACzF,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAGzE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAGzE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGlD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAG3F,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACtD,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACb,MAAM,UAAU,CAAA;AACjB,YAAY,EACX,cAAc,EACd,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,GACT,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACX,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,UAAU,GACV,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACzF,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAGzE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAGzE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAG1C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC5D,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGrF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAG3F,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACtD,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACb,MAAM,UAAU,CAAA;AACjB,YAAY,EACX,cAAc,EACd,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,GACT,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -476,7 +476,16 @@ function envBool(name, fallback) {
|
|
|
476
476
|
const raw = getEnvVar(name);
|
|
477
477
|
if (raw !== undefined) {
|
|
478
478
|
const normalized = raw.toLowerCase();
|
|
479
|
-
|
|
479
|
+
if (normalized === "true" || normalized === "1" || normalized === "yes")
|
|
480
|
+
return true;
|
|
481
|
+
if (normalized === "false" || normalized === "0" || normalized === "no")
|
|
482
|
+
return false;
|
|
483
|
+
throw new ElsiumError({
|
|
484
|
+
code: "CONFIG_ERROR",
|
|
485
|
+
message: `Environment variable ${name} has unrecognized boolean value: ${raw}. Expected one of: true, false, 1, 0, yes, no`,
|
|
486
|
+
retryable: false,
|
|
487
|
+
metadata: { variable: name, value: raw }
|
|
488
|
+
});
|
|
480
489
|
}
|
|
481
490
|
if (fallback !== undefined)
|
|
482
491
|
return fallback;
|
|
@@ -487,6 +496,243 @@ function envBool(name, fallback) {
|
|
|
487
496
|
metadata: { variable: name }
|
|
488
497
|
});
|
|
489
498
|
}
|
|
499
|
+
// src/schema.ts
|
|
500
|
+
var log = createLogger();
|
|
501
|
+
function zodDefKind(def) {
|
|
502
|
+
return typeof def.type === "string" ? def.type : def.typeName;
|
|
503
|
+
}
|
|
504
|
+
function zodObjectToJsonSchema(schema, convert) {
|
|
505
|
+
const shape = typeof schema.shape === "function" ? schema.shape() : schema.shape;
|
|
506
|
+
const properties = {};
|
|
507
|
+
const required = [];
|
|
508
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
509
|
+
const fieldSchema = value;
|
|
510
|
+
properties[key] = convert(fieldSchema);
|
|
511
|
+
const fieldDef = fieldSchema._def;
|
|
512
|
+
const fieldKind = zodDefKind(fieldDef);
|
|
513
|
+
if (fieldKind !== "optional" && fieldKind !== "ZodOptional" && fieldKind !== "default" && fieldKind !== "ZodDefault") {
|
|
514
|
+
required.push(key);
|
|
515
|
+
}
|
|
516
|
+
if (fieldDef.description) {
|
|
517
|
+
properties[key].description = fieldDef.description;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
return { type: "object", properties, required };
|
|
521
|
+
}
|
|
522
|
+
function zodToJsonSchema(schema) {
|
|
523
|
+
if (!("_def" in schema))
|
|
524
|
+
return { type: "object" };
|
|
525
|
+
const def = schema._def;
|
|
526
|
+
const kind = zodDefKind(def);
|
|
527
|
+
switch (kind) {
|
|
528
|
+
case "object":
|
|
529
|
+
case "ZodObject":
|
|
530
|
+
return zodObjectToJsonSchema(def, zodToJsonSchema);
|
|
531
|
+
case "string":
|
|
532
|
+
case "ZodString":
|
|
533
|
+
return { type: "string" };
|
|
534
|
+
case "number":
|
|
535
|
+
case "ZodNumber":
|
|
536
|
+
return { type: "number" };
|
|
537
|
+
case "boolean":
|
|
538
|
+
case "ZodBoolean":
|
|
539
|
+
return { type: "boolean" };
|
|
540
|
+
case "array":
|
|
541
|
+
case "ZodArray":
|
|
542
|
+
return {
|
|
543
|
+
type: "array",
|
|
544
|
+
items: zodToJsonSchema(def.element ?? def.type)
|
|
545
|
+
};
|
|
546
|
+
case "enum":
|
|
547
|
+
case "ZodEnum": {
|
|
548
|
+
const values = def.values ?? (def.entries ? Object.values(def.entries) : []);
|
|
549
|
+
return { type: "string", enum: values };
|
|
550
|
+
}
|
|
551
|
+
case "optional":
|
|
552
|
+
case "ZodOptional":
|
|
553
|
+
return zodToJsonSchema(def.innerType);
|
|
554
|
+
case "default":
|
|
555
|
+
case "ZodDefault":
|
|
556
|
+
return zodToJsonSchema(def.innerType);
|
|
557
|
+
case "nullable":
|
|
558
|
+
case "ZodNullable": {
|
|
559
|
+
const inner = zodToJsonSchema(def.innerType);
|
|
560
|
+
return { ...inner, nullable: true };
|
|
561
|
+
}
|
|
562
|
+
case "ZodLiteral":
|
|
563
|
+
return { type: typeof def.value, const: def.value };
|
|
564
|
+
case "ZodUnion": {
|
|
565
|
+
const options = def.options.map(zodToJsonSchema);
|
|
566
|
+
return { anyOf: options };
|
|
567
|
+
}
|
|
568
|
+
case "ZodRecord":
|
|
569
|
+
return {
|
|
570
|
+
type: "object",
|
|
571
|
+
additionalProperties: def.valueType ? zodToJsonSchema(def.valueType) : { type: "string" }
|
|
572
|
+
};
|
|
573
|
+
case "ZodTuple": {
|
|
574
|
+
const items = (def.items ?? []).map(zodToJsonSchema);
|
|
575
|
+
return { type: "array", prefixItems: items, minItems: items.length, maxItems: items.length };
|
|
576
|
+
}
|
|
577
|
+
case "ZodDate":
|
|
578
|
+
return { type: "string", format: "date-time" };
|
|
579
|
+
default:
|
|
580
|
+
log.warn(`zodToJsonSchema: unsupported type ${kind}, defaulting to string`);
|
|
581
|
+
return { type: "string" };
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
// src/registry.ts
|
|
585
|
+
var log2 = createLogger();
|
|
586
|
+
var BLOCKED_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
587
|
+
function createRegistry(label) {
|
|
588
|
+
const entries = new Map;
|
|
589
|
+
return {
|
|
590
|
+
register(name, factory) {
|
|
591
|
+
if (BLOCKED_KEYS.has(name)) {
|
|
592
|
+
log2.warn(`Registry(${label}): rejected blocked key "${name}"`);
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
entries.set(name, factory);
|
|
596
|
+
log2.debug(`Registry(${label}): registered "${name}"`);
|
|
597
|
+
},
|
|
598
|
+
get(name) {
|
|
599
|
+
if (BLOCKED_KEYS.has(name))
|
|
600
|
+
return;
|
|
601
|
+
return entries.get(name);
|
|
602
|
+
},
|
|
603
|
+
list() {
|
|
604
|
+
return Array.from(entries.keys());
|
|
605
|
+
},
|
|
606
|
+
has(name) {
|
|
607
|
+
if (BLOCKED_KEYS.has(name))
|
|
608
|
+
return false;
|
|
609
|
+
return entries.has(name);
|
|
610
|
+
},
|
|
611
|
+
unregister(name) {
|
|
612
|
+
if (BLOCKED_KEYS.has(name))
|
|
613
|
+
return false;
|
|
614
|
+
const deleted = entries.delete(name);
|
|
615
|
+
if (deleted) {
|
|
616
|
+
log2.debug(`Registry(${label}): unregistered "${name}"`);
|
|
617
|
+
}
|
|
618
|
+
return deleted;
|
|
619
|
+
}
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
// src/tokens.ts
|
|
623
|
+
var MODEL_RATIOS = {
|
|
624
|
+
cl100k_base: 4,
|
|
625
|
+
"gpt-4o": 4,
|
|
626
|
+
"gpt-4o-mini": 4,
|
|
627
|
+
o1: 4,
|
|
628
|
+
"o1-mini": 4,
|
|
629
|
+
"o3-mini": 4,
|
|
630
|
+
"claude-opus-4-6": 3.5,
|
|
631
|
+
"claude-sonnet-4-6": 3.5,
|
|
632
|
+
"claude-haiku-4-5-20251001": 3.5,
|
|
633
|
+
"gemini-2.0-flash": 4,
|
|
634
|
+
"gemini-2.0-flash-lite": 4,
|
|
635
|
+
"gemini-2.5-pro-preview-05-06": 4,
|
|
636
|
+
"gemini-2.5-flash-preview-04-17": 4
|
|
637
|
+
};
|
|
638
|
+
function getRatio(model) {
|
|
639
|
+
if (!model)
|
|
640
|
+
return 4;
|
|
641
|
+
if (MODEL_RATIOS[model])
|
|
642
|
+
return MODEL_RATIOS[model];
|
|
643
|
+
if (model.startsWith("claude"))
|
|
644
|
+
return 3.5;
|
|
645
|
+
if (model.startsWith("gemini"))
|
|
646
|
+
return 4;
|
|
647
|
+
if (model.startsWith("gpt") || model.startsWith("o1") || model.startsWith("o3"))
|
|
648
|
+
return 4;
|
|
649
|
+
return 4;
|
|
650
|
+
}
|
|
651
|
+
function extractMessageText(msg) {
|
|
652
|
+
if (typeof msg.content === "string")
|
|
653
|
+
return msg.content;
|
|
654
|
+
return msg.content.filter((p) => p.type === "text" && ("text" in p)).map((p) => p.text).join("");
|
|
655
|
+
}
|
|
656
|
+
function countTokens(text, model) {
|
|
657
|
+
const ratio = getRatio(model);
|
|
658
|
+
return Math.ceil(text.length / ratio) + 4;
|
|
659
|
+
}
|
|
660
|
+
function createContextManager(config) {
|
|
661
|
+
const { maxTokens, strategy, reserveTokens = 0 } = config;
|
|
662
|
+
const budget = maxTokens - reserveTokens;
|
|
663
|
+
function estimateMessageTokens(msg) {
|
|
664
|
+
return countTokens(extractMessageText(msg)) + 4;
|
|
665
|
+
}
|
|
666
|
+
function estimateTokens(messages) {
|
|
667
|
+
return messages.reduce((sum, msg) => sum + estimateMessageTokens(msg), 0);
|
|
668
|
+
}
|
|
669
|
+
async function fitTruncate(messages, system) {
|
|
670
|
+
let available = budget;
|
|
671
|
+
if (system)
|
|
672
|
+
available -= countTokens(system);
|
|
673
|
+
const result = [];
|
|
674
|
+
for (let i = messages.length - 1;i >= 0; i--) {
|
|
675
|
+
const tokens = estimateMessageTokens(messages[i]);
|
|
676
|
+
if (available - tokens < 0 && result.length > 0)
|
|
677
|
+
break;
|
|
678
|
+
available -= tokens;
|
|
679
|
+
result.unshift(messages[i]);
|
|
680
|
+
}
|
|
681
|
+
return result;
|
|
682
|
+
}
|
|
683
|
+
async function fitSummarize(messages, system) {
|
|
684
|
+
if (!config.summarizer)
|
|
685
|
+
return fitTruncate(messages, system);
|
|
686
|
+
let available = budget;
|
|
687
|
+
if (system)
|
|
688
|
+
available -= countTokens(system);
|
|
689
|
+
const total = estimateTokens(messages);
|
|
690
|
+
if (total <= available)
|
|
691
|
+
return messages;
|
|
692
|
+
const keepCount = Math.max(1, Math.floor(messages.length / 3));
|
|
693
|
+
const toSummarize = messages.slice(0, messages.length - keepCount);
|
|
694
|
+
const toKeep = messages.slice(messages.length - keepCount);
|
|
695
|
+
const summary = await config.summarizer(toSummarize);
|
|
696
|
+
const summaryMsg = {
|
|
697
|
+
role: "system",
|
|
698
|
+
content: `Previous conversation summary: ${summary}`
|
|
699
|
+
};
|
|
700
|
+
return [summaryMsg, ...toKeep];
|
|
701
|
+
}
|
|
702
|
+
async function fitSlidingWindow(messages, system) {
|
|
703
|
+
let available = budget;
|
|
704
|
+
if (system)
|
|
705
|
+
available -= countTokens(system);
|
|
706
|
+
const result = [];
|
|
707
|
+
for (let i = messages.length - 1;i >= 0; i--) {
|
|
708
|
+
const tokens = estimateMessageTokens(messages[i]);
|
|
709
|
+
if (available - tokens < 0 && result.length > 0)
|
|
710
|
+
break;
|
|
711
|
+
available -= tokens;
|
|
712
|
+
result.unshift(messages[i]);
|
|
713
|
+
}
|
|
714
|
+
return result;
|
|
715
|
+
}
|
|
716
|
+
return {
|
|
717
|
+
estimateTokens,
|
|
718
|
+
async fit(messages, system) {
|
|
719
|
+
const total = estimateTokens(messages);
|
|
720
|
+
let available = budget;
|
|
721
|
+
if (system)
|
|
722
|
+
available -= countTokens(system);
|
|
723
|
+
if (total <= available)
|
|
724
|
+
return messages;
|
|
725
|
+
switch (strategy) {
|
|
726
|
+
case "truncate":
|
|
727
|
+
return fitTruncate(messages, system);
|
|
728
|
+
case "summarize":
|
|
729
|
+
return fitSummarize(messages, system);
|
|
730
|
+
case "sliding-window":
|
|
731
|
+
return fitSlidingWindow(messages, system);
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
};
|
|
735
|
+
}
|
|
490
736
|
// src/circuit-breaker.ts
|
|
491
737
|
function defaultShouldCount(error) {
|
|
492
738
|
if (error && typeof error === "object" && "retryable" in error) {
|
|
@@ -953,6 +1199,7 @@ function createShutdownManager(config) {
|
|
|
953
1199
|
return manager;
|
|
954
1200
|
}
|
|
955
1201
|
export {
|
|
1202
|
+
zodToJsonSchema,
|
|
956
1203
|
unwrapOr,
|
|
957
1204
|
unwrap,
|
|
958
1205
|
tryCatchSync,
|
|
@@ -975,10 +1222,13 @@ export {
|
|
|
975
1222
|
dedupMiddleware,
|
|
976
1223
|
createStream,
|
|
977
1224
|
createShutdownManager,
|
|
1225
|
+
createRegistry,
|
|
978
1226
|
createPolicySet,
|
|
979
1227
|
createLogger,
|
|
980
1228
|
createDedup,
|
|
1229
|
+
createContextManager,
|
|
981
1230
|
createCircuitBreaker,
|
|
1231
|
+
countTokens,
|
|
982
1232
|
costLimitPolicy,
|
|
983
1233
|
contentPolicy,
|
|
984
1234
|
ElsiumStream,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface Registry<T> {
|
|
2
|
+
register(name: string, factory: T): void;
|
|
3
|
+
get(name: string): T | undefined;
|
|
4
|
+
list(): string[];
|
|
5
|
+
has(name: string): boolean;
|
|
6
|
+
unregister(name: string): boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function createRegistry<T>(label: string): Registry<T>;
|
|
9
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;IACxC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAA;IAChC,IAAI,IAAI,MAAM,EAAE,CAAA;IAChB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CACjC;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAoC5D"}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Converts a Zod schema to JSON Schema.
|
|
4
|
+
* Uses Zod's internal `_def` property — the standard community pattern
|
|
5
|
+
* since Zod does not expose a public schema introspection API.
|
|
6
|
+
*/
|
|
7
|
+
export declare function zodToJsonSchema(schema: z.ZodType): Record<string, unknown>;
|
|
8
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAyC5B;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkE1E"}
|
package/dist/stream.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { StopReason, StreamCheckpoint, StreamEvent, TokenUsage } from './types';
|
|
2
2
|
export interface ResilientStreamOptions {
|
|
3
3
|
checkpointIntervalMs?: number;
|
|
4
|
-
maxRetries?: number;
|
|
5
4
|
onCheckpoint?: (checkpoint: StreamCheckpoint) => void;
|
|
6
5
|
onPartialRecovery?: (text: string, error: Error) => void;
|
|
7
6
|
}
|
package/dist/stream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpF,MAAM,WAAW,sBAAsB;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpF,MAAM,WAAW,sBAAsB;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACrD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACxD;AA2CD,qBAAa,YAAa,YAAW,aAAa,CAAC,WAAW,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,SAAS,CAAQ;gBAEb,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC;IAIvC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,WAAW,CAAC;IAQnE,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC;IAavB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAQzB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCrD,UAAU,IAAI,OAAO,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;QACxB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;KAC7B,CAAC;IAoBF,IAAI,CAAC,SAAS,EAAE,iBAAiB,GAAG,YAAY;IAIhD,SAAS,CAAC,OAAO,GAAE,sBAA2B,GAAG,YAAY;CAsC7D;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,CAAA;AAIlG,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GAC7D,YAAY,CAmEd"}
|
package/dist/tokens.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Message } from './types';
|
|
2
|
+
export declare function countTokens(text: string, model?: string): number;
|
|
3
|
+
export type ContextStrategy = 'truncate' | 'summarize' | 'sliding-window';
|
|
4
|
+
export interface ContextManagerConfig {
|
|
5
|
+
maxTokens: number;
|
|
6
|
+
strategy: ContextStrategy;
|
|
7
|
+
reserveTokens?: number;
|
|
8
|
+
summarizer?: (messages: Message[]) => Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
export interface ContextManager {
|
|
11
|
+
fit(messages: Message[], system?: string): Promise<Message[]>;
|
|
12
|
+
estimateTokens(messages: Message[]): number;
|
|
13
|
+
}
|
|
14
|
+
export declare function createContextManager(config: ContextManagerConfig): ContextManager;
|
|
15
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAoCtC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,CAAA;AAEzE,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,eAAe,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,cAAc;IAC9B,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7D,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;CAC3C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAkFjF"}
|
package/dist/types.d.ts
CHANGED
|
@@ -15,7 +15,29 @@ export interface ImageContent {
|
|
|
15
15
|
url: string;
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
export
|
|
18
|
+
export interface AudioContent {
|
|
19
|
+
type: 'audio';
|
|
20
|
+
source: {
|
|
21
|
+
type: 'base64';
|
|
22
|
+
mediaType: string;
|
|
23
|
+
data: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'url';
|
|
26
|
+
url: string;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface DocumentContent {
|
|
30
|
+
type: 'document';
|
|
31
|
+
source: {
|
|
32
|
+
type: 'base64';
|
|
33
|
+
mediaType: string;
|
|
34
|
+
data: string;
|
|
35
|
+
} | {
|
|
36
|
+
type: 'url';
|
|
37
|
+
url: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export type ContentPart = TextContent | ImageContent | AudioContent | DocumentContent;
|
|
19
41
|
export interface ToolCall {
|
|
20
42
|
id: string;
|
|
21
43
|
name: string;
|
|
@@ -147,6 +169,17 @@ export interface StreamCheckpoint {
|
|
|
147
169
|
tokensSoFar: number;
|
|
148
170
|
eventIndex: number;
|
|
149
171
|
}
|
|
172
|
+
export interface TenantContext {
|
|
173
|
+
tenantId: string;
|
|
174
|
+
tier?: string;
|
|
175
|
+
limits?: {
|
|
176
|
+
maxRequestsPerMinute?: number;
|
|
177
|
+
maxTokensPerDay?: number;
|
|
178
|
+
maxCostPerMonth?: number;
|
|
179
|
+
allowedModels?: string[];
|
|
180
|
+
};
|
|
181
|
+
metadata?: Record<string, unknown>;
|
|
182
|
+
}
|
|
150
183
|
export interface MiddlewareContext {
|
|
151
184
|
request: CompletionRequest;
|
|
152
185
|
provider: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAI5B,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;AAE3D,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1F;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|