@@ -32,58 +32,55 @@ export function transformBlockingResponse(response) {
3232 } ;
3333}
3434
35+ /**
36+ * 解析 SSE 流式数据块
37+ * @param {string } chunk - SSE 数据块
38+ * @returns {Object|null } 解析后的数据对象
39+ */
3540/**
3641 * 解析 SSE 流式数据块
3742 * @param {string } chunk - SSE 数据块
3843 * @returns {Object|null } 解析后的数据对象
3944 */
4045export function parseSSEChunk ( chunk ) {
4146 try {
42- // 处理 dify SSE 格式:data: {json}
43- // console.log(chunk,chunk.startsWith(' data: '))
47+ // console.log('chunk:', chunk);
48+ const data = chunk ;
4449
45- const cleanChunk = chunk ;
46- // 检查是否是结束标志
47- if ( cleanChunk === '[DONE]' ) {
48- return { type : 'done' } ;
49- }
50-
51- const data = JSON . parse ( cleanChunk ) ;
52-
5350 // 根据 event 类型处理不同的数据
5451 switch ( data . event ) {
5552 case 'message' :
56- return {
57- type : 'message' ,
58- data : {
59- id : data . message_id ,
60- content : data . answer || '' ,
61- conversation_id : data . conversation_id ,
62- created_at : data . created_at ,
63- metadata : data . metadata || { } ,
64- } ,
65- } ;
66-
67- case 'message_delta' :
53+ // 检查是否是结束标志(answer 为空字符串)
54+ if ( data . answer === '' ) {
55+ return {
56+ type : 'end' ,
57+ data : {
58+ id : data . message_id ,
59+ conversation_id : data . conversation_id ,
60+ created_at : data . created_at ,
61+ task_id : data . task_id ,
62+ metadata : {
63+ from_variable_selector : data . from_variable_selector || [ ] ,
64+ } ,
65+ } ,
66+ } ;
67+ }
68+
69+ // 返回增量数据
6870 return {
6971 type : 'delta' ,
7072 data : {
7173 id : data . message_id ,
72- delta : data . delta || '' ,
73- conversation_id : data . conversation_id ,
74- } ,
75- } ;
76-
77- case 'message_end' :
78- return {
79- type : 'end' ,
80- data : {
81- id : data . message_id ,
74+ delta : data . answer , // answer 字段包含增量内容
8275 conversation_id : data . conversation_id ,
83- metadata : data . metadata || { } ,
76+ created_at : data . created_at ,
77+ task_id : data . task_id ,
78+ metadata : {
79+ from_variable_selector : data . from_variable_selector || [ ] ,
80+ } ,
8481 } ,
8582 } ;
86-
83+
8784 default :
8885 return {
8986 type : 'unknown' ,
@@ -101,7 +98,7 @@ export function parseSSEChunk(chunk) {
10198 * @returns {Function } 转换器函数
10299 */
103100export function createDifyTransformer ( ) {
104- return ( chunk ) => {
101+ return chunk => {
105102 return parseSSEChunk ( chunk ) ;
106103 } ;
107104}
@@ -116,12 +113,12 @@ export function createDifyTransformer() {
116113 */
117114export function createDifyRequestConfig ( options = { } ) {
118115 const { baseURL = 'https://api.dify.ai/v1' , apiKey, user = 'default-user' } = options ;
119-
116+
120117 return {
121118 baseURL,
122119 baseOptions : {
123120 headers : {
124- ' Authorization' : `Bearer ${ apiKey } ` ,
121+ Authorization : `Bearer ${ apiKey } ` ,
125122 'Content-Type' : 'application/json' ,
126123 } ,
127124 } ,
@@ -154,14 +151,18 @@ export function buildChatMessageRequest(params) {
154151 inputs = { } ,
155152 auto_generate_name = true ,
156153 } = params ;
157-
154+
158155 return {
159156 query,
160157 inputs,
161158 response_mode,
162159 user,
163- ...( conversation_id && { conversation_id } ) ,
164- ...( files . length > 0 && { files } ) ,
160+ ...( conversation_id && {
161+ conversation_id,
162+ } ) ,
163+ ...( files . length > 0 && {
164+ files,
165+ } ) ,
165166 auto_generate_name,
166167 } ;
167168}
@@ -172,4 +173,4 @@ export default {
172173 createDifyTransformer,
173174 createDifyRequestConfig,
174175 buildChatMessageRequest,
175- } ;
176+ } ;
0 commit comments