forked from gptscript-ai/py-gptscript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopts.py
113 lines (105 loc) · 4.37 KB
/
opts.py
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import os
from typing import Self
class GlobalOptions:
def __init__(
self,
url: str = "",
token: str = "",
apiKey: str = "",
baseURL: str = "",
defaultModelProvider: str = "",
defaultModel: str = "",
cacheDir: str = "",
datasetToolRepo: str = "github.com/gptscript-ai/datasets",
env: list[str] = None,
):
self.URL = url
self.Token = token
self.APIKey = apiKey
self.BaseURL = baseURL
self.DefaultModel = defaultModel
self.DefaultModelProvider = defaultModelProvider
self.CacheDir = cacheDir
self.DatasetToolRepo = datasetToolRepo
if env is None:
env = [f"{k}={v}" for k, v in os.environ.items()]
elif isinstance(env, dict):
env = [f"{k}={v}" for k, v in env.items()]
self.Env = env
def merge(self, other: Self) -> Self:
cp = self.__class__()
if other is None:
return self
cp.URL = other.URL if other.URL != "" else self.URL
cp.Token = other.Token if other.Token != "" else self.Token
cp.APIKey = other.APIKey if other.APIKey != "" else self.APIKey
cp.BaseURL = other.BaseURL if other.BaseURL != "" else self.BaseURL
cp.DefaultModel = other.DefaultModel if other.DefaultModel != "" else self.DefaultModel
cp.DefaultModelProvider = other.DefaultModelProvider if other.DefaultModelProvider != "" else self.DefaultModelProvider
cp.CacheDir = other.CacheDir if other.CacheDir != "" else self.CacheDir
cp.DatasetToolRepo = other.DatasetToolRepo if other.DatasetToolRepo != "" else self.DatasetToolRepo
cp.Env = (other.Env or [])
cp.Env.extend(self.Env or [])
return cp
def toEnv(self):
if self.Env is None:
self.Env = [f"{k}={v}" for k, v in os.environ.items()]
if self.APIKey != "":
self.Env.append(f"OPENAI_API_KEY={self.APIKey}")
if self.BaseURL != "":
self.Env.append(f"OPENAI_BASE_URL={self.BaseURL}")
if self.DefaultModel != "":
self.Env.append(f"GPTSCRIPT_SDKSERVER_DEFAULT_MODEL={self.DefaultModel}")
if self.DefaultModelProvider != "":
self.Env.append(f"GPTSCRIPT_SDKSERVER_DEFAULT_MODEL_PROVIDER={self.DefaultModelProvider}")
class Options(GlobalOptions):
def __init__(self,
input: str = "",
disableCache: bool = False,
subTool: str = "",
workspace: str = "",
chatState: str = "",
confirm: bool = False,
prompt: bool = False,
credentialOverrides: list[str] = None,
credentialContexts: list[str] = None,
location: str = "",
env: list[str] = None,
forceSequential: bool = False,
url: str = "",
token: str = "",
apiKey: str = "",
baseURL: str = "",
defaultModelProvider: str = "",
defaultModel: str = "",
cacheDir: str = "",
datasetToolDir: str = "github.com/gptscript-ai/datasets",
):
super().__init__(url, token, apiKey, baseURL, defaultModelProvider, defaultModel, cacheDir, datasetToolDir, env)
self.input = input
self.disableCache = disableCache
self.subTool = subTool
self.workspace = workspace
self.chatState = chatState
self.confirm = confirm
self.prompt = prompt
self.credentialOverrides = credentialOverrides
self.credentialContexts = credentialContexts
self.location = location
self.forceSequential = forceSequential
def merge_global_opts(self, other: GlobalOptions) -> Self:
cp = super().merge(other)
if other is None:
return cp
cp.input = self.input
cp.disableCache = self.disableCache
cp.subTool = self.subTool
cp.workspace = self.workspace
cp.chatState = self.chatState
cp.confirm = self.confirm
cp.prompt = self.prompt
cp.credentialOverrides = self.credentialOverrides
cp.credentialContexts = self.credentialContexts
cp.location = self.location
cp.forceSequential = self.forceSequential
return cp