add ollama bagcround run and cache
This commit is contained in:
@@ -5,6 +5,7 @@ import time
|
||||
from pathlib import Path
|
||||
|
||||
from .anomaly import anomaly_summary, detect_source_anomalies
|
||||
from .llm import ollama_dashboard_assessment
|
||||
from .logs import local_in_failures, read_events, summarize_events, top_field_values
|
||||
from .mitigation import parse_allowlist, suggest_block_candidates
|
||||
from .policies import audit_policies, read_policies
|
||||
@@ -94,6 +95,24 @@ def build_status(
|
||||
}
|
||||
|
||||
|
||||
def add_llm_assessment(status: dict[str, object], *, previous: str | None = None, model: str | None = None, timeout: int | None = None) -> None:
|
||||
try:
|
||||
status["llm_assessment"] = {
|
||||
"enabled": True,
|
||||
"status": "ok",
|
||||
"generated_at": int(time.time()),
|
||||
"text": ollama_dashboard_assessment(status, model=model, timeout=timeout),
|
||||
}
|
||||
except Exception as exc:
|
||||
status["llm_assessment"] = {
|
||||
"enabled": True,
|
||||
"status": "error",
|
||||
"generated_at": int(time.time()),
|
||||
"error": str(exc),
|
||||
"text": previous or "",
|
||||
}
|
||||
|
||||
|
||||
def write_status(status: dict[str, object], output: str) -> None:
|
||||
output_path = Path(output)
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
@@ -109,10 +128,33 @@ def monitor_loop(
|
||||
policy_path: str | None = None,
|
||||
interval: int = 10,
|
||||
anomaly_limit: int = 20,
|
||||
llm: bool = False,
|
||||
llm_interval: int = 300,
|
||||
llm_model: str | None = None,
|
||||
llm_timeout: int | None = None,
|
||||
) -> None:
|
||||
print(f"Monitoring {log_path}")
|
||||
print(f"Writing status to {output}")
|
||||
last_llm_at = 0
|
||||
last_llm_text: str | None = None
|
||||
while True:
|
||||
status = build_status(log_path, policy_path=policy_path, anomaly_limit=anomaly_limit)
|
||||
if llm:
|
||||
now = int(time.time())
|
||||
if now - last_llm_at >= llm_interval:
|
||||
add_llm_assessment(status, previous=last_llm_text, model=llm_model, timeout=llm_timeout)
|
||||
assessment = status.get("llm_assessment", {})
|
||||
if isinstance(assessment, dict):
|
||||
last_llm_text = str(assessment.get("text", "") or last_llm_text or "")
|
||||
last_llm_at = now
|
||||
else:
|
||||
status["llm_assessment"] = {
|
||||
"enabled": True,
|
||||
"status": "cached",
|
||||
"generated_at": last_llm_at,
|
||||
"text": last_llm_text or "",
|
||||
}
|
||||
else:
|
||||
status["llm_assessment"] = {"enabled": False, "status": "disabled", "text": ""}
|
||||
write_status(status, output)
|
||||
time.sleep(interval)
|
||||
|
||||
Reference in New Issue
Block a user