refactor(guardrails): read Akto attachment fields directly instead of pattern captures

This commit is contained in:
Rohan 2026-10-03 16:50:23 +05:30
parent 0c70b60f65
commit 8111bed6b9

View file

@ -184,10 +184,10 @@ def _nested_blocks(blocks: tuple[_AttachmentBlock, ...]) -> tuple[_AttachmentBlo
def _nested_content(block: _AttachmentBlock) -> object:
match block:
case _ToolResultBlock(content=content):
return content
case _DocumentBlock(source=_Source(type="content", content=content)):
return content
case _ToolResultBlock():
return block.content
case _DocumentBlock(source=_Source(type="content")):
return block.source.content
case _:
return None
@ -200,16 +200,10 @@ def _blocks(content: object) -> tuple[_AttachmentBlock, ...]:
def _classify_block(block: _AttachmentBlock, index: int) -> _Classified:
match block:
case _ImageURLBlock(image_url=_ImageURL(url=url)):
return _from_uri(url, None, index, "image")
case _ImageURLBlock(image_url=str(url)):
return _from_uri(url, None, index, "image")
case _InputImageBlock(image_url=url):
return _from_uri(url, None, index, "image")
case _VideoURLBlock(video_url=_ImageURL(url=url)):
return _from_uri(url, None, index, "file")
case _VideoURLBlock(video_url=str(url)):
return _from_uri(url, None, index, "file")
case _ImageURLBlock() | _InputImageBlock():
return _from_uri(_url(block.image_url), None, index, "image")
case _VideoURLBlock():
return _from_uri(_url(block.video_url), None, index, "file")
case _InputAudioBlock(input_audio=_InputAudio(data=str(data), format=audio_format)):
name: Final = f"attachment-{index}.{audio_format}" if audio_format else None
return _from_base64(data, name, index, "audio", None)
@ -227,6 +221,10 @@ def _classify_block(block: _AttachmentBlock, index: int) -> _Classified:
return _NOT_AN_ATTACHMENT
def _url(value: _ImageURL | str | None) -> str | None:
return value.url if isinstance(value, _ImageURL) else value
def _from_uri(raw_uri: str | None, name: str | None, index: int, kind: AttachmentType) -> _Classified:
uri: Final = (raw_uri or "").strip()
if not uri: