Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
22 changes: 22 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: CI

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm run validate
- run: npm test
30 changes: 30 additions & 0 deletions data/dev.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{"id":"d-001","split":"dev","label":"scam","category":"gift_card","channel":"voice","text":"The bank says I have to buy five $200 gift cards today or my account is frozen.","context":{"actionType":"purchase","amountCents":100000,"payee":"gift cards"},"difficulty":"easy","author":"team-dev","notes":"classic gift card + bank impersonation + urgency"}
{"id":"d-002","split":"dev","label":"scam","category":"government_impersonation","channel":"sms","text":"Hello, this is Mark from the Social Security office. Your benefits are suspended. To reactivate, purchase Google Play cards worth $500 and read me the codes.","difficulty":"easy","author":"team-dev","notes":"agency + prepaid cards"}
{"id":"d-003","split":"dev","label":"scam","category":"wire_crypto","channel":"call","text":"Your account has been compromised. Move all your savings to this secure Bitcoin wallet right now before the hackers drain it.","difficulty":"easy","author":"team-dev","notes":"safe-account crypto transfer"}
{"id":"d-004","split":"dev","label":"scam","category":"verification_code","channel":"call","text":"This is the fraud department. We detected a suspicious charge of $890. To cancel it, I need the six digit code we just sent to your phone.","difficulty":"easy","author":"team-dev","notes":"asks for OTP"}
{"id":"d-005","split":"dev","label":"scam","category":"tech_support_remote","channel":"call","text":"A pop-up says my computer has a virus. The man said to install AnyDesk so he can remove it and I should pay $299 by gift card.","difficulty":"easy","author":"team-dev","notes":"remote access + gift card"}
{"id":"d-006","split":"dev","label":"scam","category":"family_emergency","channel":"voice","text":"Grandma, it's me. I'm in jail after an accident and need $2,000 for bail. Please don't tell Mom and Dad.","context":{"actionType":"transfer","amountCents":200000,"payee":"bail"},"difficulty":"easy","author":"team-dev","notes":"grandparent scam + secrecy"}
{"id":"d-007","split":"dev","label":"scam","category":"prize_lottery","channel":"sms","text":"Congratulations! You won the national sweepstakes jackpot. To claim your prize, pay the $150 processing fee today.","difficulty":"easy","author":"team-dev","notes":"prize with a fee"}
{"id":"d-008","split":"dev","label":"scam","category":"delivery_fee","channel":"sms","text":"Your parcel could not be delivered. Pay a $2.99 redelivery fee at the link to avoid return.","difficulty":"tricky","author":"team-dev","notes":"small fee, few keywords"}
{"id":"d-009","split":"dev","label":"scam","category":"romance_investment","channel":"email","text":"I've made so much on this crypto platform, my love. Deposit just $1,000 and I'll show you how to double it by Friday. Keep this between us.","difficulty":"tricky","author":"team-dev","notes":"romance + crypto + secrecy"}
{"id":"d-010","split":"dev","label":"scam","category":"government_impersonation","channel":"call","text":"This is the IRS. You owe $3,400 in back taxes and a warrant will be issued unless you pay immediately with a prepaid card.","difficulty":"easy","author":"team-dev","notes":"agency + threat + prepaid card"}
{"id":"d-011","split":"dev","label":"scam","category":"family_emergency","channel":"sms","text":"Hi Grandma, I'm travelling and my card got blocked. Could you wire me $400 to this account? I'll pay you back, love you.","context":{"actionType":"transfer","amountCents":40000,"payee":"unknown account"},"difficulty":"tricky","author":"team-dev","notes":"polite impersonation, no scam vocabulary"}
{"id":"d-012","split":"dev","label":"scam","category":"family_emergency","channel":"call","text":"I'm a lawyer representing your grandson. He needs $5,000 for bail today. He is embarrassed and asked that we not call his parents.","context":{"actionType":"transfer","amountCents":500000,"payee":"lawyer"},"difficulty":"tricky","author":"team-dev","notes":"lawyer intermediary"}
{"id":"d-013","split":"dev","label":"scam","category":"tech_support_remote","channel":"call","text":"Microsoft support here. We see errors on your PC. Please give me remote access so I can fix it.","difficulty":"easy","author":"team-dev","notes":"remote access request"}
{"id":"d-014","split":"dev","label":"scam","category":"bank_impersonation","channel":"email","text":"Your account is locked. Verify your identity within 24 hours by sending a photo of your debit card and PIN.","difficulty":"tricky","author":"team-dev","notes":"credential phishing"}
{"id":"d-015","split":"dev","label":"scam","category":"wire_crypto","channel":"voice","text":"The investment manager says to wire $8,000 to the new account number today or I lose the guaranteed returns.","context":{"actionType":"transfer","amountCents":800000,"payee":"investment manager"},"difficulty":"easy","author":"team-dev","notes":"guaranteed returns + wire"}
{"id":"d-016","split":"dev","label":"benign","category":"pharmacy","channel":"sms","text":"Your prescription is ready for pickup at Greenleaf Pharmacy.","difficulty":"easy","author":"team-dev","notes":"refill notice"}
{"id":"d-017","split":"dev","label":"benign","category":"bank_alert_genuine","channel":"sms","text":"Your bank noticed a suspicious charge on your card. If this wasn't you, call the number on the back of your card. We will never ask for your PIN or a code.","difficulty":"tricky","author":"team-dev","notes":"genuine fraud alert with scary words"}
{"id":"d-018","split":"dev","label":"benign","category":"utility_bill","channel":"voice","text":"Pay City Power & Light $86.40 for the October bill.","context":{"actionType":"payment","amountCents":8640,"payee":"City Power & Light","trusted":true},"difficulty":"easy","author":"team-dev","notes":"routine bill to a trusted payee"}
{"id":"d-019","split":"dev","label":"benign","category":"delivery_genuine","channel":"sms","text":"Your package will arrive today between 2 and 4 PM.","difficulty":"easy","author":"team-dev","notes":"delivery window"}
{"id":"d-020","split":"dev","label":"benign","category":"family_chat","channel":"voice","text":"Can you send me the soup recipe you made on Sunday?","difficulty":"easy","author":"team-dev","notes":"family chat"}
{"id":"d-021","split":"dev","label":"benign","category":"subscription_receipt","channel":"email","text":"Thanks for your payment of $9.99 to Daily News. Your next renewal is on November 3.","difficulty":"easy","author":"team-dev","notes":"receipt"}
{"id":"d-022","split":"dev","label":"benign","category":"appointment_reminder","channel":"sms","text":"Reminder: your appointment with Dr. Lee is Thursday at 10 AM.","difficulty":"easy","author":"team-dev","notes":"appointment"}
{"id":"d-023","split":"dev","label":"benign","category":"bank_alert_genuine","channel":"sms","text":"Alert: a $450 payment to Acme Hardware was approved. If you don't recognise it, contact us through the app or the number on your statement.","difficulty":"tricky","author":"team-dev","notes":"genuine alert with an amount"}
{"id":"d-024","split":"dev","label":"benign","category":"family_chat","channel":"voice","text":"Mom, I'm at the shop. Do you want me to buy some gift wrap or just ribbon for Aunt Rita's present?","difficulty":"tricky","author":"team-dev","notes":"gift wrap, not gift cards"}
{"id":"d-025","split":"dev","label":"benign","category":"bank_alert_genuine","channel":"email","text":"Reminder from your credit union: we will never ask you to pay with gift cards. Stay alert for scams.","difficulty":"tricky","author":"team-dev","notes":"warning about gift cards"}
{"id":"d-026","split":"dev","label":"benign","category":"pharmacy","channel":"voice","text":"Pay Greenleaf Pharmacy $24 for my refill.","context":{"actionType":"payment","amountCents":2400,"payee":"Greenleaf Pharmacy","trusted":true},"difficulty":"easy","author":"team-dev","notes":"trusted pharmacy payment"}
{"id":"d-027","split":"dev","label":"benign","category":"delivery_genuine","channel":"email","text":"Your order has shipped and arrives Friday. You do not need to do anything.","difficulty":"tricky","author":"team-dev","notes":"reassuring delivery notice"}
{"id":"d-028","split":"dev","label":"benign","category":"family_chat","channel":"voice","text":"Dad says he'll wire the money for the deck repair after the contractor sends the invoice, no rush.","difficulty":"tricky","author":"team-dev","notes":"innocent \"wire the money\""}
{"id":"d-029","split":"dev","label":"benign","category":"utility_bill","channel":"email","text":"Your water bill of $42.10 is due on the 20th. You can pay online or by check.","difficulty":"easy","author":"team-dev","notes":"bill reminder"}
{"id":"d-030","split":"dev","label":"benign","category":"appointment_reminder","channel":"call","text":"This is the dental office calling to confirm your cleaning today at 3 PM. Please call us back if you need to reschedule.","difficulty":"tricky","author":"team-dev","notes":"unsolicited call with \"today\""}
30 changes: 30 additions & 0 deletions data/test.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{"id":"t-001","split":"test","label":"scam","category":"gift_card","channel":"call","text":"Six Walmart gift cards at $100 each. The officer said my son will be released as soon as I read him the numbers.","context":{"actionType":"purchase","amountCents":60000,"payee":"gift cards"},"difficulty":"easy","author":"team-test","notes":"gift cards + bail pressure"}
{"id":"t-002","split":"test","label":"scam","category":"bank_impersonation","channel":"call","text":"Hello ma'am, I'm calling from your bank's security team. Someone is trying to take $2,300 from your account. Stay on the line and do not tell any of the staff at your branch.","difficulty":"easy","author":"team-test","notes":"impersonation + secrecy"}
{"id":"t-003","split":"test","label":"scam","category":"verification_code","channel":"call","text":"We texted you a one time passcode. Please read it back to me so I can stop the transfer.","difficulty":"easy","author":"team-test","notes":"asks to read OTP"}
{"id":"t-004","split":"test","label":"scam","category":"tech_support_remote","channel":"call","text":"Your router has been hacked. Download TeamViewer so our technician can secure your network today.","difficulty":"easy","author":"team-test","notes":"remote access"}
{"id":"t-005","split":"test","label":"scam","category":"government_impersonation","channel":"call","text":"Medicare is issuing new cards. To avoid losing your coverage, confirm your number and pay the $25 activation fee now.","difficulty":"tricky","author":"team-test","notes":"agency + fee"}
{"id":"t-006","split":"test","label":"scam","category":"prize_lottery","channel":"email","text":"You've been selected for a $10,000 grocery giveaway. Pay $60 in taxes with an Apple card to receive it.","difficulty":"tricky","author":"team-test","notes":"prize + prepaid card taxes"}
{"id":"t-007","split":"test","label":"scam","category":"romance_investment","channel":"email","text":"Darling, the gold shipment is stuck in customs. I just need $3,500 sent to my agent via Western Union and then we can finally meet.","context":{"actionType":"transfer","amountCents":350000,"payee":"agent"},"difficulty":"tricky","author":"team-test","notes":"romance + Western Union"}
{"id":"t-008","split":"test","label":"scam","category":"wire_crypto","channel":"call","text":"Take cash out of your account and put it in the bitcoin machine at the gas station. The code on screen is how we protect your money.","difficulty":"easy","author":"team-test","notes":"crypto ATM"}
{"id":"t-009","split":"test","label":"scam","category":"delivery_fee","channel":"sms","text":"We tried to deliver your parcel but the address is incomplete. Update it and pay the small fee of $1.95 to schedule redelivery.","difficulty":"tricky","author":"team-test","notes":"delivery fee"}
{"id":"t-010","split":"test","label":"scam","category":"family_emergency","channel":"voice","text":"Gran, I'm so sorry to call late. I had a car accident and I'm at the hospital. The doctor needs a deposit of $900 right away. Please don't worry Mom.","context":{"actionType":"transfer","amountCents":90000,"payee":"hospital"},"difficulty":"tricky","author":"team-test","notes":"accident + secrecy"}
{"id":"t-011","split":"test","label":"scam","category":"romance_investment","channel":"email","text":"Hello, this is Priya's landlord. She asked me to collect the deposit for the apartment by tomorrow. Could you send $1,200 to me directly? I can give you my account number.","context":{"actionType":"transfer","amountCents":120000,"payee":"landlord"},"difficulty":"tricky","author":"team-test","notes":"third-party payment request, no scam vocabulary"}
{"id":"t-012","split":"test","label":"scam","category":"delivery_fee","channel":"call","text":"Your electricity will be disconnected within the hour due to an unpaid balance. Pay now with a prepaid card to keep your service.","difficulty":"easy","author":"team-test","notes":"utility shut-off threat"}
{"id":"t-013","split":"test","label":"scam","category":"gift_card","channel":"email","text":"I'm your boss Alan. I'm in a meeting and need you to quietly pick up some iTunes cards for a client, I'll reimburse you. Send me the card numbers when you have them.","difficulty":"tricky","author":"team-test","notes":"boss impersonation + secrecy + cards"}
{"id":"t-014","split":"test","label":"scam","category":"government_impersonation","channel":"call","text":"You missed jury duty and the sheriff has issued a warrant. You can settle the fine today by phone.","difficulty":"tricky","author":"team-test","notes":"warrant + fine"}
{"id":"t-015","split":"test","label":"scam","category":"prize_lottery","channel":"sms","text":"Our system refunded you $400 too much. Please send $350 back by wire and keep the rest for your trouble.","context":{"actionType":"transfer","amountCents":35000,"payee":"refund desk"},"difficulty":"tricky","author":"team-test","notes":"refund overpayment"}
{"id":"t-016","split":"test","label":"benign","category":"bank_alert_genuine","channel":"sms","text":"Your card ending 4821 was used at a gas station for $62.14. Not you? Call the number printed on your card.","difficulty":"tricky","author":"team-test","notes":"genuine card alert"}
{"id":"t-017","split":"test","label":"benign","category":"pharmacy","channel":"call","text":"Hi, it's Greenleaf Pharmacy. Your blood pressure refill is ready. Pickup is open until 6 PM today.","difficulty":"tricky","author":"team-test","notes":"unsolicited pharmacy call with \"today\""}
{"id":"t-018","split":"test","label":"benign","category":"family_chat","channel":"voice","text":"Can you pay Mr. Evans next door $20 for mowing the lawn when you see him? I'll transfer it to you tonight.","context":{"actionType":"payment","amountCents":2000,"payee":"Mr. Evans"},"difficulty":"tricky","author":"team-test","notes":"small neighbour payment"}
{"id":"t-019","split":"test","label":"benign","category":"utility_bill","channel":"email","text":"Your gas bill statement for October is now available in your online account.","difficulty":"easy","author":"team-test","notes":"statement ready"}
{"id":"t-020","split":"test","label":"benign","category":"appointment_reminder","channel":"call","text":"This is your clinic. Your lab results are ready. Please call today between 9 and 5 to schedule a visit.","difficulty":"tricky","author":"team-test","notes":"clinic call with \"today\""}
{"id":"t-021","split":"test","label":"benign","category":"subscription_receipt","channel":"email","text":"Receipt: $12.99 monthly plan renewed. To cancel, open the app and go to account settings.","difficulty":"easy","author":"team-test","notes":"receipt"}
{"id":"t-022","split":"test","label":"benign","category":"delivery_genuine","channel":"sms","text":"Out for delivery: your order arrives today. Signature not required.","difficulty":"easy","author":"team-test","notes":"delivery"}
{"id":"t-023","split":"test","label":"benign","category":"bank_alert_genuine","channel":"email","text":"We will never call you to ask for your password or a security code. If someone does, hang up and call us.","difficulty":"tricky","author":"team-test","notes":"bank warning about codes"}
{"id":"t-024","split":"test","label":"benign","category":"family_chat","channel":"voice","text":"Bought a $50 gift card for Aunt Rita's birthday. Do you think she'd like the bookstore one?","difficulty":"tricky","author":"team-test","notes":"innocent gift card talk"}
{"id":"t-025","split":"test","label":"benign","category":"family_chat","channel":"voice","text":"Your brother called, he wants to know if Sunday lunch is still on.","difficulty":"easy","author":"team-test","notes":"family chat"}
{"id":"t-026","split":"test","label":"benign","category":"pharmacy","channel":"voice","text":"Pay Greenleaf Pharmacy $31 for the vitamins.","context":{"actionType":"payment","amountCents":3100,"payee":"Greenleaf Pharmacy","trusted":true},"difficulty":"easy","author":"team-test","notes":"trusted pharmacy payment"}
{"id":"t-027","split":"test","label":"benign","category":"delivery_genuine","channel":"sms","text":"Package held at the front desk. Pick it up with ID before Friday.","difficulty":"tricky","author":"team-test","notes":"held package, genuine"}
{"id":"t-028","split":"test","label":"benign","category":"appointment_reminder","channel":"email","text":"Your car inspection is due today. Book a slot online or visit any station.","difficulty":"tricky","author":"team-test","notes":"urgency word, genuine"}
{"id":"t-029","split":"test","label":"benign","category":"bank_alert_genuine","channel":"sms","text":"Your transfer of $200 to Daniel Reyes was completed. If you did not make this transfer, call our fraud line on the back of your card.","difficulty":"tricky","author":"team-test","notes":"genuine transfer confirmation"}
{"id":"t-030","split":"test","label":"benign","category":"family_chat","channel":"voice","text":"Grandpa, the plumber said the fix would be $240. I'll pay him myself, don't worry about it.","difficulty":"tricky","author":"team-test","notes":"reassuring family message with an amount"}
Loading
Loading