Architectural snapshot of the lakehouse codebase at the point where the
full matrix-driven agent loop with Mem0 versioning + deletion was
validated end-to-end.
WHAT THIS REPO IS
A clean single-commit snapshot of the lakehouse code. Heavy test data
(.parquet datasets, vector indexes) excluded — see REPLICATION.md for
regen path. Full lakehouse history at git.agentview.dev/profit/lakehouse.
WHAT WAS PROVEN
- Vector retrieval across multi-corpora matrix (chicago_permits + entity
briefs + sec_tickers + distilled procedural + llm_team runs)
- Observer hand-review (cloud + heuristic fallback) gating each candidate
- Local-model agent loop (qwen3.5:latest) with tool use + scratchpad
- Playbook seal on success → next-iter retrieval surfaces it as preamble
- Mem0 versioning + deletion in pathway_memory:
* UPSERT: ADD on new workflow, UPDATE bumps replay_count on identical
* REVISE: chains versions, parent.superseded_at + superseded_by stamped
* RETIRE: marks specific trace retired with reason, excluded from retrieval
* HISTORY: walks chain root→tip, cycle-safe
KEY DIRECTORIES
- crates/vectord/src/pathway_memory.rs — Mem0 ops live here
- crates/vectord/src/playbook_memory.rs — original Mem0 reference
- tests/agent_test/ — local-model agent harness + PRD + session archives
- scripts/dump_raw_corpus.sh — MinIO bucket dump (raw test corpus)
- scripts/vectorize_raw_corpus.ts — corpus → vector indexes
- scripts/analyze_chicago_contracts.ts — real inference pipeline
- scripts/seal_agent_playbook.ts — Mem0 upsert from agent traces
Replication: see REPLICATION.md for Debian 13 clean install + cloud-only
adaptation (no local Ollama).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
1.5 KiB
Rust
39 lines
1.5 KiB
Rust
//! ObserverProfile — how loudly the observer logs this workload.
|
|
//!
|
|
//! Phase 41 decomposition: the observer's alert thresholds, escalation
|
|
//! cadence, and log retention need per-workload tuning. Hot-path
|
|
//! staffing workflows want aggressive alerting; batch backfills want
|
|
//! quieter. This profile is read by mcp-server/observer.ts at
|
|
//! activation-time.
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
pub struct ObserverProfile {
|
|
pub id: String,
|
|
#[serde(default)]
|
|
pub description: String,
|
|
/// How many consecutive failures trigger a cluster escalation to
|
|
/// LLM Team `/v1/chat` (qwen3-coder:480b).
|
|
#[serde(default = "default_failure_cluster_size")]
|
|
pub failure_cluster_size: u32,
|
|
/// Minimum seconds between alert emails for the same sig_hash.
|
|
/// Prevents alert storms during a regression.
|
|
#[serde(default = "default_alert_cooldown")]
|
|
pub alert_cooldown_secs: u32,
|
|
/// Observer ring buffer size. Older events fall off when full.
|
|
#[serde(default = "default_ring_size")]
|
|
pub ring_size: usize,
|
|
/// Whether to forward events to external Langfuse
|
|
/// (/v1/langfuse_trace). Off by default.
|
|
#[serde(default)]
|
|
pub forward_to_langfuse: bool,
|
|
pub created_at: chrono::DateTime<chrono::Utc>,
|
|
#[serde(default)]
|
|
pub created_by: String,
|
|
}
|
|
|
|
fn default_failure_cluster_size() -> u32 { 3 }
|
|
fn default_alert_cooldown() -> u32 { 300 } // 5 minutes
|
|
fn default_ring_size() -> usize { 2000 }
|