github / github/copilot-cli

--output-format json omits token/cost usage that OTel exposes

Abierto
#4,107 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

area:models area:non-interactive
Lenguaje dominante
Shell
Estrellas
11.2k
Forks
1.9k
Merge medio
14 h 16 min
PR fusionados (30 d)
6

Descripción

Describe the feature or problem you'd like to solve

No response

Proposed solution

--output-format json's terminal result event only carries legacy fields (premiumRequests, totalApiDurationMs, sessionDurationMs, codeChanges) under usage. It does not include token counts (input/output/cached) or AI-credit cost, even though this exact data is computed internally during the very same run and is fully available via OpenTelemetry (COPILOT_OTEL_ENABLED / COPILOT_OTEL_FILE_EXPORTER_PATH, documented in copilot help monitoring).

I verified with raw, unmodified CLI output (happy to attach the files):

  • A full, unfiltered JSONL dump of -p ... --output-format json shows the only usage-bearing event is the terminal result, and its usage object has no token/cost fields at all.
  • Enabling the OTel file exporter simultaneously with --output-format json (same invocation) proves the CLI does compute gen_ai.usage.input_tokens / output_tokens / cache_read.input_tokens / cache_creation.input_tokens and github.copilot.nano_aiu (exact AI-credit cost) during the run - it's just never written into the result JSON event.
  • Cross-checked nano_aiu-derived AI Credits against the interactive footer ("AI Credits X.X") in the same session - they match exactly, confirming this is real billing data, not an estimate.

Proposed solution: add inputTokens, outputTokens, cacheReadInputTokens, cacheCreationInputTokens, and aiCredits/costUSD (broken down per model if more than one model was used in the run) to the terminal result event's usage object in --output-format json, mirroring what OTel's chat spans already export. This would make --output-format json self-sufficient for accurate cost accounting without requiring a full OTel pipeline for simple scripting/automation use cases.

Example prompts or workflows
  1. CI pipeline running copilot -p "<task>" --output-format json per job step, parsing result.usage directly to log real per-task USD cost - no OTel collector needed.
  2. Agent-orchestration frameworks (e.g. workflow engines that shell out to copilot as one of several interchangeable LLM-CLI backends) recording accurate per-node cost alongside output/session data from a single JSON parse.
  3. Budget-alerting scripts that tail result events and sum costUSD/aiCredits across many non-interactive invocations without standing up OTel infrastructure just to get numbers already in memory.
  4. Local dev tooling that shows "this command cost $X" right after a scripted -p call, matching what the interactive footer already shows for interactive sessions.
Additional context

Environment: GitHub Copilot CLI 1.0.70, Windows.

Raw evidence available on request (unfiltered JSONL dumps + OTel raw export files from side-by-side runs of the same prompt with/without OTel enabled, plus the interactive footer output used for cross-validation). Happy to attach as files once this issue is reviewed.

Root-cause hypothesis: result.usage looks like a schema left over from the pre-"AI Credits" (legacy premium-request) billing era that was never updated when AI Credits + full token/cost telemetry was added via OTel - i.e. a schema sync gap rather than an intentional interactive-only restriction (copilot help billing documents credit/token visibility only through interactive surfaces - footer, /statusline, /model, /context, /usage, /exit - but OTel proves the same data is available non-interactively too).

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza en el terminal result event de la CLI con --output-format json y compara su usage object con los campos usage expuestos por el OpenTelemetry file exporter descrito en copilot help monitoring. Se considera terminado cuando el resultado JSON incluye datos de input, output, cache y AI-credit o coste, incluidos desgloses por modelo cuando corresponda, y conserva los campos usage existentes.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
json
Área
cli, observability
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
55/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.