@vellumai/assistant 0.11.1-staging.2 → 0.11.1
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/package.json +1 -1
- package/src/__tests__/config-loader-backfill.test.ts +10 -10
- package/src/__tests__/managed-profile-guard.test.ts +2 -4
- package/src/config/__tests__/default-profile-catalog.test.ts +9 -0
- package/src/config/default-profile-catalog.ts +1 -1
- package/src/plugin-api/vision-support.test.ts +11 -10
package/package.json
CHANGED
|
@@ -650,7 +650,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
650
650
|
expect(raw.llm.profiles).toEqual({});
|
|
651
651
|
// Default content resolves from the code catalog via the effective view.
|
|
652
652
|
const effectiveBalanced = getEffectiveProfile(raw.llm.profiles, "balanced");
|
|
653
|
-
expect(effectiveBalanced?.model).toBe("
|
|
653
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
654
654
|
expect(effectiveBalanced?.provider).toBe("vellum");
|
|
655
655
|
expect(effectiveBalanced?.provider_connection).toBeUndefined();
|
|
656
656
|
});
|
|
@@ -978,7 +978,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
978
978
|
// Resolution ignores the drifted body: a managed-source entry contributes
|
|
979
979
|
// only label/status/topP, everything else comes from the catalog.
|
|
980
980
|
const effectiveBalanced = getEffectiveProfile(raw.llm.profiles, "balanced");
|
|
981
|
-
expect(effectiveBalanced?.model).toBe("
|
|
981
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
982
982
|
expect(effectiveBalanced?.provider_connection).toBeUndefined();
|
|
983
983
|
});
|
|
984
984
|
|
|
@@ -1058,7 +1058,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
1058
1058
|
expect(raw.llm.profiles.balanced).toEqual(drifted);
|
|
1059
1059
|
expect(raw.llm.activeProfile).toBe("balanced");
|
|
1060
1060
|
const effectiveBalanced = getEffectiveProfile(raw.llm.profiles, "balanced");
|
|
1061
|
-
expect(effectiveBalanced?.model).toBe("
|
|
1061
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
1062
1062
|
expect(effectiveBalanced?.maxTokens).toBe(32000);
|
|
1063
1063
|
expect(effectiveBalanced?.provider_connection).toBeUndefined();
|
|
1064
1064
|
// The catalog body carries no topP and the entry has none, so the
|
|
@@ -1090,7 +1090,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
1090
1090
|
expect(raw.llm.profiles.balanced).toEqual(edited);
|
|
1091
1091
|
const effectiveBalanced = getEffectiveProfile(raw.llm.profiles, "balanced");
|
|
1092
1092
|
// Content is served from the catalog...
|
|
1093
|
-
expect(effectiveBalanced?.model).toBe("
|
|
1093
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
1094
1094
|
// ...with the user's label and status overlaid.
|
|
1095
1095
|
expect(effectiveBalanced?.label).toBe("My Default");
|
|
1096
1096
|
expect(effectiveBalanced?.status).toBe("disabled");
|
|
@@ -1115,7 +1115,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
1115
1115
|
expect(raw.llm.profiles.balanced).toEqual(stub);
|
|
1116
1116
|
const effectiveBalanced = getEffectiveProfile(raw.llm.profiles, "balanced");
|
|
1117
1117
|
expect(effectiveBalanced?.label).toBe("My Default");
|
|
1118
|
-
expect(effectiveBalanced?.model).toBe("
|
|
1118
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
1119
1119
|
});
|
|
1120
1120
|
|
|
1121
1121
|
test("off-platform boot preserves user-toggled status on a managed stub", () => {
|
|
@@ -1137,7 +1137,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
1137
1137
|
expect(effectiveBalanced?.status).toBe("disabled");
|
|
1138
1138
|
// Content still comes from the catalog — only label/status/topP are
|
|
1139
1139
|
// workspace-owned.
|
|
1140
|
-
expect(effectiveBalanced?.model).toBe("
|
|
1140
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
1141
1141
|
});
|
|
1142
1142
|
|
|
1143
1143
|
test("boot preserves a user-edited topP override on a managed stub", () => {
|
|
@@ -1161,7 +1161,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
1161
1161
|
expect(effectiveBalanced?.topP).toBe(0.5);
|
|
1162
1162
|
// Content still comes from the catalog — topP is workspace-owned, the
|
|
1163
1163
|
// rest is code-owned.
|
|
1164
|
-
expect(effectiveBalanced?.model).toBe("
|
|
1164
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
1165
1165
|
});
|
|
1166
1166
|
|
|
1167
1167
|
test("effective balanced profile carries no topP override by default", () => {
|
|
@@ -1216,7 +1216,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
1216
1216
|
expect(raw.llm.profiles.balanced).toBeUndefined();
|
|
1217
1217
|
const effectiveBalanced = getEffectiveProfile(raw.llm.profiles, "balanced");
|
|
1218
1218
|
expect(effectiveBalanced?.label).toBe("Balanced");
|
|
1219
|
-
expect(effectiveBalanced?.model).toBe("
|
|
1219
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
1220
1220
|
// Status is unset — the default resolves active.
|
|
1221
1221
|
expect("status" in (effectiveBalanced ?? {})).toBe(false);
|
|
1222
1222
|
});
|
|
@@ -1295,7 +1295,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
1295
1295
|
// overlay boot. The overlay-set label is what shows through the
|
|
1296
1296
|
// effective view.
|
|
1297
1297
|
expect(mainAgentConfig.provider).toBe("vellum");
|
|
1298
|
-
expect(mainAgentConfig.model).toBe("
|
|
1298
|
+
expect(mainAgentConfig.model).toBe("gpt-5.6-luna");
|
|
1299
1299
|
|
|
1300
1300
|
const raw = JSON.parse(readFileSync(CONFIG_PATH, "utf-8"));
|
|
1301
1301
|
expect(raw.llm.profiles.balanced).toEqual({
|
|
@@ -1326,7 +1326,7 @@ describe("loadConfig startup behavior", () => {
|
|
|
1326
1326
|
);
|
|
1327
1327
|
expect(effectiveBalanced?.provider).toBe("vellum");
|
|
1328
1328
|
expect(effectiveBalanced?.provider_connection).toBeUndefined();
|
|
1329
|
-
expect(effectiveBalanced?.model).toBe("
|
|
1329
|
+
expect(effectiveBalanced?.model).toBe("gpt-5.6-luna");
|
|
1330
1330
|
expect(effectiveBalanced?.maxTokens).toBe(32000);
|
|
1331
1331
|
expect(effectiveBalanced?.thinking).toEqual({
|
|
1332
1332
|
enabled: true,
|
|
@@ -1067,7 +1067,7 @@ describe("code-owned default profiles — wire view and write normalization", ()
|
|
|
1067
1067
|
});
|
|
1068
1068
|
const response = (await getRoute.handler({})) as Record<string, any>;
|
|
1069
1069
|
const wireBalanced = response.llm.profiles.balanced;
|
|
1070
|
-
expect(wireBalanced.model).toBe("
|
|
1070
|
+
expect(wireBalanced.model).toBe("gpt-5.6-luna");
|
|
1071
1071
|
expect(wireBalanced.provider).toBe("vellum");
|
|
1072
1072
|
expect(wireBalanced.provider_connection).toBeUndefined();
|
|
1073
1073
|
expect(wireBalanced.status).toBe("disabled");
|
|
@@ -1314,9 +1314,7 @@ describe("code-owned default profiles — echoes over stale on-disk bodies", ()
|
|
|
1314
1314
|
});
|
|
1315
1315
|
const response = (await getRoute.handler({})) as Record<string, any>;
|
|
1316
1316
|
// The wire view serves catalog content, not the stale body.
|
|
1317
|
-
expect(response.llm.profiles.balanced.model).toBe(
|
|
1318
|
-
"accounts/fireworks/models/glm-5p2",
|
|
1319
|
-
);
|
|
1317
|
+
expect(response.llm.profiles.balanced.model).toBe("gpt-5.6-luna");
|
|
1320
1318
|
const result = await patchRoute.handler({
|
|
1321
1319
|
body: { llm: { profiles: response.llm.profiles } },
|
|
1322
1320
|
});
|
|
@@ -55,6 +55,15 @@ describe("getEffectiveProfiles", () => {
|
|
|
55
55
|
}
|
|
56
56
|
});
|
|
57
57
|
|
|
58
|
+
test("the managed Balanced profile routes GPT-5.6 Luna through OpenAI", () => {
|
|
59
|
+
const balanced = CODE_DEFAULT_PROFILE_ENTRIES.balanced;
|
|
60
|
+
expect(balanced.model).toBe("gpt-5.6-luna");
|
|
61
|
+
expect(resolveRoutingIdentity(balanced.provider, balanced.model)).toEqual({
|
|
62
|
+
connectionName: "vellum",
|
|
63
|
+
expectedProvider: "openai",
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
58
67
|
test("the managed Quality profile routes GPT-5.6 Sol through OpenAI", () => {
|
|
59
68
|
const quality = CODE_DEFAULT_PROFILE_ENTRIES["quality-optimized"];
|
|
60
69
|
expect(quality.model).toBe("gpt-5.6-sol");
|
|
@@ -70,7 +70,7 @@ export type DefaultProfileTemplate = Omit<
|
|
|
70
70
|
*/
|
|
71
71
|
const VELLUM_PROFILE_IMPLS: Record<ProfileMatrixKey, DefaultProfileTemplate> = {
|
|
72
72
|
balanced: {
|
|
73
|
-
model: "
|
|
73
|
+
model: "gpt-5.6-luna",
|
|
74
74
|
provider: "vellum",
|
|
75
75
|
source: "managed",
|
|
76
76
|
label: "Balanced",
|
|
@@ -161,18 +161,19 @@ describe("doesSupportVision", () => {
|
|
|
161
161
|
|
|
162
162
|
describe("doesSupportVision with a BYO default provider", () => {
|
|
163
163
|
test("judges a default profile against the default provider's column model", () => {
|
|
164
|
-
// Managed/vellum column:
|
|
165
|
-
// false). Anthropic column:
|
|
166
|
-
//
|
|
164
|
+
// Managed/vellum column: cost-optimized → deepseek-v4-flash (text-only,
|
|
165
|
+
// supportsVision: false). Anthropic column: cost-optimized carries
|
|
166
|
+
// intent "latency-optimized" → claude-haiku-4-5 (supportsVision: true).
|
|
167
|
+
// The judged model must be the one the BYO install actually runs.
|
|
167
168
|
setMockConfig({}, { provider: "anthropic" });
|
|
168
|
-
expect(doesSupportVision(profile("
|
|
169
|
+
expect(doesSupportVision(profile("cost-optimized"))).toBe(true);
|
|
169
170
|
});
|
|
170
171
|
|
|
171
172
|
test("without a default provider, a default profile judges the managed column", () => {
|
|
172
|
-
// Null-reduction: no defaultProvider resolves
|
|
173
|
-
// vellum column (
|
|
173
|
+
// Null-reduction: no defaultProvider resolves cost-optimized through the
|
|
174
|
+
// vellum column (deepseek-v4-flash, text-only).
|
|
174
175
|
setMockConfig({});
|
|
175
|
-
expect(doesSupportVision(profile("
|
|
176
|
+
expect(doesSupportVision(profile("cost-optimized"))).toBe(false);
|
|
176
177
|
});
|
|
177
178
|
|
|
178
179
|
test("mix arms naming a default profile resolve through the same column", () => {
|
|
@@ -181,7 +182,7 @@ describe("doesSupportVision with a BYO default provider", () => {
|
|
|
181
182
|
"mix-profile": {
|
|
182
183
|
mix: [
|
|
183
184
|
{ profile: "text-arm", weight: 0.5 },
|
|
184
|
-
{ profile: "
|
|
185
|
+
{ profile: "cost-optimized", weight: 0.5 },
|
|
185
186
|
],
|
|
186
187
|
},
|
|
187
188
|
"text-arm": {
|
|
@@ -191,8 +192,8 @@ describe("doesSupportVision with a BYO default provider", () => {
|
|
|
191
192
|
},
|
|
192
193
|
{ provider: "anthropic" },
|
|
193
194
|
);
|
|
194
|
-
// The "
|
|
195
|
-
// model, so the mix can route to vision.
|
|
195
|
+
// The "cost-optimized" arm resolves to the anthropic column's
|
|
196
|
+
// vision-capable model, so the mix can route to vision.
|
|
196
197
|
expect(doesSupportVision(profile("mix-profile"))).toBe(true);
|
|
197
198
|
});
|
|
198
199
|
|