PDFVisionFallback

This commit is contained in:
2026-05-06 11:55:45 +09:00
parent 53073578e2
commit 8ece47f961
7 changed files with 68 additions and 29 deletions
+22 -7
View File
@@ -338,18 +338,28 @@ export class AgentExecutor {
const reqMessages = this.buildRequestHistory(this.chatHistory);
// Handle Vision Content Injection
// Merge text prompt with file content instead of replacing, so the user's message is never lost
// visionContent 배열에서 이미지 base64 데이터를 추출하여 엔진에 맞는 형식으로 주입
if (hasVisionContent && reqMessages.length > 0) {
const lastUserIdx = reqMessages.map(m => m.role).lastIndexOf('user');
if (lastUserIdx >= 0) {
const existingContent = reqMessages[lastUserIdx].content;
const textParts: any[] = (typeof existingContent === 'string' && existingContent.trim())
? [{ type: 'text', text: existingContent }]
: [];
const textContent = (typeof existingContent === 'string' && existingContent.trim()) ? existingContent : '';
// base64 이미지 데이터 추출
const imageBase64List: string[] = [];
for (const vc of (visionContent || [])) {
if (vc && vc.data) {
imageBase64List.push(vc.data);
}
}
// Ollama 호환: images 배열 필드에 base64 데이터 직접 주입
// LM Studio 호환: content 배열에 image_url 객체 주입
reqMessages[lastUserIdx] = {
role: 'user',
content: JSON.stringify([...textParts, ...(visionContent || [])])
};
content: textContent,
images: imageBase64List // Ollama native format
} as any;
}
}
@@ -1925,10 +1935,15 @@ export class AgentExecutor {
? message.content
: JSON.stringify(message.content);
return {
const result: any = {
role: message.role,
content: normalizedContent
};
// Ollama Vision: images 필드 보존
if ((message as any).images) {
result.images = (message as any).images;
}
return result;
});
}