Add basic business logic of training a model on a dataset and returning a model

Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com>
This commit is contained in:
Darko Draskovic
2023-09-18 15:05:06 +02:00
parent a3c4664497
commit 4d09a9f4c3
9 changed files with 39 additions and 40 deletions
+11 -6
View File
@@ -1,12 +1,13 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc v4.23.3
// protoc-gen-go v1.25.0
// protoc v3.12.4
// source: agent/agent.proto
package agent
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -20,6 +21,10 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type RunRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -213,7 +218,7 @@ type DataRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Dataset string `protobuf:"bytes,1,opt,name=dataset,proto3" json:"dataset,omitempty"`
Dataset []byte `protobuf:"bytes,1,opt,name=dataset,proto3" json:"dataset,omitempty"`
}
func (x *DataRequest) Reset() {
@@ -248,11 +253,11 @@ func (*DataRequest) Descriptor() ([]byte, []int) {
return file_agent_agent_proto_rawDescGZIP(), []int{4}
}
func (x *DataRequest) GetDataset() string {
func (x *DataRequest) GetDataset() []byte {
if x != nil {
return x.Dataset
}
return ""
return nil
}
type DataResponse struct {
@@ -405,7 +410,7 @@ var file_agent_agent_proto_rawDesc = []byte{
0x72, 0x69, 0x74, 0x68, 0x6d, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61,
0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x49, 0x44, 0x22, 0x27, 0x0a, 0x0b, 0x44, 0x61,
0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x61, 0x74,
0x61, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61,
0x61, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61,
0x73, 0x65, 0x74, 0x22, 0x2c, 0x0a, 0x0c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x44,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49,
+2 -4
View File
@@ -19,12 +19,10 @@ message AlgoRequest { bytes algorithm = 1; }
message AlgoResponse { string algorithmID = 1; }
message DataRequest { string dataset = 1; }
message DataRequest { bytes dataset = 1; }
message DataResponse { string datasetID = 1; }
message ResultRequest {}
message ResultResponse {
bytes file = 1;
}
message ResultResponse { bytes file = 1; }
+8 -19
View File
@@ -1,8 +1,4 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.3.0
// - protoc v4.23.3
// source: agent/agent.proto
package agent
@@ -18,13 +14,6 @@ import (
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
const (
AgentService_Run_FullMethodName = "/agent.AgentService/Run"
AgentService_Algo_FullMethodName = "/agent.AgentService/Algo"
AgentService_Data_FullMethodName = "/agent.AgentService/Data"
AgentService_Result_FullMethodName = "/agent.AgentService/Result"
)
// AgentServiceClient is the client API for AgentService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
@@ -45,7 +34,7 @@ func NewAgentServiceClient(cc grpc.ClientConnInterface) AgentServiceClient {
func (c *agentServiceClient) Run(ctx context.Context, in *RunRequest, opts ...grpc.CallOption) (*RunResponse, error) {
out := new(RunResponse)
err := c.cc.Invoke(ctx, AgentService_Run_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, "/agent.AgentService/Run", in, out, opts...)
if err != nil {
return nil, err
}
@@ -54,7 +43,7 @@ func (c *agentServiceClient) Run(ctx context.Context, in *RunRequest, opts ...gr
func (c *agentServiceClient) Algo(ctx context.Context, in *AlgoRequest, opts ...grpc.CallOption) (*AlgoResponse, error) {
out := new(AlgoResponse)
err := c.cc.Invoke(ctx, AgentService_Algo_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, "/agent.AgentService/Algo", in, out, opts...)
if err != nil {
return nil, err
}
@@ -63,7 +52,7 @@ func (c *agentServiceClient) Algo(ctx context.Context, in *AlgoRequest, opts ...
func (c *agentServiceClient) Data(ctx context.Context, in *DataRequest, opts ...grpc.CallOption) (*DataResponse, error) {
out := new(DataResponse)
err := c.cc.Invoke(ctx, AgentService_Data_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, "/agent.AgentService/Data", in, out, opts...)
if err != nil {
return nil, err
}
@@ -72,7 +61,7 @@ func (c *agentServiceClient) Data(ctx context.Context, in *DataRequest, opts ...
func (c *agentServiceClient) Result(ctx context.Context, in *ResultRequest, opts ...grpc.CallOption) (*ResultResponse, error) {
out := new(ResultResponse)
err := c.cc.Invoke(ctx, AgentService_Result_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, "/agent.AgentService/Result", in, out, opts...)
if err != nil {
return nil, err
}
@@ -129,7 +118,7 @@ func _AgentService_Run_Handler(srv interface{}, ctx context.Context, dec func(in
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: AgentService_Run_FullMethodName,
FullMethod: "/agent.AgentService/Run",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AgentServiceServer).Run(ctx, req.(*RunRequest))
@@ -147,7 +136,7 @@ func _AgentService_Algo_Handler(srv interface{}, ctx context.Context, dec func(i
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: AgentService_Algo_FullMethodName,
FullMethod: "/agent.AgentService/Algo",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AgentServiceServer).Algo(ctx, req.(*AlgoRequest))
@@ -165,7 +154,7 @@ func _AgentService_Data_Handler(srv interface{}, ctx context.Context, dec func(i
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: AgentService_Data_FullMethodName,
FullMethod: "/agent.AgentService/Data",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AgentServiceServer).Data(ctx, req.(*DataRequest))
@@ -183,7 +172,7 @@ func _AgentService_Result_Handler(srv interface{}, ctx context.Context, dec func
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: AgentService_Result_FullMethodName,
FullMethod: "/agent.AgentService/Result",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AgentServiceServer).Result(ctx, req.(*ResultRequest))
+1 -1
View File
@@ -25,7 +25,7 @@ func (req algoReq) validate() error {
}
type dataReq struct {
Dataset string `protobuf:"bytes,1,opt,name=dataset,proto3" json:"dataset,omitempty"`
Dataset []byte `protobuf:"bytes,1,opt,name=dataset,proto3" json:"dataset,omitempty"`
}
func (req dataReq) validate() error {
+1 -1
View File
@@ -53,7 +53,7 @@ func (lm *loggingMiddleware) Algo(ctx context.Context, algorithm []byte) (respon
return lm.svc.Algo(ctx, algorithm)
}
func (lm *loggingMiddleware) Data(ctx context.Context, dataset string) (response string, err error) {
func (lm *loggingMiddleware) Data(ctx context.Context, dataset []byte) (response string, err error) {
defer func(begin time.Time) {
message := fmt.Sprintf("Method Data took %s to complete", time.Since(begin))
if err != nil {
+1 -1
View File
@@ -50,7 +50,7 @@ func (ms *metricsMiddleware) Algo(ctx context.Context, algorithm []byte) (string
return ms.svc.Algo(ctx, algorithm)
}
func (ms *metricsMiddleware) Data(ctx context.Context, dataset string) (string, error) {
func (ms *metricsMiddleware) Data(ctx context.Context, dataset []byte) (string, error) {
defer func(begin time.Time) {
ms.counter.With("method", "data").Add(1)
ms.latency.With("method", "data").Observe(time.Since(begin).Seconds())
+12 -3
View File
@@ -26,11 +26,14 @@ type Metadata map[string]interface{}
type Service interface {
Run(ctx context.Context, cmp Computation) (string, error)
Algo(ctx context.Context, algorithm []byte) (string, error)
Data(ctx context.Context, dataset string) (string, error)
Data(ctx context.Context, dataset []byte) (string, error)
Result(ctx context.Context) ([]byte, error)
}
type agentService struct {
computation Computation
algorithms [][]byte
datasets [][]byte
}
var _ Service = (*agentService)(nil)
@@ -40,12 +43,14 @@ func New() Service {
return &agentService{}
}
func (ks *agentService) Run(ctx context.Context, cmp Computation) (string, error) {
func (as *agentService) Run(ctx context.Context, cmp Computation) (string, error) {
cmpJSON, err := json.Marshal(cmp)
if err != nil {
return "", err
}
as.computation = cmp
return string(cmpJSON), nil // return the JSON string as the function's string return value
}
@@ -53,6 +58,8 @@ func (as *agentService) Algo(ctx context.Context, algorithm []byte) (string, err
// Implement the logic for the Algo method based on your requirements
// Use the provided ctx and algorithm parameters as needed
as.algorithms = append(as.algorithms, algorithm)
// Perform some processing on the algorithm byte array
// For example, generate a unique ID for the algorithm
algorithmID := "algo123"
@@ -61,10 +68,12 @@ func (as *agentService) Algo(ctx context.Context, algorithm []byte) (string, err
return algorithmID, nil
}
func (as *agentService) Data(ctx context.Context, dataset string) (string, error) {
func (as *agentService) Data(ctx context.Context, dataset []byte) (string, error) {
// Implement the logic for the Data method based on your requirements
// Use the provided ctx and dataset parameters as needed
as.datasets = append(as.datasets, dataset)
// Perform some processing on the dataset string
// For example, generate a unique ID for the dataset
datasetID := "dataset456"
+2 -4
View File
@@ -44,10 +44,8 @@ func (tm *tracingMiddleware) Algo(ctx context.Context, algorithm []byte) (string
return tm.svc.Algo(ctx, algorithm)
}
func (tm *tracingMiddleware) Data(ctx context.Context, dataset string) (string, error) {
ctx, span := tm.tracer.Start(ctx, "data", trace.WithAttributes(
attribute.String("dataset", dataset),
))
func (tm *tracingMiddleware) Data(ctx context.Context, dataset []byte) (string, error) {
ctx, span := tm.tracer.Start(ctx, "data")
defer span.End()
return tm.svc.Data(ctx, dataset)
+1 -1
View File
@@ -73,7 +73,7 @@ func (sdk *AgentSDK) UploadAlgorithm(algorithm []byte) (string, error) {
return response.AlgorithmID, nil
}
func (sdk *AgentSDK) UploadDataset(dataset string) (string, error) {
func (sdk *AgentSDK) UploadDataset(dataset []byte) (string, error) {
request := &agent.DataRequest{
Dataset: dataset,
}