33import platform
44from subprocess import Popen , PIPE
55from sys import executable
6- from time import sleep
76from typing import Any , Callable , Awaitable , List
87
9- import requests
10-
118from gptscript .confirm import AuthResponse
129from gptscript .credentials import Credential , to_credential
1310from gptscript .frame import RunFrame , CallFrame , PromptFrame , Program
@@ -22,25 +19,23 @@ class GPTScript:
2219 __gptscript_count = 0
2320 __server_url = ""
2421 __process : Popen = None
25- __server_ready : bool = False
2622
2723 def __init__ (self , opts : GlobalOptions = None ):
2824 if opts is None :
2925 opts = GlobalOptions ()
3026 self .opts = opts
3127
28+ start_sdk = GPTScript .__process is None and GPTScript .__server_url == "" and self .opts .URL == ""
3229 GPTScript .__gptscript_count += 1
33-
3430 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 == ""
3833
39- if GPTScript . __gptscript_count == 1 and os . environ . get ( "GPTSCRIPT_URL" , "" ) == "" :
34+ if start_sdk :
4035 self .opts .toEnv ()
4136
4237 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 " ],
4439 stdin = PIPE ,
4540 stdout = PIPE ,
4641 stderr = PIPE ,
@@ -53,35 +48,25 @@ def __init__(self, opts: GlobalOptions = None):
5348 if "=" in GPTScript .__server_url :
5449 GPTScript .__server_url = GPTScript .__server_url .split ("=" )[1 ]
5550
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 } "
7255
73- sleep ( 1 )
56+ self . opts . Env . append ( "GPTSCRIPT_URL=" + self . opts . URL )
7457
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 )
7662
7763 def close (self ):
7864 GPTScript .__gptscript_count -= 1
7965 if GPTScript .__gptscript_count == 0 and GPTScript .__process is not None :
8066 GPTScript .__process .stdin .close ()
8167 GPTScript .__process .wait ()
82- GPTScript .__server_ready = False
8368 GPTScript .__process = None
84- self ._server_url = ""
69+ self .opts = None
8570
8671 def evaluate (
8772 self ,
@@ -94,7 +79,6 @@ def evaluate(
9479 "evaluate" ,
9580 tool ,
9681 opts .merge_global_opts (self .opts ),
97- self ._server_url ,
9882 event_handlers = event_handlers ,
9983 ).next_chat (opts .input )
10084
@@ -108,7 +92,6 @@ def run(
10892 "run" ,
10993 tool_path ,
11094 opts .merge_global_opts (self .opts ),
111- self ._server_url ,
11295 event_handlers = event_handlers ,
11396 ).next_chat (opts .input )
11497
@@ -165,7 +148,7 @@ async def prompt(self, resp: PromptResponse):
165148 await self ._run_basic_command ("prompt-response/" + resp .id , resp .responses )
166149
167150 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 )
169152
170153 run .next_chat ()
171154
0 commit comments