返回 DeepSeek-Reasonix
endpoint_override.go
根目录 / internal / provider / endpoint_override.go
1 package provider
2
3 import (
4 "net/url"
5 "strings"
6 )
7
8 // EndpointOverrideRepeatsBase reports whether an endpoint override only repeats
9 // one of bases, as editors that mirror base_url into every endpoint field leave
10 // it; the caller then derives its canonical route instead of POSTing to the
11 // API root. Scheme and host compare case-insensitively. An override carrying a
12 // query or fragment is deliberate (gateway tokens, debug routes) and stays.
13 func EndpointOverrideRepeatsBase(override string, bases ...string) bool {
14 o, ok := parseEndpoint(override)
15 if !ok || o.RawQuery != "" || o.Fragment != "" || o.ForceQuery {
16 return false
17 }
18 for _, base := range bases {
19 b, ok := parseEndpoint(base)
20 if ok && strings.EqualFold(b.Scheme, o.Scheme) && strings.EqualFold(b.Host, o.Host) &&
21 strings.TrimRight(b.EscapedPath(), "/") == strings.TrimRight(o.EscapedPath(), "/") {
22 return true
23 }
24 }
25 return false
26 }
27
28 func parseEndpoint(raw string) (*url.URL, bool) {
29 raw = strings.TrimSpace(raw)
30 if raw == "" {
31 return nil, false
32 }
33 u, err := url.Parse(raw)
34 if err != nil || u.Scheme == "" || u.Host == "" {
35 return nil, false
36 }
37 return u, true
38 }
39
39 lines GO