@apicity/kie 0.6.0 → 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 +159 -2
- package/dist/src/example.js +4 -4
- package/dist/src/example.js.map +1 -1
- package/dist/src/gemini-31-pro.d.ts +73 -0
- package/dist/src/gemini-31-pro.d.ts.map +1 -0
- package/dist/src/gemini-31-pro.js +126 -0
- package/dist/src/gemini-31-pro.js.map +1 -0
- package/dist/src/gemini.d.ts +66 -0
- package/dist/src/gemini.d.ts.map +1 -0
- package/dist/src/gemini.js +114 -0
- package/dist/src/gemini.js.map +1 -0
- package/dist/src/index.d.ts +9 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/kie.d.ts.map +1 -1
- package/dist/src/kie.js +59 -2
- package/dist/src/kie.js.map +1 -1
- package/dist/src/model-schemas.d.ts.map +1 -1
- package/dist/src/model-schemas.js +124 -45
- package/dist/src/model-schemas.js.map +1 -1
- package/dist/src/responses.d.ts +128 -0
- package/dist/src/responses.d.ts.map +1 -0
- package/dist/src/responses.js +104 -0
- package/dist/src/responses.js.map +1 -0
- package/dist/src/types.d.ts +15 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/zod.d.ts +848 -100
- package/dist/src/zod.d.ts.map +1 -1
- package/dist/src/zod.js +375 -32
- package/dist/src/zod.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Kie provider for video and image generation (Kling 3.0, Grok Imagine, Omnihuman
|
|
|
8
8
|
|
|
9
9
|
Runtime dependencies:
|
|
10
10
|
|
|
11
|
-
- `zod@^4.
|
|
11
|
+
- `zod@^4.4.3` — request schemas attached to every POST endpoint as `.schema`
|
|
12
12
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
|
@@ -26,6 +26,10 @@ import { createKie } from "@apicity/kie";
|
|
|
26
26
|
const kie = createKie({ apiKey: process.env.KIE_API_KEY! });
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
Resolve `KIE_API_KEY` only in server-side code or trusted job runners.
|
|
30
|
+
Do not expose KIE API keys to browsers, mobile clients, public logs, or
|
|
31
|
+
frontend bundles.
|
|
32
|
+
|
|
29
33
|
## Omnihuman 1.5 model slug
|
|
30
34
|
|
|
31
35
|
KIE's Omnihuman 1.5 model uses the shared
|
|
@@ -59,6 +63,38 @@ less than 60 seconds. Use `output_resolution: "720"` or `"1080"`;
|
|
|
59
63
|
defaults are `"1080"` for resolution, `false` for `pe_fast_mode`, and
|
|
60
64
|
`-1` for a random seed.
|
|
61
65
|
|
|
66
|
+
## Gemini Omni Character endpoint
|
|
67
|
+
|
|
68
|
+
Gemini Omni Character has its own direct endpoint:
|
|
69
|
+
`kie.post.api.v1.omni.character.create`. Use it to create a reusable
|
|
70
|
+
character reference for `gemini-omni-video`; the returned
|
|
71
|
+
`data.characterId` can be passed in that model's `character_ids` array.
|
|
72
|
+
If you already created voice traits through Gemini Omni Audio, pass those
|
|
73
|
+
`audio_ids` to guide the character's tone or persona.
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
const character = await kie.post.api.v1.omni.character.create({
|
|
77
|
+
descriptions: "A confident presenter in a blue blazer.",
|
|
78
|
+
image_urls: ["https://example.com/presenter.png"],
|
|
79
|
+
audio_ids: ["audio_01hx8p0demo"],
|
|
80
|
+
character_name: "Presenter",
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
const video = await kie.post.api.v1.jobs.createTask({
|
|
84
|
+
model: "gemini-omni-video",
|
|
85
|
+
input: {
|
|
86
|
+
prompt: "Presenter explains the product in a bright studio.",
|
|
87
|
+
character_ids: [character.data!.characterId],
|
|
88
|
+
duration: "4",
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The request field is `descriptions` (plural). `image_urls` is required
|
|
94
|
+
and accepts exactly one public reference image, up to KIE's 20 MB
|
|
95
|
+
upstream limit. See https://docs.kie.ai/market/gemini-omni-character
|
|
96
|
+
for the full upstream contract.
|
|
97
|
+
|
|
62
98
|
## Grok Imagine 1.5 model slugs
|
|
63
99
|
|
|
64
100
|
KIE's current Grok Imagine Quick Start markets Grok Imagine 1.5 through
|
|
@@ -383,9 +419,64 @@ console.log(result.resultUrls[0]);
|
|
|
383
419
|
`try { ... } catch (e) { if (e instanceof KieError) ... }` gives you
|
|
384
420
|
the upstream error directly.
|
|
385
421
|
|
|
422
|
+
## Qwen2 image edit createTask flow
|
|
423
|
+
|
|
424
|
+
Qwen2 image edit uses the shared KIE jobs endpoint. Submit
|
|
425
|
+
`model: "qwen2/image-edit"` to `kie.post.api.v1.jobs.createTask`, then
|
|
426
|
+
poll `kie.get.api.v1.jobs.recordInfo(taskId)` or pass `callBackUrl`.
|
|
427
|
+
|
|
428
|
+
```typescript
|
|
429
|
+
const task = await kie.post.api.v1.jobs.createTask({
|
|
430
|
+
model: "qwen2/image-edit",
|
|
431
|
+
callBackUrl: "https://your-domain.com/api/callback",
|
|
432
|
+
input: {
|
|
433
|
+
prompt: "Add sunglasses to the subject",
|
|
434
|
+
image_url: "https://example.com/source.png",
|
|
435
|
+
image_size: "16:9",
|
|
436
|
+
seed: 0,
|
|
437
|
+
output_format: "png",
|
|
438
|
+
nsfw_checker: false,
|
|
439
|
+
},
|
|
440
|
+
});
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
`prompt` is required and capped at 800 characters. `image_url` is a
|
|
444
|
+
single source image URL, not file content; upload local images first and
|
|
445
|
+
pass the returned URL. KIE accepts JPEG, PNG, and WEBP images up to
|
|
446
|
+
10 MB. `image_size` defaults to `16:9` and accepts `1:1`, `2:3`, `3:2`,
|
|
447
|
+
`3:4`, `4:3`, `9:16`, `16:9`, and `21:9`. `output_format` defaults to
|
|
448
|
+
`png` and accepts `jpeg` or `png`; `nsfw_checker` defaults to `false`.
|
|
449
|
+
|
|
450
|
+
## Qwen2 text-to-image createTask flow
|
|
451
|
+
|
|
452
|
+
Qwen2 text-to-image uses the same shared KIE jobs endpoint. Submit
|
|
453
|
+
`model: "qwen2/text-to-image"` to `kie.post.api.v1.jobs.createTask`,
|
|
454
|
+
then poll `kie.get.api.v1.jobs.recordInfo(taskId)` or pass
|
|
455
|
+
`callBackUrl`.
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
const task = await kie.post.api.v1.jobs.createTask({
|
|
459
|
+
model: "qwen2/text-to-image",
|
|
460
|
+
callBackUrl: "https://your-domain.com/api/callback",
|
|
461
|
+
input: {
|
|
462
|
+
prompt: "A serene mountain landscape at sunrise",
|
|
463
|
+
image_size: "16:9",
|
|
464
|
+
seed: 0,
|
|
465
|
+
output_format: "png",
|
|
466
|
+
nsfw_checker: false,
|
|
467
|
+
},
|
|
468
|
+
});
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
`prompt` is required and capped at 800 characters. `image_size`
|
|
472
|
+
defaults to `16:9` and accepts `1:1`, `3:4`, `4:3`, `9:16`, and
|
|
473
|
+
`16:9`. `output_format` defaults to `png` and accepts `jpeg` or
|
|
474
|
+
`png`; `seed` must be an integer when provided; `nsfw_checker`
|
|
475
|
+
defaults to `false`.
|
|
476
|
+
|
|
386
477
|
## API Reference
|
|
387
478
|
|
|
388
|
-
|
|
479
|
+
31 endpoints across 19 groups. Each method mirrors an upstream URL path.
|
|
389
480
|
|
|
390
481
|
### chat
|
|
391
482
|
|
|
@@ -421,6 +512,23 @@ Source: [`packages/provider/kie/src/claude.ts`](src/claude.ts)
|
|
|
421
512
|
|
|
422
513
|
</details>
|
|
423
514
|
|
|
515
|
+
### codex
|
|
516
|
+
|
|
517
|
+
<details>
|
|
518
|
+
<summary><code>POST</code> <b><code>kie.codex.v1.responses</code></b></summary>
|
|
519
|
+
|
|
520
|
+
<code>POST https://api.kie.ai/codex/v1/responses</code>
|
|
521
|
+
|
|
522
|
+
[Upstream docs ↗](https://docs.kie.ai/market/chat/gpt-5-5)
|
|
523
|
+
|
|
524
|
+
```typescript
|
|
525
|
+
const res = await kie.codex.v1.responses({ /* ... */ });
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
Source: [`packages/provider/kie/src/responses.ts`](src/responses.ts)
|
|
529
|
+
|
|
530
|
+
</details>
|
|
531
|
+
|
|
424
532
|
### common
|
|
425
533
|
|
|
426
534
|
<details>
|
|
@@ -489,6 +597,40 @@ Source: [`packages/provider/kie/src/kie.ts`](src/kie.ts)
|
|
|
489
597
|
|
|
490
598
|
</details>
|
|
491
599
|
|
|
600
|
+
### gemini
|
|
601
|
+
|
|
602
|
+
<details>
|
|
603
|
+
<summary><code>POST</code> <b><code>kie.gemini.post.v1.models.gemini35Flash.streamGenerateContent</code></b></summary>
|
|
604
|
+
|
|
605
|
+
<code>POST https://api.kie.ai/gemini/v1/models/gemini-3-5-flash:streamGenerateContent</code>
|
|
606
|
+
|
|
607
|
+
[Upstream docs ↗](https://docs.kie.ai/market/gemini/gemini-3-5-flash)
|
|
608
|
+
|
|
609
|
+
```typescript
|
|
610
|
+
const res = await kie.gemini.post.v1.models.gemini35Flash.streamGenerateContent({ /* ... */ });
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
Source: [`packages/provider/kie/src/gemini.ts`](src/gemini.ts)
|
|
614
|
+
|
|
615
|
+
</details>
|
|
616
|
+
|
|
617
|
+
### gemini31Pro
|
|
618
|
+
|
|
619
|
+
<details>
|
|
620
|
+
<summary><code>POST</code> <b><code>kie.gemini31Pro.post.v1.chat.completions</code></b></summary>
|
|
621
|
+
|
|
622
|
+
<code>POST https://api.kie.ai/gemini-3.1-pro/v1/chat/completions</code>
|
|
623
|
+
|
|
624
|
+
[Upstream docs ↗](https://docs.kie.ai/market/gemini/gemini-3-1-pro)
|
|
625
|
+
|
|
626
|
+
```typescript
|
|
627
|
+
const res = await kie.gemini31Pro.post.v1.chat.completions({ /* ... */ });
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
Source: [`packages/provider/kie/src/gemini-31-pro.ts`](src/gemini-31-pro.ts)
|
|
631
|
+
|
|
632
|
+
</details>
|
|
633
|
+
|
|
492
634
|
### generate
|
|
493
635
|
|
|
494
636
|
<details>
|
|
@@ -727,6 +869,21 @@ Source: [`packages/provider/kie/src/kie.ts`](src/kie.ts)
|
|
|
727
869
|
|
|
728
870
|
</details>
|
|
729
871
|
|
|
872
|
+
<details>
|
|
873
|
+
<summary><code>POST</code> <b><code>kie.post.api.v1.omni.character.create</code></b></summary>
|
|
874
|
+
|
|
875
|
+
<code>POST https://api.kie.ai/api/v1/omni/character/create</code>
|
|
876
|
+
|
|
877
|
+
[Upstream docs ↗](https://docs.kie.ai/market/gemini-omni-character)
|
|
878
|
+
|
|
879
|
+
```typescript
|
|
880
|
+
const res = await kie.post.api.v1.omni.character.create({ /* ... */ });
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
Source: [`packages/provider/kie/src/kie.ts`](src/kie.ts)
|
|
884
|
+
|
|
885
|
+
</details>
|
|
886
|
+
|
|
730
887
|
### style
|
|
731
888
|
|
|
732
889
|
<details>
|
package/dist/src/example.js
CHANGED
|
@@ -32,11 +32,11 @@ const EXAMPLES = {
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"POST api.v1.generate": {
|
|
35
|
-
"source": "kie/suno
|
|
35
|
+
"source": "kie/suno/generate-submit",
|
|
36
36
|
"payload": {
|
|
37
|
-
"prompt": "A
|
|
38
|
-
"model": "
|
|
39
|
-
"instrumental":
|
|
37
|
+
"prompt": "A short upbeat lo-fi loop, gentle piano, no vocals, summer afternoon",
|
|
38
|
+
"model": "V4_5",
|
|
39
|
+
"instrumental": true,
|
|
40
40
|
"customMode": false,
|
|
41
41
|
"callBackUrl": "https://example.com/cb"
|
|
42
42
|
}
|
package/dist/src/example.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,qEAAqE;AAOrE,MAAM,QAAQ,GAAoC;IAChD,gCAAgC,EAAE;QAChC,QAAQ,EAAE,gCAAgC;QAC1C,SAAS,EAAE;YACT,QAAQ,EAAE,qDAAqD;SAChE;KACF;IACD,4BAA4B,EAAE;QAC5B,QAAQ,EAAE,0BAA0B;QACpC,SAAS,EAAE;YACT,QAAQ,EAAE,kCAAkC;SAC7C;KACF;IACD,2BAA2B,EAAE;QAC3B,QAAQ,EAAE,wBAAwB;QAClC,SAAS,EAAE;YACT,YAAY,EAAE,kBAAkB;YAChC,YAAY,EAAE,wBAAwB;YACtC,UAAU,EAAE,UAAU;SACvB;KACF;IACD,gCAAgC,EAAE;QAChC,QAAQ,EAAE,0BAA0B;QACpC,SAAS,EAAE;YACT,KAAK,EAAE,+CAA+C;SACvD;KACF;IACD,sBAAsB,EAAE;QACtB,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { ApicitySchema } from "./types.js";
|
|
2
|
+
import type { KieGemini31ProChatCompletionsRequest } from "./zod.js";
|
|
3
|
+
export interface KieGemini31ProChatMessage {
|
|
4
|
+
role?: string;
|
|
5
|
+
content?: string | null;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
export interface KieGemini31ProChatDelta {
|
|
9
|
+
role?: string;
|
|
10
|
+
content?: string | null;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface KieGemini31ProChatChoice {
|
|
14
|
+
index?: number;
|
|
15
|
+
message?: KieGemini31ProChatMessage;
|
|
16
|
+
delta?: KieGemini31ProChatDelta;
|
|
17
|
+
finish_reason?: string | null;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface KieGemini31ProCompletionTokensDetails {
|
|
21
|
+
reasoning_tokens?: number;
|
|
22
|
+
audio_tokens?: number;
|
|
23
|
+
text_tokens?: number;
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
}
|
|
26
|
+
export interface KieGemini31ProChatUsage {
|
|
27
|
+
prompt_tokens?: number;
|
|
28
|
+
completion_tokens?: number;
|
|
29
|
+
total_tokens?: number;
|
|
30
|
+
completion_tokens_details?: KieGemini31ProCompletionTokensDetails;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
33
|
+
export interface KieGemini31ProChatCompletionResponse {
|
|
34
|
+
id?: string;
|
|
35
|
+
object?: string;
|
|
36
|
+
created?: number;
|
|
37
|
+
model?: string;
|
|
38
|
+
choices?: KieGemini31ProChatChoice[];
|
|
39
|
+
usage?: KieGemini31ProChatUsage;
|
|
40
|
+
credits_consumed?: number;
|
|
41
|
+
[key: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
export interface KieGemini31ProChatCompletionChunk {
|
|
44
|
+
id?: string;
|
|
45
|
+
object?: string;
|
|
46
|
+
created?: number;
|
|
47
|
+
model?: string;
|
|
48
|
+
choices?: KieGemini31ProChatChoice[];
|
|
49
|
+
usage?: KieGemini31ProChatUsage;
|
|
50
|
+
[key: string]: unknown;
|
|
51
|
+
}
|
|
52
|
+
export type KieGemini31ProChatCompletionsResult = KieGemini31ProChatCompletionResponse | AsyncIterable<KieGemini31ProChatCompletionChunk>;
|
|
53
|
+
interface KieGemini31ProChatCompletionsMethod {
|
|
54
|
+
(req: KieGemini31ProChatCompletionsRequest, signal?: AbortSignal): Promise<KieGemini31ProChatCompletionsResult>;
|
|
55
|
+
schema: ApicitySchema<KieGemini31ProChatCompletionsRequest>;
|
|
56
|
+
}
|
|
57
|
+
interface KieGemini31ProChatNamespace {
|
|
58
|
+
completions: KieGemini31ProChatCompletionsMethod;
|
|
59
|
+
}
|
|
60
|
+
interface KieGemini31ProV1Namespace {
|
|
61
|
+
chat: KieGemini31ProChatNamespace;
|
|
62
|
+
}
|
|
63
|
+
interface KieGemini31ProPostNamespace {
|
|
64
|
+
v1: KieGemini31ProV1Namespace;
|
|
65
|
+
}
|
|
66
|
+
export interface KieGemini31ProProvider {
|
|
67
|
+
gemini31Pro: {
|
|
68
|
+
post: KieGemini31ProPostNamespace;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export declare function createGemini31ProProvider(baseURL: string, apiKey: string, doFetch: typeof fetch, timeout: number): KieGemini31ProProvider;
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=gemini-31-pro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-31-pro.d.ts","sourceRoot":"","sources":["../../src/gemini-31-pro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { sseToIterable } from "./sse.js";
|
|
2
|
+
import { KieError } from "./types.js";
|
|
3
|
+
import { KieGemini31ProChatCompletionsRequestSchema } from "./zod.js";
|
|
4
|
+
function attachAbortHandler(signal, controller) {
|
|
5
|
+
if (!signal)
|
|
6
|
+
return;
|
|
7
|
+
if (signal.aborted) {
|
|
8
|
+
controller.abort();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
12
|
+
}
|
|
13
|
+
function isGemini31ProErrorBody(value) {
|
|
14
|
+
return typeof value === "object" && value !== null;
|
|
15
|
+
}
|
|
16
|
+
function codeToString(code) {
|
|
17
|
+
if (typeof code === "string")
|
|
18
|
+
return code;
|
|
19
|
+
if (typeof code === "number")
|
|
20
|
+
return String(code);
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
function formatGemini31ProError(status, body) {
|
|
24
|
+
if (isGemini31ProErrorBody(body)) {
|
|
25
|
+
if (body.error?.message) {
|
|
26
|
+
return {
|
|
27
|
+
message: `Kie Gemini 3.1 Pro API error ${status}: ${body.error.message}`,
|
|
28
|
+
code: body.error.type,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (typeof body.msg === "string") {
|
|
32
|
+
return {
|
|
33
|
+
message: `Kie Gemini 3.1 Pro API error ${status}: ${body.msg}`,
|
|
34
|
+
code: codeToString(body.code),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (typeof body.message === "string") {
|
|
38
|
+
return {
|
|
39
|
+
message: `Kie Gemini 3.1 Pro API error ${status}: ${body.message}`,
|
|
40
|
+
code: body.type,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return { message: `Kie Gemini 3.1 Pro API error: ${status}` };
|
|
45
|
+
}
|
|
46
|
+
async function parseErrorResponse(res) {
|
|
47
|
+
let body = null;
|
|
48
|
+
try {
|
|
49
|
+
body = await res.json();
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// ignore parse errors
|
|
53
|
+
}
|
|
54
|
+
const formatted = formatGemini31ProError(res.status, body);
|
|
55
|
+
return new KieError(formatted.message, res.status, body, formatted.code);
|
|
56
|
+
}
|
|
57
|
+
async function* parseChatCompletionsStream(res) {
|
|
58
|
+
for await (const data of sseToIterable(res)) {
|
|
59
|
+
if (data === "[DONE]") {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
yield JSON.parse(data);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Ignore keep-alive or non-JSON stream lines.
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function isEventStream(res) {
|
|
71
|
+
return (res.headers
|
|
72
|
+
.get("content-type")
|
|
73
|
+
?.toLowerCase()
|
|
74
|
+
.includes("text/event-stream") ?? false);
|
|
75
|
+
}
|
|
76
|
+
export function createGemini31ProProvider(baseURL, apiKey, doFetch, timeout) {
|
|
77
|
+
return {
|
|
78
|
+
gemini31Pro: {
|
|
79
|
+
post: {
|
|
80
|
+
v1: {
|
|
81
|
+
chat: {
|
|
82
|
+
// sig-ok: URL segment has a dot; TS namespace uses a valid identifier.
|
|
83
|
+
// POST https://api.kie.ai/gemini-3.1-pro/v1/chat/completions
|
|
84
|
+
// Docs: https://docs.kie.ai/market/gemini/gemini-3-1-pro
|
|
85
|
+
completions: Object.assign(async function completions(req, signal) {
|
|
86
|
+
const controller = new AbortController();
|
|
87
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
88
|
+
attachAbortHandler(signal, controller);
|
|
89
|
+
try {
|
|
90
|
+
const res = await doFetch(`${baseURL}/gemini-3.1-pro/v1/chat/completions`, {
|
|
91
|
+
method: "POST",
|
|
92
|
+
headers: {
|
|
93
|
+
Authorization: `Bearer ${apiKey}`,
|
|
94
|
+
"Content-Type": "application/json",
|
|
95
|
+
},
|
|
96
|
+
body: JSON.stringify(req),
|
|
97
|
+
signal: controller.signal,
|
|
98
|
+
});
|
|
99
|
+
clearTimeout(timeoutId);
|
|
100
|
+
if (!res.ok) {
|
|
101
|
+
throw await parseErrorResponse(res);
|
|
102
|
+
}
|
|
103
|
+
if (isEventStream(res)) {
|
|
104
|
+
return parseChatCompletionsStream(res);
|
|
105
|
+
}
|
|
106
|
+
return (await res.json());
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
clearTimeout(timeoutId);
|
|
110
|
+
if (error instanceof KieError)
|
|
111
|
+
throw error;
|
|
112
|
+
if (error instanceof SyntaxError) {
|
|
113
|
+
throw new KieError("Failed to parse Gemini 3.1 Pro chat response", 500);
|
|
114
|
+
}
|
|
115
|
+
throw new KieError(`Gemini 3.1 Pro chat request failed: ${error}`, 500);
|
|
116
|
+
}
|
|
117
|
+
}, {
|
|
118
|
+
schema: KieGemini31ProChatCompletionsRequestSchema,
|
|
119
|
+
}),
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=gemini-31-pro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-31-pro.js","sourceRoot":"","sources":["../../src/gemini-31-pro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ApicitySchema } from "./types.js";
|
|
2
|
+
import type { KieGemini35FlashStreamGenerateContentRequest } from "./zod.js";
|
|
3
|
+
export interface KieGeminiFunctionCall {
|
|
4
|
+
args?: Record<string, unknown>;
|
|
5
|
+
name?: string;
|
|
6
|
+
id?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface KieGeminiResponsePart {
|
|
9
|
+
text?: string;
|
|
10
|
+
functionCall?: KieGeminiFunctionCall;
|
|
11
|
+
thoughtSignature?: string;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface KieGeminiResponseContent {
|
|
15
|
+
role?: "model" | "user" | string;
|
|
16
|
+
parts?: KieGeminiResponsePart[];
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface KieGeminiCandidate {
|
|
20
|
+
content?: KieGeminiResponseContent;
|
|
21
|
+
finishReason?: string;
|
|
22
|
+
index?: number;
|
|
23
|
+
safetyRatings?: Array<Record<string, unknown>>;
|
|
24
|
+
groundingMetadata?: Record<string, unknown>;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface KieGeminiUsageMetadata {
|
|
28
|
+
candidatesTokenCount?: number;
|
|
29
|
+
thoughtsTokenCount?: number;
|
|
30
|
+
totalTokenCount?: number;
|
|
31
|
+
promptTokenCount?: number;
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
export interface KieGemini35FlashGenerateContentResponse {
|
|
35
|
+
candidates?: KieGeminiCandidate[];
|
|
36
|
+
modelVersion?: string;
|
|
37
|
+
usageMetadata?: KieGeminiUsageMetadata;
|
|
38
|
+
credits_consumed?: number;
|
|
39
|
+
responseId?: string;
|
|
40
|
+
[key: string]: unknown;
|
|
41
|
+
}
|
|
42
|
+
export type KieGemini35FlashStreamGenerateContentChunk = KieGemini35FlashGenerateContentResponse;
|
|
43
|
+
export type KieGemini35FlashStreamGenerateContentResult = KieGemini35FlashGenerateContentResponse | AsyncIterable<KieGemini35FlashStreamGenerateContentChunk>;
|
|
44
|
+
interface KieGemini35FlashStreamGenerateContentMethod {
|
|
45
|
+
(req: KieGemini35FlashStreamGenerateContentRequest, signal?: AbortSignal): Promise<KieGemini35FlashStreamGenerateContentResult>;
|
|
46
|
+
schema: ApicitySchema<KieGemini35FlashStreamGenerateContentRequest>;
|
|
47
|
+
}
|
|
48
|
+
interface KieGeminiModelsNamespace {
|
|
49
|
+
gemini35Flash: {
|
|
50
|
+
streamGenerateContent: KieGemini35FlashStreamGenerateContentMethod;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
interface KieGeminiPostV1Namespace {
|
|
54
|
+
models: KieGeminiModelsNamespace;
|
|
55
|
+
}
|
|
56
|
+
interface KieGeminiPostNamespace {
|
|
57
|
+
v1: KieGeminiPostV1Namespace;
|
|
58
|
+
}
|
|
59
|
+
export interface KieGeminiProvider {
|
|
60
|
+
gemini: {
|
|
61
|
+
post: KieGeminiPostNamespace;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export declare function createGeminiProvider(baseURL: string, apiKey: string, doFetch: typeof fetch, timeout: number): KieGeminiProvider;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/gemini.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,4CAA4C,EAAE,MAAM,OAAO,CAAC;AAgB1E,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,uCAAuC;IACtD,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,0CAA0C,GACpD,uCAAuC,CAAC;AAE1C,MAAM,MAAM,2CAA2C,GACnD,uCAAuC,GACvC,aAAa,CAAC,0CAA0C,CAAC,CAAC;AAE9D,UAAU,2CAA2C;IACnD,CACE,GAAG,EAAE,4CAA4C,EACjD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACxD,MAAM,EAAE,aAAa,CAAC,4CAA4C,CAAC,CAAC;CACrE;AAED,UAAU,wBAAwB;IAChC,aAAa,EAAE;QACb,qBAAqB,EAAE,2CAA2C,CAAC;KACpE,CAAC;CACH;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,wBAAwB,CAAC;CAClC;AAED,UAAU,sBAAsB;IAC9B,EAAE,EAAE,wBAAwB,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QACN,IAAI,EAAE,sBAAsB,CAAC;KAC9B,CAAC;CACH;AA0ED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,KAAK,EACrB,OAAO,EAAE,MAAM,GACd,iBAAiB,CAqEnB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { sseToIterable } from "./sse.js";
|
|
2
|
+
import { KieError } from "./types.js";
|
|
3
|
+
import { KieGemini35FlashStreamGenerateContentRequestSchema } from "./zod.js";
|
|
4
|
+
function attachAbortHandler(signal, controller) {
|
|
5
|
+
if (!signal)
|
|
6
|
+
return;
|
|
7
|
+
if (signal.aborted) {
|
|
8
|
+
controller.abort();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
12
|
+
}
|
|
13
|
+
function isGeminiErrorBody(value) {
|
|
14
|
+
return typeof value === "object" && value !== null;
|
|
15
|
+
}
|
|
16
|
+
function formatGeminiError(status, body) {
|
|
17
|
+
if (isGeminiErrorBody(body)) {
|
|
18
|
+
if (body.error?.message) {
|
|
19
|
+
return {
|
|
20
|
+
message: `Kie Gemini API error ${status}: ${body.error.message}`,
|
|
21
|
+
code: body.error.type,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (typeof body.message === "string") {
|
|
25
|
+
return {
|
|
26
|
+
message: `Kie Gemini API error ${status}: ${body.message}`,
|
|
27
|
+
code: body.type,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return { message: `Kie Gemini API error: ${status}` };
|
|
32
|
+
}
|
|
33
|
+
async function parseErrorResponse(res) {
|
|
34
|
+
let body = null;
|
|
35
|
+
try {
|
|
36
|
+
body = await res.json();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// ignore parse errors
|
|
40
|
+
}
|
|
41
|
+
const formatted = formatGeminiError(res.status, body);
|
|
42
|
+
return new KieError(formatted.message, res.status, body, formatted.code);
|
|
43
|
+
}
|
|
44
|
+
async function* parseGeminiStream(res) {
|
|
45
|
+
for await (const data of sseToIterable(res)) {
|
|
46
|
+
if (data === "[DONE]") {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
yield JSON.parse(data);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Ignore provider keep-alive or non-JSON stream lines.
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function isEventStream(res) {
|
|
58
|
+
return (res.headers
|
|
59
|
+
.get("content-type")
|
|
60
|
+
?.toLowerCase()
|
|
61
|
+
.includes("text/event-stream") ?? false);
|
|
62
|
+
}
|
|
63
|
+
export function createGeminiProvider(baseURL, apiKey, doFetch, timeout) {
|
|
64
|
+
return {
|
|
65
|
+
gemini: {
|
|
66
|
+
post: {
|
|
67
|
+
v1: {
|
|
68
|
+
models: {
|
|
69
|
+
gemini35Flash: {
|
|
70
|
+
// POST https://api.kie.ai/gemini/v1/models/gemini-3-5-flash:streamGenerateContent
|
|
71
|
+
// Docs: https://docs.kie.ai/market/gemini/gemini-3-5-flash
|
|
72
|
+
streamGenerateContent: Object.assign(async function streamGenerateContent(req, signal) {
|
|
73
|
+
const controller = new AbortController();
|
|
74
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
75
|
+
attachAbortHandler(signal, controller);
|
|
76
|
+
try {
|
|
77
|
+
const res = await doFetch(`${baseURL}/gemini/v1/models/gemini-3-5-flash:streamGenerateContent`, {
|
|
78
|
+
method: "POST",
|
|
79
|
+
headers: {
|
|
80
|
+
"Content-Type": "application/json",
|
|
81
|
+
"X-Goog-Api-Key": apiKey,
|
|
82
|
+
},
|
|
83
|
+
body: JSON.stringify(req),
|
|
84
|
+
signal: controller.signal,
|
|
85
|
+
});
|
|
86
|
+
clearTimeout(timeoutId);
|
|
87
|
+
if (!res.ok) {
|
|
88
|
+
throw await parseErrorResponse(res);
|
|
89
|
+
}
|
|
90
|
+
if (isEventStream(res)) {
|
|
91
|
+
return parseGeminiStream(res);
|
|
92
|
+
}
|
|
93
|
+
return (await res.json());
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
clearTimeout(timeoutId);
|
|
97
|
+
if (error instanceof KieError)
|
|
98
|
+
throw error;
|
|
99
|
+
if (error instanceof SyntaxError) {
|
|
100
|
+
throw new KieError("Failed to parse Gemini response", 500);
|
|
101
|
+
}
|
|
102
|
+
throw new KieError(`Gemini request failed: ${error}`, 500);
|
|
103
|
+
}
|
|
104
|
+
}, {
|
|
105
|
+
schema: KieGemini35FlashStreamGenerateContentRequestSchema,
|
|
106
|
+
}),
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/gemini.ts"],"names":[],"mappings":"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"}
|