Merge pull request #2972 from XYenon/feat/amp-thread-id

feat: support X-Amp-Thread-Id for session affinity
This commit is contained in:
Luis Pater
2026-04-26 23:30:12 +08:00
committed by GitHub
3 changed files with 70 additions and 6 deletions
+16
View File
@@ -223,6 +223,19 @@ func requestExecutionMetadata(ctx context.Context) map[string]any {
return meta
}
// headersFromContext extracts the original HTTP request headers from the gin context
// embedded in the provided context. This allows session affinity selectors to read
// client headers like X-Amp-Thread-Id.
func headersFromContext(ctx context.Context) http.Header {
if ctx == nil {
return nil
}
if ginCtx, ok := ctx.Value("gin").(*gin.Context); ok && ginCtx != nil && ginCtx.Request != nil {
return ginCtx.Request.Header.Clone()
}
return nil
}
func pinnedAuthIDFromContext(ctx context.Context) string {
if ctx == nil {
return ""
@@ -508,6 +521,7 @@ func (h *BaseAPIHandler) ExecuteWithAuthManager(ctx context.Context, handlerType
Alt: alt,
OriginalRequest: rawJSON,
SourceFormat: sdktranslator.FromString(handlerType),
Headers: headersFromContext(ctx),
}
opts.Metadata = reqMeta
resp, err := h.AuthManager.Execute(ctx, providers, req, opts)
@@ -555,6 +569,7 @@ func (h *BaseAPIHandler) ExecuteCountWithAuthManager(ctx context.Context, handle
Alt: alt,
OriginalRequest: rawJSON,
SourceFormat: sdktranslator.FromString(handlerType),
Headers: headersFromContext(ctx),
}
opts.Metadata = reqMeta
resp, err := h.AuthManager.ExecuteCount(ctx, providers, req, opts)
@@ -606,6 +621,7 @@ func (h *BaseAPIHandler) ExecuteStreamWithAuthManager(ctx context.Context, handl
Alt: alt,
OriginalRequest: rawJSON,
SourceFormat: sdktranslator.FromString(handlerType),
Headers: headersFromContext(ctx),
}
opts.Metadata = reqMeta
streamResult, err := h.AuthManager.ExecuteStream(ctx, providers, req, opts)