feat: filter interceptions and sessions by provider name (#25640)

Allows filtering sessions & interceptions by provider name, and adds a test to vaidate that provider name is immutable (at least until #25606 lands).
This commit is contained in:
Danny Kopping
2026-05-25 16:31:48 +02:00
committed by GitHub
parent c8359d8598
commit 4ddda3a9db
16 changed files with 217 additions and 73 deletions
+20
View File
@@ -387,6 +387,7 @@ func AIBridgeInterceptions(ctx context.Context, db database.Store, query string,
parser := httpapi.NewQueryParamParser()
filter.InitiatorID = parseUser(ctx, db, parser, values, "initiator", actorID)
filter.Provider = parser.String(values, "", "provider")
filter.ProviderName = parseAIProviderName(ctx, db, parser, values)
filter.Model = parser.String(values, "", "model")
filter.Client = parser.String(values, "", "client")
@@ -429,6 +430,7 @@ func AIBridgeSessions(ctx context.Context, db database.Store, query string, page
parser := httpapi.NewQueryParamParser()
filter.InitiatorID = parseUser(ctx, db, parser, values, "initiator", actorID)
filter.Provider = parser.String(values, "", "provider")
filter.ProviderName = parseAIProviderName(ctx, db, parser, values)
filter.Model = parser.String(values, "", "model")
filter.Client = parser.String(values, "", "client")
filter.SessionID = parser.String(values, "", "session_id")
@@ -700,6 +702,24 @@ func parseOrganization(ctx context.Context, db database.Store, parser *httpapi.Q
})
}
// parseAIProviderName resolves a "provider_name" filter param against
// ai_providers.name. Unknown names produce a validation error so typos
// surface immediately rather than returning a silently-empty result set.
func parseAIProviderName(ctx context.Context, db database.Store, parser *httpapi.QueryParamParser, vals url.Values) string {
name := parser.String(vals, "", "provider_name")
if name == "" {
return ""
}
if _, err := db.GetAIProviderByName(ctx, name); err != nil {
parser.Errors = append(parser.Errors, codersdk.ValidationError{
Field: "provider_name",
Detail: `Query param "provider_name" has invalid value: provider not found or unauthorized`,
})
return ""
}
return name
}
func parseUser(ctx context.Context, db database.Store, parser *httpapi.QueryParamParser, vals url.Values, queryParam string, actorID uuid.UUID) uuid.UUID {
return httpapi.ParseCustom(parser, vals, uuid.Nil, queryParam, func(v string) (uuid.UUID, error) {
if v == "" {