Skip to content

Commit c40a6f5

Browse files
committed
feat: add workspace API to SDK
This change also changes the error behavior when running tools that are simply wrapped commands. Previously, all such tools would not return an error, rather an error message in hopes that the LLM would retry. However, if the tool is just a command (i.e. has no parent), then it should return an error so that the caller doesn't have to guess whether an error occurred. Signed-off-by: Donnie Adams <[email protected]>
1 parent 6ec5178 commit c40a6f5

File tree

4 files changed

+343
-7
lines changed

4 files changed

+343
-7
lines changed

pkg/engine/cmd.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,13 @@ func (e *Engine) runCommand(ctx Context, tool types.Tool, input string, toolCate
154154
result = stdout
155155

156156
if err := cmd.Run(); err != nil {
157-
if toolCategory == NoCategory {
157+
if toolCategory == NoCategory && ctx.Parent != nil {
158+
// If this is a sub-call, then don't return the error; return the error as a message so that the LLM can retry.
158159
return fmt.Sprintf("ERROR: got (%v) while running tool, OUTPUT: %s", err, stdoutAndErr), nil
159160
}
160161
log.Errorf("failed to run tool [%s] cmd %v: %v", tool.Parameters.Name, cmd.Args, err)
161162
combinedOutput = stdoutAndErr.String()
162-
return "", fmt.Errorf("ERROR: %s: %w", result, err)
163+
return "", fmt.Errorf("ERROR: %s: %w", stdoutAndErr, err)
163164
}
164165

165166
combinedOutput = stdoutAndErr.String()

pkg/sdkserver/datasets.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func (s *server) listDatasets(w http.ResponseWriter, r *http.Request) {
6262
return
6363
}
6464

65-
prg, err := loader.Program(r.Context(), "List Datasets from "+req.getToolRepo(), "", loader.Options{
65+
prg, err := loader.Program(r.Context(), req.getToolRepo(), "List Datasets", loader.Options{
6666
Cache: g.Cache,
6767
})
6868

@@ -123,7 +123,7 @@ func (s *server) createDataset(w http.ResponseWriter, r *http.Request) {
123123
return
124124
}
125125

126-
prg, err := loader.Program(r.Context(), "Create Dataset from "+req.getToolRepo(), "", loader.Options{
126+
prg, err := loader.Program(r.Context(), req.getToolRepo(), "Create Dataset", loader.Options{
127127
Cache: g.Cache,
128128
})
129129

@@ -192,7 +192,7 @@ func (s *server) addDatasetElement(w http.ResponseWriter, r *http.Request) {
192192
return
193193
}
194194

195-
prg, err := loader.Program(r.Context(), "Add Element from "+req.getToolRepo(), "", loader.Options{
195+
prg, err := loader.Program(r.Context(), req.getToolRepo(), "Add Element", loader.Options{
196196
Cache: g.Cache,
197197
})
198198
if err != nil {
@@ -251,7 +251,7 @@ func (s *server) listDatasetElements(w http.ResponseWriter, r *http.Request) {
251251
return
252252
}
253253

254-
prg, err := loader.Program(r.Context(), "List Elements from "+req.getToolRepo(), "", loader.Options{
254+
prg, err := loader.Program(r.Context(), req.getToolRepo(), "List Elements", loader.Options{
255255
Cache: g.Cache,
256256
})
257257
if err != nil {
@@ -314,7 +314,7 @@ func (s *server) getDatasetElement(w http.ResponseWriter, r *http.Request) {
314314
return
315315
}
316316

317-
prg, err := loader.Program(r.Context(), "Get Element from "+req.getToolRepo(), "", loader.Options{
317+
prg, err := loader.Program(r.Context(), req.getToolRepo(), "Get Element", loader.Options{
318318
Cache: g.Cache,
319319
})
320320
if err != nil {

pkg/sdkserver/routes.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ func (s *server) addRoutes(mux *http.ServeMux) {
7272
mux.HandleFunc("POST /datasets/list-elements", s.listDatasetElements)
7373
mux.HandleFunc("POST /datasets/get-element", s.getDatasetElement)
7474
mux.HandleFunc("POST /datasets/add-element", s.addDatasetElement)
75+
76+
mux.HandleFunc("POST /workspaces/create", s.createWorkspace)
77+
mux.HandleFunc("POST /workspaces/delete", s.deleteWorkspace)
78+
mux.HandleFunc("POST /workspaces/list", s.listWorkspaceContents)
79+
mux.HandleFunc("POST /workspaces/mkdir", s.mkDirInWorkspace)
80+
mux.HandleFunc("POST /workspaces/rmdir", s.rmDirInWorkspace)
81+
mux.HandleFunc("POST /workspaces/write-file", s.writeFileInWorkspace)
82+
mux.HandleFunc("POST /workspaces/delete-file", s.removeFileInWorkspace)
83+
mux.HandleFunc("POST /workspaces/read-file", s.readFileInWorkspace)
7584
}
7685

7786
// health just provides an endpoint for checking whether the server is running and accessible.

0 commit comments

Comments
 (0)