@oh-my-pi/pi-catalog 16.2.11 → 16.2.13
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/CHANGELOG.md +16 -0
- package/dist/types/identity/bundled.d.ts +0 -3
- package/dist/types/identity/family.d.ts +9 -0
- package/dist/types/identity/index.d.ts +0 -2
- package/package.json +3 -3
- package/src/discovery/codex.ts +6 -0
- package/src/identity/bundled.ts +5 -15
- package/src/identity/family.ts +18 -5
- package/src/identity/index.ts +0 -2
- package/src/model-cache.ts +15 -9
- package/src/models.json +483 -20
- package/dist/types/identity/equivalence.d.ts +0 -46
- package/dist/types/identity/selection.d.ts +0 -20
- package/src/identity/equivalence.ts +0 -870
- package/src/identity/selection.ts +0 -65
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Canonical-variant selection: pick the preferred variant of a canonical
|
|
3
|
-
* model record given caller-supplied provider and candidate orderings.
|
|
4
|
-
*/
|
|
5
|
-
import type { Api, Model } from "../types";
|
|
6
|
-
import { type CanonicalModelVariant, formatCanonicalVariantSelector } from "./equivalence";
|
|
7
|
-
|
|
8
|
-
export interface CanonicalVariantPreferences {
|
|
9
|
-
/** Lowercased provider id → rank (lower wins). */
|
|
10
|
-
providerRank: ReadonlyMap<string, number>;
|
|
11
|
-
/** Variant selector (`provider/id`) → candidate-list position (lower wins). */
|
|
12
|
-
modelOrder: ReadonlyMap<string, number>;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/** Selector → index map over an ordered candidate list, for `modelOrder` tiebreaks. */
|
|
16
|
-
export function buildCanonicalModelOrder(candidates: readonly Model<Api>[]): Map<string, number> {
|
|
17
|
-
const modelOrder = new Map<string, number>();
|
|
18
|
-
for (let index = 0; index < candidates.length; index += 1) {
|
|
19
|
-
modelOrder.set(formatCanonicalVariantSelector(candidates[index]!), index);
|
|
20
|
-
}
|
|
21
|
-
return modelOrder;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const SOURCE_RANK: Record<CanonicalModelVariant["source"], number> = {
|
|
25
|
-
override: 1,
|
|
26
|
-
bundled: 1,
|
|
27
|
-
heuristic: 2,
|
|
28
|
-
fallback: 3,
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Pick the preferred variant. Sort order: configured provider rank →
|
|
33
|
-
* exact-id match → variant source (override/bundled > heuristic > fallback)
|
|
34
|
-
* → shorter id → candidate-list order.
|
|
35
|
-
*/
|
|
36
|
-
export function resolveCanonicalVariant(
|
|
37
|
-
variants: readonly CanonicalModelVariant[],
|
|
38
|
-
preferences: CanonicalVariantPreferences,
|
|
39
|
-
): CanonicalModelVariant | undefined {
|
|
40
|
-
if (variants.length === 0) {
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
const { providerRank, modelOrder } = preferences;
|
|
44
|
-
return [...variants].sort((left, right) => {
|
|
45
|
-
const leftProviderRank = providerRank.get(left.model.provider.toLowerCase()) ?? Number.MAX_SAFE_INTEGER;
|
|
46
|
-
const rightProviderRank = providerRank.get(right.model.provider.toLowerCase()) ?? Number.MAX_SAFE_INTEGER;
|
|
47
|
-
if (leftProviderRank !== rightProviderRank) {
|
|
48
|
-
return leftProviderRank - rightProviderRank;
|
|
49
|
-
}
|
|
50
|
-
const leftExact = left.model.id === left.canonicalId ? 0 : 1;
|
|
51
|
-
const rightExact = right.model.id === right.canonicalId ? 0 : 1;
|
|
52
|
-
if (leftExact !== rightExact) {
|
|
53
|
-
return leftExact - rightExact;
|
|
54
|
-
}
|
|
55
|
-
if (SOURCE_RANK[left.source] !== SOURCE_RANK[right.source]) {
|
|
56
|
-
return SOURCE_RANK[left.source] - SOURCE_RANK[right.source];
|
|
57
|
-
}
|
|
58
|
-
if (left.model.id.length !== right.model.id.length) {
|
|
59
|
-
return left.model.id.length - right.model.id.length;
|
|
60
|
-
}
|
|
61
|
-
const leftOrder = modelOrder.get(left.selector) ?? Number.MAX_SAFE_INTEGER;
|
|
62
|
-
const rightOrder = modelOrder.get(right.selector) ?? Number.MAX_SAFE_INTEGER;
|
|
63
|
-
return leftOrder - rightOrder;
|
|
64
|
-
})[0];
|
|
65
|
-
}
|