@elsium-ai/core 0.2.3 → 0.4.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/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +245 -2
- package/dist/policy.d.ts +3 -1
- package/dist/policy.d.ts.map +1 -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/tokens.d.ts +15 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/types.d.ts +38 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
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, StreamMiddleware, StreamMiddlewareNext, } 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,
|
|
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,EACV,gBAAgB,EAChB,oBAAoB,GACpB,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
|
@@ -496,6 +496,243 @@ function envBool(name, fallback) {
|
|
|
496
496
|
metadata: { variable: name }
|
|
497
497
|
});
|
|
498
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
|
+
}
|
|
499
736
|
// src/circuit-breaker.ts
|
|
500
737
|
function defaultShouldCount(error) {
|
|
501
738
|
if (error && typeof error === "object" && "retryable" in error) {
|
|
@@ -748,17 +985,19 @@ function createPolicySet(policies) {
|
|
|
748
985
|
}
|
|
749
986
|
};
|
|
750
987
|
}
|
|
751
|
-
function policyMiddleware(policySet) {
|
|
988
|
+
function policyMiddleware(policySet, options) {
|
|
752
989
|
return async (ctx, next) => {
|
|
753
990
|
const requestContent = ctx.request.messages.map((m) => extractText(m.content)).join(`
|
|
754
991
|
`);
|
|
755
992
|
const tokenCount = Math.ceil(requestContent.length / 4);
|
|
993
|
+
const costEstimate = options?.estimateCost ? options.estimateCost(ctx.model, tokenCount) : undefined;
|
|
756
994
|
const policyCtx = {
|
|
757
995
|
model: ctx.model,
|
|
758
996
|
provider: ctx.provider,
|
|
759
997
|
metadata: ctx.metadata,
|
|
760
998
|
requestContent,
|
|
761
|
-
tokenCount
|
|
999
|
+
tokenCount,
|
|
1000
|
+
costEstimate
|
|
762
1001
|
};
|
|
763
1002
|
const denials = policySet.evaluate(policyCtx);
|
|
764
1003
|
if (denials.length > 0) {
|
|
@@ -962,6 +1201,7 @@ function createShutdownManager(config) {
|
|
|
962
1201
|
return manager;
|
|
963
1202
|
}
|
|
964
1203
|
export {
|
|
1204
|
+
zodToJsonSchema,
|
|
965
1205
|
unwrapOr,
|
|
966
1206
|
unwrap,
|
|
967
1207
|
tryCatchSync,
|
|
@@ -984,10 +1224,13 @@ export {
|
|
|
984
1224
|
dedupMiddleware,
|
|
985
1225
|
createStream,
|
|
986
1226
|
createShutdownManager,
|
|
1227
|
+
createRegistry,
|
|
987
1228
|
createPolicySet,
|
|
988
1229
|
createLogger,
|
|
989
1230
|
createDedup,
|
|
1231
|
+
createContextManager,
|
|
990
1232
|
createCircuitBreaker,
|
|
1233
|
+
countTokens,
|
|
991
1234
|
costLimitPolicy,
|
|
992
1235
|
contentPolicy,
|
|
993
1236
|
ElsiumStream,
|
package/dist/policy.d.ts
CHANGED
|
@@ -29,7 +29,9 @@ export interface PolicySet {
|
|
|
29
29
|
readonly policies: string[];
|
|
30
30
|
}
|
|
31
31
|
export declare function createPolicySet(policies: PolicyConfig[]): PolicySet;
|
|
32
|
-
export declare function policyMiddleware(policySet: PolicySet
|
|
32
|
+
export declare function policyMiddleware(policySet: PolicySet, options?: {
|
|
33
|
+
estimateCost?: (model: string, tokenCount: number) => number;
|
|
34
|
+
}): Middleware;
|
|
33
35
|
export declare function modelAccessPolicy(allowedModels: string[]): PolicyConfig;
|
|
34
36
|
export declare function tokenLimitPolicy(maxTokens: number): PolicyConfig;
|
|
35
37
|
export declare function costLimitPolicy(maxCost: number): PolicyConfig;
|
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAqC,MAAM,SAAS,CAAA;AAG5E,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAA;AAE7C,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,YAAY,CAAA;AAE7D,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,IAAI,CAAC,EAAE,eAAe,GAAG,eAAe,CAAA;CACxC;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,EAAE,CAAA;IAC5C,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IACrC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,CAsCnE;AAED,wBAAgB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAqC,MAAM,SAAS,CAAA;AAG5E,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAA;AAE7C,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,YAAY,CAAA;AAE7D,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,IAAI,CAAC,EAAE,eAAe,GAAG,eAAe,CAAA;CACxC;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,EAAE,CAAA;IAC5C,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IACrC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,CAsCnE;AAED,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,GACxE,UAAU,CA2BZ;AAID,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,YAAY,CAqBvE;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CA2BhE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA2B7D;AAED,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,YAAY,CAuBrE"}
|
|
@@ -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/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,19 @@ 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
|
+
maxTokensPerMinute?: number;
|
|
178
|
+
maxTokensPerDay?: number;
|
|
179
|
+
maxCostPerDay?: number;
|
|
180
|
+
maxCostPerMonth?: number;
|
|
181
|
+
allowedModels?: string[];
|
|
182
|
+
};
|
|
183
|
+
metadata?: Record<string, unknown>;
|
|
184
|
+
}
|
|
150
185
|
export interface MiddlewareContext {
|
|
151
186
|
request: CompletionRequest;
|
|
152
187
|
provider: string;
|
|
@@ -157,4 +192,6 @@ export interface MiddlewareContext {
|
|
|
157
192
|
}
|
|
158
193
|
export type MiddlewareNext = (ctx: MiddlewareContext) => Promise<LLMResponse>;
|
|
159
194
|
export type Middleware = (ctx: MiddlewareContext, next: MiddlewareNext) => Promise<LLMResponse>;
|
|
195
|
+
export type StreamMiddlewareNext = (ctx: MiddlewareContext, source: AsyncIterable<StreamEvent>) => AsyncIterable<StreamEvent>;
|
|
196
|
+
export type StreamMiddleware = (ctx: MiddlewareContext, source: AsyncIterable<StreamEvent>, next: StreamMiddlewareNext) => AsyncIterable<StreamEvent>;
|
|
160
197
|
//# sourceMappingURL=types.d.ts.map
|
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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"}
|