66 "encoding/json"
77 "fmt"
88 "io"
9+ "log/slog"
910 "log"
1011 "maps"
1112 "net/http"
@@ -33,8 +34,12 @@ import (
3334 "github.com/chaitin/ModelKit/v2/utils"
3435)
3536
36- func ModelList (ctx context.Context , req * domain.ModelListReq ) (* domain.ModelListResp , error ) {
37- log .Printf ("ModelList req: provider=%s, baseURL=%s" , req .Provider , req .BaseURL )
37+ func ModelList (ctx context.Context , req * domain.ModelListReq , logger * slog.Logger ) (* domain.ModelListResp , error ) {
38+ if logger != nil {
39+ logger .Info ("ModelList req: provider=%s, baseURL=%s" , req .Provider , req .BaseURL )
40+ } else {
41+ log .Printf ("ModelList req: provider=%s, baseURL=%s" , req .Provider , req .BaseURL )
42+ }
3843 httpClient := & http.Client {
3944 Timeout : time .Second * 30 ,
4045 Transport : & http.Transport {
@@ -64,7 +69,11 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList
6469 }
6570 defer func () {
6671 if closeErr := client .Close (); closeErr != nil {
67- log .Printf ("Failed to close gemini client: %v" , closeErr )
72+ if logger != nil {
73+ logger .Error ("Failed to close gemini client: %v" , slog .Any ("error" , closeErr ))
74+ } else {
75+ log .Printf ("Failed to close gemini client: %v" , closeErr )
76+ }
6877 }
6978 }()
7079
@@ -168,8 +177,12 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList
168177 }
169178}
170179
171- func CheckModel (ctx context.Context , req * domain.CheckModelReq ) (* domain.CheckModelResp , error ) {
172- log .Printf ("CheckModel req: provider=%s, model=%s, baseURL=%s" , req .Provider , req .Model , req .BaseURL )
180+ func CheckModel (ctx context.Context , req * domain.CheckModelReq , logger * slog.Logger ) (* domain.CheckModelResp , error ) {
181+ if logger != nil {
182+ logger .Info ("CheckModel req" , "provider" , req .Provider , "model" , req .Model , "baseURL" , req .BaseURL )
183+ } else {
184+ log .Printf ("CheckModel req: provider=%s, model=%s, baseURL=%s" , req .Provider , req .Model , req .BaseURL )
185+ }
173186 checkResp := & domain.CheckModelResp {}
174187 modelType := consts .ParseModelType (req .Type )
175188
@@ -218,7 +231,11 @@ func CheckModel(ctx context.Context, req *domain.CheckModelReq) (*domain.CheckMo
218231 }
219232 defer func () {
220233 if closeErr := resp .Body .Close (); closeErr != nil {
221- log .Printf ("Failed to close resp body: %v" , closeErr )
234+ if logger != nil {
235+ logger .Error ("Failed to close resp body: %v" , slog .Any ("error" , closeErr ))
236+ } else {
237+ log .Printf ("Failed to close resp body: %v" , closeErr )
238+ }
222239 }
223240 }()
224241 if resp .StatusCode != http .StatusOK {
@@ -230,7 +247,7 @@ func CheckModel(ctx context.Context, req *domain.CheckModelReq) (*domain.CheckMo
230247 // end
231248 provider := consts .ParseModelProvider (req .Provider )
232249
233- resp , err := getChatModelGenerateChat (ctx , provider , modelType , req .BaseURL , req )
250+ resp , err := getChatModelGenerateChat (ctx , provider , modelType , req .BaseURL , req , nil )
234251 // 可编辑url的供应商,尝试修复baseURL
235252 if err != nil && (provider == consts .ModelProviderOther || provider == consts .ModelProviderOllama || provider == consts .ModelProviderAzureOpenAI ) {
236253 msg := generateBaseURLFixSuggestion (err .Error (), req .BaseURL , provider )
@@ -379,7 +396,7 @@ func ollamaListModel(baseURL string, httpClient *http.Client, apiHeader string)
379396 return request .Get [domain.ModelListResp ](client , u .Path , request .WithHeader (h ))
380397}
381398
382- func getChatModelGenerateChat (ctx context.Context , provider consts.ModelProvider , modelType consts.ModelType , baseURL string , req * domain.CheckModelReq ) (string , error ) {
399+ func getChatModelGenerateChat (ctx context.Context , provider consts.ModelProvider , modelType consts.ModelType , baseURL string , req * domain.CheckModelReq , logger * log. Logger ) (string , error ) {
383400 chatModel , err := GetChatModel (ctx , & domain.ModelMetadata {
384401 Provider : provider ,
385402 ModelName : req .Model ,
@@ -399,10 +416,18 @@ func getChatModelGenerateChat(ctx context.Context, provider consts.ModelProvider
399416 })
400417 // 非流式生成失败,尝试流式生成
401418 if err != nil || genResp .Content == "" {
402- log .Printf ("Generate chat failed, err: %v" , err )
419+ if logger != nil {
420+ logger .Printf ("Generate chat failed, err: %v" , err )
421+ } else {
422+ log .Printf ("Generate chat failed, err: %v" , err )
423+ }
403424 streamRes , streamErr := streamCheck (ctx , & chatModel )
404425 if streamErr != nil {
405- log .Printf ("Stream chat failed, err: %v" , streamErr )
426+ if logger != nil {
427+ logger .Printf ("Stream chat failed, err: %v" , streamErr )
428+ } else {
429+ log .Printf ("Stream chat failed, err: %v" , streamErr )
430+ }
406431 return "" , err
407432 }
408433 return streamRes , nil
@@ -435,19 +460,6 @@ func streamCheck(ctx context.Context, chatModel *model.BaseChatModel) (string, e
435460 return res , nil
436461}
437462
438- // baseURL添加/v1
439- func baseURLAddV1 (inputURL string ) (string , error ) {
440- rawURL , err := url .Parse (inputURL )
441- if err != nil {
442- return "" , err
443- }
444- // 没有path, 则添加/v1
445- if rawURL .Path == "" {
446- rawURL .Path = "/v1"
447- }
448- return rawURL .String (), nil
449- }
450-
451463// baseURL的host换成host.docker.internal
452464func baseURLReplaceHost (inputURL string ) (string , error ) {
453465 rawURL , err := url .Parse (inputURL )
0 commit comments