@@ -11,16 +11,19 @@ import (
11
11
)
12
12
13
13
type datasetRequest struct {
14
- Input string `json:"input"`
15
- Workspace string `json:"workspace"`
16
- DatasetToolRepo string `json:"datasetToolRepo"`
14
+ Input string `json:"input"`
15
+ WorkspaceID string `json:"workspaceID"`
16
+ DatasetToolRepo string `json:"datasetToolRepo"`
17
+ Env []string `json:"env"`
17
18
}
18
19
19
20
func (r datasetRequest ) validate (requireInput bool ) error {
20
- if r .Workspace == "" {
21
- return fmt .Errorf ("workspace is required" )
21
+ if r .WorkspaceID == "" {
22
+ return fmt .Errorf ("workspaceID is required" )
22
23
} else if requireInput && r .Input == "" {
23
24
return fmt .Errorf ("input is required" )
25
+ } else if len (r .Env ) == 0 {
26
+ return fmt .Errorf ("env is required" )
24
27
}
25
28
return nil
26
29
}
@@ -30,7 +33,7 @@ func (r datasetRequest) opts(o gptscript.Options) gptscript.Options {
30
33
Cache : o .Cache ,
31
34
Monitor : o .Monitor ,
32
35
Runner : o .Runner ,
33
- Workspace : r .Workspace ,
36
+ Workspace : r .WorkspaceID ,
34
37
}
35
38
return opts
36
39
}
@@ -39,7 +42,7 @@ func (r datasetRequest) getToolRepo() string {
39
42
if r .DatasetToolRepo != "" {
40
43
return r .DatasetToolRepo
41
44
}
42
- return "github.com/gptscript -ai/datasets"
45
+ return "github.com/otto8 -ai/datasets"
43
46
}
44
47
45
48
func (s * server ) listDatasets (w http.ResponseWriter , r * http.Request ) {
@@ -71,7 +74,7 @@ func (s *server) listDatasets(w http.ResponseWriter, r *http.Request) {
71
74
return
72
75
}
73
76
74
- result , err := g .Run (r .Context (), prg , s . gptscriptOpts .Env , req .Input )
77
+ result , err := g .Run (r .Context (), prg , req .Env , req .Input )
75
78
if err != nil {
76
79
writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
77
80
return
@@ -132,7 +135,7 @@ func (s *server) createDataset(w http.ResponseWriter, r *http.Request) {
132
135
return
133
136
}
134
137
135
- result , err := g .Run (r .Context (), prg , s . gptscriptOpts .Env , req .Input )
138
+ result , err := g .Run (r .Context (), prg , req .Env , req .Input )
136
139
if err != nil {
137
140
writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
138
141
return
@@ -200,7 +203,80 @@ func (s *server) addDatasetElement(w http.ResponseWriter, r *http.Request) {
200
203
return
201
204
}
202
205
203
- result , err := g .Run (r .Context (), prg , s .gptscriptOpts .Env , req .Input )
206
+ result , err := g .Run (r .Context (), prg , req .Env , req .Input )
207
+ if err != nil {
208
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
209
+ return
210
+ }
211
+
212
+ writeResponse (logger , w , map [string ]any {"stdout" : result })
213
+ }
214
+
215
+ type addDatasetElementsArgs struct {
216
+ DatasetID string `json:"datasetID"`
217
+ Elements []struct {
218
+ Name string `json:"name"`
219
+ Description string `json:"description"`
220
+ Contents string `json:"contents"`
221
+ }
222
+ }
223
+
224
+ func (a addDatasetElementsArgs ) validate () error {
225
+ if a .DatasetID == "" {
226
+ return fmt .Errorf ("datasetID is required" )
227
+ }
228
+ if len (a .Elements ) == 0 {
229
+ return fmt .Errorf ("elements is required" )
230
+ }
231
+ return nil
232
+ }
233
+
234
+ func (s * server ) addDatasetElements (w http.ResponseWriter , r * http.Request ) {
235
+ logger := gcontext .GetLogger (r .Context ())
236
+
237
+ var req datasetRequest
238
+ if err := json .NewDecoder (r .Body ).Decode (& req ); err != nil {
239
+ writeError (logger , w , http .StatusBadRequest , fmt .Errorf ("failed to decode request body: %w" , err ))
240
+ return
241
+ }
242
+
243
+ if err := req .validate (true ); err != nil {
244
+ writeError (logger , w , http .StatusBadRequest , err )
245
+ return
246
+ }
247
+
248
+ g , err := gptscript .New (r .Context (), req .opts (s .gptscriptOpts ))
249
+ if err != nil {
250
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to initialize gptscript: %w" , err ))
251
+ return
252
+ }
253
+
254
+ var args addDatasetElementsArgs
255
+ if err := json .Unmarshal ([]byte (req .Input ), & args ); err != nil {
256
+ writeError (logger , w , http .StatusBadRequest , fmt .Errorf ("failed to unmarshal input: %w" , err ))
257
+ return
258
+ }
259
+
260
+ if err := args .validate (); err != nil {
261
+ writeError (logger , w , http .StatusBadRequest , err )
262
+ return
263
+ }
264
+
265
+ prg , err := loader .Program (r .Context (), req .getToolRepo (), "Add Elements" , loader.Options {
266
+ Cache : g .Cache ,
267
+ })
268
+ if err != nil {
269
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to load program: %w" , err ))
270
+ return
271
+ }
272
+
273
+ elementsJSON , err := json .Marshal (args .Elements )
274
+ if err != nil {
275
+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to marshal elements: %w" , err ))
276
+ return
277
+ }
278
+
279
+ result , err := g .Run (r .Context (), prg , req .Env , fmt .Sprintf (`{"datasetID":%q, "elements":%q}` , args .DatasetID , string (elementsJSON )))
204
280
if err != nil {
205
281
writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
206
282
return
@@ -259,7 +335,7 @@ func (s *server) listDatasetElements(w http.ResponseWriter, r *http.Request) {
259
335
return
260
336
}
261
337
262
- result , err := g .Run (r .Context (), prg , s . gptscriptOpts .Env , req .Input )
338
+ result , err := g .Run (r .Context (), prg , req .Env , req .Input )
263
339
if err != nil {
264
340
writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
265
341
return
@@ -322,7 +398,7 @@ func (s *server) getDatasetElement(w http.ResponseWriter, r *http.Request) {
322
398
return
323
399
}
324
400
325
- result , err := g .Run (r .Context (), prg , s . gptscriptOpts .Env , req .Input )
401
+ result , err := g .Run (r .Context (), prg , req .Env , req .Input )
326
402
if err != nil {
327
403
writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
328
404
return
0 commit comments