OpenInterpreter / open-interpreter

A natural language interface for computers
http://openinterpreter.com/
GNU Affero General Public License v3.0
50.48k stars 4.4k forks source link

websocket --server doesn't seem to be really asynchronous processing? #1300

Open bincooo opened 2 weeks ago

bincooo commented 2 weeks ago

Describe the bug

I've added some log outputs that don't appear to return data in real time, but rather after execution:

(interpreter) bincooo@iMac ~ % interpreter --model coze/gpt4o --auto_run --server
INFO:     Started server process [4656]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

Updating interpreter settings with the following:
messages []
INFO:     127.0.0.1:51130 - "POST /settings HTTP/1.1" 200 OK
INFO:     ('127.0.0.1', 51131) - "WebSocket /" [accepted]
INFO:     connection open
websocket receive: {'type': 'websocket.receive', 'text': '{"role": "user", "type": "message", "start": true}'}
websocket receive: {'type': 'websocket.receive', 'text': '{"content":"帮我打开计算器","role":"user","type":"message"}\n'}
_add_to_queue: {'content': '帮我打开计算器', 'role': 'user', 'type': 'message'}
websocket receive: {'type': 'websocket.receive', 'text': '{"role": "user", "type": "message", "end": true}'}
[{'content': '帮我打开计算器', 'role': 'user', 'type': 'message'}]
🍀🍀🍀🍀GENERATING, using these messages:  []
passing this in: 帮我打开计算器
_add_to_queue: {'role': 'assistant', 'type': 'message', 'start': True}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '好的'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': ','}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '首先'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '我们'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '需要'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '确认'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '您'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '使用'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '的'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '操作'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '系统'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '是'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': 'Mac'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': 'OS'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '('}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': 'Dar'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': 'win'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': ')。'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '在'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': 'Mac'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': 'OS'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '上'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': ',我们'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '可以'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '通过'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '命'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '令'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '行'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '打开'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '计算'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '器'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '应用'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '程序'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '。\n\n'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '我'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '将'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '编'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '写'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '一个'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': 'Shell'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '脚'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '本'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '来'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '打开'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '计算'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '器'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '。\n\n'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'end': True}
_add_to_queue: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'start': True}
_add_to_queue: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': '\n'}
_add_to_queue: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': 'open'}
_add_to_queue: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': ' -'}
_add_to_queue: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': 'a'}
_add_to_queue: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': ' Calculator'}
_add_to_queue: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': '\n'}
_add_to_queue: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'end': True}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'start': True}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '计算'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '器'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '应该'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '已经'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '打开'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '了'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '。如果'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '您'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '没有'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '看到'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '计算'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '器'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '应用'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '程序'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': ',请'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '告诉'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '我'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '。我'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '可以'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '进一步'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '检查'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '或'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '尝'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '试'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '其他'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '方法'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'content': '。'}
_add_to_queue: {'role': 'assistant', 'type': 'message', 'end': True}
_add_to_queue: {'role': 'server', 'type': 'completion', 'content': 'DONE'}
send_output: {'role': 'assistant', 'type': 'message', 'start': True}
send_output: {'role': 'assistant', 'type': 'message', 'content': '好的'}
send_output: {'role': 'assistant', 'type': 'message', 'content': ','}
send_output: {'role': 'assistant', 'type': 'message', 'content': '首先'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '我们'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '需要'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '确认'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '您'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '使用'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '的'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '操作'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '系统'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '是'}
send_output: {'role': 'assistant', 'type': 'message', 'content': 'Mac'}
send_output: {'role': 'assistant', 'type': 'message', 'content': 'OS'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '('}
send_output: {'role': 'assistant', 'type': 'message', 'content': 'Dar'}
send_output: {'role': 'assistant', 'type': 'message', 'content': 'win'}
send_output: {'role': 'assistant', 'type': 'message', 'content': ')。'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '在'}
send_output: {'role': 'assistant', 'type': 'message', 'content': 'Mac'}
send_output: {'role': 'assistant', 'type': 'message', 'content': 'OS'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '上'}
send_output: {'role': 'assistant', 'type': 'message', 'content': ',我们'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '可以'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '通过'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '命'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '令'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '行'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '打开'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '计算'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '器'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '应用'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '程序'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '。\n\n'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '我'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '将'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '编'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '写'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '一个'}
send_output: {'role': 'assistant', 'type': 'message', 'content': 'Shell'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '脚'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '本'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '来'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '打开'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '计算'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '器'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '。\n\n'}
send_output: {'role': 'assistant', 'type': 'message', 'end': True}
send_output: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'start': True}
send_output: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': '\n'}
send_output: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': 'open'}
send_output: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': ' -'}
send_output: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': 'a'}
send_output: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': ' Calculator'}
send_output: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'content': '\n'}
send_output: {'role': 'assistant', 'type': 'code', 'format': 'sh', 'end': True}
send_output: {'role': 'assistant', 'type': 'message', 'start': True}
send_output: {'role': 'assistant', 'type': 'message', 'content': '计算'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '器'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '应该'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '已经'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '打开'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '了'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '。如果'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '您'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '没有'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '看到'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '计算'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '器'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '应用'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '程序'}
send_output: {'role': 'assistant', 'type': 'message', 'content': ',请'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '告诉'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '我'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '。我'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '可以'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '进一步'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '检查'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '或'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '尝'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '试'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '其他'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '方法'}
send_output: {'role': 'assistant', 'type': 'message', 'content': '。'}
send_output: {'role': 'assistant', 'type': 'message', 'end': True}
send_output: {'role': 'server', 'type': 'completion', 'content': 'DONE'}
websocket receive: {'type': 'websocket.disconnect', 'code': <CloseCode.NO_STATUS_RCVD: 1005>}
Websocket disconnected with code 1005.
INFO:     connection closed

Reproduce

none

Expected behavior

Asynchronous return data.

Screenshots

No response

Open Interpreter version

Version: 0.2.6

Python version

Python 3.11.9

Operating System name and version

macOS 14.1

Additional context

No response

KillianLucas commented 2 weeks ago

I've noticed this too, I think we just need to add an asyncio.sleep(0) to yield control to the event loop. Will make a big update to the server soon to fix this!

bincooo commented 1 week ago

Thanks for your reply. Also, can you provide a reverse connection websoket?