-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
117 lines (104 loc) · 2.51 KB
/
index.js
File metadata and controls
117 lines (104 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
const { createSDK } = require('../');
const DashScopeAPI = createSDK({
accessToken: process.env.DASHSCOPE_TOKEN,
});
const streamSample = async () => {
const result = await DashScopeAPI.chat.streamCompletion.request(
{},
{
model: 'qwen-max-longcontext',
input: {
messages: [
{
content: '通义千问是什么',
role: 'user',
},
],
},
parameters: {
incremental_output: true,
},
}
);
while (true) {
const { done, events } = await result.read();
if (done) {
return;
}
const text = (events || [])
.map((event) => event.data?.output?.text)
.join('');
process.stdout.write(text);
}
};
const eventStreamSample = async () => {
const result = await DashScopeAPI.chat.streamCompletion.request(
{},
{
model: 'qwen-plus',
input: {
messages: [
{
content: '通义千问是什么?请详细回答',
role: 'user',
},
],
},
parameters: {
incremental_output: true,
},
}
);
return new Promise((resolve, reject) => {
result.body.on('data', (chunk) => {
const decoder = new TextDecoder('utf-8');
const decodeValue = decoder.decode(chunk);
const lines = (decodeValue?.split('\n') || []).filter((id) => id);
const event = {};
lines.forEach((line) => {
if (line.includes(':')) {
const sepIndex = line.indexOf(':');
const key = line.slice(0, sepIndex);
const value = line.slice(sepIndex + 1);
if (key === 'data') {
try {
event[key] = JSON.parse(value);
} catch (e) {}
} else if (key) {
event[key] = value;
}
}
});
process.stdout.write(event.data?.output?.text);
});
result.body.on('close', () => {
resolve();
});
});
};
const normalSample = async () => {
const result = await DashScopeAPI.chat.completion.request(
{},
{
model: 'qwen-max-longcontext',
input: {
messages: [
{
content: '通义千问是什么',
role: 'user',
},
],
},
}
);
process.stdout.write(result?.output?.text || '');
};
const main = async () => {
console.log('普通示例,一次性请求:');
await normalSample();
console.log('流式示例:');
await streamSample();
console.log('事件流示例:');
await eventStreamSample();
};
main();