File-Upload: Attachments-Tabelle, Base64-Speicherung, Frontend mit Drag&Drop/Paste/Preview, Error-Handling Fix
This commit is contained in:
1 parent
680f1d6fe2
commit
1271c9c651
11 files changed
+513
-11
No files matched your search
+113
-1
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Gott.Models;
|
||||
@@ -9,7 +10,118 @@ public class ChatMessage
|
||||
public string Role { get; set; } = "";
|
||||
|
||||
[JsonPropertyName("content")]
|
||||
public string Content { get; set; } = "";
|
||||
public JsonElement Content { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Extrahiert den reinen Text aus Content (egal ob string oder content-block array).
|
||||
/// </summary>
|
||||
public string GetTextContent()
|
||||
{
|
||||
if (Content.ValueKind == JsonValueKind.String)
|
||||
return Content.GetString() ?? "";
|
||||
|
||||
if (Content.ValueKind == JsonValueKind.Array)
|
||||
{
|
||||
var parts = new List<string>();
|
||||
foreach (var block in Content.EnumerateArray())
|
||||
{
|
||||
if (block.TryGetProperty("type", out var t) && t.GetString() == "text"
|
||||
&& block.TryGetProperty("text", out var txt))
|
||||
parts.Add(txt.GetString() ?? "");
|
||||
}
|
||||
return string.Join("\n", parts);
|
||||
}
|
||||
|
||||
return Content.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Prüft ob Datei-Attachments (image/document) enthalten sind.
|
||||
/// </summary>
|
||||
public bool HasAttachments()
|
||||
{
|
||||
if (Content.ValueKind != JsonValueKind.Array) return false;
|
||||
foreach (var block in Content.EnumerateArray())
|
||||
{
|
||||
if (block.TryGetProperty("type", out var t))
|
||||
{
|
||||
var type = t.GetString();
|
||||
if (type == "image" || type == "document") return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gibt Attachment-Infos zurück (type + media_type).
|
||||
/// </summary>
|
||||
public List<AttachmentInfo> GetAttachments()
|
||||
{
|
||||
var result = new List<AttachmentInfo>();
|
||||
if (Content.ValueKind != JsonValueKind.Array) return result;
|
||||
foreach (var block in Content.EnumerateArray())
|
||||
{
|
||||
if (block.TryGetProperty("type", out var t))
|
||||
{
|
||||
var type = t.GetString();
|
||||
if (type == "image" || type == "document")
|
||||
{
|
||||
var mediaType = "";
|
||||
if (block.TryGetProperty("source", out var src) && src.TryGetProperty("media_type", out var mt))
|
||||
mediaType = mt.GetString() ?? "";
|
||||
result.Add(new AttachmentInfo { Type = type, MediaType = mediaType });
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gibt vollständige Attachment-Blöcke zurück (inkl. Base64-Daten).
|
||||
/// </summary>
|
||||
public List<AttachmentBlock> GetAttachmentBlocks()
|
||||
{
|
||||
var result = new List<AttachmentBlock>();
|
||||
if (Content.ValueKind != JsonValueKind.Array) return result;
|
||||
foreach (var block in Content.EnumerateArray())
|
||||
{
|
||||
if (block.TryGetProperty("type", out var t))
|
||||
{
|
||||
var type = t.GetString();
|
||||
if (type == "image" || type == "document")
|
||||
{
|
||||
var mediaType = "";
|
||||
var data = "";
|
||||
var fileName = "";
|
||||
if (block.TryGetProperty("source", out var src))
|
||||
{
|
||||
if (src.TryGetProperty("media_type", out var mt))
|
||||
mediaType = mt.GetString() ?? "";
|
||||
if (src.TryGetProperty("data", out var d))
|
||||
data = d.GetString() ?? "";
|
||||
}
|
||||
if (block.TryGetProperty("_file_name", out var fn))
|
||||
fileName = fn.GetString() ?? "";
|
||||
result.Add(new AttachmentBlock { Type = type, MediaType = mediaType, Data = data, FileName = fileName });
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public class AttachmentBlock
|
||||
{
|
||||
public string Type { get; set; } = "";
|
||||
public string MediaType { get; set; } = "";
|
||||
public string Data { get; set; } = "";
|
||||
public string FileName { get; set; } = "";
|
||||
}
|
||||
|
||||
public class AttachmentInfo
|
||||
{
|
||||
public string Type { get; set; } = "";
|
||||
public string MediaType { get; set; } = "";
|
||||
}
|
||||
|
||||
public class ChatRequest
|
||||
|
||||
Reference in new issue
Block a user