mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 13:27:08 +00:00
fix: 上下文、文件、ocr等进一步适配shamrock
This commit is contained in:
parent
46328a9716
commit
247f3e15d0
4 changed files with 70 additions and 33 deletions
31
apps/chat.js
31
apps/chat.js
|
|
@ -797,7 +797,7 @@ export class chatgpt extends plugin {
|
|||
* #chatgpt
|
||||
*/
|
||||
async chatgpt (e) {
|
||||
let msg = Version.isTrss ? e.msg : e.raw_message
|
||||
let msg = (Version.isTrss || e.adapter === 'shamrock') ? e.msg : e.raw_message
|
||||
let prompt
|
||||
if (this.toggleMode === 'at') {
|
||||
if (!msg || e.msg?.startsWith('#')) {
|
||||
|
|
@ -1669,7 +1669,11 @@ export class chatgpt extends plugin {
|
|||
let toSummaryFileContent
|
||||
try {
|
||||
if (e.source) {
|
||||
let msgs = e.isGroup ? await e.group.getChatHistory(e.source.seq, 1) : await e.friend.getChatHistory(e.source.time, 1)
|
||||
let seq = e.isGroup ? e.source.seq : e.source.time
|
||||
if (e.adapter === 'shamrock') {
|
||||
seq = e.source.message_id
|
||||
}
|
||||
let msgs = e.isGroup ? await e.group.getChatHistory(seq, 1) : await e.friend.getChatHistory(seq, 1)
|
||||
let sourceMsg = msgs[0]
|
||||
let fileMsgElem = sourceMsg.message.find(msg => msg.type === 'file')
|
||||
if (fileMsgElem) {
|
||||
|
|
@ -2127,6 +2131,7 @@ export class chatgpt extends plugin {
|
|||
}
|
||||
}
|
||||
default: {
|
||||
// openai api
|
||||
let completionParams = {}
|
||||
if (Config.model) {
|
||||
completionParams.model = Config.model
|
||||
|
|
@ -2317,27 +2322,7 @@ export class chatgpt extends plugin {
|
|||
}
|
||||
}
|
||||
}
|
||||
let img = []
|
||||
if (e.source) {
|
||||
// 优先从回复找图
|
||||
let reply
|
||||
if (e.isGroup) {
|
||||
reply = (await e.group.getChatHistory(e.source.seq, 1)).pop()?.message
|
||||
} else {
|
||||
reply = (await e.friend.getChatHistory(e.source.time, 1)).pop()?.message
|
||||
}
|
||||
if (reply) {
|
||||
for (let val of reply) {
|
||||
if (val.type === 'image') {
|
||||
console.log(val)
|
||||
img.push(val.url)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (e.img) {
|
||||
img.push(...e.img)
|
||||
}
|
||||
let img = await getImg(e)
|
||||
if (img.length > 0 && Config.extraUrl) {
|
||||
tools.push(new ImageCaptionTool())
|
||||
tools.push(new ProcessPictureTool())
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import common from '../../../lib/common/common.js'
|
||||
|
||||
export async function getChatHistoryGroup (e, num) {
|
||||
// if (e.adapter === 'shamrock') {
|
||||
// return await e.group.getChatHistory(0, num, false)
|
||||
|
|
@ -16,12 +18,23 @@ export async function getChatHistoryGroup (e, num) {
|
|||
chats = chats.slice(0, num)
|
||||
try {
|
||||
let mm = await e.group.getMemberMap()
|
||||
chats.forEach(chat => {
|
||||
let sender = mm.get(chat.sender.user_id)
|
||||
if (sender) {
|
||||
chat.sender = sender
|
||||
for (const chat of chats) {
|
||||
if (e.adapter === 'shamrock') {
|
||||
if (chat.sender?.user_id === 0) {
|
||||
// 奇怪格式的历史消息,过滤掉
|
||||
continue
|
||||
}
|
||||
let sender = await pickMemberAsync(e, chat.sender.user_id)
|
||||
if (sender) {
|
||||
chat.sender = sender
|
||||
}
|
||||
} else {
|
||||
let sender = mm.get(chat.sender.user_id)
|
||||
if (sender) {
|
||||
chat.sender = sender
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
} catch (err) {
|
||||
logger.warn(err)
|
||||
}
|
||||
|
|
@ -32,3 +45,11 @@ export async function getChatHistoryGroup (e, num) {
|
|||
// }
|
||||
return []
|
||||
}
|
||||
|
||||
function pickMemberAsync (e, userId) {
|
||||
return new Promise((resolve, reject) => {
|
||||
e.group.pickMember(userId, true, (sender) => {
|
||||
resolve(sender)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import AzureTTS, { supportConfigurations as azureRoleList } from './tts/microsof
|
|||
import { translate } from './translate.js'
|
||||
import uploadRecord from './uploadRecord.js'
|
||||
import Version from './version.js'
|
||||
import fetch from 'node-fetch'
|
||||
import fetch, { FormData, fileFromSync } from 'node-fetch'
|
||||
let pdfjsLib
|
||||
try {
|
||||
pdfjsLib = (await import('pdfjs-dist')).default
|
||||
|
|
@ -785,10 +785,14 @@ export async function getImg (e) {
|
|||
}
|
||||
if (e.source) {
|
||||
let reply
|
||||
let seq = e.isGroup ? e.source.seq : e.source.time
|
||||
if (e.adapter === 'shamrock') {
|
||||
seq = e.source.message_id
|
||||
}
|
||||
if (e.isGroup) {
|
||||
reply = (await e.group.getChatHistory(e.source.seq, 1)).pop()?.message
|
||||
reply = (await e.group.getChatHistory(seq, 1)).pop()?.message
|
||||
} else {
|
||||
reply = (await e.friend.getChatHistory(e.source.time, 1)).pop()?.message
|
||||
reply = (await e.friend.getChatHistory(seq, 1)).pop()?.message
|
||||
}
|
||||
if (reply) {
|
||||
let i = []
|
||||
|
|
@ -809,8 +813,34 @@ export async function getImageOcrText (e) {
|
|||
try {
|
||||
let resultArr = []
|
||||
let eachImgRes = ''
|
||||
if (!e.bot.imageOcr || typeof e.bot.imageOcr !== 'function') {
|
||||
e.bot.imageOcr = async (image) => {
|
||||
if (Config.extraUrl) {
|
||||
let md5 = image.split(/[/-]/).find(s => s.length === 32)?.toUpperCase()
|
||||
let filePath = await downloadFile(image, `ocr/${md5}.png`)
|
||||
let formData = new FormData()
|
||||
formData.append('file', fileFromSync(filePath))
|
||||
let res = await fetch(`${Config.extraUrl}/ocr?lang=chi_sim%2Beng`, {
|
||||
body: formData,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
from: 'ikechan8370'
|
||||
}
|
||||
})
|
||||
if (res.status === 200) {
|
||||
return {
|
||||
wordslist: [{ words: await res.text() }]
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
wordslist: []
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i in img) {
|
||||
const imgOCR = await e.bot.imageOcr(img[i])
|
||||
|
||||
for (let text of imgOCR.wordslist) {
|
||||
eachImgRes += (`${text?.words} \n`)
|
||||
}
|
||||
|
|
@ -820,6 +850,7 @@ export async function getImageOcrText (e) {
|
|||
// logger.warn('resultArr', resultArr)
|
||||
return resultArr
|
||||
} catch (err) {
|
||||
logger.warn(err)
|
||||
logger.warn('OCR失败,可能使用的适配器不支持OCR')
|
||||
return false
|
||||
// logger.error(err)
|
||||
|
|
@ -1061,7 +1092,7 @@ export async function extractContentFromFile (fileMsgElem, e) {
|
|||
let fileType = isPureText(fileMsgElem.name)
|
||||
if (fileType) {
|
||||
// 可读的文件类型
|
||||
let fileUrl = e.isGroup ? await e.group.getFileUrl(fileMsgElem.fid) : await e.friend.getFileUrl(fileMsgElem.fid)
|
||||
let fileUrl = fileMsgElem.url || (e.isGroup ? await e.group.getFileUrl(fileMsgElem.fid) : await e.friend.getFileUrl(fileMsgElem.fid))
|
||||
let filePath = await downloadFile(fileUrl, path.join('received', fileMsgElem.name))
|
||||
switch (fileType) {
|
||||
case 'pdf': {
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ const defaultConfig = {
|
|||
qwenSeed: 0,
|
||||
qwenTemperature: 1,
|
||||
qwenEnableSearch: true,
|
||||
version: 'v2.7.7'
|
||||
version: 'v2.7.8'
|
||||
}
|
||||
const _path = process.cwd()
|
||||
let config = {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue