3
3
import platform
4
4
from subprocess import Popen , PIPE
5
5
from sys import executable
6
- from time import sleep
7
6
from typing import Any , Callable , Awaitable , List
8
7
9
- import requests
10
-
11
8
from gptscript .confirm import AuthResponse
12
9
from gptscript .credentials import Credential , to_credential
13
10
from gptscript .frame import RunFrame , CallFrame , PromptFrame , Program
@@ -22,25 +19,23 @@ class GPTScript:
22
19
__gptscript_count = 0
23
20
__server_url = ""
24
21
__process : Popen = None
25
- __server_ready : bool = False
26
22
27
23
def __init__ (self , opts : GlobalOptions = None ):
28
24
if opts is None :
29
25
opts = GlobalOptions ()
30
26
self .opts = opts
31
27
28
+ start_sdk = GPTScript .__process is None and GPTScript .__server_url == "" and self .opts .URL == ""
32
29
GPTScript .__gptscript_count += 1
33
-
34
30
if GPTScript .__server_url == "" :
35
- GPTScript .__server_url = os .environ .get ("GPTSCRIPT_URL" , "http://127.0.0.1:0" )
36
- if not (GPTScript .__server_url .startswith ("http://" ) or GPTScript .__server_url .startswith ("https://" )):
37
- GPTScript .__server_url = f"http://{ GPTScript .__server_url } "
31
+ GPTScript .__server_url = os .environ .get ("GPTSCRIPT_URL" , "" )
32
+ start_sdk = start_sdk and GPTScript .__server_url == ""
38
33
39
- if GPTScript . __gptscript_count == 1 and os . environ . get ( "GPTSCRIPT_URL" , "" ) == "" :
34
+ if start_sdk :
40
35
self .opts .toEnv ()
41
36
42
37
GPTScript .__process = Popen (
43
- [_get_command (), "--listen-address" , GPTScript . __server_url . removeprefix ( "http://" ), "sdkserver " ],
38
+ [_get_command (), "sys.sdkserver" , " --listen-address" , "127.0.0.1:0 " ],
44
39
stdin = PIPE ,
45
40
stdout = PIPE ,
46
41
stderr = PIPE ,
@@ -53,35 +48,25 @@ def __init__(self, opts: GlobalOptions = None):
53
48
if "=" in GPTScript .__server_url :
54
49
GPTScript .__server_url = GPTScript .__server_url .split ("=" )[1 ]
55
50
56
- self .opts .Env .append ("GPTSCRIPT_URL=" + GPTScript .__server_url )
57
- self ._server_url = GPTScript .__server_url
58
- if not (self ._server_url .startswith ("http://" ) or self ._server_url .startswith ("https://" )):
59
- self ._server_url = f"http://{ self ._server_url } "
60
- self ._wait_for_gptscript ()
61
-
62
- def _wait_for_gptscript (self ):
63
- if not GPTScript .__server_ready :
64
- for _ in range (0 , 20 ):
65
- try :
66
- resp = requests .get (self ._server_url + "/healthz" )
67
- if resp .status_code == 200 :
68
- GPTScript .__server_ready = True
69
- return
70
- except requests .exceptions .ConnectionError :
71
- pass
51
+ if self .opts .URL == "" :
52
+ self .opts .URL = GPTScript .__server_url
53
+ if not (self .opts .URL .startswith ("http://" ) or self .opts .URL .startswith ("https://" )):
54
+ self .opts .URL = f"http://{ self .opts .URL } "
72
55
73
- sleep ( 1 )
56
+ self . opts . Env . append ( "GPTSCRIPT_URL=" + self . opts . URL )
74
57
75
- raise Exception ("Failed to start gptscript" )
58
+ if self .opts .Token == "" :
59
+ self .opts .Token = os .environ .get ("GPTSCRIPT_TOKEN" , "" )
60
+ if self .opts .Token != "" :
61
+ self .opts .Env .append ("GPTSCRIPT_TOKEN=" + self .opts .Token )
76
62
77
63
def close (self ):
78
64
GPTScript .__gptscript_count -= 1
79
65
if GPTScript .__gptscript_count == 0 and GPTScript .__process is not None :
80
66
GPTScript .__process .stdin .close ()
81
67
GPTScript .__process .wait ()
82
- GPTScript .__server_ready = False
83
68
GPTScript .__process = None
84
- self ._server_url = ""
69
+ self .opts = None
85
70
86
71
def evaluate (
87
72
self ,
@@ -94,7 +79,6 @@ def evaluate(
94
79
"evaluate" ,
95
80
tool ,
96
81
opts .merge_global_opts (self .opts ),
97
- self ._server_url ,
98
82
event_handlers = event_handlers ,
99
83
).next_chat (opts .input )
100
84
@@ -108,7 +92,6 @@ def run(
108
92
"run" ,
109
93
tool_path ,
110
94
opts .merge_global_opts (self .opts ),
111
- self ._server_url ,
112
95
event_handlers = event_handlers ,
113
96
).next_chat (opts .input )
114
97
@@ -165,7 +148,7 @@ async def prompt(self, resp: PromptResponse):
165
148
await self ._run_basic_command ("prompt-response/" + resp .id , resp .responses )
166
149
167
150
async def _run_basic_command (self , sub_command : str , request_body : Any = None ):
168
- run = RunBasicCommand (sub_command , request_body , self ._server_url )
151
+ run = RunBasicCommand (sub_command , request_body , self .opts . URL , self . opts . Token )
169
152
170
153
run .next_chat ()
171
154
0 commit comments