Skip to content

Commit 5fa255d

Browse files
committed
feat: make GlobalOptions option by using variadic approach
Signed-off-by: Donnie Adams <[email protected]>
1 parent e4d1acf commit 5fa255d

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

gptscript.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ type GPTScript struct {
2929
globalEnv []string
3030
}
3131

32-
func NewGPTScript(opts GlobalOptions) (*GPTScript, error) {
32+
func NewGPTScript(opts ...GlobalOptions) (*GPTScript, error) {
33+
opt := completeGlobalOptions(opts...)
3334
lock.Lock()
3435
defer lock.Unlock()
3536
gptscriptCount++
@@ -40,18 +41,18 @@ func NewGPTScript(opts GlobalOptions) (*GPTScript, error) {
4041
serverURL = os.Getenv("GPTSCRIPT_URL")
4142
}
4243

43-
if opts.Env == nil {
44-
opts.Env = os.Environ()
44+
if opt.Env == nil {
45+
opt.Env = os.Environ()
4546
}
4647

47-
opts.Env = append(opts.Env, opts.toEnv()...)
48+
opt.Env = append(opt.Env, opt.toEnv()...)
4849

4950
if serverProcessCancel == nil && !disableServer {
5051
ctx, cancel := context.WithCancel(context.Background())
5152
in, _ := io.Pipe()
5253

5354
serverProcess = exec.CommandContext(ctx, getCommand(), "sys.sdkserver", "--listen-address", serverURL)
54-
serverProcess.Env = opts.Env[:]
55+
serverProcess.Env = opt.Env[:]
5556

5657
serverProcess.Stdin = in
5758
stdErr, err := serverProcess.StderrPipe()
@@ -96,7 +97,7 @@ func NewGPTScript(opts GlobalOptions) (*GPTScript, error) {
9697
}
9798

9899
if disableServer {
99-
g.globalEnv = opts.Env[:]
100+
g.globalEnv = opt.Env[:]
100101
}
101102

102103
return g, nil

opts.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,29 @@ func (g GlobalOptions) toEnv() []string {
2828
return args
2929
}
3030

31+
func completeGlobalOptions(opts ...GlobalOptions) GlobalOptions {
32+
result := GlobalOptions{}
33+
for _, opt := range opts {
34+
result.OpenAIAPIKey = firstSet(opt.OpenAIAPIKey, result.OpenAIAPIKey)
35+
result.OpenAIBaseURL = firstSet(opt.OpenAIBaseURL, result.OpenAIBaseURL)
36+
result.DefaultModel = firstSet(opt.DefaultModel, result.DefaultModel)
37+
result.DefaultModelProvider = firstSet(opt.DefaultModelProvider, result.DefaultModelProvider)
38+
result.Env = append(result.Env, opt.Env...)
39+
}
40+
return opts[0]
41+
}
42+
43+
func firstSet[T comparable](in ...T) T {
44+
var result T
45+
for _, i := range in {
46+
if i != result {
47+
return i
48+
}
49+
}
50+
51+
return result
52+
}
53+
3154
// Options represents options for the gptscript tool or file.
3255
type Options struct {
3356
GlobalOptions `json:",inline"`

0 commit comments

Comments
 (0)