@framers/agentos 0.9.33 → 0.9.35
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 +28 -5
- package/dist/api/agent.d.ts +2 -0
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js +12 -2
- package/dist/api/agent.js.map +1 -1
- package/dist/api/segment.d.ts +14 -0
- package/dist/api/segment.d.ts.map +1 -0
- package/dist/api/segment.js +42 -0
- package/dist/api/segment.js.map +1 -0
- package/dist/api/souledAgent.d.ts +18 -0
- package/dist/api/souledAgent.d.ts.map +1 -0
- package/dist/api/souledAgent.js +86 -0
- package/dist/api/souledAgent.js.map +1 -0
- package/dist/cognition/memory/io/attachMemoryWiki.d.ts +70 -0
- package/dist/cognition/memory/io/attachMemoryWiki.d.ts.map +1 -0
- package/dist/cognition/memory/io/attachMemoryWiki.js +65 -0
- package/dist/cognition/memory/io/attachMemoryWiki.js.map +1 -0
- package/dist/cognition/memory/io/facade/Memory.d.ts +31 -0
- package/dist/cognition/memory/io/facade/Memory.d.ts.map +1 -1
- package/dist/cognition/memory/io/facade/Memory.js +62 -1
- package/dist/cognition/memory/io/facade/Memory.js.map +1 -1
- package/dist/cognition/memory/io/tools/ReadMemoryPageTool.d.ts +39 -0
- package/dist/cognition/memory/io/tools/ReadMemoryPageTool.d.ts.map +1 -0
- package/dist/cognition/memory/io/tools/ReadMemoryPageTool.js +39 -0
- package/dist/cognition/memory/io/tools/ReadMemoryPageTool.js.map +1 -0
- package/dist/cognition/substrate/memory/wiki/WikiCompiler.d.ts +35 -0
- package/dist/cognition/substrate/memory/wiki/WikiCompiler.d.ts.map +1 -0
- package/dist/cognition/substrate/memory/wiki/WikiCompiler.js +51 -0
- package/dist/cognition/substrate/memory/wiki/WikiCompiler.js.map +1 -0
- package/dist/cognition/substrate/memory/wiki/WikiMemoryStore.d.ts +47 -0
- package/dist/cognition/substrate/memory/wiki/WikiMemoryStore.d.ts.map +1 -0
- package/dist/cognition/substrate/memory/wiki/WikiMemoryStore.js +169 -0
- package/dist/cognition/substrate/memory/wiki/WikiMemoryStore.js.map +1 -0
- package/dist/cognition/substrate/memory/wiki/WikiPageCodec.d.ts +10 -0
- package/dist/cognition/substrate/memory/wiki/WikiPageCodec.d.ts.map +1 -0
- package/dist/cognition/substrate/memory/wiki/WikiPageCodec.js +75 -0
- package/dist/cognition/substrate/memory/wiki/WikiPageCodec.js.map +1 -0
- package/dist/cognition/substrate/memory/wiki/index.d.ts +7 -0
- package/dist/cognition/substrate/memory/wiki/index.d.ts.map +1 -0
- package/dist/cognition/substrate/memory/wiki/index.js +7 -0
- package/dist/cognition/substrate/memory/wiki/index.js.map +1 -0
- package/dist/cognition/substrate/memory/wiki/migrateMemoryMd.d.ts +16 -0
- package/dist/cognition/substrate/memory/wiki/migrateMemoryMd.d.ts.map +1 -0
- package/dist/cognition/substrate/memory/wiki/migrateMemoryMd.js +42 -0
- package/dist/cognition/substrate/memory/wiki/migrateMemoryMd.js.map +1 -0
- package/dist/cognition/substrate/memory/wiki/types.d.ts +47 -0
- package/dist/cognition/substrate/memory/wiki/types.d.ts.map +1 -0
- package/dist/cognition/substrate/memory/wiki/types.js +6 -0
- package/dist/cognition/substrate/memory/wiki/types.js.map +1 -0
- package/dist/cognition/substrate/personas/SoulLoader.d.ts +6 -2
- package/dist/cognition/substrate/personas/SoulLoader.d.ts.map +1 -1
- package/dist/cognition/substrate/personas/SoulLoader.js +11 -0
- package/dist/cognition/substrate/personas/SoulLoader.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/io/segmentation/SegmentationProviderRegistry.d.ts +12 -0
- package/dist/io/segmentation/SegmentationProviderRegistry.d.ts.map +1 -0
- package/dist/io/segmentation/SegmentationProviderRegistry.js +39 -0
- package/dist/io/segmentation/SegmentationProviderRegistry.js.map +1 -0
- package/dist/io/segmentation/consumers/cropRegion.d.ts +16 -0
- package/dist/io/segmentation/consumers/cropRegion.d.ts.map +1 -0
- package/dist/io/segmentation/consumers/cropRegion.js +41 -0
- package/dist/io/segmentation/consumers/cropRegion.js.map +1 -0
- package/dist/io/segmentation/consumers/maskToEditMask.d.ts +19 -0
- package/dist/io/segmentation/consumers/maskToEditMask.d.ts.map +1 -0
- package/dist/io/segmentation/consumers/maskToEditMask.js +32 -0
- package/dist/io/segmentation/consumers/maskToEditMask.js.map +1 -0
- package/dist/io/segmentation/errors.d.ts +32 -0
- package/dist/io/segmentation/errors.d.ts.map +1 -0
- package/dist/io/segmentation/errors.js +29 -0
- package/dist/io/segmentation/errors.js.map +1 -0
- package/dist/io/segmentation/index.d.ts +13 -0
- package/dist/io/segmentation/index.d.ts.map +1 -0
- package/dist/io/segmentation/index.js +13 -0
- package/dist/io/segmentation/index.js.map +1 -0
- package/dist/io/segmentation/maskGeometry.d.ts +13 -0
- package/dist/io/segmentation/maskGeometry.d.ts.map +1 -0
- package/dist/io/segmentation/maskGeometry.js +37 -0
- package/dist/io/segmentation/maskGeometry.js.map +1 -0
- package/dist/io/segmentation/providers/ReplicateSegmentationProvider.d.ts +29 -0
- package/dist/io/segmentation/providers/ReplicateSegmentationProvider.d.ts.map +1 -0
- package/dist/io/segmentation/providers/ReplicateSegmentationProvider.js +233 -0
- package/dist/io/segmentation/providers/ReplicateSegmentationProvider.js.map +1 -0
- package/dist/io/segmentation/resolveMode.d.ts +14 -0
- package/dist/io/segmentation/resolveMode.d.ts.map +1 -0
- package/dist/io/segmentation/resolveMode.js +28 -0
- package/dist/io/segmentation/resolveMode.js.map +1 -0
- package/dist/io/segmentation/types.d.ts +134 -0
- package/dist/io/segmentation/types.d.ts.map +1 -0
- package/dist/io/segmentation/types.js +14 -0
- package/dist/io/segmentation/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module io/segmentation/providers/ReplicateSegmentationProvider
|
|
3
|
+
*
|
|
4
|
+
* Hosted segmentation via Replicate. Geometric prompts (points/box/automatic)
|
|
5
|
+
* route to a SAM2 model; text prompts route to a GroundedSAM model. Contains
|
|
6
|
+
* its own minimal predict/poll cycle (no dependency on the image provider).
|
|
7
|
+
*/
|
|
8
|
+
import { ApiKeyPool } from '../../../core/providers/ApiKeyPool.js';
|
|
9
|
+
import { getImageProviderOptions } from '../../media/images/IImageProvider.js';
|
|
10
|
+
import { SegmentationProviderError, SegmentationModeNotSupportedError } from '../errors.js';
|
|
11
|
+
import { computeMaskBbox } from '../maskGeometry.js';
|
|
12
|
+
const REPLICATE_BASE = 'https://api.replicate.com/v1';
|
|
13
|
+
/** Default SAM2 model for geometric prompts. Verify/adjust in the smoke step. */
|
|
14
|
+
const DEFAULT_SAM_MODEL = 'meta/sam-2';
|
|
15
|
+
/** Default GroundedSAM model for text prompts. Verify/adjust in the smoke step. */
|
|
16
|
+
const DEFAULT_GROUNDED_SAM_MODEL = 'schananas/grounded_sam';
|
|
17
|
+
function sleep(ms) {
|
|
18
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
19
|
+
}
|
|
20
|
+
export class ReplicateSegmentationProvider {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.providerId = 'replicate';
|
|
23
|
+
this.isInitialized = false;
|
|
24
|
+
this.versionCache = new Map();
|
|
25
|
+
}
|
|
26
|
+
async initialize(config) {
|
|
27
|
+
const apiKey = typeof config.apiKey === 'string' ? config.apiKey.trim() : '';
|
|
28
|
+
if (!apiKey) {
|
|
29
|
+
throw new SegmentationProviderError('Replicate segmentation provider requires apiKey.', 'provider_failed');
|
|
30
|
+
}
|
|
31
|
+
this.keyPool = new ApiKeyPool(apiKey);
|
|
32
|
+
this.defaultModelId =
|
|
33
|
+
typeof config.defaultModelId === 'string' && config.defaultModelId.trim()
|
|
34
|
+
? config.defaultModelId.trim()
|
|
35
|
+
: DEFAULT_SAM_MODEL;
|
|
36
|
+
this.isInitialized = true;
|
|
37
|
+
}
|
|
38
|
+
supportedModes() {
|
|
39
|
+
// Hosted Replicate v1: GroundedSAM (text) + SAM2 automatic ("segment
|
|
40
|
+
// everything"). Coordinate prompts (points/box) have no clean hosted
|
|
41
|
+
// single-image model and await a coordinate-capable provider.
|
|
42
|
+
return ['text', 'automatic'];
|
|
43
|
+
}
|
|
44
|
+
async segment(request) {
|
|
45
|
+
if (!this.isInitialized) {
|
|
46
|
+
throw new SegmentationProviderError('Replicate segmentation provider is not initialized.', 'provider_failed');
|
|
47
|
+
}
|
|
48
|
+
if (!this.supportedModes().includes(request.mode)) {
|
|
49
|
+
throw new SegmentationModeNotSupportedError(this.providerId, request.mode);
|
|
50
|
+
}
|
|
51
|
+
const startedAt = Date.now();
|
|
52
|
+
const providerOptions = getImageProviderOptions(this.providerId, request.providerOptions);
|
|
53
|
+
const isText = request.mode === 'text';
|
|
54
|
+
const modelId = request.modelId
|
|
55
|
+
|| (isText
|
|
56
|
+
? (providerOptions?.groundedSamModelId ?? DEFAULT_GROUNDED_SAM_MODEL)
|
|
57
|
+
: (providerOptions?.samModelId ?? this.defaultModelId ?? DEFAULT_SAM_MODEL));
|
|
58
|
+
const input = this.buildInput(request, providerOptions);
|
|
59
|
+
let prediction;
|
|
60
|
+
try {
|
|
61
|
+
prediction = await this.runPrediction(modelId, input, providerOptions);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
if (err instanceof SegmentationProviderError)
|
|
65
|
+
throw err;
|
|
66
|
+
throw new SegmentationProviderError(`Replicate segmentation request failed: ${err.message}`, 'provider_failed', err);
|
|
67
|
+
}
|
|
68
|
+
if (prediction.status === 'failed') {
|
|
69
|
+
throw new SegmentationProviderError(`Replicate segmentation failed: ${prediction.error ?? 'unknown error'}`, 'provider_failed');
|
|
70
|
+
}
|
|
71
|
+
if (prediction.status === 'canceled') {
|
|
72
|
+
throw new SegmentationProviderError('Replicate segmentation was canceled.', 'provider_failed');
|
|
73
|
+
}
|
|
74
|
+
const { width, height } = await this.imageDimensions(request.image);
|
|
75
|
+
let masks = await this.decodeMasks(prediction.output);
|
|
76
|
+
if (typeof request.minScore === 'number')
|
|
77
|
+
masks = masks.filter((m) => m.score >= request.minScore);
|
|
78
|
+
if (typeof request.maxMasks === 'number')
|
|
79
|
+
masks = masks.slice(0, request.maxMasks);
|
|
80
|
+
masks = masks.map((m, i) => ({
|
|
81
|
+
...m,
|
|
82
|
+
index: i,
|
|
83
|
+
// GroundedSAM output carries no per-mask label; fall back to the phrase.
|
|
84
|
+
label: m.label ?? (request.mode === 'text' ? request.prompt : undefined),
|
|
85
|
+
}));
|
|
86
|
+
return {
|
|
87
|
+
masks,
|
|
88
|
+
width,
|
|
89
|
+
height,
|
|
90
|
+
providerId: this.providerId,
|
|
91
|
+
modelId,
|
|
92
|
+
promptMode: request.mode,
|
|
93
|
+
usage: { totalMasks: masks.length },
|
|
94
|
+
durationMs: Date.now() - startedAt,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Build the Replicate `input` object for the request's mode. Field names
|
|
99
|
+
* target the v1 output contract; confirm per chosen model in the smoke step.
|
|
100
|
+
*/
|
|
101
|
+
buildInput(request, providerOptions) {
|
|
102
|
+
const imageDataUrl = `data:image/png;base64,${request.image.toString('base64')}`;
|
|
103
|
+
const input = { image: imageDataUrl, ...(providerOptions?.input ?? {}) };
|
|
104
|
+
if (request.mode === 'text') {
|
|
105
|
+
// GroundedSAM uses `mask_prompt` for the open-vocabulary phrase.
|
|
106
|
+
input.mask_prompt = request.prompt;
|
|
107
|
+
}
|
|
108
|
+
// `automatic` mode: the SAM2 model segments everything from `image` alone.
|
|
109
|
+
// Tuning params (points_per_side, pred_iou_thresh, stability_score_thresh,
|
|
110
|
+
// use_m2m) flow through providerOptions.replicate.input.
|
|
111
|
+
return input;
|
|
112
|
+
}
|
|
113
|
+
headers() {
|
|
114
|
+
return { Authorization: `Token ${this.keyPool.next()}`, 'Content-Type': 'application/json' };
|
|
115
|
+
}
|
|
116
|
+
async runPrediction(modelId, input, providerOptions) {
|
|
117
|
+
const pollIntervalMs = providerOptions?.pollIntervalMs ?? 1000;
|
|
118
|
+
const timeoutMs = providerOptions?.timeoutMs ?? 120000;
|
|
119
|
+
// Create the prediction through the version endpoint, which serves both
|
|
120
|
+
// official and community models. The version-less /models/.../predictions
|
|
121
|
+
// endpoint only serves official models and 404s for community ones.
|
|
122
|
+
const version = await this.resolveVersion(modelId);
|
|
123
|
+
const res = await fetch(`${REPLICATE_BASE}/predictions`, {
|
|
124
|
+
method: 'POST', headers: this.headers(), body: JSON.stringify({ version, input }),
|
|
125
|
+
});
|
|
126
|
+
if (!res.ok) {
|
|
127
|
+
throw new SegmentationProviderError(`Replicate returned ${res.status}: ${await res.text()}`, 'provider_failed');
|
|
128
|
+
}
|
|
129
|
+
let prediction = (await res.json());
|
|
130
|
+
const deadline = Date.now() + timeoutMs;
|
|
131
|
+
while (prediction.status
|
|
132
|
+
&& !['succeeded', 'failed', 'canceled'].includes(prediction.status)
|
|
133
|
+
&& prediction.urls?.get) {
|
|
134
|
+
if (Date.now() > deadline) {
|
|
135
|
+
throw new SegmentationProviderError('Replicate segmentation timed out.', 'timeout');
|
|
136
|
+
}
|
|
137
|
+
await sleep(pollIntervalMs);
|
|
138
|
+
const pollRes = await fetch(prediction.urls.get, { headers: this.headers() });
|
|
139
|
+
if (!pollRes.ok) {
|
|
140
|
+
throw new SegmentationProviderError(`Replicate poll returned ${pollRes.status}.`, 'provider_failed');
|
|
141
|
+
}
|
|
142
|
+
prediction = (await pollRes.json());
|
|
143
|
+
}
|
|
144
|
+
return prediction;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Resolve a model id to a concrete version hash. An explicit
|
|
148
|
+
* `owner/name:version` pin is used directly; a bare `owner/name` is looked up
|
|
149
|
+
* via the model API for its latest version (cached per provider instance).
|
|
150
|
+
*/
|
|
151
|
+
async resolveVersion(modelId) {
|
|
152
|
+
const colon = modelId.indexOf(':');
|
|
153
|
+
if (colon >= 0)
|
|
154
|
+
return modelId.slice(colon + 1);
|
|
155
|
+
const cached = this.versionCache.get(modelId);
|
|
156
|
+
if (cached)
|
|
157
|
+
return cached;
|
|
158
|
+
const slash = modelId.indexOf('/');
|
|
159
|
+
if (slash < 1) {
|
|
160
|
+
throw new SegmentationProviderError(`Invalid modelId "${modelId}": expected "owner/model" or "owner/model:version".`, 'invalid_request');
|
|
161
|
+
}
|
|
162
|
+
const res = await fetch(`${REPLICATE_BASE}/models/${modelId}`, { headers: this.headers() });
|
|
163
|
+
if (!res.ok) {
|
|
164
|
+
throw new SegmentationProviderError(`Failed to resolve model "${modelId}": ${res.status}`, 'provider_failed');
|
|
165
|
+
}
|
|
166
|
+
const data = (await res.json());
|
|
167
|
+
const version = data.latest_version?.id;
|
|
168
|
+
if (!version) {
|
|
169
|
+
throw new SegmentationProviderError(`Model "${modelId}" has no published version.`, 'provider_failed');
|
|
170
|
+
}
|
|
171
|
+
this.versionCache.set(modelId, version);
|
|
172
|
+
return version;
|
|
173
|
+
}
|
|
174
|
+
extractMaskRefs(output) {
|
|
175
|
+
if (Array.isArray(output))
|
|
176
|
+
return output;
|
|
177
|
+
if (output && typeof output === 'object') {
|
|
178
|
+
const o = output;
|
|
179
|
+
// meta/sam-2 automatic output: { combined_mask, individual_masks: [...] }
|
|
180
|
+
if (Array.isArray(o.individual_masks))
|
|
181
|
+
return o.individual_masks;
|
|
182
|
+
if (Array.isArray(o.masks))
|
|
183
|
+
return o.masks;
|
|
184
|
+
if (typeof o.mask === 'string')
|
|
185
|
+
return [o.mask];
|
|
186
|
+
if (typeof o.combined_mask === 'string')
|
|
187
|
+
return [o.combined_mask];
|
|
188
|
+
}
|
|
189
|
+
if (typeof output === 'string')
|
|
190
|
+
return [output];
|
|
191
|
+
return [];
|
|
192
|
+
}
|
|
193
|
+
async fetchMaskBytes(url) {
|
|
194
|
+
if (url.startsWith('data:')) {
|
|
195
|
+
return Buffer.from(url.substring(url.indexOf(',') + 1), 'base64');
|
|
196
|
+
}
|
|
197
|
+
const res = await fetch(url, { headers: this.headers() });
|
|
198
|
+
if (!res.ok) {
|
|
199
|
+
throw new SegmentationProviderError(`Failed to download mask: ${res.status}`, 'provider_failed');
|
|
200
|
+
}
|
|
201
|
+
return Buffer.from(await res.arrayBuffer());
|
|
202
|
+
}
|
|
203
|
+
async decodeMasks(output) {
|
|
204
|
+
const refs = this.extractMaskRefs(output);
|
|
205
|
+
const masks = [];
|
|
206
|
+
for (let i = 0; i < refs.length; i++) {
|
|
207
|
+
const ref = refs[i];
|
|
208
|
+
const url = typeof ref === 'string' ? ref : ref.mask;
|
|
209
|
+
if (typeof url !== 'string')
|
|
210
|
+
continue;
|
|
211
|
+
const png = await this.fetchMaskBytes(url);
|
|
212
|
+
const bbox = typeof ref === 'object' && Array.isArray(ref.box) && ref.box.length === 4
|
|
213
|
+
? { x: ref.box[0], y: ref.box[1], width: ref.box[2] - ref.box[0], height: ref.box[3] - ref.box[1] }
|
|
214
|
+
: await computeMaskBbox(png);
|
|
215
|
+
if (!bbox)
|
|
216
|
+
continue;
|
|
217
|
+
masks.push({
|
|
218
|
+
mask: png,
|
|
219
|
+
bbox,
|
|
220
|
+
score: typeof ref === 'object' && typeof ref.score === 'number' ? ref.score : 1,
|
|
221
|
+
label: typeof ref === 'object' && typeof ref.label === 'string' ? ref.label : undefined,
|
|
222
|
+
index: i,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
return masks;
|
|
226
|
+
}
|
|
227
|
+
async imageDimensions(image) {
|
|
228
|
+
const sharp = (await import('sharp')).default;
|
|
229
|
+
const meta = await sharp(image).metadata();
|
|
230
|
+
return { width: meta.width ?? 0, height: meta.height ?? 0 };
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=ReplicateSegmentationProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplicateSegmentationProvider.js","sourceRoot":"","sources":["../../../../src/io/segmentation/providers/ReplicateSegmentationProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module io/segmentation/resolveMode
|
|
3
|
+
*/
|
|
4
|
+
import type { SegmentOptions, SegmentationMode } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Determine the single active prompt mode from the options.
|
|
7
|
+
*
|
|
8
|
+
* A mode counts as "set" when: `prompt` is a non-empty (trimmed) string,
|
|
9
|
+
* `points` is a non-empty array, `box` is present, or `automatic === true`.
|
|
10
|
+
*
|
|
11
|
+
* @throws {InvalidSegmentationPromptError} when zero or more than one is set.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveSegmentationMode(opts: SegmentOptions): SegmentationMode;
|
|
14
|
+
//# sourceMappingURL=resolveMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveMode.d.ts","sourceRoot":"","sources":["../../../src/io/segmentation/resolveMode.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnE;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAkB9E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { InvalidSegmentationPromptError } from './errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* Determine the single active prompt mode from the options.
|
|
4
|
+
*
|
|
5
|
+
* A mode counts as "set" when: `prompt` is a non-empty (trimmed) string,
|
|
6
|
+
* `points` is a non-empty array, `box` is present, or `automatic === true`.
|
|
7
|
+
*
|
|
8
|
+
* @throws {InvalidSegmentationPromptError} when zero or more than one is set.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveSegmentationMode(opts) {
|
|
11
|
+
const modes = [];
|
|
12
|
+
if (typeof opts.prompt === 'string' && opts.prompt.trim().length > 0)
|
|
13
|
+
modes.push('text');
|
|
14
|
+
if (Array.isArray(opts.points) && opts.points.length > 0)
|
|
15
|
+
modes.push('points');
|
|
16
|
+
if (opts.box)
|
|
17
|
+
modes.push('box');
|
|
18
|
+
if (opts.automatic === true)
|
|
19
|
+
modes.push('automatic');
|
|
20
|
+
if (modes.length === 0) {
|
|
21
|
+
throw new InvalidSegmentationPromptError('segment() requires exactly one prompt mode: set one of prompt, points, box, or automatic.');
|
|
22
|
+
}
|
|
23
|
+
if (modes.length > 1) {
|
|
24
|
+
throw new InvalidSegmentationPromptError(`segment() accepts exactly one prompt mode, received: ${modes.join(', ')}.`);
|
|
25
|
+
}
|
|
26
|
+
return modes[0];
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=resolveMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveMode.js","sourceRoot":"","sources":["../../../src/io/segmentation/resolveMode.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC1D,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAErD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,8BAA8B,CACtC,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,8BAA8B,CACtC,wDAAwD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module io/segmentation/types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for provider-agnostic image segmentation.
|
|
5
|
+
*
|
|
6
|
+
* The segmentation surface takes an image plus exactly one prompt (text,
|
|
7
|
+
* points, box, or automatic "segment everything") and returns one
|
|
8
|
+
* {@link SegmentMask} per detected region. Masks are encoded white=object /
|
|
9
|
+
* black=background so they drop straight into the image-editing `mask` input.
|
|
10
|
+
*
|
|
11
|
+
* @see {@link ISegmentationProvider} for the provider contract.
|
|
12
|
+
*/
|
|
13
|
+
/** Identifier for a segmentation backend. */
|
|
14
|
+
export type SegmentationProviderId = 'replicate' | (string & {});
|
|
15
|
+
/** Which kind of prompt drives the segmentation. Exactly one per call. */
|
|
16
|
+
export type SegmentationMode = 'text' | 'points' | 'box' | 'automatic';
|
|
17
|
+
/** A click point for point-prompted segmentation. */
|
|
18
|
+
export interface SegmentationPoint {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
/** Defaults to `'foreground'` during normalization. */
|
|
22
|
+
label?: 'foreground' | 'background';
|
|
23
|
+
}
|
|
24
|
+
/** An axis-aligned box in image pixels (top-left origin). */
|
|
25
|
+
export interface SegmentationBox {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
width: number;
|
|
29
|
+
height: number;
|
|
30
|
+
}
|
|
31
|
+
/** Per-provider passthrough options for the Replicate backend. */
|
|
32
|
+
export interface ReplicateSegmentationOptions {
|
|
33
|
+
/** Override the SAM2 model slug used for geometric prompts. */
|
|
34
|
+
samModelId?: string;
|
|
35
|
+
/** Override the GroundedSAM model slug used for text prompts. */
|
|
36
|
+
groundedSamModelId?: string;
|
|
37
|
+
/** Poll interval in milliseconds (default 1000). */
|
|
38
|
+
pollIntervalMs?: number;
|
|
39
|
+
/** Overall timeout in milliseconds (default 120000). */
|
|
40
|
+
timeoutMs?: number;
|
|
41
|
+
/** Extra fields merged verbatim into the Replicate `input`. */
|
|
42
|
+
input?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/** Namespaced bag of per-provider options. */
|
|
45
|
+
export interface SegmentationProviderOptionBag {
|
|
46
|
+
replicate?: ReplicateSegmentationOptions;
|
|
47
|
+
[providerId: string]: unknown;
|
|
48
|
+
}
|
|
49
|
+
/** Public options accepted by the high-level {@link segment} helper. */
|
|
50
|
+
export interface SegmentOptions {
|
|
51
|
+
/** Source image as raw bytes or a file path. */
|
|
52
|
+
image: Buffer | Uint8Array | string;
|
|
53
|
+
/** Provider id. Defaults to `'replicate'`. */
|
|
54
|
+
provider?: SegmentationProviderId;
|
|
55
|
+
/** Model id override. Provider default is used when omitted. */
|
|
56
|
+
model?: string;
|
|
57
|
+
/** Open-vocabulary text prompt (routes to GroundedSAM). */
|
|
58
|
+
prompt?: string;
|
|
59
|
+
/** Point prompts (foreground/background clicks). */
|
|
60
|
+
points?: SegmentationPoint[];
|
|
61
|
+
/** Bounding-box prompt. */
|
|
62
|
+
box?: SegmentationBox;
|
|
63
|
+
/** "Segment everything" when `true`. */
|
|
64
|
+
automatic?: boolean;
|
|
65
|
+
/** Cap on returned masks (automatic/text can produce many). */
|
|
66
|
+
maxMasks?: number;
|
|
67
|
+
/** Confidence floor; masks scoring below this are dropped. */
|
|
68
|
+
minScore?: number;
|
|
69
|
+
/** Provider-specific passthrough options. */
|
|
70
|
+
providerOptions?: SegmentationProviderOptionBag | Record<string, unknown>;
|
|
71
|
+
/** Caller id for usage tracking. */
|
|
72
|
+
userId?: string;
|
|
73
|
+
}
|
|
74
|
+
/** A single segmented region. */
|
|
75
|
+
export interface SegmentMask {
|
|
76
|
+
/** PNG bytes; white(255)=object, black(0)=background (matches editImage mask). */
|
|
77
|
+
mask: Buffer;
|
|
78
|
+
/** Tight bounding box in source-image pixels, top-left origin. */
|
|
79
|
+
bbox: SegmentationBox;
|
|
80
|
+
/** Model confidence 0–1 (1 when the model reports none). */
|
|
81
|
+
score: number;
|
|
82
|
+
/** Grounding phrase for text prompts; undefined for geometric/automatic. */
|
|
83
|
+
label?: string;
|
|
84
|
+
/** Stable index within the result. */
|
|
85
|
+
index: number;
|
|
86
|
+
}
|
|
87
|
+
/** Aggregated segmentation result. */
|
|
88
|
+
export interface SegmentationResult {
|
|
89
|
+
masks: SegmentMask[];
|
|
90
|
+
/** Source image width in pixels (so bboxes/masks are interpretable). */
|
|
91
|
+
width: number;
|
|
92
|
+
/** Source image height in pixels. */
|
|
93
|
+
height: number;
|
|
94
|
+
providerId: string;
|
|
95
|
+
modelId: string;
|
|
96
|
+
promptMode: SegmentationMode;
|
|
97
|
+
usage?: {
|
|
98
|
+
totalMasks: number;
|
|
99
|
+
totalCostUSD?: number;
|
|
100
|
+
};
|
|
101
|
+
durationMs: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Normalized provider-level request produced by the {@link segment} helper
|
|
105
|
+
* from {@link SegmentOptions}. The image is already a `Buffer`, exactly one
|
|
106
|
+
* `mode` is resolved, and point labels are defaulted.
|
|
107
|
+
*/
|
|
108
|
+
export interface SegmentationRequest {
|
|
109
|
+
modelId: string;
|
|
110
|
+
image: Buffer;
|
|
111
|
+
mode: SegmentationMode;
|
|
112
|
+
prompt?: string;
|
|
113
|
+
points?: Array<{
|
|
114
|
+
x: number;
|
|
115
|
+
y: number;
|
|
116
|
+
label: 'foreground' | 'background';
|
|
117
|
+
}>;
|
|
118
|
+
box?: SegmentationBox;
|
|
119
|
+
maxMasks?: number;
|
|
120
|
+
minScore?: number;
|
|
121
|
+
providerOptions?: SegmentationProviderOptionBag | Record<string, unknown>;
|
|
122
|
+
}
|
|
123
|
+
/** Contract implemented by every segmentation backend. */
|
|
124
|
+
export interface ISegmentationProvider {
|
|
125
|
+
readonly providerId: string;
|
|
126
|
+
readonly isInitialized: boolean;
|
|
127
|
+
readonly defaultModelId?: string;
|
|
128
|
+
initialize(config: Record<string, unknown>): Promise<void>;
|
|
129
|
+
segment(request: SegmentationRequest): Promise<SegmentationResult>;
|
|
130
|
+
/** Prompt modes this provider supports, for up-front validation. */
|
|
131
|
+
supportedModes(): ReadonlyArray<SegmentationMode>;
|
|
132
|
+
shutdown?(): Promise<void>;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/io/segmentation/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module io/segmentation/types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for provider-agnostic image segmentation.
|
|
5
|
+
*
|
|
6
|
+
* The segmentation surface takes an image plus exactly one prompt (text,
|
|
7
|
+
* points, box, or automatic "segment everything") and returns one
|
|
8
|
+
* {@link SegmentMask} per detected region. Masks are encoded white=object /
|
|
9
|
+
* black=background so they drop straight into the image-editing `mask` input.
|
|
10
|
+
*
|
|
11
|
+
* @see {@link ISegmentationProvider} for the provider contract.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/io/segmentation/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@framers/agentos",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.35",
|
|
4
4
|
"description": "AgentOS: open-source TypeScript framework for autonomous AI agents. Unified graph orchestration, cognitive memory, runtime tool forging, multi-tier guardrails, voice pipeline, and 11 LLM providers.",
|
|
5
5
|
"homepage": "https://agentos.sh",
|
|
6
6
|
"repository": {
|