Fetching metadata from the HF Docker repository...
Sep 14 15:22 fix(diagnose): prioritize Resend check over blocked SMTP sockets 15:17 feat(email): add Resend HTTPS email dispatch with SMTP fallback 15:01 test(smtp): probe ports 587, 465, and 25 on cloud container 14:59 feat(alerts): add internal diagnose-smtp endpoint 14:44 fix: resolve alert subscription confirmation constraint, streamline agent loop, and add worker endpoints Sep 13 21:11 feat(alerts): add Pulse AI double opt-in alert subscriptions system - Add 10 alert criteria types with RPC-based evaluation and 24h rolling cooldown
- Implement pluggable email service with Gmail SMTP and unsubscribe links
- Add ALERT_SUBSCRIPTION query classification and isolated 2-tool resolution
- Add confirmation, unsubscribe, and internal evaluate API routes
- Add background evaluator, digest sender, and cleanup workers
- Add comprehensive test suite with 45 unit tests and 44 simulated tool tests 13:29 refactor(core): reduce cyclomatic complexity to <=10, enforce <=500 lines per file, apply comment discipline, and add 22-tool test suite Sep 5 18:37 feat(scaling): enterprise multi-market dynamic registry and international scaling support Aug 21 12:21 refactor: split groq_service into focused modules + SSE streaming Architecture improvements (fixes #1-#8 from ai_architecture_review):
New modules:
- services/groq_client.py - Groq SDK + retry w/ exp backoff + jitter (#7)
- services/prompts.py - Prompt composition by classification (#3)
- services/session.py - Session history w/ TTL eviction + write-trim (#6)
- services/tool_compressor.py - compress_tool_output + geocode handler
- services/tool_executor.py - Tool dispatch + normalize_assistant_message (#5)
- services/agent_loop.py - Agentic loop (max 4 rounds) + SSE streaming (#1)
- services/groq_service.py - Thin facade re-exporting public functions
Fixes:
- #1: True agentic tool loop (finish_reason=stop ends loop, not fixed 1-call)
- #2: Universal failed_generation recovery for any tool, not just exports
- #3: Prompt composition - PATH_A gets ~900 fewer tokens than monolith
- #4: Router now uses small fast model (llama-3.1-8b-instant) by default
- #5: normalize_assistant_message() strips reasoning field from history
- #6: Sessio… Aug 16 21:03 feat: sanitize project structure + dynamic contact tool + export download fix - Restructured repository to clean production FastAPI package layout
- Moved research docs, scratch scripts, and legacy routes to misc/
- Added COMMERCIAL_TOOLS with generate_contact_buttons for dynamic handoffs
- Configured direct file downloads (/download endpoint) in Appwrite storage
- Fixed middleware compression to preserve tool payload output for python tools
- Updated requirements.txt and verified test suite Aug 11 18:25 fix: tool schema bugs + route architecture v1 Tool schema fixes (were causing 400 errors):
- get_market_trend: p_market/p_days params + required=['p_market']
- get_spike_alerts: threshold_param/days_param param names
- get_rate_anomaly_report: required=['p_property_search']
Supabase service param alignment (were silently mismatching):
- get_market_trend: clamp reads p_days
- get_spike_alerts: clamp reads threshold_param/days_param
- get_market_snapshot: validation reads p_start_date/p_end_date
- get_recently_changed_tracking: clamp reads p_days
- Added RPC signature comments to every handler block
Route architecture v1:
- routes/__init__.py: exports v1_router
- routes/v1/__init__.py: aggregates sub-routers
- routes/v1/real_estate.py: /api/v1/real-estate/* with structured errors
- routes/v1/rag.py: /api/v1/rag/chat migrated from main.py
- routes/v1/health.py: /health + /api/v1/health
- main.py: cleaned, all logic moved to route modules
- Backwards-compat shim for /api/rag/chat (marked deprecated) 12:33 Latest changes Aug 10 15:59 feat: migrate to Langfuse observability 14:52 feat: Add comprehensive observability and telemetry logging via JSONL and rotating file handlers Aug 8 15:27 Latest changes 06:48 Update chat backend to include agentic features