@polpo-ai/core 0.15.37 → 0.15.39
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/README.md +76 -0
- package/dist/__tests__/model-profiles.test.d.ts +2 -0
- package/dist/__tests__/model-profiles.test.d.ts.map +1 -0
- package/dist/__tests__/model-profiles.test.js +221 -0
- package/dist/__tests__/model-profiles.test.js.map +1 -0
- package/dist/__tests__/model-router.test.d.ts +2 -0
- package/dist/__tests__/model-router.test.d.ts.map +1 -0
- package/dist/__tests__/model-router.test.js +458 -0
- package/dist/__tests__/model-router.test.js.map +1 -0
- package/dist/__tests__/runtime-plan.test.js +20 -0
- package/dist/__tests__/runtime-plan.test.js.map +1 -1
- package/dist/__tests__/task-runner-model-profiles.test.d.ts +2 -0
- package/dist/__tests__/task-runner-model-profiles.test.d.ts.map +1 -0
- package/dist/__tests__/task-runner-model-profiles.test.js +84 -0
- package/dist/__tests__/task-runner-model-profiles.test.js.map +1 -0
- package/dist/adapter.d.ts +5 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/assessment-orchestrator.d.ts +1 -0
- package/dist/assessment-orchestrator.d.ts.map +1 -1
- package/dist/assessment-orchestrator.js +11 -4
- package/dist/assessment-orchestrator.js.map +1 -1
- package/dist/escalation-manager.d.ts.map +1 -1
- package/dist/escalation-manager.js +6 -1
- package/dist/escalation-manager.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/loop/hooks.d.ts +2 -0
- package/dist/loop/hooks.d.ts.map +1 -1
- package/dist/loop/hooks.js.map +1 -1
- package/dist/loop/types.d.ts +3 -3
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/mission-executor.d.ts.map +1 -1
- package/dist/mission-executor.js +2 -2
- package/dist/mission-executor.js.map +1 -1
- package/dist/model-profiles.d.ts +39 -0
- package/dist/model-profiles.d.ts.map +1 -0
- package/dist/model-profiles.js +181 -0
- package/dist/model-profiles.js.map +1 -0
- package/dist/model-router.d.ts +98 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +358 -0
- package/dist/model-router.js.map +1 -0
- package/dist/runtime-plan/planner.d.ts.map +1 -1
- package/dist/runtime-plan/planner.js +31 -0
- package/dist/runtime-plan/planner.js.map +1 -1
- package/dist/runtime-plan/types.d.ts +3 -0
- package/dist/runtime-plan/types.d.ts.map +1 -1
- package/dist/schemas.d.ts +79 -19
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +16 -2
- package/dist/schemas.js.map +1 -1
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +5 -2
- package/dist/task-runner.js.map +1 -1
- package/dist/types/agent.d.ts +5 -3
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js.map +1 -1
- package/dist/types/config.d.ts +24 -3
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -112,6 +112,82 @@ Runtime plans contain policy decisions and references only. Prompts, messages,
|
|
|
112
112
|
provider headers, credentials, and retrieved private content do not belong in
|
|
113
113
|
the plan or its `runtime:plan` event.
|
|
114
114
|
|
|
115
|
+
## Model profiles
|
|
116
|
+
|
|
117
|
+
Model profiles give project configuration stable semantic names while keeping
|
|
118
|
+
provider model IDs out of agent definitions. Existing string values always
|
|
119
|
+
remain concrete model IDs. A profile is selected only with the explicit
|
|
120
|
+
`{ profile: "name" }` form.
|
|
121
|
+
|
|
122
|
+
```jsonc
|
|
123
|
+
{
|
|
124
|
+
"settings": {
|
|
125
|
+
"modelProfiles": {
|
|
126
|
+
"fast": "openai/gpt-4o-mini",
|
|
127
|
+
"balanced": {
|
|
128
|
+
"primary": "anthropic/claude-sonnet-4",
|
|
129
|
+
"fallbacks": [{ "profile": "fast" }]
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"orchestratorModel": { "profile": "balanced" }
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Agents can select a profile and optionally narrow which profiles, including
|
|
138
|
+
nested references, they may use:
|
|
139
|
+
|
|
140
|
+
```jsonc
|
|
141
|
+
{
|
|
142
|
+
"name": "support",
|
|
143
|
+
"model": { "profile": "balanced" },
|
|
144
|
+
"allowedModelProfiles": ["balanced", "fast"]
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Resolution is recursive, deterministic, deduplicates concrete models while
|
|
149
|
+
preserving order, and fails closed for unknown profiles, cycles, invalid
|
|
150
|
+
allowlists, excessive depth, or too many fallbacks. The runtime resolves the
|
|
151
|
+
profile before provider setup; providers receive only concrete model IDs.
|
|
152
|
+
|
|
153
|
+
## Model routing
|
|
154
|
+
|
|
155
|
+
Model routing is optional automation over model profiles. The OSS router never
|
|
156
|
+
selects raw model IDs and never receives profile definitions, prompts,
|
|
157
|
+
conversation history, tool schemas, or credentials. Hosts inject a classifier
|
|
158
|
+
and keep the feature off until their own rollout policy enables it.
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
import {
|
|
162
|
+
modelRouteRuntimePlanFields,
|
|
163
|
+
resolveModelRoute,
|
|
164
|
+
} from "@polpo-ai/core/model-router";
|
|
165
|
+
import { createStructuredModelRouteClassifier } from "@polpo-ai/llm";
|
|
166
|
+
|
|
167
|
+
const route = await resolveModelRoute({
|
|
168
|
+
surface: "agent",
|
|
169
|
+
source: "request",
|
|
170
|
+
input: "Summarize this short update.",
|
|
171
|
+
profiles: settings.modelProfiles,
|
|
172
|
+
config: {
|
|
173
|
+
mode: "auto",
|
|
174
|
+
fallbackProfile: "balanced",
|
|
175
|
+
allowedProfiles: ["fast", "balanced"],
|
|
176
|
+
},
|
|
177
|
+
}, {
|
|
178
|
+
classifier: createStructuredModelRouteClassifier({ model: routerModel }),
|
|
179
|
+
signal: request.signal,
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
const { model, audit } = modelRouteRuntimePlanFields(route);
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Explicit authorized profiles skip classification. Disabled routing,
|
|
186
|
+
single-profile allowlists, missing input, and missing classifiers resolve
|
|
187
|
+
deterministically. Timeout, provider failure, malformed output, unknown
|
|
188
|
+
profiles, and low confidence use the configured fallback; caller cancellation
|
|
189
|
+
stops planning instead of starting execution with a fallback.
|
|
190
|
+
|
|
115
191
|
## License
|
|
116
192
|
|
|
117
193
|
Apache 2.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-profiles.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/model-profiles.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { ModelProfileResolutionError, resolveModelProfileSelection, } from "../model-profiles.js";
|
|
3
|
+
import { modelProfileRegistrySchema, modelSelectionSchema, } from "../schemas.js";
|
|
4
|
+
describe("model profile resolution", () => {
|
|
5
|
+
it("preserves legacy model ids without interpreting provider-like names as profiles", () => {
|
|
6
|
+
expect(resolveModelProfileSelection("openai")).toEqual({
|
|
7
|
+
selection: "openai",
|
|
8
|
+
policy: {
|
|
9
|
+
primary: "openai",
|
|
10
|
+
fallbacks: [],
|
|
11
|
+
candidates: ["openai"],
|
|
12
|
+
},
|
|
13
|
+
profiles: [],
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
it("resolves an explicit profile reference to a concrete policy", () => {
|
|
17
|
+
expect(resolveModelProfileSelection({ profile: "fast" }, {
|
|
18
|
+
profiles: {
|
|
19
|
+
fast: {
|
|
20
|
+
primary: "openai/gpt-4o-mini",
|
|
21
|
+
fallbacks: ["google/gemini-2.5-flash"],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
})).toEqual({
|
|
25
|
+
selection: {
|
|
26
|
+
primary: "openai/gpt-4o-mini",
|
|
27
|
+
fallbacks: ["google/gemini-2.5-flash"],
|
|
28
|
+
},
|
|
29
|
+
policy: {
|
|
30
|
+
primary: "openai/gpt-4o-mini",
|
|
31
|
+
fallbacks: ["google/gemini-2.5-flash"],
|
|
32
|
+
candidates: ["openai/gpt-4o-mini", "google/gemini-2.5-flash"],
|
|
33
|
+
},
|
|
34
|
+
profiles: ["fast"],
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
it("flattens nested profiles and mixed direct/profile fallbacks in order", () => {
|
|
38
|
+
const result = resolveModelProfileSelection({
|
|
39
|
+
primary: { profile: "balanced" },
|
|
40
|
+
fallbacks: ["local/qwen", { profile: "emergency" }],
|
|
41
|
+
}, {
|
|
42
|
+
profiles: {
|
|
43
|
+
balanced: {
|
|
44
|
+
primary: "anthropic/claude-sonnet-4",
|
|
45
|
+
fallbacks: [{ profile: "fast" }],
|
|
46
|
+
},
|
|
47
|
+
fast: "openai/gpt-4o-mini",
|
|
48
|
+
emergency: {
|
|
49
|
+
primary: "google/gemini-2.5-flash",
|
|
50
|
+
fallbacks: ["local/qwen"],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
expect(result.policy.candidates).toEqual([
|
|
55
|
+
"anthropic/claude-sonnet-4",
|
|
56
|
+
"openai/gpt-4o-mini",
|
|
57
|
+
"local/qwen",
|
|
58
|
+
"google/gemini-2.5-flash",
|
|
59
|
+
]);
|
|
60
|
+
expect(result.profiles).toEqual(["balanced", "fast", "emergency"]);
|
|
61
|
+
});
|
|
62
|
+
it("deduplicates expanded models while preserving first occurrence", () => {
|
|
63
|
+
const result = resolveModelProfileSelection({
|
|
64
|
+
primary: { profile: "fast" },
|
|
65
|
+
fallbacks: ["openai/gpt-4o-mini", "local/qwen"],
|
|
66
|
+
}, {
|
|
67
|
+
profiles: {
|
|
68
|
+
fast: {
|
|
69
|
+
primary: "openai/gpt-4o-mini",
|
|
70
|
+
fallbacks: ["local/qwen"],
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
expect(result.selection).toEqual({
|
|
75
|
+
primary: "openai/gpt-4o-mini",
|
|
76
|
+
fallbacks: ["local/qwen"],
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
it("allows a profile to share a provider name because references are explicit", () => {
|
|
80
|
+
expect(resolveModelProfileSelection({ profile: "openai" }, { profiles: { openai: "openai/gpt-4o-mini" } }).policy.primary).toBe("openai/gpt-4o-mini");
|
|
81
|
+
});
|
|
82
|
+
it.each([
|
|
83
|
+
[null],
|
|
84
|
+
[[]],
|
|
85
|
+
["fast"],
|
|
86
|
+
[42],
|
|
87
|
+
])("rejects a malformed profile registry: %j", (profiles) => {
|
|
88
|
+
expect(() => resolveModelProfileSelection({ profile: "fast" }, { profiles: profiles })).toThrowError(expect.objectContaining({
|
|
89
|
+
code: "INVALID_PROFILE_REGISTRY",
|
|
90
|
+
}));
|
|
91
|
+
});
|
|
92
|
+
it.each([
|
|
93
|
+
[{ profile: "" }],
|
|
94
|
+
[{ profile: " " }],
|
|
95
|
+
[{ profile: "reasoning/high" }],
|
|
96
|
+
[{ profile: "UPPER" }],
|
|
97
|
+
[{ profile: 42 }],
|
|
98
|
+
[{ profile: "fast", primary: "openai/gpt-4o-mini" }],
|
|
99
|
+
[{ primary: "openai/gpt-4o-mini", arbitrary: true }],
|
|
100
|
+
])("rejects malformed or ambiguous references: %j", (selection) => {
|
|
101
|
+
expect(() => resolveModelProfileSelection(selection, {
|
|
102
|
+
profiles: {},
|
|
103
|
+
})).toThrow(ModelProfileResolutionError);
|
|
104
|
+
});
|
|
105
|
+
it("rejects missing profiles with a typed error", () => {
|
|
106
|
+
expect(() => resolveModelProfileSelection({ profile: "missing" }, { profiles: {} })).toThrowError(expect.objectContaining({
|
|
107
|
+
code: "UNKNOWN_PROFILE",
|
|
108
|
+
profile: "missing",
|
|
109
|
+
}));
|
|
110
|
+
});
|
|
111
|
+
it("rejects direct and indirect cycles with the complete cycle path", () => {
|
|
112
|
+
expect(() => resolveModelProfileSelection({ profile: "a" }, { profiles: { a: { profile: "a" } } })).toThrowError(expect.objectContaining({
|
|
113
|
+
code: "PROFILE_CYCLE",
|
|
114
|
+
path: ["a", "a"],
|
|
115
|
+
}));
|
|
116
|
+
expect(() => resolveModelProfileSelection({ profile: "a" }, {
|
|
117
|
+
profiles: {
|
|
118
|
+
a: { profile: "b" },
|
|
119
|
+
b: { profile: "c" },
|
|
120
|
+
c: { profile: "a" },
|
|
121
|
+
},
|
|
122
|
+
})).toThrowError(expect.objectContaining({
|
|
123
|
+
code: "PROFILE_CYCLE",
|
|
124
|
+
path: ["a", "b", "c", "a"],
|
|
125
|
+
}));
|
|
126
|
+
});
|
|
127
|
+
it("bounds recursive expansion independently from cycle detection", () => {
|
|
128
|
+
expect(() => resolveModelProfileSelection({ profile: "a" }, {
|
|
129
|
+
profiles: {
|
|
130
|
+
a: { profile: "b" },
|
|
131
|
+
b: { profile: "c" },
|
|
132
|
+
c: "openai/gpt-4o-mini",
|
|
133
|
+
},
|
|
134
|
+
maxDepth: 2,
|
|
135
|
+
})).toThrowError(expect.objectContaining({
|
|
136
|
+
code: "PROFILE_DEPTH_EXCEEDED",
|
|
137
|
+
}));
|
|
138
|
+
});
|
|
139
|
+
it("never silently truncates an expanded fallback policy", () => {
|
|
140
|
+
expect(() => resolveModelProfileSelection({ profile: "wide" }, {
|
|
141
|
+
profiles: {
|
|
142
|
+
wide: {
|
|
143
|
+
primary: "model/1",
|
|
144
|
+
fallbacks: ["model/2", "model/3", "model/4"],
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
maxFallbacks: 2,
|
|
148
|
+
})).toThrowError(expect.objectContaining({
|
|
149
|
+
code: "TOO_MANY_FALLBACKS",
|
|
150
|
+
}));
|
|
151
|
+
});
|
|
152
|
+
it("profile and model allowlists only narrow what can be selected", () => {
|
|
153
|
+
expect(() => resolveModelProfileSelection({ profile: "reasoning" }, {
|
|
154
|
+
profiles: { reasoning: "anthropic/claude-opus-4" },
|
|
155
|
+
allowedProfiles: ["fast"],
|
|
156
|
+
})).toThrowError(expect.objectContaining({
|
|
157
|
+
code: "DISALLOWED_PROFILE",
|
|
158
|
+
profile: "reasoning",
|
|
159
|
+
}));
|
|
160
|
+
expect(() => resolveModelProfileSelection({ profile: "fast" }, {
|
|
161
|
+
profiles: {
|
|
162
|
+
fast: {
|
|
163
|
+
primary: "openai/gpt-4o-mini",
|
|
164
|
+
fallbacks: ["google/gemini-2.5-flash"],
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
allowedProfiles: ["fast", "unused"],
|
|
168
|
+
allowedModels: ["openai/gpt-4o-mini"],
|
|
169
|
+
})).toThrowError(expect.objectContaining({
|
|
170
|
+
code: "DISALLOWED_MODEL",
|
|
171
|
+
model: "google/gemini-2.5-flash",
|
|
172
|
+
}));
|
|
173
|
+
});
|
|
174
|
+
it("validates nested profile references against the allowed profile set", () => {
|
|
175
|
+
expect(() => resolveModelProfileSelection({ profile: "balanced" }, {
|
|
176
|
+
profiles: {
|
|
177
|
+
balanced: { profile: "fast" },
|
|
178
|
+
fast: "openai/gpt-4o-mini",
|
|
179
|
+
},
|
|
180
|
+
allowedProfiles: ["balanced"],
|
|
181
|
+
})).toThrowError(expect.objectContaining({
|
|
182
|
+
code: "DISALLOWED_PROFILE",
|
|
183
|
+
profile: "fast",
|
|
184
|
+
}));
|
|
185
|
+
});
|
|
186
|
+
it("does not mutate inputs and freezes the complete resolution result", () => {
|
|
187
|
+
const selection = {
|
|
188
|
+
primary: { profile: "fast" },
|
|
189
|
+
fallbacks: ["local/qwen"],
|
|
190
|
+
};
|
|
191
|
+
const profiles = {
|
|
192
|
+
fast: "openai/gpt-4o-mini",
|
|
193
|
+
};
|
|
194
|
+
const selectionBefore = structuredClone(selection);
|
|
195
|
+
const profilesBefore = structuredClone(profiles);
|
|
196
|
+
const result = resolveModelProfileSelection(selection, { profiles });
|
|
197
|
+
expect(selection).toEqual(selectionBefore);
|
|
198
|
+
expect(profiles).toEqual(profilesBefore);
|
|
199
|
+
expect(Object.isFrozen(result)).toBe(true);
|
|
200
|
+
expect(Object.isFrozen(result.policy)).toBe(true);
|
|
201
|
+
expect(Object.isFrozen(result.policy.candidates)).toBe(true);
|
|
202
|
+
expect(Object.isFrozen(result.profiles)).toBe(true);
|
|
203
|
+
});
|
|
204
|
+
it("schema validation fails closed for ambiguous structured selections", () => {
|
|
205
|
+
expect(modelSelectionSchema.safeParse({
|
|
206
|
+
profile: "fast",
|
|
207
|
+
primary: "openai/gpt-4o-mini",
|
|
208
|
+
}).success).toBe(false);
|
|
209
|
+
expect(modelSelectionSchema.safeParse({
|
|
210
|
+
primary: "openai/gpt-4o-mini",
|
|
211
|
+
arbitrary: true,
|
|
212
|
+
}).success).toBe(false);
|
|
213
|
+
expect(modelProfileRegistrySchema.safeParse({
|
|
214
|
+
fast: {
|
|
215
|
+
profile: "balanced",
|
|
216
|
+
fallbacks: ["openai/gpt-4o-mini"],
|
|
217
|
+
},
|
|
218
|
+
}).success).toBe(false);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
//# sourceMappingURL=model-profiles.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-profiles.test.js","sourceRoot":"","sources":["../../src/__tests__/model-profiles.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-router.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/model-router.test.ts"],"names":[],"mappings":""}
|