@plasius/ai 1.1.6 → 1.1.7
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/CHANGELOG.md +3 -0
- package/README.md +17 -2
- package/dist/platform/grok-adapter.d.ts +13 -0
- package/dist/platform/grok-adapter.d.ts.map +1 -0
- package/dist/platform/grok-adapter.js +21 -0
- package/dist/platform/index.d.ts +6 -0
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +3 -0
- package/dist/platform/meta-ai-adapter.d.ts +12 -0
- package/dist/platform/meta-ai-adapter.d.ts.map +1 -0
- package/dist/platform/meta-ai-adapter.js +19 -0
- package/dist/platform/pixelverse-adapter.d.ts +27 -0
- package/dist/platform/pixelverse-adapter.d.ts.map +1 -0
- package/dist/platform/pixelverse-adapter.js +108 -0
- package/dist-cjs/platform/grok-adapter.d.ts +13 -0
- package/dist-cjs/platform/grok-adapter.d.ts.map +1 -0
- package/dist-cjs/platform/grok-adapter.js +24 -0
- package/dist-cjs/platform/index.d.ts +6 -0
- package/dist-cjs/platform/index.d.ts.map +1 -1
- package/dist-cjs/platform/index.js +7 -1
- package/dist-cjs/platform/meta-ai-adapter.d.ts +12 -0
- package/dist-cjs/platform/meta-ai-adapter.d.ts.map +1 -0
- package/dist-cjs/platform/meta-ai-adapter.js +22 -0
- package/dist-cjs/platform/pixelverse-adapter.d.ts +27 -0
- package/dist-cjs/platform/pixelverse-adapter.d.ts.map +1 -0
- package/dist-cjs/platform/pixelverse-adapter.js +111 -0
- package/docs/api-reference.md +22 -0
- package/docs/architecture.md +1 -1
- package/docs/providers.md +9 -0
- package/package.json +1 -1
- package/src/platform/grok-adapter.ts +39 -0
- package/src/platform/index.ts +6 -0
- package/src/platform/meta-ai-adapter.ts +36 -0
- package/src/platform/pixelverse-adapter.ts +211 -0
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,9 @@ The format is based on **[Keep a Changelog](https://keepachangelog.com/en/1.1.0/
|
|
|
12
12
|
- Added built-in provider adapter factories:
|
|
13
13
|
- `createOpenAIAdapter` for chat, speech synthesis, transcription, image generation, and model generation.
|
|
14
14
|
- `createGeminiAdapter` for chat, image generation, and model generation.
|
|
15
|
+
- `createGrokAdapter` for xAI Grok chat/image/model generation.
|
|
16
|
+
- `createMetaAIAdapter` for Meta AI (Llama-compatible) chat/model generation.
|
|
17
|
+
- `createPixelverseAdapter` for Pixelverse video generation and balance.
|
|
15
18
|
- Added shared HTTP resilience policy contracts (`HttpClientPolicy`) and transport helper for consistent retry/timeout behavior across adapters.
|
|
16
19
|
- Added generic multi-capability adapter contracts (`AICapabilityAdapter`, request context/request types) and `createAdapterPlatform` for routing chat/voice/image/video/model operations.
|
|
17
20
|
- Added `AICapability.Model`, `ModelCompletion`, `modelCompletionSchema`, and `AIPlatform.generateModel(...)`.
|
package/README.md
CHANGED
|
@@ -95,6 +95,9 @@ void platform;
|
|
|
95
95
|
- `createAdapterPlatform`
|
|
96
96
|
- `createOpenAIAdapter`
|
|
97
97
|
- `createGeminiAdapter`
|
|
98
|
+
- `createGrokAdapter`
|
|
99
|
+
- `createMetaAIAdapter`
|
|
100
|
+
- `createPixelverseAdapter`
|
|
98
101
|
- Generic video-provider adapter contracts and helpers:
|
|
99
102
|
- `VideoProviderAdapter`
|
|
100
103
|
- `VideoGenerationRequest`
|
|
@@ -137,7 +140,10 @@ import {
|
|
|
137
140
|
AICapability,
|
|
138
141
|
createAdapterPlatform,
|
|
139
142
|
createGeminiAdapter,
|
|
143
|
+
createGrokAdapter,
|
|
144
|
+
createMetaAIAdapter,
|
|
140
145
|
createOpenAIAdapter,
|
|
146
|
+
createPixelverseAdapter,
|
|
141
147
|
} from "@plasius/ai";
|
|
142
148
|
|
|
143
149
|
const openAIAdapter = createOpenAIAdapter({
|
|
@@ -171,17 +177,26 @@ const geminiAdapter = createGeminiAdapter({
|
|
|
171
177
|
},
|
|
172
178
|
});
|
|
173
179
|
|
|
180
|
+
const grokAdapter = createGrokAdapter();
|
|
181
|
+
const metaAdapter = createMetaAIAdapter();
|
|
182
|
+
const pixelverseAdapter = createPixelverseAdapter();
|
|
183
|
+
|
|
174
184
|
const platform = await createAdapterPlatform("user-1", {
|
|
175
|
-
adapters: [openAIAdapter, geminiAdapter],
|
|
185
|
+
adapters: [openAIAdapter, geminiAdapter, grokAdapter, metaAdapter, pixelverseAdapter],
|
|
176
186
|
apiKeys: {
|
|
177
187
|
openai: process.env.OPENAI_API_KEY ?? "",
|
|
178
188
|
gemini: process.env.GEMINI_API_KEY ?? "",
|
|
189
|
+
grok: process.env.XAI_API_KEY ?? "",
|
|
190
|
+
"meta-ai": process.env.META_AI_API_KEY ?? "",
|
|
191
|
+
pixelverse: process.env.PIXELVERSE_API_KEY ?? "",
|
|
179
192
|
},
|
|
180
193
|
defaultAdapterByCapability: {
|
|
181
|
-
[AICapability.Chat]: "
|
|
194
|
+
[AICapability.Chat]: "grok",
|
|
182
195
|
[AICapability.Speech]: "openai",
|
|
183
196
|
[AICapability.Image]: "gemini",
|
|
184
197
|
[AICapability.Model]: "gemini",
|
|
198
|
+
[AICapability.Video]: "pixelverse",
|
|
199
|
+
[AICapability.Balance]: "pixelverse",
|
|
185
200
|
},
|
|
186
201
|
});
|
|
187
202
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AICapabilityAdapter } from "./index.js";
|
|
2
|
+
import { type OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
3
|
+
export interface GrokAdapterOptions extends Omit<OpenAIAdapterOptions, "id" | "baseUrl" | "defaultModels"> {
|
|
4
|
+
id?: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
defaultModels?: {
|
|
7
|
+
chat?: string;
|
|
8
|
+
image?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare function createGrokAdapter(options?: GrokAdapterOptions): AICapabilityAdapter;
|
|
13
|
+
//# sourceMappingURL=grok-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok-adapter.d.ts","sourceRoot":"","sources":["../../src/platform/grok-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAErF,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,CAAC;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,mBAAmB,CAmBrB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AICapability, } from "./index.js";
|
|
2
|
+
import { createOpenAIAdapter } from "./openai-adapter.js";
|
|
3
|
+
export function createGrokAdapter(options = {}) {
|
|
4
|
+
const base = createOpenAIAdapter({
|
|
5
|
+
...options,
|
|
6
|
+
id: options.id ?? "grok",
|
|
7
|
+
baseUrl: options.baseUrl ?? "https://api.x.ai/v1",
|
|
8
|
+
defaultModels: {
|
|
9
|
+
chat: options.defaultModels?.chat ?? "grok-3-mini",
|
|
10
|
+
image: options.defaultModels?.image ?? "grok-2-image-1212",
|
|
11
|
+
model: options.defaultModels?.model ?? "grok-3-mini",
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
id: base.id,
|
|
16
|
+
capabilities: [AICapability.Chat, AICapability.Image, AICapability.Model],
|
|
17
|
+
chatWithAI: base.chatWithAI,
|
|
18
|
+
generateImage: base.generateImage,
|
|
19
|
+
generateModel: base.generateModel,
|
|
20
|
+
};
|
|
21
|
+
}
|
package/dist/platform/index.d.ts
CHANGED
|
@@ -94,4 +94,10 @@ export type { OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
|
94
94
|
export { createOpenAIAdapter } from "./openai-adapter.js";
|
|
95
95
|
export type { GeminiAdapterOptions } from "./gemini-adapter.js";
|
|
96
96
|
export { createGeminiAdapter } from "./gemini-adapter.js";
|
|
97
|
+
export type { GrokAdapterOptions } from "./grok-adapter.js";
|
|
98
|
+
export { createGrokAdapter } from "./grok-adapter.js";
|
|
99
|
+
export type { MetaAIAdapterOptions } from "./meta-ai-adapter.js";
|
|
100
|
+
export { createMetaAIAdapter } from "./meta-ai-adapter.js";
|
|
101
|
+
export type { PixelverseAdapterOptions } from "./pixelverse-adapter.js";
|
|
102
|
+
export { createPixelverseAdapter } from "./pixelverse-adapter.js";
|
|
97
103
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"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"}
|
package/dist/platform/index.js
CHANGED
|
@@ -147,3 +147,6 @@ export { createAdapterPlatform } from "./adapter-platform.js";
|
|
|
147
147
|
export { createVideoProviderPlatform } from "./video-provider-platform.js";
|
|
148
148
|
export { createOpenAIAdapter } from "./openai-adapter.js";
|
|
149
149
|
export { createGeminiAdapter } from "./gemini-adapter.js";
|
|
150
|
+
export { createGrokAdapter } from "./grok-adapter.js";
|
|
151
|
+
export { createMetaAIAdapter } from "./meta-ai-adapter.js";
|
|
152
|
+
export { createPixelverseAdapter } from "./pixelverse-adapter.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AICapabilityAdapter } from "./index.js";
|
|
2
|
+
import { type OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
3
|
+
export interface MetaAIAdapterOptions extends Omit<OpenAIAdapterOptions, "id" | "baseUrl" | "defaultModels"> {
|
|
4
|
+
id?: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
defaultModels?: {
|
|
7
|
+
chat?: string;
|
|
8
|
+
model?: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare function createMetaAIAdapter(options?: MetaAIAdapterOptions): AICapabilityAdapter;
|
|
12
|
+
//# sourceMappingURL=meta-ai-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-ai-adapter.d.ts","sourceRoot":"","sources":["../../src/platform/meta-ai-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAErF,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,CAAC;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAiBrB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AICapability, } from "./index.js";
|
|
2
|
+
import { createOpenAIAdapter } from "./openai-adapter.js";
|
|
3
|
+
export function createMetaAIAdapter(options = {}) {
|
|
4
|
+
const base = createOpenAIAdapter({
|
|
5
|
+
...options,
|
|
6
|
+
id: options.id ?? "meta-ai",
|
|
7
|
+
baseUrl: options.baseUrl ?? "https://api.llama.com/compat/v1",
|
|
8
|
+
defaultModels: {
|
|
9
|
+
chat: options.defaultModels?.chat ?? "Llama-3.3-70B-Instruct",
|
|
10
|
+
model: options.defaultModels?.model ?? "Llama-3.3-70B-Instruct",
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
id: base.id,
|
|
15
|
+
capabilities: [AICapability.Chat, AICapability.Model],
|
|
16
|
+
chatWithAI: base.chatWithAI,
|
|
17
|
+
generateModel: base.generateModel,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type AICapabilityAdapter } from "./index.js";
|
|
2
|
+
import type { HttpVideoProviderAdapterConfig, VideoGenerationRequest } from "./video-provider-adapter.js";
|
|
3
|
+
export interface PixelverseAdapterOptions {
|
|
4
|
+
id?: string;
|
|
5
|
+
apiBaseUrl?: string;
|
|
6
|
+
fetchFn?: typeof fetch;
|
|
7
|
+
httpPolicy?: HttpVideoProviderAdapterConfig["httpPolicy"];
|
|
8
|
+
polling?: {
|
|
9
|
+
maxRetries?: number;
|
|
10
|
+
delayMs?: number;
|
|
11
|
+
};
|
|
12
|
+
defaultVideoRequest?: Partial<Omit<VideoGenerationRequest, "imageId" | "prompt">>;
|
|
13
|
+
paths?: {
|
|
14
|
+
uploadImagePath?: string;
|
|
15
|
+
generateVideoPath?: string;
|
|
16
|
+
getVideoResultPath?: (videoId: number) => string;
|
|
17
|
+
getBalancePath?: string;
|
|
18
|
+
};
|
|
19
|
+
mapUploadImageId?: HttpVideoProviderAdapterConfig["mapUploadImageId"];
|
|
20
|
+
mapGeneratedVideoId?: HttpVideoProviderAdapterConfig["mapGeneratedVideoId"];
|
|
21
|
+
mapVideoResult?: HttpVideoProviderAdapterConfig["mapVideoResult"];
|
|
22
|
+
mapBalance?: HttpVideoProviderAdapterConfig["mapBalance"];
|
|
23
|
+
mapGenerateRequestBody?: HttpVideoProviderAdapterConfig["mapGenerateRequestBody"];
|
|
24
|
+
additionalHeaders?: HttpVideoProviderAdapterConfig["additionalHeaders"];
|
|
25
|
+
}
|
|
26
|
+
export declare function createPixelverseAdapter(options?: PixelverseAdapterOptions): AICapabilityAdapter;
|
|
27
|
+
//# sourceMappingURL=pixelverse-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pixelverse-adapter.d.ts","sourceRoot":"","sources":["../../src/platform/pixelverse-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,mBAAmB,EAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,8BAA8B,EAE9B,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AAGrC,MAAM,WAAW,wBAAwB;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,UAAU,CAAC,EAAE,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,mBAAmB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,EAAE;QACN,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;QACjD,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,gBAAgB,CAAC,EAAE,8BAA8B,CAAC,kBAAkB,CAAC,CAAC;IACtE,mBAAmB,CAAC,EAAE,8BAA8B,CAAC,qBAAqB,CAAC,CAAC;IAC5E,cAAc,CAAC,EAAE,8BAA8B,CAAC,gBAAgB,CAAC,CAAC;IAClE,UAAU,CAAC,EAAE,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC1D,sBAAsB,CAAC,EAAE,8BAA8B,CAAC,wBAAwB,CAAC,CAAC;IAClF,iBAAiB,CAAC,EAAE,8BAA8B,CAAC,mBAAmB,CAAC,CAAC;CACzE;AAyDD,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAA6B,GACrC,mBAAmB,CA+GrB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { performance } from "node:perf_hooks";
|
|
2
|
+
import { AICapability, } from "./index.js";
|
|
3
|
+
import { createHttpVideoProviderAdapter } from "./video-provider-adapter.js";
|
|
4
|
+
function normalizeBaseUrl(baseUrl) {
|
|
5
|
+
const normalized = (baseUrl ?? "https://api.pixelverse.ai").trim();
|
|
6
|
+
return normalized.endsWith("/") ? normalized.slice(0, -1) : normalized;
|
|
7
|
+
}
|
|
8
|
+
function createCompletionBase(type, model, requestor, durationMs, usage) {
|
|
9
|
+
return {
|
|
10
|
+
partitionKey: requestor,
|
|
11
|
+
id: crypto.randomUUID(),
|
|
12
|
+
type,
|
|
13
|
+
model,
|
|
14
|
+
createdAt: new Date().toISOString(),
|
|
15
|
+
durationMs,
|
|
16
|
+
usage: usage ?? {},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
async function waitForCompletion(getVideoResult, videoId, apiKey, maxRetries, delayMs, fetchFn) {
|
|
20
|
+
for (let attempt = 0; attempt < maxRetries; attempt += 1) {
|
|
21
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
22
|
+
const result = await getVideoResult(videoId, {
|
|
23
|
+
apiKey,
|
|
24
|
+
traceId: crypto.randomUUID(),
|
|
25
|
+
fetchFn,
|
|
26
|
+
});
|
|
27
|
+
if (result.state === "completed" && result.videoUrl) {
|
|
28
|
+
return result.videoUrl;
|
|
29
|
+
}
|
|
30
|
+
if (result.state === "failed") {
|
|
31
|
+
throw new Error("Pixelverse video generation failed.");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
throw new Error("Timed out waiting for Pixelverse video completion.");
|
|
35
|
+
}
|
|
36
|
+
export function createPixelverseAdapter(options = {}) {
|
|
37
|
+
const providerId = (options.id ?? "pixelverse").trim() || "pixelverse";
|
|
38
|
+
const baseUrl = normalizeBaseUrl(options.apiBaseUrl);
|
|
39
|
+
const httpAdapter = createHttpVideoProviderAdapter({
|
|
40
|
+
uploadImagePath: options.paths?.uploadImagePath ?? `${baseUrl}/openapi/v1/image/upload`,
|
|
41
|
+
generateVideoPath: options.paths?.generateVideoPath ?? `${baseUrl}/openapi/v1/video/generate`,
|
|
42
|
+
getVideoResultPath: options.paths?.getVideoResultPath ??
|
|
43
|
+
((videoId) => `${baseUrl}/openapi/v1/video/result/${videoId}`),
|
|
44
|
+
getBalancePath: options.paths?.getBalancePath ?? `${baseUrl}/openapi/v1/account/balance`,
|
|
45
|
+
httpPolicy: options.httpPolicy,
|
|
46
|
+
mapUploadImageId: options.mapUploadImageId,
|
|
47
|
+
mapGeneratedVideoId: options.mapGeneratedVideoId,
|
|
48
|
+
mapVideoResult: options.mapVideoResult,
|
|
49
|
+
mapBalance: options.mapBalance,
|
|
50
|
+
mapGenerateRequestBody: options.mapGenerateRequestBody,
|
|
51
|
+
additionalHeaders: options.additionalHeaders,
|
|
52
|
+
});
|
|
53
|
+
const maxRetries = options.polling?.maxRetries ?? 20;
|
|
54
|
+
const delayMs = options.polling?.delayMs ?? 3000;
|
|
55
|
+
const produceVideo = async (request) => {
|
|
56
|
+
const startedAt = performance.now();
|
|
57
|
+
const combinedPrompt = request.context
|
|
58
|
+
? `${request.context}\n\n${request.input}`
|
|
59
|
+
: request.input;
|
|
60
|
+
const uploaded = await httpAdapter.uploadImage(request.image, {
|
|
61
|
+
apiKey: request.apiKey,
|
|
62
|
+
traceId: request.traceId,
|
|
63
|
+
fetchFn: options.fetchFn,
|
|
64
|
+
});
|
|
65
|
+
const generated = await httpAdapter.generateVideo({
|
|
66
|
+
imageId: uploaded.imageId,
|
|
67
|
+
prompt: combinedPrompt,
|
|
68
|
+
model: request.model,
|
|
69
|
+
...options.defaultVideoRequest,
|
|
70
|
+
}, {
|
|
71
|
+
apiKey: request.apiKey,
|
|
72
|
+
traceId: crypto.randomUUID(),
|
|
73
|
+
fetchFn: options.fetchFn,
|
|
74
|
+
});
|
|
75
|
+
const videoUrl = await waitForCompletion(httpAdapter.getVideoResult, generated.videoId, request.apiKey, maxRetries, delayMs, options.fetchFn);
|
|
76
|
+
const durationMs = performance.now() - startedAt;
|
|
77
|
+
const base = createCompletionBase("video", request.model, request.userId, durationMs, { providerVideoId: generated.videoId });
|
|
78
|
+
return {
|
|
79
|
+
...base,
|
|
80
|
+
url: new URL(videoUrl),
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
const checkBalance = async (request) => {
|
|
84
|
+
const startedAt = performance.now();
|
|
85
|
+
const providerBalance = httpAdapter.getBalance
|
|
86
|
+
? await httpAdapter.getBalance({
|
|
87
|
+
apiKey: request.apiKey,
|
|
88
|
+
traceId: request.traceId,
|
|
89
|
+
fetchFn: options.fetchFn,
|
|
90
|
+
})
|
|
91
|
+
: {
|
|
92
|
+
monthlyCredit: 0,
|
|
93
|
+
packageCredit: 0,
|
|
94
|
+
};
|
|
95
|
+
const durationMs = performance.now() - startedAt;
|
|
96
|
+
const base = createCompletionBase("balanceCompletion", "", request.userId, durationMs);
|
|
97
|
+
return {
|
|
98
|
+
...base,
|
|
99
|
+
balance: providerBalance.monthlyCredit + providerBalance.packageCredit,
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
return {
|
|
103
|
+
id: providerId,
|
|
104
|
+
capabilities: [AICapability.Video, AICapability.Balance],
|
|
105
|
+
produceVideo,
|
|
106
|
+
checkBalance,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AICapabilityAdapter } from "./index.js";
|
|
2
|
+
import { type OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
3
|
+
export interface GrokAdapterOptions extends Omit<OpenAIAdapterOptions, "id" | "baseUrl" | "defaultModels"> {
|
|
4
|
+
id?: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
defaultModels?: {
|
|
7
|
+
chat?: string;
|
|
8
|
+
image?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare function createGrokAdapter(options?: GrokAdapterOptions): AICapabilityAdapter;
|
|
13
|
+
//# sourceMappingURL=grok-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok-adapter.d.ts","sourceRoot":"","sources":["../../src/platform/grok-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAErF,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,CAAC;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,mBAAmB,CAmBrB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createGrokAdapter = createGrokAdapter;
|
|
4
|
+
const index_js_1 = require("./index.js");
|
|
5
|
+
const openai_adapter_js_1 = require("./openai-adapter.js");
|
|
6
|
+
function createGrokAdapter(options = {}) {
|
|
7
|
+
const base = (0, openai_adapter_js_1.createOpenAIAdapter)({
|
|
8
|
+
...options,
|
|
9
|
+
id: options.id ?? "grok",
|
|
10
|
+
baseUrl: options.baseUrl ?? "https://api.x.ai/v1",
|
|
11
|
+
defaultModels: {
|
|
12
|
+
chat: options.defaultModels?.chat ?? "grok-3-mini",
|
|
13
|
+
image: options.defaultModels?.image ?? "grok-2-image-1212",
|
|
14
|
+
model: options.defaultModels?.model ?? "grok-3-mini",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
id: base.id,
|
|
19
|
+
capabilities: [index_js_1.AICapability.Chat, index_js_1.AICapability.Image, index_js_1.AICapability.Model],
|
|
20
|
+
chatWithAI: base.chatWithAI,
|
|
21
|
+
generateImage: base.generateImage,
|
|
22
|
+
generateModel: base.generateModel,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -94,4 +94,10 @@ export type { OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
|
94
94
|
export { createOpenAIAdapter } from "./openai-adapter.js";
|
|
95
95
|
export type { GeminiAdapterOptions } from "./gemini-adapter.js";
|
|
96
96
|
export { createGeminiAdapter } from "./gemini-adapter.js";
|
|
97
|
+
export type { GrokAdapterOptions } from "./grok-adapter.js";
|
|
98
|
+
export { createGrokAdapter } from "./grok-adapter.js";
|
|
99
|
+
export type { MetaAIAdapterOptions } from "./meta-ai-adapter.js";
|
|
100
|
+
export { createMetaAIAdapter } from "./meta-ai-adapter.js";
|
|
101
|
+
export type { PixelverseAdapterOptions } from "./pixelverse-adapter.js";
|
|
102
|
+
export { createPixelverseAdapter } from "./pixelverse-adapter.js";
|
|
97
103
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createGeminiAdapter = exports.createOpenAIAdapter = exports.createVideoProviderPlatform = exports.createAdapterPlatform = exports.createHttpVideoProviderAdapter = exports.AICapability = exports.balanceCompletionSchema = exports.modelCompletionSchema = exports.videoCompletionSchema = exports.speechCompletionSchema = exports.imageCompletionSchema = exports.textCompletionSchema = exports.chatCompletionSchema = exports.completionSchema = void 0;
|
|
3
|
+
exports.createPixelverseAdapter = exports.createMetaAIAdapter = exports.createGrokAdapter = exports.createGeminiAdapter = exports.createOpenAIAdapter = exports.createVideoProviderPlatform = exports.createAdapterPlatform = exports.createHttpVideoProviderAdapter = exports.AICapability = exports.balanceCompletionSchema = exports.modelCompletionSchema = exports.videoCompletionSchema = exports.speechCompletionSchema = exports.imageCompletionSchema = exports.textCompletionSchema = exports.chatCompletionSchema = exports.completionSchema = void 0;
|
|
4
4
|
const schema_1 = require("@plasius/schema");
|
|
5
5
|
exports.completionSchema = (0, schema_1.createSchema)({
|
|
6
6
|
id: schema_1.field
|
|
@@ -155,3 +155,9 @@ var openai_adapter_js_1 = require("./openai-adapter.js");
|
|
|
155
155
|
Object.defineProperty(exports, "createOpenAIAdapter", { enumerable: true, get: function () { return openai_adapter_js_1.createOpenAIAdapter; } });
|
|
156
156
|
var gemini_adapter_js_1 = require("./gemini-adapter.js");
|
|
157
157
|
Object.defineProperty(exports, "createGeminiAdapter", { enumerable: true, get: function () { return gemini_adapter_js_1.createGeminiAdapter; } });
|
|
158
|
+
var grok_adapter_js_1 = require("./grok-adapter.js");
|
|
159
|
+
Object.defineProperty(exports, "createGrokAdapter", { enumerable: true, get: function () { return grok_adapter_js_1.createGrokAdapter; } });
|
|
160
|
+
var meta_ai_adapter_js_1 = require("./meta-ai-adapter.js");
|
|
161
|
+
Object.defineProperty(exports, "createMetaAIAdapter", { enumerable: true, get: function () { return meta_ai_adapter_js_1.createMetaAIAdapter; } });
|
|
162
|
+
var pixelverse_adapter_js_1 = require("./pixelverse-adapter.js");
|
|
163
|
+
Object.defineProperty(exports, "createPixelverseAdapter", { enumerable: true, get: function () { return pixelverse_adapter_js_1.createPixelverseAdapter; } });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AICapabilityAdapter } from "./index.js";
|
|
2
|
+
import { type OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
3
|
+
export interface MetaAIAdapterOptions extends Omit<OpenAIAdapterOptions, "id" | "baseUrl" | "defaultModels"> {
|
|
4
|
+
id?: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
defaultModels?: {
|
|
7
|
+
chat?: string;
|
|
8
|
+
model?: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare function createMetaAIAdapter(options?: MetaAIAdapterOptions): AICapabilityAdapter;
|
|
12
|
+
//# sourceMappingURL=meta-ai-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-ai-adapter.d.ts","sourceRoot":"","sources":["../../src/platform/meta-ai-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAErF,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,CAAC;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAiBrB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMetaAIAdapter = createMetaAIAdapter;
|
|
4
|
+
const index_js_1 = require("./index.js");
|
|
5
|
+
const openai_adapter_js_1 = require("./openai-adapter.js");
|
|
6
|
+
function createMetaAIAdapter(options = {}) {
|
|
7
|
+
const base = (0, openai_adapter_js_1.createOpenAIAdapter)({
|
|
8
|
+
...options,
|
|
9
|
+
id: options.id ?? "meta-ai",
|
|
10
|
+
baseUrl: options.baseUrl ?? "https://api.llama.com/compat/v1",
|
|
11
|
+
defaultModels: {
|
|
12
|
+
chat: options.defaultModels?.chat ?? "Llama-3.3-70B-Instruct",
|
|
13
|
+
model: options.defaultModels?.model ?? "Llama-3.3-70B-Instruct",
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
id: base.id,
|
|
18
|
+
capabilities: [index_js_1.AICapability.Chat, index_js_1.AICapability.Model],
|
|
19
|
+
chatWithAI: base.chatWithAI,
|
|
20
|
+
generateModel: base.generateModel,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type AICapabilityAdapter } from "./index.js";
|
|
2
|
+
import type { HttpVideoProviderAdapterConfig, VideoGenerationRequest } from "./video-provider-adapter.js";
|
|
3
|
+
export interface PixelverseAdapterOptions {
|
|
4
|
+
id?: string;
|
|
5
|
+
apiBaseUrl?: string;
|
|
6
|
+
fetchFn?: typeof fetch;
|
|
7
|
+
httpPolicy?: HttpVideoProviderAdapterConfig["httpPolicy"];
|
|
8
|
+
polling?: {
|
|
9
|
+
maxRetries?: number;
|
|
10
|
+
delayMs?: number;
|
|
11
|
+
};
|
|
12
|
+
defaultVideoRequest?: Partial<Omit<VideoGenerationRequest, "imageId" | "prompt">>;
|
|
13
|
+
paths?: {
|
|
14
|
+
uploadImagePath?: string;
|
|
15
|
+
generateVideoPath?: string;
|
|
16
|
+
getVideoResultPath?: (videoId: number) => string;
|
|
17
|
+
getBalancePath?: string;
|
|
18
|
+
};
|
|
19
|
+
mapUploadImageId?: HttpVideoProviderAdapterConfig["mapUploadImageId"];
|
|
20
|
+
mapGeneratedVideoId?: HttpVideoProviderAdapterConfig["mapGeneratedVideoId"];
|
|
21
|
+
mapVideoResult?: HttpVideoProviderAdapterConfig["mapVideoResult"];
|
|
22
|
+
mapBalance?: HttpVideoProviderAdapterConfig["mapBalance"];
|
|
23
|
+
mapGenerateRequestBody?: HttpVideoProviderAdapterConfig["mapGenerateRequestBody"];
|
|
24
|
+
additionalHeaders?: HttpVideoProviderAdapterConfig["additionalHeaders"];
|
|
25
|
+
}
|
|
26
|
+
export declare function createPixelverseAdapter(options?: PixelverseAdapterOptions): AICapabilityAdapter;
|
|
27
|
+
//# sourceMappingURL=pixelverse-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pixelverse-adapter.d.ts","sourceRoot":"","sources":["../../src/platform/pixelverse-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,mBAAmB,EAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,8BAA8B,EAE9B,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AAGrC,MAAM,WAAW,wBAAwB;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,UAAU,CAAC,EAAE,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,mBAAmB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,EAAE;QACN,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;QACjD,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,gBAAgB,CAAC,EAAE,8BAA8B,CAAC,kBAAkB,CAAC,CAAC;IACtE,mBAAmB,CAAC,EAAE,8BAA8B,CAAC,qBAAqB,CAAC,CAAC;IAC5E,cAAc,CAAC,EAAE,8BAA8B,CAAC,gBAAgB,CAAC,CAAC;IAClE,UAAU,CAAC,EAAE,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC1D,sBAAsB,CAAC,EAAE,8BAA8B,CAAC,wBAAwB,CAAC,CAAC;IAClF,iBAAiB,CAAC,EAAE,8BAA8B,CAAC,mBAAmB,CAAC,CAAC;CACzE;AAyDD,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAA6B,GACrC,mBAAmB,CA+GrB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPixelverseAdapter = createPixelverseAdapter;
|
|
4
|
+
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
5
|
+
const index_js_1 = require("./index.js");
|
|
6
|
+
const video_provider_adapter_js_1 = require("./video-provider-adapter.js");
|
|
7
|
+
function normalizeBaseUrl(baseUrl) {
|
|
8
|
+
const normalized = (baseUrl ?? "https://api.pixelverse.ai").trim();
|
|
9
|
+
return normalized.endsWith("/") ? normalized.slice(0, -1) : normalized;
|
|
10
|
+
}
|
|
11
|
+
function createCompletionBase(type, model, requestor, durationMs, usage) {
|
|
12
|
+
return {
|
|
13
|
+
partitionKey: requestor,
|
|
14
|
+
id: crypto.randomUUID(),
|
|
15
|
+
type,
|
|
16
|
+
model,
|
|
17
|
+
createdAt: new Date().toISOString(),
|
|
18
|
+
durationMs,
|
|
19
|
+
usage: usage ?? {},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function waitForCompletion(getVideoResult, videoId, apiKey, maxRetries, delayMs, fetchFn) {
|
|
23
|
+
for (let attempt = 0; attempt < maxRetries; attempt += 1) {
|
|
24
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
25
|
+
const result = await getVideoResult(videoId, {
|
|
26
|
+
apiKey,
|
|
27
|
+
traceId: crypto.randomUUID(),
|
|
28
|
+
fetchFn,
|
|
29
|
+
});
|
|
30
|
+
if (result.state === "completed" && result.videoUrl) {
|
|
31
|
+
return result.videoUrl;
|
|
32
|
+
}
|
|
33
|
+
if (result.state === "failed") {
|
|
34
|
+
throw new Error("Pixelverse video generation failed.");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
throw new Error("Timed out waiting for Pixelverse video completion.");
|
|
38
|
+
}
|
|
39
|
+
function createPixelverseAdapter(options = {}) {
|
|
40
|
+
const providerId = (options.id ?? "pixelverse").trim() || "pixelverse";
|
|
41
|
+
const baseUrl = normalizeBaseUrl(options.apiBaseUrl);
|
|
42
|
+
const httpAdapter = (0, video_provider_adapter_js_1.createHttpVideoProviderAdapter)({
|
|
43
|
+
uploadImagePath: options.paths?.uploadImagePath ?? `${baseUrl}/openapi/v1/image/upload`,
|
|
44
|
+
generateVideoPath: options.paths?.generateVideoPath ?? `${baseUrl}/openapi/v1/video/generate`,
|
|
45
|
+
getVideoResultPath: options.paths?.getVideoResultPath ??
|
|
46
|
+
((videoId) => `${baseUrl}/openapi/v1/video/result/${videoId}`),
|
|
47
|
+
getBalancePath: options.paths?.getBalancePath ?? `${baseUrl}/openapi/v1/account/balance`,
|
|
48
|
+
httpPolicy: options.httpPolicy,
|
|
49
|
+
mapUploadImageId: options.mapUploadImageId,
|
|
50
|
+
mapGeneratedVideoId: options.mapGeneratedVideoId,
|
|
51
|
+
mapVideoResult: options.mapVideoResult,
|
|
52
|
+
mapBalance: options.mapBalance,
|
|
53
|
+
mapGenerateRequestBody: options.mapGenerateRequestBody,
|
|
54
|
+
additionalHeaders: options.additionalHeaders,
|
|
55
|
+
});
|
|
56
|
+
const maxRetries = options.polling?.maxRetries ?? 20;
|
|
57
|
+
const delayMs = options.polling?.delayMs ?? 3000;
|
|
58
|
+
const produceVideo = async (request) => {
|
|
59
|
+
const startedAt = node_perf_hooks_1.performance.now();
|
|
60
|
+
const combinedPrompt = request.context
|
|
61
|
+
? `${request.context}\n\n${request.input}`
|
|
62
|
+
: request.input;
|
|
63
|
+
const uploaded = await httpAdapter.uploadImage(request.image, {
|
|
64
|
+
apiKey: request.apiKey,
|
|
65
|
+
traceId: request.traceId,
|
|
66
|
+
fetchFn: options.fetchFn,
|
|
67
|
+
});
|
|
68
|
+
const generated = await httpAdapter.generateVideo({
|
|
69
|
+
imageId: uploaded.imageId,
|
|
70
|
+
prompt: combinedPrompt,
|
|
71
|
+
model: request.model,
|
|
72
|
+
...options.defaultVideoRequest,
|
|
73
|
+
}, {
|
|
74
|
+
apiKey: request.apiKey,
|
|
75
|
+
traceId: crypto.randomUUID(),
|
|
76
|
+
fetchFn: options.fetchFn,
|
|
77
|
+
});
|
|
78
|
+
const videoUrl = await waitForCompletion(httpAdapter.getVideoResult, generated.videoId, request.apiKey, maxRetries, delayMs, options.fetchFn);
|
|
79
|
+
const durationMs = node_perf_hooks_1.performance.now() - startedAt;
|
|
80
|
+
const base = createCompletionBase("video", request.model, request.userId, durationMs, { providerVideoId: generated.videoId });
|
|
81
|
+
return {
|
|
82
|
+
...base,
|
|
83
|
+
url: new URL(videoUrl),
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
const checkBalance = async (request) => {
|
|
87
|
+
const startedAt = node_perf_hooks_1.performance.now();
|
|
88
|
+
const providerBalance = httpAdapter.getBalance
|
|
89
|
+
? await httpAdapter.getBalance({
|
|
90
|
+
apiKey: request.apiKey,
|
|
91
|
+
traceId: request.traceId,
|
|
92
|
+
fetchFn: options.fetchFn,
|
|
93
|
+
})
|
|
94
|
+
: {
|
|
95
|
+
monthlyCredit: 0,
|
|
96
|
+
packageCredit: 0,
|
|
97
|
+
};
|
|
98
|
+
const durationMs = node_perf_hooks_1.performance.now() - startedAt;
|
|
99
|
+
const base = createCompletionBase("balanceCompletion", "", request.userId, durationMs);
|
|
100
|
+
return {
|
|
101
|
+
...base,
|
|
102
|
+
balance: providerBalance.monthlyCredit + providerBalance.packageCredit,
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
id: providerId,
|
|
107
|
+
capabilities: [index_js_1.AICapability.Video, index_js_1.AICapability.Balance],
|
|
108
|
+
produceVideo,
|
|
109
|
+
checkBalance,
|
|
110
|
+
};
|
|
111
|
+
}
|
package/docs/api-reference.md
CHANGED
|
@@ -111,6 +111,28 @@ Creates a built-in Gemini adapter implementing:
|
|
|
111
111
|
|
|
112
112
|
`options.httpPolicy` applies retry/timeout behavior to all Gemini adapter HTTP requests.
|
|
113
113
|
|
|
114
|
+
### `createGrokAdapter(options?)`
|
|
115
|
+
|
|
116
|
+
Creates an xAI Grok adapter (OpenAI-compatible transport) implementing:
|
|
117
|
+
|
|
118
|
+
- `chatWithAI`
|
|
119
|
+
- `generateImage`
|
|
120
|
+
- `generateModel`
|
|
121
|
+
|
|
122
|
+
### `createMetaAIAdapter(options?)`
|
|
123
|
+
|
|
124
|
+
Creates a Meta AI adapter (Llama-compatible transport) implementing:
|
|
125
|
+
|
|
126
|
+
- `chatWithAI`
|
|
127
|
+
- `generateModel`
|
|
128
|
+
|
|
129
|
+
### `createPixelverseAdapter(options?)`
|
|
130
|
+
|
|
131
|
+
Creates a Pixelverse adapter implementing:
|
|
132
|
+
|
|
133
|
+
- `produceVideo`
|
|
134
|
+
- `checkBalance`
|
|
135
|
+
|
|
114
136
|
## Exported Schemas
|
|
115
137
|
|
|
116
138
|
- `completionSchema`
|
package/docs/architecture.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
- **Completion contracts**: typed completion outputs normalize chat/text/image/speech/video/model/balance results.
|
|
8
8
|
- **Schema layer**: schema definitions ensure consistent metadata and persistence shape across runtimes.
|
|
9
9
|
- **Adapter composition**: `createAdapterPlatform` routes capabilities across multiple adapters and injects API keys supplied by the package consumer.
|
|
10
|
-
- **Built-in providers**: OpenAI and
|
|
10
|
+
- **Built-in providers**: OpenAI, Gemini, Grok, Meta AI, and Pixelverse adapters are included for out-of-the-box capability wiring.
|
|
11
11
|
- **Resilient transport**: adapters use a shared HTTP resilience policy (timeouts, exponential backoff + jitter, and `Retry-After` handling).
|
|
12
12
|
|
|
13
13
|
## Design Intention
|
package/docs/providers.md
CHANGED
|
@@ -18,6 +18,15 @@ specific provider implementation.
|
|
|
18
18
|
- `createGeminiAdapter(options?)`
|
|
19
19
|
- Default adapter id: `gemini`
|
|
20
20
|
- Capabilities: chat, image generation, model generation
|
|
21
|
+
- `createGrokAdapter(options?)`
|
|
22
|
+
- Default adapter id: `grok`
|
|
23
|
+
- Capabilities: chat, image generation, model generation
|
|
24
|
+
- `createMetaAIAdapter(options?)`
|
|
25
|
+
- Default adapter id: `meta-ai`
|
|
26
|
+
- Capabilities: chat, model generation
|
|
27
|
+
- `createPixelverseAdapter(options?)`
|
|
28
|
+
- Default adapter id: `pixelverse`
|
|
29
|
+
- Capabilities: video generation, balance
|
|
21
30
|
|
|
22
31
|
## Network Citizenship Defaults
|
|
23
32
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AICapability,
|
|
3
|
+
type AICapabilityAdapter,
|
|
4
|
+
} from "./index.js";
|
|
5
|
+
import { createOpenAIAdapter, type OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
6
|
+
|
|
7
|
+
export interface GrokAdapterOptions
|
|
8
|
+
extends Omit<OpenAIAdapterOptions, "id" | "baseUrl" | "defaultModels"> {
|
|
9
|
+
id?: string;
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
defaultModels?: {
|
|
12
|
+
chat?: string;
|
|
13
|
+
image?: string;
|
|
14
|
+
model?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function createGrokAdapter(
|
|
19
|
+
options: GrokAdapterOptions = {}
|
|
20
|
+
): AICapabilityAdapter {
|
|
21
|
+
const base = createOpenAIAdapter({
|
|
22
|
+
...options,
|
|
23
|
+
id: options.id ?? "grok",
|
|
24
|
+
baseUrl: options.baseUrl ?? "https://api.x.ai/v1",
|
|
25
|
+
defaultModels: {
|
|
26
|
+
chat: options.defaultModels?.chat ?? "grok-3-mini",
|
|
27
|
+
image: options.defaultModels?.image ?? "grok-2-image-1212",
|
|
28
|
+
model: options.defaultModels?.model ?? "grok-3-mini",
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
id: base.id,
|
|
34
|
+
capabilities: [AICapability.Chat, AICapability.Image, AICapability.Model],
|
|
35
|
+
chatWithAI: base.chatWithAI,
|
|
36
|
+
generateImage: base.generateImage,
|
|
37
|
+
generateModel: base.generateModel,
|
|
38
|
+
};
|
|
39
|
+
}
|
package/src/platform/index.ts
CHANGED
|
@@ -303,3 +303,9 @@ export type { OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
|
303
303
|
export { createOpenAIAdapter } from "./openai-adapter.js";
|
|
304
304
|
export type { GeminiAdapterOptions } from "./gemini-adapter.js";
|
|
305
305
|
export { createGeminiAdapter } from "./gemini-adapter.js";
|
|
306
|
+
export type { GrokAdapterOptions } from "./grok-adapter.js";
|
|
307
|
+
export { createGrokAdapter } from "./grok-adapter.js";
|
|
308
|
+
export type { MetaAIAdapterOptions } from "./meta-ai-adapter.js";
|
|
309
|
+
export { createMetaAIAdapter } from "./meta-ai-adapter.js";
|
|
310
|
+
export type { PixelverseAdapterOptions } from "./pixelverse-adapter.js";
|
|
311
|
+
export { createPixelverseAdapter } from "./pixelverse-adapter.js";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AICapability,
|
|
3
|
+
type AICapabilityAdapter,
|
|
4
|
+
} from "./index.js";
|
|
5
|
+
import { createOpenAIAdapter, type OpenAIAdapterOptions } from "./openai-adapter.js";
|
|
6
|
+
|
|
7
|
+
export interface MetaAIAdapterOptions
|
|
8
|
+
extends Omit<OpenAIAdapterOptions, "id" | "baseUrl" | "defaultModels"> {
|
|
9
|
+
id?: string;
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
defaultModels?: {
|
|
12
|
+
chat?: string;
|
|
13
|
+
model?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function createMetaAIAdapter(
|
|
18
|
+
options: MetaAIAdapterOptions = {}
|
|
19
|
+
): AICapabilityAdapter {
|
|
20
|
+
const base = createOpenAIAdapter({
|
|
21
|
+
...options,
|
|
22
|
+
id: options.id ?? "meta-ai",
|
|
23
|
+
baseUrl: options.baseUrl ?? "https://api.llama.com/compat/v1",
|
|
24
|
+
defaultModels: {
|
|
25
|
+
chat: options.defaultModels?.chat ?? "Llama-3.3-70B-Instruct",
|
|
26
|
+
model: options.defaultModels?.model ?? "Llama-3.3-70B-Instruct",
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
id: base.id,
|
|
32
|
+
capabilities: [AICapability.Chat, AICapability.Model],
|
|
33
|
+
chatWithAI: base.chatWithAI,
|
|
34
|
+
generateModel: base.generateModel,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { performance } from "node:perf_hooks";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
AICapability,
|
|
5
|
+
type AdapterBalanceRequest,
|
|
6
|
+
type AdapterVideoRequest,
|
|
7
|
+
type AICapabilityAdapter,
|
|
8
|
+
type BalanceCompletion,
|
|
9
|
+
type Completion,
|
|
10
|
+
} from "./index.js";
|
|
11
|
+
import type {
|
|
12
|
+
HttpVideoProviderAdapterConfig,
|
|
13
|
+
ProviderBalance,
|
|
14
|
+
VideoGenerationRequest,
|
|
15
|
+
VideoJobResult,
|
|
16
|
+
} from "./video-provider-adapter.js";
|
|
17
|
+
import { createHttpVideoProviderAdapter } from "./video-provider-adapter.js";
|
|
18
|
+
|
|
19
|
+
export interface PixelverseAdapterOptions {
|
|
20
|
+
id?: string;
|
|
21
|
+
apiBaseUrl?: string;
|
|
22
|
+
fetchFn?: typeof fetch;
|
|
23
|
+
httpPolicy?: HttpVideoProviderAdapterConfig["httpPolicy"];
|
|
24
|
+
polling?: {
|
|
25
|
+
maxRetries?: number;
|
|
26
|
+
delayMs?: number;
|
|
27
|
+
};
|
|
28
|
+
defaultVideoRequest?: Partial<Omit<VideoGenerationRequest, "imageId" | "prompt">>;
|
|
29
|
+
paths?: {
|
|
30
|
+
uploadImagePath?: string;
|
|
31
|
+
generateVideoPath?: string;
|
|
32
|
+
getVideoResultPath?: (videoId: number) => string;
|
|
33
|
+
getBalancePath?: string;
|
|
34
|
+
};
|
|
35
|
+
mapUploadImageId?: HttpVideoProviderAdapterConfig["mapUploadImageId"];
|
|
36
|
+
mapGeneratedVideoId?: HttpVideoProviderAdapterConfig["mapGeneratedVideoId"];
|
|
37
|
+
mapVideoResult?: HttpVideoProviderAdapterConfig["mapVideoResult"];
|
|
38
|
+
mapBalance?: HttpVideoProviderAdapterConfig["mapBalance"];
|
|
39
|
+
mapGenerateRequestBody?: HttpVideoProviderAdapterConfig["mapGenerateRequestBody"];
|
|
40
|
+
additionalHeaders?: HttpVideoProviderAdapterConfig["additionalHeaders"];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function normalizeBaseUrl(baseUrl: string | undefined): string {
|
|
44
|
+
const normalized = (baseUrl ?? "https://api.pixelverse.ai").trim();
|
|
45
|
+
return normalized.endsWith("/") ? normalized.slice(0, -1) : normalized;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function createCompletionBase(
|
|
49
|
+
type: string,
|
|
50
|
+
model: string,
|
|
51
|
+
requestor: string,
|
|
52
|
+
durationMs: number,
|
|
53
|
+
usage?: Record<string, number>
|
|
54
|
+
): Completion {
|
|
55
|
+
return {
|
|
56
|
+
partitionKey: requestor,
|
|
57
|
+
id: crypto.randomUUID(),
|
|
58
|
+
type,
|
|
59
|
+
model,
|
|
60
|
+
createdAt: new Date().toISOString(),
|
|
61
|
+
durationMs,
|
|
62
|
+
usage: usage ?? {},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async function waitForCompletion(
|
|
67
|
+
getVideoResult: (
|
|
68
|
+
videoId: number,
|
|
69
|
+
context: { apiKey: string; traceId: string; fetchFn?: typeof fetch }
|
|
70
|
+
) => Promise<VideoJobResult>,
|
|
71
|
+
videoId: number,
|
|
72
|
+
apiKey: string,
|
|
73
|
+
maxRetries: number,
|
|
74
|
+
delayMs: number,
|
|
75
|
+
fetchFn: typeof fetch | undefined
|
|
76
|
+
): Promise<string> {
|
|
77
|
+
for (let attempt = 0; attempt < maxRetries; attempt += 1) {
|
|
78
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
79
|
+
|
|
80
|
+
const result = await getVideoResult(videoId, {
|
|
81
|
+
apiKey,
|
|
82
|
+
traceId: crypto.randomUUID(),
|
|
83
|
+
fetchFn,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (result.state === "completed" && result.videoUrl) {
|
|
87
|
+
return result.videoUrl;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (result.state === "failed") {
|
|
91
|
+
throw new Error("Pixelverse video generation failed.");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
throw new Error("Timed out waiting for Pixelverse video completion.");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function createPixelverseAdapter(
|
|
99
|
+
options: PixelverseAdapterOptions = {}
|
|
100
|
+
): AICapabilityAdapter {
|
|
101
|
+
const providerId = (options.id ?? "pixelverse").trim() || "pixelverse";
|
|
102
|
+
const baseUrl = normalizeBaseUrl(options.apiBaseUrl);
|
|
103
|
+
|
|
104
|
+
const httpAdapter = createHttpVideoProviderAdapter({
|
|
105
|
+
uploadImagePath:
|
|
106
|
+
options.paths?.uploadImagePath ?? `${baseUrl}/openapi/v1/image/upload`,
|
|
107
|
+
generateVideoPath:
|
|
108
|
+
options.paths?.generateVideoPath ?? `${baseUrl}/openapi/v1/video/generate`,
|
|
109
|
+
getVideoResultPath:
|
|
110
|
+
options.paths?.getVideoResultPath ??
|
|
111
|
+
((videoId: number) => `${baseUrl}/openapi/v1/video/result/${videoId}`),
|
|
112
|
+
getBalancePath:
|
|
113
|
+
options.paths?.getBalancePath ?? `${baseUrl}/openapi/v1/account/balance`,
|
|
114
|
+
httpPolicy: options.httpPolicy,
|
|
115
|
+
mapUploadImageId: options.mapUploadImageId,
|
|
116
|
+
mapGeneratedVideoId: options.mapGeneratedVideoId,
|
|
117
|
+
mapVideoResult: options.mapVideoResult,
|
|
118
|
+
mapBalance: options.mapBalance,
|
|
119
|
+
mapGenerateRequestBody: options.mapGenerateRequestBody,
|
|
120
|
+
additionalHeaders: options.additionalHeaders,
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
const maxRetries = options.polling?.maxRetries ?? 20;
|
|
124
|
+
const delayMs = options.polling?.delayMs ?? 3000;
|
|
125
|
+
|
|
126
|
+
const produceVideo = async (request: AdapterVideoRequest) => {
|
|
127
|
+
const startedAt = performance.now();
|
|
128
|
+
const combinedPrompt = request.context
|
|
129
|
+
? `${request.context}\n\n${request.input}`
|
|
130
|
+
: request.input;
|
|
131
|
+
|
|
132
|
+
const uploaded = await httpAdapter.uploadImage(request.image, {
|
|
133
|
+
apiKey: request.apiKey,
|
|
134
|
+
traceId: request.traceId,
|
|
135
|
+
fetchFn: options.fetchFn,
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
const generated = await httpAdapter.generateVideo(
|
|
139
|
+
{
|
|
140
|
+
imageId: uploaded.imageId,
|
|
141
|
+
prompt: combinedPrompt,
|
|
142
|
+
model: request.model,
|
|
143
|
+
...options.defaultVideoRequest,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
apiKey: request.apiKey,
|
|
147
|
+
traceId: crypto.randomUUID(),
|
|
148
|
+
fetchFn: options.fetchFn,
|
|
149
|
+
}
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
const videoUrl = await waitForCompletion(
|
|
153
|
+
httpAdapter.getVideoResult,
|
|
154
|
+
generated.videoId,
|
|
155
|
+
request.apiKey,
|
|
156
|
+
maxRetries,
|
|
157
|
+
delayMs,
|
|
158
|
+
options.fetchFn
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
const durationMs = performance.now() - startedAt;
|
|
162
|
+
const base = createCompletionBase(
|
|
163
|
+
"video",
|
|
164
|
+
request.model,
|
|
165
|
+
request.userId,
|
|
166
|
+
durationMs,
|
|
167
|
+
{ providerVideoId: generated.videoId }
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
return {
|
|
171
|
+
...base,
|
|
172
|
+
url: new URL(videoUrl),
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const checkBalance = async (
|
|
177
|
+
request: AdapterBalanceRequest
|
|
178
|
+
): Promise<BalanceCompletion> => {
|
|
179
|
+
const startedAt = performance.now();
|
|
180
|
+
const providerBalance: ProviderBalance = httpAdapter.getBalance
|
|
181
|
+
? await httpAdapter.getBalance({
|
|
182
|
+
apiKey: request.apiKey,
|
|
183
|
+
traceId: request.traceId,
|
|
184
|
+
fetchFn: options.fetchFn,
|
|
185
|
+
})
|
|
186
|
+
: {
|
|
187
|
+
monthlyCredit: 0,
|
|
188
|
+
packageCredit: 0,
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const durationMs = performance.now() - startedAt;
|
|
192
|
+
const base = createCompletionBase(
|
|
193
|
+
"balanceCompletion",
|
|
194
|
+
"",
|
|
195
|
+
request.userId,
|
|
196
|
+
durationMs
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
...base,
|
|
201
|
+
balance: providerBalance.monthlyCredit + providerBalance.packageCredit,
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
return {
|
|
206
|
+
id: providerId,
|
|
207
|
+
capabilities: [AICapability.Video, AICapability.Balance],
|
|
208
|
+
produceVideo,
|
|
209
|
+
checkBalance,
|
|
210
|
+
};
|
|
211
|
+
}
|