@actuate-media/cms-core 0.77.0 → 0.77.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/CHANGELOG.md +12 -0
- package/dist/__tests__/ai/ai.test.js +6 -1
- package/dist/__tests__/ai/ai.test.js.map +1 -1
- package/dist/__tests__/ai/content-writing-generate.test.d.ts +2 -0
- package/dist/__tests__/ai/content-writing-generate.test.d.ts.map +1 -0
- package/dist/__tests__/ai/content-writing-generate.test.js +38 -0
- package/dist/__tests__/ai/content-writing-generate.test.js.map +1 -0
- package/dist/__tests__/ai/runtime.test.js +100 -0
- package/dist/__tests__/ai/runtime.test.js.map +1 -1
- package/dist/__tests__/ai/sampling.test.d.ts +2 -0
- package/dist/__tests__/ai/sampling.test.d.ts.map +1 -0
- package/dist/__tests__/ai/sampling.test.js +25 -0
- package/dist/__tests__/ai/sampling.test.js.map +1 -0
- package/dist/ai/catalog.d.ts +6 -0
- package/dist/ai/catalog.d.ts.map +1 -1
- package/dist/ai/catalog.js +36 -6
- package/dist/ai/catalog.js.map +1 -1
- package/dist/ai/content-writing-generate.d.ts +19 -0
- package/dist/ai/content-writing-generate.d.ts.map +1 -0
- package/dist/ai/content-writing-generate.js +64 -0
- package/dist/ai/content-writing-generate.js.map +1 -0
- package/dist/ai/index.d.ts +1 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +1 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/models.d.ts.map +1 -1
- package/dist/ai/models.js +2 -2
- package/dist/ai/models.js.map +1 -1
- package/dist/ai/providers/anthropic.js +2 -2
- package/dist/ai/providers/anthropic.js.map +1 -1
- package/dist/ai/providers/http.d.ts +7 -3
- package/dist/ai/providers/http.d.ts.map +1 -1
- package/dist/ai/providers/http.js +48 -4
- package/dist/ai/providers/http.js.map +1 -1
- package/dist/ai/resolve.d.ts.map +1 -1
- package/dist/ai/resolve.js +2 -1
- package/dist/ai/resolve.js.map +1 -1
- package/dist/ai/runtime.d.ts +2 -0
- package/dist/ai/runtime.d.ts.map +1 -1
- package/dist/ai/runtime.js +10 -3
- package/dist/ai/runtime.js.map +1 -1
- package/dist/ai/sampling.d.ts +17 -0
- package/dist/ai/sampling.d.ts.map +1 -0
- package/dist/ai/sampling.js +51 -0
- package/dist/ai/sampling.js.map +1 -0
- package/dist/api/routes/ai-settings.d.ts.map +1 -1
- package/dist/api/routes/ai-settings.js +8 -20
- package/dist/api/routes/ai-settings.js.map +1 -1
- package/package.json +1 -1
package/dist/ai/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAChG,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAC/F,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,gCAAgC,EAChC,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,eAAe,EACf,yBAAyB,EACzB,mCAAmC,EACnC,+BAA+B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,8BAA8B,GACpC,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,eAAe,EACf,wBAAwB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC5B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,kCAAkC,EAClC,KAAK,4BAA4B,GAClC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EACL,SAAS,EACT,yBAAyB,EACzB,UAAU,EACV,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,UAAU,EACV,YAAY,IAAI,mBAAmB,EACnC,UAAU,IAAI,iBAAiB,EAC/B,cAAc,IAAI,qBAAqB,EACvC,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAA"}
|
package/dist/ai/index.js
CHANGED
|
@@ -14,6 +14,7 @@ export { buildBrandVoiceAnalysisPrompt, fenceBrandVoiceSample, gatherBrandVoiceS
|
|
|
14
14
|
export { alignContentWithBrandVoice, COAUTHOR_BRAND_CHANNEL, hasBrandVoiceForScoring, seoFieldToBrandChannel, } from './brand-voice-alignment.js';
|
|
15
15
|
export { applyDeterministicBrandFixes, buildBrandVoiceFixPrompt, needsAiBrandFix, runDeterministicBrandFix, } from './brand-voice-fix.js';
|
|
16
16
|
export { BrandVoiceSourceError, fetchBrandVoiceUrlSample, uploadToBrandVoiceSample, MAX_ANALYZE_UPLOADS, MAX_ANALYZE_URLS, MAX_UPLOAD_TEXT_CHARS, } from './brand-voice-sources.js';
|
|
17
|
+
export { generateContentWritingWithFallback, } from './content-writing-generate.js';
|
|
17
18
|
export { curatedFallbackCatalog, normalizeModel } from './catalog.js';
|
|
18
19
|
export { getModels, resolveModelOrUnavailable, syncModels, } from './models.js';
|
|
19
20
|
export { getUsageSummary } from './usage.js';
|
package/dist/ai/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAChG,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAiC,MAAM,uBAAuB,CAAA;AAC/F,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,GAOvB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,gCAAgC,EAChC,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GAUpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,eAAe,EACf,yBAAyB,EACzB,mCAAmC,EACnC,+BAA+B,GAKhC,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,eAAe,EACf,wBAAwB,GAGzB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EACL,SAAS,EACT,yBAAyB,EACzB,UAAU,GAEX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAGxB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,UAAU,EACV,YAAY,IAAI,mBAAmB,EACnC,UAAU,IAAI,iBAAiB,EAC/B,cAAc,IAAI,qBAAqB,GAIxC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,GAMtB,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAChG,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAiC,MAAM,uBAAuB,CAAA;AAC/F,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,GAOvB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,gCAAgC,EAChC,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GAUpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,eAAe,EACf,yBAAyB,EACzB,mCAAmC,EACnC,+BAA+B,GAKhC,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,eAAe,EACf,wBAAwB,GAGzB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,kCAAkC,GAEnC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EACL,SAAS,EACT,yBAAyB,EACzB,UAAU,GAEX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAGxB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,UAAU,EACV,YAAY,IAAI,mBAAmB,EACnC,UAAU,IAAI,iBAAiB,EAC/B,cAAc,IAAI,qBAAqB,GAIxC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,GAMtB,MAAM,cAAc,CAAA"}
|
package/dist/ai/models.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/ai/models.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EAIrB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/ai/models.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EAIrB,MAAM,mBAAmB,CAAA;AAS1B,OAAO,KAAK,EAAkB,OAAO,EAAwB,MAAM,YAAY,CAAA;AAE/E,OAAO,EAAE,oBAAoB,EAAE,CAAA;AAW/B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;IACrB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2D7F;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,EAAE,EAAE,OAAO,EACX,MAAM,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,OAAO,EAAE,CAAC,CAiBpB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,OAAO,EAAE,GACjB,OAAO,GAAG,IAAI,CAkBhB"}
|
package/dist/ai/models.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* entry so the UI can warn without silently dropping the admin's choice.
|
|
5
5
|
*/
|
|
6
6
|
import { AI_CONFIG_COLLECTION, getAIConfig, putAIConfig, resolveProviderKey, } from './config-store.js';
|
|
7
|
-
import { curatedFallbackCatalog, normalizeModel } from './catalog.js';
|
|
7
|
+
import { curatedFallbackCatalog, modelsMatch, normalizeModel, } from './catalog.js';
|
|
8
8
|
import { listModels as adapterListModels } from './providers/index.js';
|
|
9
9
|
export { AI_CONFIG_COLLECTION };
|
|
10
10
|
function adapterContextFor(conn, apiKey) {
|
|
@@ -107,7 +107,7 @@ export async function getModels(db, params) {
|
|
|
107
107
|
export function resolveModelOrUnavailable(modelId, catalog) {
|
|
108
108
|
if (!modelId)
|
|
109
109
|
return null;
|
|
110
|
-
const found = catalog.find((m) => m.id
|
|
110
|
+
const found = catalog.find((m) => modelsMatch(m.id, modelId) || modelsMatch(m.providerModelId, modelId));
|
|
111
111
|
if (found)
|
|
112
112
|
return found;
|
|
113
113
|
const parts = modelId.split(':');
|
package/dist/ai/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/ai/models.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/ai/models.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,cAAc,GAEf,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAItE,OAAO,EAAE,oBAAoB,EAAE,CAAA;AAE/B,SAAS,iBAAiB,CAAC,IAA0B,EAAE,MAAc;IACnE,OAAO;QACL,MAAM;QACN,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAA;AACH,CAAC;AASD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAW,EAAE,YAAoB;IAChE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAA;IAChE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAE3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAE7C,IAAI,MAAiB,CAAA;IACrB,IAAI,YAAY,GAAG,KAAK,CAAA;IACxB,IAAI,OAA2B,CAAA;IAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QACnD,YAAY,GAAG,IAAI,CAAA;QACnB,OAAO,GAAG,wDAAwD,CAAA;IACpE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;YACnF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;gBACnD,YAAY,GAAG,IAAI,CAAA;gBACnB,OAAO,GAAG,4DAA4D,CAAA;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CACnC,cAAc,CAAC;oBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,eAAe;oBACf,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,WAAW;oBACnB,YAAY,EAAE,GAAG;iBAClB,CAAC,CACH,CAAA;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACnD,YAAY,GAAG,IAAI,CAAA;YACnB,OAAO;gBACL,GAAG,YAAY,KAAK;oBAClB,CAAC,CAAC,8BAA8B,GAAG,CAAC,OAAO,8BAA8B;oBACzE,CAAC,CAAC,sDAAsD,CAAA;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAmB,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,CAAA;IACzE,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/C,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAC3D,CAAA;IACD,MAAM,WAAW,CACf,EAAE,EACF;QACE,GAAG,MAAM;QACT,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE;KAC9D,EACD,IAAI,CAAC,SAAS,IAAI,QAAQ,CAC3B,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAA;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAW,EACX,MAAqD;IAErD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,GAAG,GAAc,EAAE,CAAA;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1C,IAAI,MAAM,EAAE,YAAY;YAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,YAAY,CAAA;QAC7D,IAAI,MAAM,EAAE,QAAQ;YAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAA;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxC,IAAI,MAAM,EAAE,MAAM,EAAE,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;;YACjD,GAAG,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;IAC9D,CAAC;IACD,2EAA2E;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAA2B,EAC3B,OAAkB;IAElB,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,CAC7E,CAAA;IACD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/B,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAA;IAC3D,OAAO,cAAc,CAAC;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpE,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,CAAwB;QACpC,eAAe;QACf,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACvC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Anthropic adapter. Uses the `/v1/models` listing endpoint with `x-api-key`
|
|
3
3
|
* and the required `anthropic-version` header. Hostname is fixed.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { adapterHttpErrorFromResponse, extractModelIds, messageFromStatus, statusFromHttp, timedFetch, } from './http.js';
|
|
6
6
|
const ANTHROPIC_BASE = 'https://api.anthropic.com/v1';
|
|
7
7
|
const ANTHROPIC_VERSION = '2023-06-01';
|
|
8
8
|
function anthropicNum(value) {
|
|
@@ -49,7 +49,7 @@ export async function generateText(ctx, opts) {
|
|
|
49
49
|
}),
|
|
50
50
|
}, ctx);
|
|
51
51
|
if (!res.ok)
|
|
52
|
-
throw
|
|
52
|
+
throw await adapterHttpErrorFromResponse(res);
|
|
53
53
|
const payload = (await res.json());
|
|
54
54
|
const block = payload.content?.find((b) => b.type === 'text') ?? payload.content?.[0];
|
|
55
55
|
const promptTokens = anthropicNum(payload.usage?.input_tokens);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/ai/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/ai/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,9 @@ export interface AdapterContext {
|
|
|
17
17
|
/** Map an HTTP response status to a connection-health value. */
|
|
18
18
|
export declare function statusFromHttp(status: number): AIConnectionStatus;
|
|
19
19
|
/** A short, safe message for a status (never contains the key). */
|
|
20
|
-
export declare function messageFromStatus(status: AIConnectionStatus): string;
|
|
20
|
+
export declare function messageFromStatus(status: AIConnectionStatus, httpStatus?: number): string;
|
|
21
|
+
/** Best-effort extraction of a provider error message from a JSON error body. */
|
|
22
|
+
export declare function extractProviderErrorMessage(payload: unknown): string | undefined;
|
|
21
23
|
export declare function timedFetch(url: string, init: RequestInit, ctx: AdapterContext): Promise<Response>;
|
|
22
24
|
/**
|
|
23
25
|
* Validate a custom provider base URL against SSRF (no private/internal hosts,
|
|
@@ -28,7 +30,7 @@ export declare function assertSafeBaseUrl(baseUrl: string): Promise<void>;
|
|
|
28
30
|
/** Strip a trailing slash so we can append `/models` etc. cleanly. */
|
|
29
31
|
export declare function trimTrailingSlash(url: string): string;
|
|
30
32
|
export interface GenerateTextOptions {
|
|
31
|
-
/** Provider-native model id (e.g. `gpt-4o`, `claude-sonnet-4-
|
|
33
|
+
/** Provider-native model id (e.g. `gpt-4o`, `claude-sonnet-4-6`). */
|
|
32
34
|
model: string;
|
|
33
35
|
prompt: string;
|
|
34
36
|
system?: string;
|
|
@@ -45,6 +47,8 @@ export interface GenerateTextResult {
|
|
|
45
47
|
/** Provider-native model id that produced the result. */
|
|
46
48
|
model: string;
|
|
47
49
|
}
|
|
50
|
+
/** Build an adapter error from a non-2xx response, including provider detail when safe. */
|
|
51
|
+
export declare function adapterHttpErrorFromResponse(res: Response): Promise<AdapterHttpError>;
|
|
48
52
|
/**
|
|
49
53
|
* Call an OpenAI-compatible `/chat/completions` endpoint. Shared by the OpenAI,
|
|
50
54
|
* xAI, and custom adapters (all speak the same wire format). `base` must already
|
|
@@ -55,7 +59,7 @@ export declare function openAiChat(base: string, headers: Record<string, string>
|
|
|
55
59
|
export declare class AdapterHttpError extends Error {
|
|
56
60
|
readonly connectionStatus: AIConnectionStatus;
|
|
57
61
|
readonly httpStatus: number;
|
|
58
|
-
constructor(connectionStatus: AIConnectionStatus, httpStatus: number);
|
|
62
|
+
constructor(connectionStatus: AIConnectionStatus, httpStatus: number, detail?: string);
|
|
59
63
|
}
|
|
60
64
|
/** Best-effort extraction of model ids from an OpenAI-compatible list payload. */
|
|
61
65
|
export declare function extractModelIds(payload: unknown): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAMjE;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAMjE;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBzF;AAED,iFAAiF;AACjF,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAchF;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,QAAQ,CAAC,CAYnB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAetE;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9E,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAA;CACd;AAMD,2FAA2F;AAC3F,wBAAsB,4BAA4B,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgB3F;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAsC7B;AAED,mFAAmF;AACnF,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM;gBADlB,gBAAgB,EAAE,kBAAkB,EACpC,UAAU,EAAE,MAAM,EAC3B,MAAM,CAAC,EAAE,MAAM;CAOlB;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAS1D"}
|
|
@@ -18,7 +18,7 @@ export function statusFromHttp(status) {
|
|
|
18
18
|
return 'unknown';
|
|
19
19
|
}
|
|
20
20
|
/** A short, safe message for a status (never contains the key). */
|
|
21
|
-
export function messageFromStatus(status) {
|
|
21
|
+
export function messageFromStatus(status, httpStatus) {
|
|
22
22
|
switch (status) {
|
|
23
23
|
case 'connected':
|
|
24
24
|
return 'Connection successful.';
|
|
@@ -31,9 +31,31 @@ export function messageFromStatus(status) {
|
|
|
31
31
|
case 'needs_setup':
|
|
32
32
|
return 'No API key is configured for this provider.';
|
|
33
33
|
default:
|
|
34
|
+
if (httpStatus === 400 || httpStatus === 422) {
|
|
35
|
+
return 'The provider rejected the request. Check the selected model in Settings > AI.';
|
|
36
|
+
}
|
|
37
|
+
if (httpStatus === 404) {
|
|
38
|
+
return 'The provider endpoint or model was not found.';
|
|
39
|
+
}
|
|
34
40
|
return 'Could not determine connection status.';
|
|
35
41
|
}
|
|
36
42
|
}
|
|
43
|
+
/** Best-effort extraction of a provider error message from a JSON error body. */
|
|
44
|
+
export function extractProviderErrorMessage(payload) {
|
|
45
|
+
if (!payload || typeof payload !== 'object')
|
|
46
|
+
return undefined;
|
|
47
|
+
const root = payload;
|
|
48
|
+
const nested = root.error;
|
|
49
|
+
if (nested && typeof nested === 'object') {
|
|
50
|
+
const message = nested.message;
|
|
51
|
+
if (typeof message === 'string' && message.trim())
|
|
52
|
+
return message.trim();
|
|
53
|
+
}
|
|
54
|
+
const message = root.message;
|
|
55
|
+
if (typeof message === 'string' && message.trim())
|
|
56
|
+
return message.trim();
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
37
59
|
export async function timedFetch(url, init, ctx) {
|
|
38
60
|
const doFetch = ctx.fetchImpl ?? globalThis.fetch;
|
|
39
61
|
if (typeof doFetch !== 'function') {
|
|
@@ -77,6 +99,26 @@ export function trimTrailingSlash(url) {
|
|
|
77
99
|
function num(value) {
|
|
78
100
|
return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : 0;
|
|
79
101
|
}
|
|
102
|
+
/** Build an adapter error from a non-2xx response, including provider detail when safe. */
|
|
103
|
+
export async function adapterHttpErrorFromResponse(res) {
|
|
104
|
+
const status = statusFromHttp(res.status);
|
|
105
|
+
let detail;
|
|
106
|
+
try {
|
|
107
|
+
const text = await res.text();
|
|
108
|
+
if (text.trim()) {
|
|
109
|
+
try {
|
|
110
|
+
detail = extractProviderErrorMessage(JSON.parse(text));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
detail = text.replace(/\s+/g, ' ').trim().slice(0, 300);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Body read failures should not hide the HTTP status.
|
|
119
|
+
}
|
|
120
|
+
return new AdapterHttpError(status, res.status, detail);
|
|
121
|
+
}
|
|
80
122
|
/**
|
|
81
123
|
* Call an OpenAI-compatible `/chat/completions` endpoint. Shared by the OpenAI,
|
|
82
124
|
* xAI, and custom adapters (all speak the same wire format). `base` must already
|
|
@@ -98,7 +140,7 @@ export async function openAiChat(base, headers, ctx, opts) {
|
|
|
98
140
|
}),
|
|
99
141
|
}, ctx);
|
|
100
142
|
if (!res.ok) {
|
|
101
|
-
throw
|
|
143
|
+
throw await adapterHttpErrorFromResponse(res);
|
|
102
144
|
}
|
|
103
145
|
const payload = (await res.json());
|
|
104
146
|
const text = payload.choices?.[0]?.message?.content;
|
|
@@ -118,8 +160,10 @@ export async function openAiChat(base, headers, ctx, opts) {
|
|
|
118
160
|
export class AdapterHttpError extends Error {
|
|
119
161
|
connectionStatus;
|
|
120
162
|
httpStatus;
|
|
121
|
-
constructor(connectionStatus, httpStatus) {
|
|
122
|
-
|
|
163
|
+
constructor(connectionStatus, httpStatus, detail) {
|
|
164
|
+
const base = messageFromStatus(connectionStatus, httpStatus);
|
|
165
|
+
const safeDetail = detail?.replace(/\s+/g, ' ').trim().slice(0, 500);
|
|
166
|
+
super(safeDetail ? `${base} ${safeDetail}` : base);
|
|
123
167
|
this.connectionStatus = connectionStatus;
|
|
124
168
|
this.httpStatus = httpStatus;
|
|
125
169
|
this.name = 'AdapterHttpError';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/ai/providers/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAa/E,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,WAAW,CAAA;IACrD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,aAAa,CAAA;IAC1D,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,cAAc,CAAA;IACzC,IAAI,MAAM,IAAI,GAAG;QAAE,OAAO,eAAe,CAAA;IACzC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,MAA0B;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/ai/providers/http.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/resolve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/ai/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/ai/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,OAAO,EAIR,MAAM,YAAY,CAAA;AAEnB,wEAAwE;AACxE,MAAM,MAAM,kBAAkB,GAC1B,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,UAAU,GACV,MAAM,CAAA;AAEV,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,kBAAkB,CAAA;IAC1B,mFAAmF;IACnF,qBAAqB,EAAE,OAAO,CAAA;IAC9B,kFAAkF;IAClF,mBAAmB,EAAE,MAAM,EAAE,CAAA;CAC9B;AAiFD,gEAAgE;AAChE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAAE,GACjB,oBAAoB,CA2DtB;AAED,0EAA0E;AAC1E,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,OAAO,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAMtC"}
|
package/dist/ai/resolve.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* simplified version of this for live preview, but THIS function is the source
|
|
19
19
|
* of truth consumed by the AI runtime.
|
|
20
20
|
*/
|
|
21
|
+
import { modelsMatch } from './catalog.js';
|
|
21
22
|
/** Capability flags recognized on {@link AIModel.capabilities}. */
|
|
22
23
|
const CAPABILITY_KEYS = new Set([
|
|
23
24
|
'text',
|
|
@@ -33,7 +34,7 @@ const CAPABILITY_KEYS = new Set([
|
|
|
33
34
|
function findModel(catalog, id) {
|
|
34
35
|
if (!id)
|
|
35
36
|
return undefined;
|
|
36
|
-
return catalog.find((m) => m.id
|
|
37
|
+
return catalog.find((m) => modelsMatch(m.id, id) || modelsMatch(m.providerModelId, id));
|
|
37
38
|
}
|
|
38
39
|
/** Required capabilities a model is missing. Unknown capability strings are ignored. */
|
|
39
40
|
function missingCaps(model, required) {
|
package/dist/ai/resolve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/ai/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/ai/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/runtime.d.ts
CHANGED
|
@@ -34,6 +34,8 @@ export interface ResolvedFeatureRuntime {
|
|
|
34
34
|
modelId: string;
|
|
35
35
|
/** Provider-native model id sent on the wire. */
|
|
36
36
|
providerModelId: string;
|
|
37
|
+
/** When true, omit temperature / top_p / top_k on the provider request. */
|
|
38
|
+
disallowsSampling: boolean;
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
39
41
|
* Is a configured AI feature turned on? Unknown keys default to enabled so that
|
package/dist/ai/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,OAAO,KAAK,EAAwB,aAAa,EAAE,MAAM,YAAY,CAAA;AAGrE,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GACxB,kBAAkB,GAClB,aAAa,GACb,UAAU,GACV,QAAQ,GACR,iBAAiB,GACjB,gBAAgB,CAAA;AAEpB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,KAAK,CAAA;IACT,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,IAAI,CAAA;IACR,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,aAAa,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAA;IACvB,2EAA2E;IAC3E,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI1F;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,OAAO,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,sBAAsB,GAAG,YAAY,CAAC,CAyDhD;AAQD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACxB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,IAAI,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9E,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,OAAO,EACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,yBAAyB,GAAG,YAAY,CAAC,CA4DnD"}
|
package/dist/ai/runtime.js
CHANGED
|
@@ -15,11 +15,13 @@
|
|
|
15
15
|
* to call them.
|
|
16
16
|
*/
|
|
17
17
|
import { applyBrandVoice } from './brand-voice.js';
|
|
18
|
+
import { resolveWireModelId } from './catalog.js';
|
|
18
19
|
import { getAIConfig, resolveProviderKey } from './config-store.js';
|
|
19
20
|
import { getModels } from './models.js';
|
|
20
21
|
import { generateText as adapterGenerateText } from './providers/index.js';
|
|
21
22
|
import { AdapterHttpError } from './providers/http.js';
|
|
22
23
|
import { resolveFeatureModel } from './resolve.js';
|
|
24
|
+
import { modelDisallowsSampling, samplingParamProviderMessage } from './sampling.js';
|
|
23
25
|
import { getUsageSummary } from './usage.js';
|
|
24
26
|
function err(code, message) {
|
|
25
27
|
return { ok: false, code, message };
|
|
@@ -71,7 +73,7 @@ export async function resolveFeatureRuntime(db, featureKey) {
|
|
|
71
73
|
return err('budget_exceeded', 'The monthly AI token budget has been reached. Raise the limit in Settings > AI.');
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
|
-
const providerModelId = resolved.model?.providerModelId ?? stripProviderPrefix(resolved.modelId, connection);
|
|
76
|
+
const providerModelId = resolveWireModelId(resolved.model?.providerModelId ?? stripProviderPrefix(resolved.modelId, connection));
|
|
75
77
|
return {
|
|
76
78
|
ok: true,
|
|
77
79
|
featureKey,
|
|
@@ -81,6 +83,7 @@ export async function resolveFeatureRuntime(db, featureKey) {
|
|
|
81
83
|
apiKey,
|
|
82
84
|
modelId: resolved.modelId,
|
|
83
85
|
providerModelId,
|
|
86
|
+
disallowsSampling: modelDisallowsSampling(providerModelId, resolved.model?.capabilities),
|
|
84
87
|
};
|
|
85
88
|
}
|
|
86
89
|
/** `openai:gpt-4o` -> `gpt-4o`; leaves bare ids untouched. */
|
|
@@ -107,6 +110,9 @@ export async function generateTextForFeature(db, featureKey, input) {
|
|
|
107
110
|
system = applyBrandVoice(system, config.settings.brandVoice);
|
|
108
111
|
}
|
|
109
112
|
try {
|
|
113
|
+
const temperature = typeof input.temperature === 'number' && !resolved.disallowsSampling
|
|
114
|
+
? input.temperature
|
|
115
|
+
: undefined;
|
|
110
116
|
const result = await adapterGenerateText(resolved.providerKey, {
|
|
111
117
|
apiKey: resolved.apiKey,
|
|
112
118
|
baseUrl: resolved.baseUrl,
|
|
@@ -117,7 +123,7 @@ export async function generateTextForFeature(db, featureKey, input) {
|
|
|
117
123
|
prompt: input.prompt,
|
|
118
124
|
system,
|
|
119
125
|
maxTokens: input.maxTokens,
|
|
120
|
-
temperature
|
|
126
|
+
temperature,
|
|
121
127
|
});
|
|
122
128
|
await recordUsage(db, {
|
|
123
129
|
featureKey,
|
|
@@ -135,11 +141,12 @@ export async function generateTextForFeature(db, featureKey, input) {
|
|
|
135
141
|
};
|
|
136
142
|
}
|
|
137
143
|
catch (e) {
|
|
138
|
-
const
|
|
144
|
+
const raw = e instanceof AdapterHttpError
|
|
139
145
|
? e.message
|
|
140
146
|
: e instanceof Error
|
|
141
147
|
? e.message
|
|
142
148
|
: 'The AI provider request failed.';
|
|
149
|
+
const message = samplingParamProviderMessage(raw) ?? raw;
|
|
143
150
|
return err('provider_error', message);
|
|
144
151
|
}
|
|
145
152
|
}
|
package/dist/ai/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sampling-parameter policy for provider model calls.
|
|
3
|
+
*
|
|
4
|
+
* Some reasoning models (Anthropic Opus 4.7+, OpenAI o-series, catalog entries
|
|
5
|
+
* flagged `reasoning: true`) reject `temperature` / `top_p` / `top_k`. The
|
|
6
|
+
* runtime omits those fields rather than failing at the provider.
|
|
7
|
+
*/
|
|
8
|
+
import type { AIModelCapabilities } from './types.js';
|
|
9
|
+
/** Provider-native ids that reject sampling params even without curated metadata. */
|
|
10
|
+
export declare function providerModelIdDisallowsSampling(providerModelId: string): boolean;
|
|
11
|
+
/** Whether a resolved model should not receive temperature / top_p / top_k. */
|
|
12
|
+
export declare function modelDisallowsSampling(providerModelId: string, capabilities?: Partial<AIModelCapabilities>): boolean;
|
|
13
|
+
/** Return temperature only when the model accepts sampling parameters. */
|
|
14
|
+
export declare function resolveTemperatureForModel(providerModelId: string, capabilities: Partial<AIModelCapabilities> | undefined, temperature: number | undefined): number | undefined;
|
|
15
|
+
/** Map provider sampling rejections to an actionable admin message. */
|
|
16
|
+
export declare function samplingParamProviderMessage(providerMessage: string): string | undefined;
|
|
17
|
+
//# sourceMappingURL=sampling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampling.d.ts","sourceRoot":"","sources":["../../src/ai/sampling.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAErD,qFAAqF;AACrF,wBAAgB,gCAAgC,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAUjF;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAC1C,OAAO,CAGT;AAED,0EAA0E;AAC1E,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,SAAS,EACtD,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,GAAG,SAAS,CAIpB;AAKD,uEAAuE;AACvE,wBAAgB,4BAA4B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBxF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sampling-parameter policy for provider model calls.
|
|
3
|
+
*
|
|
4
|
+
* Some reasoning models (Anthropic Opus 4.7+, OpenAI o-series, catalog entries
|
|
5
|
+
* flagged `reasoning: true`) reject `temperature` / `top_p` / `top_k`. The
|
|
6
|
+
* runtime omits those fields rather than failing at the provider.
|
|
7
|
+
*/
|
|
8
|
+
/** Provider-native ids that reject sampling params even without curated metadata. */
|
|
9
|
+
export function providerModelIdDisallowsSampling(providerModelId) {
|
|
10
|
+
const id = providerModelId.toLowerCase();
|
|
11
|
+
// Anthropic Opus 4.7 generation and later.
|
|
12
|
+
if (/^claude-opus-4-(?:7|[89]|\d{2,})/.test(id))
|
|
13
|
+
return true;
|
|
14
|
+
// OpenAI reasoning / o-series models.
|
|
15
|
+
if (/^o[0-9]/.test(id))
|
|
16
|
+
return true;
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
/** Whether a resolved model should not receive temperature / top_p / top_k. */
|
|
20
|
+
export function modelDisallowsSampling(providerModelId, capabilities) {
|
|
21
|
+
if (capabilities?.reasoning)
|
|
22
|
+
return true;
|
|
23
|
+
return providerModelIdDisallowsSampling(providerModelId);
|
|
24
|
+
}
|
|
25
|
+
/** Return temperature only when the model accepts sampling parameters. */
|
|
26
|
+
export function resolveTemperatureForModel(providerModelId, capabilities, temperature) {
|
|
27
|
+
if (typeof temperature !== 'number')
|
|
28
|
+
return undefined;
|
|
29
|
+
if (modelDisallowsSampling(providerModelId, capabilities))
|
|
30
|
+
return undefined;
|
|
31
|
+
return temperature;
|
|
32
|
+
}
|
|
33
|
+
const SAMPLING_PARAM_HINT = 'The selected model does not support temperature. Choose a non-reasoning text model (e.g. Claude Sonnet) in Settings > AI.';
|
|
34
|
+
/** Map provider sampling rejections to an actionable admin message. */
|
|
35
|
+
export function samplingParamProviderMessage(providerMessage) {
|
|
36
|
+
const lower = providerMessage.toLowerCase();
|
|
37
|
+
if (lower.includes('temperature') &&
|
|
38
|
+
(lower.includes('deprecated') ||
|
|
39
|
+
lower.includes('not support') ||
|
|
40
|
+
lower.includes('unsupported') ||
|
|
41
|
+
lower.includes('invalid') ||
|
|
42
|
+
lower.includes('removed'))) {
|
|
43
|
+
return SAMPLING_PARAM_HINT;
|
|
44
|
+
}
|
|
45
|
+
if ((lower.includes('top_p') || lower.includes('top_k')) &&
|
|
46
|
+
(lower.includes('not support') || lower.includes('unsupported') || lower.includes('invalid'))) {
|
|
47
|
+
return SAMPLING_PARAM_HINT;
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=sampling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampling.js","sourceRoot":"","sources":["../../src/ai/sampling.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,qFAAqF;AACrF,MAAM,UAAU,gCAAgC,CAAC,eAAuB;IACtE,MAAM,EAAE,GAAG,eAAe,CAAC,WAAW,EAAE,CAAA;IAExC,2CAA2C;IAC3C,IAAI,kCAAkC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAA;IAE5D,sCAAsC;IACtC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnC,OAAO,KAAK,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,sBAAsB,CACpC,eAAuB,EACvB,YAA2C;IAE3C,IAAI,YAAY,EAAE,SAAS;QAAE,OAAO,IAAI,CAAA;IACxC,OAAO,gCAAgC,CAAC,eAAe,CAAC,CAAA;AAC1D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,0BAA0B,CACxC,eAAuB,EACvB,YAAsD,EACtD,WAA+B;IAE/B,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IACrD,IAAI,sBAAsB,CAAC,eAAe,EAAE,YAAY,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3E,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,mBAAmB,GACvB,2HAA2H,CAAA;AAE7H,uEAAuE;AACvE,MAAM,UAAU,4BAA4B,CAAC,eAAuB;IAClE,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,CAAA;IAC3C,IACE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7B,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC3B,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC7B,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC7B,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YACzB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAC5B,CAAC;QACD,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IACD,IACE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAC7F,CAAC;QACD,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-settings.d.ts","sourceRoot":"","sources":["../../../src/api/routes/ai-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AA0B7C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"ai-settings.d.ts","sourceRoot":"","sources":["../../../src/api/routes/ai-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AA0B7C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8qChE"}
|
|
@@ -601,7 +601,7 @@ export function registerAiSettingsRoutes(router) {
|
|
|
601
601
|
const maxSamples = typeof body.maxSamples === 'number' && Number.isFinite(body.maxSamples)
|
|
602
602
|
? body.maxSamples
|
|
603
603
|
: undefined;
|
|
604
|
-
const { gatherBrandVoiceSamples, buildBrandVoiceAnalysisPrompt, parseBrandVoiceAnalysisResponse, toBrandVoiceAnalyzeResult,
|
|
604
|
+
const { gatherBrandVoiceSamples, buildBrandVoiceAnalysisPrompt, parseBrandVoiceAnalysisResponse, toBrandVoiceAnalyzeResult, serializeBrandVoiceDocument, fetchBrandVoiceUrlSample, uploadToBrandVoiceSample, BrandVoiceSourceError, } = await import('../../ai/index.js');
|
|
605
605
|
const samples = collections.length
|
|
606
606
|
? await gatherBrandVoiceSamples(db(), { collections, maxSamples })
|
|
607
607
|
: [];
|
|
@@ -630,8 +630,8 @@ export function registerAiSettingsRoutes(router) {
|
|
|
630
630
|
return errorResponse('No readable content found in the selected sources. Publish content, check URLs, or try different uploads.', 404);
|
|
631
631
|
}
|
|
632
632
|
const { system, prompt } = buildBrandVoiceAnalysisPrompt(samples);
|
|
633
|
-
const
|
|
634
|
-
const
|
|
633
|
+
const { generateContentWritingWithFallback } = await import('../../ai/index.js');
|
|
634
|
+
const generated = await generateContentWritingWithFallback(db(), {
|
|
635
635
|
system,
|
|
636
636
|
prompt,
|
|
637
637
|
maxTokens: 2048,
|
|
@@ -639,21 +639,10 @@ export function registerAiSettingsRoutes(router) {
|
|
|
639
639
|
userId: auth.session.userId,
|
|
640
640
|
useBrandVoice: false,
|
|
641
641
|
});
|
|
642
|
-
if (!
|
|
643
|
-
|
|
644
|
-
return errorResponse(result.message, 403);
|
|
645
|
-
}
|
|
646
|
-
if (result.code === 'budget_exceeded') {
|
|
647
|
-
return errorResponse(result.message, 429);
|
|
648
|
-
}
|
|
649
|
-
if (result.code === 'no_provider' ||
|
|
650
|
-
result.code === 'no_model' ||
|
|
651
|
-
result.code === 'no_key') {
|
|
652
|
-
return errorResponse('AI is not configured. Connect a provider and default model in Settings > AI.', 503);
|
|
653
|
-
}
|
|
654
|
-
return errorResponse(`AI provider error: ${result.message}`, 502);
|
|
642
|
+
if (!generated.ok) {
|
|
643
|
+
return errorResponse(generated.message, generated.httpStatus);
|
|
655
644
|
}
|
|
656
|
-
const draft = parseBrandVoiceAnalysisResponse(
|
|
645
|
+
const draft = parseBrandVoiceAnalysisResponse(generated.text);
|
|
657
646
|
if (!draft) {
|
|
658
647
|
return errorResponse('Could not parse the brand voice analysis. Try again or edit the fields manually.', 502);
|
|
659
648
|
}
|
|
@@ -749,7 +738,7 @@ export function registerAiSettingsRoutes(router) {
|
|
|
749
738
|
}
|
|
750
739
|
const channel = typeof body?.channel === 'string' && body.channel.trim() ? body.channel.trim() : undefined;
|
|
751
740
|
const useAi = body?.useAi !== false;
|
|
752
|
-
const { getAIConfig, ensureBrandVoiceDocument, parseStructuredProfile, runDeterministicBrandFix, needsAiBrandFix, buildBrandVoiceFixPrompt, scoreBrandAlignment,
|
|
741
|
+
const { getAIConfig, ensureBrandVoiceDocument, parseStructuredProfile, runDeterministicBrandFix, needsAiBrandFix, buildBrandVoiceFixPrompt, scoreBrandAlignment, generateContentWritingWithFallback, } = await import('../../ai/index.js');
|
|
753
742
|
const config = await getAIConfig(db());
|
|
754
743
|
const profile = config.settings.brandVoice;
|
|
755
744
|
if (!profile?.document?.trim() && !profile?.tone?.trim() && !profile?.guidelines?.trim()) {
|
|
@@ -765,8 +754,7 @@ export function registerAiSettingsRoutes(router) {
|
|
|
765
754
|
let text = outcome.text;
|
|
766
755
|
if (useAi && needsAiBrandFix(outcome.afterScore)) {
|
|
767
756
|
const { system, prompt } = buildBrandVoiceFixPrompt(text, outcome.afterScore.issues, structured);
|
|
768
|
-
const
|
|
769
|
-
const aiResult = await generateTextForFeature(db(), FEATURE, {
|
|
757
|
+
const aiResult = await generateContentWritingWithFallback(db(), {
|
|
770
758
|
system,
|
|
771
759
|
prompt,
|
|
772
760
|
maxTokens: 1024,
|