Private
Public Access
1
0
Files
Purrse/src/Purrse.Api/Controllers/AiCategorizationController.cs
T
Catherine Renelle 1c7abb7ffc Add AI categorization with Ollama: settings, auto-classify on sync/import, and manual classify from Transactions
Adds local LLM-based transaction categorization using Ollama:
- Settings UI to configure Ollama URL, model, confidence threshold
- Auto-categorization during bank sync and file import
- Manual "Classify Uncategorized" button on Transactions screen that respects active filters
- Payee default category learning loop for classified transactions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:41:12 -05:00

35 lines
1.3 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Purrse.Core.DTOs;
using Purrse.Core.Interfaces.Services;
using System.Security.Claims;
namespace Purrse.Api.Controllers;
[Authorize]
[ApiController]
[Route("api/ai-categorization")]
public class AiCategorizationController : ControllerBase
{
private readonly IAiCategorizationService _aiService;
private Guid UserId => Guid.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
public AiCategorizationController(IAiCategorizationService aiService) => _aiService = aiService;
[HttpGet("settings")]
public async Task<ActionResult<AiCategorizationSettingsResponse>> GetSettings()
=> Ok(await _aiService.GetSettingsAsync(UserId));
[HttpPut("settings")]
public async Task<ActionResult<AiCategorizationSettingsResponse>> UpdateSettings(UpdateAiCategorizationSettingsRequest request)
=> Ok(await _aiService.UpdateSettingsAsync(UserId, request));
[HttpPost("test-connection")]
public async Task<ActionResult<OllamaConnectionTestResponse>> TestConnection()
=> Ok(await _aiService.TestConnectionAsync(UserId));
[HttpPost("classify")]
public async Task<ActionResult<ClassifyUncategorizedResponse>> ClassifyUncategorized(ClassifyUncategorizedRequest request)
=> Ok(await _aiService.ClassifyUncategorizedAsync(UserId, request));
}