Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
124 lines
3.9 KiB
Markdown
124 lines
3.9 KiB
Markdown
# ML-integrasjon i OSVauco
|
|
|
|
**Fase:** ML-1 implementert | ML-2 og ML-3 planlagt
|
|
**Sist oppdatert:** 2026-05-26
|
|
|
|
---
|
|
|
|
## Hvorfor ML i OPAX?
|
|
|
|
OPAX er et multi-agent system. ML-laget gjør agentene sterkere på tre måter:
|
|
|
|
1. **Parallell kjøring** (ML-1): Dask DAG lar agenter kjøre samtidig i stedet for sekvensielt.
|
|
2. **Adaptiv intelligens** (ML-2): Agentene lærer fra faktisk bruk — heavy-mode aktiveres basert på historikk, ikke hardkodede regler.
|
|
3. **Strategisk innsikt** (ML-3): XGBoost feature importance avslører hvilke agenter og signaler som faktisk driver vellykkede utfall.
|
|
|
|
---
|
|
|
|
## Fase ML-1: Grunnlag (implementert)
|
|
|
|
### Arkitektur
|
|
|
|
```
|
|
main.py → build_agent_dag([agent_a, agent_b], payload)
|
|
│
|
|
Dask task graph
|
|
│
|
|
┌──────────┴──────────┐
|
|
▼ ▼
|
|
run_agent_task(a) run_agent_task(b) ← parallelt
|
|
│ │
|
|
└──────────┬──────────┘
|
|
▼
|
|
execute_dag(tasks, scheduler="threads")
|
|
│
|
|
▼
|
|
[result_a, result_b] → AgentStateStore.push()
|
|
│
|
|
telemetry.log_agent_call()
|
|
```
|
|
|
|
### Koble ML-laget inn i main.py
|
|
|
|
```python
|
|
# Eksempel: erstatt sekvensielle kall med parallell DAG
|
|
from ml import build_agent_dag, execute_dag, get_store, log_agent_call
|
|
import time
|
|
|
|
@app.post("/run")
|
|
def run_agent(req: RunRequest):
|
|
store = get_store()
|
|
payload = {"message": req.message, "user_id": req.user_id,
|
|
"session_id": req.session_id, "mode": req.mode}
|
|
|
|
# Velg agenter basert på mode
|
|
if req.mode == "heavy":
|
|
agent_fns = [billing_agent_heavy, rag_agent, multi_agent]
|
|
else:
|
|
agent_fns = [billing_agent, rag_agent]
|
|
|
|
start = time.monotonic()
|
|
tasks = build_agent_dag(agent_fns, payload)
|
|
results = execute_dag(tasks, scheduler="threads")
|
|
total_dur = time.monotonic() - start
|
|
|
|
# Push resultater til state store
|
|
for r in results:
|
|
if r["success"]:
|
|
store.push(r["agent"], "last_result", r["result"])
|
|
store.push(r["agent"], "last_duration_s", r["duration_s"])
|
|
|
|
# Logg DAG-kjøring
|
|
from ml.telemetry import log_dag_execution
|
|
log_dag_execution(dag_id=req.session_id, agent_results=results,
|
|
total_duration_s=total_dur)
|
|
|
|
# Returner kombinert svar
|
|
return {"response": [r["result"] for r in results if r["success"]]}
|
|
```
|
|
|
|
---
|
|
|
|
## Fase ML-2: Adaptiv intelligens (planlagt)
|
|
|
|
| Komponent | Fil | Repo |
|
|
|---|---|---|
|
|
| Inkrementell feedback-loop | `ml/feedback_loop.py` | `vauco-gemini-tui-bridge` |
|
|
| ASHA hyperparametertuning | `ml/hypertuner.py` | `vauco-bootstrap` |
|
|
| Heavy-mode predictor | `ml/heavy_predictor.py` | `OSVauco` |
|
|
|
|
**Krav:** `dask-ml>=2024.4.0`, `ray[tune]>=2.10.0` (vauco-bootstrap only)
|
|
|
|
---
|
|
|
|
## Fase ML-3: Strategisk innsikt (planlagt)
|
|
|
|
| Komponent | Fil | Repo |
|
|
|---|---|---|
|
|
| XGBoost feature importance | `ml/agent_importance.py` | `OSVauco` |
|
|
| Population-Based Training | `experiments/pbt.py` | `deep-dream` |
|
|
|
|
**Krav:** `xgboost>=2.0.0` (legg til requirements.txt i Fase ML-3)
|
|
|
|
---
|
|
|
|
## Telemetri-ruting
|
|
|
|
| Miljø | `TELEMETRY_DIR` | Arkivering |
|
|
|---|---|---|
|
|
| Lokal dev | `/tmp/vauco_telemetry/` | Manuell |
|
|
| Cloud Run | `/tmp/vauco_telemetry/` | `10-cost-guard.sh` cron → GCS |
|
|
| Prod skala | `gs://propane-will-491900-m5-telemetry/` | Auto via GCS sink |
|
|
|
|
---
|
|
|
|
## Cross-repo referanser
|
|
|
|
| Repo | ML-relatert fil | Fase |
|
|
|---|---|---|
|
|
| `OSVauco` | `ml/`, `AGENTS.md`, `docs/ml-integration.md` | ML-1 |
|
|
| `vauco-gemini-tui-bridge` | `ml/feedback_loop.py` (planlagt) | ML-2 |
|
|
| `vauco-bootstrap` | `ml/hypertuner.py` (planlagt) | ML-2 |
|
|
| `vauco-os` | Konsumerer beste konfig fra state store | ML-2 |
|
|
| `deep-dream` | `experiments/pbt.py` (planlagt) | ML-3 |
|