Skip to content

Commit f170c35

Browse files
committed
Added server retries
1 parent 0120f22 commit f170c35

File tree

1 file changed

+59
-53
lines changed

1 file changed

+59
-53
lines changed

interpreter/core/async_core.py

Lines changed: 59 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -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):
422428
port = 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

428434
class Server:

0 commit comments

Comments
 (0)