Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion contract/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,13 @@ components:
$view, $partial_copy, $refine, $followup, $rephrase, $undo, $share, $flag,
$rate, $escalate, $switch_model, $retry_context, $post_accept_edit,
$blur, $return, $scroll_regression, $navigate, $interrupt,
$startup, $pageleave.
$startup, $pageleave, $sessionend.

$abandon vs $sessionend: $abandon is a user-initiated negative quality
signal (closed editor without using the output, clicked stop, rejected).
$sessionend is auto-emitted by the JS SDK when the tab closes or the
user idles out with a generation still open — a session boundary, not
a quality signal.

Event:
type: object
Expand Down Expand Up @@ -129,6 +135,37 @@ components:
user_id:
type: string
description: Identifier for the end user. Required for cross-session signals (Tier 4+).
model:
type: string
description: Model identifier (e.g. "claude-sonnet-4-20250514", "gpt-4o"). Typically set on $generation events.
provider:
type: string
description: LLM provider (e.g. "anthropic", "openai", "openrouter").
input_tokens:
type: integer
minimum: 0
description: Number of input tokens consumed.
output_tokens:
type: integer
minimum: 0
description: Number of output tokens produced.
total_tokens:
type: integer
minimum: 0
description: Total tokens (input + output).
Comment on lines +153 to +155
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 total_tokens has no consistency constraint

total_tokens is described as "input + output" but is an independent field — OpenAPI 3.0 has no mechanism to enforce the arithmetic. A caller can supply mismatched values (e.g., 100 input, 200 output, 999 total) and the contract accepts the payload without complaint. If the server stores all three independently, this can silently produce inconsistent analytics. Consider either computing total_tokens server-side and removing it from the schema, or documenting that the server ignores it when both input_tokens and output_tokens are provided.

Prompt To Fix With AI
This is a comment left during a code review.
Path: contract/openapi.yaml
Line: 153-155

Comment:
**`total_tokens` has no consistency constraint**

`total_tokens` is described as "input + output" but is an independent field — OpenAPI 3.0 has no mechanism to enforce the arithmetic. A caller can supply mismatched values (e.g., 100 input, 200 output, 999 total) and the contract accepts the payload without complaint. If the server stores all three independently, this can silently produce inconsistent analytics. Consider either computing `total_tokens` server-side and removing it from the schema, or documenting that the server ignores it when both `input_tokens` and `output_tokens` are provided.

How can I resolve this? If you propose a fix, please make it concise.

duration_ms:
type: integer
minimum: 0
description: End-to-end generation latency in milliseconds.
ttft_ms:
type: integer
minimum: 0
description: Time to first token in milliseconds.
cost:
type: number
format: double
minimum: 0
description: Generation cost in USD.
metadata:
type: object
additionalProperties: true
Expand Down
Loading