package main import ( "bytes" "context" "encoding/json" "fmt" "net/http" "strings" "git.cin.su/m/Assistant/contracts/capability" ) type coreTaskEvaluationSink struct { baseURL string client *http.Client } func newCoreTaskEvaluationSink(baseURL string, client *http.Client) (*coreTaskEvaluationSink, error) { baseURL = strings.TrimRight(strings.TrimSpace(baseURL), "/") if baseURL == "" { return nil, fmt.Errorf("core runtime URL is required") } if client == nil { client = http.DefaultClient } return &coreTaskEvaluationSink{baseURL: baseURL, client: client}, nil } func (s *coreTaskEvaluationSink) SaveTaskEvaluation(ctx context.Context, value capability.TaskEvaluation) error { payload, err := json.Marshal(value) if err != nil { return err } request, err := http.NewRequestWithContext(ctx, http.MethodPost, s.baseURL+"/v1/cognitive-registry/task-evaluations", bytes.NewReader(payload)) if err != nil { return err } request.Header.Set("Content-Type", "application/json") response, err := s.client.Do(request) if err != nil { return err } defer response.Body.Close() if response.StatusCode < 200 || response.StatusCode >= 300 { return fmt.Errorf("save task evaluation: status %s", response.Status) } return nil }