diff --git a/cmd/climc/shell/llm/dify_sku.go b/cmd/climc/shell/llm/dify_sku.go deleted file mode 100644 index 76958943ed..0000000000 --- a/cmd/climc/shell/llm/dify_sku.go +++ /dev/null @@ -1,20 +0,0 @@ -package llm - -import ( - "yunion.io/x/onecloud/cmd/climc/shell" - modules "yunion.io/x/onecloud/pkg/mcclient/modules/llm" - base_options "yunion.io/x/onecloud/pkg/mcclient/options" - options "yunion.io/x/onecloud/pkg/mcclient/options/llm" -) - -// dify-sku commands operate on llm_sku with llm_type=dify (unified SKU table). -func init() { - cmd := shell.NewResourceCmd(&modules.LLMSku).WithKeyword("dify-sku") - cmd.List(new(options.DifySkuListOptions)) - cmd.Show(new(options.DifySkuShowOptions)) - cmd.Update(new(options.DifySkuUpdateOptions)) - cmd.Create(new(options.DifySkuCreateOptions)) - cmd.Delete(new(options.DifySkuDeleteOptions)) - cmd.Perform("public", &base_options.BasePublicOptions{}) - cmd.Perform("private", &base_options.BaseIdOptions{}) -} diff --git a/pkg/apis/llm/llm.go b/pkg/apis/llm/llm.go index 04355c245c..51d49eab51 100644 --- a/pkg/apis/llm/llm.go +++ b/pkg/apis/llm/llm.go @@ -110,9 +110,10 @@ type LLMBaseListInput struct { type LLMListInput struct { LLMBaseListInput - LLMSku string `json:"llm_sku"` - LLMImage string `json:"llm_image"` - LLMType string `json:"llm_type"` // filter by linked SKU's llm_type (e.g. dify) + LLMSku string `json:"llm_sku"` + LLMImage string `json:"llm_image"` + LLMTypes []string `json:"llm_types"` // filter by linked SKU's llm_types (e.g. [dify, openclaw]) + LLMType string `json:"llm_type"` // filter by linked SKU's llm_type (e.g. dify) } type ModelInfo struct { diff --git a/pkg/apis/llm/sku.go b/pkg/apis/llm/sku.go index 5fa4797253..47360f7c48 100644 --- a/pkg/apis/llm/sku.go +++ b/pkg/apis/llm/sku.go @@ -168,7 +168,8 @@ type LLMSkuListInput struct { apis.SharableVirtualResourceListInput MountedModelResourceListInput - LLMType string `json:"llm_type"` + LLMType string `json:"llm_type"` + LLMTypes []string `json:"llm_types"` } type LLMSkuCreateInput struct { diff --git a/pkg/llm/models/llm.go b/pkg/llm/models/llm.go index 854d3a774e..7361ebfdbb 100644 --- a/pkg/llm/models/llm.go +++ b/pkg/llm/models/llm.go @@ -145,6 +145,11 @@ func (man *SLLMManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, q = q.Join(skuQ, sqlchemy.Equals(q.Field("llm_sku_id"), skuQ.Field("id"))) q = q.Filter(sqlchemy.Equals(skuQ.Field("llm_type"), input.LLMType)) } + if len(input.LLMTypes) > 0 { + skuQ := GetLLMSkuManager().Query().SubQuery() + q = q.Join(skuQ, sqlchemy.Equals(q.Field("llm_sku_id"), skuQ.Field("id"))) + q = q.Filter(sqlchemy.In(skuQ.Field("llm_type"), input.LLMTypes)) + } return q, nil } diff --git a/pkg/llm/models/llm_sku.go b/pkg/llm/models/llm_sku.go index 91f1bc9ebf..f2fb812110 100644 --- a/pkg/llm/models/llm_sku.go +++ b/pkg/llm/models/llm_sku.go @@ -71,6 +71,9 @@ func (man *SLLMSkuManager) ListItemFilter( if len(input.LLMType) > 0 { q = q.Equals("llm_type", input.LLMType) } + if len(input.LLMTypes) > 0 { + q = q.Filter(sqlchemy.In(q.Field("llm_type"), input.LLMTypes)) + } q, err = man.SMountedModelsResourceManager.ListItemFilter(ctx, q, userCred, input.MountedModelResourceListInput) if err != nil { return nil, errors.Wrap(err, "SMountedAppsResourceManager") diff --git a/pkg/mcclient/options/llm/llm.go b/pkg/mcclient/options/llm/llm.go index 1cba8e0b8b..cd5b99a31b 100644 --- a/pkg/mcclient/options/llm/llm.go +++ b/pkg/mcclient/options/llm/llm.go @@ -28,8 +28,9 @@ type LLMBaseListOptions struct { type LLMListOptions struct { LLMBaseListOptions - LlmSku string `help:"filter by llm sku"` - LlmImage string `help:"filter by llm image"` + LlmSku string `help:"filter by llm sku"` + LlmImage string `help:"filter by llm image"` + LLMTypes []string `help:"filter by llm types"` } func (o *LLMListOptions) Params() (jsonutils.JSONObject, error) {