1c7abb7ffc
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>
35 lines
1.3 KiB
C#
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));
|
|
}
|