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>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
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));
|
||||
}
|
||||
Reference in New Issue
Block a user