fix: gemini强制调用tool;real at

This commit is contained in:
ikechan8370 2024-12-29 19:26:09 +08:00
parent c13f4dec05
commit f4e4f1bebb
2 changed files with 20 additions and 4 deletions

View file

@ -80,7 +80,8 @@ export class CustomGoogleGeminiClient extends GoogleGeminiClient {
* temperature: number?, * temperature: number?,
* topP: number?, * topP: number?,
* tokK: number?, * tokK: number?,
* replyPureTextCallback: Function * replyPureTextCallback: Function,
* toolMode: 'AUTO' | 'ANY' | 'NONE'
* }} opt * }} opt
* @returns {Promise<{conversationId: string?, parentMessageId: string, text: string, id: string}>} * @returns {Promise<{conversationId: string?, parentMessageId: string, text: string, id: string}>}
*/ */
@ -173,9 +174,17 @@ export class CustomGoogleGeminiClient extends GoogleGeminiClient {
} }
] ]
// ANY要笑死人的效果 // ANY要笑死人的效果
let mode = opt.toolMode || 'AUTO'
let lastFuncName = opt.functionResponse?.name
const mustSendNextTurn = [
'searchImage', 'searchMusic', 'searchVideo'
]
if (lastFuncName && mustSendNextTurn.includes(lastFuncName)) {
mode = 'ANY'
}
body.tool_config = { body.tool_config = {
function_calling_config: { function_calling_config: {
mode: 'AUTO' mode
} }
} }
} }
@ -215,6 +224,7 @@ export class CustomGoogleGeminiClient extends GoogleGeminiClient {
const text = responseContent.parts.find(i => i.text)?.text const text = responseContent.parts.find(i => i.text)?.text
if (text) { if (text) {
// send reply first // send reply first
logger.info('send message: ' + text)
opt.replyPureTextCallback && await opt.replyPureTextCallback(text) opt.replyPureTextCallback && await opt.replyPureTextCallback(text)
} }
// Gemini有时候只回复一个空的functionCall,无语死了 // Gemini有时候只回复一个空的functionCall,无语死了

View file

@ -470,13 +470,19 @@ export async function convertFaces (msg, handleAt = false, e) {
let groupCardQQMap = {} let groupCardQQMap = {}
if (handleAt) { if (handleAt) {
try { try {
groupMembers = e.bot.gml groupMembers = e.bot.gml.get(e.group_id)
} catch (err) { } catch (err) {
console.error(`Failed to get group members: ${err}`) console.error(`Failed to get group members: ${err}`)
} }
if (groupMembers) { if (groupMembers) {
for (let key of groupMembers.keys()) { for (let key of groupMembers.keys()) {
groupCardQQMap[groupMembers.get(key).card || groupMembers.get(key).nickname] = groupMembers.get(key).user_id let userInfo = groupMembers.get(key)
if (userInfo.card) {
groupCardQQMap[userInfo.card] = userInfo.user_id
}
if (userInfo.nickname) {
groupCardQQMap[userInfo.nickname] = userInfo.user_id
}
} }
} }
} }