Skip to content

Commit ac679cd

Browse files
authored
Merge pull request #487 from thedadams/set-openai-options-from-sdk
feat: add ability to pass OpenAI config in the SDK
2 parents e0aa2ad + f5e2585 commit ac679cd

File tree

11 files changed

+54
-23
lines changed

11 files changed

+54
-23
lines changed

pkg/cli/eval.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (e *Eval) Run(cmd *cobra.Command, args []string) error {
5656
return err
5757
}
5858

59-
runner, err := gptscript.New(&opts)
59+
runner, err := gptscript.New(opts)
6060
if err != nil {
6161
return err
6262
}

pkg/cli/gptscript.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ func (r *GPTScript) Run(cmd *cobra.Command, args []string) (retErr error) {
378378
return s.Start(ctx)
379379
}
380380

381-
gptScript, err := gptscript.New(&gptOpt)
381+
gptScript, err := gptscript.New(gptOpt)
382382
if err != nil {
383383
return err
384384
}

pkg/gptscript/gptscript.go

+27-8
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,25 @@ type Options struct {
4848
Env []string
4949
}
5050

51-
func complete(opts *Options) (result *Options) {
52-
result = opts
53-
if result == nil {
54-
result = &Options{}
51+
func complete(opts ...Options) (Options, error) {
52+
var (
53+
result Options
54+
err error
55+
)
56+
57+
for _, opt := range opts {
58+
result.Cache = cache.Complete(result.Cache, opt.Cache)
59+
result.Monitor = monitor.Complete(result.Monitor, opt.Monitor)
60+
result.Runner = runner.Complete(result.Runner, opt.Runner)
61+
result.OpenAI, err = openai.Complete(result.OpenAI, opt.OpenAI)
62+
if err != nil {
63+
return Options{}, err
64+
}
65+
66+
result.CredentialContext = types.FirstSet(opt.CredentialContext, result.CredentialContext)
67+
result.Quiet = types.FirstSet(opt.Quiet, result.Quiet)
68+
result.Workspace = types.FirstSet(opt.Workspace, result.Workspace)
69+
result.Env = append(result.Env, opt.Env...)
5570
}
5671
if result.Quiet == nil {
5772
result.Quiet = new(bool)
@@ -60,13 +75,17 @@ func complete(opts *Options) (result *Options) {
6075
result.Env = os.Environ()
6176
}
6277
if result.CredentialContext == "" {
63-
opts.CredentialContext = "default"
78+
result.CredentialContext = "default"
6479
}
65-
return
80+
81+
return result, nil
6682
}
6783

68-
func New(opts *Options) (*GPTScript, error) {
69-
opts = complete(opts)
84+
func New(o ...Options) (*GPTScript, error) {
85+
opts, err := complete(o...)
86+
if err != nil {
87+
return nil, err
88+
}
7089

7190
registry := llm.NewRegistry()
7291

pkg/monitor/display.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type Options struct {
2525
DebugMessages bool `usage:"Enable logging of chat completion calls"`
2626
}
2727

28-
func complete(opts ...Options) (result Options) {
28+
func Complete(opts ...Options) (result Options) {
2929
for _, opt := range opts {
3030
result.DumpState = types.FirstSet(opt.DumpState, result.DumpState)
3131
result.DisplayProgress = types.FirstSet(opt.DisplayProgress, result.DisplayProgress)
@@ -313,7 +313,7 @@ func (d *display) Stop(output string, err error) {
313313
}
314314

315315
func NewConsole(opts ...Options) *Console {
316-
opt := complete(opts...)
316+
opt := Complete(opts...)
317317
return &Console{
318318
dumpState: opt.DumpState,
319319
displayProgress: opt.DisplayProgress,

pkg/openai/client.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ type Options struct {
5858
Cache *cache.Client
5959
}
6060

61-
func complete(opts ...Options) (result Options, err error) {
61+
func Complete(opts ...Options) (result Options, err error) {
6262
for _, opt := range opts {
6363
result.BaseURL = types.FirstSet(opt.BaseURL, result.BaseURL)
6464
result.APIKey = types.FirstSet(opt.APIKey, result.APIKey)
@@ -87,7 +87,7 @@ func complete(opts ...Options) (result Options, err error) {
8787
}
8888

8989
func NewClient(credStore credentials.CredentialStore, opts ...Options) (*Client, error) {
90-
opt, err := complete(opts...)
90+
opt, err := Complete(opts...)
9191
if err != nil {
9292
return nil, err
9393
}

pkg/runner/runner.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func DefaultAuthorizer(engine.Context, string) (AuthorizerResponse, error) {
5252
}, nil
5353
}
5454

55-
func complete(opts ...Options) (result Options) {
55+
func Complete(opts ...Options) (result Options) {
5656
for _, opt := range opts {
5757
result.MonitorFactory = types.FirstSet(opt.MonitorFactory, result.MonitorFactory)
5858
result.RuntimeManager = types.FirstSet(opt.RuntimeManager, result.RuntimeManager)
@@ -91,7 +91,7 @@ type Runner struct {
9191
}
9292

9393
func New(client engine.Model, credStore credentials.CredentialStore, opts ...Options) (*Runner, error) {
94-
opt := complete(opts...)
94+
opt := Complete(opts...)
9595

9696
runner := &Runner{
9797
c: client,

pkg/sdkserver/routes.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ import (
1313
"time"
1414

1515
"github.com/acorn-io/broadcaster"
16+
"github.com/gptscript-ai/gptscript/pkg/cache"
1617
gcontext "github.com/gptscript-ai/gptscript/pkg/context"
1718
"github.com/gptscript-ai/gptscript/pkg/gptscript"
1819
"github.com/gptscript-ai/gptscript/pkg/input"
1920
"github.com/gptscript-ai/gptscript/pkg/loader"
21+
"github.com/gptscript-ai/gptscript/pkg/openai"
2022
"github.com/gptscript-ai/gptscript/pkg/parser"
2123
"github.com/gptscript-ai/gptscript/pkg/runner"
2224
gserver "github.com/gptscript-ai/gptscript/pkg/server"
@@ -27,6 +29,7 @@ import (
2729
const toolRunTimeout = 15 * time.Minute
2830

2931
type server struct {
32+
gptscriptOpts gptscript.Options
3033
address, token string
3134
client *gptscript.GPTScript
3235
events *broadcaster.Broadcaster[event]
@@ -189,8 +192,9 @@ func (s *server) execHandler(w http.ResponseWriter, r *http.Request) {
189192
programLoader = loader.Program
190193
}
191194

192-
opts := &gptscript.Options{
193-
Cache: reqObject.Options,
195+
opts := gptscript.Options{
196+
Cache: cache.Options(reqObject.cacheOptions),
197+
OpenAI: openai.Options(reqObject.openAIOptions),
194198
Env: reqObject.Env,
195199
Workspace: reqObject.Workspace,
196200
CredentialContext: reqObject.CredentialContext,

pkg/sdkserver/run.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import (
1616

1717
type loaderFunc func(context.Context, string, string, ...loader.Options) (types.Program, error)
1818

19-
func (s *server) execAndStream(ctx context.Context, programLoader loaderFunc, logger mvl.Logger, w http.ResponseWriter, opts *gptscript.Options, chatState, input, subTool string, toolDef fmt.Stringer) {
20-
g, err := gptscript.New(opts)
19+
func (s *server) execAndStream(ctx context.Context, programLoader loaderFunc, logger mvl.Logger, w http.ResponseWriter, opts gptscript.Options, chatState, input, subTool string, toolDef fmt.Stringer) {
20+
g, err := gptscript.New(s.gptscriptOpts, opts)
2121
if err != nil {
2222
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to initialize gptscript: %w", err))
2323
return

pkg/sdkserver/server.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func Start(ctx context.Context, opts Options) error {
5353
// prompt server because it is only used for fmt, parse, etc.
5454
opts.Env = append(opts.Env, fmt.Sprintf("%s=%s", types.PromptTokenEnvVar, token))
5555

56-
g, err := gptscript.New(&opts.Options)
56+
g, err := gptscript.New(opts.Options)
5757
if err != nil {
5858
return err
5959
}
@@ -64,6 +64,7 @@ func Start(ctx context.Context, opts Options) error {
6464
}
6565

6666
s := &server{
67+
gptscriptOpts: opts.Options,
6768
address: listener.Addr().String(),
6869
token: token,
6970
client: g,

pkg/sdkserver/types.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/gptscript-ai/gptscript/pkg/cache"
99
"github.com/gptscript-ai/gptscript/pkg/engine"
10+
"github.com/gptscript-ai/gptscript/pkg/openai"
1011
"github.com/gptscript-ai/gptscript/pkg/parser"
1112
"github.com/gptscript-ai/gptscript/pkg/runner"
1213
gserver "github.com/gptscript-ai/gptscript/pkg/server"
@@ -40,10 +41,16 @@ func (t toolDefs) String() string {
4041
return s.String()
4142
}
4243

44+
type (
45+
cacheOptions cache.Options
46+
openAIOptions openai.Options
47+
)
48+
4349
type toolOrFileRequest struct {
4450
content `json:",inline"`
4551
file `json:",inline"`
46-
cache.Options `json:",inline"`
52+
cacheOptions `json:",inline"`
53+
openAIOptions `json:",inline"`
4754

4855
ToolDefs toolDefs `json:"toolDefs,inline"`
4956
SubTool string `json:"subTool"`

pkg/server/server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func New(opts *Options) (*Server, error) {
5454
opts = complete(opts)
5555
opts.GPTScript.Runner.MonitorFactory = NewSessionFactory(events)
5656

57-
g, err := gptscript.New(&opts.GPTScript)
57+
g, err := gptscript.New(opts.GPTScript)
5858
if err != nil {
5959
return nil, err
6060
}

0 commit comments

Comments
 (0)