mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-08-17 11:37:06 +08:00
fix: 修复日报成员名称与图片识别兼容性
This commit is contained in:
+3
-3
@@ -556,9 +556,9 @@ app.whenReady().then(async () => {
|
||||
if (!provider || !model) {
|
||||
return { success: false, error: '当前 AI 模型不存在' }
|
||||
}
|
||||
if (!model.capabilities.vision) {
|
||||
return { success: false, error: '当前模型不支持图片理解' }
|
||||
}
|
||||
// Capability metadata is stored per machine. A model verified on macOS
|
||||
// may still be unmarked on Windows, so do not reject before making the
|
||||
// real multimodal request. The provider response remains authoritative.
|
||||
// request 来自 renderer,imageHash 是 md5(优先)或 sha256(...),dataUrl 在内部算出
|
||||
// 这里直接调 service,dataUrl 由 renderer 通过 window.api.getImage 拿到再传进来
|
||||
return imageInsightService.analyze(request)
|
||||
|
||||
@@ -195,6 +195,9 @@ export class AIProviderService {
|
||||
const imageError = validateVisionImage(imagePart.dataUrl)
|
||||
if (imageError) throw new Error(imageError)
|
||||
const result = await this.request(messages as AIMessage[], options)
|
||||
if (options?.providerId && options.modelId) {
|
||||
this.markCapabilities(options.providerId, options.modelId, { vision: true, ocr: true })
|
||||
}
|
||||
return { success: true, ...result }
|
||||
} catch (error) {
|
||||
return { success: false, error: safeAIError(error) }
|
||||
|
||||
@@ -175,13 +175,18 @@ const applyGroupMemberNames = async (
|
||||
const member = memberMap.get(senderId)
|
||||
if (!member) return message
|
||||
const preferredNames: Record<ReportMemberNamePreference, string[]> = {
|
||||
groupNickname: [member.groupNickname, member.wechatNickname, member.remark, member.nickname],
|
||||
wechatNickname: [member.wechatNickname, member.groupNickname, member.remark, member.nickname],
|
||||
// Keep the three modes semantically distinct. `member.nickname` may
|
||||
// already be a contact remark, so it must not leak into the first two.
|
||||
groupNickname: [member.groupNickname, member.wechatNickname],
|
||||
wechatNickname: [member.wechatNickname, member.groupNickname],
|
||||
remark: [member.remark, member.groupNickname, member.wechatNickname, member.nickname]
|
||||
}
|
||||
const name = preferredNames[preference].find((value) => value && !isInternalName(value))
|
||||
if (!name) return message
|
||||
return { ...message, name, img: message.img || member.avatar }
|
||||
return {
|
||||
...message,
|
||||
name: name || (preference === 'remark' ? message.name : ''),
|
||||
img: message.img || member.avatar
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -222,11 +227,12 @@ export function useGroupReportGeneration({
|
||||
const [generatedImage, setGeneratedImage] = useState<string | null>(null)
|
||||
const [reportPaths, setReportPaths] = useState<ReportPaths | null>(null)
|
||||
const [templateId, setTemplateId] = useState<ReportTemplateId>('v1')
|
||||
const [memberNamePreference, setMemberNamePreferenceState] =
|
||||
useState<ReportMemberNamePreference>(() => {
|
||||
const [memberNamePreference, setMemberNamePreferenceState] = useState<ReportMemberNamePreference>(
|
||||
() => {
|
||||
const saved = localStorage.getItem('group_report_member_name_preference')
|
||||
return saved === 'wechatNickname' || saved === 'remark' ? saved : 'groupNickname'
|
||||
})
|
||||
}
|
||||
)
|
||||
const [reportTimeoutSeconds, setReportTimeoutSecondsState] = useState<number>(() => {
|
||||
const saved = Number(localStorage.getItem('group_report_timeout_seconds'))
|
||||
return Number.isFinite(saved) && saved >= 30 ? saved : 300
|
||||
|
||||
Reference in New Issue
Block a user