Kindly Later:為延後回覆的電郵建立本機佇列
Kindly Later: a local reply queue for the emails I keep postponing
Kindly Later 使用本機執行的開放權重模型,將匯出的 .eml 電郵整理成單一檢視佇列,標記為「回覆」、「閲讀」或「忽略」,並為需要回覆的電郵草擬短訊息。程式會附上原文引句供用戶核對,不會寄出電郵;模型逾時或驗證失敗時,電郵會列入「手動檢視」。作者尚未成功完成實際模型測試,亦未量度節省的時間。
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady.
What I Built
I do not dread writing email as much as I dread deciding which email needs writing. A mixed folder of receipts, updates, and actual questions makes every “quick inbox check” a series of tiny decisions.
Kindly Later takes exported .eml messages and turns them into a single review queue. It asks a locally running open weight model to mark each message as “reply,” “read,” or “ignore,” and to write a short reply draft when one is needed. Each suggestion includes an exact quote from the original message, so I can see why it was made without reopening the email. The app never sends mail. The user reviews the drafts and copies only the useful ones.
The goal is modest: spend one intentional pass reviewing suggestions instead of repeatedly reopening the same messages.
Demo
Code
Repository: [https://github.com/Khyati-Kapil/kindly-later]
The project is MIT licensed and has no Python package dependencies. The key command is:
ollama pull gemma3:4b
ollama serve
python3 kindly_later.py examples/mail --output reply-queue.html --model gemma3:4b
The model name is configurable. The local build was also attempted with an installed llama3.1:latest model. Both attempted runs timed out on this machine, so the current verified results are the offline tests and the illustrative UI preview.
How I Built It
Python's standard email package parses exported messages. The app sends only the sender, subject, and a capped text body to Ollama on 127.0.0.1. A system prompt asks for JSON with a decision, a reason, a verbatim evidence quote, and an optional draft. Python validates the fields and checks that the quote occurs in the source body. If validation fails or the model times out, the message goes into a “Review manually” lane. The report is static HTML with no network requests and no send action.
The trust boundary is the interesting part. An email can contain instructions aimed at an assistant. One fictional test message includes such an instruction. The email is passed as data, and model output is validated before it appears as a suggestion. An exact quote does not guarantee a correct decision, so human review remains the last step.
Why Does Open Innovation Matter?
Email is personal. Using a local open weight model means the app can process exported messages without sending their content to an external AI service. Ollama provides a model interface that can be swapped: a small model for a low power machine or a stronger model when accuracy matters more. There is no per message API charge. The code and the output format can be inspected and changed by anyone.
This design also makes the safety behavior visible. The model suggests; the Python program verifies a narrow set of invariants; the person decides whether to use the result.
The Lazy Payoff
I have not measured time saved yet. A fair test is to time a manual triage of the same exported messages, then time review of the generated queue, counting corrections. I will add those numbers after a successful real model run.
來源:DEV Community · dev.to
