@@ -28,7 +28,7 @@ def __init__(self, *args, **kwargs):
2828 self .stop_event = threading .Event ()
2929 self .output_queue = None
3030 self .id = os .getenv ("INTERPRETER_ID" , datetime .now ().timestamp ())
31- self .print = False # Will print output
31+ self .print = True # Will print output
3232
3333 self .server = Server (self )
3434
@@ -38,8 +38,6 @@ async def input(self, chunk):
3838 When it hits an "end" flag, calls interpreter.respond().
3939 """
4040
41- print ("Received:" , chunk )
42-
4341 if "start" in chunk :
4442 # If the user is starting something, the interpreter should stop.
4543 if self .respond_thread is not None and self .respond_thread .is_alive ():
@@ -107,7 +105,8 @@ def respond(self, run_code=None):
107105 print ("\n ------------\n \n ```" + chunk ["format" ], flush = True )
108106 if "end" in chunk :
109107 print ("\n ```\n \n ------------\n \n " , flush = True )
110- print (chunk .get ("content" , "" ), end = "" , flush = True )
108+ if chunk .get ("format" ) != "active_line" :
109+ print (chunk .get ("content" , "" ), end = "" , flush = True )
111110
112111 self .output_queue .sync_q .put (chunk )
113112
@@ -176,6 +175,7 @@ async def home():
176175 <textarea id="messageInput" rows="10" cols="50" autocomplete="off"></textarea>
177176 <button>Send</button>
178177 </form>
178+ <button id="approveCodeButton">Approve Code</button>
179179 <div id="messages"></div>
180180 <script>
181181 var ws = new WebSocket("ws://"""
@@ -191,47 +191,13 @@ async def home():
191191 lastMessageElement.innerHTML = "<br>"
192192 }
193193 var eventData = JSON.parse(event.data);
194- if (eventData.role == "assistant") {
195- if (eventData.type == "message") {
196- if (eventData.start) {
197- lastMessageElement = document.createElement('p');
198- document.getElementById('messages').appendChild(lastMessageElement);
199- lastMessageElement.innerHTML = "<br>";
200- }
201- if (eventData.content) {
202- lastMessageElement.innerHTML += eventData.content;
203- }
204- if (eventData.end) {
205- lastMessageElement.innerHTML += "<br>";
206- }
207- } else if (eventData.type == "code") {
208- if (eventData.start) {
209- lastMessageElement = document.createElement('p');
210- document.getElementById('messages').appendChild(lastMessageElement);
211- lastMessageElement.innerHTML = "<br><br>```" + eventData.format + "<br>";
212- }
213- if (eventData.content) {
214- lastMessageElement.innerHTML += eventData.content;
215- }
216- if (eventData.end) {
217- lastMessageElement.innerHTML += "<br>```<br><br>";
218- }
219- }
220- else if (eventData.role == "computer" && eventData.type == "console") {
221- if (eventData.start) {
222- lastMessageElement = document.createElement('p');
223- document.getElementById('messages').appendChild(lastMessageElement);
224- lastMessageElement.innerHTML = "<br><br>------<br><br>";
225- }
226- if (eventData.content && eventData.format == "output") {
227- lastMessageElement.innerHTML += eventData.content;
228- }
229- if (eventData.end) {
230- lastMessageElement.innerHTML += "<br><br>------<br><br>";
231- }
232- }
194+
195+ if ((eventData.role == "assistant" && eventData.type == "message" && eventData.content) ||
196+ (eventData.role == "computer" && eventData.type == "console" && eventData.format == "output" && eventData.content) ||
197+ (eventData.role == "assistant" && eventData.type == "code" && eventData.content)) {
198+ lastMessageElement.innerHTML += eventData.content;
233199 } else {
234- lastMessageElement.innerHTML += "<br>" + JSON.stringify(eventData) + "<br>";
200+ lastMessageElement.innerHTML += "<br><br> " + JSON.stringify(eventData) + "<br> <br>";
235201 }
236202 };
237203 function sendMessage(event) {
@@ -270,6 +236,30 @@ async def home():
270236 document.getElementById('messages').appendChild(lastMessageElement);
271237 input.value = '';
272238 }
239+ function approveCode() {
240+ var startCommandBlock = {
241+ "role": "user",
242+ "type": "command",
243+ "start": true
244+ };
245+ ws.send(JSON.stringify(startCommandBlock));
246+
247+ var commandBlock = {
248+ "role": "user",
249+ "type": "command",
250+ "content": "go"
251+ };
252+ ws.send(JSON.stringify(commandBlock));
253+
254+ var endCommandBlock = {
255+ "role": "user",
256+ "type": "command",
257+ "end": true
258+ };
259+ ws.send(JSON.stringify(endCommandBlock));
260+ }
261+
262+ document.getElementById("approveCodeButton").addEventListener("click", approveCode);
273263 </script>
274264 </body>
275265 </html>
@@ -287,7 +277,7 @@ async def receive_input():
287277 try :
288278 data = await websocket .receive ()
289279
290- print ("RECIEVED :" , data )
280+ print ("Received :" , data )
291281
292282 if data .get ("type" ) == "websocket.receive" and "text" in data :
293283 data = json .loads (data ["text" ])
@@ -315,14 +305,30 @@ async def send_output():
315305 while True :
316306 try :
317307 output = await async_interpreter .output ()
318-
319- print ("SENDING" , output )
320-
321- if isinstance (output , bytes ):
322- await websocket .send_bytes (output )
308+ # print("Attempting to send the following output:", output)
309+
310+ for attempt in range (100 ):
311+ try :
312+ if isinstance (output , bytes ):
313+ await websocket .send_bytes (output )
314+ else :
315+ await websocket .send_text (json .dumps (output ))
316+ # print("Output sent successfully. Output was:", output)
317+ break
318+ except Exception as e :
319+ print (
320+ "Failed to send output on attempt number:" ,
321+ attempt + 1 ,
322+ ". Output was:" ,
323+ output ,
324+ )
325+ print ("Error:" , str (e ))
326+ await asyncio .sleep (0.05 )
323327 else :
324- # output["time"] = time.time()
325- await websocket .send_text (json .dumps (output ))
328+ raise Exception (
329+ "Failed to send after 100 attempts. Output was:" ,
330+ str (output ),
331+ )
326332 except Exception as e :
327333 error = traceback .format_exc () + "\n " + str (e )
328334 error_message = {
@@ -422,7 +428,7 @@ async def get_setting(setting: str):
422428port = int (os .getenv ("PORT" , 8000 )) # Default port is 8000
423429
424430# FOR TESTING ONLY
425- # host = "0.0.0.0"
431+ host = "0.0.0.0"
426432
427433
428434class Server :
0 commit comments