diff --git a/docs/source/contents/cli/docs/seldon.md b/docs/source/contents/cli/docs/seldon.md index ff49b9ccc9..04b3172408 100644 --- a/docs/source/contents/cli/docs/seldon.md +++ b/docs/source/contents/cli/docs/seldon.md @@ -17,4 +17,4 @@ * [seldon pipeline](seldon_pipeline.md) - manage pipelines * [seldon server](seldon_server.md) - manage servers -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_experiment.md b/docs/source/contents/cli/docs/seldon_experiment.md index 79eda67cb4..e77e8a31aa 100644 --- a/docs/source/contents/cli/docs/seldon_experiment.md +++ b/docs/source/contents/cli/docs/seldon_experiment.md @@ -31,4 +31,4 @@ seldon experiment [flags] * [seldon experiment status](seldon_experiment_status.md) - get status for experiment * [seldon experiment stop](seldon_experiment_stop.md) - stop an experiment -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_experiment_list.md b/docs/source/contents/cli/docs/seldon_experiment_list.md index 4a60bbe1bb..af35e2c625 100644 --- a/docs/source/contents/cli/docs/seldon_experiment_list.md +++ b/docs/source/contents/cli/docs/seldon_experiment_list.md @@ -28,4 +28,4 @@ seldon experiment list [flags] * [seldon experiment](seldon_experiment.md) - manage experiments -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_experiment_start.md b/docs/source/contents/cli/docs/seldon_experiment_start.md index 38de499371..0b39960c50 100644 --- a/docs/source/contents/cli/docs/seldon_experiment_start.md +++ b/docs/source/contents/cli/docs/seldon_experiment_start.md @@ -29,4 +29,4 @@ seldon experiment start [flags] * [seldon experiment](seldon_experiment.md) - manage experiments -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_experiment_status.md b/docs/source/contents/cli/docs/seldon_experiment_status.md index 3cbb09ad54..41d5f74b00 100644 --- a/docs/source/contents/cli/docs/seldon_experiment_status.md +++ b/docs/source/contents/cli/docs/seldon_experiment_status.md @@ -29,4 +29,4 @@ seldon experiment status [flags] * [seldon experiment](seldon_experiment.md) - manage experiments -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_experiment_stop.md b/docs/source/contents/cli/docs/seldon_experiment_stop.md index 22affe761b..fba35c7b1f 100644 --- a/docs/source/contents/cli/docs/seldon_experiment_stop.md +++ b/docs/source/contents/cli/docs/seldon_experiment_stop.md @@ -28,4 +28,4 @@ seldon experiment stop [flags] * [seldon experiment](seldon_experiment.md) - manage experiments -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_model.md b/docs/source/contents/cli/docs/seldon_model.md index f47e856b11..09b20a1908 100644 --- a/docs/source/contents/cli/docs/seldon_model.md +++ b/docs/source/contents/cli/docs/seldon_model.md @@ -33,4 +33,4 @@ seldon model [flags] * [seldon model status](seldon_model_status.md) - get status for model * [seldon model unload](seldon_model_unload.md) - unload a model -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_model_infer.md b/docs/source/contents/cli/docs/seldon_model_infer.md index f425845b31..04ed813970 100644 --- a/docs/source/contents/cli/docs/seldon_model_infer.md +++ b/docs/source/contents/cli/docs/seldon_model_infer.md @@ -34,4 +34,4 @@ seldon model infer (data) [flags] * [seldon model](seldon_model.md) - manage models -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_model_list.md b/docs/source/contents/cli/docs/seldon_model_list.md index 5a03e7914a..fee4f270ba 100644 --- a/docs/source/contents/cli/docs/seldon_model_list.md +++ b/docs/source/contents/cli/docs/seldon_model_list.md @@ -28,4 +28,4 @@ seldon model list [flags] * [seldon model](seldon_model.md) - manage models -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_model_load.md b/docs/source/contents/cli/docs/seldon_model_load.md index a1bacb82e7..0c430bf81e 100644 --- a/docs/source/contents/cli/docs/seldon_model_load.md +++ b/docs/source/contents/cli/docs/seldon_model_load.md @@ -29,4 +29,4 @@ seldon model load [flags] * [seldon model](seldon_model.md) - manage models -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_model_metadata.md b/docs/source/contents/cli/docs/seldon_model_metadata.md index 8523f2e7b8..da260dfea6 100644 --- a/docs/source/contents/cli/docs/seldon_model_metadata.md +++ b/docs/source/contents/cli/docs/seldon_model_metadata.md @@ -28,4 +28,4 @@ seldon model metadata [flags] * [seldon model](seldon_model.md) - manage models -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_model_status.md b/docs/source/contents/cli/docs/seldon_model_status.md index 505d967120..c8d2043da8 100644 --- a/docs/source/contents/cli/docs/seldon_model_status.md +++ b/docs/source/contents/cli/docs/seldon_model_status.md @@ -29,4 +29,4 @@ seldon model status [flags] * [seldon model](seldon_model.md) - manage models -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_model_unload.md b/docs/source/contents/cli/docs/seldon_model_unload.md index f4ce3c5a8c..a28b5655ae 100644 --- a/docs/source/contents/cli/docs/seldon_model_unload.md +++ b/docs/source/contents/cli/docs/seldon_model_unload.md @@ -28,4 +28,4 @@ seldon model unload [flags] * [seldon model](seldon_model.md) - manage models -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_pipeline.md b/docs/source/contents/cli/docs/seldon_pipeline.md index e8e43c1432..0ef2801f45 100644 --- a/docs/source/contents/cli/docs/seldon_pipeline.md +++ b/docs/source/contents/cli/docs/seldon_pipeline.md @@ -33,4 +33,4 @@ seldon pipeline [flags] * [seldon pipeline status](seldon_pipeline_status.md) - status of a pipeline * [seldon pipeline unload](seldon_pipeline_unload.md) - unload a pipeline -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_pipeline_infer.md b/docs/source/contents/cli/docs/seldon_pipeline_infer.md index d3864be2aa..8aeee80c2e 100644 --- a/docs/source/contents/cli/docs/seldon_pipeline_infer.md +++ b/docs/source/contents/cli/docs/seldon_pipeline_infer.md @@ -34,4 +34,4 @@ seldon pipeline infer (data) [flags] * [seldon pipeline](seldon_pipeline.md) - manage pipelines -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_pipeline_inspect.md b/docs/source/contents/cli/docs/seldon_pipeline_inspect.md index 8a227dee19..b79f6ee0b6 100644 --- a/docs/source/contents/cli/docs/seldon_pipeline_inspect.md +++ b/docs/source/contents/cli/docs/seldon_pipeline_inspect.md @@ -13,11 +13,13 @@ seldon pipeline inspect [flags] ### Options ``` + --format string inspect output format: raw or json. Default raw (default "raw") -h, --help help for inspect --kafka-broker string kafka broker (default "0.0.0.0:9092") --offset int message offset to start reading from, i.e. default 1 is the last message only (default 1) --request-id string request id to show, if not specified will be all messages in offset range --scheduler-host string seldon scheduler host (default "0.0.0.0:9004") + --verbose verbose output ``` ### Options inherited from parent commands @@ -31,4 +33,4 @@ seldon pipeline inspect [flags] * [seldon pipeline](seldon_pipeline.md) - manage pipelines -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_pipeline_list.md b/docs/source/contents/cli/docs/seldon_pipeline_list.md index 72e69c7c1c..bba74548ad 100644 --- a/docs/source/contents/cli/docs/seldon_pipeline_list.md +++ b/docs/source/contents/cli/docs/seldon_pipeline_list.md @@ -28,4 +28,4 @@ seldon pipeline list [flags] * [seldon pipeline](seldon_pipeline.md) - manage pipelines -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_pipeline_load.md b/docs/source/contents/cli/docs/seldon_pipeline_load.md index 4acbc05dce..7584f4e795 100644 --- a/docs/source/contents/cli/docs/seldon_pipeline_load.md +++ b/docs/source/contents/cli/docs/seldon_pipeline_load.md @@ -29,4 +29,4 @@ seldon pipeline load [flags] * [seldon pipeline](seldon_pipeline.md) - manage pipelines -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_pipeline_status.md b/docs/source/contents/cli/docs/seldon_pipeline_status.md index 8e88f82d49..dfbceabc87 100644 --- a/docs/source/contents/cli/docs/seldon_pipeline_status.md +++ b/docs/source/contents/cli/docs/seldon_pipeline_status.md @@ -29,4 +29,4 @@ seldon pipeline status [flags] * [seldon pipeline](seldon_pipeline.md) - manage pipelines -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_pipeline_unload.md b/docs/source/contents/cli/docs/seldon_pipeline_unload.md index 4147d140d2..0b3a9d8a97 100644 --- a/docs/source/contents/cli/docs/seldon_pipeline_unload.md +++ b/docs/source/contents/cli/docs/seldon_pipeline_unload.md @@ -28,4 +28,4 @@ seldon pipeline unload [flags] * [seldon pipeline](seldon_pipeline.md) - manage pipelines -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_server.md b/docs/source/contents/cli/docs/seldon_server.md index 71e73a968f..a6c61fb937 100644 --- a/docs/source/contents/cli/docs/seldon_server.md +++ b/docs/source/contents/cli/docs/seldon_server.md @@ -29,4 +29,4 @@ seldon server [flags] * [seldon server list](seldon_server_list.md) - get list of servers * [seldon server status](seldon_server_status.md) - get status for server -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_server_list.md b/docs/source/contents/cli/docs/seldon_server_list.md index 24004beda0..09d77dbc4b 100644 --- a/docs/source/contents/cli/docs/seldon_server_list.md +++ b/docs/source/contents/cli/docs/seldon_server_list.md @@ -28,4 +28,4 @@ seldon server list [flags] * [seldon server](seldon_server.md) - manage servers -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/docs/source/contents/cli/docs/seldon_server_status.md b/docs/source/contents/cli/docs/seldon_server_status.md index 2b173f6fe1..904af61df8 100644 --- a/docs/source/contents/cli/docs/seldon_server_status.md +++ b/docs/source/contents/cli/docs/seldon_server_status.md @@ -29,4 +29,4 @@ seldon server status [flags] * [seldon server](seldon_server.md) - manage servers -###### Auto generated by spf13/cobra on 13-Aug-2022 +###### Auto generated by spf13/cobra on 8-Sep-2022 diff --git a/operator/cmd/seldon/cli/pipeline_inspect.go b/operator/cmd/seldon/cli/pipeline_inspect.go index 4507272359..84a2362319 100644 --- a/operator/cmd/seldon/cli/pipeline_inspect.go +++ b/operator/cmd/seldon/cli/pipeline_inspect.go @@ -1,6 +1,8 @@ package cli import ( + "fmt" + "k8s.io/utils/env" "github.com/seldonio/seldon-core/operatorv2/pkg/cli" @@ -8,8 +10,10 @@ import ( ) const ( - OffsetFlag = "offset" - RequestIdFlag = "request-id" + offsetFlag = "offset" + requestIdFlag = "request-id" + outputFormatFlag = "format" + verboseFlag = "verbose" ) func createPipelineInspect() *cobra.Command { @@ -27,11 +31,19 @@ func createPipelineInspect() *cobra.Command { if err != nil { return err } - offset, err := cmd.Flags().GetInt64(OffsetFlag) + offset, err := cmd.Flags().GetInt64(offsetFlag) + if err != nil { + return err + } + requestId, err := cmd.Flags().GetString(requestIdFlag) + if err != nil { + return err + } + format, err := cmd.Flags().GetString(outputFormatFlag) if err != nil { return err } - requestId, err := cmd.Flags().GetString(RequestIdFlag) + verbose, err := cmd.Flags().GetBool(verboseFlag) if err != nil { return err } @@ -40,13 +52,15 @@ func createPipelineInspect() *cobra.Command { if err != nil { return err } - err = kc.InspectStep(string(data), offset, requestId) + err = kc.InspectStep(string(data), offset, requestId, format, verbose) return err }, } cmdPipelineInspect.Flags().String(kafkaBrokerFlag, env.GetString(EnvKafka, DefaultKafkaHost), "kafka broker") - cmdPipelineInspect.Flags().Int64(OffsetFlag, 1, "message offset to start reading from, i.e. default 1 is the last message only") - cmdPipelineInspect.Flags().String(RequestIdFlag, "", "request id to show, if not specified will be all messages in offset range") + cmdPipelineInspect.Flags().Int64(offsetFlag, 1, "message offset to start reading from, i.e. default 1 is the last message only") + cmdPipelineInspect.Flags().String(requestIdFlag, "", "request id to show, if not specified will be all messages in offset range") cmdPipelineInspect.Flags().String(schedulerHostFlag, env.GetString(EnvScheduler, DefaultScheduleHost), "seldon scheduler host") + cmdPipelineInspect.Flags().String(outputFormatFlag, cli.InspectFormatRaw, fmt.Sprintf("inspect output format: raw or json. Default %s", cli.InspectFormatRaw)) + cmdPipelineInspect.Flags().Bool(verboseFlag, false, "verbose output") return cmdPipelineInspect } diff --git a/operator/pkg/cli/constants.go b/operator/pkg/cli/constants.go new file mode 100644 index 0000000000..11af722bf6 --- /dev/null +++ b/operator/pkg/cli/constants.go @@ -0,0 +1,7 @@ +package cli + +// CLI constants +const ( + InspectFormatRaw = "raw" + InspectFormatJson = "json" +) diff --git a/operator/pkg/cli/kafka.go b/operator/pkg/cli/kafka.go index f842388a4c..9324924fac 100644 --- a/operator/pkg/cli/kafka.go +++ b/operator/pkg/cli/kafka.go @@ -2,11 +2,14 @@ package cli import ( "context" + "encoding/json" "fmt" "math/rand" "strings" "time" + "google.golang.org/protobuf/encoding/protojson" + "github.com/confluentinc/confluent-kafka-go/kafka" "github.com/seldonio/seldon-core/scheduler/apis/mlops/scheduler" "github.com/seldonio/seldon-core/scheduler/apis/mlops/v2_dataplane" @@ -34,6 +37,21 @@ type PipelineTopics struct { tensor string } +type KafkaInspect struct { + Topics []*KafkaInspectTopic `json:"topics"` +} + +type KafkaInspectTopic struct { + Name string `json:"name"` + Msgs []*KafkaInspectTopicMessage `json:"msgs"` +} + +type KafkaInspectTopicMessage struct { + Headers map[string]string `json:"headers"` + Key string `json:"key"` + Value json.RawMessage `json:"value"` +} + func NewKafkaClient(kafkaBroker string, schedulerHost string) (*KafkaClient, error) { s1 := rand.NewSource(time.Now().UnixNano()) r1 := rand.New(s1) @@ -92,7 +110,7 @@ func hasStep(stepName string, response *scheduler.PipelineStatusResponse) bool { return false } -func createPipelineTopics(pipelineSpec string, response *scheduler.PipelineStatusResponse) (*PipelineTopics, error) { +func createPipelineInspectTopics(pipelineSpec string, response *scheduler.PipelineStatusResponse) (*PipelineTopics, error) { parts := strings.Split(pipelineSpec, ".") switch len(parts) { case 1: //Just pipeline - show all steps and pipeline itself @@ -177,21 +195,45 @@ func (kc *KafkaClient) getPipelineStatus(pipelineSpec string) (*scheduler.Pipeli return res, nil } -func (kc *KafkaClient) InspectStep(pipelineStep string, offset int64, key string) error { +func (kc *KafkaClient) InspectStep(pipelineStep string, offset int64, key string, format string, verbose bool) error { status, err := kc.getPipelineStatus(pipelineStep) if err != nil { return err } - pipelineTopics, err := createPipelineTopics(pipelineStep, status) + pipelineTopics, err := createPipelineInspectTopics(pipelineStep, status) if err != nil { return err } + ki := KafkaInspect{} for _, topic := range pipelineTopics.topics { - err := kc.readTopic(topic, pipelineTopics.tensor, offset, key) + kit, err := kc.createInspectTopic(topic, pipelineTopics.tensor, offset, key, verbose) + if err != nil { + return err + } + ki.Topics = append(ki.Topics, kit) + } + + if format == InspectFormatJson { + b, err := json.Marshal(ki) if err != nil { return err } + fmt.Printf("%s\n", string(b)) + } else { + for _, topic := range ki.Topics { + for _, msg := range topic.Msgs { + if verbose { + fmt.Printf("%s\t%s\t%s\t", topic.Name, msg.Key, msg.Value) + for k, v := range msg.Headers { + fmt.Printf("\t%s=%s", k, v) + } + fmt.Println("") + } else { + fmt.Printf("%s\t%s\t%s\n", topic.Name, msg.Key, msg.Value) + } + } + } } // Fast close requires maybe: https://github.com/confluentinc/confluent-kafka-go/pull/757 @@ -199,11 +241,13 @@ func (kc *KafkaClient) InspectStep(pipelineStep string, offset int64, key string return nil } -func (kc *KafkaClient) readTopic(topic string, tensor string, offset int64, key string) error { - fmt.Printf("---\n%s\n", topic) +func (kc *KafkaClient) createInspectTopic(topic string, tensor string, offset int64, key string, verbose bool) (*KafkaInspectTopic, error) { + kit := KafkaInspectTopic{ + Name: topic, + } err := kc.subscribeAndSetOffset(topic, offset) if err != nil { - return err + return nil, err } ctx, cancel := context.WithTimeout(context.Background(), kafkaTimeoutSeconds*time.Second) @@ -225,48 +269,62 @@ func (kc *KafkaClient) readTopic(topic string, tensor string, offset int64, key case *kafka.Message: seen = seen + 1 if (string(e.Key) == key) || key == "" { - err := showKafkaMsg(e, topic, tensor) + kitm, err := createKafkaMsg(e, topic, tensor, verbose) if err != nil { - return err + return nil, err } + kit.Msgs = append(kit.Msgs, kitm) } if seen >= offset { run = false } case kafka.Error: - fmt.Printf("Kafka error %s", e.Error()) + return nil, fmt.Errorf(e.Error()) default: continue } } } - return nil + return &kit, nil } -func printHeaders(e *kafka.Message) { - fmt.Println("Headers") +func addInspectHeaders(e *kafka.Message, kitm *KafkaInspectTopicMessage) { + kitm.Headers = make(map[string]string) for _, header := range e.Headers { - fmt.Printf("\t%s\n", header.String()) + kitm.Headers[header.Key] = string(header.Value) } } -func showKafkaMsg(e *kafka.Message, topic string, tensor string) error { - fmt.Printf("Key: %s:\n", string(e.Key)) - printHeaders(e) - fmt.Printf("\t") +func createKafkaMsg(e *kafka.Message, topic string, tensor string, verbose bool) (*KafkaInspectTopicMessage, error) { + kitm := KafkaInspectTopicMessage{ + Key: string(e.Key), + } + if verbose { // Only add headers in verbose mode + addInspectHeaders(e, &kitm) + } + var err error if strings.HasSuffix(topic, OutputsSpecifier) { - return showKafkaOutputMsg(e, tensor) + err = addInspectKafkaOutputMsg(e, tensor, &kitm) } else { - return showKafkaInputMsg(e, tensor) + err = addInspectKafkaInputMsg(e, tensor, &kitm) + } + return &kitm, err +} + +func protoTojson(msg proto.Message) (json.RawMessage, error) { + b, err := protojson.Marshal(msg) + if err != nil { + return nil, err } + return b, nil } -func showKafkaOutputMsg(e *kafka.Message, tensor string) error { +func addInspectKafkaOutputMsg(e *kafka.Message, tensor string, kitm *KafkaInspectTopicMessage) error { res := &v2_dataplane.ModelInferResponse{} err := proto.Unmarshal(e.Value, res) if err != nil { - fmt.Printf("%s\n", string(e.Value)) + kitm.Value = json.RawMessage(e.Value) return nil } err = updateResponseFromRawContents(res) @@ -276,21 +334,27 @@ func showKafkaOutputMsg(e *kafka.Message, tensor string) error { if tensor != "" { for _, output := range res.Outputs { if output.Name == tensor { - printProto(output) + kitm.Value, err = protoTojson(output) + if err != nil { + return err + } } } } else { - printProto(res) + kitm.Value, err = protoTojson(res) + if err != nil { + return err + } } return nil } -func showKafkaInputMsg(e *kafka.Message, tensor string) error { +func addInspectKafkaInputMsg(e *kafka.Message, tensor string, kitm *KafkaInspectTopicMessage) error { req := &v2_dataplane.ModelInferRequest{} err := proto.Unmarshal(e.Value, req) if err != nil { - fmt.Printf("%s\n", string(e.Value)) + kitm.Value = json.RawMessage(e.Value) return nil } err = updateRequestFromRawContents(req) @@ -300,12 +364,18 @@ func showKafkaInputMsg(e *kafka.Message, tensor string) error { if tensor != "" { for _, input := range req.Inputs { if input.Name == tensor { - printProto(input) + kitm.Value, err = protoTojson(input) + if err != nil { + return err + } } } } else { - printProto(req) + kitm.Value, err = protoTojson(req) + if err != nil { + return err + } } return nil } diff --git a/samples/pipeline-examples.ipynb b/samples/pipeline-examples.ipynb index 311def8ee7..419561860f 100644 --- a/samples/pipeline-examples.ipynb +++ b/samples/pipeline-examples.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "0f2ab2a3", "metadata": {}, "outputs": [ @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "f9e073d7", "metadata": {}, "outputs": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "997b4028", "metadata": {}, "outputs": [ @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "3d017ede", "metadata": {}, "outputs": [ @@ -129,7 +129,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "following-winning", "metadata": {}, "outputs": [ @@ -147,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "artistic-kentucky", "metadata": {}, "outputs": [ @@ -161,7 +161,7 @@ " {\r\n", " \"pipeline\": {\r\n", " \"name\": \"tfsimples\",\r\n", - " \"uid\": \"cbkk8dnje7k1k4uqoir0\",\r\n", + " \"uid\": \"cccdkdtjc642bejao6h0\",\r\n", " \"version\": 1,\r\n", " \"steps\": [\r\n", " {\r\n", @@ -183,15 +183,13 @@ " \"tfsimple2.outputs\"\r\n", " ]\r\n", " },\r\n", - " \"kubernetesMeta\": {\r\n", - " \"namespace\": \"seldon-mesh\"\r\n", - " }\r\n", + " \"kubernetesMeta\": {}\r\n", " },\r\n", " \"state\": {\r\n", " \"pipelineVersion\": 1,\r\n", " \"status\": \"PipelineReady\",\r\n", - " \"reason\": \"Created pipeline\",\r\n", - " \"lastChangeTimestamp\": \"2022-08-05T06:12:26.321828296Z\"\r\n", + " \"reason\": \"created pipeline\",\r\n", + " \"lastChangeTimestamp\": \"2022-09-07T17:51:52.899707821Z\"\r\n", " }\r\n", " }\r\n", " ]\r\n", @@ -205,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "87f10a5c", "metadata": {}, "outputs": [ @@ -250,7 +248,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "5c33133e", "metadata": {}, "outputs": [ @@ -332,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 1, "id": "126144a5", "metadata": {}, "outputs": [ @@ -340,24 +338,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "---\n", - "seldon.default.model.tfsimple1.inputs\n", - "cbmbeglvqj3k9ho9hr6g:{\"inputs\":[{\"name\":\"INPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{\"name\":\"INPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}}]}\n", - "---\n", - "seldon.default.model.tfsimple1.outputs\n", - "cbmbeglvqj3k9ho9hr6g:{\"modelName\":\"tfsimple1_1\",\"modelVersion\":\"1\",\"outputs\":[{\"name\":\"OUTPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{\"name\":\"OUTPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],\"rawOutputContents\":[\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\"]}\n", - "---\n", - "seldon.default.model.tfsimple2.inputs\n", - "cbmbeglvqj3k9ho9hr6g:{\"inputs\":[{\"name\":\"INPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{\"name\":\"INPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],\"rawInputContents\":[\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\"]}\n", - "---\n", - "seldon.default.model.tfsimple2.outputs\n", - "cbmbeglvqj3k9ho9hr6g:{\"modelName\":\"tfsimple2_1\",\"modelVersion\":\"1\",\"outputs\":[{\"name\":\"OUTPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{\"name\":\"OUTPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}}],\"rawOutputContents\":[\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\",\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\"]}\n", - "---\n", - "seldon.default.pipeline.tfsimples.inputs\n", - "cbmbeglvqj3k9ho9hr6g:{\"modelName\":\"tfsimples\",\"inputs\":[{\"name\":\"INPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{\"name\":\"INPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}}]}\n", - "---\n", - "seldon.default.pipeline.tfsimples.outputs\n", - "cbmbeglvqj3k9ho9hr6g:{\"outputs\":[{\"name\":\"OUTPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{\"name\":\"OUTPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}}],\"rawOutputContents\":[\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\",\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\"]}\n" + "seldon.default.model.tfsimple1.inputs\tcccdkfmbonj8ei29pg80\t{\"inputs\":[{\"name\":\"INPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{\"name\":\"INPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}}]}\r\n", + "seldon.default.model.tfsimple1.outputs\tcccdkfmbonj8ei29pg80\t{\"modelName\":\"tfsimple1_1\",\"modelVersion\":\"1\",\"outputs\":[{\"name\":\"OUTPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{\"name\":\"OUTPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],\"rawOutputContents\":[\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\"]}\r\n", + "seldon.default.model.tfsimple2.inputs\tcccdkfmbonj8ei29pg80\t{\"inputs\":[{\"name\":\"INPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{\"name\":\"INPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],\"rawInputContents\":[\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\"]}\r\n", + "seldon.default.model.tfsimple2.outputs\tcccdkfmbonj8ei29pg80\t{\"modelName\":\"tfsimple2_1\",\"modelVersion\":\"1\",\"outputs\":[{\"name\":\"OUTPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{\"name\":\"OUTPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}}],\"rawOutputContents\":[\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\",\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\"]}\r\n", + "seldon.default.pipeline.tfsimples.inputs\tcccdkfmbonj8ei29pg80\t{\"modelName\":\"tfsimples\",\"inputs\":[{\"name\":\"INPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{\"name\":\"INPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}}]}\r\n", + "seldon.default.pipeline.tfsimples.outputs\tcccdkfmbonj8ei29pg80\t{\"outputs\":[{\"name\":\"OUTPUT0\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{\"name\":\"OUTPUT1\",\"datatype\":\"INT32\",\"shape\":[\"1\",\"16\"],\"contents\":{\"intContents\":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}}],\"rawOutputContents\":[\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\",\"AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==\"]}\r\n" ] } ], @@ -365,6 +351,83 @@ "!seldon pipeline inspect tfsimples" ] }, + { + "cell_type": "code", + "execution_count": 2, + "id": "10b5bca0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1;39m{\r\n", + " \u001b[0m\u001b[34;1m\"inputs\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[1;39m[\r\n", + " \u001b[1;39m{\r\n", + " \u001b[0m\u001b[34;1m\"name\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[0;32m\"INPUT0\"\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0m\u001b[34;1m\"datatype\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[0;32m\"INT32\"\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0m\u001b[34;1m\"shape\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[1;39m[\r\n", + " \u001b[0;32m\"1\"\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;32m\"16\"\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m]\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0m\u001b[34;1m\"contents\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[1;39m{\r\n", + " \u001b[0m\u001b[34;1m\"intContents\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[1;39m[\r\n", + " \u001b[0;39m1\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m2\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m3\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m4\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m5\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m6\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m7\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m8\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m9\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m10\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m11\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m12\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m13\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m14\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m15\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m16\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m]\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m}\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m}\u001b[0m\u001b[1;39m,\r\n", + " \u001b[1;39m{\r\n", + " \u001b[0m\u001b[34;1m\"name\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[0;32m\"INPUT1\"\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0m\u001b[34;1m\"datatype\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[0;32m\"INT32\"\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0m\u001b[34;1m\"shape\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[1;39m[\r\n", + " \u001b[0;32m\"1\"\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;32m\"16\"\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m]\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0m\u001b[34;1m\"contents\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[1;39m{\r\n", + " \u001b[0m\u001b[34;1m\"intContents\"\u001b[0m\u001b[1;39m: \u001b[0m\u001b[1;39m[\r\n", + " \u001b[0;39m1\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m2\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m3\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m4\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m5\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m6\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m7\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m8\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m9\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m10\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m11\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m12\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m13\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m14\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m15\u001b[0m\u001b[1;39m,\r\n", + " \u001b[0;39m16\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m]\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m}\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m}\u001b[0m\u001b[1;39m\r\n", + " \u001b[1;39m]\u001b[0m\u001b[1;39m\r\n", + "\u001b[1;39m}\u001b[0m\r\n" + ] + } + ], + "source": [ + "!seldon pipeline inspect tfsimples --format json | jq .topics[0].msgs[0].value" + ] + }, { "cell_type": "code", "execution_count": 11, diff --git a/samples/pipeline-examples.md b/samples/pipeline-examples.md index 0170d644b9..d00dd6a9b9 100644 --- a/samples/pipeline-examples.md +++ b/samples/pipeline-examples.md @@ -92,7 +92,7 @@ seldon pipeline status tfsimples -w PipelineReady| jq -M . { "pipeline": { "name": "tfsimples", - "uid": "cbkk8dnje7k1k4uqoir0", + "uid": "cccdkdtjc642bejao6h0", "version": 1, "steps": [ { @@ -114,15 +114,13 @@ seldon pipeline status tfsimples -w PipelineReady| jq -M . "tfsimple2.outputs" ] }, - "kubernetesMeta": { - "namespace": "seldon-mesh" - } + "kubernetesMeta": {} }, "state": { "pipelineVersion": 1, "status": "PipelineReady", - "reason": "Created pipeline", - "lastChangeTimestamp": "2022-08-05T06:12:26.321828296Z" + "reason": "created pipeline", + "lastChangeTimestamp": "2022-09-07T17:51:52.899707821Z" } } ] @@ -241,24 +239,79 @@ seldon pipeline inspect tfsimples ``` ```json - --- - seldon.default.model.tfsimple1.inputs - cbmbeglvqj3k9ho9hr6g:{"inputs":[{"name":"INPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{"name":"INPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}}]} - --- - seldon.default.model.tfsimple1.outputs - cbmbeglvqj3k9ho9hr6g:{"modelName":"tfsimple1_1","modelVersion":"1","outputs":[{"name":"OUTPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{"name":"OUTPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],"rawOutputContents":["AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="]} - --- - seldon.default.model.tfsimple2.inputs - cbmbeglvqj3k9ho9hr6g:{"inputs":[{"name":"INPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{"name":"INPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],"rawInputContents":["AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="]} - --- - seldon.default.model.tfsimple2.outputs - cbmbeglvqj3k9ho9hr6g:{"modelName":"tfsimple2_1","modelVersion":"1","outputs":[{"name":"OUTPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{"name":"OUTPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}}],"rawOutputContents":["AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==","AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA=="]} - --- - seldon.default.pipeline.tfsimples.inputs - cbmbeglvqj3k9ho9hr6g:{"modelName":"tfsimples","inputs":[{"name":"INPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{"name":"INPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}}]} - --- - seldon.default.pipeline.tfsimples.outputs - cbmbeglvqj3k9ho9hr6g:{"outputs":[{"name":"OUTPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{"name":"OUTPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}}],"rawOutputContents":["AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==","AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA=="]} + seldon.default.model.tfsimple1.inputs cccdkfmbonj8ei29pg80 {"inputs":[{"name":"INPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{"name":"INPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}}]} + seldon.default.model.tfsimple1.outputs cccdkfmbonj8ei29pg80 {"modelName":"tfsimple1_1","modelVersion":"1","outputs":[{"name":"OUTPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{"name":"OUTPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],"rawOutputContents":["AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="]} + seldon.default.model.tfsimple2.inputs cccdkfmbonj8ei29pg80 {"inputs":[{"name":"INPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{"name":"INPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],"rawInputContents":["AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="]} + seldon.default.model.tfsimple2.outputs cccdkfmbonj8ei29pg80 {"modelName":"tfsimple2_1","modelVersion":"1","outputs":[{"name":"OUTPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{"name":"OUTPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}}],"rawOutputContents":["AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==","AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA=="]} + seldon.default.pipeline.tfsimples.inputs cccdkfmbonj8ei29pg80 {"modelName":"tfsimples","inputs":[{"name":"INPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{"name":"INPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}}]} + seldon.default.pipeline.tfsimples.outputs cccdkfmbonj8ei29pg80 {"outputs":[{"name":"OUTPUT0","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}},{"name":"OUTPUT1","datatype":"INT32","shape":["1","16"],"contents":{"intContents":[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]}}],"rawOutputContents":["AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA==","AgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGgAAABwAAAAeAAAAIAAAAA=="]} +``` + +```bash +seldon pipeline inspect tfsimples --format json | jq .topics[0].msgs[0].value +``` +```json + + { + "inputs": [ + { + "name": "INPUT0", + "datatype": "INT32", + "shape": [ + "1", + "16" + ], + "contents": { + "intContents": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ] + } + }, + { + "name": "INPUT1", + "datatype": "INT32", + "shape": [ + "1", + "16" + ], + "contents": { + "intContents": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ] + } + } + ] + } ``` ```bash