@bowenqt/qiniu-ai-sdk 0.4.0 → 0.5.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/README.md +26 -0
- package/dist/adapter/convert-prompt.d.ts +7 -0
- package/dist/adapter/convert-prompt.d.ts.map +1 -0
- package/dist/adapter/convert-prompt.js +207 -0
- package/dist/adapter/convert-prompt.js.map +1 -0
- package/dist/adapter/convert-prompt.mjs +201 -0
- package/dist/adapter/index.d.ts +4 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +9 -0
- package/dist/adapter/index.js.map +1 -0
- package/dist/adapter/index.mjs +3 -0
- package/dist/adapter/provider.d.ts +14 -0
- package/dist/adapter/provider.d.ts.map +1 -0
- package/dist/adapter/provider.js +36 -0
- package/dist/adapter/provider.js.map +1 -0
- package/dist/adapter/provider.mjs +32 -0
- package/dist/adapter/qiniu-chat-model.d.ts +27 -0
- package/dist/adapter/qiniu-chat-model.d.ts.map +1 -0
- package/dist/adapter/qiniu-chat-model.js +207 -0
- package/dist/adapter/qiniu-chat-model.js.map +1 -0
- package/dist/adapter/qiniu-chat-model.mjs +203 -0
- package/dist/adapter/types.d.ts +2 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +3 -0
- package/dist/adapter/types.js.map +1 -0
- package/dist/adapter/types.mjs +2 -0
- package/dist/adapter/utils.d.ts +2 -0
- package/dist/adapter/utils.d.ts.map +1 -0
- package/dist/adapter/utils.js +26 -0
- package/dist/adapter/utils.js.map +1 -0
- package/dist/adapter/utils.mjs +23 -0
- package/dist/client.d.ts +9 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +18 -18
- package/dist/client.js.map +1 -1
- package/dist/client.mjs +9 -9
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/models.d.ts +115 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +150 -0
- package/dist/models.js.map +1 -0
- package/dist/models.mjs +147 -0
- package/dist/modules/image/index.d.ts +2 -1
- package/dist/modules/image/index.d.ts.map +1 -1
- package/dist/modules/image/index.js.map +1 -1
- package/dist/modules/video/index.d.ts +2 -1
- package/dist/modules/video/index.d.ts.map +1 -1
- package/dist/modules/video/index.js.map +1 -1
- package/package.json +15 -1
package/README.md
CHANGED
|
@@ -72,6 +72,32 @@ for await (const chunk of stream) {
|
|
|
72
72
|
}
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
+
## Vercel AI SDK Adapter
|
|
76
|
+
|
|
77
|
+
Use the adapter to integrate with the Vercel AI SDK (`streamText`, `generateText`).
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
import { createQiniu } from '@bowenqt/qiniu-ai-sdk/adapter';
|
|
81
|
+
import { streamText } from 'ai';
|
|
82
|
+
|
|
83
|
+
const qiniu = createQiniu({
|
|
84
|
+
apiKey: process.env.QINIU_API_KEY || process.env.OPENAI_API_KEY,
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const { textStream } = await streamText({
|
|
88
|
+
model: qiniu.languageModel('gemini-2.5-flash'),
|
|
89
|
+
prompt: 'Introduce Qiniu Cloud in one sentence.',
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
for await (const text of textStream) {
|
|
93
|
+
process.stdout.write(text);
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Notes:
|
|
98
|
+
- If you already have a `QiniuAI` client, pass it via `createQiniu({ client })`.
|
|
99
|
+
- You can override `baseUrl` using `createQiniu({ baseUrl })` or `QINIU_BASE_URL`.
|
|
100
|
+
|
|
75
101
|
## API Reference
|
|
76
102
|
|
|
77
103
|
### Client Initialization
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ChatCompletionRequest, ChatMessage } from '../lib/types';
|
|
2
|
+
import type { LanguageModelV2FinishReason, LanguageModelV2FunctionTool, LanguageModelV2Prompt, LanguageModelV2ProviderDefinedTool, LanguageModelV2ToolChoice } from './types';
|
|
3
|
+
export declare function convertPromptToMessages(prompt: LanguageModelV2Prompt): ChatMessage[];
|
|
4
|
+
export declare function mapFinishReason(reason?: string | null): LanguageModelV2FinishReason;
|
|
5
|
+
export declare function convertTools(tools?: Array<LanguageModelV2FunctionTool | LanguageModelV2ProviderDefinedTool>): ChatCompletionRequest['tools'] | undefined;
|
|
6
|
+
export declare function convertToolChoice(choice?: LanguageModelV2ToolChoice): ChatCompletionRequest['tool_choice'] | undefined;
|
|
7
|
+
//# sourceMappingURL=convert-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-prompt.d.ts","sourceRoot":"","sources":["../../src/adapter/convert-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAyB,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAER,2BAA2B,EAC3B,2BAA2B,EAE3B,qBAAqB,EACrB,kCAAkC,EAGlC,yBAAyB,EAG5B,MAAM,SAAS,CAAC;AAEjB,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,GAAG,WAAW,EAAE,CA4BpF;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,2BAA2B,CAanF;AAED,wBAAgB,YAAY,CACxB,KAAK,CAAC,EAAE,KAAK,CAAC,2BAA2B,GAAG,kCAAkC,CAAC,GAChF,qBAAqB,CAAC,OAAO,CAAC,GAAG,SAAS,CAmB5C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,qBAAqB,CAAC,aAAa,CAAC,GAAG,SAAS,CAsBtH"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertPromptToMessages = convertPromptToMessages;
|
|
4
|
+
exports.mapFinishReason = mapFinishReason;
|
|
5
|
+
exports.convertTools = convertTools;
|
|
6
|
+
exports.convertToolChoice = convertToolChoice;
|
|
7
|
+
function convertPromptToMessages(prompt) {
|
|
8
|
+
const messages = [];
|
|
9
|
+
for (const message of prompt) {
|
|
10
|
+
if (message.role === 'system') {
|
|
11
|
+
messages.push({ role: 'system', content: message.content });
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (message.role === 'tool') {
|
|
15
|
+
messages.push(...convertToolResultMessages(message));
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const { content, toolCalls } = convertAssistantOrUserMessage(message);
|
|
19
|
+
const normalized = {
|
|
20
|
+
role: message.role,
|
|
21
|
+
content,
|
|
22
|
+
};
|
|
23
|
+
if (toolCalls.length > 0) {
|
|
24
|
+
normalized.tool_calls = toolCalls;
|
|
25
|
+
}
|
|
26
|
+
messages.push(normalized);
|
|
27
|
+
}
|
|
28
|
+
return messages;
|
|
29
|
+
}
|
|
30
|
+
function mapFinishReason(reason) {
|
|
31
|
+
switch (reason) {
|
|
32
|
+
case 'stop':
|
|
33
|
+
return 'stop';
|
|
34
|
+
case 'length':
|
|
35
|
+
return 'length';
|
|
36
|
+
case 'tool_calls':
|
|
37
|
+
return 'tool-calls';
|
|
38
|
+
case 'content_filter':
|
|
39
|
+
return 'content-filter';
|
|
40
|
+
default:
|
|
41
|
+
return 'unknown';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function convertTools(tools) {
|
|
45
|
+
if (!tools || tools.length === 0) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const functionTools = tools.filter((tool) => tool.type === 'function');
|
|
49
|
+
if (functionTools.length === 0) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return functionTools.map((tool) => ({
|
|
53
|
+
type: 'function',
|
|
54
|
+
function: {
|
|
55
|
+
name: tool.name,
|
|
56
|
+
description: tool.description,
|
|
57
|
+
parameters: tool.parameters,
|
|
58
|
+
},
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
function convertToolChoice(choice) {
|
|
62
|
+
if (!choice) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
if (choice.type === 'auto') {
|
|
66
|
+
return 'auto';
|
|
67
|
+
}
|
|
68
|
+
if (choice.type === 'none') {
|
|
69
|
+
return 'none';
|
|
70
|
+
}
|
|
71
|
+
if (choice.type === 'required') {
|
|
72
|
+
return 'auto';
|
|
73
|
+
}
|
|
74
|
+
if (choice.type === 'tool') {
|
|
75
|
+
return { type: 'function', function: { name: choice.toolName } };
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
function convertAssistantOrUserMessage(message) {
|
|
80
|
+
const parts = [];
|
|
81
|
+
const toolCalls = [];
|
|
82
|
+
for (const part of message.content) {
|
|
83
|
+
if (part.type === 'text') {
|
|
84
|
+
parts.push({ type: 'text', text: part.text });
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (part.type === 'reasoning') {
|
|
88
|
+
parts.push({ type: 'text', text: part.text });
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (part.type === 'file') {
|
|
92
|
+
const converted = convertFilePart(part);
|
|
93
|
+
if (converted) {
|
|
94
|
+
parts.push(converted);
|
|
95
|
+
}
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (part.type === 'tool-call') {
|
|
99
|
+
toolCalls.push(convertToolCall(part));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const content = mergeTextParts(parts);
|
|
103
|
+
return { content, toolCalls };
|
|
104
|
+
}
|
|
105
|
+
function convertToolResultMessages(message) {
|
|
106
|
+
const toolMessages = [];
|
|
107
|
+
for (const part of message.content) {
|
|
108
|
+
if (part.type !== 'tool-result') {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const content = stringifyToolResult(part);
|
|
112
|
+
toolMessages.push({
|
|
113
|
+
role: 'tool',
|
|
114
|
+
content,
|
|
115
|
+
name: part.toolName,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return toolMessages;
|
|
119
|
+
}
|
|
120
|
+
function convertFilePart(part) {
|
|
121
|
+
const mediaType = part.mediaType.toLowerCase();
|
|
122
|
+
if (!mediaType.startsWith('image/')) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const url = resolveFileDataUrl(part);
|
|
126
|
+
if (!url) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
type: 'image_url',
|
|
131
|
+
image_url: {
|
|
132
|
+
url,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function resolveFileDataUrl(part) {
|
|
137
|
+
const data = part.data;
|
|
138
|
+
if (data instanceof URL) {
|
|
139
|
+
return data.toString();
|
|
140
|
+
}
|
|
141
|
+
if (typeof data === 'string') {
|
|
142
|
+
if (/^https?:/i.test(data) || /^data:/i.test(data)) {
|
|
143
|
+
return data;
|
|
144
|
+
}
|
|
145
|
+
return `data:${part.mediaType};base64,${data}`;
|
|
146
|
+
}
|
|
147
|
+
if (data instanceof Uint8Array) {
|
|
148
|
+
const base64 = encodeBase64(data);
|
|
149
|
+
return `data:${part.mediaType};base64,${base64}`;
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
function encodeBase64(data) {
|
|
154
|
+
if (typeof Buffer !== 'undefined') {
|
|
155
|
+
return Buffer.from(data).toString('base64');
|
|
156
|
+
}
|
|
157
|
+
let binary = '';
|
|
158
|
+
for (const byte of data) {
|
|
159
|
+
binary += String.fromCharCode(byte);
|
|
160
|
+
}
|
|
161
|
+
const btoaFn = globalThis.btoa;
|
|
162
|
+
if (btoaFn) {
|
|
163
|
+
return btoaFn(binary);
|
|
164
|
+
}
|
|
165
|
+
throw new Error('Base64 encoding is not available in this environment.');
|
|
166
|
+
}
|
|
167
|
+
function convertToolCall(part) {
|
|
168
|
+
return {
|
|
169
|
+
id: part.toolCallId,
|
|
170
|
+
type: 'function',
|
|
171
|
+
function: {
|
|
172
|
+
name: part.toolName,
|
|
173
|
+
arguments: JSON.stringify(part.args ?? {}),
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function stringifyToolResult(part) {
|
|
178
|
+
if (Array.isArray(part.content) && part.content.length > 0) {
|
|
179
|
+
return part.content
|
|
180
|
+
.map((contentPart) => {
|
|
181
|
+
if (contentPart.type === 'text') {
|
|
182
|
+
return contentPart.text;
|
|
183
|
+
}
|
|
184
|
+
if (contentPart.type === 'image') {
|
|
185
|
+
const mediaType = contentPart.mediaType || 'image/png';
|
|
186
|
+
return `data:${mediaType};base64,${contentPart.data}`;
|
|
187
|
+
}
|
|
188
|
+
return '';
|
|
189
|
+
})
|
|
190
|
+
.join('');
|
|
191
|
+
}
|
|
192
|
+
if (part.result !== undefined) {
|
|
193
|
+
return JSON.stringify(part.result);
|
|
194
|
+
}
|
|
195
|
+
return '';
|
|
196
|
+
}
|
|
197
|
+
function mergeTextParts(parts) {
|
|
198
|
+
if (parts.length === 0) {
|
|
199
|
+
return '';
|
|
200
|
+
}
|
|
201
|
+
const hasNonText = parts.some((part) => part.type !== 'text');
|
|
202
|
+
if (hasNonText) {
|
|
203
|
+
return parts;
|
|
204
|
+
}
|
|
205
|
+
return parts.map((part) => (part.type === 'text' ? part.text ?? '' : '')).join('');
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=convert-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-prompt.js","sourceRoot":"","sources":["../../src/adapter/convert-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
export function convertPromptToMessages(prompt) {
|
|
2
|
+
const messages = [];
|
|
3
|
+
for (const message of prompt) {
|
|
4
|
+
if (message.role === 'system') {
|
|
5
|
+
messages.push({ role: 'system', content: message.content });
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
if (message.role === 'tool') {
|
|
9
|
+
messages.push(...convertToolResultMessages(message));
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
const { content, toolCalls } = convertAssistantOrUserMessage(message);
|
|
13
|
+
const normalized = {
|
|
14
|
+
role: message.role,
|
|
15
|
+
content,
|
|
16
|
+
};
|
|
17
|
+
if (toolCalls.length > 0) {
|
|
18
|
+
normalized.tool_calls = toolCalls;
|
|
19
|
+
}
|
|
20
|
+
messages.push(normalized);
|
|
21
|
+
}
|
|
22
|
+
return messages;
|
|
23
|
+
}
|
|
24
|
+
export function mapFinishReason(reason) {
|
|
25
|
+
switch (reason) {
|
|
26
|
+
case 'stop':
|
|
27
|
+
return 'stop';
|
|
28
|
+
case 'length':
|
|
29
|
+
return 'length';
|
|
30
|
+
case 'tool_calls':
|
|
31
|
+
return 'tool-calls';
|
|
32
|
+
case 'content_filter':
|
|
33
|
+
return 'content-filter';
|
|
34
|
+
default:
|
|
35
|
+
return 'unknown';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function convertTools(tools) {
|
|
39
|
+
if (!tools || tools.length === 0) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const functionTools = tools.filter((tool) => tool.type === 'function');
|
|
43
|
+
if (functionTools.length === 0) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
return functionTools.map((tool) => ({
|
|
47
|
+
type: 'function',
|
|
48
|
+
function: {
|
|
49
|
+
name: tool.name,
|
|
50
|
+
description: tool.description,
|
|
51
|
+
parameters: tool.parameters,
|
|
52
|
+
},
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
export function convertToolChoice(choice) {
|
|
56
|
+
if (!choice) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
if (choice.type === 'auto') {
|
|
60
|
+
return 'auto';
|
|
61
|
+
}
|
|
62
|
+
if (choice.type === 'none') {
|
|
63
|
+
return 'none';
|
|
64
|
+
}
|
|
65
|
+
if (choice.type === 'required') {
|
|
66
|
+
return 'auto';
|
|
67
|
+
}
|
|
68
|
+
if (choice.type === 'tool') {
|
|
69
|
+
return { type: 'function', function: { name: choice.toolName } };
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
function convertAssistantOrUserMessage(message) {
|
|
74
|
+
const parts = [];
|
|
75
|
+
const toolCalls = [];
|
|
76
|
+
for (const part of message.content) {
|
|
77
|
+
if (part.type === 'text') {
|
|
78
|
+
parts.push({ type: 'text', text: part.text });
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (part.type === 'reasoning') {
|
|
82
|
+
parts.push({ type: 'text', text: part.text });
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (part.type === 'file') {
|
|
86
|
+
const converted = convertFilePart(part);
|
|
87
|
+
if (converted) {
|
|
88
|
+
parts.push(converted);
|
|
89
|
+
}
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (part.type === 'tool-call') {
|
|
93
|
+
toolCalls.push(convertToolCall(part));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const content = mergeTextParts(parts);
|
|
97
|
+
return { content, toolCalls };
|
|
98
|
+
}
|
|
99
|
+
function convertToolResultMessages(message) {
|
|
100
|
+
const toolMessages = [];
|
|
101
|
+
for (const part of message.content) {
|
|
102
|
+
if (part.type !== 'tool-result') {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const content = stringifyToolResult(part);
|
|
106
|
+
toolMessages.push({
|
|
107
|
+
role: 'tool',
|
|
108
|
+
content,
|
|
109
|
+
name: part.toolName,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return toolMessages;
|
|
113
|
+
}
|
|
114
|
+
function convertFilePart(part) {
|
|
115
|
+
const mediaType = part.mediaType.toLowerCase();
|
|
116
|
+
if (!mediaType.startsWith('image/')) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const url = resolveFileDataUrl(part);
|
|
120
|
+
if (!url) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
type: 'image_url',
|
|
125
|
+
image_url: {
|
|
126
|
+
url,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function resolveFileDataUrl(part) {
|
|
131
|
+
const data = part.data;
|
|
132
|
+
if (data instanceof URL) {
|
|
133
|
+
return data.toString();
|
|
134
|
+
}
|
|
135
|
+
if (typeof data === 'string') {
|
|
136
|
+
if (/^https?:/i.test(data) || /^data:/i.test(data)) {
|
|
137
|
+
return data;
|
|
138
|
+
}
|
|
139
|
+
return `data:${part.mediaType};base64,${data}`;
|
|
140
|
+
}
|
|
141
|
+
if (data instanceof Uint8Array) {
|
|
142
|
+
const base64 = encodeBase64(data);
|
|
143
|
+
return `data:${part.mediaType};base64,${base64}`;
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
function encodeBase64(data) {
|
|
148
|
+
if (typeof Buffer !== 'undefined') {
|
|
149
|
+
return Buffer.from(data).toString('base64');
|
|
150
|
+
}
|
|
151
|
+
let binary = '';
|
|
152
|
+
for (const byte of data) {
|
|
153
|
+
binary += String.fromCharCode(byte);
|
|
154
|
+
}
|
|
155
|
+
const btoaFn = globalThis.btoa;
|
|
156
|
+
if (btoaFn) {
|
|
157
|
+
return btoaFn(binary);
|
|
158
|
+
}
|
|
159
|
+
throw new Error('Base64 encoding is not available in this environment.');
|
|
160
|
+
}
|
|
161
|
+
function convertToolCall(part) {
|
|
162
|
+
return {
|
|
163
|
+
id: part.toolCallId,
|
|
164
|
+
type: 'function',
|
|
165
|
+
function: {
|
|
166
|
+
name: part.toolName,
|
|
167
|
+
arguments: JSON.stringify(part.args ?? {}),
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function stringifyToolResult(part) {
|
|
172
|
+
if (Array.isArray(part.content) && part.content.length > 0) {
|
|
173
|
+
return part.content
|
|
174
|
+
.map((contentPart) => {
|
|
175
|
+
if (contentPart.type === 'text') {
|
|
176
|
+
return contentPart.text;
|
|
177
|
+
}
|
|
178
|
+
if (contentPart.type === 'image') {
|
|
179
|
+
const mediaType = contentPart.mediaType || 'image/png';
|
|
180
|
+
return `data:${mediaType};base64,${contentPart.data}`;
|
|
181
|
+
}
|
|
182
|
+
return '';
|
|
183
|
+
})
|
|
184
|
+
.join('');
|
|
185
|
+
}
|
|
186
|
+
if (part.result !== undefined) {
|
|
187
|
+
return JSON.stringify(part.result);
|
|
188
|
+
}
|
|
189
|
+
return '';
|
|
190
|
+
}
|
|
191
|
+
function mergeTextParts(parts) {
|
|
192
|
+
if (parts.length === 0) {
|
|
193
|
+
return '';
|
|
194
|
+
}
|
|
195
|
+
const hasNonText = parts.some((part) => part.type !== 'text');
|
|
196
|
+
if (hasNonText) {
|
|
197
|
+
return parts;
|
|
198
|
+
}
|
|
199
|
+
return parts.map((part) => (part.type === 'text' ? part.text ?? '' : '')).join('');
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=convert-prompt.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createQiniu, qiniu } from './provider';
|
|
2
|
+
export { QiniuChatModel } from './qiniu-chat-model';
|
|
3
|
+
export type { LanguageModelV2, LanguageModelV2CallOptions, LanguageModelV2CallWarning, LanguageModelV2Content, LanguageModelV2File, LanguageModelV2FilePart, LanguageModelV2FinishReason, LanguageModelV2FunctionTool, LanguageModelV2Message, LanguageModelV2Prompt, LanguageModelV2ProviderDefinedTool, LanguageModelV2Reasoning, LanguageModelV2ReasoningPart, LanguageModelV2ResponseMetadata, LanguageModelV2StreamPart, LanguageModelV2Text, LanguageModelV2TextPart, LanguageModelV2ToolCall, LanguageModelV2ToolCallDelta, LanguageModelV2ToolCallPart, LanguageModelV2ToolChoice, LanguageModelV2ToolResultPart, LanguageModelV2Usage, } from './types';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACR,eAAe,EACf,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,kCAAkC,EAClC,wBAAwB,EACxB,4BAA4B,EAC5B,+BAA+B,EAC/B,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,oBAAoB,GACvB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QiniuChatModel = exports.qiniu = exports.createQiniu = void 0;
|
|
4
|
+
var provider_1 = require("./provider");
|
|
5
|
+
Object.defineProperty(exports, "createQiniu", { enumerable: true, get: function () { return provider_1.createQiniu; } });
|
|
6
|
+
Object.defineProperty(exports, "qiniu", { enumerable: true, get: function () { return provider_1.qiniu; } });
|
|
7
|
+
var qiniu_chat_model_1 = require("./qiniu-chat-model");
|
|
8
|
+
Object.defineProperty(exports, "QiniuChatModel", { enumerable: true, get: function () { return qiniu_chat_model_1.QiniuChatModel; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":";;;AAAA,uCAAgD;AAAvC,uGAAA,WAAW,OAAA;AAAE,iGAAA,KAAK,OAAA;AAC3B,uDAAoD;AAA3C,kHAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { QiniuAI } from '../client';
|
|
2
|
+
import { QiniuChatModel } from './qiniu-chat-model';
|
|
3
|
+
export interface QiniuProviderSettings {
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
client?: QiniuAI;
|
|
7
|
+
}
|
|
8
|
+
export declare function createQiniu(settings?: QiniuProviderSettings): {
|
|
9
|
+
languageModel: (modelId: string) => QiniuChatModel;
|
|
10
|
+
};
|
|
11
|
+
export declare const qiniu: {
|
|
12
|
+
languageModel: (modelId: string) => QiniuChatModel;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/adapter/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,QAAQ,GAAE,qBAA0B;6BAiC/B,MAAM;EAEtC;AAED,eAAO,MAAM,KAAK;6BAJe,MAAM;CAIL,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.qiniu = void 0;
|
|
4
|
+
exports.createQiniu = createQiniu;
|
|
5
|
+
const client_1 = require("../client");
|
|
6
|
+
const qiniu_chat_model_1 = require("./qiniu-chat-model");
|
|
7
|
+
function createQiniu(settings = {}) {
|
|
8
|
+
let cachedClient;
|
|
9
|
+
const getClient = () => {
|
|
10
|
+
if (settings.client) {
|
|
11
|
+
return settings.client;
|
|
12
|
+
}
|
|
13
|
+
if (!cachedClient) {
|
|
14
|
+
const apiKey = settings.apiKey ||
|
|
15
|
+
process.env.QINIU_API_KEY ||
|
|
16
|
+
process.env.OPENAI_API_KEY ||
|
|
17
|
+
'';
|
|
18
|
+
if (!apiKey) {
|
|
19
|
+
throw new Error('Qiniu API key is required. Set apiKey or QINIU_API_KEY.');
|
|
20
|
+
}
|
|
21
|
+
const baseUrl = settings.baseUrl ||
|
|
22
|
+
process.env.QINIU_BASE_URL ||
|
|
23
|
+
process.env.OPENAI_BASE_URL;
|
|
24
|
+
cachedClient = new client_1.QiniuAI({
|
|
25
|
+
apiKey,
|
|
26
|
+
baseUrl,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return cachedClient;
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
languageModel: (modelId) => new qiniu_chat_model_1.QiniuChatModel(getClient(), modelId),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
exports.qiniu = createQiniu();
|
|
36
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/adapter/provider.ts"],"names":[],"mappings":";;;AASA,kCAmCC;AA5CD,sCAAoC;AACpC,yDAAoD;AAQpD,SAAgB,WAAW,CAAC,WAAkC,EAAE;IAC5D,IAAI,YAAiC,CAAC;IAEtC,MAAM,SAAS,GAAG,GAAG,EAAE;QACnB,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,QAAQ,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,MAAM,MAAM,GACR,QAAQ,CAAC,MAAM;gBACf,OAAO,CAAC,GAAG,CAAC,aAAa;gBACzB,OAAO,CAAC,GAAG,CAAC,cAAc;gBAC1B,EAAE,CAAC;YACP,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,OAAO,GACT,QAAQ,CAAC,OAAO;gBAChB,OAAO,CAAC,GAAG,CAAC,cAAc;gBAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAEhC,YAAY,GAAG,IAAI,gBAAO,CAAC;gBACvB,MAAM;gBACN,OAAO;aACV,CAAC,CAAC;QACP,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO;QACH,aAAa,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,iCAAc,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC;KAC/E,CAAC;AACN,CAAC;AAEY,QAAA,KAAK,GAAG,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { QiniuAI } from '../client.mjs';
|
|
2
|
+
import { QiniuChatModel } from './qiniu-chat-model.mjs';
|
|
3
|
+
export function createQiniu(settings = {}) {
|
|
4
|
+
let cachedClient;
|
|
5
|
+
const getClient = () => {
|
|
6
|
+
if (settings.client) {
|
|
7
|
+
return settings.client;
|
|
8
|
+
}
|
|
9
|
+
if (!cachedClient) {
|
|
10
|
+
const apiKey = settings.apiKey ||
|
|
11
|
+
process.env.QINIU_API_KEY ||
|
|
12
|
+
process.env.OPENAI_API_KEY ||
|
|
13
|
+
'';
|
|
14
|
+
if (!apiKey) {
|
|
15
|
+
throw new Error('Qiniu API key is required. Set apiKey or QINIU_API_KEY.');
|
|
16
|
+
}
|
|
17
|
+
const baseUrl = settings.baseUrl ||
|
|
18
|
+
process.env.QINIU_BASE_URL ||
|
|
19
|
+
process.env.OPENAI_BASE_URL;
|
|
20
|
+
cachedClient = new QiniuAI({
|
|
21
|
+
apiKey,
|
|
22
|
+
baseUrl,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return cachedClient;
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
languageModel: (modelId) => new QiniuChatModel(getClient(), modelId),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export const qiniu = createQiniu();
|
|
32
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { QiniuAI } from '../client';
|
|
2
|
+
import type { LanguageModelV2, LanguageModelV2CallOptions, LanguageModelV2CallWarning, LanguageModelV2Content, LanguageModelV2FinishReason, LanguageModelV2StreamPart, LanguageModelV2Usage } from './types';
|
|
3
|
+
export declare class QiniuChatModel implements LanguageModelV2 {
|
|
4
|
+
specificationVersion: "v2";
|
|
5
|
+
provider: string;
|
|
6
|
+
modelId: string;
|
|
7
|
+
supportedUrls: Record<string, RegExp[]>;
|
|
8
|
+
private client;
|
|
9
|
+
constructor(client: QiniuAI, modelId: string);
|
|
10
|
+
doGenerate(options: LanguageModelV2CallOptions): Promise<{
|
|
11
|
+
content: Array<LanguageModelV2Content>;
|
|
12
|
+
finishReason: LanguageModelV2FinishReason;
|
|
13
|
+
usage: LanguageModelV2Usage;
|
|
14
|
+
warnings: Array<LanguageModelV2CallWarning>;
|
|
15
|
+
response?: {
|
|
16
|
+
id?: string;
|
|
17
|
+
timestamp?: Date;
|
|
18
|
+
modelId?: string;
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
doStream(options: LanguageModelV2CallOptions): Promise<{
|
|
22
|
+
stream: ReadableStream<LanguageModelV2StreamPart>;
|
|
23
|
+
}>;
|
|
24
|
+
private buildChatRequest;
|
|
25
|
+
private transformToStreamEvents;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=qiniu-chat-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qiniu-chat-model.d.ts","sourceRoot":"","sources":["../../src/adapter/qiniu-chat-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,KAAK,EACR,eAAe,EACf,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EAEzB,oBAAoB,EACvB,MAAM,SAAS,CAAC;AAEjB,qBAAa,cAAe,YAAW,eAAe;IAClD,oBAAoB,EAAG,IAAI,CAAU;IACrC,QAAQ,SAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAErC;IAEF,OAAO,CAAC,MAAM,CAAU;gBAEZ,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;IAKtC,UAAU,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC;QAC3D,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACvC,YAAY,EAAE,2BAA2B,CAAC;QAC1C,KAAK,EAAE,oBAAoB,CAAC;QAC5B,QAAQ,EAAE,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC5C,QAAQ,CAAC,EAAE;YACP,EAAE,CAAC,EAAE,MAAM,CAAC;YACZ,SAAS,CAAC,EAAE,IAAI,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACL,CAAC;IAwBI,QAAQ,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAA;KAAE,CAAC;IAUnH,OAAO,CAAC,gBAAgB;YAeT,uBAAuB;CAsGzC"}
|