Skip to content

Commit 45d444f

Browse files
authored
fix: sdkserver: credentials: ensure credential helpers exist (#848)
Signed-off-by: Grant Linville <[email protected]>
1 parent 90e7868 commit 45d444f

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

pkg/sdkserver/credentials.go

+14-8
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
package sdkserver
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67
"net/http"
78

89
"github.com/gptscript-ai/gptscript/pkg/config"
910
gcontext "github.com/gptscript-ai/gptscript/pkg/context"
1011
"github.com/gptscript-ai/gptscript/pkg/credentials"
11-
"github.com/gptscript-ai/gptscript/pkg/repos/runtimes"
1212
)
1313

14-
func (s *server) initializeCredentialStore(ctx string) (credentials.CredentialStore, error) {
14+
func (s *server) initializeCredentialStore(ctx context.Context, credCtx string) (credentials.CredentialStore, error) {
1515
cfg, err := config.ReadCLIConfig(s.gptscriptOpts.OpenAI.ConfigFile)
1616
if err != nil {
1717
return nil, fmt.Errorf("failed to read CLI config: %w", err)
1818
}
1919

20-
// TODO - are we sure we want to always use runtimes.Default here?
21-
store, err := credentials.NewStore(cfg, runtimes.Default(s.gptscriptOpts.Cache.CacheDir), ctx, s.gptscriptOpts.Cache.CacheDir)
20+
if err := s.runtimeManager.SetUpCredentialHelpers(ctx, cfg); err != nil {
21+
return nil, fmt.Errorf("failed to set up credential helpers: %w", err)
22+
}
23+
if err := s.runtimeManager.EnsureCredentialHelpers(ctx); err != nil {
24+
return nil, fmt.Errorf("failed to ensure credential helpers: %w", err)
25+
}
26+
27+
store, err := credentials.NewStore(cfg, s.runtimeManager, credCtx, s.gptscriptOpts.Cache.CacheDir)
2228
if err != nil {
2329
return nil, fmt.Errorf("failed to initialize credential store: %w", err)
2430
}
@@ -40,7 +46,7 @@ func (s *server) listCredentials(w http.ResponseWriter, r *http.Request) {
4046
req.Context = credentials.DefaultCredentialContext
4147
}
4248

43-
store, err := s.initializeCredentialStore(req.Context)
49+
store, err := s.initializeCredentialStore(r.Context(), req.Context)
4450
if err != nil {
4551
writeError(logger, w, http.StatusInternalServerError, err)
4652
return
@@ -81,7 +87,7 @@ func (s *server) createCredential(w http.ResponseWriter, r *http.Request) {
8187
cred.Context = credentials.DefaultCredentialContext
8288
}
8389

84-
store, err := s.initializeCredentialStore(cred.Context)
90+
store, err := s.initializeCredentialStore(r.Context(), cred.Context)
8591
if err != nil {
8692
writeError(logger, w, http.StatusInternalServerError, err)
8793
return
@@ -115,7 +121,7 @@ func (s *server) revealCredential(w http.ResponseWriter, r *http.Request) {
115121
req.Context = credentials.DefaultCredentialContext
116122
}
117123

118-
store, err := s.initializeCredentialStore(req.Context)
124+
store, err := s.initializeCredentialStore(r.Context(), req.Context)
119125
if err != nil {
120126
writeError(logger, w, http.StatusInternalServerError, err)
121127
return
@@ -152,7 +158,7 @@ func (s *server) deleteCredential(w http.ResponseWriter, r *http.Request) {
152158
req.Context = credentials.DefaultCredentialContext
153159
}
154160

155-
store, err := s.initializeCredentialStore(req.Context)
161+
store, err := s.initializeCredentialStore(r.Context(), req.Context)
156162
if err != nil {
157163
writeError(logger, w, http.StatusInternalServerError, err)
158164
return

pkg/sdkserver/routes.go

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/gptscript-ai/broadcaster"
1414
"github.com/gptscript-ai/gptscript/pkg/cache"
1515
gcontext "github.com/gptscript-ai/gptscript/pkg/context"
16+
"github.com/gptscript-ai/gptscript/pkg/engine"
1617
"github.com/gptscript-ai/gptscript/pkg/gptscript"
1718
"github.com/gptscript-ai/gptscript/pkg/input"
1819
"github.com/gptscript-ai/gptscript/pkg/loader"
@@ -30,6 +31,8 @@ type server struct {
3031
client *gptscript.GPTScript
3132
events *broadcaster.Broadcaster[event]
3233

34+
runtimeManager engine.RuntimeManager
35+
3336
lock sync.RWMutex
3437
waitingToConfirm map[string]chan runner.AuthorizerResponse
3538
waitingToPrompt map[string]chan map[string]string

pkg/sdkserver/server.go

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/gptscript-ai/broadcaster"
1818
"github.com/gptscript-ai/gptscript/pkg/gptscript"
1919
"github.com/gptscript-ai/gptscript/pkg/mvl"
20+
"github.com/gptscript-ai/gptscript/pkg/repos/runtimes"
2021
"github.com/gptscript-ai/gptscript/pkg/runner"
2122
"github.com/gptscript-ai/gptscript/pkg/types"
2223
"github.com/rs/cors"
@@ -108,6 +109,7 @@ func run(ctx context.Context, listener net.Listener, opts Options) error {
108109
token: token,
109110
client: g,
110111
events: events,
112+
runtimeManager: runtimes.Default(opts.Options.Cache.CacheDir), // TODO - do we always want to use runtimes.Default here?
111113
waitingToConfirm: make(map[string]chan runner.AuthorizerResponse),
112114
waitingToPrompt: make(map[string]chan map[string]string),
113115
}

0 commit comments

Comments
 (0)