vision: images are the primary channel for multimodal models (digest off by default); digest is the text-only fallback; --digest/--no-digest to override
This commit is contained in:
@@ -7044,3 +7044,116 @@
|
|||||||
[26830285ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
[26830285ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
[26832889ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
[26832889ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
[26837189ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
[26837189ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26840473ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26845811ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26849317ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26853839ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26857394ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26861529ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26864421ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26868598ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26871713ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26874668ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26877820ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26882430ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26884661ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26888780ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26893476ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26898360ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26904323ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26908244ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26909246ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26910248ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26911250ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26912253ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26913257ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26914263ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26915270ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26916282ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26917300ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26918352ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26919495ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26920586ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26921908ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26923718ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26926237ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26930546ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26936372ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26939937ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26942021ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26947027ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26949432ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26952965ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26958241ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26960645ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26965012ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26968249ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26970843ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26974186ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26980011ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26984871ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26988694ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26991455ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26994545ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[26999050ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27004259ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27006515ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27011986ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27015392ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27020008ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27024409ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27028041ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27030792ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27035327ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27037817ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27042485ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27048292ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27050319ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27054897ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27058682ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27064087ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27068723ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27073851ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27077495ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27081540ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27085093ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27088279ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27092210ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27094867ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27100756ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27104868ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27108400ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27110947ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27114621ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27119456ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27123436ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27126084ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27129079ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27132854ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27136862ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27139564ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27142081ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27147154ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27149205ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27150207ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27151209ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27152211ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27153214ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27154217ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27155223ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27156230ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27157244ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27158276ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27159346ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27160450ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27161729ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27163142ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27165250ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27167655ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27171759ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27176978ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27180466ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27184670ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27189217ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27192509ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
[27195631ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40
|
||||||
|
|||||||
+11
-9
@@ -103,17 +103,19 @@ many tool steps the model may chain per request (0 = one action per turn).
|
|||||||
|
|
||||||
### Real vision
|
### Real vision
|
||||||
|
|
||||||
By default the model gets frames as a color-grid digest (works for any
|
Vision is the **primary channel**: when the model is multimodal, `vision`
|
||||||
text-only model). If the model can actually see images (gemma3/gemma4,
|
tool results attach the actual camera frame as an image to the conversation —
|
||||||
qwen2.5-vl, gpt-4o-mini, ...), pass the frames as real images:
|
the model sees the crate, the wall, the glowing beacon. The color-grid
|
||||||
|
digest is only the **fallback** for text-only models:
|
||||||
|
|
||||||
- auto-detected for local ollama (`/api/show` capabilities) — nothing to do
|
- multimodal model (auto-detected for local ollama via `/api/show`;
|
||||||
- otherwise force it: `--vision` (or `--no-vision` to disable)
|
otherwise `--vision`): frame as image, digest off
|
||||||
|
- text-only model: digest on automatically; `--digest` forces the digest to
|
||||||
|
be included even alongside images, `--no-digest` disables it everywhere
|
||||||
|
|
||||||
With vision ON, `vision` tool results attach the actual camera frame as an
|
Verified locally: gemma4:12b sees frames and completed a beacon mission on
|
||||||
image to the conversation — the model sees the crate, the wall, the glowing
|
its first attempt; gemma4:e2b describes what it sees (crates, beacon) and
|
||||||
beacon, and orients itself. Verified locally: gemma4:12b completed a beacon
|
orients itself from the image.
|
||||||
mission on its first attempt using look_at/move navigation.
|
|
||||||
|
|
||||||
## Real-time mode
|
## Real-time mode
|
||||||
|
|
||||||
|
|||||||
@@ -63,11 +63,14 @@ async def chat_loop(client: AICCClient, manifest, args: argparse.Namespace) -> i
|
|||||||
system_prompt=CHAT_MISSION,
|
system_prompt=CHAT_MISSION,
|
||||||
log=lambda role, msg: print(f" [{role}] {msg}"),
|
log=lambda role, msg: print(f" [{role}] {msg}"),
|
||||||
multimodal=args.vision,
|
multimodal=args.vision,
|
||||||
|
digest=args.digest,
|
||||||
)
|
)
|
||||||
auto_steps = args.auto_steps
|
auto_steps = args.auto_steps
|
||||||
print(f"[chat] model: {model} (endpoint {args.base_url})")
|
print(f"[chat] model: {model} (endpoint {args.base_url})")
|
||||||
if controller.multimodal:
|
if controller.multimodal:
|
||||||
print("[chat] vision: ON — the model sees the actual camera frames")
|
print("[chat] vision: ON — the model sees the actual camera frames")
|
||||||
|
else:
|
||||||
|
print("[chat] vision: text-only model — frames are sent as a color-grid digest")
|
||||||
print("[chat] type your commands; /help for the command list; /exit to quit\n")
|
print("[chat] type your commands; /help for the command list; /exit to quit\n")
|
||||||
|
|
||||||
async def cmd_state() -> None:
|
async def cmd_state() -> None:
|
||||||
@@ -422,6 +425,12 @@ def main() -> int:
|
|||||||
default=None,
|
default=None,
|
||||||
help="pass real camera frames to the model as images (auto-detected for local ollama)",
|
help="pass real camera frames to the model as images (auto-detected for local ollama)",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--digest",
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
default=None,
|
||||||
|
help="always include the color-grid digest alongside images (off by default for multimodal models)",
|
||||||
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
try:
|
try:
|
||||||
return asyncio.run(run(args))
|
return asyncio.run(run(args))
|
||||||
|
|||||||
@@ -140,6 +140,7 @@ async def run_llm_agent(
|
|||||||
max_steps: int,
|
max_steps: int,
|
||||||
recorder: FrameRecorder | None = None,
|
recorder: FrameRecorder | None = None,
|
||||||
vision: bool | None = None,
|
vision: bool | None = None,
|
||||||
|
digest: bool | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Autonomous LLM run: controller + nudge/correct loop (see llm_agent)."""
|
"""Autonomous LLM run: controller + nudge/correct loop (see llm_agent)."""
|
||||||
from testbed.llm_agent import LLMController, run_llm_agent_loop
|
from testbed.llm_agent import LLMController, run_llm_agent_loop
|
||||||
@@ -152,6 +153,7 @@ async def run_llm_agent(
|
|||||||
model=model,
|
model=model,
|
||||||
log=lambda role, msg: print(f"[{role}] {msg}"),
|
log=lambda role, msg: print(f"[{role}] {msg}"),
|
||||||
multimodal=vision,
|
multimodal=vision,
|
||||||
|
digest=digest,
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
return await run_llm_agent_loop(
|
return await run_llm_agent_loop(
|
||||||
@@ -310,6 +312,7 @@ async def run_demo(args: argparse.Namespace) -> dict[str, Any]:
|
|||||||
max_steps=args.max_steps,
|
max_steps=args.max_steps,
|
||||||
recorder=recorder,
|
recorder=recorder,
|
||||||
vision=args.vision,
|
vision=args.vision,
|
||||||
|
digest=args.digest,
|
||||||
)
|
)
|
||||||
elif args.agent == "scripted":
|
elif args.agent == "scripted":
|
||||||
summary = await run_scripted_agent(
|
summary = await run_scripted_agent(
|
||||||
@@ -331,6 +334,7 @@ async def run_demo(args: argparse.Namespace) -> dict[str, Any]:
|
|||||||
max_steps=llm_steps,
|
max_steps=llm_steps,
|
||||||
recorder=recorder,
|
recorder=recorder,
|
||||||
vision=args.vision,
|
vision=args.vision,
|
||||||
|
digest=args.digest,
|
||||||
)
|
)
|
||||||
if summary.get("interacted"):
|
if summary.get("interacted"):
|
||||||
return summary
|
return summary
|
||||||
@@ -398,6 +402,12 @@ def main() -> int:
|
|||||||
default=None,
|
default=None,
|
||||||
help="pass real camera frames to the model as images (auto-detected for local ollama)",
|
help="pass real camera frames to the model as images (auto-detected for local ollama)",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--digest",
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
default=None,
|
||||||
|
help="always include the color-grid digest alongside images (off by default for multimodal models)",
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--frame",
|
"--frame",
|
||||||
default="demo_final_frame.png",
|
default="demo_final_frame.png",
|
||||||
|
|||||||
+21
-10
@@ -229,6 +229,7 @@ class LLMController:
|
|||||||
system_prompt: str = MISSION,
|
system_prompt: str = MISSION,
|
||||||
log: LogFn | None = None,
|
log: LogFn | None = None,
|
||||||
multimodal: bool | None = None,
|
multimodal: bool | None = None,
|
||||||
|
digest: bool | None = None,
|
||||||
):
|
):
|
||||||
from openai import AsyncOpenAI
|
from openai import AsyncOpenAI
|
||||||
|
|
||||||
@@ -237,6 +238,9 @@ class LLMController:
|
|||||||
if multimodal is None:
|
if multimodal is None:
|
||||||
multimodal = detect_multimodal(base_url, model)
|
multimodal = detect_multimodal(base_url, model)
|
||||||
self.multimodal = multimodal
|
self.multimodal = multimodal
|
||||||
|
# The color-grid digest is the fallback channel for text-only models.
|
||||||
|
# For multimodal models it is off unless explicitly requested.
|
||||||
|
self.include_digest = (not multimodal) if digest is None else digest
|
||||||
self.ac = AsyncOpenAI(base_url=base_url, api_key=api_key)
|
self.ac = AsyncOpenAI(base_url=base_url, api_key=api_key)
|
||||||
self.tools = to_openai_tools(manifest.tools)
|
self.tools = to_openai_tools(manifest.tools)
|
||||||
self.messages: list[dict[str, Any]] = [
|
self.messages: list[dict[str, Any]] = [
|
||||||
@@ -344,9 +348,10 @@ class LLMController:
|
|||||||
digest = None
|
digest = None
|
||||||
extra = ""
|
extra = ""
|
||||||
if name == "vision" and isinstance(output.get("png_b64"), str):
|
if name == "vision" and isinstance(output.get("png_b64"), str):
|
||||||
digest = vision_digest(output["png_b64"])
|
|
||||||
extra = "\n" + digest
|
|
||||||
output = dict(output, png_b64="<binary, decoded for digest>")
|
output = dict(output, png_b64="<binary, decoded for digest>")
|
||||||
|
if self.include_digest:
|
||||||
|
digest = vision_digest(outcome.output["png_b64"])
|
||||||
|
extra = "\n" + digest
|
||||||
self.log("bridge", f"ok {json.dumps(output)[:500]}{extra}")
|
self.log("bridge", f"ok {json.dumps(output)[:500]}{extra}")
|
||||||
if name == "world_query":
|
if name == "world_query":
|
||||||
b = output.get("beacon")
|
b = output.get("beacon")
|
||||||
@@ -358,13 +363,14 @@ class LLMController:
|
|||||||
if name == "vision" and isinstance(outcome.output.get("png_b64"), str):
|
if name == "vision" and isinstance(outcome.output.get("png_b64"), str):
|
||||||
frame_b64 = outcome.output["png_b64"]
|
frame_b64 = outcome.output["png_b64"]
|
||||||
if self.multimodal and frame_b64 is not None:
|
if self.multimodal and frame_b64 is not None:
|
||||||
# Real vision: hand the model the actual frame as an image
|
# Primary channel: hand the model the actual frame as an
|
||||||
# (data URI), not as base64 text. Keep the digest too —
|
# image (data URI). The digest is optional and off by
|
||||||
# it is a cheap textual anchor for the model.
|
# default for multimodal models.
|
||||||
content = (hint + "\n" if hint else "") + (
|
frame_note = (
|
||||||
f"Camera frame ({output['width']}x{output['height']}, "
|
f"Camera frame ({output['width']}x{output['height']}, "
|
||||||
f"tick {output.get('tick')}) attached as an image.{extra}"
|
f"tick {output.get('tick')}) attached as an image."
|
||||||
)
|
)
|
||||||
|
content = (hint + "\n" if hint else "") + frame_note + extra
|
||||||
self.messages.append(
|
self.messages.append(
|
||||||
{"role": "tool", "tool_call_id": tc.id, "content": content}
|
{"role": "tool", "tool_call_id": tc.id, "content": content}
|
||||||
)
|
)
|
||||||
@@ -386,9 +392,14 @@ class LLMController:
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
content = json.dumps(outcome.output) + extra
|
# Fallback channel: the digest (plus frame metadata) for
|
||||||
if hint:
|
# text-only models.
|
||||||
content = hint + "\n" + content
|
content = (
|
||||||
|
(hint + "\n" if hint else "")
|
||||||
|
+ f"Camera frame ({output['width']}x{output['height']}, "
|
||||||
|
+ f"tick {output.get('tick')})."
|
||||||
|
+ extra
|
||||||
|
)
|
||||||
self.messages.append(
|
self.messages.append(
|
||||||
{"role": "tool", "tool_call_id": tc.id, "content": content}
|
{"role": "tool", "tool_call_id": tc.id, "content": content}
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user