diff --git a/internal/entity/models/cohere.go b/internal/entity/models/cohere.go index 00b061d692..5f4877ebe1 100644 --- a/internal/entity/models/cohere.go +++ b/internal/entity/models/cohere.go @@ -691,10 +691,10 @@ func (c *CoHereModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, err return nil, fmt.Errorf("failed to unmarshal response: %w", err) } - models := make([]DSModel, 0, len(result.Models)) + models := make([]ModelListItem, 0, len(result.Models)) for _, model := range result.Models { if model.ModelName != "" { - models = append(models, DSModel{ + models = append(models, ModelListItem{ ID: model.ModelName, OwnedBy: c.Name(), }) diff --git a/internal/entity/models/deepinfra.go b/internal/entity/models/deepinfra.go index b47f6373ef..60c827f7d3 100644 --- a/internal/entity/models/deepinfra.go +++ b/internal/entity/models/deepinfra.go @@ -862,10 +862,10 @@ func (d *DeepInfraModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, return nil, fmt.Errorf("failed to unmarshal response: %w", err) } - models := make([]DSModel, 0, len(result)) + models := make([]ModelListItem, 0, len(result)) for _, model := range result { if model.ModelName != "" { - models = append(models, DSModel{ + models = append(models, ModelListItem{ ID: model.ModelName, OwnedBy: d.Name(), }) diff --git a/internal/entity/models/deepseek.go b/internal/entity/models/deepseek.go index 36eb8243ab..21bfaa2b10 100644 --- a/internal/entity/models/deepseek.go +++ b/internal/entity/models/deepseek.go @@ -492,12 +492,6 @@ func (d *DeepSeekModel) Embed(modelName *string, texts []string, apiConfig *APIC return nil, fmt.Errorf("%s, no such method", d.Name()) } -type DSModel struct { - ID string `json:"id"` - Object string `json:"object"` - OwnedBy string `json:"owned_by"` -} - func (d *DeepSeekModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, error) { if err := d.baseModel.APIConfigCheck(apiConfig); err != nil { return nil, err diff --git a/internal/entity/models/fishaudio.go b/internal/entity/models/fishaudio.go index 14e358a27b..df05c7c1ec 100644 --- a/internal/entity/models/fishaudio.go +++ b/internal/entity/models/fishaudio.go @@ -391,7 +391,7 @@ func (f *FishAudioModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, if name == "" { continue } - modelList.Models = append(modelList.Models, DSModel{ID: name}) + modelList.Models = append(modelList.Models, ModelListItem{ID: name}) } return ParseListModel(modelList), nil diff --git a/internal/entity/models/gitee_test.go b/internal/entity/models/gitee_test.go index 1c653091e2..e8e96acfbf 100644 --- a/internal/entity/models/gitee_test.go +++ b/internal/entity/models/gitee_test.go @@ -97,12 +97,12 @@ func TestGiteeListModelsMapsAllDeepSeekAliasesToModelMetadata(t *testing.T) { resp := ModelList{ Object: "list", - Models: make([]DSModel, 0, len(aliases)+1), + Models: make([]ModelListItem, 0, len(aliases)+1), } for _, alias := range aliases { - resp.Models = append(resp.Models, DSModel{ID: alias}) + resp.Models = append(resp.Models, ModelListItem{ID: alias}) } - resp.Models = append(resp.Models, DSModel{ID: "unknown-model"}) + resp.Models = append(resp.Models, ModelListItem{ID: "unknown-model"}) w.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(resp); err != nil { diff --git a/internal/entity/models/google.go b/internal/entity/models/google.go index 8add9fa66b..171f096ddf 100644 --- a/internal/entity/models/google.go +++ b/internal/entity/models/google.go @@ -26,12 +26,12 @@ import ( ) type googleModelPage struct { - items []DSModel + items []ModelListItem nextPageToken string } func collectGoogleModelNames(ctx context.Context, listPage func(context.Context, string) (googleModelPage, error)) ([]ListModelResponse, error) { - var models []DSModel + var models []ModelListItem pageToken := "" for { @@ -60,14 +60,14 @@ var googleListModels = func(ctx context.Context, config *genai.ClientConfig) ([] return googleModelPage{}, err } - var modelNames []DSModel + var modelNames []ModelListItem for _, m := range models.Items { modelName := strings.TrimSpace(m.DisplayName) if modelName == "" { modelName = strings.TrimSpace(m.Name) } if modelName != "" { - modelNames = append(modelNames, DSModel{ + modelNames = append(modelNames, ModelListItem{ ID: modelName, OwnedBy: "Google", }) diff --git a/internal/entity/models/google_test.go b/internal/entity/models/google_test.go index 327150f8b2..f19cbb1ce1 100644 --- a/internal/entity/models/google_test.go +++ b/internal/entity/models/google_test.go @@ -329,8 +329,8 @@ func TestGoogleModelListModelsPassesBaseURL(t *testing.T) { func TestCollectGoogleModelNamesPaginates(t *testing.T) { pages := []googleModelPage{ - {items: []DSModel{{ID: "Gemini 2.5 Flash", OwnedBy: "Google"}}, nextPageToken: "page-2"}, - {items: []DSModel{{ID: "Gemini 2.5 Pro", OwnedBy: "Google"}}, nextPageToken: ""}, + {items: []ModelListItem{{ID: "Gemini 2.5 Flash", OwnedBy: "Google"}}, nextPageToken: "page-2"}, + {items: []ModelListItem{{ID: "Gemini 2.5 Pro", OwnedBy: "Google"}}, nextPageToken: ""}, } var pageTokens []string @@ -374,7 +374,7 @@ func TestCollectGoogleModelNamesReturnsPageError(t *testing.T) { _, err := collectGoogleModelNames(context.Background(), func(context.Context, string) (googleModelPage, error) { calls++ if calls == 1 { - return googleModelPage{items: []DSModel{{ID: "Gemini 2.5 Flash", OwnedBy: "Google"}}, nextPageToken: "page-2"}, nil + return googleModelPage{items: []ModelListItem{{ID: "Gemini 2.5 Flash", OwnedBy: "Google"}}, nextPageToken: "page-2"}, nil } return googleModelPage{}, pageErr }) diff --git a/internal/entity/models/gpustack.go b/internal/entity/models/gpustack.go index 5ef29a047f..d3dd772100 100644 --- a/internal/entity/models/gpustack.go +++ b/internal/entity/models/gpustack.go @@ -301,7 +301,7 @@ type gpustackModelInfo struct { } type gpustackModelsResponse struct { - Data []DSModel `json:"data"` + Data []ModelListItem `json:"data"` } func (g *GPUStackModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, error) { diff --git a/internal/entity/models/groq.go b/internal/entity/models/groq.go index 5f2aa09d9a..8b034681b6 100644 --- a/internal/entity/models/groq.go +++ b/internal/entity/models/groq.go @@ -288,8 +288,8 @@ type groqModelInfo struct { } type groqListModelsResponse struct { - Data []DSModel `json:"data"` - Error interface{} `json:"error"` + Data []ModelListItem `json:"data"` + Error interface{} `json:"error"` } func (g *GroqModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, error) { diff --git a/internal/entity/models/huaweicloud.go b/internal/entity/models/huaweicloud.go index 3a755f3ec4..a4795ad714 100644 --- a/internal/entity/models/huaweicloud.go +++ b/internal/entity/models/huaweicloud.go @@ -646,7 +646,7 @@ func (h *HuaweiCloudModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse } var parsed struct { - Data []DSModel `json:"data"` + Data []ModelListItem `json:"data"` } if err = json.Unmarshal(body, &parsed); err != nil { return nil, fmt.Errorf("failed to decode response: %w", err) diff --git a/internal/entity/models/jiekouai.go b/internal/entity/models/jiekouai.go index f6d7e0bdc0..31b6a19a57 100644 --- a/internal/entity/models/jiekouai.go +++ b/internal/entity/models/jiekouai.go @@ -554,7 +554,7 @@ func (j *JieKouAIModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, e } var result struct { - Data []DSModel `json:"data"` + Data []ModelListItem `json:"data"` } if err = json.Unmarshal(body, &result); err != nil { return nil, fmt.Errorf("failed to parse response: %w", err) diff --git a/internal/entity/models/jina.go b/internal/entity/models/jina.go index 4fd11f731f..b10e803915 100644 --- a/internal/entity/models/jina.go +++ b/internal/entity/models/jina.go @@ -359,10 +359,10 @@ func (j *JinaModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, error } // convert result["data"] to []map[string]interface{} - models := make([]DSModel, 0, len(result["data"].([]interface{}))) + models := make([]ModelListItem, 0, len(result["data"].([]interface{}))) for _, model := range result["data"].([]interface{}) { modelName := model.(map[string]interface{})["name"].(string) - models = append(models, DSModel{ + models = append(models, ModelListItem{ ID: modelName, OwnedBy: "", }) diff --git a/internal/entity/models/longcat.go b/internal/entity/models/longcat.go index c367faabe8..856b6c81ca 100644 --- a/internal/entity/models/longcat.go +++ b/internal/entity/models/longcat.go @@ -303,8 +303,8 @@ type longCatModelInfo struct { } type longCatListModelsResponse struct { - Data []DSModel `json:"data"` - Error interface{} `json:"error"` + Data []ModelListItem `json:"data"` + Error interface{} `json:"error"` } const longCatMaxListModelsResponseBytes = 1 << 20 diff --git a/internal/entity/models/modelscope.go b/internal/entity/models/modelscope.go index 83cd9237c1..fc9bd6c99c 100644 --- a/internal/entity/models/modelscope.go +++ b/internal/entity/models/modelscope.go @@ -51,7 +51,7 @@ type modelscopeChatResponse struct { } type modelscopeModelListResponse struct { - Data []DSModel `json:"data"` + Data []ModelListItem `json:"data"` } // NewModelScopeModel creates a new ModelScope model instance. diff --git a/internal/entity/models/n1n.go b/internal/entity/models/n1n.go index a9bac61596..7cc0f7e0a8 100644 --- a/internal/entity/models/n1n.go +++ b/internal/entity/models/n1n.go @@ -493,7 +493,7 @@ type n1nModelCatalogItem struct { } type n1nModelCatalogResponse struct { - Data []DSModel `json:"data"` + Data []ModelListItem `json:"data"` } // ListModels returns the live n1n.ai model catalog diff --git a/internal/entity/models/ollama.go b/internal/entity/models/ollama.go index 0c0878ae32..e04e02f89c 100644 --- a/internal/entity/models/ollama.go +++ b/internal/entity/models/ollama.go @@ -520,7 +520,7 @@ func (o *OllamaModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, err if name == "" { continue } - modelList.Models = append(modelList.Models, DSModel{ID: name}) + modelList.Models = append(modelList.Models, ModelListItem{ID: name}) } return ParseListModel(modelList), nil diff --git a/internal/entity/models/perplexity.go b/internal/entity/models/perplexity.go index 40d8c10e5d..6f10d9c074 100644 --- a/internal/entity/models/perplexity.go +++ b/internal/entity/models/perplexity.go @@ -281,7 +281,7 @@ type perplexityModelInfo struct { } type perplexityModelListResponse struct { - Data []DSModel `json:"data"` + Data []ModelListItem `json:"data"` } func (p *PerplexityModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, error) { @@ -326,7 +326,7 @@ func (p *PerplexityModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, return ParseListModel(ModelList{Models: wrapped.Data}), nil } - var bare []DSModel + var bare []ModelListItem if err = json.Unmarshal(body, &bare); err != nil { return nil, fmt.Errorf("failed to parse response: %w", err) } diff --git a/internal/entity/models/ppio.go b/internal/entity/models/ppio.go index 181b4489a6..aa3a6d590b 100644 --- a/internal/entity/models/ppio.go +++ b/internal/entity/models/ppio.go @@ -275,8 +275,8 @@ type ppioModelInfo struct { } type ppioListModelsResponse struct { - Data []DSModel `json:"data"` - Error interface{} `json:"error"` + Data []ModelListItem `json:"data"` + Error interface{} `json:"error"` } func (p *PPIOModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, error) { diff --git a/internal/entity/models/replicate.go b/internal/entity/models/replicate.go index ae0b16f7d8..b208bd4c8c 100644 --- a/internal/entity/models/replicate.go +++ b/internal/entity/models/replicate.go @@ -559,7 +559,7 @@ func (r *ReplicateModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, if modelName == "" { continue } - modelList.Models = append(modelList.Models, DSModel{ + modelList.Models = append(modelList.Models, ModelListItem{ ID: modelName, }) } diff --git a/internal/entity/models/togetherai.go b/internal/entity/models/togetherai.go index c1d9fae969..e137f543d4 100644 --- a/internal/entity/models/togetherai.go +++ b/internal/entity/models/togetherai.go @@ -325,7 +325,7 @@ func (t *TogetherAIModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, return nil, fmt.Errorf("API request failed with status %d: %s", resp.StatusCode, string(body)) } - var result []DSModel + var result []ModelListItem if err = json.Unmarshal(body, &result); err != nil { return nil, fmt.Errorf("failed to parse response: %w", err) } diff --git a/internal/entity/models/tokenhub.go b/internal/entity/models/tokenhub.go index a44a24198e..a01b17d342 100644 --- a/internal/entity/models/tokenhub.go +++ b/internal/entity/models/tokenhub.go @@ -473,7 +473,7 @@ func (t *TokenHubModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, e if !ok { return nil, fmt.Errorf("invalid models list format") } - modelList := ModelList{Models: make([]DSModel, 0, len(rawItems))} + modelList := ModelList{Models: make([]ModelListItem, 0, len(rawItems))} for _, raw := range rawItems { item, ok := raw.(map[string]interface{}) if !ok { @@ -484,7 +484,7 @@ func (t *TokenHubModel) ListModels(apiConfig *APIConfig) ([]ListModelResponse, e continue } ownedBy, _ := item["owned_by"].(string) - modelList.Models = append(modelList.Models, DSModel{ID: id, OwnedBy: ownedBy}) + modelList.Models = append(modelList.Models, ModelListItem{ID: id, OwnedBy: ownedBy}) } return ParseListModel(modelList), nil diff --git a/internal/entity/models/types.go b/internal/entity/models/types.go index 60f293222f..086a08b2d8 100644 --- a/internal/entity/models/types.go +++ b/internal/entity/models/types.go @@ -130,9 +130,15 @@ type TaskResponse struct { Segments []TaskSegment `json:"segments"` } +type ModelListItem struct { + ID string `json:"id"` + Object string `json:"object"` + OwnedBy string `json:"owned_by"` +} + type ModelList struct { - Object string `json:"object"` - Models []DSModel `json:"data"` + Object string `json:"object"` + Models []ModelListItem `json:"data"` } // URLSuffix represents the URL suffixes for different API endpoints diff --git a/internal/entity/models/xinference.go b/internal/entity/models/xinference.go index 8aa492b5da..79c256669b 100644 --- a/internal/entity/models/xinference.go +++ b/internal/entity/models/xinference.go @@ -53,7 +53,7 @@ type xinferenceChatResponse struct { } type xinferenceModelListResponse struct { - Data []DSModel `json:"data"` + Data []ModelListItem `json:"data"` } // NewXinferenceModel creates a new Xinference model instance.