Observabilidad
Observabilidad
Sección titulada «Observabilidad»Ambos tiempos de ejecución proporcionan características de observabilidad para despliegues en producción.
Rust: Registro estructurado
Sección titulada «Rust: Registro estructurado»ai-lib-rust utiliza el ecosistema tracing:
use tracing_subscriber;
// Enable loggingtracing_subscriber::init();
// All AI-Lib operations emit structured log eventslet client = AiClient::new("openai/gpt-4o").await?;Niveles de registro:
INFO— Resúmenes de solicitud/respuestaDEBUG— Carga de protocolo, etapas de la canalizaciónTRACE— Frames individuales, coincidencias JSONPath
Rust: Estadísticas de llamadas
Sección titulada «Rust: Estadísticas de llamadas»Cada solicitud devuelve estadísticas de uso:
let (response, stats) = client.chat() .user("Hello") .execute_with_stats() .await?;
println!("Model: {}", stats.model);println!("Provider: {}", stats.provider);println!("Prompt tokens: {}", stats.prompt_tokens);println!("Completion tokens: {}", stats.completion_tokens);println!("Total tokens: {}", stats.total_tokens);println!("Latency: {}ms", stats.latency_ms);Python: Estadísticas de llamadas
Sección titulada «Python: Estadísticas de llamadas»response, stats = await client.chat() \ .user("Hello") \ .execute_with_stats()
print(f"Tokens: {stats.total_tokens}")print(f"Latency: {stats.latency_ms}ms")TypeScript: Estadísticas de llamadas
Sección titulada «TypeScript: Estadísticas de llamadas»const { response, stats } = await client .chat() .user('Hello') .executeWithStats();
console.log(`Model: ${stats.model}`);console.log(`Provider: ${stats.provider}`);console.log(`Prompt tokens: ${stats.promptTokens}`);console.log(`Completion tokens: ${stats.completionTokens}`);console.log(`Total tokens: ${stats.totalTokens}`);console.log(`Latency: ${stats.latencyMs}ms`);Python: Métricas (Prometheus)
Sección titulada «Python: Métricas (Prometheus)»from ai_lib_python.telemetry import MetricsCollector
metrics = MetricsCollector()
client = await AiClient.builder() \ .model("openai/gpt-4o") \ .metrics(metrics) \ .build()
# After some requests...prometheus_text = metrics.export_prometheus()TypeScript: Métricas (Prometheus)
Sección titulada «TypeScript: Métricas (Prometheus)»import { MetricsCollector } from '@hiddenpath/ai-lib-ts/telemetry';
const metrics = new MetricsCollector();
const client = await AiClient.builder() .model('openai/gpt-4o') .metrics(metrics) .build();
// After some requests...const prometheusText = metrics.exportPrometheus();Métricas rastreadas:
ai_lib_requests_total— Conteo de solicitudes por modelo/proveedorai_lib_request_duration_seconds— Histograma de latenciaai_lib_tokens_total— Uso de tokens por tipoai_lib_errors_total— Conteo de errores por tipo
Python: Trazado distribuido (OpenTelemetry)
Sección titulada «Python: Trazado distribuido (OpenTelemetry)»from ai_lib_python.telemetry import Tracer
tracer = Tracer( service_name="my-app", endpoint="http://jaeger:4317",)
client = await AiClient.builder() \ .model("openai/gpt-4o") \ .tracer(tracer) \ .build()TypeScript: Trazado distribuido (OpenTelemetry)
Sección titulada «TypeScript: Trazado distribuido (OpenTelemetry)»import { Tracer } from '@hiddenpath/ai-lib-ts/telemetry';
const tracer = new Tracer({ serviceName: 'my-app', endpoint: 'http://jaeger:4317',});
const client = await AiClient.builder() .model('openai/gpt-4o') .tracer(tracer) .build();Los trazados incluyen spans para:
- Carga de protocolo
- Compilación de solicitudes
- Transporte HTTP
- Procesamiento de la canalización
- Mapeo de eventos
Python: Monitoreo de salud
Sección titulada «Python: Monitoreo de salud»from ai_lib_python.telemetry import HealthChecker
health = HealthChecker()status = await health.check()
print(f"Healthy: {status.is_healthy}")print(f"Details: {status.details}")TypeScript: Monitoreo de salud
Sección titulada «TypeScript: Monitoreo de salud»import { HealthChecker } from '@hiddenpath/ai-lib-ts/telemetry';
const health = new HealthChecker();const status = await health.check();
console.log(`Healthy: ${status.isHealthy}`);console.log(`Details: ${status.details}`);Python: Retroalimentación del usuario
Sección titulada «Python: Retroalimentación del usuario»Recolecte retroalimentación sobre las respuestas de IA:
from ai_lib_python.telemetry import FeedbackCollector
feedback = FeedbackCollector()
# After getting a responsefeedback.record( request_id=stats.request_id, rating=5, comment="Helpful response",)TypeScript: Retroalimentación del usuario
Sección titulada «TypeScript: Retroalimentación del usuario»import { FeedbackCollector } from '@hiddenpath/ai-lib-ts/telemetry';
const feedback = new FeedbackCollector();
// After getting a responsefeedback.record({ requestId: stats.requestId, rating: 5, comment: 'Helpful response',});Observabilidad de resiliencia
Sección titulada «Observabilidad de resiliencia»Monitoree el estado del circuit breaker y el limitador de velocidad:
// Rustlet state = client.circuit_state(); // Closed, Open, HalfOpenlet inflight = client.current_inflight();Python: Observabilidad de resiliencia
Sección titulada «Python: Observabilidad de resiliencia»# Pythonsignals = client.signals_snapshot()print(f"Circuit: {signals.circuit_state}")print(f"Inflight: {signals.current_inflight}")// TypeScriptconst signals = client.signalsSnapshot();console.log(`Circuit: ${signals.circuitState}`);console.log(`Inflight: ${signals.currentInflight}`);