mirror of
https://github.com/aljazceru/goose.git
synced 2025-12-22 00:24:23 +01:00
chore: setup workspace for exchange (#105)
This commit is contained in:
125
packages/exchange/tests/test_utils.py
Normal file
125
packages/exchange/tests/test_utils.py
Normal file
@@ -0,0 +1,125 @@
|
||||
import pytest
|
||||
from exchange import utils
|
||||
from unittest.mock import patch
|
||||
from exchange.message import Message
|
||||
from exchange.content import Text, ToolResult
|
||||
from exchange.providers.utils import messages_to_openai_spec, encode_image
|
||||
|
||||
|
||||
def test_encode_image():
|
||||
image_path = "tests/test_image.png"
|
||||
encoded_image = encode_image(image_path)
|
||||
|
||||
# Adjust this string based on the actual initial part of your base64-encoded image.
|
||||
expected_start = "iVBORw0KGgo"
|
||||
assert encoded_image.startswith(expected_start)
|
||||
|
||||
|
||||
def test_create_object_id() -> None:
|
||||
prefix = "test"
|
||||
object_id = utils.create_object_id(prefix)
|
||||
assert object_id.startswith(prefix + "_")
|
||||
assert len(object_id) == len(prefix) + 1 + 24 # prefix + _ + 24 chars
|
||||
|
||||
|
||||
def test_compact() -> None:
|
||||
content = "This is \n\n a test"
|
||||
compacted = utils.compact(content)
|
||||
assert compacted == "This is a test"
|
||||
|
||||
|
||||
def test_parse_docstring() -> None:
|
||||
def dummy_func(a, b, c):
|
||||
"""
|
||||
This function does something.
|
||||
|
||||
Args:
|
||||
a (int): The first parameter.
|
||||
b (str): The second parameter.
|
||||
c (list): The third parameter.
|
||||
"""
|
||||
pass
|
||||
|
||||
description, parameters = utils.parse_docstring(dummy_func)
|
||||
assert description == "This function does something."
|
||||
assert parameters == [
|
||||
{"name": "a", "annotation": "int", "description": "The first parameter."},
|
||||
{"name": "b", "annotation": "str", "description": "The second parameter."},
|
||||
{"name": "c", "annotation": "list", "description": "The third parameter."},
|
||||
]
|
||||
|
||||
|
||||
def test_parse_docstring_no_description() -> None:
|
||||
def dummy_func(a, b, c):
|
||||
"""
|
||||
Args:
|
||||
a (int): The first parameter.
|
||||
b (str): The second parameter.
|
||||
c (list): The third parameter.
|
||||
"""
|
||||
pass
|
||||
|
||||
with pytest.raises(ValueError) as e:
|
||||
utils.parse_docstring(dummy_func)
|
||||
|
||||
assert "Attempted to load from a function" in str(e.value)
|
||||
|
||||
|
||||
def test_json_schema() -> None:
|
||||
def dummy_func(a: int, b: str, c: list) -> None:
|
||||
pass
|
||||
|
||||
schema = utils.json_schema(dummy_func)
|
||||
|
||||
assert schema == {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"a": {"type": "integer"},
|
||||
"b": {"type": "string"},
|
||||
"c": {"type": "string"},
|
||||
},
|
||||
"required": ["a", "b", "c"],
|
||||
}
|
||||
|
||||
|
||||
def test_load_plugins() -> None:
|
||||
class DummyEntryPoint:
|
||||
def __init__(self, name, plugin):
|
||||
self.name = name
|
||||
self.plugin = plugin
|
||||
|
||||
def load(self):
|
||||
return self.plugin
|
||||
|
||||
with patch("exchange.utils.entry_points") as entry_points_mock:
|
||||
entry_points_mock.return_value = [
|
||||
DummyEntryPoint("plugin1", object()),
|
||||
DummyEntryPoint("plugin2", object()),
|
||||
]
|
||||
|
||||
plugins = utils.load_plugins("dummy_group")
|
||||
|
||||
assert "plugin1" in plugins
|
||||
assert "plugin2" in plugins
|
||||
assert len(plugins) == 2
|
||||
|
||||
|
||||
def test_messages_to_openai_spec():
|
||||
# Use provided test image
|
||||
png_path = "tests/test_image.png"
|
||||
|
||||
# Create a list of messages as input
|
||||
messages = [
|
||||
Message(role="user", content=[Text(text="Hello, Assistant!")]),
|
||||
Message(role="assistant", content=[Text(text="Here is a text with tool usage")]),
|
||||
Message(
|
||||
role="tool",
|
||||
content=[ToolResult(tool_use_id="1", output=f'"image:{png_path}')],
|
||||
),
|
||||
]
|
||||
|
||||
# Call the function
|
||||
output = messages_to_openai_spec(messages)
|
||||
|
||||
assert "This tool result included an image that is uploaded in the next message." in str(output)
|
||||
assert "{'role': 'user', 'content': [{'type': 'image_url'" in str(output)
|
||||
Reference in New Issue
Block a user