Inspiration

Invoice chasing is a tone problem as much as a timing problem. The same "final notice" that is right for a client who is simply slow is wrong for one who filed for Chapter 11 yesterday, and pointless for one whose company was just absorbed by a bigger one with a new payables desk. We had an accounts-receivable agent with a written policy and a cited ledger; this hackathon was the push to give it a planner that runs on open weights and a look at the outside world before it escalates.

What it does

Chaser is a seller-side accounts-receivable agent on PayPal with an AG Grid command center. It reconciles payments to invoices (published accuracy on a benchmark), chases overdue invoices on a cadence that reads the payer's history and PayPal's viewed flag, honours a client's promise to pay, assembles dispute evidence, and decides what happens after the final notice (write-off, settlement, hand-off) under a JSON policy that says what the agent may do alone. New for this hackathon: the planner is NVIDIA Nemotron 3 Nano on Nebius Token Factory, and before any final notice, settlement or hand-off the agent runs payer signals, a Tavily news search on the client (last month) classified into distress / change / growth with the articles as evidence, auto-attached to every after-final proposal and written to the audit log per client.

How we built it

  • Model: Nebius Token Factory, OpenAI-compatible endpoint, nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B through @ai-sdk/openai-compatible in the Vercel AI SDK 7 agent loop (streamText, multi-step tools, toolApproval for human-in-the-loop). Nemotron returns its reasoning alongside tool calls; one chase turn is 2 steps and ~27 s on the demo data.
  • Signals: src/lib/agent/signals.ts calls Tavily (topic=news, time_range=month, 5 results, 1 credit), classifies by keyword families, and returns evidence + a recommendation the model must weigh, not obey. Without a key it returns a demo set labelled source: "demo".
  • Everything about money is deterministic code (matching, cadence, predictions, policy gate); the model picks the next tool and writes the prose. That is why a 30B model behaves.
  • PayPal Agent Toolkit on the sandbox; Next.js 16 + React 19 + AG Grid Community; Vercel Hobby; 132 vitest tests including the real agent loop.

Challenges we ran into

Nemotron's reasoning tokens count against max_tokens, so short completions came back empty until we raised the budget; then the hosted chat route (60 s) timed out on a plain chase turn because the model streamed a minute of thinking before its first tool call, and the fix was one chat-template flag (enable_thinking=false, 4.9 s for the same turn) rather than a bigger model; the provider adapter had to surface the exact model id so the UI never claims a model that did not answer; and a news signal must never be mistaken for a fact, so the tool returns evidence links and a recommendation, and the demo path is labelled as a demo in the ledger.

Accomplishments that we're proud of

A planner on open weights running a 14-tool loop with policy gating; a "read the news before you escalate" step that changes the agent's decision on the demo client (Chapter 11 -> hand-off, not a final notice); and a reproducible smoke script (npm run nebius:smoke) that proves a real Nemotron turn in the terminal.

What we learned

Small open models are enough for agentic finance when the numbers are computed and the model only decides and writes. External signals belong in the agent's tool set as evidence, with provenance, not as a prompt fact.

What's next

Nemotron Super for the dispute-evidence drafting step, Tavily finance topic for public companies, and a signal history per client in the grid.

Project existed before the submission period: what changed

Chaser was built in October 2026 for the PayPal AI Hackathon. During the Nebius submission period we (1) made Nemotron on Token Factory the default planner with explicit provider selection and a true model label, (2) added payer signals with Tavily (new tool, auto-attached to after-final proposals, demo fallback), (3) grew the test suite from 119 to 132 and added two smoke scripts that run real Nemotron turns. Commits 6337cd3, 3085c2a, 0d75cef, c18aedc on https://github.com/vigohan95/chaser.

Built With

  • ag-grid
  • nebius-token-factory
  • next.js
  • nvidia-nemotron
  • paypal
  • tavily
  • typescript
  • vercel
  • vercel-ai-sdk
  • vitest
Share this project:

Updates

Submission history