The tool-use nudge fired on every first response without tools, even
when the conversation already had tool results the AI could reference.
This forced the AI to make a new (broader) tool call instead of
interpreting a short follow-up like "2026-02-11" in context of the
prior exchange. Now the nudge only fires when there are no prior tool
results in the conversation. Also added a system prompt rule telling
the AI to interpret ambiguous follow-ups in context.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tool results are rendered as rich tables/charts in the UI, but the
system prompt was telling the AI to list transaction details and
"summarize tool results naturally", causing it to repeat the same
data in text. Updated the prompt to explain that tool results are
already visible and the AI should give a brief insight instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The LLM summary for update_transaction_category was missing the
transaction ID, so when the user asked to undo a change the AI had
to guess which record from the page context and often picked the
wrong one. Now the summary includes the exact ID and the old category
name, giving the AI everything it needs to reverse the change.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the standalone /chat page with a bottom-right floating widget
available on every page. The panel sends page context with each message
so the AI knows what the user is viewing. On the Transactions page,
the full visible transaction list (with filters) is serialized into
the context so the AI can answer questions about on-screen entries.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Log model name, tool count, raw response preview, and parsed
tool_call count at INFO level. Broaden the retry nudge to trigger
whenever no tools are called on the first attempt, not just when
code is detected.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Restructure the system prompt as explicit rules to more forcefully
prevent smaller models from generating code. Add a server-side
safety net that strips fenced code blocks from assistant responses
before returning them to the user.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Smaller models sometimes output Python/JS code instead of invoking
tools. Add explicit instruction to never generate code and always
call the provided function tools directly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Integrate 6 new tool chains into the chat service: get_budget,
get_budget_summary, get_loan_details, calculate_loan_payoff,
list_payees, and get_scheduled_transactions. Also raises the
search_transactions page_size cap from 25 to 50 and the upcoming
bills display from 5 to 10.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Three new tools: list_categories shows all categories with type and
parent, create_category adds a new one with optional parent nesting,
delete_category removes non-system categories by name. Frontend renders
category tables, success alerts for creation, and warning alerts for
deletion.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ParseDateArg now applies DateTime.SpecifyKind(Utc) since TryParse
returns Unspecified kind. Also fixed the spending report fallback
start date to use the DateTimeKind.Utc constructor overload.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Conversational AI chat that uses Ollama's native tool-calling API to query
transactions, spending reports, account balances, dashboard summaries, and
update transaction categories through natural language. Includes persistent
conversation history, a full-page chat UI with sidebar, and rich inline
rendering of tool results (tables, alerts, cards).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>