@framers/agentos 0.1.228 → 0.1.230
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 +1 -0
- package/dist/api/editImage.d.ts +21 -0
- package/dist/api/editImage.d.ts.map +1 -1
- package/dist/api/editImage.js +30 -2
- package/dist/api/editImage.js.map +1 -1
- package/dist/api/generateImage.d.ts +12 -1
- package/dist/api/generateImage.d.ts.map +1 -1
- package/dist/api/generateImage.js +7 -2
- package/dist/api/generateImage.js.map +1 -1
- package/dist/emergent/ForgeRejectionClassifier.d.ts +67 -0
- package/dist/emergent/ForgeRejectionClassifier.d.ts.map +1 -0
- package/dist/emergent/ForgeRejectionClassifier.js +126 -0
- package/dist/emergent/ForgeRejectionClassifier.js.map +1 -0
- package/dist/emergent/ForgeSchemaInference.d.ts +39 -0
- package/dist/emergent/ForgeSchemaInference.d.ts.map +1 -0
- package/dist/emergent/ForgeSchemaInference.js +92 -0
- package/dist/emergent/ForgeSchemaInference.js.map +1 -0
- package/dist/emergent/ForgeShapeValidator.d.ts +41 -0
- package/dist/emergent/ForgeShapeValidator.d.ts.map +1 -0
- package/dist/emergent/ForgeShapeValidator.js +57 -0
- package/dist/emergent/ForgeShapeValidator.js.map +1 -0
- package/dist/emergent/ForgeStatsAggregator.d.ts +94 -0
- package/dist/emergent/ForgeStatsAggregator.d.ts.map +1 -0
- package/dist/emergent/ForgeStatsAggregator.js +123 -0
- package/dist/emergent/ForgeStatsAggregator.js.map +1 -0
- package/dist/emergent/index.d.ts +5 -0
- package/dist/emergent/index.d.ts.map +1 -1
- package/dist/emergent/index.js +9 -0
- package/dist/emergent/index.js.map +1 -1
- package/dist/emergent/wrapForgeTool.d.ts +114 -0
- package/dist/emergent/wrapForgeTool.d.ts.map +1 -0
- package/dist/emergent/wrapForgeTool.js +219 -0
- package/dist/emergent/wrapForgeTool.js.map +1 -0
- package/dist/media/images/providers/ReplicateImageProvider.d.ts.map +1 -1
- package/dist/media/images/providers/ReplicateImageProvider.js +7 -0
- package/dist/media/images/providers/ReplicateImageProvider.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -347,6 +347,7 @@ Full API reference: [docs.agentos.sh/api](https://docs.agentos.sh/api)
|
|
|
347
347
|
| [Emergent Capabilities](./docs/architecture/EMERGENT_CAPABILITIES.md) | Runtime tool forging |
|
|
348
348
|
| [Channels & Platforms](./docs/architecture/PLATFORM_SUPPORT.md) | 37 platform adapters |
|
|
349
349
|
| [Voice Pipeline](./docs/features/VOICE_PIPELINE.md) | TTS, STT, telephony |
|
|
350
|
+
| [Uncensored Content](./docs/features/UNCENSORED_CONTENT.md) | `policyTier`-driven routing for mature text + image generation |
|
|
350
351
|
|
|
351
352
|
Full documentation: [docs.agentos.sh](https://docs.agentos.sh)
|
|
352
353
|
|
package/dist/api/editImage.d.ts
CHANGED
|
@@ -65,6 +65,27 @@ export interface EditImageOptions {
|
|
|
65
65
|
providerOptions?: ImageProviderOptionBag | Record<string, unknown>;
|
|
66
66
|
/** Optional usage ledger configuration. */
|
|
67
67
|
usageLedger?: AgentOSUsageLedgerOptions;
|
|
68
|
+
/**
|
|
69
|
+
* Content policy tier. When `'mature'` or `'private-adult'`, the edit is
|
|
70
|
+
* rerouted through {@link PolicyAwareImageRouter} to pick an uncensored
|
|
71
|
+
* community model (e.g. IP-Adapter FaceID SDXL for face-consistent
|
|
72
|
+
* edits, SDXL for generic img2img) and `disable_safety_checker: true`
|
|
73
|
+
* is applied automatically to the Replicate request so the model's own
|
|
74
|
+
* NSFW filter does not veto the prompt.
|
|
75
|
+
*
|
|
76
|
+
* `'safe'` and `'standard'` tiers fall back to whatever `provider` /
|
|
77
|
+
* `model` the caller supplied (or env-detected defaults), keeping the
|
|
78
|
+
* existing censored path intact.
|
|
79
|
+
*/
|
|
80
|
+
policyTier?: 'safe' | 'standard' | 'mature' | 'private-adult';
|
|
81
|
+
/**
|
|
82
|
+
* Required provider capabilities for mature/private-adult routing.
|
|
83
|
+
* Drives {@link UncensoredModelCatalog} filtering so callers can ask
|
|
84
|
+
* for `'face-consistency'` when editing a character's outfit, or
|
|
85
|
+
* `'img2img'` when the source is a scene the author wants preserved.
|
|
86
|
+
* Ignored for safe/standard tiers.
|
|
87
|
+
*/
|
|
88
|
+
capabilities?: string[];
|
|
68
89
|
}
|
|
69
90
|
/**
|
|
70
91
|
* Result returned by {@link editImage}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editImage.d.ts","sourceRoot":"","sources":["../../src/api/editImage.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAO9F;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnE,2CAA2C;IAC3C,WAAW,CAAC,EAAE,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"editImage.d.ts","sourceRoot":"","sources":["../../src/api/editImage.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAO9F;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnE,2CAA2C;IAC3C,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC9D;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA2IhF"}
|
package/dist/api/editImage.js
CHANGED
|
@@ -64,7 +64,35 @@ export async function editImage(opts) {
|
|
|
64
64
|
let metricModelId;
|
|
65
65
|
try {
|
|
66
66
|
return await withAgentOSSpan('agentos.api.edit_image', async (span) => {
|
|
67
|
-
|
|
67
|
+
let { providerId, modelId } = resolveModelOption(opts, 'image');
|
|
68
|
+
let effectiveProviderOptions = opts.providerOptions;
|
|
69
|
+
// Policy-tier-aware routing. Mirrors the generateImage flow so
|
|
70
|
+
// both generate and edit surfaces of the API respect the same
|
|
71
|
+
// uncensored catalog and safety-checker bypass. The router only
|
|
72
|
+
// kicks in for mature/private-adult — safe/standard edits keep
|
|
73
|
+
// whatever model the caller resolved above.
|
|
74
|
+
if (opts.policyTier
|
|
75
|
+
&& (opts.policyTier === 'mature' || opts.policyTier === 'private-adult')) {
|
|
76
|
+
const { PolicyAwareImageRouter } = await import('../media/images/PolicyAwareImageRouter.js');
|
|
77
|
+
const { createUncensoredModelCatalog } = await import('../core/llm/routing/UncensoredModelCatalog.js');
|
|
78
|
+
const imageRouter = new PolicyAwareImageRouter(createUncensoredModelCatalog());
|
|
79
|
+
// When the caller didn't pin a capability, default to img2img so
|
|
80
|
+
// the catalog never picks a txt2img-only model for an edit call.
|
|
81
|
+
const capabilities = opts.capabilities ?? ['img2img'];
|
|
82
|
+
const pref = imageRouter.getPreferredProvider(opts.policyTier, capabilities);
|
|
83
|
+
if (pref) {
|
|
84
|
+
providerId = pref.providerId;
|
|
85
|
+
modelId = pref.modelId;
|
|
86
|
+
const existingReplicate = effectiveProviderOptions?.replicate;
|
|
87
|
+
effectiveProviderOptions = {
|
|
88
|
+
...(effectiveProviderOptions ?? {}),
|
|
89
|
+
replicate: {
|
|
90
|
+
...(existingReplicate ?? {}),
|
|
91
|
+
disableSafetyChecker: true,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
68
96
|
const resolved = resolveMediaProvider(providerId, modelId, {
|
|
69
97
|
apiKey: opts.apiKey,
|
|
70
98
|
baseUrl: opts.baseUrl,
|
|
@@ -98,7 +126,7 @@ export async function editImage(opts) {
|
|
|
98
126
|
size: opts.size,
|
|
99
127
|
seed: opts.seed,
|
|
100
128
|
n: opts.n,
|
|
101
|
-
providerOptions:
|
|
129
|
+
providerOptions: effectiveProviderOptions,
|
|
102
130
|
});
|
|
103
131
|
metricUsage = result.usage;
|
|
104
132
|
span?.setAttribute('agentos.api.images_count', result.images.length);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editImage.js","sourceRoot":"","sources":["../../src/api/editImage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAOjE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAkC,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"editImage.js","sourceRoot":"","sources":["../../src/api/editImage.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,9 +60,20 @@ export interface GenerateImageOptions {
|
|
|
60
60
|
/**
|
|
61
61
|
* Content policy tier. When mature or private-adult, the image provider
|
|
62
62
|
* chain is reordered to prefer uncensored providers (Replicate, Fal)
|
|
63
|
-
* over censored ones (DALL-E, Stability safe mode)
|
|
63
|
+
* over censored ones (DALL-E, Stability safe mode) and
|
|
64
|
+
* `disable_safety_checker: true` is applied automatically to the
|
|
65
|
+
* Replicate request so the community model's own NSFW filter does
|
|
66
|
+
* not veto the prompt.
|
|
64
67
|
*/
|
|
65
68
|
policyTier?: 'safe' | 'standard' | 'mature' | 'private-adult';
|
|
69
|
+
/**
|
|
70
|
+
* Required provider capabilities for mature/private-adult routing.
|
|
71
|
+
* When `referenceImageUrl` is set, `'face-consistency'` is added
|
|
72
|
+
* automatically so the catalog prefers an IP-Adapter or Instant-ID
|
|
73
|
+
* model that actually respects the reference. Ignored for
|
|
74
|
+
* safe/standard tiers.
|
|
75
|
+
*/
|
|
76
|
+
capabilities?: string[];
|
|
66
77
|
/** Optional durable usage ledger configuration for helper-level accounting. */
|
|
67
78
|
usageLedger?: AgentOSUsageLedgerOptions;
|
|
68
79
|
/** Reference image URL for character/face consistency. See IImageProvider docs. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateImage.d.ts","sourceRoot":"","sources":["../../src/api/generateImage.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAEV,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAiH9F;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,wEAAwE;IACxE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,qEAAqE;IACrE,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,eAAe,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnE;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C
|
|
1
|
+
{"version":3,"file":"generateImage.d.ts","sourceRoot":"","sources":["../../src/api/generateImage.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAEV,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAiH9F;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,wEAAwE;IACxE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,qEAAqE;IACrE,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,eAAe,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnE;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC9D;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,uFAAuF;IACvF,eAAe,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,qEAAqE;IACrE,KAAK,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2J5F"}
|
|
@@ -166,12 +166,17 @@ export async function generateImage(opts) {
|
|
|
166
166
|
}
|
|
167
167
|
providerChain = [providerId, ...fallbackIds];
|
|
168
168
|
}
|
|
169
|
-
// Policy-tier-aware provider override
|
|
169
|
+
// Policy-tier-aware provider override. Uses the explicit
|
|
170
|
+
// capabilities hint when provided, else infers
|
|
171
|
+
// `'face-consistency'` from the presence of a reference image so
|
|
172
|
+
// character portraits keep the right face instead of drifting.
|
|
170
173
|
if (opts.policyTier && (opts.policyTier === 'mature' || opts.policyTier === 'private-adult')) {
|
|
171
174
|
const { PolicyAwareImageRouter } = await import('../media/images/PolicyAwareImageRouter.js');
|
|
172
175
|
const { createUncensoredModelCatalog } = await import('../core/llm/routing/UncensoredModelCatalog.js');
|
|
173
176
|
const imageRouter = new PolicyAwareImageRouter(createUncensoredModelCatalog());
|
|
174
|
-
const
|
|
177
|
+
const inferredCaps = opts.capabilities
|
|
178
|
+
?? (opts.referenceImageUrl ? ['face-consistency'] : undefined);
|
|
179
|
+
const pref = imageRouter.getPreferredProvider(opts.policyTier, inferredCaps);
|
|
175
180
|
if (pref) {
|
|
176
181
|
providerId = pref.providerId;
|
|
177
182
|
modelId = pref.modelId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateImage.js","sourceRoot":"","sources":["../../src/api/generateImage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generateImage.js","sourceRoot":"","sources":["../../src/api/generateImage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Classify forge-rejection `errorReason` strings into a
|
|
3
|
+
* small set of actionable categories.
|
|
4
|
+
* @module @framers/agentos/emergent/ForgeRejectionClassifier
|
|
5
|
+
*
|
|
6
|
+
* Without categorization, the only way to answer "why are forges failing"
|
|
7
|
+
* is to grep logs. With classification, an aggregator can emit a live
|
|
8
|
+
* histogram of failure modes (schema-extra-field vs shape-check vs judge
|
|
9
|
+
* correctness vs parse error) so operators see the failure-mode
|
|
10
|
+
* distribution without log access.
|
|
11
|
+
*
|
|
12
|
+
* Categories are deliberately narrow. They split out the patterns that
|
|
13
|
+
* appear in real production rejection text; anything unrecognized falls
|
|
14
|
+
* into `other`. A growing `other` bucket is the signal to read raw
|
|
15
|
+
* reasons and extend the pattern set.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Rejection-reason category produced by {@link classifyForgeRejection}.
|
|
19
|
+
*/
|
|
20
|
+
export type ForgeRejectionCategory =
|
|
21
|
+
/**
|
|
22
|
+
* Implementation returned output fields not declared in outputSchema
|
|
23
|
+
* (violates `additionalProperties: false`). The most common forge
|
|
24
|
+
* failure mode under a strict schema contract.
|
|
25
|
+
*/
|
|
26
|
+
'schema_extra_field'
|
|
27
|
+
/**
|
|
28
|
+
* Pre-judge shape validator caught a malformed request (empty schema
|
|
29
|
+
* properties, empty testCases, empty-input testCases).
|
|
30
|
+
*/
|
|
31
|
+
| 'shape_check'
|
|
32
|
+
/**
|
|
33
|
+
* Judge LLM returned malformed JSON the engine could not parse.
|
|
34
|
+
*/
|
|
35
|
+
| 'parse_error'
|
|
36
|
+
/**
|
|
37
|
+
* Judge flagged logic / correctness / safety concerns in the code
|
|
38
|
+
* itself (division bugs, threshold inversions, unbounded outputs,
|
|
39
|
+
* non-deterministic behavior).
|
|
40
|
+
*/
|
|
41
|
+
| 'judge_correctness'
|
|
42
|
+
/**
|
|
43
|
+
* Everything else. A non-zero `other` bucket is a signal to inspect
|
|
44
|
+
* the raw reasons and consider adding a new category.
|
|
45
|
+
*/
|
|
46
|
+
| 'other';
|
|
47
|
+
/**
|
|
48
|
+
* Classify a rejection reason string into a {@link ForgeRejectionCategory}.
|
|
49
|
+
*
|
|
50
|
+
* Case-insensitive substring match against pattern lists, evaluated in
|
|
51
|
+
* order: schema_extra_field first (most common and most actionable),
|
|
52
|
+
* then shape_check (local pre-validator), then parse_error, then
|
|
53
|
+
* judge_correctness, then `other`.
|
|
54
|
+
*
|
|
55
|
+
* Order matters: "violates the declared output schema by returning an
|
|
56
|
+
* additional field due to a logic error" matches BOTH schema_extra_field
|
|
57
|
+
* and judge_correctness; the former wins because it is the more specific
|
|
58
|
+
* and more actionable signal.
|
|
59
|
+
*
|
|
60
|
+
* @param errorReason Raw rejection reason text, typically the judge's
|
|
61
|
+
* verdict reasoning or the local shape-validator's joined error list.
|
|
62
|
+
* May be `undefined` when no reason was captured.
|
|
63
|
+
* @returns One of the five category labels. Empty / `undefined` input
|
|
64
|
+
* returns `'other'`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function classifyForgeRejection(errorReason: string | undefined): ForgeRejectionCategory;
|
|
67
|
+
//# sourceMappingURL=ForgeRejectionClassifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgeRejectionClassifier.d.ts","sourceRoot":"","sources":["../../src/emergent/ForgeRejectionClassifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;GAEG;AACH,MAAM,MAAM,sBAAsB;AAChC;;;;GAIG;AACD,oBAAoB;AACtB;;;GAGG;GACD,aAAa;AACf;;GAEG;GACD,aAAa;AACf;;;;GAIG;GACD,mBAAmB;AACrB;;;GAGG;GACD,OAAO,CAAC;AAuEZ;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,sBAAsB,CAoB9F"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Classify forge-rejection `errorReason` strings into a
|
|
3
|
+
* small set of actionable categories.
|
|
4
|
+
* @module @framers/agentos/emergent/ForgeRejectionClassifier
|
|
5
|
+
*
|
|
6
|
+
* Without categorization, the only way to answer "why are forges failing"
|
|
7
|
+
* is to grep logs. With classification, an aggregator can emit a live
|
|
8
|
+
* histogram of failure modes (schema-extra-field vs shape-check vs judge
|
|
9
|
+
* correctness vs parse error) so operators see the failure-mode
|
|
10
|
+
* distribution without log access.
|
|
11
|
+
*
|
|
12
|
+
* Categories are deliberately narrow. They split out the patterns that
|
|
13
|
+
* appear in real production rejection text; anything unrecognized falls
|
|
14
|
+
* into `other`. A growing `other` bucket is the signal to read raw
|
|
15
|
+
* reasons and extend the pattern set.
|
|
16
|
+
*/
|
|
17
|
+
const SCHEMA_EXTRA_FIELD_PATTERNS = [
|
|
18
|
+
'additional properties',
|
|
19
|
+
'additional property',
|
|
20
|
+
'additionalproperties',
|
|
21
|
+
'extra field',
|
|
22
|
+
'extra fields',
|
|
23
|
+
'extra property',
|
|
24
|
+
'extra properties',
|
|
25
|
+
'undeclared extra field',
|
|
26
|
+
'undeclared field',
|
|
27
|
+
'emits an additional',
|
|
28
|
+
'emits extra',
|
|
29
|
+
'returning an additional',
|
|
30
|
+
'returning extra',
|
|
31
|
+
'returns an additional',
|
|
32
|
+
'returns extra',
|
|
33
|
+
'returns additional',
|
|
34
|
+
'returning an undeclared',
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* Regex-based patterns for "extra <modifier> field" phrasings that
|
|
38
|
+
* substring matching misses. Example: "extra recommendations field"
|
|
39
|
+
* is clearly a schema-extra-field rejection but the contiguous string
|
|
40
|
+
* "extra field" is absent. These regexes catch the general form.
|
|
41
|
+
*/
|
|
42
|
+
const SCHEMA_EXTRA_FIELD_REGEXES = [
|
|
43
|
+
/\bextra\s+\w+\s+field\b/,
|
|
44
|
+
/\badditional\s+\w+\s+field\b/,
|
|
45
|
+
/\bextra\s+\w+\s+property\b/,
|
|
46
|
+
/\badditional\s+\w+\s+property\b/,
|
|
47
|
+
];
|
|
48
|
+
const SHAPE_CHECK_PATTERNS = [
|
|
49
|
+
'shape check failed',
|
|
50
|
+
'inputschema has no declared properties',
|
|
51
|
+
'outputschema has no declared properties',
|
|
52
|
+
'testcases use empty input',
|
|
53
|
+
'testcase use empty input',
|
|
54
|
+
'need at least 2 testcases',
|
|
55
|
+
'every test needs real field values',
|
|
56
|
+
];
|
|
57
|
+
const PARSE_ERROR_PATTERNS = [
|
|
58
|
+
'failed to parse llm response',
|
|
59
|
+
'could not parse judge response',
|
|
60
|
+
'judge response was not valid json',
|
|
61
|
+
];
|
|
62
|
+
const JUDGE_CORRECTNESS_PATTERNS = [
|
|
63
|
+
'logic error',
|
|
64
|
+
'threshold ordering',
|
|
65
|
+
'clamped',
|
|
66
|
+
'unclamped',
|
|
67
|
+
'inconsistent risk grading',
|
|
68
|
+
'division by zero',
|
|
69
|
+
'unbounded output',
|
|
70
|
+
'unbounded',
|
|
71
|
+
'returns nan',
|
|
72
|
+
'returns infinity',
|
|
73
|
+
'infinite loop',
|
|
74
|
+
'not deterministic',
|
|
75
|
+
'nondeterministic',
|
|
76
|
+
'correctness is questionable',
|
|
77
|
+
'correctness concern',
|
|
78
|
+
'fails safety',
|
|
79
|
+
'safety concern',
|
|
80
|
+
];
|
|
81
|
+
/**
|
|
82
|
+
* Classify a rejection reason string into a {@link ForgeRejectionCategory}.
|
|
83
|
+
*
|
|
84
|
+
* Case-insensitive substring match against pattern lists, evaluated in
|
|
85
|
+
* order: schema_extra_field first (most common and most actionable),
|
|
86
|
+
* then shape_check (local pre-validator), then parse_error, then
|
|
87
|
+
* judge_correctness, then `other`.
|
|
88
|
+
*
|
|
89
|
+
* Order matters: "violates the declared output schema by returning an
|
|
90
|
+
* additional field due to a logic error" matches BOTH schema_extra_field
|
|
91
|
+
* and judge_correctness; the former wins because it is the more specific
|
|
92
|
+
* and more actionable signal.
|
|
93
|
+
*
|
|
94
|
+
* @param errorReason Raw rejection reason text, typically the judge's
|
|
95
|
+
* verdict reasoning or the local shape-validator's joined error list.
|
|
96
|
+
* May be `undefined` when no reason was captured.
|
|
97
|
+
* @returns One of the five category labels. Empty / `undefined` input
|
|
98
|
+
* returns `'other'`.
|
|
99
|
+
*/
|
|
100
|
+
export function classifyForgeRejection(errorReason) {
|
|
101
|
+
if (!errorReason)
|
|
102
|
+
return 'other';
|
|
103
|
+
const lower = errorReason.toLowerCase();
|
|
104
|
+
for (const p of SCHEMA_EXTRA_FIELD_PATTERNS) {
|
|
105
|
+
if (lower.includes(p))
|
|
106
|
+
return 'schema_extra_field';
|
|
107
|
+
}
|
|
108
|
+
for (const rx of SCHEMA_EXTRA_FIELD_REGEXES) {
|
|
109
|
+
if (rx.test(lower))
|
|
110
|
+
return 'schema_extra_field';
|
|
111
|
+
}
|
|
112
|
+
for (const p of SHAPE_CHECK_PATTERNS) {
|
|
113
|
+
if (lower.includes(p))
|
|
114
|
+
return 'shape_check';
|
|
115
|
+
}
|
|
116
|
+
for (const p of PARSE_ERROR_PATTERNS) {
|
|
117
|
+
if (lower.includes(p))
|
|
118
|
+
return 'parse_error';
|
|
119
|
+
}
|
|
120
|
+
for (const p of JUDGE_CORRECTNESS_PATTERNS) {
|
|
121
|
+
if (lower.includes(p))
|
|
122
|
+
return 'judge_correctness';
|
|
123
|
+
}
|
|
124
|
+
return 'other';
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=ForgeRejectionClassifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgeRejectionClassifier.js","sourceRoot":"","sources":["../../src/emergent/ForgeRejectionClassifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiCH,MAAM,2BAA2B,GAAG;IAClC,uBAAuB;IACvB,qBAAqB;IACrB,sBAAsB;IACtB,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,wBAAwB;IACxB,kBAAkB;IAClB,qBAAqB;IACrB,aAAa;IACb,yBAAyB;IACzB,iBAAiB;IACjB,uBAAuB;IACvB,eAAe;IACf,oBAAoB;IACpB,yBAAyB;CAC1B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,0BAA0B,GAAa;IAC3C,yBAAyB;IACzB,8BAA8B;IAC9B,4BAA4B;IAC5B,iCAAiC;CAClC,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,oBAAoB;IACpB,wCAAwC;IACxC,yCAAyC;IACzC,2BAA2B;IAC3B,0BAA0B;IAC1B,2BAA2B;IAC3B,oCAAoC;CACrC,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,8BAA8B;IAC9B,gCAAgC;IAChC,mCAAmC;CACpC,CAAC;AAEF,MAAM,0BAA0B,GAAG;IACjC,aAAa;IACb,oBAAoB;IACpB,SAAS;IACT,WAAW;IACX,2BAA2B;IAC3B,kBAAkB;IAClB,kBAAkB;IAClB,WAAW;IACX,aAAa;IACb,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,kBAAkB;IAClB,6BAA6B;IAC7B,qBAAqB;IACrB,cAAc;IACd,gBAAgB;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAA+B;IACpE,IAAI,CAAC,WAAW;QAAE,OAAO,OAAO,CAAC;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAExC,KAAK,MAAM,CAAC,IAAI,2BAA2B,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,oBAAoB,CAAC;IACrD,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,0BAA0B,EAAE,CAAC;QAC5C,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,oBAAoB,CAAC;IAClD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,oBAAoB,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,aAAa,CAAC;IAC9C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,oBAAoB,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,aAAa,CAAC;IAC9C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,0BAA0B,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,mBAAmB,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Synthesize missing forge input/output schema properties
|
|
3
|
+
* from testCase values.
|
|
4
|
+
* @module @framers/agentos/emergent/ForgeSchemaInference
|
|
5
|
+
*
|
|
6
|
+
* Problem: LLMs routinely emit concrete testCases with real field values
|
|
7
|
+
* but forget to declare `inputSchema.properties` / `outputSchema.properties`.
|
|
8
|
+
* The shape validator then rejects every such forge even though the
|
|
9
|
+
* intent is clearly legitimate.
|
|
10
|
+
*
|
|
11
|
+
* Solution: when a schema lacks declared properties but the testCases
|
|
12
|
+
* carry field values, synthesize properties from the testCase data so
|
|
13
|
+
* the shape check passes. This is NOT a relaxation of schema discipline
|
|
14
|
+
* — the tool code still has to handle whatever inputs come in. It is a
|
|
15
|
+
* correction of a common LLM oversight (examples without formalization).
|
|
16
|
+
*
|
|
17
|
+
* Pure function, mutates the request in place. No dependencies.
|
|
18
|
+
*/
|
|
19
|
+
/** Request fragment carrying the three fields we may mutate. */
|
|
20
|
+
export interface ForgeSchemaInferenceRequest {
|
|
21
|
+
inputSchema?: unknown;
|
|
22
|
+
outputSchema?: unknown;
|
|
23
|
+
testCases?: unknown;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Populate missing inputSchema / outputSchema properties from testCase
|
|
27
|
+
* data. Mutates `req` in place. Fields are scanned as a union across
|
|
28
|
+
* every testCase so a single incomplete case does not narrow the
|
|
29
|
+
* inferred schema.
|
|
30
|
+
*
|
|
31
|
+
* A schema that already has declared properties is left alone. Only
|
|
32
|
+
* the missing-properties case is upgraded. `additionalProperties: false`
|
|
33
|
+
* is added to the synthesized schema so the strict-schema discipline is
|
|
34
|
+
* preserved for the generated shape.
|
|
35
|
+
*
|
|
36
|
+
* @param req Forge request fragment. Mutated in place.
|
|
37
|
+
*/
|
|
38
|
+
export declare function inferSchemaFromTestCases(req: ForgeSchemaInferenceRequest): void;
|
|
39
|
+
//# sourceMappingURL=ForgeSchemaInference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgeSchemaInference.d.ts","sourceRoot":"","sources":["../../src/emergent/ForgeSchemaInference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,gEAAgE;AAChE,MAAM,WAAW,2BAA2B;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,2BAA2B,GAAG,IAAI,CAiD/E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Synthesize missing forge input/output schema properties
|
|
3
|
+
* from testCase values.
|
|
4
|
+
* @module @framers/agentos/emergent/ForgeSchemaInference
|
|
5
|
+
*
|
|
6
|
+
* Problem: LLMs routinely emit concrete testCases with real field values
|
|
7
|
+
* but forget to declare `inputSchema.properties` / `outputSchema.properties`.
|
|
8
|
+
* The shape validator then rejects every such forge even though the
|
|
9
|
+
* intent is clearly legitimate.
|
|
10
|
+
*
|
|
11
|
+
* Solution: when a schema lacks declared properties but the testCases
|
|
12
|
+
* carry field values, synthesize properties from the testCase data so
|
|
13
|
+
* the shape check passes. This is NOT a relaxation of schema discipline
|
|
14
|
+
* — the tool code still has to handle whatever inputs come in. It is a
|
|
15
|
+
* correction of a common LLM oversight (examples without formalization).
|
|
16
|
+
*
|
|
17
|
+
* Pure function, mutates the request in place. No dependencies.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Derive a JSON-Schema primitive type from a concrete testCase value.
|
|
21
|
+
* Handles the types the sandbox forge returns: number, string, boolean,
|
|
22
|
+
* object, array. Falls back to `'string'` for anything else so the
|
|
23
|
+
* schema stays well-formed.
|
|
24
|
+
*/
|
|
25
|
+
function inferTypeFromValue(v) {
|
|
26
|
+
if (typeof v === 'number')
|
|
27
|
+
return 'number';
|
|
28
|
+
if (typeof v === 'boolean')
|
|
29
|
+
return 'boolean';
|
|
30
|
+
if (typeof v === 'string')
|
|
31
|
+
return 'string';
|
|
32
|
+
if (Array.isArray(v))
|
|
33
|
+
return 'array';
|
|
34
|
+
if (v !== null && typeof v === 'object')
|
|
35
|
+
return 'object';
|
|
36
|
+
return 'string';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Populate missing inputSchema / outputSchema properties from testCase
|
|
40
|
+
* data. Mutates `req` in place. Fields are scanned as a union across
|
|
41
|
+
* every testCase so a single incomplete case does not narrow the
|
|
42
|
+
* inferred schema.
|
|
43
|
+
*
|
|
44
|
+
* A schema that already has declared properties is left alone. Only
|
|
45
|
+
* the missing-properties case is upgraded. `additionalProperties: false`
|
|
46
|
+
* is added to the synthesized schema so the strict-schema discipline is
|
|
47
|
+
* preserved for the generated shape.
|
|
48
|
+
*
|
|
49
|
+
* @param req Forge request fragment. Mutated in place.
|
|
50
|
+
*/
|
|
51
|
+
export function inferSchemaFromTestCases(req) {
|
|
52
|
+
const tcArr = Array.isArray(req.testCases)
|
|
53
|
+
? req.testCases
|
|
54
|
+
: [];
|
|
55
|
+
if (tcArr.length === 0)
|
|
56
|
+
return;
|
|
57
|
+
const inferProperties = (key) => {
|
|
58
|
+
const props = {};
|
|
59
|
+
for (const tc of tcArr) {
|
|
60
|
+
const data = tc?.[key];
|
|
61
|
+
if (!data || typeof data !== 'object' || Array.isArray(data))
|
|
62
|
+
continue;
|
|
63
|
+
for (const [field, value] of Object.entries(data)) {
|
|
64
|
+
if (props[field])
|
|
65
|
+
continue;
|
|
66
|
+
props[field] = { type: inferTypeFromValue(value) };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return props;
|
|
70
|
+
};
|
|
71
|
+
const maybeUpgrade = (schemaKey, testCaseKey) => {
|
|
72
|
+
const schema = req[schemaKey];
|
|
73
|
+
const current = (schema && typeof schema === 'object' ? schema : {});
|
|
74
|
+
const hasProps = current.properties &&
|
|
75
|
+
typeof current.properties === 'object' &&
|
|
76
|
+
Object.keys(current.properties).length > 0;
|
|
77
|
+
if (hasProps)
|
|
78
|
+
return;
|
|
79
|
+
const inferred = inferProperties(testCaseKey);
|
|
80
|
+
if (Object.keys(inferred).length === 0)
|
|
81
|
+
return;
|
|
82
|
+
req[schemaKey] = {
|
|
83
|
+
type: 'object',
|
|
84
|
+
properties: inferred,
|
|
85
|
+
required: Object.keys(inferred),
|
|
86
|
+
additionalProperties: false,
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
maybeUpgrade('inputSchema', 'input');
|
|
90
|
+
maybeUpgrade('outputSchema', 'expectedOutput');
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=ForgeSchemaInference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgeSchemaInference.js","sourceRoot":"","sources":["../../src/emergent/ForgeSchemaInference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,CAAU;IACpC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACzD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAgC;IACvE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QACxC,CAAC,CAAE,GAAG,CAAC,SAAkE;QACzE,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,MAAM,eAAe,GAAG,CAAC,GAA+B,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAqC,EAAE,CAAC;QACnD,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,SAAS;YACvE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,EAAE,CAAC;gBAC7E,IAAI,KAAK,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAC3B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CACnB,SAAyC,EACzC,WAAuC,EACvC,EAAE;QACF,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAKlE,CAAC;QACF,MAAM,QAAQ,GACZ,OAAO,CAAC,UAAU;YAClB,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;YACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7C,IAAI,QAAQ;YAAE,OAAO;QAErB,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/C,GAAG,CAAC,SAAS,CAAC,GAAG;YACf,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,QAAQ;YACpB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/B,oBAAoB,EAAE,KAAK;SAC5B,CAAC;IACJ,CAAC,CAAC;IAEF,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Pre-judge shape validator for forge requests.
|
|
3
|
+
* @module @framers/agentos/emergent/ForgeShapeValidator
|
|
4
|
+
*
|
|
5
|
+
* Catches the failure modes that dominate cheap-tier forge rejections
|
|
6
|
+
* (empty schema properties, too-few testCases, empty-input testCases)
|
|
7
|
+
* BEFORE the judge LLM sees the request. Every shape-check rejection
|
|
8
|
+
* saves one judge invocation plus the sandbox round-trip that would
|
|
9
|
+
* have followed it.
|
|
10
|
+
*
|
|
11
|
+
* Pure function, no dependencies.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Minimal forge request shape the validator needs. Accepts `unknown`
|
|
15
|
+
* for the schema fields so callers can pass raw LLM output without
|
|
16
|
+
* pre-shaping.
|
|
17
|
+
*/
|
|
18
|
+
export interface ForgeShapeRequest {
|
|
19
|
+
inputSchema?: unknown;
|
|
20
|
+
outputSchema?: unknown;
|
|
21
|
+
testCases?: unknown;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validate a forge request's shape against the rules that dominate
|
|
25
|
+
* cheap-tier failures. Every violation is reported at once (no
|
|
26
|
+
* short-circuit) so the caller can build one comprehensive error
|
|
27
|
+
* message to show the LLM.
|
|
28
|
+
*
|
|
29
|
+
* Rules enforced:
|
|
30
|
+
* - `inputSchema.properties` must declare at least one field.
|
|
31
|
+
* - `outputSchema.properties` must declare at least one field.
|
|
32
|
+
* - `testCases` must have at least 2 entries.
|
|
33
|
+
* - Every testCase must have a non-empty `input` object.
|
|
34
|
+
*
|
|
35
|
+
* @param req Request fragment. Only the three fields are inspected;
|
|
36
|
+
* other fields on the forge request are ignored.
|
|
37
|
+
* @returns Array of human-readable error strings. Empty means the
|
|
38
|
+
* request's shape is well-formed enough to forward to the judge.
|
|
39
|
+
*/
|
|
40
|
+
export declare function validateForgeShape(req: ForgeShapeRequest): string[];
|
|
41
|
+
//# sourceMappingURL=ForgeShapeValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgeShapeValidator.d.ts","sourceRoot":"","sources":["../../src/emergent/ForgeShapeValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,EAAE,CA8BnE"}
|