5
5
"fmt"
6
6
"io"
7
7
"net/http"
8
+ "strings"
8
9
9
10
"github.com/gin-gonic/gin"
10
11
"github.com/songquanpeng/one-api/relay/adaptor"
@@ -28,14 +29,32 @@ func (a *Adaptor) Init(meta *meta.Meta) {
28
29
a .meta = meta
29
30
}
30
31
32
+ // WorkerAI cannot be used across accounts with AIGateWay
33
+ // https://developers.cloudflare.com/ai-gateway/providers/workersai/#openai-compatible-endpoints
34
+ // https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/workers-ai
35
+ func (a * Adaptor ) isAIGateWay (baseURL string ) bool {
36
+ return strings .HasPrefix (baseURL , "https://gateway.ai.cloudflare.com" ) && strings .HasSuffix (baseURL , "/workers-ai" )
37
+ }
38
+
31
39
func (a * Adaptor ) GetRequestURL (meta * meta.Meta ) (string , error ) {
40
+ isAIGateWay := a .isAIGateWay (meta .BaseURL )
41
+ var urlPrefix string
42
+ if isAIGateWay {
43
+ urlPrefix = meta .BaseURL
44
+ } else {
45
+ urlPrefix = fmt .Sprintf ("%s/client/v4/accounts/%s/ai" , meta .BaseURL , meta .Config .UserID )
46
+ }
47
+
32
48
switch meta .Mode {
33
49
case relaymode .ChatCompletions :
34
- return fmt .Sprintf ("%s/client/v4/accounts/%s/ai/ v1/chat/completions" , meta . BaseURL , meta . Config . UserID ), nil
50
+ return fmt .Sprintf ("%s/v1/chat/completions" , urlPrefix ), nil
35
51
case relaymode .Embeddings :
36
- return fmt .Sprintf ("%s/client/v4/accounts/%s/ai/ v1/embeddings" , meta . BaseURL , meta . Config . UserID ), nil
52
+ return fmt .Sprintf ("%s/v1/embeddings" , urlPrefix ), nil
37
53
default :
38
- return fmt .Sprintf ("%s/client/v4/accounts/%s/ai/run/%s" , meta .BaseURL , meta .Config .UserID , meta .ActualModelName ), nil
54
+ if isAIGateWay {
55
+ return fmt .Sprintf ("%s/%s" , urlPrefix , meta .ActualModelName ), nil
56
+ }
57
+ return fmt .Sprintf ("%s/run/%s" , urlPrefix , meta .ActualModelName ), nil
39
58
}
40
59
}
41
60
0 commit comments