跳到正文
DEV Community· Ghanshyam Jha·· 4 小時前AI 評分42

Aalsi:讓本機模型從羣組聊天中找出截止日期

Aalsi: let a local model dig the deadlines out of your group chats

AI 導讀

Aalsi 是一款在本機運行的開源截止日期整理工具,使用 Ollama 上的 Gemma 3 從 WhatsApp 匯出聊天記錄中擷取作業等期限,並追蹤延期和更新。它提供每日摘要、日曆檔案及待確認項目,聊天資料保留在用戶電腦上。

正文

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

What I Built

Every college WhatsApp group has the same problem: one message that matters ("Assignment 2 due Tuesday, 5 PM sharp") buried under three hundred memes and "ok sir"s. Miss it and you find out when someone asks why you didn't submit.

Aalsi (Hindi for "lazy") is a deadline catcher for that. You export the group chat from WhatsApp (More → Export chat → Without media), drop the .txt file in, and it gives you:

  • A morning digest: two plain lines ("0 due today, 1 tomorrow, 2 overdue") plus Today / Tomorrow / This Week lists.
  • A "you may have missed" list for deadlines that already passed.
  • A calendar file (.ics) you can import into any calendar app.
  • A review queue for anything it isn't sure about, with Confirm and Dismiss buttons.

Every item carries its evidence: the original messages, who sent them and when. When a professor postpones a quiz or moves an assignment's due date, Aalsi updates the original item and shows the history, instead of creating a second one.

The people who get to be lazier are students juggling four courses and six groups, who currently scroll back through chats looking for "what was the date again?"

Aalsi morning digest on a light purple page: zero deadlines due today, one tomorrow (a Mathematics Quiz tagged Postponed at 10:00 AM), two overdue items, and Operating Systems Assignment 2 due this week at 5:00 PM

Demo

Aalsi runs on your own machine by design, so there is no hosted demo. The screenshots in this post show it running on synthetic chats: a fictional college group with made-up professors. No real group's messages appear anywhere in this post.

Code

Aalsi (आलसी) — Local-First Deadline Catcher for College Students

"Aalsi did the reading. You do the doing."

Go Test License: MIT Zero Cloud APIs

College WhatsApp groups bury the one vital message ("assignment due Friday", "fee last date 28th", "lab shifted to 3 PM") under hundreds of memes, jokes, and "ok sir".

Aalsi is a single-binary, privacy-first tool: you drop in an exported chat text file (.txt), and Aalsi extracts deadlines using open-weight Gemma running locally on Ollama, resolves dates deterministically in Go, tracks living deadline state across reminders and updates, and delivers:

  1. 🌅 A Morning Digest: A two-line daily summary plus Today / Tomorrow / This Week cards.
  2. 📅 A Calendar File (.ics): Standards-compliant RFC 5545 calendar with 1-day & 1-hour alarms and original message evidence.
  3. ⚠️ A "You May Have Missed" List: Catches overdue items before they slip away.
  4. 🛌 Lazy Mode (aalsi…

The README has a quickstart, including how to export a WhatsApp chat.

How I Built It

  • Backend: Go, with a small local web page for the interface. Everything runs on your own computer, and the only service it talks to is Ollama on localhost.
  • Parsing: a plain-Go parser reads both the Android and iOS WhatsApp export formats, including multi-line messages.
  • The model: Aalsi is wired to use Gemma 3 through Ollama (12B by default, 4B for smaller laptops) to read the chat. The size is a dropdown in Settings. A note on the screenshots: I took them in the rule-based mode, so each one shows "Extracted by: rule mode". I'd rather say that plainly than let you assume a model produced them.
  • Dates are resolved by code, not by a model. "kal subah 10 baje tak" (Hinglish for "by 10 tomorrow morning") is turned into a real date and time by ordinary code, using the day the message was sent. The model reads, the code decides.
  • State tracking: a later message that postpones, extends, or repeats a deadline is linked to the original item, so you see one deadline with a history, not several.
  • A rule-based fallback that works with no model at all, using plain pattern rules. The screen always shows which mode produced the results ("Extracted by: …") so you never have to wonder.
  • Local by default: everything is stored on your machine, and a "Purge local data" button deletes it.

Expanded evidence panels: the Mathematics Quiz shows the original message from Prof Verma and the postponement notice, and Operating Systems Assignment 2 shows the release message, each with sender and timestamp

Here is the Hinglish part working. The professor wrote "Submit kal subah 10 baje tak on portal", and Aalsi worked out which morning "kal" meant from the date on the message itself, so the DBMS assignment landed in the overdue list:

The You May Have Missed list showing Operating Systems Assignment 1 and DBMS Assignment 1 with their original messages, including a Hinglish message saying submit kal subah 10 baje tak

The item that wasn't real

Aalsi sends anything it isn't confident about to a review queue instead of silently putting it in your calendar. In my demo run that mattered. It created an item called just "Exam", and when I opened the evidence, the only messages behind it were the Semester Exam Fee notices, the same messages as the real fee item right below it. It had read "Semester Exam Fee" and invented a phantom exam. Because it had no subject and only an approximate date, it landed in the review queue, waiting for me to confirm or dismiss it, instead of going into my calendar.

I haven't fixed this yet. It came from the rule-based mode, which is exactly why the review queue exists, and I'd expect the model-based path to handle it differently, but I haven't tested that.

Review queue showing two items, Exam and Semester Exam Fee, both citing the same fee notice messages, with Confirm and Dismiss buttons under each

Why Does Open Innovation Matter?

A group chat is about the most private text most students have: names, grades, complaints about professors, who failed what. I didn't want to build something that uploads that to a server I don't control.

  1. The chats never leave the laptop. With an open-weight model running locally, "your private group chats stay on your machine" is true because of where the code runs, not because a company promises it.
  2. It costs nothing per message. A busy group produces thousands of messages a week. Reading them locally costs electricity, not API fees, so a student can run it every night and never think about a bill.
  3. It works without internet once the model is downloaded, which matters on a hostel connection.
  4. I can swap the model. The size is a dropdown, and nothing else in the app depends on one particular model.

The Lazy Payoff

I have only run Aalsi on synthetic chats so far, so I can't give you a "saved me X hours" number, and I won't make one up. What I can show is the difference in effort. Finding out that the Mathematics Quiz moved used to mean scrolling back through the chat for the right message. In Aalsi it is one card: the new date, a "Postponed" tag, and the professor's original messages one click away.

The next step is a real group, with permission and names removed, to find out what Aalsi catches and what it misses on messier, real-world chat.

來源:DEV Community · dev.to