@eaziz/prepare 0.1.0
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/LICENSE +21 -0
- package/README.md +124 -0
- package/dist/contracts.d.ts +55 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/protocols/catalog.d.ts +9 -0
- package/dist/protocols/catalog.d.ts.map +1 -0
- package/dist/protocols/catalog.js +21 -0
- package/dist/protocols/catalog.js.map +1 -0
- package/dist/protocols/content.d.ts +6 -0
- package/dist/protocols/content.d.ts.map +1 -0
- package/dist/protocols/content.js +129 -0
- package/dist/protocols/content.js.map +1 -0
- package/dist/protocols/images.d.ts +9 -0
- package/dist/protocols/images.d.ts.map +1 -0
- package/dist/protocols/images.js +39 -0
- package/dist/protocols/images.js.map +1 -0
- package/dist/protocols/media.d.ts +75 -0
- package/dist/protocols/media.d.ts.map +1 -0
- package/dist/protocols/media.js +255 -0
- package/dist/protocols/media.js.map +1 -0
- package/dist/protocols/text.d.ts +7 -0
- package/dist/protocols/text.d.ts.map +1 -0
- package/dist/protocols/text.js +140 -0
- package/dist/protocols/text.js.map +1 -0
- package/dist/request-compiler.d.ts +16 -0
- package/dist/request-compiler.d.ts.map +1 -0
- package/dist/request-compiler.js +104 -0
- package/dist/request-compiler.js.map +1 -0
- package/dist/request-realtime.d.ts +6 -0
- package/dist/request-realtime.d.ts.map +1 -0
- package/dist/request-realtime.js +21 -0
- package/dist/request-realtime.js.map +1 -0
- package/dist/request-types.d.ts +91 -0
- package/dist/request-types.d.ts.map +1 -0
- package/dist/request-types.js +2 -0
- package/dist/request-types.js.map +1 -0
- package/dist/request-utils.d.ts +29 -0
- package/dist/request-utils.d.ts.map +1 -0
- package/dist/request-utils.js +79 -0
- package/dist/request-utils.js.map +1 -0
- package/package.json +48 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 @eaziz/prepare contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# @eaziz/prepare
|
|
2
|
+
|
|
3
|
+
一个零运行时依赖的 AI 请求编译器。它把统一语义输入转换成指定协议的 `method`、`path`、`headers` 和 `body`,但不发送网络请求,也不绑定任何 Provider 或网关。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @eaziz/prepare
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 使用
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { prepare } from '@eaziz/prepare';
|
|
15
|
+
|
|
16
|
+
const prepared = prepare({
|
|
17
|
+
protocol: 'anthropic-messages',
|
|
18
|
+
modelType: 'text-generation',
|
|
19
|
+
model: 'my-model',
|
|
20
|
+
input: {
|
|
21
|
+
messages: [{ role: 'user', content: '你好' }],
|
|
22
|
+
maxTokens: 4096,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
await fetch(`https://some-gateway.example.com${prepared.path}`, {
|
|
27
|
+
method: prepared.method,
|
|
28
|
+
headers: prepared.headers,
|
|
29
|
+
body: prepared.body,
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`compileRequest` 是 `prepare` 的别名。
|
|
34
|
+
|
|
35
|
+
## 发布
|
|
36
|
+
|
|
37
|
+
这是一个 public scoped package。`package.json` 已固定 `publishConfig.access` 为 `public`,发布前先确认当前账号拥有 `@provider` scope:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm login
|
|
41
|
+
npm whoami
|
|
42
|
+
npm publish
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
如果 `@provider` 不是你的账号或组织 scope,请把包名改成你拥有的 scope,例如 `@your-name/prepare`,再发布。
|
|
46
|
+
|
|
47
|
+
## 地址
|
|
48
|
+
|
|
49
|
+
不传地址时,结果只包含公开协议路径。SDK 不包含 Higress 或其他网关的路径常量。
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
const prepared = prepare({
|
|
53
|
+
protocol: 'openai-embeddings',
|
|
54
|
+
modelType: 'embedding',
|
|
55
|
+
model: 'my-embedding-model',
|
|
56
|
+
baseURL: 'https://some-gateway.example.com',
|
|
57
|
+
input: { input: ['第一段', '第二段'] },
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
await fetch(prepared.url!, {
|
|
61
|
+
method: prepared.method,
|
|
62
|
+
headers: prepared.headers,
|
|
63
|
+
body: prepared.body,
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`baseURL` 会与协议路径组合并生成 `url`。`endpoint` 表示完整请求地址,优先级高于 `baseURL`。
|
|
68
|
+
|
|
69
|
+
## 支持范围
|
|
70
|
+
|
|
71
|
+
| 模型类型 | 协议 |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| `text-generation`、`multimodal-generation` | OpenAI Chat Completions、OpenAI Responses、Anthropic Messages、Gemini GenerateContent |
|
|
74
|
+
| `embedding` | OpenAI Embeddings |
|
|
75
|
+
| `rerank` | Cohere Rerank |
|
|
76
|
+
| `image-generation`、`image-editing` | OpenAI Images |
|
|
77
|
+
| `speech-generation` | OpenAI、DashScope、Volcengine、XFYun、Zhipu、MiniMax Audio |
|
|
78
|
+
| `transcription` | OpenAI Audio、Zhipu Audio、DashScope Transcription |
|
|
79
|
+
| `video-generation` | DashScope Video、Volcengine Video |
|
|
80
|
+
| `realtime` | OpenAI Responses WebSocket、OpenAI Realtime |
|
|
81
|
+
|
|
82
|
+
模型 ID 不做白名单校验。只要模型支持所选协议,就可以直接把其 ID 传给 `model`。协议和模型类型不匹配时,SDK 会立即抛出错误。
|
|
83
|
+
|
|
84
|
+
## 视频任务
|
|
85
|
+
|
|
86
|
+
异步视频协议会返回提交请求和轮询请求生成器:
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
const prepared = prepare({
|
|
90
|
+
protocol: 'volcengine-video',
|
|
91
|
+
modelType: 'video-generation',
|
|
92
|
+
model: 'my-video-model',
|
|
93
|
+
input: { prompt: '一座纸板城市' },
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
await fetch(`https://some-gateway.example.com${prepared.submit.path}`, {
|
|
97
|
+
method: prepared.submit.method,
|
|
98
|
+
headers: prepared.submit.headers,
|
|
99
|
+
body: prepared.submit.body,
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const statusRequest = prepared.lifecycle.status('task-id');
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## ModelProfile
|
|
106
|
+
|
|
107
|
+
`ModelProfile` 只是可选的模型目录数据结构,不参与请求编译:
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
import type { ModelProfile } from '@eaziz/prepare';
|
|
111
|
+
|
|
112
|
+
const profile: ModelProfile = {
|
|
113
|
+
id: 'my-model',
|
|
114
|
+
modelType: 'text-generation',
|
|
115
|
+
protocols: ['anthropic-messages'],
|
|
116
|
+
metadata: { catalogUpdatedAt: '2026-09-08' },
|
|
117
|
+
};
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 开发
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npm test
|
|
124
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type ProtocolMetadata = Readonly<Record<string, unknown>>;
|
|
2
|
+
export type ModelType = "text-generation" | "multimodal-generation" | "embedding" | "rerank" | "image-generation" | "image-editing" | "speech-generation" | "transcription" | "video-generation" | "realtime";
|
|
3
|
+
export type WireProtocol = "openai-chat-completions" | "openai-responses" | "anthropic-messages" | "gemini-generate-content" | "openai-embeddings" | "cohere-rerank" | "openai-images" | "openai-audio" | "dashscope-audio" | "dashscope-transcription" | "volcengine-audio" | "xfyun-audio" | "zhipu-audio" | "minimax-audio" | "dashscope-video" | "volcengine-video" | "openai-responses-websocket" | "openai-realtime";
|
|
4
|
+
export type MessageRole = "system" | "developer" | "user" | "assistant" | "tool";
|
|
5
|
+
export interface TextPart {
|
|
6
|
+
readonly type: "text";
|
|
7
|
+
readonly text: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ImagePart {
|
|
10
|
+
readonly type: "image";
|
|
11
|
+
readonly image: string | Uint8Array;
|
|
12
|
+
readonly mediaType?: string;
|
|
13
|
+
readonly detail?: "auto" | "low" | "high";
|
|
14
|
+
}
|
|
15
|
+
export interface AudioPart {
|
|
16
|
+
readonly type: "audio";
|
|
17
|
+
readonly audio: string | Uint8Array;
|
|
18
|
+
readonly mediaType?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface FilePart {
|
|
21
|
+
readonly type: "file";
|
|
22
|
+
readonly file: string | Uint8Array;
|
|
23
|
+
readonly mediaType?: string;
|
|
24
|
+
readonly filename?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface RawPart {
|
|
27
|
+
readonly type: "raw";
|
|
28
|
+
readonly protocol: WireProtocol;
|
|
29
|
+
readonly value: unknown;
|
|
30
|
+
}
|
|
31
|
+
export type ContentPart = TextPart | ImagePart | AudioPart | FilePart | RawPart;
|
|
32
|
+
export interface Message {
|
|
33
|
+
readonly role: MessageRole;
|
|
34
|
+
readonly content: string | readonly ContentPart[];
|
|
35
|
+
readonly name?: string;
|
|
36
|
+
readonly toolCallId?: string;
|
|
37
|
+
readonly protocolMetadata?: ProtocolMetadata;
|
|
38
|
+
}
|
|
39
|
+
export interface JSONSchema {
|
|
40
|
+
readonly [key: string]: unknown;
|
|
41
|
+
}
|
|
42
|
+
export interface ToolDefinition {
|
|
43
|
+
readonly type?: "function";
|
|
44
|
+
readonly name: string;
|
|
45
|
+
readonly description?: string;
|
|
46
|
+
readonly parameters: JSONSchema;
|
|
47
|
+
readonly strict?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface ModelProfile {
|
|
50
|
+
readonly id: string;
|
|
51
|
+
readonly modelType: ModelType;
|
|
52
|
+
readonly protocols: readonly WireProtocol[];
|
|
53
|
+
readonly metadata?: ProtocolMetadata;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RequestPreparation } from "../request-types.js";
|
|
2
|
+
import type { PreparedRequest } from "../request-utils.js";
|
|
3
|
+
export declare function prepareEmbedding(request: Extract<RequestPreparation, {
|
|
4
|
+
readonly modelType: "embedding";
|
|
5
|
+
}>): PreparedRequest;
|
|
6
|
+
export declare function prepareRerank(request: Extract<RequestPreparation, {
|
|
7
|
+
readonly modelType: "rerank";
|
|
8
|
+
}>): PreparedRequest;
|
|
9
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/protocols/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,CAAC,kBAAkB,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAA;CAAE,CAAC,GACxE,eAAe,CAQjB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,CAAC,kBAAkB,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAA;CAAE,CAAC,GACrE,eAAe,CASjB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsonRequest } from "../request-utils.js";
|
|
2
|
+
export function prepareEmbedding(request) {
|
|
3
|
+
return jsonRequest(request, "/v1/embeddings", {
|
|
4
|
+
...request.input.extraBody,
|
|
5
|
+
model: request.model,
|
|
6
|
+
input: request.input.input,
|
|
7
|
+
...(request.input.dimensions !== undefined ? { dimensions: request.input.dimensions } : {}),
|
|
8
|
+
...(request.input.encodingFormat ? { encoding_format: request.input.encodingFormat } : {}),
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export function prepareRerank(request) {
|
|
12
|
+
return jsonRequest(request, "/v2/rerank", {
|
|
13
|
+
...request.input.extraBody,
|
|
14
|
+
model: request.model,
|
|
15
|
+
query: request.input.query,
|
|
16
|
+
documents: request.input.documents,
|
|
17
|
+
...(request.input.topN !== undefined ? { top_n: request.input.topN } : {}),
|
|
18
|
+
...(request.input.returnDocuments !== undefined ? { return_documents: request.input.returnDocuments } : {}),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/protocols/catalog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,UAAU,gBAAgB,CAC9B,OAAyE;IAEzE,OAAO,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE;QAC5C,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;QAC1B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAsE;IAEtE,OAAO,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE;QACxC,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;QAC1B,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;QAClC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5G,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Message } from "../contracts.js";
|
|
2
|
+
export declare function toOpenAIMessage(message: Message): Record<string, unknown>;
|
|
3
|
+
export declare function toResponsesMessage(message: Message): Record<string, unknown>;
|
|
4
|
+
export declare function anthropicContent(content: Message["content"]): unknown[];
|
|
5
|
+
export declare function geminiParts(content: Message["content"]): unknown[];
|
|
6
|
+
//# sourceMappingURL=content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/protocols/content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG5D,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU5E;AAkED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,EAAE,CAqBvE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,EAAE,CAkBlE"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { dataURL, stripDataURL, toBase64 } from "../request-utils.js";
|
|
2
|
+
export function toOpenAIMessage(message) {
|
|
3
|
+
return {
|
|
4
|
+
role: message.role,
|
|
5
|
+
content: typeof message.content === "string"
|
|
6
|
+
? message.content
|
|
7
|
+
: message.content.map(toOpenAIContentPart),
|
|
8
|
+
...(message.name ? { name: message.name } : {}),
|
|
9
|
+
...(message.toolCallId ? { tool_call_id: message.toolCallId } : {}),
|
|
10
|
+
...message.protocolMetadata,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function toResponsesMessage(message) {
|
|
14
|
+
return {
|
|
15
|
+
role: message.role,
|
|
16
|
+
content: typeof message.content === "string"
|
|
17
|
+
? message.content
|
|
18
|
+
: message.content.map(toResponsesContentPart),
|
|
19
|
+
...(message.name ? { name: message.name } : {}),
|
|
20
|
+
...message.protocolMetadata,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function toOpenAIContentPart(part) {
|
|
24
|
+
switch (part.type) {
|
|
25
|
+
case "text":
|
|
26
|
+
return { type: "text", text: part.text };
|
|
27
|
+
case "image":
|
|
28
|
+
return {
|
|
29
|
+
type: "image_url",
|
|
30
|
+
image_url: {
|
|
31
|
+
url: dataURL(part.image, part.mediaType ?? "image/png"),
|
|
32
|
+
...(part.detail ? { detail: part.detail } : {}),
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
case "audio":
|
|
36
|
+
return {
|
|
37
|
+
type: "input_audio",
|
|
38
|
+
input_audio: {
|
|
39
|
+
data: typeof part.audio === "string" ? part.audio : toBase64(part.audio),
|
|
40
|
+
format: part.mediaType ?? "wav",
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
case "file":
|
|
44
|
+
return typeof part.file === "string"
|
|
45
|
+
? { type: "file", file_id: part.file }
|
|
46
|
+
: {
|
|
47
|
+
type: "file",
|
|
48
|
+
file_data: toBase64(part.file),
|
|
49
|
+
...(part.filename ? { filename: part.filename } : {}),
|
|
50
|
+
};
|
|
51
|
+
case "raw":
|
|
52
|
+
return part.value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function toResponsesContentPart(part) {
|
|
56
|
+
switch (part.type) {
|
|
57
|
+
case "text":
|
|
58
|
+
return { type: "input_text", text: part.text };
|
|
59
|
+
case "image":
|
|
60
|
+
return {
|
|
61
|
+
type: "input_image",
|
|
62
|
+
image_url: dataURL(part.image, part.mediaType ?? "image/png"),
|
|
63
|
+
...(part.detail ? { detail: part.detail } : {}),
|
|
64
|
+
};
|
|
65
|
+
case "audio":
|
|
66
|
+
return {
|
|
67
|
+
type: "input_audio",
|
|
68
|
+
input_audio: {
|
|
69
|
+
data: typeof part.audio === "string" ? part.audio : toBase64(part.audio),
|
|
70
|
+
format: part.mediaType ?? "wav",
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
case "file":
|
|
74
|
+
return typeof part.file === "string"
|
|
75
|
+
? { type: "input_file", file_id: part.file }
|
|
76
|
+
: {
|
|
77
|
+
type: "input_file",
|
|
78
|
+
file_data: toBase64(part.file),
|
|
79
|
+
...(part.filename ? { filename: part.filename } : {}),
|
|
80
|
+
};
|
|
81
|
+
case "raw":
|
|
82
|
+
return part.value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export function anthropicContent(content) {
|
|
86
|
+
if (typeof content === "string")
|
|
87
|
+
return [{ type: "text", text: content }];
|
|
88
|
+
return content.map((part) => {
|
|
89
|
+
if (part.type === "text")
|
|
90
|
+
return { type: "text", text: part.text };
|
|
91
|
+
if (part.type === "image") {
|
|
92
|
+
return typeof part.image === "string" && !part.image.startsWith("data:")
|
|
93
|
+
? { type: "image", source: { type: "url", url: part.image } }
|
|
94
|
+
: {
|
|
95
|
+
type: "image",
|
|
96
|
+
source: {
|
|
97
|
+
type: "base64",
|
|
98
|
+
media_type: part.mediaType ?? "image/png",
|
|
99
|
+
data: stripDataURL(typeof part.image === "string" ? part.image : toBase64(part.image)),
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (part.type === "raw")
|
|
104
|
+
return part.value;
|
|
105
|
+
throw new Error(`Anthropic Messages does not support semantic ${part.type} content.`);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export function geminiParts(content) {
|
|
109
|
+
if (typeof content === "string")
|
|
110
|
+
return [{ text: content }];
|
|
111
|
+
return content.map((part) => {
|
|
112
|
+
if (part.type === "text")
|
|
113
|
+
return { text: part.text };
|
|
114
|
+
if (part.type === "image" || part.type === "audio" || part.type === "file") {
|
|
115
|
+
const value = part.type === "image" ? part.image : part.type === "audio" ? part.audio : part.file;
|
|
116
|
+
const mediaType = part.mediaType ?? "application/octet-stream";
|
|
117
|
+
return typeof value === "string" && !value.startsWith("data:")
|
|
118
|
+
? { fileData: { mimeType: mediaType, fileUri: value } }
|
|
119
|
+
: {
|
|
120
|
+
inlineData: {
|
|
121
|
+
mimeType: mediaType,
|
|
122
|
+
data: stripDataURL(typeof value === "string" ? value : toBase64(value)),
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return part.value;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/protocols/content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RequestPreparation } from "../request-types.js";
|
|
2
|
+
import type { PreparedRequest } from "../request-utils.js";
|
|
3
|
+
export declare function prepareImageGeneration(request: Extract<RequestPreparation, {
|
|
4
|
+
readonly modelType: "image-generation";
|
|
5
|
+
}>): PreparedRequest;
|
|
6
|
+
export declare function prepareImageEditing(request: Extract<RequestPreparation, {
|
|
7
|
+
readonly modelType: "image-editing";
|
|
8
|
+
}>): PreparedRequest;
|
|
9
|
+
//# sourceMappingURL=images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/protocols/images.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,CAAC,kBAAkB,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,CAAC,GAC/E,eAAe,CAiBjB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,CAAC,kBAAkB,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAA;CAAE,CAAC,GAC5E,eAAe,CAejB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { mediaBlob, requestWithBody, jsonRequest } from "../request-utils.js";
|
|
2
|
+
export function prepareImageGeneration(request) {
|
|
3
|
+
const size = typeof request.input.size === "string"
|
|
4
|
+
? request.input.size
|
|
5
|
+
: request.input.size
|
|
6
|
+
? `${request.input.size.width}x${request.input.size.height}`
|
|
7
|
+
: undefined;
|
|
8
|
+
return jsonRequest(request, "/v1/images/generations", {
|
|
9
|
+
...request.input.extraBody,
|
|
10
|
+
model: request.model,
|
|
11
|
+
prompt: request.input.prompt,
|
|
12
|
+
...(size ? { size } : {}),
|
|
13
|
+
...(request.input.n !== undefined ? { n: request.input.n } : {}),
|
|
14
|
+
...(request.input.quality ? { quality: request.input.quality } : {}),
|
|
15
|
+
...(request.input.style ? { style: request.input.style } : {}),
|
|
16
|
+
...(request.input.responseFormat ? { response_format: request.input.responseFormat } : {}),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function prepareImageEditing(request) {
|
|
20
|
+
const form = new FormData();
|
|
21
|
+
form.set("model", request.model);
|
|
22
|
+
form.set("prompt", request.input.prompt);
|
|
23
|
+
const imageField = request.input.images.length > 1 ? "image[]" : "image";
|
|
24
|
+
request.input.images.forEach((image, index) => {
|
|
25
|
+
form.append(imageField, mediaBlob(image), `image-${index + 1}`);
|
|
26
|
+
});
|
|
27
|
+
if (request.input.mask !== undefined)
|
|
28
|
+
form.set("mask", mediaBlob(request.input.mask), "mask");
|
|
29
|
+
if (request.input.size)
|
|
30
|
+
form.set("size", request.input.size);
|
|
31
|
+
if (request.input.n !== undefined)
|
|
32
|
+
form.set("n", String(request.input.n));
|
|
33
|
+
for (const [key, value] of Object.entries(request.input.extraFields ?? {})) {
|
|
34
|
+
if (value !== undefined)
|
|
35
|
+
form.set(key, typeof value === "string" ? value : JSON.stringify(value));
|
|
36
|
+
}
|
|
37
|
+
return requestWithBody(request, "/v1/images/edits", form);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/protocols/images.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { PreparedRequest } from "../request-utils.js";
|
|
2
|
+
export type { PreparedRequest } from "../request-utils.js";
|
|
3
|
+
export type MediaProtocol = "openai-audio" | "dashscope-audio" | "dashscope-transcription" | "volcengine-audio" | "xfyun-audio" | "zhipu-audio" | "minimax-audio" | "dashscope-video" | "volcengine-video";
|
|
4
|
+
export interface PreparedSpeechRequest extends PreparedRequest {
|
|
5
|
+
readonly response: {
|
|
6
|
+
readonly kind: "audio";
|
|
7
|
+
readonly mediaType?: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface PreparedTranscriptionRequest extends PreparedRequest {
|
|
11
|
+
readonly response: {
|
|
12
|
+
readonly kind: "json";
|
|
13
|
+
readonly field: "text";
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface PreparedVideoRequest {
|
|
17
|
+
readonly submit: PreparedRequest;
|
|
18
|
+
readonly lifecycle: {
|
|
19
|
+
readonly kind: "async-job";
|
|
20
|
+
readonly taskIdPath: string;
|
|
21
|
+
readonly status: (taskId: string) => PreparedRequest;
|
|
22
|
+
readonly resultPath: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface SpeechPreparationInput {
|
|
26
|
+
readonly protocol: Extract<MediaProtocol, `${string}-audio`>;
|
|
27
|
+
readonly model: string;
|
|
28
|
+
readonly input: string;
|
|
29
|
+
readonly voice?: string;
|
|
30
|
+
readonly responseFormat?: string;
|
|
31
|
+
readonly speed?: number;
|
|
32
|
+
readonly parameters?: Readonly<Record<string, unknown>>;
|
|
33
|
+
readonly extraBody?: Readonly<Record<string, unknown>>;
|
|
34
|
+
readonly baseURL?: string;
|
|
35
|
+
readonly endpoint?: string;
|
|
36
|
+
readonly headers?: HeadersInit;
|
|
37
|
+
}
|
|
38
|
+
export declare function prepareSpeechRequest(input: SpeechPreparationInput): PreparedSpeechRequest;
|
|
39
|
+
export interface TranscriptionPreparationInput {
|
|
40
|
+
readonly protocol: Extract<MediaProtocol, `${string}-audio`> | "dashscope-transcription";
|
|
41
|
+
readonly model: string;
|
|
42
|
+
readonly file: Blob | Uint8Array | string;
|
|
43
|
+
readonly filename?: string;
|
|
44
|
+
readonly language?: string;
|
|
45
|
+
readonly prompt?: string;
|
|
46
|
+
readonly extraFields?: Readonly<Record<string, string>>;
|
|
47
|
+
readonly extraBody?: Readonly<Record<string, unknown>>;
|
|
48
|
+
readonly baseURL?: string;
|
|
49
|
+
readonly endpoint?: string;
|
|
50
|
+
readonly headers?: HeadersInit;
|
|
51
|
+
}
|
|
52
|
+
export declare function prepareTranscriptionRequest(input: TranscriptionPreparationInput): PreparedTranscriptionRequest;
|
|
53
|
+
export interface VideoPreparationInput {
|
|
54
|
+
readonly protocol: Extract<MediaProtocol, `${string}-video`>;
|
|
55
|
+
readonly model: string;
|
|
56
|
+
readonly prompt: string;
|
|
57
|
+
readonly input?: Readonly<Record<string, unknown>>;
|
|
58
|
+
readonly parameters?: Readonly<Record<string, unknown>>;
|
|
59
|
+
readonly extraBody?: Readonly<Record<string, unknown>>;
|
|
60
|
+
readonly baseURL?: string;
|
|
61
|
+
readonly endpoint?: string;
|
|
62
|
+
readonly headers?: HeadersInit;
|
|
63
|
+
}
|
|
64
|
+
export declare function prepareVideoRequest(input: VideoPreparationInput): PreparedVideoRequest;
|
|
65
|
+
export type MediaPreparationRequest = ({
|
|
66
|
+
readonly operation: "speech";
|
|
67
|
+
} & SpeechPreparationInput) | ({
|
|
68
|
+
readonly operation: "transcription";
|
|
69
|
+
} & TranscriptionPreparationInput) | ({
|
|
70
|
+
readonly operation: "video";
|
|
71
|
+
} & VideoPreparationInput);
|
|
72
|
+
export type PreparedMediaRequest = PreparedSpeechRequest | PreparedTranscriptionRequest | PreparedVideoRequest;
|
|
73
|
+
/** Dispatches a media request to its wire-protocol converter. */
|
|
74
|
+
export declare function prepareMediaRequest(input: MediaPreparationRequest): PreparedMediaRequest;
|
|
75
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/protocols/media.ts"],"names":[],"mappings":"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"}
|