@llmgateway/models 1.357.1 → 1.357.2
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/context-tier.d.ts +9 -0
- package/dist/context-tier.js +56 -0
- package/dist/context-tier.js.map +1 -0
- package/dist/context-tier.spec.d.ts +1 -0
- package/dist/context-tier.spec.js +67 -0
- package/dist/context-tier.spec.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ProviderModelMapping } from "./models.js";
|
|
2
|
+
export declare const CONTEXT_TIER_TOLERANCE = 0.1;
|
|
3
|
+
export declare const CONTEXT_TIER_MIN_PROVIDERS = 2;
|
|
4
|
+
type ContextSizedMapping = Pick<ProviderModelMapping, "providerId" | "contextSize" | "deactivatedAt" | "regions">;
|
|
5
|
+
export declare function getReferenceContextSize(modelId: string, fallbackMappings?: readonly ContextSizedMapping[], now?: Date): number | undefined;
|
|
6
|
+
export declare function getContextTierMinSize(modelId: string, mappings: readonly ContextSizedMapping[], now?: Date): number | undefined;
|
|
7
|
+
export type ContextSizeDeviation = "below" | "above";
|
|
8
|
+
export declare function getContextSizeDeviation(contextSize: number | null | undefined, referenceContextSize: number | null | undefined): ContextSizeDeviation | undefined;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { models } from "./models.js";
|
|
2
|
+
import { expandAllProviderRegions } from "./region-helpers.js";
|
|
3
|
+
export const CONTEXT_TIER_TOLERANCE = 0.1;
|
|
4
|
+
export const CONTEXT_TIER_MIN_PROVIDERS = 2;
|
|
5
|
+
function isActive(mapping, now) {
|
|
6
|
+
return !mapping.deactivatedAt || new Date(mapping.deactivatedAt) > now;
|
|
7
|
+
}
|
|
8
|
+
function largestContextSize(mappings, now) {
|
|
9
|
+
let largest;
|
|
10
|
+
for (const mapping of expandAllProviderRegions(mappings)) {
|
|
11
|
+
if (isActive(mapping, now) &&
|
|
12
|
+
mapping.contextSize !== undefined &&
|
|
13
|
+
mapping.contextSize > (largest ?? 0)) {
|
|
14
|
+
largest = mapping.contextSize;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return largest;
|
|
18
|
+
}
|
|
19
|
+
function findCatalogueModel(modelId) {
|
|
20
|
+
return models.find((model) => model.id === modelId ||
|
|
21
|
+
("aliases" in model &&
|
|
22
|
+
model.aliases?.includes(modelId)));
|
|
23
|
+
}
|
|
24
|
+
export function getReferenceContextSize(modelId, fallbackMappings = [], now = new Date()) {
|
|
25
|
+
const catalogueModel = findCatalogueModel(modelId);
|
|
26
|
+
const fromCatalogue = catalogueModel
|
|
27
|
+
? largestContextSize(catalogueModel.providers, now)
|
|
28
|
+
: undefined;
|
|
29
|
+
return fromCatalogue ?? largestContextSize(fallbackMappings, now);
|
|
30
|
+
}
|
|
31
|
+
export function getContextTierMinSize(modelId, mappings, now = new Date()) {
|
|
32
|
+
const reference = getReferenceContextSize(modelId, mappings, now);
|
|
33
|
+
if (reference === undefined) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const minSize = reference * (1 - CONTEXT_TIER_TOLERANCE);
|
|
37
|
+
const tierProviders = new Set(expandAllProviderRegions(mappings)
|
|
38
|
+
.filter((mapping) => isActive(mapping, now) &&
|
|
39
|
+
mapping.contextSize !== undefined &&
|
|
40
|
+
mapping.contextSize >= minSize)
|
|
41
|
+
.map((mapping) => mapping.providerId));
|
|
42
|
+
return tierProviders.size >= CONTEXT_TIER_MIN_PROVIDERS ? minSize : undefined;
|
|
43
|
+
}
|
|
44
|
+
export function getContextSizeDeviation(contextSize, referenceContextSize) {
|
|
45
|
+
if (!contextSize || !referenceContextSize) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
if (contextSize < referenceContextSize * (1 - CONTEXT_TIER_TOLERANCE)) {
|
|
49
|
+
return "below";
|
|
50
|
+
}
|
|
51
|
+
if (contextSize > referenceContextSize * (1 + CONTEXT_TIER_TOLERANCE)) {
|
|
52
|
+
return "above";
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=context-tier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-tier.js","sourceRoot":"","sources":["../src/context-tier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { getContextSizeDeviation, getContextTierMinSize, getReferenceContextSize, } from "./context-tier.js";
|
|
3
|
+
import { models } from "./models.js";
|
|
4
|
+
function mapping(providerId, contextSize, extra = {}) {
|
|
5
|
+
return {
|
|
6
|
+
providerId,
|
|
7
|
+
externalId: "x",
|
|
8
|
+
contextSize,
|
|
9
|
+
...extra,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const UNKNOWN_MODEL = "not-a-catalogue-model";
|
|
13
|
+
describe("getReferenceContextSize", () => {
|
|
14
|
+
it("uses the largest active catalogue window, ignoring self-reported listings", () => {
|
|
15
|
+
const catalogueModel = models.find((model) => model.id === "glm-5.3-flash");
|
|
16
|
+
const largest = Math.max(...(catalogueModel?.providers ?? []).map((p) => p.contextSize ?? 0));
|
|
17
|
+
expect(getReferenceContextSize("glm-5.3-flash", [mapping("airside", 4_000_000)])).toBe(largest);
|
|
18
|
+
});
|
|
19
|
+
it("falls back to the given mappings for models outside the catalogue", () => {
|
|
20
|
+
expect(getReferenceContextSize(UNKNOWN_MODEL, [
|
|
21
|
+
mapping("a", 200_000),
|
|
22
|
+
mapping("b", 1_000_000),
|
|
23
|
+
mapping("c", 2_000_000, { deactivatedAt: new Date("2020-01-01") }),
|
|
24
|
+
])).toBe(1_000_000);
|
|
25
|
+
});
|
|
26
|
+
it("counts regional context overrides", () => {
|
|
27
|
+
expect(getReferenceContextSize(UNKNOWN_MODEL, [
|
|
28
|
+
mapping("a", 200_000, {
|
|
29
|
+
regions: [{ id: "eu", contextSize: 400_000 }],
|
|
30
|
+
}),
|
|
31
|
+
])).toBe(400_000);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe("getContextTierMinSize", () => {
|
|
35
|
+
it("admits windows within 10% of the reference", () => {
|
|
36
|
+
const minSize = getContextTierMinSize(UNKNOWN_MODEL, [
|
|
37
|
+
mapping("a", 1_050_000),
|
|
38
|
+
mapping("b", 1_000_000),
|
|
39
|
+
mapping("c", 200_000),
|
|
40
|
+
]);
|
|
41
|
+
expect(minSize).toBeCloseTo(945_000);
|
|
42
|
+
expect(1_000_000 >= (minSize ?? 0)).toBe(true);
|
|
43
|
+
expect(200_000 >= (minSize ?? 0)).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
it("does not apply when fewer than two providers serve the full window", () => {
|
|
46
|
+
expect(getContextTierMinSize(UNKNOWN_MODEL, [
|
|
47
|
+
mapping("a", 1_000_000, { regions: [{ id: "eu" }] }),
|
|
48
|
+
mapping("b", 200_000),
|
|
49
|
+
])).toBeUndefined();
|
|
50
|
+
});
|
|
51
|
+
it("does not apply without any known window", () => {
|
|
52
|
+
expect(getContextTierMinSize(UNKNOWN_MODEL, [
|
|
53
|
+
mapping("a", undefined),
|
|
54
|
+
mapping("b", undefined),
|
|
55
|
+
])).toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe("getContextSizeDeviation", () => {
|
|
59
|
+
it("flags windows more than 10% away from the reference", () => {
|
|
60
|
+
expect(getContextSizeDeviation(200_000, 1_048_576)).toBe("below");
|
|
61
|
+
expect(getContextSizeDeviation(1_000_000, 1_048_576)).toBeUndefined();
|
|
62
|
+
expect(getContextSizeDeviation(2_000_000, 1_048_576)).toBe("above");
|
|
63
|
+
expect(getContextSizeDeviation(null, 1_048_576)).toBeUndefined();
|
|
64
|
+
expect(getContextSizeDeviation(200_000, undefined)).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=context-tier.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-tier.spec.js","sourceRoot":"","sources":["../src/context-tier.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from "./providers.js";
|
|
|
6
6
|
export * from "./types.js";
|
|
7
7
|
export * from "./type-guards.js";
|
|
8
8
|
export * from "./helpers.js";
|
|
9
|
+
export * from "./context-tier.js";
|
|
9
10
|
export * from "./region-helpers.js";
|
|
10
11
|
export * from "./model-id.js";
|
|
11
12
|
export * from "./provider-access-restriction.js";
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export * from "./providers.js";
|
|
|
6
6
|
export * from "./types.js";
|
|
7
7
|
export * from "./type-guards.js";
|
|
8
8
|
export * from "./helpers.js";
|
|
9
|
+
export * from "./context-tier.js";
|
|
9
10
|
export * from "./region-helpers.js";
|
|
10
11
|
export * from "./model-id.js";
|
|
11
12
|
export * from "./provider-access-restriction.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kCAAkC,CAAC"}
|