feat(ai): implement AI models management and configuration in admin panel

This commit is contained in:
Nils-Johan Gynther
2026-04-19 11:07:15 +02:00
parent e7c8fd8416
commit f3db5ba51a
10 changed files with 341 additions and 3 deletions
+69
View File
@@ -0,0 +1,69 @@
import { Controller, Get } from '@nestjs/common';
import { Public } from '../auth/decorators/public.decorator';
import { AI_CATEGORIZATION_MODEL } from './ai.service';
import { RECEIPT_IMPORT_MODEL } from '../receipt-import/receipt-import.service';
export interface AiModelInfo {
id: string;
name: string;
description: string;
model: string;
path: string;
trigger: string;
access: string;
}
@Controller('ai')
export class AiController {
@Get('models')
@Public()
getModels(): AiModelInfo[] {
return [
{
id: 'receipt-pdf',
name: 'Kvittoimport — PDF-tolkning',
description: 'Extraherar varunamn, mängd och pris ur PDF-kvitton via textanalys.',
model: RECEIPT_IMPORT_MODEL,
path: '/import',
trigger: 'Vid uppladdning av PDF-kvitto',
access: 'Alla inloggade',
},
{
id: 'receipt-image',
name: 'Kvittoimport — Bildtolkning',
description: 'Extraherar varunamn, mängd och pris ur kvittofoton via bildanalys.',
model: RECEIPT_IMPORT_MODEL,
path: '/import',
trigger: 'Vid uppladdning av kvittobild (JPEG, PNG, WebP, HEIC)',
access: 'Alla inloggade',
},
{
id: 'receipt-category',
name: 'Kvittoimport — Kategorisuggestion',
description: 'För varor som inte matchas mot befintliga produkter visas ett AI-förslag på kategori som ledtråd.',
model: AI_CATEGORIZATION_MODEL,
path: '/import',
trigger: 'Automatiskt efter kvittotolkning (om inga träffar hittas)',
access: 'Premium-användare + Admin',
},
{
id: 'product-suggest',
name: 'AI-kategorisering per produkt',
description: 'Ger ett AI-förslag på kategori för en enskild produkt med säkerhetsindikation (hög/medel/låg).',
model: AI_CATEGORIZATION_MODEL,
path: '/admin/products',
trigger: 'Manuell — klick på "✨ Fråga AI" i produktlistan',
access: 'Admin',
},
{
id: 'product-bulk',
name: 'AI-bulk-kategorisering',
description: 'Analyserar alla okategoriserade produkter och presenterar förslag i ett bekräftelsemodal.',
model: AI_CATEGORIZATION_MODEL,
path: '/admin/products',
trigger: 'Manuell — knappen "✨ AI-kategorisera okategoriserade"',
access: 'Admin',
},
];
}
}