@@ -58,7 +58,7 @@ async function requestToken(refreshToken: string) {
58
58
accessTokenRequestQueueMap [ refreshToken ] = [ ] ;
59
59
logger . info ( `Refresh token: ${ refreshToken } ` ) ;
60
60
const result = await ( async ( ) => {
61
- const [ deviceId , token ] = refreshToken . split ( '@' ) ;
61
+ const [ deviceId , token ] = refreshToken . split ( "@" ) ;
62
62
const result = await axios . post (
63
63
"https://yuewen.cn/passport/proto.api.passport.v1.PassportService/RegisterDevice" ,
64
64
{ } ,
@@ -67,15 +67,15 @@ async function requestToken(refreshToken: string) {
67
67
Cookie : `Oasis-Token=${ token } ` ,
68
68
Referer : "https://yuewen.cn/chats/new" ,
69
69
...FAKE_HEADERS ,
70
- "Oasis-Webid" : deviceId
70
+ "Oasis-Webid" : deviceId ,
71
71
} ,
72
72
timeout : 15000 ,
73
73
validateStatus : ( ) => true ,
74
74
}
75
75
) ;
76
76
const {
77
77
accessToken : { raw : accessTokenRaw } ,
78
- refreshToken : { raw : refreshTokenRaw }
78
+ refreshToken : { raw : refreshTokenRaw } ,
79
79
} = checkResult ( result , refreshToken ) ;
80
80
return {
81
81
deviceId,
@@ -210,8 +210,8 @@ async function createCompletion(
210
210
const refFileUrls = extractRefFileUrls ( messages ) ;
211
211
const refs = refFileUrls . length
212
212
? await Promise . all (
213
- refFileUrls . map ( ( fileUrl ) => uploadFile ( fileUrl , refreshToken ) )
214
- )
213
+ refFileUrls . map ( ( fileUrl ) => uploadFile ( fileUrl , refreshToken ) )
214
+ )
215
215
: [ ] ;
216
216
217
217
// 创建会话
@@ -290,8 +290,8 @@ async function createCompletionStream(
290
290
const refFileUrls = extractRefFileUrls ( messages ) ;
291
291
const refs = refFileUrls . length
292
292
? await Promise . all (
293
- refFileUrls . map ( ( fileUrl ) => uploadFile ( fileUrl , refreshToken ) )
294
- )
293
+ refFileUrls . map ( ( fileUrl ) => uploadFile ( fileUrl , refreshToken ) )
294
+ )
295
295
: [ ] ;
296
296
297
297
// 创建会话
@@ -361,15 +361,22 @@ function extractRefFileUrls(messages: any[]) {
361
361
// 只获取最新的消息
362
362
const lastMessage = messages [ messages . length - 1 ] ;
363
363
if ( _ . isArray ( lastMessage . content ) ) {
364
- lastMessage . content . forEach ( v => {
365
- if ( ! _ . isObject ( v ) || ! [ 'file' , 'image_url' ] . includes ( v [ 'type' ] ) )
366
- return ;
364
+ lastMessage . content . forEach ( ( v ) => {
365
+ if ( ! _ . isObject ( v ) || ! [ "file" , "image_url" ] . includes ( v [ "type" ] ) ) return ;
367
366
// step-free-api支持格式
368
- if ( v [ 'type' ] == 'file' && _ . isObject ( v [ 'file_url' ] ) && _ . isString ( v [ 'file_url' ] [ 'url' ] ) )
369
- urls . push ( v [ 'file_url' ] [ 'url' ] ) ;
367
+ if (
368
+ v [ "type" ] == "file" &&
369
+ _ . isObject ( v [ "file_url" ] ) &&
370
+ _ . isString ( v [ "file_url" ] [ "url" ] )
371
+ )
372
+ urls . push ( v [ "file_url" ] [ "url" ] ) ;
370
373
// 兼容gpt-4-vision-preview API格式
371
- else if ( v [ 'type' ] == 'image_url' && _ . isObject ( v [ 'image_url' ] ) && _ . isString ( v [ 'image_url' ] [ 'url' ] ) )
372
- urls . push ( v [ 'image_url' ] [ 'url' ] ) ;
374
+ else if (
375
+ v [ "type" ] == "image_url" &&
376
+ _ . isObject ( v [ "image_url" ] ) &&
377
+ _ . isString ( v [ "image_url" ] [ "url" ] )
378
+ )
379
+ urls . push ( v [ "image_url" ] [ "url" ] ) ;
373
380
} ) ;
374
381
}
375
382
logger . info ( "本次请求上传:" + urls . length + "个文件" ) ;
@@ -389,33 +396,37 @@ function extractRefFileUrls(messages: any[]) {
389
396
function messagesPrepare ( convId : string , messages : any [ ] , refs : any [ ] ) {
390
397
// 检查最新消息是否含有"type": "image_url"或"type": "file",如果有则注入消息
391
398
let latestMessage = messages [ messages . length - 1 ] ;
392
- let hasFileOrImage = Array . isArray ( latestMessage . content )
393
- && latestMessage . content . some ( v => ( typeof v === 'object' && [ 'file' , 'image_url' ] . includes ( v [ 'type' ] ) ) ) ;
399
+ let hasFileOrImage =
400
+ Array . isArray ( latestMessage . content ) &&
401
+ latestMessage . content . some (
402
+ ( v ) => typeof v === "object" && [ "file" , "image_url" ] . includes ( v [ "type" ] )
403
+ ) ;
394
404
if ( hasFileOrImage ) {
395
405
let newFileMessage = {
396
- " content" : "以上为历史消息,关注以下用户发送的文件和消息" ,
397
- " role" : "system"
406
+ content : "以上为历史消息,关注以下用户发送的文件和消息" ,
407
+ role : "system" ,
398
408
} ;
399
409
messages . splice ( messages . length - 1 , 0 , newFileMessage ) ;
400
410
logger . info ( "注入提升尾部文件注意力system prompt" ) ;
401
411
} else {
402
412
let newTextMessage = {
403
- " content" : "以上为历史消息,关注以下用户消息" ,
404
- " role" : "system"
413
+ content : "以上为历史消息,关注以下用户消息" ,
414
+ role : "system" ,
405
415
} ;
406
416
messages . splice ( messages . length - 1 , 0 , newTextMessage ) ;
407
417
logger . info ( "注入提升尾部消息注意力system prompt" ) ;
408
418
}
409
419
410
- const content = messages . reduce ( ( content , message ) => {
411
- if ( _ . isArray ( message . content ) ) {
412
- return message . content . reduce ( ( _content , v ) => {
413
- if ( ! _ . isObject ( v ) || v [ "type" ] != "text" ) return _content ;
414
- return _content + `${ message . role || "user" } :${ v [ "text" ] || "" } \n` ;
415
- } , content ) ;
416
- }
417
- return ( content += `${ message . role || "user" } :${ message . content } \n` ) ;
418
- } , "" ) + 'assistant:' ;
420
+ const content =
421
+ messages . reduce ( ( content , message ) => {
422
+ if ( _ . isArray ( message . content ) ) {
423
+ return message . content . reduce ( ( _content , v ) => {
424
+ if ( ! _ . isObject ( v ) || v [ "type" ] != "text" ) return _content ;
425
+ return _content + `${ message . role || "user" } :${ v [ "text" ] || "" } \n` ;
426
+ } , content ) ;
427
+ }
428
+ return ( content += `${ message . role || "user" } :${ message . content } \n` ) ;
429
+ } , "" ) + "assistant:" ;
419
430
420
431
logger . info ( "\n对话合并:\n" + content ) ;
421
432
const json = JSON . stringify ( {
@@ -491,7 +502,11 @@ async function receiveStream(model: string, convId: string, stream: any) {
491
502
} else if ( result . textEvent && result . textEvent . text )
492
503
data . choices [ 0 ] . message . content += result . textEvent . text ;
493
504
else if ( result . doneEvent ) {
494
- data . choices [ 0 ] . message . content = data . choices [ 0 ] . message . content . replace ( / < ( w e b | u r l | u n k n o w n ) _ [ 0 - 9 a - z A - Z ] + > / g, '' ) ;
505
+ data . choices [ 0 ] . message . content =
506
+ data . choices [ 0 ] . message . content . replace (
507
+ / < ( w e b | u r l | u n k n o w n ) _ [ 0 - 9 a - z A - Z ] + > / g,
508
+ ""
509
+ ) ;
495
510
data . choices [ 0 ] . message . content += refContent
496
511
? `\n\n搜索结果来自:\n${ refContent . replace ( / \n $ / , "" ) } `
497
512
: "" ;
@@ -503,15 +518,13 @@ async function receiveStream(model: string, convId: string, stream: any) {
503
518
stream . on ( "data" , ( buffer : Buffer ) => {
504
519
// 接收数据头
505
520
chunk = Buffer . concat ( [ temp , chunk , buffer ] ) ;
506
- if ( chunk . length < 5 )
507
- return ;
521
+ if ( chunk . length < 5 ) return ;
508
522
// 读取当前数据块大小
509
523
const chunkSize = chunk . readUint32BE ( 1 ) ;
510
524
// 根据当前大小接收完整数据块
511
525
temp = chunk . subarray ( chunkSize + 5 ) ;
512
526
chunk = chunk . subarray ( 0 , chunkSize + 5 ) ;
513
- if ( chunk . length < chunkSize + 5 )
514
- return ;
527
+ if ( chunk . length < chunkSize + 5 ) return ;
515
528
parser ( chunk . subarray ( 5 ) ) ;
516
529
chunk = Buffer . from ( [ ] ) ;
517
530
} ) ;
@@ -649,15 +662,13 @@ function createTransStream(
649
662
stream . on ( "data" , ( buffer : Buffer ) => {
650
663
// 接收数据头
651
664
chunk = Buffer . concat ( [ temp , chunk , buffer ] ) ;
652
- if ( chunk . length < 5 )
653
- return ;
665
+ if ( chunk . length < 5 ) return ;
654
666
// 读取当前数据块大小
655
667
const chunkSize = chunk . readUint32BE ( 1 ) ;
656
668
// 根据当前大小接收完整数据块
657
669
temp = chunk . subarray ( chunkSize + 5 ) ;
658
670
chunk = chunk . subarray ( 0 , chunkSize + 5 ) ;
659
- if ( chunk . length < chunkSize + 5 )
660
- return ;
671
+ if ( chunk . length < chunkSize + 5 ) return ;
661
672
parser ( chunk . subarray ( 5 ) ) ;
662
673
chunk = Buffer . from ( [ ] ) ;
663
674
} ) ;
@@ -778,7 +789,7 @@ async function uploadFile(fileUrl: string, refreshToken: string) {
778
789
// 60秒超时
779
790
timeout : 60000 ,
780
791
headers : {
781
- ' Content-Type' : mimeType ,
792
+ " Content-Type" : mimeType ,
782
793
Cookie : generateCookie ( deviceId , token ) ,
783
794
"Oasis-Webid" : deviceId ,
784
795
Referer : "https://yuewen.cn/chats/new" ,
@@ -791,7 +802,8 @@ async function uploadFile(fileUrl: string, refreshToken: string) {
791
802
} ) ;
792
803
const { id : fileId } = checkResult ( result , refreshToken ) ;
793
804
794
- let fileStatus , needFurtherCall = true ;
805
+ let fileStatus ,
806
+ needFurtherCall = true ;
795
807
const startTime = util . unixTimestamp ( ) ;
796
808
while ( needFurtherCall ) {
797
809
// 获取文件上传结果
@@ -818,7 +830,7 @@ async function uploadFile(fileUrl: string, refreshToken: string) {
818
830
if ( util . unixTimestamp ( ) - startTime > 60 )
819
831
throw new APIException ( EX . API_FILE_UPLOAD_TIMEOUT ) ;
820
832
}
821
- await new Promise ( resolve => setTimeout ( resolve , 5000 ) ) ;
833
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 5000 ) ) ;
822
834
823
835
return {
824
836
attachmentType : mimeType ,
@@ -843,14 +855,16 @@ function tokenSplit(authorization: string) {
843
855
* 获取Token存活状态
844
856
*/
845
857
async function getTokenLiveStatus ( refreshToken : string ) {
858
+ const [ deviceId , token ] = refreshToken . split ( "@" ) ;
846
859
const result = await axios . post (
847
860
"https://yuewen.cn/passport/proto.api.passport.v1.PassportService/RegisterDevice" ,
848
861
{ } ,
849
862
{
850
863
headers : {
851
- Cookie : `Oasis-Token=${ refreshToken } ` ,
864
+ Cookie : `Oasis-Token=${ token } ` ,
852
865
Referer : "https://yuewen.cn/chats/new" ,
853
866
...FAKE_HEADERS ,
867
+ "Oasis-Webid" : deviceId ,
854
868
} ,
855
869
timeout : 15000 ,
856
870
validateStatus : ( ) => true ,
@@ -859,11 +873,10 @@ async function getTokenLiveStatus(refreshToken: string) {
859
873
try {
860
874
const {
861
875
accessToken : { raw : accessTokenRaw } ,
862
- refreshToken : { raw : refreshTokenRaw }
876
+ refreshToken : { raw : refreshTokenRaw } ,
863
877
} = checkResult ( result , refreshToken ) ;
864
- return ! ! ( accessTokenRaw && refreshTokenRaw )
865
- }
866
- catch ( err ) {
878
+ return ! ! ( accessTokenRaw && refreshTokenRaw ) ;
879
+ } catch ( err ) {
867
880
return false ;
868
881
}
869
882
}
0 commit comments