Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
fb29e7f
more
fzyzcjy Dec 13, 2025
b39bc42
more
fzyzcjy Dec 13, 2025
75f873e
more
fzyzcjy Dec 13, 2025
81dcc06
more
fzyzcjy Dec 13, 2025
4a61d38
more
fzyzcjy Dec 13, 2025
271018f
more
fzyzcjy Dec 13, 2025
0e45b71
more
fzyzcjy Dec 13, 2025
91d2833
more
fzyzcjy Dec 13, 2025
3568787
more
fzyzcjy Dec 13, 2025
3156ce9
more
fzyzcjy Dec 13, 2025
92e21b2
fmt
fzyzcjy Dec 13, 2025
d0035a2
Merge branch 'feat/str_err' into feat/grpc_use_new_err
fzyzcjy Dec 13, 2025
d02f900
fmt
fzyzcjy Dec 13, 2025
7cdf0c1
more
fzyzcjy Dec 13, 2025
f727dde
fmt
fzyzcjy Dec 13, 2025
4e24c26
more
fzyzcjy Dec 13, 2025
52b8e10
more
fzyzcjy Dec 13, 2025
a2c34d3
more
fzyzcjy Dec 13, 2025
52e6871
more
fzyzcjy Dec 13, 2025
9236d2d
more
fzyzcjy Dec 13, 2025
0b32b3c
more
fzyzcjy Dec 13, 2025
a52cf89
more
fzyzcjy Dec 13, 2025
a4b5b28
more
fzyzcjy Dec 13, 2025
643aeb4
fmt
fzyzcjy Dec 13, 2025
0dcd01d
more
fzyzcjy Dec 13, 2025
e6eefbd
more
fzyzcjy Dec 13, 2025
1b516d7
more
fzyzcjy Dec 13, 2025
e3739dc
more
fzyzcjy Dec 13, 2025
8edabfd
fmt
fzyzcjy Dec 13, 2025
1299f09
more
fzyzcjy Dec 13, 2025
435f93d
more
fzyzcjy Dec 13, 2025
f328a1f
more
fzyzcjy Dec 13, 2025
3520807
more
fzyzcjy Dec 13, 2025
40a1049
more
fzyzcjy Dec 13, 2025
a526c32
more
fzyzcjy Dec 13, 2025
93bd35e
more
fzyzcjy Dec 13, 2025
634beb5
fmt
fzyzcjy Dec 13, 2025
cd83c0c
more
fzyzcjy Dec 13, 2025
7d564f3
more
fzyzcjy Dec 13, 2025
c0ebe98
fmt
fzyzcjy Dec 13, 2025
afe66cc
more
fzyzcjy Dec 13, 2025
10fb32d
more
fzyzcjy Dec 13, 2025
7118954
fix lint
fzyzcjy Dec 13, 2025
98805ad
fix compile
fzyzcjy Dec 13, 2025
895403f
fix another compile
fzyzcjy Dec 13, 2025
8c915bc
fix another compile
fzyzcjy Dec 13, 2025
10d5457
Merge branch 'feat/resp_header_metric_label' into feat/attempt_resp
fzyzcjy Dec 13, 2025
e1ffd61
bump ci
fzyzcjy Dec 13, 2025
5b1a35e
Revert "bump ci"
fzyzcjy Dec 13, 2025
aeb87db
fix lint
fzyzcjy Dec 13, 2025
397bdc3
Merge branch 'feat/resp_header_metric_label' into feat/attempt_resp
fzyzcjy Dec 13, 2025
efcb688
Merge branch 'main' into feat/attempt_resp
fzyzcjy Dec 13, 2025
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
7 changes: 4 additions & 3 deletions sgl-model-gateway/src/observability/metrics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -330,10 +330,11 @@ impl RouterMetrics {
}

// TODO unify metric names
pub fn record_upstream_http_response(route: &str, status_code: u16) {
counter!("sgl_router_upstream_http_responses_total",
pub fn record_attempt_http_response(route: &str, status_code: u16, error_code: &str) {
counter!("sgl_router_attempt_http_responses_total",
"route" => route.to_string(),
"status_code" => status_code.to_string()
"status_code" => status_code.to_string(),
"error_code" => error_code.to_string()
)
.increment(1);
}
Expand Down
18 changes: 14 additions & 4 deletions sgl-model-gateway/src/routers/http/router.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,18 @@ impl Router {
&self.retry_config,
// operation per attempt
|_: u32| async {
self.route_typed_request_once(headers, typed_req, route, model_id, is_stream, &text)
.await
let res = self
.route_typed_request_once(headers, typed_req, route, model_id, is_stream, &text)
.await;

// Need to be outside `route_typed_request_once` because that function has multiple return paths
RouterMetrics::record_attempt_http_response(
route,
res.status().as_u16(),
extract_error_code_from_response(&res),
);

res
},
// should_retry predicate
|res, _attempt| is_retryable_status(res.status()),
Expand Down Expand Up @@ -505,8 +515,6 @@ impl Router {
}
};

RouterMetrics::record_upstream_http_response(route, res.status().as_u16());

let status = StatusCode::from_u16(res.status().as_u16())
.unwrap_or(StatusCode::INTERNAL_SERVER_ERROR);

Expand Down Expand Up @@ -715,6 +723,8 @@ fn convert_reqwest_error(e: reqwest::Error) -> Response {

use async_trait::async_trait;

use crate::routers::error::extract_error_code_from_response;

#[async_trait]
impl RouterTrait for Router {
fn as_any(&self) -> &dyn std::any::Any {
Expand Down
Loading