aibroker 0.5.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +263 -104
- package/dist/adapters/iterm/iterm2-api.d.ts +20 -0
- package/dist/adapters/iterm/iterm2-api.d.ts.map +1 -0
- package/dist/adapters/iterm/iterm2-api.js +244 -0
- package/dist/adapters/iterm/iterm2-api.js.map +1 -0
- package/dist/adapters/iterm/sessions.d.ts +1 -0
- package/dist/adapters/iterm/sessions.d.ts.map +1 -1
- package/dist/adapters/iterm/sessions.js +26 -2
- package/dist/adapters/iterm/sessions.js.map +1 -1
- package/dist/adapters/kokoro/media.js +2 -2
- package/dist/adapters/kokoro/media.js.map +1 -1
- package/dist/adapters/pailot/gateway.d.ts +5 -6
- package/dist/adapters/pailot/gateway.d.ts.map +1 -1
- package/dist/adapters/pailot/gateway.js +575 -34
- package/dist/adapters/pailot/gateway.js.map +1 -1
- package/dist/aibp/bridge.d.ts +123 -0
- package/dist/aibp/bridge.d.ts.map +1 -0
- package/dist/aibp/bridge.js +363 -0
- package/dist/aibp/bridge.js.map +1 -0
- package/dist/aibp/envelope.d.ts +26 -0
- package/dist/aibp/envelope.d.ts.map +1 -0
- package/dist/aibp/envelope.js +101 -0
- package/dist/aibp/envelope.js.map +1 -0
- package/dist/aibp/index.d.ts +11 -0
- package/dist/aibp/index.d.ts.map +1 -0
- package/dist/aibp/index.js +10 -0
- package/dist/aibp/index.js.map +1 -0
- package/dist/aibp/registry.d.ts +71 -0
- package/dist/aibp/registry.d.ts.map +1 -0
- package/dist/aibp/registry.js +408 -0
- package/dist/aibp/registry.js.map +1 -0
- package/dist/aibp/types.d.ts +91 -0
- package/dist/aibp/types.d.ts.map +1 -0
- package/dist/aibp/types.js +8 -0
- package/dist/aibp/types.js.map +1 -0
- package/dist/core/hybrid.d.ts +2 -0
- package/dist/core/hybrid.d.ts.map +1 -1
- package/dist/core/hybrid.js +8 -0
- package/dist/core/hybrid.js.map +1 -1
- package/dist/core/state.d.ts +12 -0
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +34 -0
- package/dist/core/state.js.map +1 -1
- package/dist/core/status-cache.d.ts +51 -0
- package/dist/core/status-cache.d.ts.map +1 -0
- package/dist/core/status-cache.js +62 -0
- package/dist/core/status-cache.js.map +1 -0
- package/dist/daemon/adapter-registry.d.ts +5 -0
- package/dist/daemon/adapter-registry.d.ts.map +1 -1
- package/dist/daemon/adapter-registry.js +94 -4
- package/dist/daemon/adapter-registry.js.map +1 -1
- package/dist/daemon/cli.d.ts +1 -0
- package/dist/daemon/cli.d.ts.map +1 -1
- package/dist/daemon/cli.js +95 -3
- package/dist/daemon/cli.js.map +1 -1
- package/dist/daemon/command-context.d.ts +28 -0
- package/dist/daemon/command-context.d.ts.map +1 -0
- package/dist/daemon/command-context.js +13 -0
- package/dist/daemon/command-context.js.map +1 -0
- package/dist/daemon/commands.d.ts +22 -0
- package/dist/daemon/commands.d.ts.map +1 -0
- package/dist/daemon/commands.js +849 -0
- package/dist/daemon/commands.js.map +1 -0
- package/dist/daemon/core-handlers.d.ts.map +1 -1
- package/dist/daemon/core-handlers.js +758 -3
- package/dist/daemon/core-handlers.js.map +1 -1
- package/dist/daemon/create-adapter.js +2 -1
- package/dist/daemon/create-adapter.js.map +1 -1
- package/dist/daemon/image-context.d.ts +56 -0
- package/dist/daemon/image-context.d.ts.map +1 -0
- package/dist/daemon/image-context.js +116 -0
- package/dist/daemon/image-context.js.map +1 -0
- package/dist/daemon/image-gen/index.d.ts +22 -0
- package/dist/daemon/image-gen/index.d.ts.map +1 -0
- package/dist/daemon/image-gen/index.js +129 -0
- package/dist/daemon/image-gen/index.js.map +1 -0
- package/dist/daemon/image-gen/providers/cloudflare.d.ts +13 -0
- package/dist/daemon/image-gen/providers/cloudflare.d.ts.map +1 -0
- package/dist/daemon/image-gen/providers/cloudflare.js +63 -0
- package/dist/daemon/image-gen/providers/cloudflare.js.map +1 -0
- package/dist/daemon/image-gen/providers/huggingface.d.ts +12 -0
- package/dist/daemon/image-gen/providers/huggingface.d.ts.map +1 -0
- package/dist/daemon/image-gen/providers/huggingface.js +58 -0
- package/dist/daemon/image-gen/providers/huggingface.js.map +1 -0
- package/dist/daemon/image-gen/providers/pollinations.d.ts +11 -0
- package/dist/daemon/image-gen/providers/pollinations.d.ts.map +1 -0
- package/dist/daemon/image-gen/providers/pollinations.js +39 -0
- package/dist/daemon/image-gen/providers/pollinations.js.map +1 -0
- package/dist/daemon/image-gen/providers/replicate.d.ts +9 -0
- package/dist/daemon/image-gen/providers/replicate.d.ts.map +1 -0
- package/dist/daemon/image-gen/providers/replicate.js +158 -0
- package/dist/daemon/image-gen/providers/replicate.js.map +1 -0
- package/dist/daemon/image-gen/types.d.ts +41 -0
- package/dist/daemon/image-gen/types.d.ts.map +1 -0
- package/dist/daemon/image-gen/types.js +5 -0
- package/dist/daemon/image-gen/types.js.map +1 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +260 -6
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/screenshot.d.ts +12 -0
- package/dist/daemon/screenshot.d.ts.map +1 -0
- package/dist/daemon/screenshot.js +252 -0
- package/dist/daemon/screenshot.js.map +1 -0
- package/dist/daemon/session-content.d.ts +27 -0
- package/dist/daemon/session-content.d.ts.map +1 -0
- package/dist/daemon/session-content.js +76 -0
- package/dist/daemon/session-content.js.map +1 -0
- package/dist/daemon/vision.d.ts +46 -0
- package/dist/daemon/vision.d.ts.map +1 -0
- package/dist/daemon/vision.js +176 -0
- package/dist/daemon/vision.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/ipc/validate.d.ts +52 -0
- package/dist/ipc/validate.d.ts.map +1 -0
- package/dist/ipc/validate.js +129 -0
- package/dist/ipc/validate.js.map +1 -0
- package/dist/mcp/index.d.ts +23 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +787 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/types/broker.d.ts +3 -1
- package/dist/types/broker.d.ts.map +1 -1
- package/dist/types/broker.js.map +1 -1
- package/package.json +5 -2
- package/templates/adapter/ONBOARDING_PROMPT.md +51 -29
- package/templates/adapter/README.md.tmpl +14 -31
- package/templates/adapter/package.json.tmpl +1 -1
- package/templates/adapter/src/watcher/commands.ts.tmpl +24 -126
- package/templates/adapter/src/watcher/index.ts.tmpl +112 -88
- package/templates/adapter/src/watcher/ipc-server.ts.tmpl +27 -3
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemon/image-gen/providers/huggingface.ts — Hugging Face Inference API image generation provider.
|
|
3
|
+
*
|
|
4
|
+
* Uses the HF Inference API to run image generation models.
|
|
5
|
+
* Default model: black-forest-labs/FLUX.1-schnell
|
|
6
|
+
* Free tier: rate-limited.
|
|
7
|
+
*
|
|
8
|
+
* Requires HF_API_TOKEN env var (or apiToken in config).
|
|
9
|
+
*/
|
|
10
|
+
import { log } from "../../../core/log.js";
|
|
11
|
+
const HF_API_BASE = "https://api-inference.huggingface.co/models";
|
|
12
|
+
const DEFAULT_MODEL = "black-forest-labs/FLUX.1-schnell";
|
|
13
|
+
export function createHuggingFaceProvider(config = { provider: "huggingface" }) {
|
|
14
|
+
return {
|
|
15
|
+
name: "huggingface",
|
|
16
|
+
async generate(opts) {
|
|
17
|
+
const tokenEnv = config.apiTokenEnv ?? "HF_API_TOKEN";
|
|
18
|
+
const token = config.apiToken ?? process.env[tokenEnv];
|
|
19
|
+
if (!token) {
|
|
20
|
+
throw new Error(`Hugging Face API error: ${tokenEnv} not set. Get one at https://huggingface.co/settings/tokens`);
|
|
21
|
+
}
|
|
22
|
+
const model = opts.model ?? config.model ?? DEFAULT_MODEL;
|
|
23
|
+
const startMs = Date.now();
|
|
24
|
+
const endpoint = `${HF_API_BASE}/${model}`;
|
|
25
|
+
log(`Image gen: using huggingface (${model})`);
|
|
26
|
+
const body = {
|
|
27
|
+
inputs: opts.prompt,
|
|
28
|
+
};
|
|
29
|
+
// HF accepts parameters for image dimensions
|
|
30
|
+
if (opts.width || opts.height) {
|
|
31
|
+
body.parameters = {
|
|
32
|
+
...(opts.width ? { width: opts.width } : {}),
|
|
33
|
+
...(opts.height ? { height: opts.height } : {}),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const res = await fetch(endpoint, {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers: {
|
|
39
|
+
Authorization: `Bearer ${token}`,
|
|
40
|
+
"Content-Type": "application/json",
|
|
41
|
+
"Accept": "image/*",
|
|
42
|
+
},
|
|
43
|
+
body: JSON.stringify(body),
|
|
44
|
+
});
|
|
45
|
+
if (!res.ok) {
|
|
46
|
+
const errText = await res.text();
|
|
47
|
+
throw new Error(`Hugging Face API error (${res.status}): ${errText}`);
|
|
48
|
+
}
|
|
49
|
+
// HF returns image bytes directly in the response body
|
|
50
|
+
const arrayBuf = await res.arrayBuffer();
|
|
51
|
+
const imageBuffer = Buffer.from(arrayBuf);
|
|
52
|
+
const durationMs = Date.now() - startMs;
|
|
53
|
+
log(`Image gen: completed in ${durationMs}ms, 1 image(s), ${imageBuffer.length} bytes total`);
|
|
54
|
+
return { images: [imageBuffer], model, durationMs };
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=huggingface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"huggingface.js","sourceRoot":"","sources":["../../../../src/daemon/image-gen/providers/huggingface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG3C,MAAM,WAAW,GAAG,6CAA6C,CAAC;AAClE,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAEzD,MAAM,UAAU,yBAAyB,CAAC,SAA8B,EAAE,QAAQ,EAAE,aAAa,EAAE;IACjG,OAAO;QACL,IAAI,EAAE,aAAa;QAEnB,KAAK,CAAC,QAAQ,CAAC,IAA0B;YACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,6DAA6D,CAAC,CAAC;YACpH,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,GAAG,WAAW,IAAI,KAAK,EAAE,CAAC;YAE3C,GAAG,CAAC,iCAAiC,KAAK,GAAG,CAAC,CAAC;YAE/C,MAAM,IAAI,GAA4B;gBACpC,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;YAEF,6CAA6C;YAC7C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,UAAU,GAAG;oBAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,KAAK,EAAE;oBAChC,cAAc,EAAE,kBAAkB;oBAClC,QAAQ,EAAE,SAAS;iBACpB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,uDAAuD;YACvD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YAExC,GAAG,CAAC,2BAA2B,UAAU,mBAAmB,WAAW,CAAC,MAAM,cAAc,CAAC,CAAC;YAE9F,OAAO,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemon/image-gen/providers/pollinations.ts — Pollinations.ai image generation provider.
|
|
3
|
+
*
|
|
4
|
+
* Free, no authentication required.
|
|
5
|
+
* Endpoint: https://image.pollinations.ai/prompt/{encoded_prompt}
|
|
6
|
+
*
|
|
7
|
+
* Returns image bytes directly — no API key needed.
|
|
8
|
+
*/
|
|
9
|
+
import type { ImageProvider } from "../types.js";
|
|
10
|
+
export declare function createPollinationsProvider(): ImageProvider;
|
|
11
|
+
//# sourceMappingURL=pollinations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pollinations.d.ts","sourceRoot":"","sources":["../../../../src/daemon/image-gen/providers/pollinations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAA6C,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5F,wBAAgB,0BAA0B,IAAI,aAAa,CAmC1D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemon/image-gen/providers/pollinations.ts — Pollinations.ai image generation provider.
|
|
3
|
+
*
|
|
4
|
+
* Free, no authentication required.
|
|
5
|
+
* Endpoint: https://image.pollinations.ai/prompt/{encoded_prompt}
|
|
6
|
+
*
|
|
7
|
+
* Returns image bytes directly — no API key needed.
|
|
8
|
+
*/
|
|
9
|
+
import { log } from "../../../core/log.js";
|
|
10
|
+
const POLLINATIONS_BASE = "https://image.pollinations.ai/prompt";
|
|
11
|
+
const DEFAULT_MODEL = "flux";
|
|
12
|
+
export function createPollinationsProvider() {
|
|
13
|
+
return {
|
|
14
|
+
name: "pollinations",
|
|
15
|
+
async generate(opts) {
|
|
16
|
+
const model = opts.model ?? DEFAULT_MODEL;
|
|
17
|
+
const startMs = Date.now();
|
|
18
|
+
const params = new URLSearchParams({
|
|
19
|
+
nologo: "true",
|
|
20
|
+
model,
|
|
21
|
+
...(opts.width ? { width: String(opts.width) } : {}),
|
|
22
|
+
...(opts.height ? { height: String(opts.height) } : {}),
|
|
23
|
+
});
|
|
24
|
+
const encodedPrompt = encodeURIComponent(opts.prompt);
|
|
25
|
+
const endpoint = `${POLLINATIONS_BASE}/${encodedPrompt}?${params.toString()}`;
|
|
26
|
+
log(`Image gen: using pollinations (${model})`);
|
|
27
|
+
const res = await fetch(endpoint);
|
|
28
|
+
if (!res.ok) {
|
|
29
|
+
throw new Error(`Pollinations API error (${res.status}): ${await res.text()}`);
|
|
30
|
+
}
|
|
31
|
+
const arrayBuf = await res.arrayBuffer();
|
|
32
|
+
const imageBuffer = Buffer.from(arrayBuf);
|
|
33
|
+
const durationMs = Date.now() - startMs;
|
|
34
|
+
log(`Image gen: completed in ${durationMs}ms, 1 image(s), ${imageBuffer.length} bytes total`);
|
|
35
|
+
return { images: [imageBuffer], model, durationMs };
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=pollinations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pollinations.js","sourceRoot":"","sources":["../../../../src/daemon/image-gen/providers/pollinations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG3C,MAAM,iBAAiB,GAAG,sCAAsC,CAAC;AACjE,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,IAAI,EAAE,cAAc;QAEpB,KAAK,CAAC,QAAQ,CAAC,IAA0B;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE3B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;gBACjC,MAAM,EAAE,MAAM;gBACd,KAAK;gBACL,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,GAAG,iBAAiB,IAAI,aAAa,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YAE9E,GAAG,CAAC,kCAAkC,KAAK,GAAG,CAAC,CAAC;YAEhD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YAElC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YAExC,GAAG,CAAC,2BAA2B,UAAU,mBAAmB,WAAW,CAAC,MAAM,cAAc,CAAC,CAAC;YAE9F,OAAO,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemon/image-gen/providers/replicate.ts — Replicate image generation provider.
|
|
3
|
+
*
|
|
4
|
+
* Uses the Replicate Flux schnell model by default.
|
|
5
|
+
* Requires REPLICATE_API_TOKEN env var (or apiToken in config).
|
|
6
|
+
*/
|
|
7
|
+
import type { ImageProvider, ImageProviderConfig } from "../types.js";
|
|
8
|
+
export declare function createReplicateProvider(config?: ImageProviderConfig): ImageProvider;
|
|
9
|
+
//# sourceMappingURL=replicate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replicate.d.ts","sourceRoot":"","sources":["../../../../src/daemon/image-gen/providers/replicate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAA6C,aAAa,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAKrI,wBAAgB,uBAAuB,CAAC,MAAM,GAAE,mBAA+C,GAAG,aAAa,CAsK9G"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemon/image-gen/providers/replicate.ts — Replicate image generation provider.
|
|
3
|
+
*
|
|
4
|
+
* Uses the Replicate Flux schnell model by default.
|
|
5
|
+
* Requires REPLICATE_API_TOKEN env var (or apiToken in config).
|
|
6
|
+
*/
|
|
7
|
+
import { log } from "../../../core/log.js";
|
|
8
|
+
const REPLICATE_API_URL = "https://api.replicate.com/v1/models";
|
|
9
|
+
const DEFAULT_MODEL = "black-forest-labs/flux-schnell";
|
|
10
|
+
export function createReplicateProvider(config = { provider: "replicate" }) {
|
|
11
|
+
return {
|
|
12
|
+
name: "replicate",
|
|
13
|
+
async generate(opts) {
|
|
14
|
+
const tokenEnv = config.apiTokenEnv ?? "REPLICATE_API_TOKEN";
|
|
15
|
+
const token = config.apiToken ?? process.env[tokenEnv];
|
|
16
|
+
if (!token) {
|
|
17
|
+
throw new Error(`Replicate API error: ${tokenEnv} not set. Get one at https://replicate.com/account/api-tokens`);
|
|
18
|
+
}
|
|
19
|
+
const model = opts.model ?? config.model ?? DEFAULT_MODEL;
|
|
20
|
+
const startMs = Date.now();
|
|
21
|
+
const predictionUrl = `${REPLICATE_API_URL}/${model}/predictions`;
|
|
22
|
+
const body = {
|
|
23
|
+
input: {
|
|
24
|
+
prompt: opts.prompt,
|
|
25
|
+
num_outputs: opts.numOutputs ?? 1,
|
|
26
|
+
...(opts.width ? { width: opts.width } : {}),
|
|
27
|
+
...(opts.height ? { height: opts.height } : {}),
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
log(`Image gen: using replicate (${model})`);
|
|
31
|
+
const startRes = await fetch(predictionUrl, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
headers: {
|
|
34
|
+
Authorization: `Bearer ${token}`,
|
|
35
|
+
"Content-Type": "application/json",
|
|
36
|
+
Prefer: "wait", // Synchronous mode — waits for completion
|
|
37
|
+
},
|
|
38
|
+
body: JSON.stringify(body),
|
|
39
|
+
});
|
|
40
|
+
if (!startRes.ok) {
|
|
41
|
+
const errText = await startRes.text();
|
|
42
|
+
throw new Error(`Replicate API error (${startRes.status}): ${errText}`);
|
|
43
|
+
}
|
|
44
|
+
const prediction = await startRes.json();
|
|
45
|
+
// If "Prefer: wait" didn't complete, poll
|
|
46
|
+
if (prediction.status !== "succeeded" && prediction.status !== "failed") {
|
|
47
|
+
const polled = await pollPrediction(prediction.urls?.get ?? "", token);
|
|
48
|
+
if (polled.status === "failed") {
|
|
49
|
+
throw new Error(`Replicate API error: image generation failed — ${polled.error ?? "unknown error"}`);
|
|
50
|
+
}
|
|
51
|
+
prediction.output = polled.output;
|
|
52
|
+
prediction.status = polled.status;
|
|
53
|
+
}
|
|
54
|
+
if (prediction.status === "failed") {
|
|
55
|
+
throw new Error(`Replicate API error: image generation failed — ${prediction.error ?? "unknown error"}`);
|
|
56
|
+
}
|
|
57
|
+
if (!prediction.output || prediction.output.length === 0) {
|
|
58
|
+
throw new Error("Replicate API error: generation returned no output");
|
|
59
|
+
}
|
|
60
|
+
// Download image URLs to buffers
|
|
61
|
+
const images = [];
|
|
62
|
+
for (const url of prediction.output) {
|
|
63
|
+
const imgRes = await fetch(url);
|
|
64
|
+
if (!imgRes.ok) {
|
|
65
|
+
throw new Error(`Replicate API error: failed to download image (${imgRes.status})`);
|
|
66
|
+
}
|
|
67
|
+
const arrayBuf = await imgRes.arrayBuffer();
|
|
68
|
+
images.push(Buffer.from(arrayBuf));
|
|
69
|
+
}
|
|
70
|
+
const durationMs = Date.now() - startMs;
|
|
71
|
+
log(`Image gen: completed in ${durationMs}ms, ${images.length} image(s), ${images.reduce((s, b) => s + b.length, 0)} bytes total`);
|
|
72
|
+
return { images, model, durationMs };
|
|
73
|
+
},
|
|
74
|
+
async refine(opts) {
|
|
75
|
+
const tokenEnv = config.apiTokenEnv ?? "REPLICATE_API_TOKEN";
|
|
76
|
+
const token = config.apiToken ?? process.env[tokenEnv];
|
|
77
|
+
if (!token) {
|
|
78
|
+
throw new Error(`Replicate API error: ${tokenEnv} not set. Get one at https://replicate.com/account/api-tokens`);
|
|
79
|
+
}
|
|
80
|
+
// flux-dev supports image input; flux-schnell does not
|
|
81
|
+
const model = "black-forest-labs/flux-dev";
|
|
82
|
+
const predictionUrl = `${REPLICATE_API_URL}/${model}/predictions`;
|
|
83
|
+
const startMs = Date.now();
|
|
84
|
+
const strength = opts.strength ?? 0.7;
|
|
85
|
+
// Encode source image as base64 data URI
|
|
86
|
+
const base64Image = opts.sourceImage.toString("base64");
|
|
87
|
+
const dataUri = `data:${opts.sourceMime};base64,${base64Image}`;
|
|
88
|
+
const body = {
|
|
89
|
+
input: {
|
|
90
|
+
prompt: opts.prompt,
|
|
91
|
+
image: dataUri,
|
|
92
|
+
prompt_strength: strength,
|
|
93
|
+
num_outputs: 1,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
log(`Image refine: using replicate (${model}), strength=${strength}`);
|
|
97
|
+
const startRes = await fetch(predictionUrl, {
|
|
98
|
+
method: "POST",
|
|
99
|
+
headers: {
|
|
100
|
+
Authorization: `Bearer ${token}`,
|
|
101
|
+
"Content-Type": "application/json",
|
|
102
|
+
Prefer: "wait",
|
|
103
|
+
},
|
|
104
|
+
body: JSON.stringify(body),
|
|
105
|
+
});
|
|
106
|
+
if (!startRes.ok) {
|
|
107
|
+
const errText = await startRes.text();
|
|
108
|
+
throw new Error(`Replicate API error (${startRes.status}): ${errText}`);
|
|
109
|
+
}
|
|
110
|
+
const prediction = await startRes.json();
|
|
111
|
+
if (prediction.status !== "succeeded" && prediction.status !== "failed") {
|
|
112
|
+
const polled = await pollPrediction(prediction.urls?.get ?? "", token);
|
|
113
|
+
if (polled.status === "failed") {
|
|
114
|
+
throw new Error(`Replicate API error: image refinement failed — ${polled.error ?? "unknown error"}`);
|
|
115
|
+
}
|
|
116
|
+
prediction.output = polled.output;
|
|
117
|
+
prediction.status = polled.status;
|
|
118
|
+
}
|
|
119
|
+
if (prediction.status === "failed") {
|
|
120
|
+
throw new Error(`Replicate API error: image refinement failed — ${prediction.error ?? "unknown error"}`);
|
|
121
|
+
}
|
|
122
|
+
if (!prediction.output || prediction.output.length === 0) {
|
|
123
|
+
throw new Error("Replicate API error: refinement returned no output");
|
|
124
|
+
}
|
|
125
|
+
const images = [];
|
|
126
|
+
for (const url of prediction.output) {
|
|
127
|
+
const imgRes = await fetch(url);
|
|
128
|
+
if (!imgRes.ok) {
|
|
129
|
+
throw new Error(`Replicate API error: failed to download refined image (${imgRes.status})`);
|
|
130
|
+
}
|
|
131
|
+
const arrayBuf = await imgRes.arrayBuffer();
|
|
132
|
+
images.push(Buffer.from(arrayBuf));
|
|
133
|
+
}
|
|
134
|
+
const durationMs = Date.now() - startMs;
|
|
135
|
+
log(`Image refine: completed in ${durationMs}ms, ${images.length} image(s)`);
|
|
136
|
+
return { images, model, durationMs };
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
async function pollPrediction(url, token, maxWaitMs = 60_000) {
|
|
141
|
+
const startMs = Date.now();
|
|
142
|
+
const pollIntervalMs = 1000;
|
|
143
|
+
while (Date.now() - startMs < maxWaitMs) {
|
|
144
|
+
await new Promise((r) => setTimeout(r, pollIntervalMs));
|
|
145
|
+
const res = await fetch(url, {
|
|
146
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
147
|
+
});
|
|
148
|
+
if (!res.ok) {
|
|
149
|
+
throw new Error(`Replicate API error: poll failed (${res.status}) — ${await res.text()}`);
|
|
150
|
+
}
|
|
151
|
+
const data = await res.json();
|
|
152
|
+
if (data.status === "succeeded" || data.status === "failed") {
|
|
153
|
+
return data;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
throw new Error(`Replicate API error: timed out after ${maxWaitMs}ms`);
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=replicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replicate.js","sourceRoot":"","sources":["../../../../src/daemon/image-gen/providers/replicate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemon/image-gen/types.ts — Shared types for image generation providers.
|
|
3
|
+
*/
|
|
4
|
+
export interface GenerateImageOptions {
|
|
5
|
+
prompt: string;
|
|
6
|
+
model?: string;
|
|
7
|
+
width?: number;
|
|
8
|
+
height?: number;
|
|
9
|
+
numOutputs?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface GenerateImageResult {
|
|
12
|
+
images: Buffer[];
|
|
13
|
+
model: string;
|
|
14
|
+
durationMs: number;
|
|
15
|
+
}
|
|
16
|
+
export interface RefineImageOptions {
|
|
17
|
+
/** The modification instruction (what to change). */
|
|
18
|
+
prompt: string;
|
|
19
|
+
/** The image to modify. */
|
|
20
|
+
sourceImage: Buffer;
|
|
21
|
+
/** MIME type of sourceImage ("image/webp" | "image/png"). */
|
|
22
|
+
sourceMime: string;
|
|
23
|
+
/** How much to deviate from the source image. 0.0 = minimal change, 1.0 = ignore source. Default 0.7. */
|
|
24
|
+
strength?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface ImageProvider {
|
|
27
|
+
name: string;
|
|
28
|
+
generate(opts: GenerateImageOptions): Promise<GenerateImageResult>;
|
|
29
|
+
/** Optional: native img2img refinement. Falls back to prompt chaining if absent. */
|
|
30
|
+
refine?(opts: RefineImageOptions): Promise<GenerateImageResult>;
|
|
31
|
+
}
|
|
32
|
+
export interface ImageProviderConfig {
|
|
33
|
+
provider: string;
|
|
34
|
+
model?: string;
|
|
35
|
+
apiToken?: string;
|
|
36
|
+
apiTokenEnv?: string;
|
|
37
|
+
accountId?: string;
|
|
38
|
+
modulePath?: string;
|
|
39
|
+
options?: Record<string, unknown>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/daemon/image-gen/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,yGAAyG;IACzG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnE,oFAAoF;IACpF,MAAM,CAAC,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/daemon/image-gen/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsCH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAyBvD,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqRhB"}
|