尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Every offer pays for itself. Most stores send discounts to everyone, and about two out of three go to shoppers who would have bought anyway. This engine decides, for each customer, which offer to send (or none), checks every decision against 31 business rules, and delivers it through a Telegram bot.
🎬 Demo video (3:48): not stored in the repo; rebuild it with the steps under Rebuilding the demo video.
customer data → features → segment → Claude picks an offer → 31 rules check it → Telegram
│ fails or breaks a rule
└──────────→ rules engine decides instead
| Policy | Extra net margin / week | Discount wasted on buy-anyway | Cost per extra purchase |
|---|---|---|---|
| 10% to everyone | +₹2,571 | ₹4,834 | ₹358 |
| Rules only | +₹6,801 | ₹932 | ₹103 |
| Rules + AI | +₹7,635 | ₹202 | ₹51 |
Full reports: data/eval_report.md, 30-day run: data/sim30_report.md. Customer behaviour is calibrated on public datasets (Flipkart catalog, RetailRocket clickstream, Hillstrom email test).
Needs Python 3.11+.
pip install -r requirements.txt
cp .env.example .env # add ANTHROPIC_API_KEY (and TELEGRAM_BOT_TOKEN if you want the bot)
python generate_data.py # synthetic customers → data/shop.db, data/customers.json
python run_decisions.py # decide an offer for every customer (--no-agent: rules only, no API key)
python preview.py # dashboard at http://127.0.0.1:5000
Keep DELIVERY_MODE=dry_run in .env until you really want Telegram messages to go out.
| Command | What it does |
|---|---|
python run_automation.py --once | one round of automatic decisions (events + daily check + sending) |
python show_log.py --flagged | decisions where the AI failed or broke a rule |
python evaluate.py --no-ai | compare no offers vs 10% to everyone vs rules (vs AI) |
python simulate_30d.py | 30-day forward simulation with Diwali |
python tools/experiment.py | try rule changes and measure their profit |
python calibrate.py | recalibrate personas from datasets in data/raw/ |
python -m tests.test_pipeline | tests (also test_rules_v2, test_edge_cases, test_automation, test_telegram) |
src/ engine: features, segments, agent (Claude), rules, fallback, delivery, Telegram bot, automation
config/ rules.yaml, offers, catalog, personas, response model (rules live in files, not code)
web/ dashboard page served by preview.py
data/ generated customers, CSV dataset, evaluation reports (databases are rebuilt, not committed)
docs/ data dictionary, edge cases, research notes
tests/ rule, pipeline, edge-case, automation and Telegram tests
tools/ experiments, rules PDF builder
video/ scripts that render the demo videos (story2 = latest)
The repo deploys as-is: import it at vercel.com/new (no build settings needed). vercel.json sends every request to api/index.py, which runs the same Flask app as preview.py.
ANTHROPIC_API_KEY under Project → Settings → Environment Variables so Claude decides; without it the rules engine decides.data/demo/ (rebuild with python tools/make_vercel_data.py), copied into /tmp. Changes made on the page are temporary.Vercel can't keep polling Telegram, so the bot uses a webhook: Telegram calls /api/telegram for every message and button press.
.env as TELEGRAM_WEBHOOK_SECRET=...:
python -c "import secrets; print(secrets.token_urlsafe(32))"TELEGRAM_BOT_TOKEN, TELEGRAM_WEBHOOK_SECRET (same values as .env), TELEGRAM_TEST_MODE=1 and DELIVERY_MODE=live, then redeploy.python tools/telegram_webhook.py set https://<your-app>.vercel.app (check with ... info)./test to the bot. It replies with your chat ID: add it as TELEGRAM_TEST_CHATS in Vercel (comma-separate several) and redeploy, so test copies keep arriving after the database resets.Limits: chats that pressed Start are forgotten when the instance restarts (the database lives in /tmp); at most 15 messages go out per request (SEND_MAX_PER_ROUND). While the webhook is set, a local python preview.py can't receive messages: run python tools/telegram_webhook.py delete to switch back.
data/*.db) are rebuilt by generate_data.py and run_decisions.py.data/raw/ (download them yourself): Flipkart e-commerce sample, RetailRocket events.csv, Kevin Hillstrom MineThatData email test.pip install edge-tts numpy scipy playwright && playwright install msedge # plus ffmpeg on PATH
cp data/sim_offers.db data/demo_offers.db # sim_offers.db is written by evaluate.py
PORT=5001 OFFERS_DB=data/demo_offers.db AUTOMATION=1 TELEGRAM_DISABLED=1 FORCE_DRY_RUN=1 python preview.py # keep running
python video/story2/voice.py && python video/story2/render.py && python video/story2/make.py
The render drives the real dashboard on port 5001 (dry-run, Telegram disabled). Voice is a stock neural voice; music and sound effects are synthesised in code, so there are no licensed assets.