fix

Change-Id: Ia5e1fb50a364e8d2ad9e37a1d2cad7dbed4799ed
diff --git a/dodo_tools/dodo.go b/dodo_tools/dodo.go
index 2d113cb..eee786c 100644
--- a/dodo_tools/dodo.go
+++ b/dodo_tools/dodo.go
@@ -37,27 +37,27 @@
 	Config string `json:"config"`
 }
 
-func (d *GetProjectConfigTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *GetProjectConfigTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	resp, err := http.Get(fmt.Sprintf("%s/api/project/%s/config", d.apiBaseAddress, d.projectId))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to get project config: %s", string(body))
+		return llm.ErrorfToolOut("failed to get project config: %s", string(body))
 	}
 	output := GetProjectConfigOutput{
 		Config: string(body),
 	}
 	jsonOutput, err := json.Marshal(output)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
-	return llm.TextContent(string(jsonOutput)), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string(jsonOutput))}
 }
 
 // Env
@@ -157,28 +157,28 @@
 	EnvVars     []EnvVar  `json:"envVars"`
 }
 
-func (d *GetProjectEnvTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *GetProjectEnvTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	resp, err := http.Get(fmt.Sprintf("%s/api/project/%s/env", d.apiBaseAddress, d.projectId))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to get project env: %s", string(body))
+		return llm.ErrorfToolOut("failed to get project env: %s", string(body))
 	}
 	var output GetProjectEnvOutput
 	if err := json.Unmarshal(body, &output); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	jsonOutput, err := json.Marshal(output)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
-	return llm.TextContent(string(jsonOutput)), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string(jsonOutput))}
 }
 
 // Validate
@@ -224,32 +224,32 @@
 	Errors  any  `json:"errors,omitempty"`
 }
 
-func (d *ValidateConfigTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *ValidateConfigTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	var input ValidateConfigInput
 	if err := json.Unmarshal(m, &input); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	resp, err := http.Post(fmt.Sprintf("%s/api/validate-config", d.apiBaseAddress), "application/json", bytes.NewBuffer([]byte(input.Config)))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to validate config: %s", string(body))
+		return llm.ErrorfToolOut("failed to validate config: %s", string(body))
 	}
 	var output ValidateConfigOutput
 	if err := json.Unmarshal(body, &output); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	jsonOutput, err := json.Marshal(output)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
-	return llm.TextContent(string(jsonOutput)), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string(jsonOutput))}
 }
 
 type DeployProjectTool struct {
@@ -276,27 +276,27 @@
 	Type string `json:"type"`
 }
 
-func (d *DeployProjectTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *DeployProjectTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	req := deployProjectReq{
 		Type: "draft",
 	}
 	jsonReq, err := json.Marshal(req)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	resp, err := http.Post(fmt.Sprintf("%s/api/project/%s/deploy", d.apiBaseAddress, d.projectId), "application/json", bytes.NewBuffer(jsonReq))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to deploy project: %s", string(body))
+		return llm.ErrorfToolOut("failed to deploy project: %s", string(body))
 	}
-	return llm.TextContent(string("Project deployed successfully")), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string("Project deployed successfully"))}
 }
 
 // Save
@@ -345,34 +345,34 @@
 	Config map[string]any `json:"config"`
 }
 
-func (d *SaveProjectTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *SaveProjectTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	var input SaveProjectInput
 	if err := json.Unmarshal(m, &input); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	req := saveProjectReq{
 		Type: "config",
 	}
 	if err := json.Unmarshal([]byte(input.Config), &req.Config); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	jsonReq, err := json.Marshal(req)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	resp, err := http.Post(fmt.Sprintf("%s/api/project/%s/saved", d.apiBaseAddress, d.projectId), "application/json", bytes.NewBuffer(jsonReq))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to save project: %s", string(body))
+		return llm.ErrorfToolOut("failed to save project: %s", string(body))
 	}
-	return llm.TextContent(string("Project saved successfully")), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string("Project saved successfully"))}
 }
 
 func NewDodoTools(apiBaseAddress string, projectId string) []*llm.Tool {