Logs de uso de IA

Historial de llamadas a Gemini y Whisper con tokens, tiempos y costos.

{{-- Cards resumen --}}

Total llamadas

{{ number_format($resumen->total_llamadas ?? 0) }}

{{ number_format($resumen->total_ok ?? 0) }} ok  ·  {{ number_format($resumen->total_errores ?? 0) }} errores

Tokens Gemini

{{ number_format(($resumen->total_input_tokens ?? 0) + ($resumen->total_output_tokens ?? 0)) }}

Entrada: {{ number_format($resumen->total_input_tokens ?? 0) }} · Salida: {{ number_format($resumen->total_output_tokens ?? 0) }}

Audio Whisper

{{ number_format($resumen->total_segundos_whisper ?? 0) }}s

segundos transcritos

Costo Whisper

${{ number_format($resumen->costo_whisper ?? 0) }}

$1 por segundo · Tiempo prom: {{ number_format($resumen->avg_tiempo_ms ?? 0) }}ms

{{-- Filtros --}}
{{-- Tabla --}}
@forelse($logs as $log) @php $detalle = is_array($log->detalle) ? $log->detalle : []; $badgeServicio = match($log->servicio) { 'gemini_intent' => 'bg-blue-100 text-blue-700', 'gemini_vision' => 'bg-indigo-100 text-indigo-700', 'whisper' => 'bg-purple-100 text-purple-700', default => 'bg-gray-100 text-gray-600', }; $labelServicio = match($log->servicio) { 'gemini_intent' => 'Gemini Intent', 'gemini_vision' => 'Gemini Vision', 'whisper' => 'Whisper', default => $log->servicio, }; @endphp @empty @endforelse
Fecha Servicio Canal Usuario Tokens E/S Audio Tiempo Costo Estado Detalle
{{ $log->created_at->format('d/m/Y') }}
{{ $log->created_at->format('H:i:s') }}
{{ $labelServicio }} {{ $log->canal }} {{ $log->usuario_id ? ('ID '.$log->usuario_id) : '—' }} @if($log->input_tokens || $log->output_tokens) {{ number_format($log->input_tokens ?? 0) }} / {{ number_format($log->output_tokens ?? 0) }} @else — @endif @if($log->audio_segundos) {{ $log->audio_segundos }}s @else — @endif {{ number_format($log->tiempo_ms) }}ms @if($log->costo > 0) ${{ number_format($log->costo) }} @else — @endif @if($log->resultado === 'ok') OK @else Error @endif @if(isset($detalle['texto']) && $detalle['texto']) "{{ Str::limit($detalle['texto'], 60) }}" @elseif(isset($detalle['accion']) && $detalle['accion']) → {{ $detalle['accion'] }} @elseif(isset($detalle['banco'])) {{ $detalle['banco'] }} · ${{ number_format($detalle['valor'] ?? 0) }} @elseif(isset($detalle['error'])) {{ Str::limit($detalle['error'], 60) }} @else — @endif
No hay registros con los filtros seleccionados.
@if($logs->hasPages())
{{ $logs->links() }}
@endif