@framers/agentos 0.1.162 → 0.1.163

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.
@@ -67,6 +67,17 @@ export interface ModelRouteParams {
67
67
  userApiKeys?: Record<string, string>;
68
68
  /** Additional custom parameters or context to aid routing decisions. */
69
69
  customContext?: Record<string, any>;
70
+ /**
71
+ * Content policy tier governing this request. Drives model selection:
72
+ * safe/standard use default censored models, mature/private-adult route
73
+ * to uncensored models via PolicyAwareRouter.
74
+ */
75
+ policyTier?: 'safe' | 'standard' | 'mature' | 'private-adult';
76
+ /**
77
+ * Finer-grained content intent hint. A mature session doing combat narration
78
+ * vs. romance has different model preferences.
79
+ */
80
+ contentIntent?: 'general' | 'romantic' | 'erotic' | 'violent' | 'horror';
70
81
  }
71
82
  /**
72
83
  * The result of a model routing decision.
@@ -1 +1 @@
1
- {"version":3,"file":"IModelRouter.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/routing/IModelRouter.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+GAA+G;IAC/G,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,oBAAoB,CAAC,EAAE,iBAAiB,CAAC;IACzC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IACnE;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,SAAS,EAAE,SAAS,CAAC;IACrB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,4GAA4G;IAC5G,iBAAiB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACvD,8GAA8G;IAC9G,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,eAAe,EAAE,GAAG,EAAE,mCAAmC;IACzD,YAAY,CAAC,EAAE,GAAG,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;;;;;;OAUG;IACH,WAAW,CACT,MAAM,EAAE,gBAAgB,EACxB,eAAe,CAAC,EAAE,SAAS,EAAE,GAC5B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;CACrC"}
1
+ {"version":3,"file":"IModelRouter.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/routing/IModelRouter.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+GAA+G;IAC/G,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,oBAAoB,CAAC,EAAE,iBAAiB,CAAC;IACzC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IACnE;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,eAAe,CAAC;IAE9D;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;CAC1E;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,SAAS,EAAE,SAAS,CAAC;IACrB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,4GAA4G;IAC5G,iBAAiB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACvD,8GAA8G;IAC9G,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,eAAe,EAAE,GAAG,EAAE,mCAAmC;IACzD,YAAY,CAAC,EAAE,GAAG,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;;;;;;OAUG;IACH,WAAW,CACT,MAAM,EAAE,gBAAgB,EACxB,eAAe,CAAC,EAAE,SAAS,EAAE,GAC5B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;CACrC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @fileoverview Policy-aware model router that selects uncensored LLMs for
3
+ * mature/private-adult content policy tiers.
4
+ *
5
+ * For safe/standard tiers (or when no policy tier is specified), the router
6
+ * delegates to an optional base router or returns null, letting the caller
7
+ * fall back to its own default model. For mature/private-adult tiers, it
8
+ * consults the {@link UncensoredModelCatalog} and returns an OpenRouter model
9
+ * wrapped in a minimal {@link ModelRouteResult}.
10
+ *
11
+ * @module core/llm/routing/PolicyAwareRouter
12
+ */
13
+ import type { IModelRouter, ModelRouteParams, ModelRouteResult } from './IModelRouter';
14
+ import type { ModelInfo } from '../providers/IProvider';
15
+ import type { UncensoredModelCatalog, PolicyTier } from './UncensoredModelCatalog';
16
+ /**
17
+ * Manual override map: policyTier -> fixed modelId.
18
+ * When provided, bypasses catalog lookup for the specified tier.
19
+ */
20
+ export type PolicyOverrides = Partial<Record<PolicyTier, string>>;
21
+ /**
22
+ * Policy-aware router that wraps an optional base router and injects
23
+ * uncensored model selection for mature/private-adult policy tiers.
24
+ */
25
+ export declare class PolicyAwareRouter implements IModelRouter {
26
+ readonly routerId = "policy_aware_router_v1";
27
+ private readonly catalog;
28
+ private readonly baseRouter;
29
+ private readonly overrides;
30
+ private readonly defaultPolicyTier;
31
+ /**
32
+ * @param catalog - Uncensored model catalog for mature/private-adult lookup.
33
+ * @param baseRouter - Optional delegate for safe/standard tiers.
34
+ * @param overrides - Per-tier model ID overrides that bypass catalog lookup.
35
+ * @param defaultPolicyTier - Fallback tier when params.policyTier is absent.
36
+ */
37
+ constructor(catalog: UncensoredModelCatalog, baseRouter?: IModelRouter | null, overrides?: PolicyOverrides, defaultPolicyTier?: PolicyTier);
38
+ /**
39
+ * No-op initialization. The PolicyAwareRouter is stateless beyond its
40
+ * constructor arguments; it does not require async setup.
41
+ */
42
+ initialize(_config: Record<string, any>, _providerManager: any, _promptEngine?: any): Promise<void>;
43
+ /**
44
+ * Select a model based on the request's policy tier.
45
+ *
46
+ * - safe / standard / absent (no default): delegate to baseRouter or return null.
47
+ * - mature / private-adult: check overrides, then catalog, return OpenRouter result.
48
+ */
49
+ selectModel(params: ModelRouteParams, availableModels?: ModelInfo[]): Promise<ModelRouteResult | null>;
50
+ /**
51
+ * Build a minimal {@link ModelRouteResult} with a stub provider.
52
+ * The provider stub satisfies the interface contract while signalling to
53
+ * upstream consumers that the actual provider instance must be resolved
54
+ * from the provider manager using the returned providerId.
55
+ */
56
+ private buildResult;
57
+ }
58
+ //# sourceMappingURL=PolicyAwareRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicyAwareRouter.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/routing/PolicyAwareRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EACV,sBAAsB,EACtB,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAElE;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,SAAgB,QAAQ,4BAA4B;IAEpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAE3D;;;;;OAKG;gBAED,OAAO,EAAE,sBAAsB,EAC/B,UAAU,CAAC,EAAE,YAAY,GAAG,IAAI,EAChC,SAAS,CAAC,EAAE,eAAe,EAC3B,iBAAiB,CAAC,EAAE,UAAU;IAQhC;;;OAGG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,gBAAgB,EAAE,GAAG,EACrB,aAAa,CAAC,EAAE,GAAG,GAClB,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;OAKG;IACG,WAAW,CACf,MAAM,EAAE,gBAAgB,EACxB,eAAe,CAAC,EAAE,SAAS,EAAE,GAC5B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IA+BnC;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAyCpB"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * @fileoverview Policy-aware model router that selects uncensored LLMs for
3
+ * mature/private-adult content policy tiers.
4
+ *
5
+ * For safe/standard tiers (or when no policy tier is specified), the router
6
+ * delegates to an optional base router or returns null, letting the caller
7
+ * fall back to its own default model. For mature/private-adult tiers, it
8
+ * consults the {@link UncensoredModelCatalog} and returns an OpenRouter model
9
+ * wrapped in a minimal {@link ModelRouteResult}.
10
+ *
11
+ * @module core/llm/routing/PolicyAwareRouter
12
+ */
13
+ /**
14
+ * Policy-aware router that wraps an optional base router and injects
15
+ * uncensored model selection for mature/private-adult policy tiers.
16
+ */
17
+ export class PolicyAwareRouter {
18
+ /**
19
+ * @param catalog - Uncensored model catalog for mature/private-adult lookup.
20
+ * @param baseRouter - Optional delegate for safe/standard tiers.
21
+ * @param overrides - Per-tier model ID overrides that bypass catalog lookup.
22
+ * @param defaultPolicyTier - Fallback tier when params.policyTier is absent.
23
+ */
24
+ constructor(catalog, baseRouter, overrides, defaultPolicyTier) {
25
+ this.routerId = 'policy_aware_router_v1';
26
+ this.catalog = catalog;
27
+ this.baseRouter = baseRouter ?? null;
28
+ this.overrides = overrides ?? {};
29
+ this.defaultPolicyTier = defaultPolicyTier;
30
+ }
31
+ /**
32
+ * No-op initialization. The PolicyAwareRouter is stateless beyond its
33
+ * constructor arguments; it does not require async setup.
34
+ */
35
+ async initialize(_config, _providerManager, _promptEngine) {
36
+ // Intentionally empty: catalog is injected, no async work needed.
37
+ }
38
+ /**
39
+ * Select a model based on the request's policy tier.
40
+ *
41
+ * - safe / standard / absent (no default): delegate to baseRouter or return null.
42
+ * - mature / private-adult: check overrides, then catalog, return OpenRouter result.
43
+ */
44
+ async selectModel(params, availableModels) {
45
+ const tier = params.policyTier ?? this.defaultPolicyTier;
46
+ // Safe / standard / absent tier: delegate or return null
47
+ if (!tier || tier === 'safe' || tier === 'standard') {
48
+ if (this.baseRouter) {
49
+ return this.baseRouter.selectModel(params, availableModels);
50
+ }
51
+ return null;
52
+ }
53
+ // Check per-tier override first
54
+ const overrideModelId = this.overrides[tier];
55
+ if (overrideModelId) {
56
+ return this.buildResult(overrideModelId, 'openrouter', `Override for ${tier} tier`);
57
+ }
58
+ // Consult catalog
59
+ const entry = this.catalog.getPreferredTextModel(tier, params.contentIntent);
60
+ if (entry) {
61
+ return this.buildResult(entry.modelId, entry.providerId, `Catalog selection for ${tier} tier (${entry.displayName})`);
62
+ }
63
+ return null;
64
+ }
65
+ /**
66
+ * Build a minimal {@link ModelRouteResult} with a stub provider.
67
+ * The provider stub satisfies the interface contract while signalling to
68
+ * upstream consumers that the actual provider instance must be resolved
69
+ * from the provider manager using the returned providerId.
70
+ */
71
+ buildResult(modelId, providerId, reasoning) {
72
+ return {
73
+ provider: {
74
+ providerId,
75
+ isInitialized: false,
76
+ async initialize() { },
77
+ async generateCompletion() {
78
+ throw new Error('Stub provider — resolve via AIModelProviderManager');
79
+ },
80
+ async *generateCompletionStream() {
81
+ throw new Error('Stub provider — resolve via AIModelProviderManager');
82
+ },
83
+ async generateEmbeddings() {
84
+ throw new Error('Stub provider — resolve via AIModelProviderManager');
85
+ },
86
+ async listAvailableModels() {
87
+ return [];
88
+ },
89
+ async getModelInfo() {
90
+ return undefined;
91
+ },
92
+ async checkHealth() {
93
+ return { isHealthy: false };
94
+ },
95
+ async shutdown() { },
96
+ },
97
+ modelId,
98
+ modelInfo: {
99
+ modelId,
100
+ providerId,
101
+ capabilities: ['chat'],
102
+ },
103
+ reasoning,
104
+ confidence: 0.85,
105
+ metadata: { source: this.routerId, policyRouted: true },
106
+ };
107
+ }
108
+ }
109
+ //# sourceMappingURL=PolicyAwareRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicyAwareRouter.js","sourceRoot":"","sources":["../../../../src/core/llm/routing/PolicyAwareRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @fileoverview Uncensored model catalog for policy-aware routing.
3
+ *
4
+ * Maps content policy tiers to curated lists of uncensored text and image
5
+ * models available through OpenRouter (text) and Replicate (image). The
6
+ * catalog is the single source of truth consumed by {@link PolicyAwareRouter}
7
+ * and {@link PolicyAwareImageRouter} to select models that honour the
8
+ * agent's content policy without imposing upstream safety filters.
9
+ *
10
+ * @module core/llm/routing/UncensoredModelCatalog
11
+ */
12
+ /** Content policy tier governing model selection. */
13
+ export type PolicyTier = 'safe' | 'standard' | 'mature' | 'private-adult';
14
+ /** Finer-grained content intent hint within a policy tier. */
15
+ export type ContentIntent = 'general' | 'romantic' | 'erotic' | 'violent' | 'horror';
16
+ /** A single model entry in the uncensored catalog. */
17
+ export interface CatalogEntry {
18
+ /** OpenRouter / Replicate model identifier. */
19
+ modelId: string;
20
+ /** Human-readable display name. */
21
+ displayName: string;
22
+ /** Provider that hosts this model (e.g. 'openrouter', 'replicate'). */
23
+ providerId: string;
24
+ /** Modality: 'text' for LLMs, 'image' for diffusion/GAN. */
25
+ modality: 'text' | 'image';
26
+ /** Quality tier used for preference ordering. */
27
+ quality: 'high' | 'medium' | 'low';
28
+ /** Content permission tags describing what the model allows. */
29
+ contentPermissions: ContentIntent[];
30
+ /** Provider-specific capability tags (e.g. 'face-consistency', 'video'). */
31
+ capabilities: string[];
32
+ }
33
+ /** Read-only catalog of uncensored models. */
34
+ export interface UncensoredModelCatalog {
35
+ /**
36
+ * Return all text model entries, optionally filtered.
37
+ * @param filter - Optional quality or content permission filter.
38
+ */
39
+ getTextModels(filter?: {
40
+ quality?: CatalogEntry['quality'];
41
+ contentPermissions?: ContentIntent[];
42
+ }): CatalogEntry[];
43
+ /**
44
+ * Return all image model entries, optionally filtered.
45
+ * @param filter - Optional capability filter.
46
+ */
47
+ getImageModels(filter?: {
48
+ capabilities?: string[];
49
+ }): CatalogEntry[];
50
+ /**
51
+ * Return the preferred text model for a given policy tier.
52
+ * Returns null for safe/standard tiers (use default censored model).
53
+ * @param tier - Content policy tier.
54
+ * @param contentIntent - Optional content intent for finer selection.
55
+ */
56
+ getPreferredTextModel(tier: PolicyTier, contentIntent?: ContentIntent): CatalogEntry | null;
57
+ /**
58
+ * Return the preferred image model for a given policy tier.
59
+ * Returns null for safe/standard tiers.
60
+ * @param tier - Content policy tier.
61
+ * @param capabilities - Optional required capabilities.
62
+ */
63
+ getPreferredImageModel(tier: PolicyTier, capabilities?: string[]): CatalogEntry | null;
64
+ }
65
+ /**
66
+ * Create a default {@link UncensoredModelCatalog} populated with curated
67
+ * OpenRouter text models and Replicate image models.
68
+ */
69
+ export declare function createUncensoredModelCatalog(): UncensoredModelCatalog;
70
+ //# sourceMappingURL=UncensoredModelCatalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UncensoredModelCatalog.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/routing/UncensoredModelCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,qDAAqD;AACrD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,eAAe,CAAC;AAE1E,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAMrF,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,iDAAiD;IACjD,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,gEAAgE;IAChE,kBAAkB,EAAE,aAAa,EAAE,CAAC;IACpC,4EAA4E;IAC5E,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAMD,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,aAAa,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAClC,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;KACtC,GAAG,YAAY,EAAE,CAAC;IAEnB;;;OAGG;IACH,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,YAAY,EAAE,CAAC;IAErE;;;;;OAKG;IACH,qBAAqB,CACnB,IAAI,EAAE,UAAU,EAChB,aAAa,CAAC,EAAE,aAAa,GAC5B,YAAY,GAAG,IAAI,CAAC;IAEvB;;;;;OAKG;IACH,sBAAsB,CACpB,IAAI,EAAE,UAAU,EAChB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,YAAY,GAAG,IAAI,CAAC;CACxB;AAqHD;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CAgFrE"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * @fileoverview Uncensored model catalog for policy-aware routing.
3
+ *
4
+ * Maps content policy tiers to curated lists of uncensored text and image
5
+ * models available through OpenRouter (text) and Replicate (image). The
6
+ * catalog is the single source of truth consumed by {@link PolicyAwareRouter}
7
+ * and {@link PolicyAwareImageRouter} to select models that honour the
8
+ * agent's content policy without imposing upstream safety filters.
9
+ *
10
+ * @module core/llm/routing/UncensoredModelCatalog
11
+ */
12
+ // ---------------------------------------------------------------------------
13
+ // Built-in catalog data
14
+ // ---------------------------------------------------------------------------
15
+ /** Curated text models available via OpenRouter. */
16
+ const TEXT_MODELS = [
17
+ {
18
+ modelId: 'nousresearch/hermes-3-llama-3.1-405b',
19
+ displayName: 'Hermes 3 405B',
20
+ providerId: 'openrouter',
21
+ modality: 'text',
22
+ quality: 'high',
23
+ contentPermissions: ['general', 'romantic', 'erotic', 'violent', 'horror'],
24
+ capabilities: ['chat', 'tool_use', 'json_mode'],
25
+ },
26
+ {
27
+ modelId: 'cognitivecomputations/dolphin-mixtral-8x22b',
28
+ displayName: 'Dolphin Mixtral 8x22B',
29
+ providerId: 'openrouter',
30
+ modality: 'text',
31
+ quality: 'high',
32
+ contentPermissions: ['general', 'romantic', 'erotic', 'violent', 'horror'],
33
+ capabilities: ['chat', 'tool_use'],
34
+ },
35
+ {
36
+ modelId: 'nousresearch/hermes-3-llama-3.1-70b',
37
+ displayName: 'Hermes 3 70B',
38
+ providerId: 'openrouter',
39
+ modality: 'text',
40
+ quality: 'medium',
41
+ contentPermissions: ['general', 'romantic', 'erotic', 'violent', 'horror'],
42
+ capabilities: ['chat', 'tool_use', 'json_mode'],
43
+ },
44
+ {
45
+ modelId: 'undi95/toppy-m-7b',
46
+ displayName: 'Toppy M 7B',
47
+ providerId: 'openrouter',
48
+ modality: 'text',
49
+ quality: 'low',
50
+ contentPermissions: ['general', 'romantic', 'erotic'],
51
+ capabilities: ['chat'],
52
+ },
53
+ {
54
+ modelId: 'gryphe/mythomax-l2-13b',
55
+ displayName: 'MythoMax L2 13B',
56
+ providerId: 'openrouter',
57
+ modality: 'text',
58
+ quality: 'low',
59
+ contentPermissions: ['general', 'romantic', 'violent', 'horror'],
60
+ capabilities: ['chat'],
61
+ },
62
+ ];
63
+ /** Curated image models available via Replicate. */
64
+ const IMAGE_MODELS = [
65
+ {
66
+ modelId: 'lucataco/realvisxl-v4.0',
67
+ displayName: 'RealVisXL v4.0',
68
+ providerId: 'replicate',
69
+ modality: 'image',
70
+ quality: 'high',
71
+ contentPermissions: ['general', 'romantic', 'erotic'],
72
+ capabilities: ['txt2img', 'img2img', 'photorealistic'],
73
+ },
74
+ {
75
+ modelId: 'stability-ai/sdxl',
76
+ displayName: 'SDXL',
77
+ providerId: 'replicate',
78
+ modality: 'image',
79
+ quality: 'high',
80
+ contentPermissions: ['general', 'romantic', 'erotic', 'violent', 'horror'],
81
+ capabilities: ['txt2img', 'img2img'],
82
+ },
83
+ {
84
+ modelId: 'zsxkib/instant-id',
85
+ displayName: 'Instant ID',
86
+ providerId: 'replicate',
87
+ modality: 'image',
88
+ quality: 'medium',
89
+ contentPermissions: ['general', 'romantic'],
90
+ capabilities: ['txt2img', 'face-consistency'],
91
+ },
92
+ {
93
+ modelId: 'lucataco/ip-adapter-faceid-sdxl',
94
+ displayName: 'IP-Adapter FaceID SDXL',
95
+ providerId: 'replicate',
96
+ modality: 'image',
97
+ quality: 'medium',
98
+ contentPermissions: ['general', 'romantic', 'erotic'],
99
+ capabilities: ['txt2img', 'img2img', 'face-consistency'],
100
+ },
101
+ {
102
+ modelId: 'lucataco/animate-diff',
103
+ displayName: 'AnimateDiff',
104
+ providerId: 'replicate',
105
+ modality: 'image',
106
+ quality: 'medium',
107
+ contentPermissions: ['general', 'romantic', 'violent'],
108
+ capabilities: ['txt2img', 'video'],
109
+ },
110
+ {
111
+ modelId: 'stability-ai/stable-video-diffusion',
112
+ displayName: 'Stable Video Diffusion',
113
+ providerId: 'replicate',
114
+ modality: 'image',
115
+ quality: 'high',
116
+ contentPermissions: ['general', 'romantic'],
117
+ capabilities: ['img2video', 'video'],
118
+ },
119
+ ];
120
+ // ---------------------------------------------------------------------------
121
+ // Factory
122
+ // ---------------------------------------------------------------------------
123
+ /**
124
+ * Create a default {@link UncensoredModelCatalog} populated with curated
125
+ * OpenRouter text models and Replicate image models.
126
+ */
127
+ export function createUncensoredModelCatalog() {
128
+ return {
129
+ getTextModels(filter) {
130
+ let results = [...TEXT_MODELS];
131
+ if (filter?.quality) {
132
+ results = results.filter((e) => e.quality === filter.quality);
133
+ }
134
+ if (filter?.contentPermissions?.length) {
135
+ results = results.filter((e) => filter.contentPermissions.every((p) => e.contentPermissions.includes(p)));
136
+ }
137
+ return results;
138
+ },
139
+ getImageModels(filter) {
140
+ let results = [...IMAGE_MODELS];
141
+ if (filter?.capabilities?.length) {
142
+ results = results.filter((e) => filter.capabilities.every((c) => e.capabilities.includes(c)));
143
+ }
144
+ return results;
145
+ },
146
+ getPreferredTextModel(tier, contentIntent) {
147
+ if (tier === 'safe' || tier === 'standard') {
148
+ return null;
149
+ }
150
+ let candidates = [...TEXT_MODELS];
151
+ // Filter by content intent when provided
152
+ if (contentIntent) {
153
+ candidates = candidates.filter((e) => e.contentPermissions.includes(contentIntent));
154
+ }
155
+ // Sort: high > medium > low
156
+ const qualityOrder = {
157
+ high: 0,
158
+ medium: 1,
159
+ low: 2,
160
+ };
161
+ candidates.sort((a, b) => qualityOrder[a.quality] - qualityOrder[b.quality]);
162
+ return candidates[0] ?? null;
163
+ },
164
+ getPreferredImageModel(tier, capabilities) {
165
+ if (tier === 'safe' || tier === 'standard') {
166
+ return null;
167
+ }
168
+ let candidates = [...IMAGE_MODELS];
169
+ if (capabilities?.length) {
170
+ candidates = candidates.filter((e) => capabilities.every((c) => e.capabilities.includes(c)));
171
+ }
172
+ // Sort: high > medium > low
173
+ const qualityOrder = {
174
+ high: 0,
175
+ medium: 1,
176
+ low: 2,
177
+ };
178
+ candidates.sort((a, b) => qualityOrder[a.quality] - qualityOrder[b.quality]);
179
+ return candidates[0] ?? null;
180
+ },
181
+ };
182
+ }
183
+ //# sourceMappingURL=UncensoredModelCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UncensoredModelCatalog.js","sourceRoot":"","sources":["../../../../src/core/llm/routing/UncensoredModelCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @fileoverview Policy-aware image provider router for selecting uncensored
3
+ * image generation backends based on content policy tier.
4
+ *
5
+ * Safe/standard tiers return null or the default provider chain, signalling
6
+ * the caller to use its normal image generation pipeline. Mature/private-adult
7
+ * tiers route through Replicate and other uncensored providers from the
8
+ * {@link UncensoredModelCatalog}.
9
+ *
10
+ * @module media/images/PolicyAwareImageRouter
11
+ */
12
+ import type { UncensoredModelCatalog, PolicyTier } from '../../core/llm/routing/UncensoredModelCatalog';
13
+ /** Preference result returned by the image router. */
14
+ export interface ImageProviderPreference {
15
+ /** Recommended provider ID (e.g. 'replicate'). */
16
+ providerId: string;
17
+ /** Recommended model ID on that provider. */
18
+ modelId: string;
19
+ /** Human-readable display name of the model. */
20
+ displayName: string;
21
+ }
22
+ /**
23
+ * Policy-aware image provider router. Selects the preferred image generation
24
+ * provider and model based on the session's content policy tier.
25
+ */
26
+ export declare class PolicyAwareImageRouter {
27
+ private readonly catalog;
28
+ /**
29
+ * @param catalog - Uncensored model catalog for mature/private-adult lookup.
30
+ */
31
+ constructor(catalog: UncensoredModelCatalog);
32
+ /**
33
+ * Get the preferred image provider and model for a given policy tier.
34
+ *
35
+ * @param policyTier - Content policy tier.
36
+ * @param capabilities - Optional required capabilities (e.g. ['face-consistency']).
37
+ * @returns Provider preference, or null for safe/standard tiers.
38
+ */
39
+ getPreferredProvider(policyTier: PolicyTier, capabilities?: string[]): ImageProviderPreference | null;
40
+ /**
41
+ * Get the ordered provider chain for a given policy tier.
42
+ *
43
+ * Safe/standard returns the default chain (OpenAI-first).
44
+ * Mature/private-adult returns the uncensored chain (Replicate-first).
45
+ *
46
+ * @param policyTier - Content policy tier.
47
+ * @returns Ordered array of provider IDs to try in sequence.
48
+ */
49
+ getProviderChain(policyTier: PolicyTier): string[];
50
+ }
51
+ //# sourceMappingURL=PolicyAwareImageRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicyAwareImageRouter.d.ts","sourceRoot":"","sources":["../../../src/media/images/PolicyAwareImageRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,UAAU,EACX,MAAM,+CAA+C,CAAC;AAMvD,sDAAsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;CACrB;AAyBD;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD;;OAEG;gBACS,OAAO,EAAE,sBAAsB;IAI3C;;;;;;OAMG;IACH,oBAAoB,CAClB,UAAU,EAAE,UAAU,EACtB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,uBAAuB,GAAG,IAAI;IAiBjC;;;;;;;;OAQG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE;CAMnD"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @fileoverview Policy-aware image provider router for selecting uncensored
3
+ * image generation backends based on content policy tier.
4
+ *
5
+ * Safe/standard tiers return null or the default provider chain, signalling
6
+ * the caller to use its normal image generation pipeline. Mature/private-adult
7
+ * tiers route through Replicate and other uncensored providers from the
8
+ * {@link UncensoredModelCatalog}.
9
+ *
10
+ * @module media/images/PolicyAwareImageRouter
11
+ */
12
+ // ---------------------------------------------------------------------------
13
+ // Default provider chains
14
+ // ---------------------------------------------------------------------------
15
+ /** Default provider ordering for safe/standard content. */
16
+ const DEFAULT_PROVIDER_CHAIN = [
17
+ 'openai',
18
+ 'stability',
19
+ 'fal',
20
+ 'replicate',
21
+ ];
22
+ /** Provider ordering for mature/private-adult content (uncensored first). */
23
+ const UNCENSORED_PROVIDER_CHAIN = [
24
+ 'replicate',
25
+ 'fal',
26
+ 'stable-diffusion-local',
27
+ ];
28
+ // ---------------------------------------------------------------------------
29
+ // Router
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Policy-aware image provider router. Selects the preferred image generation
33
+ * provider and model based on the session's content policy tier.
34
+ */
35
+ export class PolicyAwareImageRouter {
36
+ /**
37
+ * @param catalog - Uncensored model catalog for mature/private-adult lookup.
38
+ */
39
+ constructor(catalog) {
40
+ this.catalog = catalog;
41
+ }
42
+ /**
43
+ * Get the preferred image provider and model for a given policy tier.
44
+ *
45
+ * @param policyTier - Content policy tier.
46
+ * @param capabilities - Optional required capabilities (e.g. ['face-consistency']).
47
+ * @returns Provider preference, or null for safe/standard tiers.
48
+ */
49
+ getPreferredProvider(policyTier, capabilities) {
50
+ if (policyTier === 'safe' || policyTier === 'standard') {
51
+ return null;
52
+ }
53
+ const entry = this.catalog.getPreferredImageModel(policyTier, capabilities);
54
+ if (!entry) {
55
+ return null;
56
+ }
57
+ return {
58
+ providerId: entry.providerId,
59
+ modelId: entry.modelId,
60
+ displayName: entry.displayName,
61
+ };
62
+ }
63
+ /**
64
+ * Get the ordered provider chain for a given policy tier.
65
+ *
66
+ * Safe/standard returns the default chain (OpenAI-first).
67
+ * Mature/private-adult returns the uncensored chain (Replicate-first).
68
+ *
69
+ * @param policyTier - Content policy tier.
70
+ * @returns Ordered array of provider IDs to try in sequence.
71
+ */
72
+ getProviderChain(policyTier) {
73
+ if (policyTier === 'safe' || policyTier === 'standard') {
74
+ return [...DEFAULT_PROVIDER_CHAIN];
75
+ }
76
+ return [...UNCENSORED_PROVIDER_CHAIN];
77
+ }
78
+ }
79
+ //# sourceMappingURL=PolicyAwareImageRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicyAwareImageRouter.js","sourceRoot":"","sources":["../../../src/media/images/PolicyAwareImageRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,2DAA2D;AAC3D,MAAM,sBAAsB,GAAa;IACvC,QAAQ;IACR,WAAW;IACX,KAAK;IACL,WAAW;CACZ,CAAC;AAEF,6EAA6E;AAC7E,MAAM,yBAAyB,GAAa;IAC1C,WAAW;IACX,KAAK;IACL,wBAAwB;CACzB,CAAC;AAEF,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAGjC;;OAEG;IACH,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,oBAAoB,CAClB,UAAsB,EACtB,YAAuB;QAEvB,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,gBAAgB,CAAC,UAAsB;QACrC,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,sBAAsB,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,CAAC,GAAG,yBAAyB,CAAC,CAAC;IACxC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framers/agentos",
3
- "version": "0.1.162",
3
+ "version": "0.1.163",
4
4
  "description": "Modular AgentOS orchestration library",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",