diff --git a/apiserver/graph/generated/generated.go b/apiserver/graph/generated/generated.go index c67d9fdf0..177dc95cc 100644 --- a/apiserver/graph/generated/generated.go +++ b/apiserver/graph/generated/generated.go @@ -538,10 +538,11 @@ type ComplexityRoot struct { } TypedObjectReference struct { - APIGroup func(childComplexity int) int - Kind func(childComplexity int) int - Name func(childComplexity int) int - Namespace func(childComplexity int) int + APIGroup func(childComplexity int) int + DisplayName func(childComplexity int) int + Kind func(childComplexity int) int + Name func(childComplexity int) int + Namespace func(childComplexity int) int } VersionedDataset struct { @@ -3260,6 +3261,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.TypedObjectReference.APIGroup(childComplexity), true + case "TypedObjectReference.displayName": + if e.complexity.TypedObjectReference.DisplayName == nil { + break + } + + return e.complexity.TypedObjectReference.DisplayName(childComplexity), true + case "TypedObjectReference.kind": if e.complexity.TypedObjectReference.Kind == nil { break @@ -5040,6 +5048,7 @@ type TypedObjectReference { apiGroup: String kind: String! name: String! + displayName: String namespace: String } @@ -15648,6 +15657,8 @@ func (ec *executionContext) fieldContext_Endpoint_authSecret(ctx context.Context return ec.fieldContext_TypedObjectReference_kind(ctx, field) case "name": return ec.fieldContext_TypedObjectReference_name(ctx, field) + case "displayName": + return ec.fieldContext_TypedObjectReference_displayName(ctx, field) case "namespace": return ec.fieldContext_TypedObjectReference_namespace(ctx, field) } @@ -16408,6 +16419,8 @@ func (ec *executionContext) fieldContext_KnowledgeBase_embedder(ctx context.Cont return ec.fieldContext_TypedObjectReference_kind(ctx, field) case "name": return ec.fieldContext_TypedObjectReference_name(ctx, field) + case "displayName": + return ec.fieldContext_TypedObjectReference_displayName(ctx, field) case "namespace": return ec.fieldContext_TypedObjectReference_namespace(ctx, field) } @@ -16459,6 +16472,8 @@ func (ec *executionContext) fieldContext_KnowledgeBase_vectorStore(ctx context.C return ec.fieldContext_TypedObjectReference_kind(ctx, field) case "name": return ec.fieldContext_TypedObjectReference_name(ctx, field) + case "displayName": + return ec.fieldContext_TypedObjectReference_displayName(ctx, field) case "namespace": return ec.fieldContext_TypedObjectReference_namespace(ctx, field) } @@ -22852,6 +22867,47 @@ func (ec *executionContext) fieldContext_TypedObjectReference_name(ctx context.C return fc, nil } +func (ec *executionContext) _TypedObjectReference_displayName(ctx context.Context, field graphql.CollectedField, obj *TypedObjectReference) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_TypedObjectReference_displayName(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.DisplayName, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2áš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_TypedObjectReference_displayName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "TypedObjectReference", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _TypedObjectReference_namespace(ctx context.Context, field graphql.CollectedField, obj *TypedObjectReference) (ret graphql.Marshaler) { fc, err := ec.fieldContext_TypedObjectReference_namespace(ctx, field) if err != nil { @@ -23272,6 +23328,8 @@ func (ec *executionContext) fieldContext_VersionedDataset_dataset(ctx context.Co return ec.fieldContext_TypedObjectReference_kind(ctx, field) case "name": return ec.fieldContext_TypedObjectReference_name(ctx, field) + case "displayName": + return ec.fieldContext_TypedObjectReference_displayName(ctx, field) case "namespace": return ec.fieldContext_TypedObjectReference_namespace(ctx, field) } @@ -24585,6 +24643,8 @@ func (ec *executionContext) fieldContext_Worker_model(ctx context.Context, field return ec.fieldContext_TypedObjectReference_kind(ctx, field) case "name": return ec.fieldContext_TypedObjectReference_name(ctx, field) + case "displayName": + return ec.fieldContext_TypedObjectReference_displayName(ctx, field) case "namespace": return ec.fieldContext_TypedObjectReference_namespace(ctx, field) } @@ -27426,6 +27486,8 @@ func (ec *executionContext) fieldContext_filegroup_source(ctx context.Context, f return ec.fieldContext_TypedObjectReference_kind(ctx, field) case "name": return ec.fieldContext_TypedObjectReference_name(ctx, field) + case "displayName": + return ec.fieldContext_TypedObjectReference_displayName(ctx, field) case "namespace": return ec.fieldContext_TypedObjectReference_namespace(ctx, field) } @@ -27518,6 +27580,8 @@ func (ec *executionContext) fieldContext_filegroupdetail_source(ctx context.Cont return ec.fieldContext_TypedObjectReference_kind(ctx, field) case "name": return ec.fieldContext_TypedObjectReference_name(ctx, field) + case "displayName": + return ec.fieldContext_TypedObjectReference_displayName(ctx, field) case "namespace": return ec.fieldContext_TypedObjectReference_namespace(ctx, field) } @@ -36020,6 +36084,8 @@ func (ec *executionContext) _TypedObjectReference(ctx context.Context, sel ast.S if out.Values[i] == graphql.Null { out.Invalids++ } + case "displayName": + out.Values[i] = ec._TypedObjectReference_displayName(ctx, field, obj) case "namespace": out.Values[i] = ec._TypedObjectReference_namespace(ctx, field, obj) default: diff --git a/apiserver/graph/generated/models_gen.go b/apiserver/graph/generated/models_gen.go index 2a7fed60b..97edbc90a 100644 --- a/apiserver/graph/generated/models_gen.go +++ b/apiserver/graph/generated/models_gen.go @@ -1174,10 +1174,11 @@ type ResourcesInput struct { } type TypedObjectReference struct { - APIGroup *string `json:"apiGroup,omitempty"` - Kind string `json:"kind"` - Name string `json:"name"` - Namespace *string `json:"namespace,omitempty"` + APIGroup *string `json:"apiGroup,omitempty"` + Kind string `json:"kind"` + Name string `json:"name"` + DisplayName *string `json:"displayName,omitempty"` + Namespace *string `json:"namespace,omitempty"` } type TypedObjectReferenceInput struct { diff --git a/apiserver/graph/schema/entrypoint.graphqls b/apiserver/graph/schema/entrypoint.graphqls index b5fa7e08c..bd8b0d0df 100644 --- a/apiserver/graph/schema/entrypoint.graphqls +++ b/apiserver/graph/schema/entrypoint.graphqls @@ -72,6 +72,7 @@ type TypedObjectReference { apiGroup: String kind: String! name: String! + displayName: String namespace: String } diff --git a/apiserver/pkg/common/common.go b/apiserver/pkg/common/common.go index 46413f458..bd1419c1d 100644 --- a/apiserver/pkg/common/common.go +++ b/apiserver/pkg/common/common.go @@ -221,3 +221,12 @@ func PagePosition(page, size, total int) (int, int) { } return start, end } + +func TypedObjectReferenceToInput(ref generated.TypedObjectReference) generated.TypedObjectReferenceInput { + return generated.TypedObjectReferenceInput{ + APIGroup: ref.APIGroup, + Kind: ref.Kind, + Namespace: ref.Namespace, + Name: ref.Name, + } +} diff --git a/apiserver/pkg/knowledgebase/knowledgebase.go b/apiserver/pkg/knowledgebase/knowledgebase.go index e8c7b5c35..7f45edc3d 100644 --- a/apiserver/pkg/knowledgebase/knowledgebase.go +++ b/apiserver/pkg/knowledgebase/knowledgebase.go @@ -18,6 +18,7 @@ package knowledgebase import ( "context" + "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -32,11 +33,13 @@ import ( "github.com/kubeagi/arcadia/pkg/utils" ) -func knowledgebase2modelConverter(obj *unstructured.Unstructured) (generated.PageNode, error) { - return knowledgebase2model(obj) +func knowledgebase2modelConverter(ctx context.Context, c dynamic.Interface) func(*unstructured.Unstructured) (generated.PageNode, error) { + return func(u *unstructured.Unstructured) (generated.PageNode, error) { + return knowledgebase2model(ctx, c, u) + } } -func knowledgebase2model(obj *unstructured.Unstructured) (*generated.KnowledgeBase, error) { +func knowledgebase2model(ctx context.Context, c dynamic.Interface, obj *unstructured.Unstructured) (*generated.KnowledgeBase, error) { knowledgebase := &v1alpha1.KnowledgeBase{} if err := utils.UnstructuredToStructured(obj, knowledgebase); err != nil { return nil, err @@ -85,6 +88,25 @@ func knowledgebase2model(obj *unstructured.Unstructured) (*generated.KnowledgeBa filegroupdetails = append(filegroupdetails, filegroupdetail) } + embedder := generated.TypedObjectReference{ + APIGroup: &apiversion, + Kind: knowledgebase.Spec.Embedder.Kind, + Name: knowledgebase.Spec.Embedder.Name, + Namespace: knowledgebase.Spec.Embedder.Namespace, + } + // read displayname + embedderUnstrctured, err := common.ResourceGet(ctx, c, common.TypedObjectReferenceToInput(embedder), metav1.GetOptions{}) + if err != nil { + displayName := fmt.Sprintf("Unknown: %s", err.Error()) + embedder.DisplayName = &displayName + } else { + embedderResource := &v1alpha1.Embedder{} + if err := utils.UnstructuredToStructured(embedderUnstrctured, embedderResource); err != nil { + return nil, err + } + embedder.DisplayName = &embedderResource.Spec.DisplayName + } + md := generated.KnowledgeBase{ ID: &id, Name: obj.GetName(), @@ -97,12 +119,7 @@ func knowledgebase2model(obj *unstructured.Unstructured) (*generated.KnowledgeBa CreationTimestamp: &creationtimestamp, UpdateTimestamp: &condition.LastTransitionTime.Time, // Embedder info - Embedder: &generated.TypedObjectReference{ - APIGroup: &apiversion, - Kind: knowledgebase.Spec.Embedder.Kind, - Name: knowledgebase.Spec.Embedder.Name, - Namespace: knowledgebase.Spec.Embedder.Namespace, - }, + Embedder: &embedder, // Vector info VectorStore: &generated.TypedObjectReference{ APIGroup: &apiversion, @@ -154,7 +171,7 @@ func CreateKnowledgeBase(ctx context.Context, c dynamic.Interface, name, namespa if err != nil { return nil, err } - kb, err := knowledgebase2model(obj) + kb, err := knowledgebase2model(ctx, c, obj) if err != nil { return nil, err } @@ -163,7 +180,12 @@ func CreateKnowledgeBase(ctx context.Context, c dynamic.Interface, name, namespa details := make([]*generated.Filegroupdetail, len(filegroups)) for index, fg := range filegroups { fgDetail := &generated.Filegroupdetail{ - Source: (*generated.TypedObjectReference)(fg.Source), + Source: &generated.TypedObjectReference{ + APIGroup: fg.Source.APIGroup, + Kind: fg.Source.Kind, + Name: fg.Source.Name, + Namespace: fg.Source.Namespace, + }, } fileDetails := make([]*generated.Filedetail, len(fg.Paths)) for findex, path := range fg.Paths { @@ -217,7 +239,7 @@ func UpdateKnowledgeBase(ctx context.Context, c dynamic.Interface, input *genera return nil, err } - return knowledgebase2model(updatedObject) + return knowledgebase2model(ctx, c, updatedObject) } func DeleteKnowledgeBase(ctx context.Context, c dynamic.Interface, name, namespace, labelSelector, fieldSelector string) (*string, error) { @@ -245,7 +267,7 @@ func ReadKnowledgeBase(ctx context.Context, c dynamic.Interface, name, namespace if err != nil { return nil, err } - return knowledgebase2model(u) + return knowledgebase2model(ctx, c, u) } func ListKnowledgeBases(ctx context.Context, c dynamic.Interface, input generated.ListKnowledgeBaseInput) (*generated.PaginatedResult, error) { @@ -281,5 +303,5 @@ func ListKnowledgeBases(ctx context.Context, c dynamic.Interface, input generate return nil, err } - return common.ListReources(us, page, pageSize, knowledgebase2modelConverter, filter...) + return common.ListReources(us, page, pageSize, knowledgebase2modelConverter(ctx, c), filter...) }