diff --git a/backend/evals/cassettes/embeddings/bge-small-en-v1.5.jsonl b/backend/evals/cassettes/embeddings/bge-small-en-v1.5.jsonl index 446829c..f3a518a 100644 --- a/backend/evals/cassettes/embeddings/bge-small-en-v1.5.jsonl +++ b/backend/evals/cassettes/embeddings/bge-small-en-v1.5.jsonl @@ -258,3 +258,11 @@ {"key": "9ffad29f00060c7fd491345d30aa9271a4870e63846d2011adaef735be70af29", "v": "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"} {"key": "51567926849b2507a7013d4c2486be4ac5f088b0e6850c723ee57e473fd80cc7", "v": "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"} {"key": "6d40c4ae9b52a43fbf5e68d4a2d71b0345ed1b7889276ae266c825d6703a22ba", "v": "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"} +{"key": "03d59818cac232ba1df46cfbbe6a252ac74e834019d05953f6b4b982f6ff3135", "v": "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"} +{"key": "1907599eed6808a01fe513291f9ec934066202a3d9aca7b75d8e7b14939db018", "v": "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"} +{"key": "f91d98199a3993d4f84665318857477735baa31e6e69cadb4e809d0790fa7941", "v": "tO/uPCiRhr0BjYg7ILPwvBcmLLxUehE9b9abPDKCNryusBI8d+5hPZ+6NrulXX6922hrupdgKz3OS/m8tIQMvTovmrzelK29gzyGunoapD35nV89C22lvRAwjLyaCGO9cq8FPKGToLxLq4c8aI0jvShxZ72CQ/29xWvcvLJ68LvMYXw9QAOUvPReg7ut+c47pOj/vLkFrjr29ac8X74ZPLGaj7yeZ149D90zPeo8ob23LES9prBWPeorDj0RY8U8J09BPZtszrooYFQ9GmMBvW+lab1ltDk7Og97vTmafL3gCSw9LocmPNW0kLwVoBo9T7cqO+abYD12HxS+VgAjPdhcyLsz5iG9AVzWPEMPN70Mj8s8jLg3vYWxhDxkLig9LnYTvXcwJ7yGJoM9i5aRvRzpkjyG9dA8f90KPW5ysLwGu1E7SG6yO9zMVrzWKY88qEd7PCiiGb0n/Oi7MoK2vMP2XT24oUI9wsOkOyWnib1YhrS9PSoqvTW/i70qe4O7s97bPc4pUz2Raou9koyxPt3daTz/xDE99YApPfpDED3Yno28rNeovT47PT3JuUQ9LjTOO/MLq7ykKsW9bjDrvGd8kD2zDw69Wk4LvW0ORTzfpUC89G+WOwnnkz0z97Q8cAnVvOdBkbzEOKO8nTSlO83Wer2ljjC9GhApPW4w6zyPorQ7AUvDPT59Aj18sci7nL8mvazouzxc1Jw81bSQPFYAoz1dOIg8JWVEPdcJ8LzfpUA9f5tFvaXhCL3QRAK8DOIjPDLVjjwVgPu7JXZXPedSpDzkJuI7W8MJO2KI9z3M5QY8yKixvWYYJTz3F849RuigPHYOgTyRagu8y5KuPCrm5bvum5w8JYdqvNcJcD11qhU98pasvZWHQb31T3e7dJmCPGhLXjxRf4E97SYeu2bFTD17oDW8Bv2WPYWxBL0aYwE8dbuoPVpOCz3DJ5C9nmdevWiNIztN79O98BCbPGnxjjzi0QK9wycQvUzewDv3WRM8Hi1fvYhqz7w6QC29RyztvSnVUj2N6/A8wPvNvKtzPb3ve327wPtNPbDjS71XIkk9m64TvUnjML31ok+9L5i5u2AzGLwy1Q48QlhzPZceZjygLzU9tshYPS/rETvbiIo9czWXPGFEqzy1ZO075FcUvZKdxLtlkpM9bNsLPadWB7yN2l29pZ9DPTRKjb69AD65Pju9PAKem7xkgQC8F/V5ulJfYj3baOu84SvSvMl3/zwpBoU9goXCuznLLrxMi+g82J4NPXD4QT1F1408RyztPHcwJ72qQIS9HcnzvHJ+UzwxYBC7yFXZPJRUCD4FV+a8Pn0CPtl+7r3t5Ng7kUpsvdto6zwG/RY906p0vUdMjL3ioNA8FyasPLyc0jzve3093nIHPNF3O72FsYQ9sw+OPQWZq71gMxi9NrD/Oz5MULw2sH+9tz1XPZ6YEDt4Uk28JacJvd5SaLwGDio9q2KqvL5kqT2Govg7wnBMvYoB9Lra4lm8rKb2PFYAIz3M5Ya8lDTpPWAihb2RSmy8SJDYvF/PrLx0mYK8FV5Vva4bdT3UDmC8OCV+vTi6m7wizp+8u3osvQb9Fr2VmNQ81pRxPYO4+zx2HxS9WgxGPGc6y7wAGIo83nKHvfRvFj19BKE9qdyYvMKyET3Gz8e7tgqevDRKjTxLaUI9znyrvdRQJb2Z5ry8vmQpvYLHh76Z1Sm9Fze/vZWY1Dz+oos8mdWpvIReLL3ESTY8OZp8vSdPwTwpBoU8Ul/iPLytZTu4f5w8mghjPV4p/LyA/zA9/7OevJdgq7yLpyS9VxE2vZcN0zzQwHc9SkccPaGCDT3WlPG7xzOzu/Pa+Dw8hHk6GGr4vDFxI7u/l+I7Pn2CPeE8Zb2xRze8YPFSPY6RIb1884095t0lvNhcyDwn/Og8nkU4PO+9QrzALIA9NuExPZ3yXz0xYBA9jpGhO6fSfLzGEQ09smldu2iNo7whKO88Jy2bPKpRlz3ioFC9PRkXvcWcDj0DAge9j2Bvvf3rR72fy0m8gkP9O3LAmLwHYYI7"} +{"key": "5e48b5efe3a56cac11b18b5d2fb9631bb1d21aa914e77b34930db4029f9ca871", "v": "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"} +{"key": "938b06c866dc9dac6e31a937d4eba5e5e84afa74bc528674049f021403b25034", "v": "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"} +{"key": "a9d6ae7aed2ea77b1293a5d88085030d0910f2ece2e2ecc0b7d42ca013deab74", "v": "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"} +{"key": "da197790a64aff334479a0670c0770cff570dda9df3cc26b91069b656068f1ca", "v": "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"} +{"key": "81b88d715a9a036fc02de87c284ef5232cc9131aff77c9448e075accb0f76941", "v": "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"} diff --git a/backend/evals/cassettes/groq/ask_lumen.jsonl b/backend/evals/cassettes/groq/ask_lumen.jsonl new file mode 100644 index 0000000..1cfbb79 --- /dev/null +++ b/backend/evals/cassettes/groq/ask_lumen.jsonl @@ -0,0 +1,63 @@ +{"key": "bbac81953b9dcb73584479b79285cc593e3b5c81a75035550b03b571f9ae4443", "case": "audit-L01", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_b5bdad4b-dfaa-4af1-8e4b-378adcbb75c2", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2096, "completion": 38, "reasoning": 18}, "latency_s": 1.218}} +{"key": "97bbd56f08518c4cf120cf93fd0b979df2eec95a6290fb9096ee7a4874ce0c99", "case": "audit-L01", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "**Your September 2026 spending**\n\n| Category | Amount (INR) |\n|----------|--------------|\n| Housing | 22 000 |\n| Restaurant | 8 657 |\n| Groceries | 6 191 |\n| Transport | 6 013 |\n| Utilities | 4 671 |\n| Other | 4 711 |\n| **Total spend** | **52 245** |\n\nYou made 25 transactions that month. Compared with your budget of 70 000 INR, you were **17 755 INR under** budget and saved about 67 755 INR (the “savings” figure in the overview). \n\nThe biggest chunk is always **Housing** (your rent), followed by **Restaurant** and **Groceries**. \n\n*Next: “Show last month by vendor”*", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3123, "completion": 202, "reasoning": 19}, "latency_s": 1.141}} +{"key": "255de4b9cd154ffaaa4d652db963db61ac64e0121bf03a6a26802bf6cb09fec8", "case": "audit-L02", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_91547fde-f2c7-42f7-8ec1-9ca1f51af0f7", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2101, "completion": 55, "reasoning": 35}, "latency_s": 0.969}} +{"key": "85748dae5adbedb3c925a1e7a1990a9600f683cb490e58532aaf4d8b69debe2d", "case": "audit-L02", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Cooking at home twice a week can shave a noticeable chunk off your monthly out‑of‑pocket costs.\n\n**Why:** \nYour recent data shows you spend about ₹7 000 – ₹12 800 a month on restaurants (average ≈ ₹8 500). If you replace two meals a week with home‑cooked ones, you’d be cutting roughly 8 – 10 % of that category.\n\n**Rough estimate:** \n- Typical restaurant meal (based on your spend) ≈ ₹500 – ₹600. \n- Two meals a week × 4 weeks ≈ 8 meals → ₹4 000 – ₹4 800 saved per month. \n\n**Annual impact:** \n≈ ₹48 000 – ₹58 000 saved each year, which would boost your monthly “savings” figure by about ₹4 000 – ₹5 000.\n\n**What this means for you:** \n- Your current monthly savings (from the overview) are around ₹62 800 – ₹71 600. Adding a ₹4 000‑₹5 000 boost would push you into the ₹66 800 – ₹76 600 range, giving you extra room for your big‑purchase goal or to grow your emergency fund.\n\n*Note:* This is a ball‑park figure based on your existing restaurant spend; actual savings will vary with the exact cost of the meals you replace. \n\nNext: “Show my restaurant spend broken down by month so I can see the trend.”", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3128, "completion": 498, "reasoning": 159}, "latency_s": 1.875}} +{"key": "4689935e6f3a842f060567a3419d593e045422fd435c17180cbd8e67f5847291", "case": "audit-L03", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_593b27a9-a32b-49e3-9f9c-75ab6c746bcf", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2100, "completion": 37, "reasoning": 17}, "latency_s": 0.781}} +{"key": "36216af469f8951fd7981bdd688244fdaf8a76fe2195de8bd08a0e2b1aa4a56b", "case": "audit-L03", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "You’re in a good spot to take a ₹60,000 trip in December.\n\n**Why it looks affordable**\n\n| Item | Amount (₹) |\n|------|------------|\n| Monthly take‑home income (your estimate) | 120,000 |\n| Typical monthly budget you set | 70,000 |\n| Average spend this month (Oct 2026) | 57,122 |\n| Savings you’ve built up so far (cumulative) | 62,878 |\n| Recurring bills you’ll still have in December (housing ₹22,000 + utilities ≈ 2,500 + gym ≈ 1,500 + streaming ≈ 800 + others) | ~₹27,000 |\n\n- Your **actual spend** this month is well under your budget, leaving you with **₹12,878** of budget left for the month.\n- You already have **₹62,878** saved, which comfortably covers the trip cost.\n- Even after accounting for the usual December recurring bills (≈ ₹27,000), you’d still have **≈ ₹35,000** of discretionary cash left, more than enough for the ₹60,000 trip when combined with your savings.\n\n**Bottom line:** \nYes, you can afford the ₹60,000 trip in December without breaking your budget, especially if you keep your December spending in line with the patterns you’ve shown this year.\n\n---\n\n*Next: If you’d like a detailed cash‑flow plan for December (including a month‑by‑month view of expected expenses and how the trip fits in), just let me know.*", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3127, "completion": 413, "reasoning": 66}, "latency_s": 1.64}} +{"key": "2f63af814147827e099aaedde58514879ca666e6d032b2bfd2cdbdc7321653a2", "case": "audit-L04", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_57f1cb41-d385-4cdc-af33-c55608fc935d", "type": "function", "function": {"name": "lookup_vendors", "arguments": "{\"hint\":\"electricity\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2098, "completion": 57, "reasoning": 28}, "latency_s": 0.64}} +{"key": "beaa1161a57db99aa408e81f0bbdac444fe3bb2cda2eaee354601017493e43f3", "case": "audit-L04", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_a2b44404-a15e-44df-a170-a0f50d3162f3", "type": "function", "function": {"name": "run_sql", "arguments": "{\"sql\":\"SELECT id, date, total_amount FROM transactions WHERE vendor_name = 'City Power Ltd' AND date \\u003e= '2026-10-01' AND date \\u003c '2026-11-01'\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2170, "completion": 77, "reasoning": 19}, "latency_s": 0.922}} +{"key": "88c861ed0f83974669016ae9fa7e00ce4d959cb19cc2821023b97494f4d7ef15", "case": "audit-L04", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_c99ad3ac-032a-4f96-afec-e97a9fddff01", "type": "function", "function": {"name": "run_sql", "arguments": "{\"sql\":\"SELECT date, total_amount FROM transactions WHERE vendor_name = 'City Power Ltd' AND date \\u003e= '2026-07-01' AND date \\u003c '2026-11-01' ORDER BY date\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2349, "completion": 82, "reasoning": 23}, "latency_s": 1.188}} +{"key": "1d40c74c916bbdce6f765c58768320f0a82bfc6891b7c88d2222fe9721d96293", "case": "audit-L04", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Your electricity bill jumped to **₹3,439.53** for the 2026‑10‑07 billing cycle. Looking at the past three months:\n\n| Month | Amount (INR) |\n|-------|--------------|\n| July 2026 | 2,515.68 |\n| August 2026 | 1,979.03 |\n| September 2026 | 2,372.09 |\n| **October 2026** | **3,439.53** |\n\nThe October charge is about **₹1,000 – ₹1,500 higher** than the previous three months. A few common reasons for a spike include:\n\n1. **Higher consumption** – perhaps more air‑conditioning, heating, or appliances were used.\n2. **Rate change** – utilities sometimes adjust per‑unit tariffs seasonally.\n3. **Billing period length** – if the current cycle covers more days than usual, the total rises.\n4. **One‑off fees** – service charges, reconnection fees, or late‑payment penalties can be added.\n\nYou can check the detailed line items on the invoice (or in the “City Power Ltd” transaction) to see if any extra fees or a different unit price appear. If the rate or period looks off, consider contacting City Power Ltd to verify the meter reading and ask about any recent tariff updates.\n\n**Next step:** Review the invoice details for any extra charges or a different per‑unit rate, or let me know if you’d like me to pull the actual invoice document for a closer look.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2567, "completion": 326, "reasoning": null}, "latency_s": 1.265}} +{"key": "338b44e442ddb61d98c7bb34b8871c2c4a262f9307a47c9aa3673d08f432293d", "case": "audit-L05", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_677395ce-20d2-4621-b73e-5f4cabe983d9", "type": "function", "function": {"name": "get_recurring", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2095, "completion": 41, "reasoning": 21}, "latency_s": 0.782}} +{"key": "e6c2f3a77e6a72d1fcd49eb33c3b28c8d7ae7e3ef9e872490ed62f6dbd17b363", "case": "audit-L05", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Based on the recurring‑charges data, all of your subscriptions and regular bills have had a charge within the past month (the most recent charge dates range from 2026‑09‑24 to 2026‑10‑10). None of them are flagged as “possibly stopped,” and there’s no indication of a lapse in usage.\n\n**Result:** You haven’t any subscriptions that appear to be unused or dormant at the moment.\n\nIf you’d like to dig deeper—e.g., see the exact transaction history for a particular service or set a custom “no‑activity” threshold—just let me know. \n\nNext: “Show me the last three months of spending by category.”", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2726, "completion": 192, "reasoning": 43}, "latency_s": 1.375}} +{"key": "126f3de0033c0fc90b6ac40015217b9a9230d543160cdc8f5219e25dea301eaa", "case": "audit-L06", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_7d73444f-0c57-4162-8d38-b447e6da4291", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2096, "completion": 25, "reasoning": 5}, "latency_s": 2.328}} +{"key": "efe5df4b2a470710904905e151dd747924ab4c3b2293214d92d39970ad04f683", "case": "audit-L06", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "You’re on track to stay within your ₹70,000 monthly budget. So far this month you’ve spent **₹57,122**, leaving **₹12,878** of budget remaining.\n\nYour spending this month is a bit higher than September (up ≈9 %), but it’s still well under the limit. Keep an eye on the larger recurring items—housing (₹22,000) and shopping (₹18,514)—to make sure they don’t push you over later in the month.\n\nNext: you could ask to see a breakdown of this month’s spend by category or list the upcoming recurring bills.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3123, "completion": 165, "reasoning": 28}, "latency_s": 1.391}} +{"key": "63a35882063fe248aa4748824e35844d803ee4b3f40478210c693a1168a9c337", "case": "audit-L07", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_095ba00f-4b2d-4872-9ce2-b34ec2a9bfe7", "type": "function", "function": {"name": "search_documents", "arguments": "{\"query\":\"rental agreement end date\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2095, "completion": 48, "reasoning": 17}, "latency_s": 1.36}} +{"key": "6860b89a25bc4f870832031fb6b42bdbb2f6e69353a2575c6dddba0fa39f37e0", "case": "audit-L07", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Your rental agreement for **Flat 304 at Greenview Residency** runs for 12 months, from 1 November 2025 to **1 November 2026**【cd3501f6-9560-5a5e-9169-a0b165c855c9#s02】. After that date the tenancy can be renewed in writing, or either party may give 30 days’ notice as stated in the agreement【cd3501f6-9560-5a5e-9169-a0b165c855c9#s05】. \n\nNext: you might want to know the next rent due date or any upcoming notice deadlines.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2558, "completion": 179, "reasoning": 25}, "latency_s": 1.203}} +{"key": "9897526248b6544aeefcbe0987b27b76a7d583fed197d9aa749b4eb6c13430f1", "case": "audit-L08", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_bfa59f0f-085e-4a95-98b9-8f0a475b56d8", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2098, "completion": 46, "reasoning": 26}, "latency_s": 0.922}} +{"key": "472b8c5c33e42c776ea1fb5dbf787754d4fa4b99915b534a4494ad27f4a1c9b0", "case": "audit-L08", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "You’ve saved roughly ₹3.63 lakh over the past six months (≈ ₹60.6 k per month). \nTo reach a total of ₹5 lakh you’d need about ₹1.37 lakh more, which at that current saving rate works out to roughly **2 – 3 more months**.\n\n*If you keep saving at the same pace (≈ ₹60 k / month), you’ll cross the ₹5 lakh mark in a little over two months.* \n\nNext: “Show my savings trend by month”.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3125, "completion": 367, "reasoning": 233}, "latency_s": 2.094}} +{"key": "d6d78e28e9d5616305a0f25520200259d8b41af3c69f9d90ddcb2756acad8a7a", "case": "audit-L09", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_c64ca385-8a0b-404c-88fa-e458ed92a3a1", "type": "function", "function": {"name": "get_anomalies", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2096, "completion": 44, "reasoning": 23}, "latency_s": 0.516}} +{"key": "d7f53025098974e6353f9f58f6fd97827db4aaff1fbaeb7010dbf61d93792940", "case": "audit-L09", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Yes – the anomaly detection flagged a possible duplicate charge:\n\n| Vendor | Date | Amount | Why flagged |\n|--------|------|--------|-------------|\n| QuickBite | 2026‑10‑09 | ₹ 499.39 | “potential_duplicate” |\n\nNo other transactions this month (October 2026) were marked as duplicates. If you’d like to see the original receipt, compare it with the earlier QuickBite purchase, or propose flagging this invoice, just let me know. \n\nNext: “Show me the QuickBite receipts for October”.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2660, "completion": 182, "reasoning": 56}, "latency_s": 1.453}} +{"key": "0693f292588d59f3bdefb853a5fa68aef519dc27f2fdaef275e62d74d162e59e", "case": "audit-L10", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_39809c8d-fa2c-46e3-aa92-7fdadc38414f", "type": "function", "function": {"name": "get_recurring", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2094, "completion": 31, "reasoning": 11}, "latency_s": 0.969}} +{"key": "e0f4ca9f3678497afce59dbcae8c01aa0271202c3706176c4c3c4ce284e16432", "case": "audit-L10", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Here are the recurring charges that aren’t essential — you could consider pausing or canceling them to free up cash for your savings goal:\n\n| Vendor | Category | Typical monthly amount |\n|--------|----------|------------------------|\n| StreamFlix | Entertainment (subscription) | ₹ 765.82 |\n| FitZone Gym | Healthcare (gym membership) | ₹ 1,500.00 |\n| NetLink Broadband | Utilities (internet) | ₹ 1,178.82 |\n\nThese three together cost about **₹ 3,444.64 per month**. If you can live without the streaming service, a gym membership, or a high‑speed broadband plan (or switch to a cheaper alternative), you’ll free up a noticeable chunk of your budget while still covering your core needs (housing, utilities, water, electricity, mobile).\n\n**Next steps you might take**\n\n1. **Check usage** – Look at the past few months of activity (e.g., streaming watch history, gym visits, internet speed needs). \n2. **Contact the vendor** – If you decide to cancel, you can either pause the service or request a lower‑cost plan. \n3. **Update the category** – Once you cancel, let Lumen know so we can keep your records tidy (you can ask me to propose an action).\n\n*If you’d like me to draft a cancellation request or propose an action for any of these vendors, just let me know.* \n\nNext: “Show my total monthly spend by category for the last three months.”", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2725, "completion": 356, "reasoning": 29}, "latency_s": 1.719}} +{"key": "03546540fb229b30fd0af1402a5e04b4e3c4921c53f272deb53986f0b138c50d", "case": "audit-L11", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_36d2a3d4-650f-4a10-b5c4-aa9d5dadc1b5", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2094, "completion": 25, "reasoning": 5}, "latency_s": 0.781}} +{"key": "338baff5162130145ca188988ec434e71a93398e761aa5949613e39570de583b", "case": "audit-L11", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "**Your budget snapshot**\n\n| Month | Spend | Budget (₹70 000) | Budget left / overrun |\n|-------|-------|----------------|-----------------------|\n| May 2026 | 73 323 | 70 000 | **‑3 323** (over) |\n| Jun 2026 | 65 086 | 70 000 | +4 914 |\n| Jul 2026 | 48 369 | 70 000 | +21 631 |\n| Aug 2026 | 60 515 | 70 000 | +9 485 |\n| Sep 2026 | 52 245 | 70 000 | +17 755 |\n| Oct 2026 (to 15th) | 57 122 | 70 000 | +12 878 |\n\n**What this means**\n\n* Your monthly take‑home income is about **₹120 000**, so you’re comfortably above the ₹70 000 budget each month except May, where you overspent by ~₹3 300. \n* The biggest driver of spending is **Housing** (₹22 000 every month). Other large categories are **Shopping** and **Restaurant**, but both are trending down. \n* You have a healthy “savings” buffer each month (the “savings” column shows the amount left after budget, not a bank balance). \n\n**Next steps you might consider**\n\n* Review the May overspend – it was the only month you went over budget. \n* Keep an eye on Shopping (down but still sizable) and consider trimming any non‑essential items. \n* Your recurring bills (rent, water, gym, streaming, electricity) total about **₹27 000** each month, leaving plenty of room for discretionary spending.\n\n**Next:** you could ask to see the detailed list of Shopping expenses for the last month, or get a forecast of next‑month spending.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3121, "completion": 401, "reasoning": null}, "latency_s": 1.954}} +{"key": "f0e5dec537a96fbd215e14b252a9950277505d34e76e8fe682de1e899ffee191", "case": "audit-L12", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_c413f1cc-6ea3-4e6e-932a-a8be5786e9fa", "type": "function", "function": {"name": "remember", "arguments": "{\"note\":\"Saving for a car next year\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2098, "completion": 38, "reasoning": 6}, "latency_s": 0.828}} +{"key": "785870d3e8ec650f22d1c6e48eb7030a8d02e4a55fa54cf42805efbecce2ccac", "case": "audit-L12", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Got it—I’ve saved a note that you’re saving for a car next year. If you’d like me to help track progress toward that goal, just let me know! \n\nNext: you can ask me to see your current spending trends, upcoming bills, or anything else you’d like to review.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2165, "completion": 65, "reasoning": null}, "latency_s": 0.938}} +{"key": "df98fa8db76df11dfba08e7d9f3d97e42cc347bbc47af95845a451e7beaa5afc", "case": "audit-L13", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_d1fee298-b4ff-4a49-aa2c-111e5b3d87cd", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2101, "completion": 41, "reasoning": 21}, "latency_s": 0.781}} +{"key": "677f2d54e81cb86deb8cd240c232f95ce7a1af40f674cd1cf3995eef8de442ca", "case": "audit-L13", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "You don’t have any cash‑balance data in Lumen – the system only records your spending transactions, not the amount of money you keep in a bank account or in a wallet. Because of that I can’t tell you exactly how much “idle” cash you have right now.\n\n**What you can do with any cash you do have**\n\n| Option | Typical return (2026‑27) | Key points |\n|--------|--------------------------|------------|\n| **High‑yield savings account** (e.g., digital‑only banks) | 4 %–5 % p.a. (interest paid monthly) | Very liquid, no lock‑in, tax‑free up to ₹10 000 per year under Section 80TTB for senior citizens; otherwise taxable as “Income from Other Sources”. |\n| **Fixed Deposit (FD)** | 6 %–7.5 % p.a. for 1‑year tenures | Lock‑in period; higher rates for longer tenures; interest taxable; can be auto‑renewed. |\n| **Recurring Deposit (RD)** | 5.5 %–6.5 % p.a. | Good if you want to add a fixed amount each month; similar tax treatment to FDs. |\n| **Liquid Mutual Funds** | 5 %–6 % p.a. (NAV‑based) | Slightly higher returns than savings accounts, very low‑risk, can be redeemed within a day; tax on short‑term gains (≤ 3 months) at 20 % plus surcharge. |\n| **Short‑term Debt Funds** | 6 %–7 % p.a. | Low volatility, tax‑efficient if held > 3 months (long‑term capital gains taxed at 20 % with indexation). |\n| **Sovereign Gold Bonds (SGBs)** | 2.5 % p.a. (interest) + market‑linked gold price | No storage hassle, tax‑free on redemption after 8 years; can be sold on exchanges. |\n| **Digital‑gold or gold‑linked ETFs** | Market‑linked, ~2 %–3 % p.a. after fees | More liquid than physical gold, but gains are taxable. |\n\n**How to decide**\n\n1. **Liquidity need** – If you might need the money within a few weeks, a high‑yield savings account or liquid fund is safest. \n2. **Risk tolerance** – All the options above are low‑risk; the only trade‑off is the lock‑in period vs. return. \n3. **Tax efficiency** – For amounts under ₹1  lakh, a senior‑citizen savings account (if applicable) or the 80TTB deduction can reduce tax. For larger sums, consider debt funds held > 3 months to benefit from indexation. \n\nIf you can pull a recent bank statement or tell me the approximate cash balance you have right now, I can run a quick “what‑if” calculation showing how much you’d earn with each of these options. \n\n**Next:** Share the current cash amount you have (or upload a recent statement) so I can estimate potential earnings for you.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3128, "completion": 745, "reasoning": 59}, "latency_s": 2.812}} +{"key": "7f3bb00d0fb74b6fddd7a7bfbe06c0b9e77a4929a25f5c6e101db137b685cabb", "case": "audit-L14", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_665d2aca-a99e-41bd-902b-640f067fdbf8", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2098, "completion": 33, "reasoning": 13}, "latency_s": 0.766}} +{"key": "48887e55629c96f06547143da8932fdb3701fa36253c67e2bfe3329b4f185b1b", "case": "audit-L14", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_6053d1b0-9488-495c-9ec6-2578e5a4def4", "type": "function", "function": {"name": "forecast", "arguments": "{\"months\":1}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 3125, "completion": 38, "reasoning": 15}, "latency_s": 0.921}} +{"key": "d38b36df8ab3e73540cf65ee5ecfb929bdac9633bd1fed09df2266ba83d0980e", "case": "audit-L14", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "**Spending forecast for next month (Nov 2026)** \n\n- **Projected total spend:** **≈ ₹52,108** \n- **How we got this:** I ran the `forecast` tool, which looks at your last six full months of spending (April – September 2026) and fits a simple trend line. The average month‑to‑month change is a decrease of about **₹2,008**, giving a November projection of **₹52,108**.\n\n**Cash‑flow picture**\n\n| Item | Amount (₹) |\n|------|------------|\n| Monthly take‑home income (your estimate) | 120,000 |\n| Projected spend (Nov) | **52,108** |\n| Expected cash left after spending | **≈ 67,892** |\n\nSo, if your income stays at the same level and you spend roughly what the model predicts, you’ll have about **₹68 k** of discretionary cash left for savings, investments, or any big purchase you’re planning.\n\n**What to watch**\n\n- Your biggest recurring outflow is **Housing (₹22,000)** each month. \n- Other regular bills (water, electricity, gym, streaming) total roughly **₹4,800** per month. \n- Keeping an eye on “Shopping” and “Restaurant” categories (which have been trending down) can help you stay comfortably under budget.\n\n**Next step you might take** – review the upcoming recurring bills (e.g., rent due Nov 2, gym Nov 3) to confirm amounts and dates, or set a target for how much of the remaining cash you’d like to allocate to savings or a specific big purchase. \n\nNext: **Show next month’s spending broken down by category**.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3310, "completion": 371, "reasoning": null}, "latency_s": 1.844}} +{"key": "f73076054118fa025d38d0692c87c4885b22980630cbebac7ad59f1c701b78d6", "case": "audit-C15", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_3dc07c69-347b-4275-919d-882e1fa4716e", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2099, "completion": 65, "reasoning": 45}, "latency_s": 1.063}} +{"key": "0dcbadf031d6d7a8ff2b2442b3469a3abffaaee14cdef491941a942e48dbfb86", "case": "audit-C15", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "**Food spending (groceries + restaurants)** \n\n| Period | Months included | Total spend (INR) |\n|--------|----------------|-------------------|\n| **Most recent 3 months** (Aug – Oct 2026) | Aug 2026, Sep 2026, Oct 2026 | **33,592** |\n| **Previous 3 months** (May – Jul 2026) | May 2026, Jun 2026, Jul 2026 | **42,313** |\n\nYour food outlay fell by **≈ 20 %** in the latest quarter compared with the quarter before that. \n\n*How the numbers were built* – I added the “Groceries” and “Restaurant” categories for each month from your spending overview. \n\nNext: “Show food spend broken down by month” or “Compare food spend to my overall budget”.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3126, "completion": 483, "reasoning": 285}, "latency_s": 1.734}} +{"key": "de79d17055278448edcab67d90b5ef5ee6524fb05ad931ff0d8e8f8010d6bab4", "case": "audit-C16", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_68f03856-1b59-4512-a539-7fd7e6131f4d", "type": "function", "function": {"name": "get_recurring", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2092, "completion": 24, "reasoning": 4}, "latency_s": 0.703}} +{"key": "3e3df897351c210cc50cb6f3d69ce0786655f73a9aeae0bdb541c75f16f08dc3", "case": "audit-C16", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Your largest recurring expense is **housing** – the rent you pay to **Greenview Residency** at **₹ 22,000 per month**. \n\nThe next biggest recurring costs are:\n\n| Category | Vendor | Monthly amount |\n|----------|--------|----------------|\n| Utilities | City Power Ltd | ₹ 2,443.89 |\n| Utilities | AquaWorks Water Board | ₹ 573.14 |\n| Utilities | SkyTel Mobile | ₹ 499.00 |\n| Utilities | NetLink Broadband | ₹ 1,178.82 |\n| Healthcare | FitZone Gym | ₹ 1,500.00 |\n| Entertainment | StreamFlix | ₹ 765.82 |\n\nThese figures come from your recurring‑charges data, which tracks the typical amount, cadence and next due date for each vendor. \n\nNext: you might want to see a breakdown of all your recurring expenses by category, or explore ways to reduce the biggest one.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2723, "completion": 232, "reasoning": 32}, "latency_s": 1.203}} +{"key": "160adcc83dd5c89e5fe6fb06fb7384d278e6a83bd798a016f28a78694907bb43", "case": "audit-C17", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_f21e9dc1-070c-49a8-9259-2a3bc8237573", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2094, "completion": 25, "reasoning": 5}, "latency_s": 0.312}} +{"key": "d4affe88fc5e43ee8813898850cde8416123aba1cb1074ff8f3da57020fdcb0f", "case": "audit-C17", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "**Overall picture**\n\n- **Income vs. budget** – You bring in about ₹120 k each month and aim to live on a ₹70 k budget. \n- **Spending** – Over the last six months you’ve averaged **₹60 k – ₹73 k** a month, so you’re generally staying **under** your budget, with a small surplus each month (except May, where you overspent by ~₹3.3 k). \n- **Savings** – Because you’re spending below the budget, you’re building a healthy cushion: the system shows a cumulative “savings” balance that has grown from ~₹46 k in May to **₹62 k** by mid‑October. \n- **Top categories** – The biggest chunk is **Housing (₹220 k total)**, which is flat each month (rent). Shopping, restaurants, groceries and transport are all trending **down**, which is a good sign for cutting discretionary spend. \n- **Recurring bills** – Your regular outgoings total about **₹30 k** each month (rent ₹22 k, water ₹0.6 k, gym ₹1.5 k, streaming ₹0.8 k, electricity ₹2.4 k). These are already accounted for in your budget. \n\n**What this means for your goals**\n\n- **Saving more** – You have a surplus of roughly **₹12 k–₹20 k** each month. Directing a portion of that (e.g., ₹10 k) to a dedicated savings or investment account would accelerate your savings goal. \n- **Cutting subscriptions** – Your biggest non‑essential recurring cost is the streaming service (≈₹766). Consider pausing it for a month to see the impact. \n- **Big purchase** – With a current surplus and a growing savings balance, you’re in a good position to plan a larger purchase. Just be sure to keep the housing rent fixed and watch any spikes in “Shopping” that could erode the cushion.\n\n**Next steps you might take**\n\n- Review the “Shopping” category for any recurring merchants you can trim. \n- Set a target monthly surplus (e.g., ₹15 k) and track it in the app. \n- Look at the upcoming due dates for your recurring bills to avoid missed payments.\n\n**Next:** “Show me the last three months of Shopping spend by vendor.”", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3121, "completion": 515, "reasoning": null}, "latency_s": 2.094}} +{"key": "b5304736a5802646ab818b2b24faf598aba34ab3bd541c806a877eaee9653f3b", "case": "audit-C18", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_9ad2506f-f000-40bb-9cac-52de7e6b3f79", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2350, "completion": 24, "reasoning": 4}, "latency_s": 0.875}} +{"key": "ad5c186c22c44b203a8d7726ee472642fd96a6b6469e07f66c9870dc4a26dcd4", "case": "audit-C18", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Your recent savings rate is about **50 % of your take‑home income**.\n\n- Over the last six months you saved a total of ₹363,340, which averages to roughly ₹60,560 per month. \n- With your reported monthly take‑home pay of ₹120,000, that works out to **≈ 50 %** saved each month. \n\n(Your most recent month (Oct 2026) shows a slightly higher rate of **≈ 52 %**, with ₹62,878 saved.)\n\nA 50 % savings rate is strong—well above the typical 20 %‑30 % recommendation—so you’re on a solid path toward your goal of saving more and funding a big purchase.\n\nNext: you might want to see which categories are eating up the most of your budget, or explore ways to trim recurring subscriptions.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3121, "completion": 290, "reasoning": 101}, "latency_s": 1.453}} +{"key": "e7e0706db645728c3bee5db438744d0212b4650f8e1634fb1c2b5b30f299b324", "case": "audit-C19", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_7a0a8943-5453-4984-a546-a3b734ecdc5d", "type": "function", "function": {"name": "run_sql", "arguments": "{\"sql\":\"SELECT SUM(tax_amount) AS total_tax FROM transactions WHERE date \\u003e= '2026-01-01' AND date \\u003c '2027-01-01';\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2095, "completion": 101, "reasoning": 42}, "latency_s": 0.984}} +{"key": "1fa71a1972dd97bf61f9885acec184c7d24ab6f9634f103a97029ac066ba7084", "case": "audit-C19", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "The total tax you’ve paid on invoices so far this year (2026) is **₹31,583.23**. \n\nNext: let me know if you’d like a breakdown by vendor or month.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2226, "completion": 47, "reasoning": null}, "latency_s": 0.844}} +{"key": "dc07e50b0c57e7231941e44cb4e2893ff721a00c7dbd0fcc6efaf1cfbc0cd61e", "case": "audit-C20", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_255167e6-dc5b-4d86-94fd-8e25168a7b1d", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2096, "completion": 58, "reasoning": 38}, "latency_s": 0.735}} +{"key": "9bcf6ee6ed92a42558e414f933bfb13b41f6ce9aba934da7188a4f98674e53a6", "case": "audit-C20", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "The **Shopping** category saw the biggest growth this year, increasing by about ₹2,740 from its May level (₹15,776) to October (₹18,514). Other categories either stayed flat (Housing) or fell, while Transport grew modestly (+≈₹1,900). \n\nNext: you could ask to see the top shopping merchants or explore ways to trim that spend.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3123, "completion": 343, "reasoning": 253}, "latency_s": 1.687}} +{"key": "4a4c1878e27ba4416e1e5df9ed649a8066f1ebcbb9fb1590ad94319507c4dff3", "case": "audit-C21", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_71de9ebf-cdbf-4e01-a1d5-bfa7c484aaa9", "type": "function", "function": {"name": "run_sql", "arguments": "{\"sql\":\"SELECT vendor_name, date, total_amount FROM transactions WHERE date \\u003e= '2026-01-01' AND date \\u003c '2027-01-01' ORDER BY total_amount DESC LIMIT 5;\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2095, "completion": 122, "reasoning": 56}, "latency_s": 1.031}} +{"key": "cd989e2353997fb7f01ccb32cba33616bc0200c03aae5505f97ae6dd205176db", "case": "audit-C21", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Here are the five biggest single purchases you’ve made so far this year, sorted by amount:\n\n| Vendor | Date | Amount (INR) |\n|--------|------|--------------|\n| Greenview Residency | 2026‑01‑01 | 22,000 |\n| Greenview Residency | 2026‑02‑03 | 22,000 |\n| Greenview Residency | 2026‑03‑03 | 22,000 |\n| Greenview Residency | 2026‑04‑05 | 22,000 |\n| Greenview Residency | 2026‑05‑03 | 22,000 |\n\nThese are the top‑5 transactions by total amount recorded in your data for 2026. \n\nNext: you could ask to see the total spend by category for the same period.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2378, "completion": 188, "reasoning": 15}, "latency_s": 0.906}} +{"key": "bcf66c57c3145c2c261da4bb0a6b8d618e563d914fd440964fa3e8c8fc3cdccb", "case": "audit-C22", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_1729ba98-a540-4f87-aea4-c7d4f5f3905b", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2097, "completion": 33, "reasoning": 13}, "latency_s": 0.828}} +{"key": "8f960eb8c1880b55c45fb62c2082b375cd2b04e7bdd0ac4091de354ab7b8387e", "case": "audit-C22", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Your restaurant (eating‑out) spending averages **≈ ₹ 42,600 / 6 months ≈ ₹ 7,100 per month**. \n\nWith a take‑home income of about **₹ 120,000 per month**, that’s roughly **6 % of your monthly income**. \n\nCompared with typical budgeting guidelines (20 % for “Dining & Entertainment”), you’re **well below** that benchmark. In fact, your restaurant spend has been **declining** over the past six months (down from ₹ 12,818 in May to ₹ 3,470 in October), while your overall budget left‑over has improved, showing you’re keeping eating‑out under control.\n\nSo, no – your eating‑out expenses are not high relative to your income; they’re comfortably within a prudent range. If you want to cut back further, you could aim for under 5 % (≈ ₹ 6,000 / month), but it’s already modest. \n\nNext: you could look at the **top categories** where you might save more (e.g., Shopping or Transport) if you’re aiming to boost savings.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3124, "completion": 272, "reasoning": 19}, "latency_s": 1.328}} +{"key": "2be023d58a236af742728958811106f2dfd18a6c8d87a98745ed4a7ddb9b2079", "case": "audit-C23", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_aa54d19e-f9ac-4450-8054-a8e5dbcfc2a8", "type": "function", "function": {"name": "income_tax_india", "arguments": "{\"gross_salary\":1200000}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2100, "completion": 40, "reasoning": 7}, "latency_s": 0.844}} +{"key": "8b547fef4f3549fcfc3dee8873b96269ea8fb840b68d298c7e8fb150947bb3ac", "case": "audit-C23", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "For a resident salaried individual under the **new tax regime** in FY 2026‑27, a gross annual salary of **₹12 lakhs** results in:\n\n| Item | Amount (₹) |\n|------|------------|\n| Gross salary | 1,200,000 |\n| Standard deduction (₹75,000) | – |\n| **Taxable income** | **1,125,000** |\n| Tax per the new‑regime slabs* | 52,500 |\n| Rebate under Section 87A (up to ₹5 lakhs taxable) | –52,500 |\n| **Total tax payable** | **0** |\n| Monthly tax (total ÷ 12) | **0** |\n| Effective tax rate | **0 %** |\n\n\\*The new‑regime slab up to ₹12 lakhs is 0 % for the first ₹2.5 lakhs, 5 % for the next ₹2.5 lakhs, 10 % for the next ₹5 lakhs, and 15 % for income above ₹10 lakhs. After applying the slabs, the tax comes to ₹52,500, which is fully offset by the Section 87A rebate (available for taxable income up to ₹5 lakhs). Hence the net tax liability is zero.\n\n**Note:** This is an estimate based on the standard deduction and Section 87A rebate for a resident individual with no other income, deductions, or exemptions. If you have additional income (e.g., interest, capital gains) or claim other deductions, the liability could change. \n\nNext: you might want to see a breakdown of your actual spending by category for the last six months to spot saving opportunities.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2311, "completion": 388, "reasoning": 14}, "latency_s": 1.422}} +{"key": "67e493d64e0589ec702b2834c622a7caf7331767cb451191ef7615b0ab7069f7", "case": "audit-C24", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_cb0a076a-8382-4bce-96b0-0cdafba646af", "type": "function", "function": {"name": "exchange_rate", "arguments": "{\"base\":\"EUR\",\"quote\":\"INR\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2092, "completion": 48, "reasoning": 13}, "latency_s": 0.516}} +{"key": "bb38b710404b3fdbe114e0ee699ac65c1461ef5b6e8191b897e2d1c9725e5619", "case": "audit-C24", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "250 EUR × 104 INR/EUR = **26,000 INR**【exchange_rate】", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2166, "completion": 60, "reasoning": 25}, "latency_s": 0.734}} +{"key": "a328d1c397be3c54a8724df080af03d372ff99345a6b4e2bc26c586192bae118", "case": "audit-C25", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "An emergency fund is a cash reserve set aside to cover unexpected expenses—like a medical bill, car repair, or a short‑term loss of income—without having to rely on credit cards or loans. Financial planners usually recommend keeping 3‑6 months of essential living costs in a liquid, easily accessible account (e.g., a savings account or a money‑market fund).\n\n**Do you have one?** \nLumen currently tracks your spending, recurring bills, and upcoming forecasts, but it doesn’t calculate or store a separate “savings‑account balance” or “emergency‑fund amount.” Because we don’t have a dedicated view of your cash reserves, I can’t tell from the data whether you’ve already set aside an emergency fund.\n\nIf you’d like to start tracking a specific emergency‑fund balance, you could create a custom “Savings” category or a separate account in your banking app and then let Lumen monitor deposits into that account. That way, future queries like “How much do I have in my emergency fund?” will have concrete data to work with. \n\n**Next step you might take:** \nAdd a regular “Emergency Fund” deposit transaction (or label existing savings deposits with a dedicated category) so Lumen can report on it later.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2099, "completion": 304, "reasoning": 37}, "latency_s": 1.422}} +{"key": "a0e202281c1779b19d916c44e66a6187681baa10a9c424b04d330cb9372757db", "case": "audit-C26", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_844519a2-698f-4cbd-a3fc-1ee7e310b6f5", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2095, "completion": 48, "reasoning": 28}, "latency_s": 0.75}} +{"key": "a97a1979509d12018727c25441236fe411269fe544f3af510b0594f689845cc2", "case": "audit-C26", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "**What changed this month vs. last month**\n\n| Month | Total spend | Change vs. previous month | Budget left |\n|-------|------------|---------------------------|------------|\n| **Oct 2026** | ₹ 57,122 | **+ 9.3 %** (up from ₹ 52,245 in Sep) | ₹ 12,878 left |\n| **Sep 2026** | ₹ 52,245 | – | ₹ 17,755 left |\n\n**Key differences**\n\n* **Spending rose** by about ₹ 4,877 (9.3 %). \n* The biggest driver was **Shopping**, which jumped from ₹ 9,143 in Aug to **₹ 18,514** in Oct – a big increase in discretionary purchases. \n* **Utilities** and **Groceries** stayed roughly flat, while **Restaurant** spending fell from ₹ 8,657 to ₹ 3,470. \n* Despite the rise, you still ended the month **₹ 12,878** under your ₹ 70,000 budget, leaving a healthy cushion.\n\n**What to watch**\n\n* The spike in Shopping suggests a one‑off purchase or a new habit; reviewing those items could reveal if it’s something you can trim. \n* Restaurant spending dropped, which helped offset the higher Shopping outlay.\n\n*Next: “Show the top 5 shopping purchases for October 2026.”", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3122, "completion": 306, "reasoning": null}, "latency_s": 1.468}} +{"key": "b0726d344581abba46b56b84f8aa98a8160836370d28a7ecf2e31e218b155441", "case": "audit-C27", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_61ef300d-d15c-465a-b532-39965433837b", "type": "function", "function": {"name": "lookup_vendors", "arguments": "{\"hint\":\"phone\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2097, "completion": 40, "reasoning": 16}, "latency_s": 0.687}} +{"key": "51799d83468fbd2f219740ad41015b3668f8922eba4fdc415c72b667922904e4", "case": "audit-C27", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_c335f06c-7705-42db-a7ec-9456177b273c", "type": "function", "function": {"name": "get_recurring", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2129, "completion": 55, "reasoning": 35}, "latency_s": 0.75}} +{"key": "78ccf65b640bf88933b0589c14b35373284cf2c30ddada5ddc90abd6a8d40c0b", "case": "audit-C27", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_2e884472-eba5-4ae5-a8ba-7a7e5645fc76", "type": "function", "function": {"name": "run_sql", "arguments": "{\"sql\":\"SELECT date, total_amount FROM transactions WHERE vendor_name = 'SkyTel Mobile' ORDER BY date DESC LIMIT 5\"}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2760, "completion": 65, "reasoning": 24}, "latency_s": 1.156}} +{"key": "5fa400cdb9d18883050f53c0b0703f15a6313441efa30bcb633e4a5438b4ab33", "case": "audit-C27", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "You’ve been paying **₹ 649** per month for the last three bills (Oct 2026 – Aug 2026). \nBefore that, the charge was **₹ 499** per month for the two earlier months (Jul 2026 – Jun 2026). \n\nSo the phone bill rose by **₹ 150** (about **30 %**) starting in August 2026.\n\nIf you’d like to see the full 6‑month history, compare it with other utilities, or explore cheaper plans, just let me know. \n\nNext: “Show my phone‑bill trend over the past year”.", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2951, "completion": 157, "reasoning": 16}, "latency_s": 1.516}} +{"key": "e87b3fbefd6ad1122f6acfeccc3c1165b07f1f60402bd3668d4579d5192a0c77", "case": "audit-C28", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_66b659df-fbe1-4649-96e0-f543877da294", "type": "function", "function": {"name": "get_recurring", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2095, "completion": 27, "reasoning": 7}, "latency_s": 0.75}} +{"key": "6849a1b09616bb9fe487aa6bddd71436e44f5f82664fd9e56b15f3a6301dac91", "case": "audit-C28", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Your next upcoming bill is for **AquaWorks Water Board** and is due on **24 Oct 2026**.\n\nHere’s a quick view of the other recurring charges and when they’ll be due next:\n\n| Vendor | Category | Next due date | Typical amount |\n|--------|----------|---------------|----------------|\n| AquaWorks Water Board | Utilities | 24 Oct 2026 | ₹ 573.14 |\n| Greenview Residency | Housing | 02 Nov 2026 | ₹ 22,000 |\n| FitZone Gym | Healthcare | 03 Nov 2026 | ₹ 1,500 |\n| StreamFlix | Entertainment | 03 Nov 2026 | ₹ 765.82 |\n| City Power Ltd | Utilities | 07 Nov 2026 | ₹ 2,443.89 |\n| SkyTel Mobile | Utilities | 08 Nov 2026 | ₹ 499 |\n| NetLink Broadband | Utilities | 10 Nov 2026 | ₹ 1,178.82 |\n\nNext: “Show me the details of my water bill for this month.”", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2726, "completion": 307, "reasoning": 61}, "latency_s": 1.422}} +{"key": "f38e6ec6a89a6a9dbe3f816bcfbfd95533148d8902fd0c73aa9a82c39ec04e4a", "case": "audit-C29", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "", "tool_calls": [{"id": "fc_2acfb97a-b4c3-407f-8f95-b6533b0d862d", "type": "function", "function": {"name": "get_overview", "arguments": "{}"}}], "finish_reason": "tool_calls", "usage": {"prompt": 2101, "completion": 33, "reasoning": 13}, "latency_s": 0.922}} +{"key": "a8def8c99d6c2a97635ff164d0a7299583fc001d832ccc8e5d24272e322a3f84", "case": "audit-C29", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "Here’s a quick, data‑driven “cut‑list” that will free about ₹5 000 each month:\n\n| Where to trim | Typical monthly spend (from your last 6 months) | How much you could cut | Why it makes sense |\n|---------------|-----------------------------------------------|------------------------|--------------------|\n| **Shopping** (clothes, gadgets, online “flash” sales) | ≈ ₹15 000 – ₹18 500 | ₹2 000‑₹2 500 | Your shopping spend is the biggest non‑essential bucket and has been trending down – a modest further reduction is realistic. |\n| **Streaming / Entertainment** (StreamFlix) | ₹766 | ₹500‑₹600 | You’re already paying for a single streaming service; switching to a cheaper plan or pausing for a month saves ~₹600. |\n| **Gym / Fitness** (FitZone Gym) | ₹1 500 | ₹800‑₹1 000 | Consider a lower‑cost gym, a home‑workout routine, or a pay‑as‑you‑go membership. |\n| **Restaurant / Take‑away** | ≈ ₹5 000‑₹8 500 | ₹1 000‑₹1 200 | Cutting one or two meals out per week (or opting for a cheaper lunch spot) can shave ~₹1 200. |\n| **Utilities (minor)** (City Power, AquaWorks) | ≈ ₹3 200‑₹3 300 total | ₹200‑₹300 | Small habit tweaks (turning off lights, using fans instead of AC) can trim a few hundred rupees. |\n\n**Total potential cut:** roughly **₹5 000 – ₹5 600** per month.\n\n### How to act\n\n1. **Set a shopping cap** – ₹12 000 per month. Track each purchase in your budgeting app; pause any “impulse” buys above ₹2 000.\n2. **Switch StreamFlix** – downgrade to the basic plan (≈₹500) or pause for a month and use free content alternatives.\n3. **Gym** – ask FitZone for a “off‑peak” or “monthly‑only” plan; many gyms offer ~₹800‑₹1 000 options.\n4. **Meal plan** – plan lunches at home for two weekdays; aim for a ₹1 200 reduction.\n5. **Utility habits** – use LED bulbs, unplug chargers, and set AC temperature a degree higher; aim for a ₹250 saving.\n\nImplementing any three of these changes will already meet your ₹5 000 target, and you’ll still have room to adjust further if you want to boost savings.\n\n**Next:** “Show me my last three months of shopping transactions so I can spot the biggest spenders.”", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 3128, "completion": 651, "reasoning": 41}, "latency_s": 2.547}} +{"key": "c3108a3bb0b0bbb1baee722ff2a725f414f02e34eb3cbf451f58895fce704d41", "case": "audit-C30", "entry": {"provider": "groq", "model": "openai/gpt-oss-120b", "text": "I’m focused on helping you with personal‑finance questions, so I can’t create a poem for you. If you have any questions about budgeting, spending, saving, or anything else related to your money, just let me know!", "tool_calls": null, "finish_reason": "stop", "usage": {"prompt": 2095, "completion": 70, "reasoning": 14}, "latency_s": 1.016}} diff --git a/backend/evals/cassettes/rerank/ms-marco-MiniLM-L-12-v2.jsonl b/backend/evals/cassettes/rerank/ms-marco-MiniLM-L-12-v2.jsonl index a341446..f384e63 100644 --- a/backend/evals/cassettes/rerank/ms-marco-MiniLM-L-12-v2.jsonl +++ b/backend/evals/cassettes/rerank/ms-marco-MiniLM-L-12-v2.jsonl @@ -4938,3 +4938,18 @@ {"key": "dc48215174979c17705731adefe7aba30d61e4b96fa40fcfba9f655baaef8f26", "s": 0.004516} {"key": "4982799ccfefe3df881526152e97f4a05ac55bbdfcedc8e195b1eb17d8507afc", "s": 0.00144} {"key": "7c439818953605f6623560710d3a9659a4a6a4d724e646231019e1246078b2a4", "s": 2.9e-05} +{"key": "c04eabdb11df47ecf01948d4517d33678379c64ff9dcc9793071b19f97d7eb13", "s": 0.984689} +{"key": "2f33f77ec40d52e5a7ba5cf5f5520d1ee1491f0eeb7325adda3aec4b54321009", "s": 0.988893} +{"key": "216126f9c7bdb17b176efee4ed090638be0fe243ef9e2ce3dd1c8b0ddd74c53a", "s": 0.037337} +{"key": "0c000e2bc475a6fb286703271d2920bfb1ce2ea34536d345970f78521e98f297", "s": 0.284361} +{"key": "d6d39d9e640e93938af4a0d11df2cdb69bf5ca2ed4f42b12dc6d424fed2f5775", "s": 0.044574} +{"key": "36712a0352913d95dab7d0696305eb8c65c9a368b62b6d903031ee9f02df9246", "s": 0.014148} +{"key": "a0bedd28cb33c1d6a03043d0d91e038baff02183ecced5b5ba6c1944cb1d6830", "s": 0.019436} +{"key": "805c9c3304e643e98b7a2ba69f4d84aa87a7eb82e90e8abe49ab48bd0cc577a3", "s": 0.002448} +{"key": "46d4e67996689498e7f067c485c1bd4a969f41ddb15f1167cd0bbac3562f1ab9", "s": 0.237339} +{"key": "cdae2a4cf1e87729b6369a43c8d39b27df125132998b8a9ea25180f314359507", "s": 0.00139} +{"key": "677502e83334309d41ad2324b49cb515bec8ee83225111f431adec50f50c391d", "s": 0.001963} +{"key": "287d2633e3449990a54c1d5d4239e6487769ec786e0087208363daf1ebd43d68", "s": 0.031867} +{"key": "d843b3aaa7590617f84bdbdfb6dcefa90e98f6a9ad6e0f9840781365ae0d672c", "s": 0.044095} +{"key": "4087d6596bf79acda18546fc2da2fc442420e91fa9ffc2f71d51568d4d8b0537", "s": 2.7e-05} +{"key": "274f25fd15be4348881bd49ea2935679df24a2979d4706be411affb9c465f4b9", "s": 2.9e-05} diff --git a/backend/evals/run.py b/backend/evals/run.py index dca0017..887f909 100644 --- a/backend/evals/run.py +++ b/backend/evals/run.py @@ -164,4 +164,5 @@ def _print_suite(name: str, result: dict) -> None: if __name__ == "__main__": + sys.stdout.reconfigure(errors="replace") # a Windows cp1252 console can't print every metric (e.g. "【") sys.exit(main()) diff --git a/docs/direction/STORY.md b/docs/direction/STORY.md index 18e9880..adf7bef 100644 --- a/docs/direction/STORY.md +++ b/docs/direction/STORY.md @@ -284,6 +284,16 @@ with the numbers and the files that prove them. Newest last. Raw numbers live in builds each request's model chain from that user's keys, and a hard error (never a silent fallback) when a key is rejected. Users with no key get a small daily allowance on the platform key. Settings page, plus prompts in chat and the inbox card. A Tavily key covers web search the same way. -- **R:** Backend suite 857 -> 898 passed. Zero-leak tests (log capture and responses) in `test_api_keys.py` and +- **R:** Backend suite 857 -> 901 passed. Zero-leak tests (log capture and responses) in `test_api_keys.py` and `test_byok_client.py` show no key, or part of one, reaches a log line or response. Story point: failing loudly on a bad key beats quietly answering with a worse model. + +## 25. First recorded run of the Ask Lumen eval (30 audit questions, Groq gpt-oss-120b) +- **S:** The 30-question audit was graded by hand; a prompt or tool change could quietly undo it. +- **T:** Record the audit once as a replayable eval so every later change is measured against it offline. +- **A:** Recorded all 30 questions against the real model (63 calls, rate-limit waits retried), then replayed from + the cassette with no key. Fixed the runner crashing on a Windows console that can't print "【". +- **R:** Baseline: **21/30 correct, 5 partial, 28/30 honest**; p50 2.4 s and p95 4.0 s per model call; + ~5.5K tokens per question. Both "dishonest" answers are the model's native `【…】` citation markers (one of + them cited the right document with the right date), so a citation-format fix should move honesty to 30/30. + The gates (30 honest, 24 correct) fail for now, which is the point: the next fixes have a number to beat.