@userdaoo/iflow-api-bridge 0.1.2 → 0.1.3
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.
|
@@ -5,6 +5,10 @@ import type { ChatCompletionMessage, ChatCompletionResponse, ChatCompletionStrea
|
|
|
5
5
|
export declare function generateId(): string;
|
|
6
6
|
export declare function getTimestamp(): number;
|
|
7
7
|
export declare function messagesToIFlowPrompt(messages: ChatCompletionMessage[]): string;
|
|
8
|
+
/**
|
|
9
|
+
* 提取 System 消息和 User 消息
|
|
10
|
+
* 兼容 opencode 的非标准格式(role 可能不是 user,但包含实际请求内容)
|
|
11
|
+
*/
|
|
8
12
|
export declare function extractMessages(messages: ChatCompletionMessage[]): {
|
|
9
13
|
systemMessage: string | undefined;
|
|
10
14
|
userMessage: string;
|
|
@@ -17,7 +21,7 @@ export declare function formatSSE(data: unknown): string;
|
|
|
17
21
|
export declare const SSE_DONE = "data: [DONE]\n\n";
|
|
18
22
|
/**
|
|
19
23
|
* iFlow 支持的模型列表
|
|
20
|
-
* 基于用户实际的
|
|
24
|
+
* 基于用户实际的 iFlow CLI 配置
|
|
21
25
|
*/
|
|
22
26
|
export declare const AVAILABLE_MODELS: {
|
|
23
27
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/openai/transformer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAG5B,SAAS,EAEV,MAAM,YAAY,CAAC;AAEpB,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAO/E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,qBAAqB,EAAE,GAAG;IAClE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/openai/transformer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAG5B,SAAS,EAEV,MAAM,YAAY,CAAC;AAEpB,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAO/E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,qBAAqB,EAAE,GAAG;IAClE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAqCA;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,MAAM,GAAG,QAAQ,GAAG,IAAW,GAC5C,4BAA4B,CAc9B;AAED,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,EAChB,YAAY,GAAE,MAAM,GAAG,QAAiB,GACvC,sBAAsB,CAkBxB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAS5E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;GAU5B,CAAC;AAEF,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
|
@@ -28,9 +28,14 @@ function messagesToIFlowPrompt(messages) {
|
|
|
28
28
|
return `${msg.role}: [复杂内容]`;
|
|
29
29
|
}).join('\n\n');
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* 提取 System 消息和 User 消息
|
|
33
|
+
* 兼容 opencode 的非标准格式(role 可能不是 user,但包含实际请求内容)
|
|
34
|
+
*/
|
|
31
35
|
function extractMessages(messages) {
|
|
32
36
|
let systemMessage;
|
|
33
37
|
let userMessage = '';
|
|
38
|
+
// 第一步:查找标准格式的 system 和 user 消息
|
|
34
39
|
for (const msg of messages) {
|
|
35
40
|
if (typeof msg.content !== 'string')
|
|
36
41
|
continue;
|
|
@@ -41,6 +46,26 @@ function extractMessages(messages) {
|
|
|
41
46
|
userMessage = msg.content;
|
|
42
47
|
}
|
|
43
48
|
}
|
|
49
|
+
// 第二步:如果没有找到 user 消息,尝试其他角色(developer, assistant 等)
|
|
50
|
+
if (!userMessage) {
|
|
51
|
+
for (const msg of messages) {
|
|
52
|
+
if (typeof msg.content !== 'string')
|
|
53
|
+
continue;
|
|
54
|
+
if (msg.role !== 'system' && msg.content.trim()) {
|
|
55
|
+
userMessage = msg.content;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// 第三步:如果还是没有,拼接所有非 system 消息
|
|
61
|
+
if (!userMessage) {
|
|
62
|
+
const nonSystemContents = messages
|
|
63
|
+
.filter(msg => msg.role !== 'system' && typeof msg.content === 'string')
|
|
64
|
+
.map(msg => msg.content);
|
|
65
|
+
if (nonSystemContents.length > 0) {
|
|
66
|
+
userMessage = nonSystemContents.join('\n\n');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
44
69
|
return { systemMessage, userMessage };
|
|
45
70
|
}
|
|
46
71
|
function createStreamChunk(id, model, content, finishReason = null) {
|
|
@@ -93,7 +118,7 @@ function formatSSE(data) {
|
|
|
93
118
|
exports.SSE_DONE = 'data: [DONE]\n\n';
|
|
94
119
|
/**
|
|
95
120
|
* iFlow 支持的模型列表
|
|
96
|
-
* 基于用户实际的
|
|
121
|
+
* 基于用户实际的 iFlow CLI 配置
|
|
97
122
|
*/
|
|
98
123
|
exports.AVAILABLE_MODELS = [
|
|
99
124
|
{ id: 'glm-4.7', name: 'GLM-4.7 (Default)' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/openai/transformer.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAYH,gCAEC;AAED,oCAEC;AAED,sDAOC;
|
|
1
|
+
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/openai/transformer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,6 +29,10 @@ export function messagesToIFlowPrompt(messages: ChatCompletionMessage[]): string
|
|
|
29
29
|
}).join('\n\n');
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
/**
|
|
33
|
+
* 提取 System 消息和 User 消息
|
|
34
|
+
* 兼容 opencode 的非标准格式(role 可能不是 user,但包含实际请求内容)
|
|
35
|
+
*/
|
|
32
36
|
export function extractMessages(messages: ChatCompletionMessage[]): {
|
|
33
37
|
systemMessage: string | undefined;
|
|
34
38
|
userMessage: string;
|
|
@@ -36,6 +40,7 @@ export function extractMessages(messages: ChatCompletionMessage[]): {
|
|
|
36
40
|
let systemMessage: string | undefined;
|
|
37
41
|
let userMessage = '';
|
|
38
42
|
|
|
43
|
+
// 第一步:查找标准格式的 system 和 user 消息
|
|
39
44
|
for (const msg of messages) {
|
|
40
45
|
if (typeof msg.content !== 'string') continue;
|
|
41
46
|
|
|
@@ -46,6 +51,27 @@ export function extractMessages(messages: ChatCompletionMessage[]): {
|
|
|
46
51
|
}
|
|
47
52
|
}
|
|
48
53
|
|
|
54
|
+
// 第二步:如果没有找到 user 消息,尝试其他角色(developer, assistant 等)
|
|
55
|
+
if (!userMessage) {
|
|
56
|
+
for (const msg of messages) {
|
|
57
|
+
if (typeof msg.content !== 'string') continue;
|
|
58
|
+
if (msg.role !== 'system' && msg.content.trim()) {
|
|
59
|
+
userMessage = msg.content;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// 第三步:如果还是没有,拼接所有非 system 消息
|
|
66
|
+
if (!userMessage) {
|
|
67
|
+
const nonSystemContents = messages
|
|
68
|
+
.filter(msg => msg.role !== 'system' && typeof msg.content === 'string')
|
|
69
|
+
.map(msg => msg.content);
|
|
70
|
+
if (nonSystemContents.length > 0) {
|
|
71
|
+
userMessage = nonSystemContents.join('\n\n');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
49
75
|
return { systemMessage, userMessage };
|
|
50
76
|
}
|
|
51
77
|
|
|
@@ -119,7 +145,7 @@ export const SSE_DONE = 'data: [DONE]\n\n';
|
|
|
119
145
|
|
|
120
146
|
/**
|
|
121
147
|
* iFlow 支持的模型列表
|
|
122
|
-
* 基于用户实际的
|
|
148
|
+
* 基于用户实际的 iFlow CLI 配置
|
|
123
149
|
*/
|
|
124
150
|
export const AVAILABLE_MODELS = [
|
|
125
151
|
{ id: 'glm-4.7', name: 'GLM-4.7 (Default)' },
|