4
4
"bytes"
5
5
"context"
6
6
"encoding/json"
7
+ "errors"
7
8
"fmt"
8
9
"io"
9
10
"log"
@@ -18,7 +19,6 @@ import (
18
19
19
20
"github.com/bytedance/sonic"
20
21
"github.com/gin-gonic/gin"
21
- "github.com/pkg/errors"
22
22
)
23
23
24
24
const cognitiveservicesScope = "https://cognitiveservices.azure.com/.default"
@@ -141,12 +141,12 @@ func Proxy(c *gin.Context, requestConverter RequestConverter) {
141
141
if model == "" {
142
142
_model , err := sonic .Get (body , "model" )
143
143
if err != nil {
144
- util .SendError (c , errors . Wrap ( err , "get model error" ))
144
+ util .SendError (c , fmt . Errorf ( "get model error: %w" , err ))
145
145
return
146
146
}
147
147
_modelStr , err := _model .String ()
148
148
if err != nil {
149
- util .SendError (c , errors . Wrap ( err , "get model name error" ))
149
+ util .SendError (c , fmt . Errorf ( "get model name error: %w" , err ))
150
150
return
151
151
}
152
152
model = _modelStr
@@ -161,40 +161,43 @@ func Proxy(c *gin.Context, requestConverter RequestConverter) {
161
161
162
162
// get auth token from header or deployment config
163
163
token := deployment .ApiKey
164
+ tokenFound := false
164
165
if token == "" && token != "msi" {
165
166
rawToken := req .Header .Get ("Authorization" )
166
167
token = strings .TrimPrefix (rawToken , "Bearer " )
167
168
req .Header .Set (APIKeyHeaderKey , token )
168
169
req .Header .Del ("Authorization" )
170
+ tokenFound = true
169
171
}
170
172
// get azure token using managed identity
171
173
var azureToken azcore.AccessToken
172
174
if token == "" || token == "msi" {
173
175
cred , err := azidentity .NewManagedIdentityCredential (nil )
174
176
if err != nil {
175
- util .SendError (c , errors . Wrap ( err , "failed to create managed identity credential" ))
177
+ util .SendError (c , fmt . Errorf ( "failed to create managed identity credential: %w" , err ))
176
178
}
177
179
178
180
azureToken , err = cred .GetToken (context .TODO (), policy.TokenRequestOptions {
179
181
Scopes : []string {cognitiveservicesScope },
180
182
})
181
183
if err != nil {
182
- util .SendError (c , errors . Wrap ( err , "failed to get token" ))
184
+ util .SendError (c , fmt . Errorf ( "failed to get token: %w" , err ))
183
185
}
184
186
185
187
req .Header .Del (APIKeyHeaderKey )
186
188
req .Header .Set (AuthHeaderKey , "Bearer " + azureToken .Token )
189
+ tokenFound = true
187
190
}
188
191
189
- if token == "" && azureToken . Token == "" {
192
+ if ! tokenFound {
190
193
util .SendError (c , errors .New ("token is empty" ))
191
194
return
192
195
}
193
196
194
197
originURL := req .URL .String ()
195
198
req , err = requestConverter .Convert (req , deployment )
196
199
if err != nil {
197
- util .SendError (c , errors . Wrap ( err , "convert request error" ))
200
+ util .SendError (c , fmt . Errorf ( "convert request error: %w" , err ))
198
201
return
199
202
}
200
203
log .Printf ("proxying request [%s] %s -> %s" , model , originURL , req .URL .String ())
@@ -203,7 +206,7 @@ func Proxy(c *gin.Context, requestConverter RequestConverter) {
203
206
proxy := & httputil.ReverseProxy {Director : director }
204
207
transport , err := util .NewProxyFromEnv ()
205
208
if err != nil {
206
- util .SendError (c , errors . Wrap ( err , "get proxy error" ))
209
+ util .SendError (c , fmt . Errorf ( "get proxy error: %w" , err ))
207
210
return
208
211
}
209
212
if transport != nil {
@@ -227,7 +230,7 @@ func Proxy(c *gin.Context, requestConverter RequestConverter) {
227
230
func GetDeploymentByModel (model string ) (* DeploymentConfig , error ) {
228
231
deploymentConfig , exist := ModelDeploymentConfig [model ]
229
232
if ! exist {
230
- return nil , errors . New ( fmt .Sprintf ("deployment config for %s not found" , model ) )
233
+ return nil , fmt .Errorf ("deployment config for %s not found" , model )
231
234
}
232
235
return & deploymentConfig , nil
233
236
}
0 commit comments