Add geminiThinking flag and enhance thoughts handling in chat processing
This commit is contained in:
@@ -17,6 +17,7 @@ export enum LLMFlags{
|
|||||||
hasVideoInput,
|
hasVideoInput,
|
||||||
OAICompletionTokens,
|
OAICompletionTokens,
|
||||||
DeveloperRole,
|
DeveloperRole,
|
||||||
|
geminiThinking
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum LLMProvider{
|
export enum LLMProvider{
|
||||||
@@ -814,7 +815,7 @@ export const LLMModels: LLMModel[] = [
|
|||||||
id: 'gemini-2.0-flash-thinking-exp-1219',
|
id: 'gemini-2.0-flash-thinking-exp-1219',
|
||||||
provider: LLMProvider.GoogleCloud,
|
provider: LLMProvider.GoogleCloud,
|
||||||
format: LLMFormat.GoogleCloud,
|
format: LLMFormat.GoogleCloud,
|
||||||
flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput, LLMFlags.hasStreaming],
|
flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput, LLMFlags.hasStreaming, LLMFlags.geminiThinking],
|
||||||
parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'],
|
parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'],
|
||||||
tokenizer: LLMTokenizer.GoogleCloud,
|
tokenizer: LLMTokenizer.GoogleCloud,
|
||||||
recommended: true
|
recommended: true
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ export interface OpenAIChat{
|
|||||||
removable?:boolean
|
removable?:boolean
|
||||||
attr?:string[]
|
attr?:string[]
|
||||||
multimodals?: MultiModal[]
|
multimodals?: MultiModal[]
|
||||||
|
thoughts?: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MultiModal{
|
export interface MultiModal{
|
||||||
@@ -752,14 +753,19 @@ export async function sendChat(chatProcessIndex = -1,arg:{
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
formatedChat = formatedChat.replace(/<Thoughts>(.+?)<\/Thoughts>/gm, '')
|
let thoughts:string[] = []
|
||||||
|
formatedChat = formatedChat.replace(/<Thoughts>(.+?)<\/Thoughts>/gm, (match, p1) => {
|
||||||
|
thoughts.push(p1)
|
||||||
|
return ''
|
||||||
|
})
|
||||||
|
|
||||||
const chat:OpenAIChat = {
|
const chat:OpenAIChat = {
|
||||||
role: role,
|
role: role,
|
||||||
content: formatedChat,
|
content: formatedChat,
|
||||||
memo: msg.chatId,
|
memo: msg.chatId,
|
||||||
attr: attr,
|
attr: attr,
|
||||||
multimodals: multimodal
|
multimodals: multimodal,
|
||||||
|
thoughts: thoughts
|
||||||
}
|
}
|
||||||
if(chat.multimodals.length === 0){
|
if(chat.multimodals.length === 0){
|
||||||
delete chat.multimodals
|
delete chat.multimodals
|
||||||
|
|||||||
@@ -1458,7 +1458,6 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise
|
|||||||
role: "USER",
|
role: "USER",
|
||||||
parts: geminiParts,
|
parts: geminiParts,
|
||||||
});
|
});
|
||||||
|
|
||||||
} else if (prevChat?.role === qRole) {
|
} else if (prevChat?.role === qRole) {
|
||||||
reformatedChat[reformatedChat.length-1].parts[0].text += '\n' + chat.content
|
reformatedChat[reformatedChat.length-1].parts[0].text += '\n' + chat.content
|
||||||
continue
|
continue
|
||||||
@@ -1476,6 +1475,16 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(chat.role === 'assistant' && arg.modelInfo.flags.includes(LLMFlags.geminiThinking) && chat.thoughts?.length > 0){
|
||||||
|
reformatedChat.push({
|
||||||
|
role: 'MODEL',
|
||||||
|
parts: [{
|
||||||
|
text: chat.thoughts.join('\n\n')
|
||||||
|
}, {
|
||||||
|
text: chat.content
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
else if(chat.role === 'assistant' || chat.role === 'user'){
|
else if(chat.role === 'assistant' || chat.role === 'user'){
|
||||||
reformatedChat.push({
|
reformatedChat.push({
|
||||||
@@ -1664,32 +1673,25 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise
|
|||||||
|
|
||||||
const data = JSON.parse(reformatted)
|
const data = JSON.parse(reformatted)
|
||||||
|
|
||||||
let r = ''
|
let rDatas:string[] = ['']
|
||||||
let r2 = ''
|
|
||||||
let bump = false
|
|
||||||
for(const d of data){
|
for(const d of data){
|
||||||
const parts = d.candidates[0].content?.parts
|
const parts = d.candidates[0].content?.parts
|
||||||
for(let i=0;i<parts.length;i++){
|
for(let i=0;i<parts.length;i++){
|
||||||
const part = parts[i]
|
const part = parts[i]
|
||||||
if(i === 1){
|
if(i > 0){
|
||||||
bump = true
|
rDatas.push('')
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!bump){
|
rDatas[rDatas.length-1] += part.text
|
||||||
r += part.text
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
r2 += part.text
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(data)
|
if(rDatas.length > 1){
|
||||||
if(r2){
|
const thought = rDatas.splice(rDatas.length-2, 1)[0]
|
||||||
r = `<Thoughts>${r}</Thoughts>\n\n${r2}`
|
rDatas[rDatas.length-1] = `<Thoughts>${thought}</Thoughts>\n\n${rDatas.join('\n')}`
|
||||||
}
|
}
|
||||||
control.enqueue({
|
control.enqueue({
|
||||||
'0': r
|
'0': rDatas[rDatas.length-1],
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error)
|
console.log(error)
|
||||||
@@ -1717,16 +1719,19 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let r = ''
|
let rDatas:string[] = ['']
|
||||||
let r2 = ''
|
|
||||||
const processDataItem = (data:any) => {
|
const processDataItem = (data:any) => {
|
||||||
if(data?.candidates?.[0]?.content?.parts?.[0]?.text){
|
const parts = data?.candidates?.[0]?.content?.parts
|
||||||
r += data.candidates[0].content.parts[0].text
|
for(let i=0;i<parts.length;i++){
|
||||||
|
const part = parts[i]
|
||||||
|
if(i > 0){
|
||||||
|
rDatas.push('')
|
||||||
|
}
|
||||||
|
|
||||||
|
rDatas[rDatas.length-1] += part.text
|
||||||
}
|
}
|
||||||
if(data?.candidates?.[0]?.content?.parts?.[1]?.text){
|
|
||||||
r2 += data.candidates[0].content.parts[1].text
|
if(data?.errors){
|
||||||
}
|
|
||||||
else if(data?.errors){
|
|
||||||
return {
|
return {
|
||||||
type: 'fail',
|
type: 'fail',
|
||||||
result: `${JSON.stringify(data.errors)}`
|
result: `${JSON.stringify(data.errors)}`
|
||||||
@@ -1750,13 +1755,14 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(r2){
|
if(rDatas.length > 1){
|
||||||
r = `<Thoughts>${r}</Thoughts>\n\n${r2}`
|
const thought = rDatas.splice(rDatas.length-2, 1)[0]
|
||||||
|
rDatas[rDatas.length-1] = `<Thoughts>${thought}</Thoughts>\n\n${rDatas.join('\n')}`
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: 'success',
|
type: 'success',
|
||||||
result: r
|
result: rDatas[rDatas.length-1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user