Architecture
Same diagram source as docs/ARCHITECTURE.md — rendered live in your browser, not a static image.
flowchart TD
subgraph Input["Log Input"]
LC[logcat file]
DM[dmesg file]
BR[bugreport ZIP]
end
subgraph Agent["Agentic Diagnosis Engine — IMPLEMENTED"]
AG["DiagnosticAgent\nReAct loop (src/agent/diagnostic_agent.py)"]
T1["LogcatParserTool"]
T2["DmesgParserTool"]
T3["PatternSearchTool"]
T4["RAGRetrieverTool\n(FAISS + sentence-transformers)"]
AG -->|Action| T1
AG -->|Action| T2
AG -->|Action| T3
AG -->|Action| T4
T1 -->|Observation| AG
T2 -->|Observation| AG
T3 -->|Observation| AG
T4 -->|Observation| AG
end
subgraph LLM["Agent Backbone — IMPLEMENTED ($0)"]
OLLAMA["Ollama, local\nqwen2.5:7b"]
end
subgraph Training["Training Data Pipeline — IMPLEMENTED"]
TL["TraceRecorder\nJSON step recorder"]
TC["TraceConverter\nShareGPT format"]
DPO["DPOPairGenerator\nhuman vs model"]
SFT["SFT Dataset"]
PREF["Preference Dataset"]
end
subgraph FineTune["Fine-Tuning Pipeline — CODE READY, NOT YET RUN (cloud GPU)"]
FT["QLoRA Fine-Tuning\nQwen2.5-7B"]
DIST["Distillation\nGroq Llama-3.3-70B teacher"]
DPOT["DPO Training"]
end
subgraph Eval["Eval Harness — IMPLEMENTED"]
DE["DiagnosticEval\noutcome grader"]
TG["TrajectoryGrader\ntool use checker"]
LJ["LLMJudge\nreasoning quality (Ollama)"]
RG{"Regression Gate\naccuracy threshold"}
end
subgraph Deploy["Deployment — MOSTLY VERIFIED (Phase 5)"]
VLLM["vLLM Server\nOpenAI-compatible"]
DOCK["Airgapped Docker\nno internet required"]
VLLM --> DOCK
end
subgraph Review["Human Review — PLANNED"]
HR["Engineer Review\napprove or correct"]
end
Input --> AG
OLLAMA -.->|serves| AG
AG --> Diag["Diagnosis\nroot cause + reasoning + confidence"]
Diag --> HR
Diag --> TL
TL --> TC --> SFT
HR --> DPO --> PREF
SFT --> FT
PREF --> DPOT
DIST --> FT
FT --> DE
DPOT --> DE
DE --> TG --> LJ --> RG
RG -->|pass| VLLM
RG -->|fail| FT
VLLM -->|new cases| TL
Investigation Replay
Replaying real recorded ReAct traces captured by running the actual
DiagnosticAgent against local Ollama (see data/sft/*.jsonl) —
not a live agent. Pick a scenario and step through its reasoning.
Eval Results
From eval_results_baseline.json, produced by scripts/run_eval.py against the zero-shot agent.
| Task | Expected | Predicted | Correct | Keyword Hit Rate | Confidence | Trajectory | Judge |
|---|
Flywheel & Phase Status
All 6 capstone phases, current status (mirrors CONTEXT.md).
flowchart TD
PROD["Deployed vLLM server\n(07-deployment-serving.md)"]
NEWCASES["New investigations\n(production usage)"]
TRACES["data/raw/traces.jsonl\n(growing)"]
PROD --> NEWCASES --> TRACES
subgraph Trigger["auto_trigger.py"]
COUNT["count_new_examples()\ntotal - last_known_count"]
CHECK{"new_count >= 100?"}
COUNT --> CHECK
end
TRACES --> COUNT
CHECK -->|no| WAIT["Not enough new examples\n(no-op)"]
CHECK -->|yes| RETRAIN["scripts/weekly_retrain.sh"]
subgraph Pipeline["weekly_retrain.sh (5 steps)"]
S1["1. Convert traces\n-> data/sft/train.jsonl"]
S2["2. QLoRA SFT training\n(train_sft.py)"]
S3["3. Merge adapter\n(merge_adapter.py)"]
S4["4. Run eval harness\n(run_eval.py)"]
S5["5. Regression gate check"]
S1 --> S2 --> S3 --> S4 --> S5
end
RETRAIN --> S1
subgraph Gate["regression_gate.should_deploy()"]
FLOOR{"accuracy >= 0.65\n(ACCURACY_FLOOR)?"}
REGRESS{"accuracy >= prev_accuracy - 0.05\n(MAX_REGRESSION)?"}
FLOOR -->|no| REJECT["Block deployment"]
FLOOR -->|yes| REGRESS
REGRESS -->|no| REJECT
REGRESS -->|yes| ACCEPT["Approve deployment"]
end
S5 --> FLOOR
ACCEPT --> BUILD["docker build\nnew tagged image\nlogcat-ie-serve:vN"]
ACCEPT --> RECORD["version_tracker.py\nrecord_deployment()"]
REJECT --> KEEPOLD["Keep serving current version\n(no image rebuild)"]
BUILD --> PROD