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 {