mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-02 20:40:52 +08:00
fix(auth): include requested model in executor metadata
This commit is contained in:
@@ -570,6 +570,7 @@ func (m *Manager) executeMixedOnce(ctx context.Context, providers []string, req
|
|||||||
return cliproxyexecutor.Response{}, &Error{Code: "provider_not_found", Message: "no provider supplied"}
|
return cliproxyexecutor.Response{}, &Error{Code: "provider_not_found", Message: "no provider supplied"}
|
||||||
}
|
}
|
||||||
routeModel := req.Model
|
routeModel := req.Model
|
||||||
|
opts = ensureRequestedModelMetadata(opts, routeModel)
|
||||||
tried := make(map[string]struct{})
|
tried := make(map[string]struct{})
|
||||||
var lastErr error
|
var lastErr error
|
||||||
for {
|
for {
|
||||||
@@ -619,6 +620,7 @@ func (m *Manager) executeCountMixedOnce(ctx context.Context, providers []string,
|
|||||||
return cliproxyexecutor.Response{}, &Error{Code: "provider_not_found", Message: "no provider supplied"}
|
return cliproxyexecutor.Response{}, &Error{Code: "provider_not_found", Message: "no provider supplied"}
|
||||||
}
|
}
|
||||||
routeModel := req.Model
|
routeModel := req.Model
|
||||||
|
opts = ensureRequestedModelMetadata(opts, routeModel)
|
||||||
tried := make(map[string]struct{})
|
tried := make(map[string]struct{})
|
||||||
var lastErr error
|
var lastErr error
|
||||||
for {
|
for {
|
||||||
@@ -668,6 +670,7 @@ func (m *Manager) executeStreamMixedOnce(ctx context.Context, providers []string
|
|||||||
return nil, &Error{Code: "provider_not_found", Message: "no provider supplied"}
|
return nil, &Error{Code: "provider_not_found", Message: "no provider supplied"}
|
||||||
}
|
}
|
||||||
routeModel := req.Model
|
routeModel := req.Model
|
||||||
|
opts = ensureRequestedModelMetadata(opts, routeModel)
|
||||||
tried := make(map[string]struct{})
|
tried := make(map[string]struct{})
|
||||||
var lastErr error
|
var lastErr error
|
||||||
for {
|
for {
|
||||||
@@ -734,6 +737,7 @@ func (m *Manager) executeWithProvider(ctx context.Context, provider string, req
|
|||||||
return cliproxyexecutor.Response{}, &Error{Code: "provider_not_found", Message: "provider identifier is empty"}
|
return cliproxyexecutor.Response{}, &Error{Code: "provider_not_found", Message: "provider identifier is empty"}
|
||||||
}
|
}
|
||||||
routeModel := req.Model
|
routeModel := req.Model
|
||||||
|
opts = ensureRequestedModelMetadata(opts, routeModel)
|
||||||
tried := make(map[string]struct{})
|
tried := make(map[string]struct{})
|
||||||
var lastErr error
|
var lastErr error
|
||||||
for {
|
for {
|
||||||
@@ -783,6 +787,7 @@ func (m *Manager) executeCountWithProvider(ctx context.Context, provider string,
|
|||||||
return cliproxyexecutor.Response{}, &Error{Code: "provider_not_found", Message: "provider identifier is empty"}
|
return cliproxyexecutor.Response{}, &Error{Code: "provider_not_found", Message: "provider identifier is empty"}
|
||||||
}
|
}
|
||||||
routeModel := req.Model
|
routeModel := req.Model
|
||||||
|
opts = ensureRequestedModelMetadata(opts, routeModel)
|
||||||
tried := make(map[string]struct{})
|
tried := make(map[string]struct{})
|
||||||
var lastErr error
|
var lastErr error
|
||||||
for {
|
for {
|
||||||
@@ -832,6 +837,7 @@ func (m *Manager) executeStreamWithProvider(ctx context.Context, provider string
|
|||||||
return nil, &Error{Code: "provider_not_found", Message: "provider identifier is empty"}
|
return nil, &Error{Code: "provider_not_found", Message: "provider identifier is empty"}
|
||||||
}
|
}
|
||||||
routeModel := req.Model
|
routeModel := req.Model
|
||||||
|
opts = ensureRequestedModelMetadata(opts, routeModel)
|
||||||
tried := make(map[string]struct{})
|
tried := make(map[string]struct{})
|
||||||
var lastErr error
|
var lastErr error
|
||||||
for {
|
for {
|
||||||
@@ -893,6 +899,45 @@ func (m *Manager) executeStreamWithProvider(ctx context.Context, provider string
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ensureRequestedModelMetadata(opts cliproxyexecutor.Options, requestedModel string) cliproxyexecutor.Options {
|
||||||
|
requestedModel = strings.TrimSpace(requestedModel)
|
||||||
|
if requestedModel == "" {
|
||||||
|
return opts
|
||||||
|
}
|
||||||
|
if hasRequestedModelMetadata(opts.Metadata) {
|
||||||
|
return opts
|
||||||
|
}
|
||||||
|
if len(opts.Metadata) == 0 {
|
||||||
|
opts.Metadata = map[string]any{cliproxyexecutor.RequestedModelMetadataKey: requestedModel}
|
||||||
|
return opts
|
||||||
|
}
|
||||||
|
meta := make(map[string]any, len(opts.Metadata)+1)
|
||||||
|
for k, v := range opts.Metadata {
|
||||||
|
meta[k] = v
|
||||||
|
}
|
||||||
|
meta[cliproxyexecutor.RequestedModelMetadataKey] = requestedModel
|
||||||
|
opts.Metadata = meta
|
||||||
|
return opts
|
||||||
|
}
|
||||||
|
|
||||||
|
func hasRequestedModelMetadata(meta map[string]any) bool {
|
||||||
|
if len(meta) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
raw, ok := meta[cliproxyexecutor.RequestedModelMetadataKey]
|
||||||
|
if !ok || raw == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
switch v := raw.(type) {
|
||||||
|
case string:
|
||||||
|
return strings.TrimSpace(v) != ""
|
||||||
|
case []byte:
|
||||||
|
return strings.TrimSpace(string(v)) != ""
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func rewriteModelForAuth(model string, auth *Auth) string {
|
func rewriteModelForAuth(model string, auth *Auth) string {
|
||||||
if auth == nil || model == "" {
|
if auth == nil || model == "" {
|
||||||
return model
|
return model
|
||||||
|
|||||||
Reference in New Issue
Block a user