feat: vision in the agentic chat path (image content block)
Neuron Soul CI / build (pull_request) Failing after 23m26s
Neuron Soul CI / build (pull_request) Failing after 23m26s
handle_chat_agentic now reads body image + image_media_type and, when present, sends the current
user turn as an Anthropic content-block array [{text},{image}] instead of a plain string — so the
model sees raw pixels alongside memory, history, and tools (parity with the CLI). Additive: no image
=> output byte-identical to before. elc-clean. Pairs with neuron-ui fix/chat-vision-attachments.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1688,12 +1688,25 @@ fn handle_chat_agentic(body: String) -> String {
|
||||
let safe_msg: String = json_safe(message)
|
||||
let safe_sys: String = json_safe(system)
|
||||
|
||||
// Vision in the agentic brain (2026-06-27): when the client attaches an image
|
||||
// (base64 in body "image", mime in "image_media_type"), send it as a real Anthropic
|
||||
// image content block on THIS user turn — so the model sees raw pixels WITH memory,
|
||||
// history, and tools (parity with the CLI). img_b64 == "" => byte-identical to before.
|
||||
let img_b64: String = json_get(body, "image")
|
||||
let img_mt_raw: String = json_get(body, "image_media_type")
|
||||
let img_mt: String = if str_eq(img_mt_raw, "") { "image/png" } else { img_mt_raw }
|
||||
let cur_user_content: String = if str_eq(img_b64, "") {
|
||||
"\"" + safe_msg + "\""
|
||||
} else {
|
||||
"[{\"type\":\"text\",\"text\":\"" + safe_msg + "\"},{\"type\":\"image\",\"source\":{\"type\":\"base64\",\"media_type\":\"" + img_mt + "\",\"data\":\"" + img_b64 + "\"}}]"
|
||||
}
|
||||
|
||||
// Seed the messages array with recent history if available, so the LLM sees the thread.
|
||||
let prior_messages: String = if agentic_hist_len > 0 {
|
||||
let inner: String = str_slice(agentic_hist, 1, str_len(agentic_hist) - 1)
|
||||
"[" + inner + ",{\"role\":\"user\",\"content\":\"" + safe_msg + "\"}]"
|
||||
"[" + inner + ",{\"role\":\"user\",\"content\":" + cur_user_content + "}]"
|
||||
} else {
|
||||
"[{\"role\":\"user\",\"content\":\"" + safe_msg + "\"}]"
|
||||
"[{\"role\":\"user\",\"content\":" + cur_user_content + "}]"
|
||||
}
|
||||
let messages: String = prior_messages
|
||||
let api_url: String = "https://api.anthropic.com/v1/messages"
|
||||
|
||||
Reference in New Issue
Block a user