add vision analysis service with prompt versioning, response schema, and structured JSON output

This commit is contained in:
2026-09-23 20:34:33 +02:00
parent 85e6d0c957
commit 80a30e2ce0
7 changed files with 142 additions and 23 deletions
+7 -2
View File
@@ -18,6 +18,8 @@ import {createSettingsRouter} from "./routes/settings.js";
import {createSystemRouter} from "./routes/system.js";
import {createAttachmentService} from "./services/attachmentService.js";
import {createUploadsRouter} from "./routes/uploads.js";
import {createVisionDebugService} from "./services/visionDebugService.js";
import {createVisionDebugRouter} from "./routes/visionDebug.js";
export function createCloseHandler(resources) {
let closed = false;
@@ -247,8 +249,9 @@ export function createApp(options = {}) {
const db = createDatabase(config);
const repositories = createRepositories(db, config);
const modelService = options.modelService || createModelService(config, options.modelOverrides);
const attachmentService = createAttachmentService(db, config, modelService);
const chatService = createChatService(repositories, modelService, config, undefined, attachmentService);
const visionDebugService = createVisionDebugService(config);
const attachmentService = createAttachmentService(db, config, modelService, visionDebugService);
const chatService = createChatService(repositories, modelService, config, undefined, attachmentService, visionDebugService);
const FileStore = FileStoreFactory(session);
const authRateLimiters = createAuthRateLimiters(config);
const chatRateLimiters = createChatRateLimiters(config);
@@ -285,6 +288,7 @@ export function createApp(options = {}) {
app.locals.repositories = repositories;
app.locals.modelService = modelService;
app.locals.attachmentService = attachmentService;
app.locals.visionDebugService = visionDebugService;
app.locals.observability = observability;
app.locals.close = createCloseHandler(closeHandlers);
@@ -300,6 +304,7 @@ export function createApp(options = {}) {
}));
app.use(createAuthRouter({repositories, authRateLimiters, config}));
app.use(createUploadsRouter(attachmentService, config));
if (config.visionDebug) app.use(createVisionDebugRouter({visionDebugService, repositories}));
app.use(createSettingsRouter({repositories}));
app.use(createChatsRouter({repositories, chatService, modelService, config, chatRateLimiters}));
app.use(createPersonasRouter({repositories, chatService, modelService, config}));