Add function to normalize chat attachments and raise exceptions for invalid types
This commit is contained in:
@@ -157,6 +157,32 @@ def _normalize_chat_attachments(items: Any, *, include_text: bool = False) -> Li
|
|||||||
return cleaned
|
return cleaned
|
||||||
|
|
||||||
|
|
||||||
|
def _normalize_chat_attachment_or_raise(item: Any, *, include_text: bool = False) -> dict:
|
||||||
|
kind = str(_attachment_field(item, "kind") or "").strip().lower()
|
||||||
|
data_url = str(_attachment_field(item, "data_url") or "").strip()
|
||||||
|
source_path = str(_attachment_field(item, "source_path") or "").strip()
|
||||||
|
name_hint = _attachment_field(item, "name") or (Path(source_path).name if source_path else None) or "attachment"
|
||||||
|
label = _normalize_attachment_name(name_hint, "attachment")
|
||||||
|
|
||||||
|
if kind == "image" or (not kind and data_url):
|
||||||
|
normalized = _normalize_image_attachment(item)
|
||||||
|
if normalized:
|
||||||
|
return normalized
|
||||||
|
raise HTTPException(status_code=400, detail=f"{label}: invalid image attachment.")
|
||||||
|
|
||||||
|
normalized = _normalize_file_attachment(item, include_text=include_text)
|
||||||
|
if normalized:
|
||||||
|
return normalized
|
||||||
|
|
||||||
|
if source_path:
|
||||||
|
extension = Path(source_path).suffix.lower()
|
||||||
|
if extension in _CHAT_IMAGE_EXTENSIONS:
|
||||||
|
raise HTTPException(status_code=400, detail=f"{label}: use Add Image(s) for image attachments.")
|
||||||
|
raise HTTPException(status_code=400, detail=f"{label}: unsupported file type for chat attachment.")
|
||||||
|
|
||||||
|
raise HTTPException(status_code=400, detail=f"{label}: local file path is required for non-image attachments.")
|
||||||
|
|
||||||
|
|
||||||
def _load_message_attachments(raw_value: Any, *, include_text: bool = False) -> List[dict]:
|
def _load_message_attachments(raw_value: Any, *, include_text: bool = False) -> List[dict]:
|
||||||
if isinstance(raw_value, str):
|
if isinstance(raw_value, str):
|
||||||
try:
|
try:
|
||||||
@@ -418,7 +444,10 @@ async def _prepare_chat_message_attachments(
|
|||||||
transcription_model: Optional[str],
|
transcription_model: Optional[str],
|
||||||
persist_file_text: bool,
|
persist_file_text: bool,
|
||||||
) -> tuple[List[dict], List[str], str]:
|
) -> tuple[List[dict], List[str], str]:
|
||||||
prepared = _normalize_chat_attachments(attachments, include_text=True)
|
prepared = [
|
||||||
|
_normalize_chat_attachment_or_raise(item, include_text=True)
|
||||||
|
for item in (attachments or [])
|
||||||
|
]
|
||||||
if not prepared:
|
if not prepared:
|
||||||
return [], [], ""
|
return [], [], ""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user