diff --git a/dashboard/src/agentforge_dashboard/pages/5_📐_Politicas.py b/dashboard/src/agentforge_dashboard/pages/5_📐_Politicas.py new file mode 100644 index 0000000..1482eec --- /dev/null +++ b/dashboard/src/agentforge_dashboard/pages/5_📐_Politicas.py @@ -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)