Skip to content

feat: expose aibridged metrics - #20865

Merged
dannykopping merged 9 commits into
mainfrom
dk/aibridge-prom
Nov 24, 2025
Merged

dannykopping merged 9 commits into
mainfrom
dk/aibridge-prom

Conversation

@dannykopping

@dannykopping dannykopping commented Nov 21, 2025 •

Copy link
Copy Markdown
Contributor

Upgrades coder/aibridge to v0.2.0 which includes coder/aibridge#62.

Creates a prometheus.Registerer with a prefix coder_aibridged_ and passes that along to coder/aibridge which actually exposes the metrics.

Also includes a side-effect of a change described in coder/aibridge#62 (comment).

Sample:

# HELP coder_aibridged_injected_tool_invocations_total The number of times an injected MCP tool was invoked by aibridge.
# TYPE coder_aibridged_injected_tool_invocations_total counter
coder_aibridged_injected_tool_invocations_total{model="gpt-5-nano",name="coder_list_templates",provider="openai",server="https://nlhlvn9in25q6.pit-1.try.coder.app/api/experimental/mcp/http"} 1
# HELP coder_aibridged_interceptions_duration_seconds The total duration of intercepted requests, in seconds. The majority of this time will be the upstream processing of the request. aibridge has no control ov
er upstream processing time, so it's just an illustrative metric.
# TYPE coder_aibridged_interceptions_duration_seconds histogram
coder_aibridged_interceptions_duration_seconds_bucket{model="gpt-5-nano",provider="openai",le="0.5"} 0
coder_aibridged_interceptions_duration_seconds_bucket{model="gpt-5-nano",provider="openai",le="2"} 0
coder_aibridged_interceptions_duration_seconds_bucket{model="gpt-5-nano",provider="openai",le="5"} 3
coder_aibridged_interceptions_duration_seconds_bucket{model="gpt-5-nano",provider="openai",le="15"} 6
coder_aibridged_interceptions_duration_seconds_bucket{model="gpt-5-nano",provider="openai",le="30"} 6
coder_aibridged_interceptions_duration_seconds_bucket{model="gpt-5-nano",provider="openai",le="60"} 6
coder_aibridged_interceptions_duration_seconds_bucket{model="gpt-5-nano",provider="openai",le="120"} 6
coder_aibridged_interceptions_duration_seconds_bucket{model="gpt-5-nano",provider="openai",le="+Inf"} 6
coder_aibridged_interceptions_duration_seconds_sum{model="gpt-5-nano",provider="openai"} 34.120188692
coder_aibridged_interceptions_duration_seconds_count{model="gpt-5-nano",provider="openai"} 6
# HELP coder_aibridged_interceptions_inflight The number of intercepted requests which are being processed.
# TYPE coder_aibridged_interceptions_inflight gauge
coder_aibridged_interceptions_inflight{model="gpt-5-nano",provider="openai",route="/v1/chat/completions"} 0
# HELP coder_aibridged_interceptions_total The count of intercepted requests.
# TYPE coder_aibridged_interceptions_total counter
coder_aibridged_interceptions_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",method="POST",model="gpt-5-nano",provider="openai",route="/v1/chat/completions",status="completed"} 6
# HELP coder_aibridged_non_injected_tool_selections_total The number of times an AI model selected a tool to be invoked by the client.
# TYPE coder_aibridged_non_injected_tool_selections_total counter
coder_aibridged_non_injected_tool_selections_total{model="gpt-5-nano",name="read_file",provider="openai"} 2
# HELP coder_aibridged_prompts_total The number of prompts issued by users (initiators).
# TYPE coder_aibridged_prompts_total counter
coder_aibridged_prompts_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai"} 4
# HELP coder_aibridged_tokens_total The number of tokens used by intercepted requests.
# TYPE coder_aibridged_tokens_total counter
coder_aibridged_tokens_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai",type="completion_accepted_prediction"} 0
coder_aibridged_tokens_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai",type="completion_audio"} 0
coder_aibridged_tokens_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai",type="completion_reasoning"} 1664
coder_aibridged_tokens_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai",type="completion_rejected_prediction"} 0
coder_aibridged_tokens_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai",type="input"} 13823
coder_aibridged_tokens_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai",type="output"} 2014
coder_aibridged_tokens_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai",type="prompt_audio"} 0
coder_aibridged_tokens_total{initiator_id="95f6752b-08cc-4cf1-97f7-c2165e3519c5",model="gpt-5-nano",provider="openai",type="prompt_cached"} 31872

@dannykopping dannykopping changed the title feat: expose aibridged metrics feat: expose aibridged metrics Nov 21, 2025
@dannykopping dannykopping changed the title feat: expose aibridged metrics feat: expose aibridged metrics Nov 21, 2025
@dannykopping dannykopping changed the title feat: expose aibridged metrics feat: expose aibridged metrics Nov 21, 2025
@dannykopping dannykopping changed the title feat: expose aibridged metrics feat: expose 'aibridged' metrics Nov 21, 2025
@dannykopping dannykopping changed the title feat: expose 'aibridged' metrics feat: expose aibridged metrics Nov 21, 2025
@dannykopping

Copy link
Copy Markdown
Contributor Author

Fuck the PR title linter.

Signed-off-by: Danny Kopping <[email protected]>
Signed-off-by: Danny Kopping <[email protected]>
Signed-off-by: Danny Kopping <[email protected]>
Signed-off-by: Danny Kopping <[email protected]>
Signed-off-by: Danny Kopping <[email protected]>
var metrics []*dto.MetricFamily

decoder := expfmt.NewDecoder(f, expfmt.NewFormat(expfmt.TypeProtoText))
decoder := expfmt.NewDecoder(f, expfmt.NewFormat(expfmt.TypeTextPlain))

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Drive-by, this fixes metricsdocgen.

@dannykopping
dannykopping requested a review from pawbana November 24, 2025 13:45
@dannykopping
dannykopping marked this pull request as ready for review November 24, 2025 13:45
@dannykopping
dannykopping merged commit c6631e1 into main Nov 24, 2025
46 of 48 checks passed
@dannykopping
dannykopping deleted the dk/aibridge-prom branch November 24, 2025 16:16
@github-actions github-actions Bot locked and limited conversation to collaborators Nov 24, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants