Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions src/agentscope/formatter/_anthropic_formatter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
"""The Anthropic formatter module."""
import asyncio
import base64
import fnmatch
from abc import ABC
Expand Down Expand Up @@ -137,8 +138,9 @@ async def _format_messages(
{"type": "text", "text": sub.text},
)
elif isinstance(sub, DataBlock):
formatted_sub = (
self._format_anthropic_data_block(sub)
formatted_sub = await asyncio.to_thread(
self._format_anthropic_data_block,
sub,
)
if formatted_sub:
hint_parts.append(formatted_sub)
Expand All @@ -156,7 +158,10 @@ async def _format_messages(
)

elif isinstance(block, DataBlock):
formatted_block = self._format_anthropic_data_block(block)
formatted_block = await asyncio.to_thread(
self._format_anthropic_data_block,
block,
)
if formatted_block:
content_blocks.append(formatted_block)

Expand Down Expand Up @@ -212,7 +217,8 @@ async def _format_messages(
},
)
elif isinstance(out_block, DataBlock):
fmt_block = self._format_anthropic_data_block(
fmt_block = await asyncio.to_thread(
self._format_anthropic_data_block,
out_block,
)
if fmt_block:
Expand Down Expand Up @@ -463,7 +469,10 @@ async def _format_agent_message(
if isinstance(block, TextBlock):
agent_text_parts.append(block.text)
elif isinstance(block, DataBlock):
formatted_block = self._format_anthropic_data_block(block)
formatted_block = await asyncio.to_thread(
self._format_anthropic_data_block,
block,
)
if formatted_block:
if accumulated_text:
conversation_blocks.append(
Expand Down
17 changes: 13 additions & 4 deletions src/agentscope/formatter/_gemini_formatter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
"""Google Gemini API formatter in agentscope."""
import asyncio
import base64
import fnmatch
from abc import ABC
Expand Down Expand Up @@ -180,7 +181,8 @@ async def format(
if sub.text:
hint_parts.append({"text": sub.text})
elif isinstance(sub, DataBlock):
formatted_sub = self._format_gemini_data_block(
formatted_sub = await asyncio.to_thread(
self._format_gemini_data_block,
sub,
)
if formatted_sub:
Expand All @@ -198,7 +200,10 @@ async def format(
)

elif isinstance(block, DataBlock):
formatted = self._format_gemini_data_block(block)
formatted = await asyncio.to_thread(
self._format_gemini_data_block,
block,
)
if formatted:
parts.append(formatted)

Expand Down Expand Up @@ -253,7 +258,8 @@ async def format(
if isinstance(item, TextBlock):
promo_parts.append({"text": item.text})
elif isinstance(item, DataBlock):
fmt_item = self._format_gemini_data_block(
fmt_item = await asyncio.to_thread(
self._format_gemini_data_block,
item,
)
if fmt_item is not None:
Expand Down Expand Up @@ -398,7 +404,10 @@ async def _format_agent_message(
)
accumulated_text = []

formatted = self._format_gemini_data_block(block)
formatted = await asyncio.to_thread(
self._format_gemini_data_block,
block,
)
if formatted:
conversation_parts.append(formatted)

Expand Down
17 changes: 13 additions & 4 deletions src/agentscope/formatter/_moonshot_formatter.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
"""The Moonshot AI formatter for agentscope."""

import asyncio
import base64
from fnmatch import fnmatch
from typing import Any
Expand Down Expand Up @@ -146,7 +147,10 @@ async def format(
content_blocks.append({"type": "text", "text": block.text})

elif isinstance(block, DataBlock):
formatted = self._format_openai_data_block(block)
formatted = await asyncio.to_thread(
self._format_openai_data_block,
block,
)
if formatted is not None:
content_blocks.append(formatted)

Expand Down Expand Up @@ -187,7 +191,8 @@ async def format(
{"type": "text", "text": sub.text},
)
elif isinstance(sub, DataBlock):
formatted_sub = self._format_openai_data_block(
formatted_sub = await asyncio.to_thread(
self._format_openai_data_block,
sub,
)
if formatted_sub is not None:
Expand Down Expand Up @@ -251,7 +256,8 @@ async def format(
{"type": "text", "text": item.text},
)
elif isinstance(item, DataBlock):
fmt_item = self._format_openai_data_block(
fmt_item = await asyncio.to_thread(
self._format_openai_data_block,
item,
)
if fmt_item is not None:
Expand Down Expand Up @@ -430,7 +436,10 @@ async def _format_agent_message(
if isinstance(block, TextBlock):
accumulated_text.append(f"{msg.name}: {block.text}")
elif isinstance(block, DataBlock):
formatted = self._format_openai_data_block(block)
formatted = await asyncio.to_thread(
self._format_openai_data_block,
block,
)
if formatted is not None:
media_blocks.append(formatted)

Expand Down
21 changes: 14 additions & 7 deletions src/agentscope/formatter/_ollama_formatter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
"""The Ollama formatter module."""
import asyncio
import base64
import fnmatch
from abc import ABC
Expand Down Expand Up @@ -168,7 +169,8 @@ async def format(
if isinstance(sub, TextBlock):
hint_text_parts.append(sub.text)
elif isinstance(sub, DataBlock):
formatted_sub = self._format_ollama_data_block(
formatted_sub = await asyncio.to_thread(
self._format_ollama_data_block,
sub,
)
if formatted_sub:
Expand All @@ -183,7 +185,10 @@ async def format(
messages.append(hint_msg)

elif isinstance(block, DataBlock):
formatted_image = self._format_ollama_data_block(block)
formatted_image = await asyncio.to_thread(
self._format_ollama_data_block,
block,
)
if formatted_image:
images.append(formatted_image)

Expand Down Expand Up @@ -242,10 +247,9 @@ async def format(
user_content_parts = []
for data_block in multimodal_data:
if isinstance(data_block, DataBlock):
formatted_image = (
self._format_ollama_data_block(
data_block,
)
formatted_image = await asyncio.to_thread(
self._format_ollama_data_block,
data_block,
)
if formatted_image:
user_images.append(formatted_image)
Expand Down Expand Up @@ -420,7 +424,10 @@ async def _format_agent_message(
if isinstance(block, TextBlock):
msg_text_parts.append(block.text)
elif isinstance(block, DataBlock):
formatted_image = self._format_ollama_data_block(block)
formatted_image = await asyncio.to_thread(
self._format_ollama_data_block,
block,
)
if formatted_image:
images.append(formatted_image)
elif isinstance(block, (HintBlock, ThinkingBlock)):
Expand Down
13 changes: 9 additions & 4 deletions src/agentscope/formatter/_openai_formatter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
"""The OpenAI formatter for agentscope."""
import asyncio
import base64
from abc import ABC
from fnmatch import fnmatch
Expand Down Expand Up @@ -281,7 +282,8 @@ async def format(
content_blocks.append({"type": "text", "text": block.text})

elif isinstance(block, DataBlock):
formatted = self._format_openai_data_block(
formatted = await asyncio.to_thread(
self._format_openai_data_block,
block,
)
if formatted is not None:
Expand Down Expand Up @@ -317,7 +319,8 @@ async def format(
{"type": "text", "text": sub.text},
)
elif isinstance(sub, DataBlock):
formatted_sub = self._format_openai_data_block(
formatted_sub = await asyncio.to_thread(
self._format_openai_data_block,
sub,
)
if formatted_sub is not None:
Expand Down Expand Up @@ -374,7 +377,8 @@ async def format(
{"type": "text", "text": item.text},
)
elif isinstance(item, DataBlock):
fmt_item = self._format_openai_data_block(
fmt_item = await asyncio.to_thread(
self._format_openai_data_block,
item,
)
if fmt_item is not None:
Expand Down Expand Up @@ -516,7 +520,8 @@ async def _format_agent_message(
accumulated_text.append(f"{msg.name}: {block.text}")

elif isinstance(block, DataBlock):
formatted = self._format_openai_data_block(
formatted = await asyncio.to_thread(
self._format_openai_data_block,
block,
)
if formatted is not None:
Expand Down
21 changes: 14 additions & 7 deletions src/agentscope/formatter/_openai_response_formatter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
"""Formatters for the OpenAI Responses API."""
import asyncio
from abc import ABC
from copy import deepcopy
from fnmatch import fnmatch
Expand Down Expand Up @@ -210,7 +211,10 @@ async def format(
)

elif isinstance(block, DataBlock):
formatted = self._format_response_data_block(block)
formatted = await asyncio.to_thread(
self._format_response_data_block,
block,
)
if formatted is not None:
content_parts.append(formatted)

Expand Down Expand Up @@ -258,10 +262,9 @@ async def format(
},
)
elif isinstance(sub, DataBlock):
formatted_sub = (
self._format_response_data_block(
sub,
)
formatted_sub = await asyncio.to_thread(
self._format_response_data_block,
sub,
)
if formatted_sub is not None:
hint_parts.append(formatted_sub)
Expand Down Expand Up @@ -362,7 +365,8 @@ async def format(
{
"type": "function_call_output",
"call_id": block.id,
"output": self._format_tool_result_output(
"output": await asyncio.to_thread(
self._format_tool_result_output,
block.output,
),
},
Expand Down Expand Up @@ -506,7 +510,10 @@ async def _format_agent_message(
if isinstance(block, TextBlock):
accumulated_text.append(f"{msg.name}: {block.text}")
elif isinstance(block, DataBlock):
formatted = self._format_response_data_block(block)
formatted = await asyncio.to_thread(
self._format_response_data_block,
block,
)
if formatted is not None:
media_blocks.append(formatted)

Expand Down
14 changes: 10 additions & 4 deletions src/agentscope/formatter/_xai_formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@
``chat_pb2.Message`` proto objects rather than plain dicts, because the
``xai_sdk`` chat API accepts proto messages directly.
"""
import asyncio
import base64
from fnmatch import fnmatch
from typing import Any, List
from urllib.parse import urlsplit
from urllib.request import url2pathname

from pydantic import Field

Expand Down Expand Up @@ -74,7 +77,7 @@ def _xai_user_args_from_blocks(
if isinstance(sub.source, URLSource):
url_str = str(sub.source.url)
if url_str.startswith("file://"):
local_path = url_str.removeprefix("file://")
local_path = url2pathname(urlsplit(url_str).path)
with open(local_path, "rb") as f:
encoded = base64.b64encode(f.read()).decode(
"utf-8",
Expand Down Expand Up @@ -170,7 +173,8 @@ async def format(
if isinstance(block.hint, str):
xai_messages.append(user(block.hint))
else:
hint_args = _xai_user_args_from_blocks(
hint_args = await asyncio.to_thread(
_xai_user_args_from_blocks,
block.hint,
image,
self.supported_input_media_types,
Expand All @@ -181,7 +185,8 @@ async def format(
content_args.append(block.text)
elif isinstance(block, DataBlock):
content_args.extend(
_xai_user_args_from_blocks(
await asyncio.to_thread(
_xai_user_args_from_blocks,
[block],
image,
self.supported_input_media_types,
Expand Down Expand Up @@ -284,7 +289,8 @@ async def format(
if isinstance(block.hint, str):
xai_messages.append(user(block.hint))
else:
hint_args = _xai_user_args_from_blocks(
hint_args = await asyncio.to_thread(
_xai_user_args_from_blocks,
block.hint,
image,
self.supported_input_media_types,
Expand Down
Loading
Loading