feat: add a subagent frame
This commit is contained in:
98
agentlite/tests/utils.py
Normal file
98
agentlite/tests/utils.py
Normal file
@@ -0,0 +1,98 @@
|
||||
"""Test utilities and helpers for AgentLite tests.
|
||||
|
||||
This module provides utility functions and helpers used across test modules.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from typing import Any, TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
async def run_async(coro: asyncio.Coroutine[Any, Any, T]) -> T:
|
||||
"""Run an async coroutine and return the result.
|
||||
|
||||
This is a helper for tests that need to run async code synchronously.
|
||||
|
||||
Args:
|
||||
coro: The coroutine to run.
|
||||
|
||||
Returns:
|
||||
The result of the coroutine.
|
||||
"""
|
||||
return await coro
|
||||
|
||||
|
||||
def run_sync(coro: asyncio.Coroutine[Any, Any, T]) -> T:
|
||||
"""Run an async coroutine synchronously.
|
||||
|
||||
Args:
|
||||
coro: The coroutine to run.
|
||||
|
||||
Returns:
|
||||
The result of the coroutine.
|
||||
"""
|
||||
return asyncio.run(coro)
|
||||
|
||||
|
||||
async def collect_stream(stream) -> list[Any]:
|
||||
"""Collect all items from an async stream into a list.
|
||||
|
||||
Args:
|
||||
stream: The async stream to collect from.
|
||||
|
||||
Returns:
|
||||
List of all items from the stream.
|
||||
"""
|
||||
items = []
|
||||
async for item in stream:
|
||||
items.append(item)
|
||||
return items
|
||||
|
||||
|
||||
async def collect_stream_text(stream) -> str:
|
||||
"""Collect all text from an async text stream.
|
||||
|
||||
Args:
|
||||
stream: The async stream to collect from.
|
||||
|
||||
Returns:
|
||||
Concatenated text from all items.
|
||||
"""
|
||||
from agentlite import TextPart
|
||||
|
||||
text_parts = []
|
||||
async for item in stream:
|
||||
if isinstance(item, TextPart):
|
||||
text_parts.append(item.text)
|
||||
elif isinstance(item, str):
|
||||
text_parts.append(item)
|
||||
return "".join(text_parts)
|
||||
|
||||
|
||||
def create_tool_schema(
|
||||
name: str,
|
||||
description: str,
|
||||
properties: dict[str, Any],
|
||||
required: list[str] | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""Create a JSON schema for a tool.
|
||||
|
||||
Args:
|
||||
name: Tool name.
|
||||
description: Tool description.
|
||||
properties: JSON schema properties.
|
||||
required: List of required property names.
|
||||
|
||||
Returns:
|
||||
JSON schema for the tool.
|
||||
"""
|
||||
schema = {
|
||||
"type": "object",
|
||||
"properties": properties,
|
||||
}
|
||||
if required:
|
||||
schema["required"] = required
|
||||
return schema
|
||||
Reference in New Issue
Block a user