-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathopts.go
83 lines (75 loc) · 2.89 KB
/
opts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package gptscript
// GlobalOptions allows specification of settings that are used for every call made.
// These options can be overridden by the corresponding Options.
type GlobalOptions struct {
URL string `json:"url"`
Token string `json:"token"`
OpenAIAPIKey string `json:"APIKey"`
OpenAIBaseURL string `json:"BaseURL"`
DefaultModel string `json:"DefaultModel"`
DefaultModelProvider string `json:"DefaultModelProvider"`
CacheDir string `json:"CacheDir"`
Env []string `json:"env"`
DatasetTool string `json:"DatasetTool"`
WorkspaceTool string `json:"WorkspaceTool"`
}
func (g GlobalOptions) toEnv() []string {
var args []string
if g.OpenAIAPIKey != "" {
args = append(args, "OPENAI_API_KEY="+g.OpenAIAPIKey)
}
if g.OpenAIBaseURL != "" {
args = append(args, "OPENAI_BASE_URL="+g.OpenAIBaseURL)
}
if g.DefaultModel != "" {
args = append(args, "GPTSCRIPT_SDKSERVER_DEFAULT_MODEL="+g.DefaultModel)
}
if g.DefaultModelProvider != "" {
args = append(args, "GPTSCRIPT_SDKSERVER_DEFAULT_MODEL_PROVIDER="+g.DefaultModelProvider)
}
if g.WorkspaceTool != "" {
args = append(args, "GPTSCRIPT_SDKSERVER_WORKSPACE_TOOL="+g.WorkspaceTool)
}
return args
}
func completeGlobalOptions(opts ...GlobalOptions) GlobalOptions {
var result GlobalOptions
for _, opt := range opts {
result.CacheDir = firstSet(opt.CacheDir, result.CacheDir)
result.URL = firstSet(opt.URL, result.URL)
result.Token = firstSet(opt.Token, result.Token)
result.OpenAIAPIKey = firstSet(opt.OpenAIAPIKey, result.OpenAIAPIKey)
result.OpenAIBaseURL = firstSet(opt.OpenAIBaseURL, result.OpenAIBaseURL)
result.DefaultModel = firstSet(opt.DefaultModel, result.DefaultModel)
result.DefaultModelProvider = firstSet(opt.DefaultModelProvider, result.DefaultModelProvider)
result.DatasetTool = firstSet(opt.DatasetTool, result.DatasetTool)
result.WorkspaceTool = firstSet(opt.WorkspaceTool, result.WorkspaceTool)
result.Env = append(result.Env, opt.Env...)
}
return result
}
func firstSet[T comparable](in ...T) T {
var result T
for _, i := range in {
if i != result {
return i
}
}
return result
}
// Options represents options for the gptscript tool or file.
type Options struct {
GlobalOptions `json:",inline"`
DisableCache bool `json:"disableCache"`
Confirm bool `json:"confirm"`
Input string `json:"input"`
SubTool string `json:"subTool"`
Workspace string `json:"workspace"`
ChatState string `json:"chatState"`
IncludeEvents bool `json:"includeEvents"`
Prompt bool `json:"prompt"`
CredentialOverrides []string `json:"credentialOverrides"`
CredentialContexts []string `json:"credentialContexts"`
Location string `json:"location"`
ForceSequential bool `json:"forceSequential"`
}