fix: support streaming screenshot OCR

This commit is contained in:
2026-08-03 16:14:01 +02:00
parent b9547ae4c4
commit 5d0ae84426
9 changed files with 362 additions and 145 deletions
@@ -659,9 +659,9 @@ public sealed class LiteLlmResponsesChatClient : IChatClient
private static void AddInputItem(JsonArray input, StringBuilder instructions, ChatMessage message)
{
var role = message.Role.Value;
var text = message.Text;
if (role == ChatRole.System.Value)
{
var text = message.Text;
if (!string.IsNullOrWhiteSpace(text))
{
instructions.AppendLine(text);
@@ -670,21 +670,37 @@ public sealed class LiteLlmResponsesChatClient : IChatClient
return;
}
if (!string.IsNullOrWhiteSpace(text))
var isAssistant = role == ChatRole.Assistant.Value;
var messageContent = new JsonArray();
foreach (var content in message.Contents)
{
if (content is TextContent textContent && !string.IsNullOrWhiteSpace(textContent.Text))
{
messageContent.Add(new JsonObject
{
["type"] = isAssistant ? "output_text" : "input_text",
["text"] = textContent.Text
});
}
else if (!isAssistant &&
content is DataContent dataContent &&
dataContent.HasTopLevelMediaType("image"))
{
messageContent.Add(new JsonObject
{
["type"] = "input_image",
["image_url"] = dataContent.Uri.ToString()
});
}
}
if (messageContent.Count > 0)
{
var isAssistant = role == ChatRole.Assistant.Value;
input.Add(new JsonObject
{
["type"] = "message",
["role"] = isAssistant ? "assistant" : "user",
["content"] = new JsonArray
{
new JsonObject
{
["type"] = isAssistant ? "output_text" : "input_text",
["text"] = text
}
}
["content"] = messageContent
});
}
@@ -761,7 +777,7 @@ public sealed class LiteLlmResponsesChatClient : IChatClient
return Math.Max(1, (int)Math.Ceiling(json.Length / 4.0));
}
private static Uri NormalizeEndpoint(Uri endpoint)
internal static Uri NormalizeEndpoint(Uri endpoint)
{
var value = endpoint.ToString().TrimEnd('/');
if (!value.EndsWith("/v1", StringComparison.OrdinalIgnoreCase))