@nodetool-ai/runtime 0.7.0-rc.11
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/dist/bridge-protocol.d.ts +39 -0
- package/dist/bridge-protocol.d.ts.map +1 -0
- package/dist/bridge-protocol.js +39 -0
- package/dist/bridge-protocol.js.map +1 -0
- package/dist/comfy-executor.d.ts +41 -0
- package/dist/comfy-executor.d.ts.map +1 -0
- package/dist/comfy-executor.js +305 -0
- package/dist/comfy-executor.js.map +1 -0
- package/dist/context-packer.d.ts +22 -0
- package/dist/context-packer.d.ts.map +1 -0
- package/dist/context-packer.js +66 -0
- package/dist/context-packer.js.map +1 -0
- package/dist/context.d.ts +405 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +1455 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/node-executor.d.ts +53 -0
- package/dist/node-executor.d.ts.map +1 -0
- package/dist/node-executor.js +9 -0
- package/dist/node-executor.js.map +1 -0
- package/dist/providers/aki-manifest.json +34 -0
- package/dist/providers/aki-provider.d.ts +65 -0
- package/dist/providers/aki-provider.d.ts.map +1 -0
- package/dist/providers/aki-provider.js +517 -0
- package/dist/providers/aki-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +55 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +563 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +194 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +515 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +20 -0
- package/dist/providers/cerebras-provider.d.ts.map +1 -0
- package/dist/providers/cerebras-provider.js +52 -0
- package/dist/providers/cerebras-provider.js.map +1 -0
- package/dist/providers/claude-agent-provider.d.ts +107 -0
- package/dist/providers/claude-agent-provider.d.ts.map +1 -0
- package/dist/providers/claude-agent-provider.js +586 -0
- package/dist/providers/claude-agent-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +36 -0
- package/dist/providers/cohere-provider.d.ts.map +1 -0
- package/dist/providers/cohere-provider.js +116 -0
- package/dist/providers/cohere-provider.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +109 -0
- package/dist/providers/cost-calculator.d.ts.map +1 -0
- package/dist/providers/cost-calculator.js +475 -0
- package/dist/providers/cost-calculator.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +25 -0
- package/dist/providers/deepseek-provider.d.ts.map +1 -0
- package/dist/providers/deepseek-provider.js +58 -0
- package/dist/providers/deepseek-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +52 -0
- package/dist/providers/fake-provider.d.ts.map +1 -0
- package/dist/providers/fake-provider.js +107 -0
- package/dist/providers/fake-provider.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +32 -0
- package/dist/providers/fal-provider.d.ts.map +1 -0
- package/dist/providers/fal-provider.js +445 -0
- package/dist/providers/fal-provider.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +109 -0
- package/dist/providers/gemini-provider.d.ts.map +1 -0
- package/dist/providers/gemini-provider.js +943 -0
- package/dist/providers/gemini-provider.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +20 -0
- package/dist/providers/groq-provider.d.ts.map +1 -0
- package/dist/providers/groq-provider.js +52 -0
- package/dist/providers/groq-provider.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +59 -0
- package/dist/providers/huggingface-provider.d.ts.map +1 -0
- package/dist/providers/huggingface-provider.js +305 -0
- package/dist/providers/huggingface-provider.js.map +1 -0
- package/dist/providers/index.d.ts +69 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +137 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/jina-provider.d.ts +37 -0
- package/dist/providers/jina-provider.d.ts.map +1 -0
- package/dist/providers/jina-provider.js +118 -0
- package/dist/providers/jina-provider.js.map +1 -0
- package/dist/providers/kie-provider.d.ts +19 -0
- package/dist/providers/kie-provider.d.ts.map +1 -0
- package/dist/providers/kie-provider.js +118 -0
- package/dist/providers/kie-provider.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +49 -0
- package/dist/providers/llama-provider.d.ts.map +1 -0
- package/dist/providers/llama-provider.js +381 -0
- package/dist/providers/llama-provider.js.map +1 -0
- package/dist/providers/lmstudio-provider.d.ts +22 -0
- package/dist/providers/lmstudio-provider.d.ts.map +1 -0
- package/dist/providers/lmstudio-provider.js +63 -0
- package/dist/providers/lmstudio-provider.js.map +1 -0
- package/dist/providers/manifest-models.d.ts +12 -0
- package/dist/providers/manifest-models.d.ts.map +1 -0
- package/dist/providers/manifest-models.js +96 -0
- package/dist/providers/manifest-models.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +53 -0
- package/dist/providers/meshy-provider.d.ts.map +1 -0
- package/dist/providers/meshy-provider.js +230 -0
- package/dist/providers/meshy-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +66 -0
- package/dist/providers/minimax-provider.d.ts.map +1 -0
- package/dist/providers/minimax-provider.js +531 -0
- package/dist/providers/minimax-provider.js.map +1 -0
- package/dist/providers/mistral-provider.d.ts +26 -0
- package/dist/providers/mistral-provider.d.ts.map +1 -0
- package/dist/providers/mistral-provider.js +74 -0
- package/dist/providers/mistral-provider.js.map +1 -0
- package/dist/providers/moonshot-provider.d.ts +24 -0
- package/dist/providers/moonshot-provider.d.ts.map +1 -0
- package/dist/providers/moonshot-provider.js +43 -0
- package/dist/providers/moonshot-provider.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +71 -0
- package/dist/providers/ollama-provider.d.ts.map +1 -0
- package/dist/providers/ollama-provider.js +480 -0
- package/dist/providers/ollama-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +103 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +917 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/providers/openrouter-provider.d.ts +49 -0
- package/dist/providers/openrouter-provider.d.ts.map +1 -0
- package/dist/providers/openrouter-provider.js +147 -0
- package/dist/providers/openrouter-provider.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +24 -0
- package/dist/providers/provider-registry.d.ts.map +1 -0
- package/dist/providers/provider-registry.js +124 -0
- package/dist/providers/provider-registry.js.map +1 -0
- package/dist/providers/python-provider.d.ts +75 -0
- package/dist/providers/python-provider.d.ts.map +1 -0
- package/dist/providers/python-provider.js +157 -0
- package/dist/providers/python-provider.js.map +1 -0
- package/dist/providers/replicate-provider.d.ts +73 -0
- package/dist/providers/replicate-provider.d.ts.map +1 -0
- package/dist/providers/replicate-provider.js +484 -0
- package/dist/providers/replicate-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +41 -0
- package/dist/providers/rodin-provider.d.ts.map +1 -0
- package/dist/providers/rodin-provider.js +236 -0
- package/dist/providers/rodin-provider.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +141 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -0
- package/dist/providers/scripted-provider.js +246 -0
- package/dist/providers/scripted-provider.js.map +1 -0
- package/dist/providers/together-provider.d.ts +20 -0
- package/dist/providers/together-provider.d.ts.map +1 -0
- package/dist/providers/together-provider.js +56 -0
- package/dist/providers/together-provider.js.map +1 -0
- package/dist/providers/types.d.ts +202 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +22 -0
- package/dist/providers/vllm-provider.d.ts.map +1 -0
- package/dist/providers/vllm-provider.js +66 -0
- package/dist/providers/vllm-provider.js.map +1 -0
- package/dist/providers/voyage-provider.d.ts +37 -0
- package/dist/providers/voyage-provider.d.ts.map +1 -0
- package/dist/providers/voyage-provider.js +124 -0
- package/dist/providers/voyage-provider.js.map +1 -0
- package/dist/providers/xai-provider.d.ts +24 -0
- package/dist/providers/xai-provider.d.ts.map +1 -0
- package/dist/providers/xai-provider.js +57 -0
- package/dist/providers/xai-provider.js.map +1 -0
- package/dist/python-bridge-types.d.ts +70 -0
- package/dist/python-bridge-types.d.ts.map +1 -0
- package/dist/python-bridge-types.js +2 -0
- package/dist/python-bridge-types.js.map +1 -0
- package/dist/python-node-executor.d.ts +20 -0
- package/dist/python-node-executor.d.ts.map +1 -0
- package/dist/python-node-executor.js +219 -0
- package/dist/python-node-executor.js.map +1 -0
- package/dist/python-stdio-bridge.d.ts +67 -0
- package/dist/python-stdio-bridge.d.ts.map +1 -0
- package/dist/python-stdio-bridge.js +704 -0
- package/dist/python-stdio-bridge.js.map +1 -0
- package/dist/recommended-models.d.ts +17 -0
- package/dist/recommended-models.d.ts.map +1 -0
- package/dist/recommended-models.js +139 -0
- package/dist/recommended-models.js.map +1 -0
- package/dist/telemetry.d.ts +61 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +128 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/trace-exporters.d.ts +72 -0
- package/dist/trace-exporters.d.ts.map +1 -0
- package/dist/trace-exporters.js +216 -0
- package/dist/trace-exporters.js.map +1 -0
- package/dist/tracing-helpers.d.ts +99 -0
- package/dist/tracing-helpers.d.ts.map +1 -0
- package/dist/tracing-helpers.js +217 -0
- package/dist/tracing-helpers.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meshy AI Provider — wraps the Meshy AI 3D generation API to expose
|
|
3
|
+
* `textTo3D` and `imageTo3D` through the standard {@link BaseProvider}
|
|
4
|
+
* interface.
|
|
5
|
+
*
|
|
6
|
+
* Meshy AI offers two 3D generation modes:
|
|
7
|
+
* - **Text-to-3D** — generate a 3D mesh from a text prompt.
|
|
8
|
+
* - **Image-to-3D** — generate a 3D mesh from a single reference image.
|
|
9
|
+
*
|
|
10
|
+
* API docs: https://docs.meshy.ai/
|
|
11
|
+
*
|
|
12
|
+
* Ported from the historical Python implementation at
|
|
13
|
+
* `nodetool-core@25e60910:src/nodetool/providers/meshy_provider.py`.
|
|
14
|
+
*/
|
|
15
|
+
import { BaseProvider } from "./base-provider.js";
|
|
16
|
+
import type { ImageTo3DParams, Message, Model3D, ProviderStreamItem, TextTo3DParams } from "./types.js";
|
|
17
|
+
/**
|
|
18
|
+
* The 3D generation models exposed by Meshy. Mirrors `MESHY_3D_MODELS` in
|
|
19
|
+
* the original Python provider; bump this list when Meshy ships new models.
|
|
20
|
+
*/
|
|
21
|
+
export declare const MESHY_3D_MODELS: Model3D[];
|
|
22
|
+
/**
|
|
23
|
+
* Optional knobs for tests and advanced users. Production callers should leave
|
|
24
|
+
* these at their defaults.
|
|
25
|
+
*/
|
|
26
|
+
export interface MeshyProviderOptions {
|
|
27
|
+
/** Override the polling interval (ms). Defaults to 5000. */
|
|
28
|
+
pollIntervalMs?: number;
|
|
29
|
+
/** Override the max poll attempts. Defaults to 120 (= 10 minutes @ 5s). */
|
|
30
|
+
maxPollAttempts?: number;
|
|
31
|
+
}
|
|
32
|
+
export declare class MeshyProvider extends BaseProvider {
|
|
33
|
+
private readonly apiKey;
|
|
34
|
+
private readonly pollIntervalMs;
|
|
35
|
+
private readonly maxPollAttempts;
|
|
36
|
+
constructor(secrets?: Record<string, unknown>, options?: MeshyProviderOptions);
|
|
37
|
+
static requiredSecrets(): string[];
|
|
38
|
+
generateMessage(_args: Parameters<BaseProvider["generateMessage"]>[0]): Promise<Message>;
|
|
39
|
+
generateMessages(_args: Parameters<BaseProvider["generateMessages"]>[0]): AsyncGenerator<ProviderStreamItem>;
|
|
40
|
+
getAvailable3DModels(): Promise<Model3D[]>;
|
|
41
|
+
textTo3D(params: TextTo3DParams): Promise<Uint8Array>;
|
|
42
|
+
imageTo3D(image: Uint8Array, params: ImageTo3DParams): Promise<Uint8Array>;
|
|
43
|
+
private headers;
|
|
44
|
+
private computeMaxAttempts;
|
|
45
|
+
private encodeImageAsDataUri;
|
|
46
|
+
private submitTextTo3D;
|
|
47
|
+
private submitImageTo3D;
|
|
48
|
+
private submitRefine;
|
|
49
|
+
private submitTask;
|
|
50
|
+
private pollTaskStatus;
|
|
51
|
+
private downloadResultMesh;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=meshy-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshy-provider.d.ts","sourceRoot":"","sources":["../../src/providers/meshy-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,OAAO,EACP,kBAAkB,EAClB,cAAc,EACf,MAAM,YAAY,CAAC;AAiBpB;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,EA6BpC,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAgBD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAGvC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,OAAO,GAAE,oBAAyB;WAWpB,eAAe,IAAI,MAAM,EAAE;IAIrC,eAAe,CACnB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GACpD,OAAO,CAAC,OAAO,CAAC;IAIZ,gBAAgB,CACrB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GACrD,cAAc,CAAC,kBAAkB,CAAC;IAItB,oBAAoB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAQ1C,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IA4BrD,SAAS,CACtB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,UAAU,CAAC;IAoBtB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;YAKd,cAAc;YAYd,eAAe;YAIf,YAAY;YAOZ,UAAU;YAwBV,cAAc;YAkCd,kBAAkB;CAyBjC"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meshy AI Provider — wraps the Meshy AI 3D generation API to expose
|
|
3
|
+
* `textTo3D` and `imageTo3D` through the standard {@link BaseProvider}
|
|
4
|
+
* interface.
|
|
5
|
+
*
|
|
6
|
+
* Meshy AI offers two 3D generation modes:
|
|
7
|
+
* - **Text-to-3D** — generate a 3D mesh from a text prompt.
|
|
8
|
+
* - **Image-to-3D** — generate a 3D mesh from a single reference image.
|
|
9
|
+
*
|
|
10
|
+
* API docs: https://docs.meshy.ai/
|
|
11
|
+
*
|
|
12
|
+
* Ported from the historical Python implementation at
|
|
13
|
+
* `nodetool-core@25e60910:src/nodetool/providers/meshy_provider.py`.
|
|
14
|
+
*/
|
|
15
|
+
import { BaseProvider } from "./base-provider.js";
|
|
16
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
17
|
+
const log = createLogger("nodetool.runtime.providers.meshy");
|
|
18
|
+
const MESHY_API_BASE_URL = "https://api.meshy.ai";
|
|
19
|
+
/**
|
|
20
|
+
* Default polling cadence. Tasks typically take 30s–5min; 5s polling keeps
|
|
21
|
+
* latency low without overwhelming the API. Tests can shorten this via
|
|
22
|
+
* {@link MeshyProviderOptions}.
|
|
23
|
+
*/
|
|
24
|
+
const DEFAULT_POLL_INTERVAL_MS = 5000;
|
|
25
|
+
/** Default cap of 10 minutes (`120 * 5s`). */
|
|
26
|
+
const DEFAULT_MAX_POLL_ATTEMPTS = 120;
|
|
27
|
+
const DEFAULT_OUTPUT_FORMAT = "glb";
|
|
28
|
+
/**
|
|
29
|
+
* The 3D generation models exposed by Meshy. Mirrors `MESHY_3D_MODELS` in
|
|
30
|
+
* the original Python provider; bump this list when Meshy ships new models.
|
|
31
|
+
*/
|
|
32
|
+
export const MESHY_3D_MODELS = [
|
|
33
|
+
{
|
|
34
|
+
id: "meshy-4",
|
|
35
|
+
name: "Meshy-4 Text-to-3D",
|
|
36
|
+
provider: "meshy",
|
|
37
|
+
supportedTasks: ["text_to_3d"],
|
|
38
|
+
outputFormats: ["glb", "fbx", "obj", "usdz"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "meshy-3-turbo",
|
|
42
|
+
name: "Meshy-3 Turbo Text-to-3D",
|
|
43
|
+
provider: "meshy",
|
|
44
|
+
supportedTasks: ["text_to_3d"],
|
|
45
|
+
outputFormats: ["glb", "fbx", "obj", "usdz"]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: "meshy-4-image",
|
|
49
|
+
name: "Meshy-4 Image-to-3D",
|
|
50
|
+
provider: "meshy",
|
|
51
|
+
supportedTasks: ["image_to_3d"],
|
|
52
|
+
outputFormats: ["glb", "fbx", "obj", "usdz"]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "meshy-3-turbo-image",
|
|
56
|
+
name: "Meshy-3 Turbo Image-to-3D",
|
|
57
|
+
provider: "meshy",
|
|
58
|
+
supportedTasks: ["image_to_3d"],
|
|
59
|
+
outputFormats: ["glb", "fbx", "obj", "usdz"]
|
|
60
|
+
}
|
|
61
|
+
];
|
|
62
|
+
/** Detect PNG by magic header; everything else is treated as JPEG. */
|
|
63
|
+
function detectImageMime(image) {
|
|
64
|
+
const PNG_MAGIC = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
|
|
65
|
+
if (image.length < PNG_MAGIC.length)
|
|
66
|
+
return "image/jpeg";
|
|
67
|
+
for (let i = 0; i < PNG_MAGIC.length; i++) {
|
|
68
|
+
if (image[i] !== PNG_MAGIC[i])
|
|
69
|
+
return "image/jpeg";
|
|
70
|
+
}
|
|
71
|
+
return "image/png";
|
|
72
|
+
}
|
|
73
|
+
function bytesToBase64(bytes) {
|
|
74
|
+
return Buffer.from(bytes).toString("base64");
|
|
75
|
+
}
|
|
76
|
+
export class MeshyProvider extends BaseProvider {
|
|
77
|
+
apiKey;
|
|
78
|
+
pollIntervalMs;
|
|
79
|
+
maxPollAttempts;
|
|
80
|
+
constructor(secrets = {}, options = {}) {
|
|
81
|
+
super("meshy");
|
|
82
|
+
this.apiKey = secrets["MESHY_API_KEY"] ?? "";
|
|
83
|
+
this.pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
84
|
+
this.maxPollAttempts = options.maxPollAttempts ?? DEFAULT_MAX_POLL_ATTEMPTS;
|
|
85
|
+
if (!this.apiKey) {
|
|
86
|
+
log.warn("Meshy API key not configured");
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
static requiredSecrets() {
|
|
90
|
+
return ["MESHY_API_KEY"];
|
|
91
|
+
}
|
|
92
|
+
async generateMessage(_args) {
|
|
93
|
+
throw new Error("meshy does not support chat generation");
|
|
94
|
+
}
|
|
95
|
+
async *generateMessages(_args) {
|
|
96
|
+
throw new Error("meshy does not support chat generation");
|
|
97
|
+
}
|
|
98
|
+
async getAvailable3DModels() {
|
|
99
|
+
if (!this.apiKey) {
|
|
100
|
+
log.debug("No Meshy API key configured, returning empty 3D model list");
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
return MESHY_3D_MODELS;
|
|
104
|
+
}
|
|
105
|
+
async textTo3D(params) {
|
|
106
|
+
if (!params.prompt)
|
|
107
|
+
throw new Error("prompt must not be empty");
|
|
108
|
+
if (!this.apiKey)
|
|
109
|
+
throw new Error("Meshy API key is not configured");
|
|
110
|
+
const maxAttempts = this.computeMaxAttempts(params.timeoutSeconds);
|
|
111
|
+
const previewTaskId = await this.submitTextTo3D(params);
|
|
112
|
+
log.debug(`Meshy text-to-3D preview task submitted: ${previewTaskId}`);
|
|
113
|
+
const previewResult = await this.pollTaskStatus(previewTaskId, "/v2/text-to-3d", maxAttempts);
|
|
114
|
+
if (params.enableTextures) {
|
|
115
|
+
const refineTaskId = await this.submitRefine(previewTaskId);
|
|
116
|
+
log.debug(`Meshy text-to-3D refine task submitted: ${refineTaskId}`);
|
|
117
|
+
const refineResult = await this.pollTaskStatus(refineTaskId, "/v2/text-to-3d", maxAttempts);
|
|
118
|
+
return this.downloadResultMesh(refineResult, params.outputFormat);
|
|
119
|
+
}
|
|
120
|
+
return this.downloadResultMesh(previewResult, params.outputFormat);
|
|
121
|
+
}
|
|
122
|
+
async imageTo3D(image, params) {
|
|
123
|
+
if (!image || image.length === 0)
|
|
124
|
+
throw new Error("image must not be empty");
|
|
125
|
+
if (!this.apiKey)
|
|
126
|
+
throw new Error("Meshy API key is not configured");
|
|
127
|
+
const maxAttempts = this.computeMaxAttempts(params.timeoutSeconds);
|
|
128
|
+
const imageUrl = this.encodeImageAsDataUri(image);
|
|
129
|
+
const taskId = await this.submitImageTo3D(imageUrl);
|
|
130
|
+
log.debug(`Meshy image-to-3D task submitted: ${taskId}`);
|
|
131
|
+
const result = await this.pollTaskStatus(taskId, "/v1/image-to-3d", maxAttempts);
|
|
132
|
+
return this.downloadResultMesh(result, params.outputFormat);
|
|
133
|
+
}
|
|
134
|
+
// --- internals ---
|
|
135
|
+
headers() {
|
|
136
|
+
return {
|
|
137
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
138
|
+
"Content-Type": "application/json"
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
computeMaxAttempts(timeoutSeconds) {
|
|
142
|
+
if (!timeoutSeconds || timeoutSeconds <= 0) {
|
|
143
|
+
return this.maxPollAttempts;
|
|
144
|
+
}
|
|
145
|
+
return Math.max(1, Math.floor((timeoutSeconds * 1000) / this.pollIntervalMs));
|
|
146
|
+
}
|
|
147
|
+
encodeImageAsDataUri(image) {
|
|
148
|
+
const mime = detectImageMime(image);
|
|
149
|
+
return `data:${mime};base64,${bytesToBase64(image)}`;
|
|
150
|
+
}
|
|
151
|
+
async submitTextTo3D(params) {
|
|
152
|
+
const payload = {
|
|
153
|
+
mode: "preview",
|
|
154
|
+
prompt: params.prompt
|
|
155
|
+
};
|
|
156
|
+
if (params.artStyle)
|
|
157
|
+
payload.art_style = params.artStyle;
|
|
158
|
+
if (params.negativePrompt)
|
|
159
|
+
payload.negative_prompt = params.negativePrompt;
|
|
160
|
+
if (params.seed != null && params.seed >= 0)
|
|
161
|
+
payload.seed = params.seed;
|
|
162
|
+
return this.submitTask("/v2/text-to-3d", payload);
|
|
163
|
+
}
|
|
164
|
+
async submitImageTo3D(imageUrl) {
|
|
165
|
+
return this.submitTask("/v1/image-to-3d", { image_url: imageUrl });
|
|
166
|
+
}
|
|
167
|
+
async submitRefine(previewTaskId) {
|
|
168
|
+
return this.submitTask("/v2/text-to-3d", {
|
|
169
|
+
mode: "refine",
|
|
170
|
+
preview_task_id: previewTaskId
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
async submitTask(endpoint, payload) {
|
|
174
|
+
const url = `${MESHY_API_BASE_URL}${endpoint}`;
|
|
175
|
+
const res = await fetch(url, {
|
|
176
|
+
method: "POST",
|
|
177
|
+
headers: this.headers(),
|
|
178
|
+
body: JSON.stringify(payload)
|
|
179
|
+
});
|
|
180
|
+
if (res.status !== 200 && res.status !== 202) {
|
|
181
|
+
const errText = await res.text();
|
|
182
|
+
throw new Error(`Meshy API error (${res.status}): ${errText}`);
|
|
183
|
+
}
|
|
184
|
+
const data = (await res.json());
|
|
185
|
+
const taskId = data.result;
|
|
186
|
+
if (typeof taskId !== "string" || !taskId) {
|
|
187
|
+
throw new Error(`Meshy submit returned no task id: ${JSON.stringify(data)}`);
|
|
188
|
+
}
|
|
189
|
+
return taskId;
|
|
190
|
+
}
|
|
191
|
+
async pollTaskStatus(taskId, endpoint, maxAttempts) {
|
|
192
|
+
const url = `${MESHY_API_BASE_URL}${endpoint}/${taskId}`;
|
|
193
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
194
|
+
const res = await fetch(url, { headers: this.headers() });
|
|
195
|
+
if (res.status !== 200) {
|
|
196
|
+
const errText = await res.text();
|
|
197
|
+
throw new Error(`Meshy API poll error (${res.status}): ${errText}`);
|
|
198
|
+
}
|
|
199
|
+
const data = (await res.json());
|
|
200
|
+
const status = String(data.status ?? "").toUpperCase();
|
|
201
|
+
if (status === "SUCCEEDED")
|
|
202
|
+
return data;
|
|
203
|
+
if (status === "FAILED" || status === "EXPIRED") {
|
|
204
|
+
const taskError = data.task_error;
|
|
205
|
+
const message = taskError?.message ?? "Unknown error";
|
|
206
|
+
throw new Error(`Meshy task failed: ${message}`);
|
|
207
|
+
}
|
|
208
|
+
log.debug(`Meshy task ${taskId} status: ${status} (attempt ${attempt + 1}/${maxAttempts})`);
|
|
209
|
+
await new Promise((r) => setTimeout(r, this.pollIntervalMs));
|
|
210
|
+
}
|
|
211
|
+
throw new Error(`Meshy task ${taskId} timed out after ${(maxAttempts * this.pollIntervalMs) / 1000}s`);
|
|
212
|
+
}
|
|
213
|
+
async downloadResultMesh(result, requestedFormat) {
|
|
214
|
+
const format = (requestedFormat ?? DEFAULT_OUTPUT_FORMAT).toLowerCase();
|
|
215
|
+
const modelUrls = result.model_urls;
|
|
216
|
+
const modelUrl = modelUrls?.[format] ?? modelUrls?.[DEFAULT_OUTPUT_FORMAT];
|
|
217
|
+
if (!modelUrl) {
|
|
218
|
+
throw new Error(`No model URL found in Meshy response for format: ${format}`);
|
|
219
|
+
}
|
|
220
|
+
const dlRes = await fetch(modelUrl);
|
|
221
|
+
if (!dlRes.ok) {
|
|
222
|
+
const errText = await dlRes.text().catch(() => "");
|
|
223
|
+
throw new Error(`Failed to download Meshy result (${dlRes.status}): ${errText}`);
|
|
224
|
+
}
|
|
225
|
+
const bytes = new Uint8Array(await dlRes.arrayBuffer());
|
|
226
|
+
log.debug(`Downloaded ${bytes.length} bytes of 3D model data from Meshy`);
|
|
227
|
+
return bytes;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=meshy-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshy-provider.js","sourceRoot":"","sources":["../../src/providers/meshy-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MiniMax provider — exposes MiniMax's full multimodal stack through the
|
|
3
|
+
* standard BaseProvider interface.
|
|
4
|
+
*
|
|
5
|
+
* Chat inherits the OpenAI-compatible path (MiniMax-M2.x models), while image,
|
|
6
|
+
* video, and speech generation go through MiniMax's own REST endpoints. Video
|
|
7
|
+
* uses the async task + File API download pattern.
|
|
8
|
+
*
|
|
9
|
+
* Docs: https://platform.minimax.io/docs/api-reference/api-overview
|
|
10
|
+
*/
|
|
11
|
+
import OpenAI from "openai";
|
|
12
|
+
import { OpenAIProvider } from "./openai-provider.js";
|
|
13
|
+
import type { ASRModel, EmbeddingModel, EncodedAudioResult, ImageModel, ImageToImageParams, ImageToVideoParams, LanguageModel, StreamingAudioChunk, TextToImageParams, TextToVideoParams, TTSModel, VideoModel } from "./types.js";
|
|
14
|
+
interface MinimaxProviderOptions {
|
|
15
|
+
client?: OpenAI;
|
|
16
|
+
clientFactory?: (apiKey: string) => OpenAI;
|
|
17
|
+
fetchFn?: typeof fetch;
|
|
18
|
+
}
|
|
19
|
+
export declare class MinimaxProvider extends OpenAIProvider {
|
|
20
|
+
static requiredSecrets(): string[];
|
|
21
|
+
private readonly _minimaxFetch;
|
|
22
|
+
constructor(secrets: {
|
|
23
|
+
MINIMAX_API_KEY?: string;
|
|
24
|
+
}, options?: MinimaxProviderOptions);
|
|
25
|
+
getContainerEnv(): Record<string, string>;
|
|
26
|
+
hasToolSupport(_model: string): Promise<boolean>;
|
|
27
|
+
private headers;
|
|
28
|
+
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
29
|
+
getAvailableImageModels(): Promise<ImageModel[]>;
|
|
30
|
+
getAvailableVideoModels(): Promise<VideoModel[]>;
|
|
31
|
+
getAvailableTTSModels(): Promise<TTSModel[]>;
|
|
32
|
+
/** MiniMax does not expose a public ASR endpoint we support here. */
|
|
33
|
+
getAvailableASRModels(): Promise<ASRModel[]>;
|
|
34
|
+
/** Embeddings require a MiniMax GroupId we don't manage; leave disabled. */
|
|
35
|
+
getAvailableEmbeddingModels(): Promise<EmbeddingModel[]>;
|
|
36
|
+
automaticSpeechRecognition(_args: Parameters<OpenAIProvider["automaticSpeechRecognition"]>[0]): Promise<import("./types.js").ASRResult>;
|
|
37
|
+
generateEmbedding(_args: Parameters<OpenAIProvider["generateEmbedding"]>[0]): Promise<number[][]>;
|
|
38
|
+
textToImage(params: TextToImageParams): Promise<Uint8Array>;
|
|
39
|
+
textToImages(params: TextToImageParams, numImages: number): Promise<Uint8Array[]>;
|
|
40
|
+
imageToImage(image: Uint8Array, params: ImageToImageParams): Promise<Uint8Array>;
|
|
41
|
+
imageToImages(image: Uint8Array, params: ImageToImageParams, numImages: number): Promise<Uint8Array[]>;
|
|
42
|
+
private _imageToImageAsTextParams;
|
|
43
|
+
private _generateImages;
|
|
44
|
+
textToVideo(params: TextToVideoParams): Promise<Uint8Array>;
|
|
45
|
+
imageToVideo(image: Uint8Array, params: ImageToVideoParams): Promise<Uint8Array>;
|
|
46
|
+
private _generateVideo;
|
|
47
|
+
private _pollVideoTask;
|
|
48
|
+
private _downloadFile;
|
|
49
|
+
textToSpeechEncoded(args: {
|
|
50
|
+
text: string;
|
|
51
|
+
model: string;
|
|
52
|
+
voice?: string;
|
|
53
|
+
speed?: number;
|
|
54
|
+
audioFormat?: string;
|
|
55
|
+
}): Promise<EncodedAudioResult | null>;
|
|
56
|
+
textToSpeech(args: {
|
|
57
|
+
text: string;
|
|
58
|
+
model: string;
|
|
59
|
+
voice?: string;
|
|
60
|
+
speed?: number;
|
|
61
|
+
audioFormat?: string;
|
|
62
|
+
}): AsyncGenerator<StreamingAudioChunk>;
|
|
63
|
+
private _synthesize;
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=minimax-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimax-provider.d.ts","sourceRoot":"","sources":["../../src/providers/minimax-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACX,MAAM,YAAY,CAAC;AA8GpB,UAAU,sBAAsB;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAiBD,qBAAa,eAAgB,SAAQ,cAAc;WACjC,eAAe,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAG3C,OAAO,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,EACrC,OAAO,GAAE,sBAA2B;IA4B7B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAInC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/D,OAAO,CAAC,OAAO;IAWA,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAwBtD,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAWhD,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA0ChD,qBAAqB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAyC3D,qEAAqE;IACtD,qBAAqB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI3D,4EAA4E;IAC7D,2BAA2B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxD,0BAA0B,CACvC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC,GACjE,OAAO,CAAC,OAAO,YAAY,EAAE,SAAS,CAAC;IAI3B,iBAAiB,CAC9B,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAQP,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAK3D,YAAY,CACzB,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IAIT,YAAY,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC;IASP,aAAa,CAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IAQxB,OAAO,CAAC,yBAAyB;YAiBnB,eAAe;IAmFd,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ3D,YAAY,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC;YASR,cAAc;YAqDd,cAAc;YAoCd,aAAa;IAgCZ,mBAAmB,CAAC,IAAI,EAAE;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAqBtB,YAAY,CAAC,IAAI,EAAE;QACjC,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,cAAc,CAAC,mBAAmB,CAAC;YAQzB,WAAW;CAmD1B"}
|