@userdaoo/iflow-api-bridge 0.1.1 → 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.
- package/README.md +107 -134
- package/dist/adapter.d.ts +15 -24
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +107 -45
- package/dist/adapter.js.map +1 -1
- package/dist/openai/transformer.d.ts +8 -29
- package/dist/openai/transformer.d.ts.map +1 -1
- package/dist/openai/transformer.js +51 -34
- package/dist/openai/transformer.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +30 -19
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter.ts +144 -46
- package/src/openai/transformer.ts +57 -35
- package/src/server.ts +46 -21
|
@@ -2,51 +2,30 @@
|
|
|
2
2
|
* OpenAI API 与 iFlow 消息格式转换器
|
|
3
3
|
*/
|
|
4
4
|
import type { ChatCompletionMessage, ChatCompletionResponse, ChatCompletionStreamResponse, UsageInfo } from './types.js';
|
|
5
|
-
/**
|
|
6
|
-
* 生成唯一 ID
|
|
7
|
-
*/
|
|
8
5
|
export declare function generateId(): string;
|
|
9
|
-
/**
|
|
10
|
-
* 获取当前时间戳
|
|
11
|
-
*/
|
|
12
6
|
export declare function getTimestamp(): number;
|
|
13
|
-
/**
|
|
14
|
-
* 将 OpenAI 消息格式转换为 iFlow 文本格式
|
|
15
|
-
*/
|
|
16
7
|
export declare function messagesToIFlowPrompt(messages: ChatCompletionMessage[]): string;
|
|
17
8
|
/**
|
|
18
|
-
*
|
|
9
|
+
* 提取 System 消息和 User 消息
|
|
10
|
+
* 兼容 opencode 的非标准格式(role 可能不是 user,但包含实际请求内容)
|
|
19
11
|
*/
|
|
12
|
+
export declare function extractMessages(messages: ChatCompletionMessage[]): {
|
|
13
|
+
systemMessage: string | undefined;
|
|
14
|
+
userMessage: string;
|
|
15
|
+
};
|
|
20
16
|
export declare function createStreamChunk(id: string, model: string, content: string, finishReason?: 'stop' | 'length' | null): ChatCompletionStreamResponse;
|
|
21
|
-
/**
|
|
22
|
-
* 创建完整响应
|
|
23
|
-
*/
|
|
24
17
|
export declare function createCompletionResponse(id: string, model: string, content: string, usage: UsageInfo, finishReason?: 'stop' | 'length'): ChatCompletionResponse;
|
|
25
|
-
/**
|
|
26
|
-
* 估算 token 数量(简化版)
|
|
27
|
-
*/
|
|
28
18
|
export declare function estimateTokens(text: string): number;
|
|
29
|
-
/**
|
|
30
|
-
* 计算使用量
|
|
31
|
-
*/
|
|
32
19
|
export declare function calculateUsage(prompt: string, completion: string): UsageInfo;
|
|
33
|
-
/**
|
|
34
|
-
* SSE 格式化
|
|
35
|
-
*/
|
|
36
20
|
export declare function formatSSE(data: unknown): string;
|
|
37
|
-
/**
|
|
38
|
-
* SSE 结束标记
|
|
39
|
-
*/
|
|
40
21
|
export declare const SSE_DONE = "data: [DONE]\n\n";
|
|
41
22
|
/**
|
|
42
|
-
* 支持的模型列表
|
|
23
|
+
* iFlow 支持的模型列表
|
|
24
|
+
* 基于用户实际的 iFlow CLI 配置
|
|
43
25
|
*/
|
|
44
26
|
export declare const AVAILABLE_MODELS: {
|
|
45
27
|
id: string;
|
|
46
28
|
name: string;
|
|
47
29
|
}[];
|
|
48
|
-
/**
|
|
49
|
-
* 获取默认模型 ID
|
|
50
|
-
*/
|
|
51
30
|
export declare function getDefaultModel(): string;
|
|
52
31
|
//# sourceMappingURL=transformer.d.ts.map
|
|
@@ -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
|
|
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"}
|
|
@@ -7,27 +7,19 @@ exports.AVAILABLE_MODELS = exports.SSE_DONE = void 0;
|
|
|
7
7
|
exports.generateId = generateId;
|
|
8
8
|
exports.getTimestamp = getTimestamp;
|
|
9
9
|
exports.messagesToIFlowPrompt = messagesToIFlowPrompt;
|
|
10
|
+
exports.extractMessages = extractMessages;
|
|
10
11
|
exports.createStreamChunk = createStreamChunk;
|
|
11
12
|
exports.createCompletionResponse = createCompletionResponse;
|
|
12
13
|
exports.estimateTokens = estimateTokens;
|
|
13
14
|
exports.calculateUsage = calculateUsage;
|
|
14
15
|
exports.formatSSE = formatSSE;
|
|
15
16
|
exports.getDefaultModel = getDefaultModel;
|
|
16
|
-
/**
|
|
17
|
-
* 生成唯一 ID
|
|
18
|
-
*/
|
|
19
17
|
function generateId() {
|
|
20
18
|
return `chatcmpl-${Date.now().toString(36)}${Math.random().toString(36).substring(2, 10)}`;
|
|
21
19
|
}
|
|
22
|
-
/**
|
|
23
|
-
* 获取当前时间戳
|
|
24
|
-
*/
|
|
25
20
|
function getTimestamp() {
|
|
26
21
|
return Math.floor(Date.now() / 1000);
|
|
27
22
|
}
|
|
28
|
-
/**
|
|
29
|
-
* 将 OpenAI 消息格式转换为 iFlow 文本格式
|
|
30
|
-
*/
|
|
31
23
|
function messagesToIFlowPrompt(messages) {
|
|
32
24
|
return messages.map(msg => {
|
|
33
25
|
if (typeof msg.content === 'string') {
|
|
@@ -37,8 +29,45 @@ function messagesToIFlowPrompt(messages) {
|
|
|
37
29
|
}).join('\n\n');
|
|
38
30
|
}
|
|
39
31
|
/**
|
|
40
|
-
*
|
|
32
|
+
* 提取 System 消息和 User 消息
|
|
33
|
+
* 兼容 opencode 的非标准格式(role 可能不是 user,但包含实际请求内容)
|
|
41
34
|
*/
|
|
35
|
+
function extractMessages(messages) {
|
|
36
|
+
let systemMessage;
|
|
37
|
+
let userMessage = '';
|
|
38
|
+
// 第一步:查找标准格式的 system 和 user 消息
|
|
39
|
+
for (const msg of messages) {
|
|
40
|
+
if (typeof msg.content !== 'string')
|
|
41
|
+
continue;
|
|
42
|
+
if (msg.role === 'system') {
|
|
43
|
+
systemMessage = msg.content;
|
|
44
|
+
}
|
|
45
|
+
else if (msg.role === 'user') {
|
|
46
|
+
userMessage = msg.content;
|
|
47
|
+
}
|
|
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
|
+
}
|
|
69
|
+
return { systemMessage, userMessage };
|
|
70
|
+
}
|
|
42
71
|
function createStreamChunk(id, model, content, finishReason = null) {
|
|
43
72
|
const choice = {
|
|
44
73
|
index: 0,
|
|
@@ -53,9 +82,6 @@ function createStreamChunk(id, model, content, finishReason = null) {
|
|
|
53
82
|
choices: [choice],
|
|
54
83
|
};
|
|
55
84
|
}
|
|
56
|
-
/**
|
|
57
|
-
* 创建完整响应
|
|
58
|
-
*/
|
|
59
85
|
function createCompletionResponse(id, model, content, usage, finishReason = 'stop') {
|
|
60
86
|
const choice = {
|
|
61
87
|
index: 0,
|
|
@@ -74,16 +100,9 @@ function createCompletionResponse(id, model, content, usage, finishReason = 'sto
|
|
|
74
100
|
usage,
|
|
75
101
|
};
|
|
76
102
|
}
|
|
77
|
-
/**
|
|
78
|
-
* 估算 token 数量(简化版)
|
|
79
|
-
*/
|
|
80
103
|
function estimateTokens(text) {
|
|
81
|
-
// 简化估算:假设平均每 4 个字符一个 token
|
|
82
104
|
return Math.ceil(text.length / 4);
|
|
83
105
|
}
|
|
84
|
-
/**
|
|
85
|
-
* 计算使用量
|
|
86
|
-
*/
|
|
87
106
|
function calculateUsage(prompt, completion) {
|
|
88
107
|
const promptTokens = estimateTokens(prompt);
|
|
89
108
|
const completionTokens = estimateTokens(completion);
|
|
@@ -93,28 +112,26 @@ function calculateUsage(prompt, completion) {
|
|
|
93
112
|
total_tokens: promptTokens + completionTokens,
|
|
94
113
|
};
|
|
95
114
|
}
|
|
96
|
-
/**
|
|
97
|
-
* SSE 格式化
|
|
98
|
-
*/
|
|
99
115
|
function formatSSE(data) {
|
|
100
116
|
return `data: ${JSON.stringify(data)}\n\n`;
|
|
101
117
|
}
|
|
102
|
-
/**
|
|
103
|
-
* SSE 结束标记
|
|
104
|
-
*/
|
|
105
118
|
exports.SSE_DONE = 'data: [DONE]\n\n';
|
|
106
119
|
/**
|
|
107
|
-
* 支持的模型列表
|
|
120
|
+
* iFlow 支持的模型列表
|
|
121
|
+
* 基于用户实际的 iFlow CLI 配置
|
|
108
122
|
*/
|
|
109
123
|
exports.AVAILABLE_MODELS = [
|
|
110
|
-
{ id: '
|
|
111
|
-
{ id: 'iflow-
|
|
112
|
-
{ id: '
|
|
124
|
+
{ id: 'glm-4.7', name: 'GLM-4.7 (Default)' },
|
|
125
|
+
{ id: 'iflow-rome-30ba3b', name: 'iFlow-ROME-30BA3B (Preview)' },
|
|
126
|
+
{ id: 'deepseek-v3.2', name: 'DeepSeek-V3.2' },
|
|
127
|
+
{ id: 'glm-5', name: 'GLM-5' },
|
|
128
|
+
{ id: 'qwen3-coder-plus', name: 'Qwen3-Coder-Plus' },
|
|
129
|
+
{ id: 'kimi-k2-thinking', name: 'Kimi-K2-Thinking' },
|
|
130
|
+
{ id: 'minimax-m2.5', name: 'MiniMax-M2.5' },
|
|
131
|
+
{ id: 'kimi-k2.5', name: 'Kimi-K2.5' },
|
|
132
|
+
{ id: 'kimi-k2-0905', name: 'Kimi-K2-0905' },
|
|
113
133
|
];
|
|
114
|
-
/**
|
|
115
|
-
* 获取默认模型 ID
|
|
116
|
-
*/
|
|
117
134
|
function getDefaultModel() {
|
|
118
|
-
return '
|
|
135
|
+
return 'glm-4.7';
|
|
119
136
|
}
|
|
120
137
|
//# sourceMappingURL=transformer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/openai/transformer.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/openai/transformer.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAalC;;OAEG;IACH,OAAO,CAAC,eAAe;IAoCvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAyEnB;;OAEG;YACW,oBAAoB;IAoFlC;;OAEG;YACW,uBAAuB;IA2CrC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
package/dist/server.js
CHANGED
|
@@ -20,6 +20,7 @@ class IFlowAPIServer {
|
|
|
20
20
|
this.app = (0, express_1.default)();
|
|
21
21
|
this.adapter = new adapter_js_1.IFlowAdapter({
|
|
22
22
|
model: options.model,
|
|
23
|
+
maxHistoryLength: 20,
|
|
23
24
|
});
|
|
24
25
|
this.setupMiddleware();
|
|
25
26
|
this.setupRoutes();
|
|
@@ -64,9 +65,12 @@ class IFlowAPIServer {
|
|
|
64
65
|
setupRoutes() {
|
|
65
66
|
// 健康检查
|
|
66
67
|
this.app.get('/health', (req, res) => {
|
|
68
|
+
const stats = this.adapter.getStats();
|
|
67
69
|
res.json({
|
|
68
70
|
status: 'ok',
|
|
69
71
|
connected: this.adapter.isConnected(),
|
|
72
|
+
conversations: stats.conversationCount,
|
|
73
|
+
totalMessages: stats.totalMessages,
|
|
70
74
|
timestamp: new Date().toISOString(),
|
|
71
75
|
});
|
|
72
76
|
});
|
|
@@ -86,7 +90,6 @@ class IFlowAPIServer {
|
|
|
86
90
|
// 聊天完成
|
|
87
91
|
this.app.post('/v1/chat/completions', async (req, res) => {
|
|
88
92
|
console.log(`[${new Date().toISOString()}] 收到聊天请求`);
|
|
89
|
-
console.log('请求体:', JSON.stringify(req.body, null, 2));
|
|
90
93
|
try {
|
|
91
94
|
const body = req.body;
|
|
92
95
|
// 验证请求
|
|
@@ -96,17 +99,25 @@ class IFlowAPIServer {
|
|
|
96
99
|
}
|
|
97
100
|
const isStream = body.stream === true;
|
|
98
101
|
const model = body.model || (0, transformer_js_1.getDefaultModel)();
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
// 提取 system 和 user 消息
|
|
103
|
+
const { systemMessage, userMessage } = (0, transformer_js_1.extractMessages)(body.messages);
|
|
104
|
+
if (!userMessage) {
|
|
105
|
+
return res.status(400).json(this.createError('未找到 user 消息', 'invalid_request_error'));
|
|
106
|
+
}
|
|
107
|
+
// 生成或使用已有的 conversation ID
|
|
108
|
+
// opencode 可能在 header 中传递,或者我们需要生成一个
|
|
109
|
+
let conversationId = req.headers['x-conversation-id'];
|
|
110
|
+
if (!conversationId) {
|
|
111
|
+
// 从消息中生成一个稳定的 ID(基于 system + user 消息)
|
|
112
|
+
conversationId = `${Date.now()}-${Math.random().toString(36).substring(2, 10)}`;
|
|
113
|
+
}
|
|
114
|
+
console.log(`会话: ${conversationId}, 流式: ${isStream}, 模型: ${model}`);
|
|
115
|
+
console.log(`系统消息: ${systemMessage ? '有' : '无'}, 用户消息: ${userMessage.substring(0, 50)}...`);
|
|
103
116
|
if (isStream) {
|
|
104
|
-
|
|
105
|
-
await this.handleStreamResponse(res, prompt, model);
|
|
117
|
+
await this.handleStreamResponse(res, conversationId, systemMessage, userMessage, model);
|
|
106
118
|
}
|
|
107
119
|
else {
|
|
108
|
-
|
|
109
|
-
await this.handleNonStreamResponse(res, prompt, model);
|
|
120
|
+
await this.handleNonStreamResponse(res, conversationId, systemMessage, userMessage, model);
|
|
110
121
|
}
|
|
111
122
|
}
|
|
112
123
|
catch (error) {
|
|
@@ -118,16 +129,16 @@ class IFlowAPIServer {
|
|
|
118
129
|
/**
|
|
119
130
|
* 处理流式响应
|
|
120
131
|
*/
|
|
121
|
-
async handleStreamResponse(res,
|
|
132
|
+
async handleStreamResponse(res, conversationId, systemMessage, userMessage, model) {
|
|
122
133
|
const id = (0, transformer_js_1.generateId)();
|
|
123
134
|
res.setHeader('Content-Type', 'text/event-stream');
|
|
124
135
|
res.setHeader('Cache-Control', 'no-cache');
|
|
125
136
|
res.setHeader('Connection', 'keep-alive');
|
|
126
|
-
// 设置
|
|
137
|
+
// 设置 5 分钟超时
|
|
127
138
|
const timeout = setTimeout(() => {
|
|
128
139
|
res.write((0, transformer_js_1.formatSSE)(this.createError('请求超时', 'timeout_error')));
|
|
129
140
|
res.end();
|
|
130
|
-
},
|
|
141
|
+
}, 300000);
|
|
131
142
|
try {
|
|
132
143
|
// 发送开始标记(角色)
|
|
133
144
|
const startChunk = {
|
|
@@ -145,7 +156,7 @@ class IFlowAPIServer {
|
|
|
145
156
|
// 流式发送内容
|
|
146
157
|
let fullContent = '';
|
|
147
158
|
let isDone = false;
|
|
148
|
-
for await (const chunk of this.adapter.sendMessageStream(
|
|
159
|
+
for await (const chunk of this.adapter.sendMessageStream(conversationId, systemMessage, userMessage)) {
|
|
149
160
|
if (isDone)
|
|
150
161
|
break;
|
|
151
162
|
switch (chunk.type) {
|
|
@@ -161,7 +172,6 @@ class IFlowAPIServer {
|
|
|
161
172
|
console.log(`工具调用: ${chunk.toolName} - ${chunk.toolStatus}`);
|
|
162
173
|
break;
|
|
163
174
|
case 'done':
|
|
164
|
-
// 收到完成信号,标记结束
|
|
165
175
|
isDone = true;
|
|
166
176
|
break;
|
|
167
177
|
case 'error':
|
|
@@ -189,16 +199,16 @@ class IFlowAPIServer {
|
|
|
189
199
|
/**
|
|
190
200
|
* 处理非流式响应
|
|
191
201
|
*/
|
|
192
|
-
async handleNonStreamResponse(res,
|
|
202
|
+
async handleNonStreamResponse(res, conversationId, systemMessage, userMessage, model) {
|
|
193
203
|
const id = (0, transformer_js_1.generateId)();
|
|
194
|
-
// 设置
|
|
204
|
+
// 设置 5 分钟超时
|
|
195
205
|
const timeout = setTimeout(() => {
|
|
196
206
|
res.status(504).json(this.createError('请求超时', 'timeout_error'));
|
|
197
|
-
},
|
|
207
|
+
}, 300000);
|
|
198
208
|
try {
|
|
199
|
-
const response = await this.adapter.sendMessage(
|
|
209
|
+
const response = await this.adapter.sendMessage(conversationId, systemMessage, userMessage);
|
|
200
210
|
clearTimeout(timeout);
|
|
201
|
-
const usage = (0, transformer_js_1.calculateUsage)(
|
|
211
|
+
const usage = (0, transformer_js_1.calculateUsage)(userMessage, response.content);
|
|
202
212
|
const completionResponse = (0, transformer_js_1.createCompletionResponse)(id, model, response.content, usage, response.stopReason === 'max_tokens' ? 'length' : 'stop');
|
|
203
213
|
res.json(completionResponse);
|
|
204
214
|
}
|
|
@@ -253,6 +263,7 @@ class IFlowAPIServer {
|
|
|
253
263
|
console.log(`\n🚀 iFlow API 桥接服务已启动`);
|
|
254
264
|
console.log(`📍 服务地址: http://${host}:${port}`);
|
|
255
265
|
console.log(`🤖 使用模型: ${model}`);
|
|
266
|
+
console.log(`💬 支持上下文管理: 是`);
|
|
256
267
|
console.log(`🔗 OpenAI API: http://${host}:${port}/v1/chat/completions`);
|
|
257
268
|
console.log(`📋 模型列表: http://${host}:${port}/v1/models`);
|
|
258
269
|
console.log(`❤️ 健康检查: http://${host}:${port}/health`);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|