feat(dashboard): página Politicas con detalle de validadores y versiones
Selector de política; muestra descripción, on_validator_error y los validadores de input/output (cada uno expandible con su config), más la tabla de versiones. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
"""Página de políticas de guardrails y sus versiones."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import streamlit as st
|
||||
|
||||
from agentforge_dashboard.client import CoreClient
|
||||
|
||||
|
||||
@st.cache_resource
|
||||
def get_client() -> CoreClient:
|
||||
return CoreClient()
|
||||
|
||||
|
||||
client = get_client()
|
||||
st.title("📐 Politicas de guardrails")
|
||||
st.caption("Inventario de políticas y sus versiones (estilo Git).")
|
||||
|
||||
policies = client.list_policies()
|
||||
if not policies:
|
||||
st.warning("No hay políticas registradas.")
|
||||
st.stop()
|
||||
|
||||
names = [p["name"] for p in policies]
|
||||
selected = st.selectbox("Política", names)
|
||||
policy = next(p for p in policies if p["name"] == selected)
|
||||
|
||||
st.subheader(f"{policy['name']} @ {policy['version']}")
|
||||
st.write(f"**Descripción:** {policy['description']}")
|
||||
st.write(f"**On validator error:** `{policy['on_validator_error']}`")
|
||||
|
||||
col_in, col_out = st.columns(2)
|
||||
with col_in:
|
||||
st.markdown("**Validadores de input**")
|
||||
for v in policy["input_validators"]:
|
||||
with st.expander(v["type"]):
|
||||
st.json(v["config"])
|
||||
with col_out:
|
||||
st.markdown("**Validadores de output**")
|
||||
for v in policy["output_validators"]:
|
||||
with st.expander(v["type"]):
|
||||
st.json(v["config"])
|
||||
|
||||
st.divider()
|
||||
st.subheader("Historial de versiones")
|
||||
versions = client.list_policy_versions(selected)
|
||||
st.dataframe(versions, hide_index=True, use_container_width=True)
|
||||
Reference in New Issue
Block a user