From 1ad1ebb556dce24b5df19ddc56f940d1d007f0bb Mon Sep 17 00:00:00 2001 From: Guillaume Aquilina Date: Mon, 24 Feb 2025 16:25:58 -0500 Subject: [PATCH 1/2] feat: add pdf object --- workflowai/core/fields/pdf.py | 11 +++++++++++ workflowai/fields.py | 1 + 2 files changed, 12 insertions(+) create mode 100644 workflowai/core/fields/pdf.py diff --git a/workflowai/core/fields/pdf.py b/workflowai/core/fields/pdf.py new file mode 100644 index 0000000..3721cb5 --- /dev/null +++ b/workflowai/core/fields/pdf.py @@ -0,0 +1,11 @@ +from workflowai.core.fields.file import File + + +class PDF(File): + """A field representing a PDF file. + + This field is used to handle PDF inputs. + The PDF can be provided either as base64-encoded data or as a URL. + """ + + pass diff --git a/workflowai/fields.py b/workflowai/fields.py index df32c14..091255f 100644 --- a/workflowai/fields.py +++ b/workflowai/fields.py @@ -6,6 +6,7 @@ from workflowai.core.fields.http_url import HttpUrl as HttpUrl from workflowai.core.fields.image import Image as Image from workflowai.core.fields.local_date_time import DatetimeLocal as DatetimeLocal +from workflowai.core.fields.pdf import PDF as PDF from workflowai.core.fields.price import Price as Price from workflowai.core.fields.surface_area import SurfaceArea as SurfaceArea from workflowai.core.fields.zone_info import TimezoneInfo as TimezoneInfo From 49ecabe2578a4aaf184464c7630d26532553596f Mon Sep 17 00:00:00 2001 From: Guillaume Aquilina Date: Mon, 24 Feb 2025 16:57:46 -0500 Subject: [PATCH 2/2] test: add sanity check for required field in tool calls --- tests/integration/run_test.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/integration/run_test.py b/tests/integration/run_test.py index bbc32eb..73d2fe0 100644 --- a/tests/integration/run_test.py +++ b/tests/integration/run_test.py @@ -1,6 +1,7 @@ import json from collections.abc import AsyncIterator +import pytest from pydantic import BaseModel import workflowai @@ -150,6 +151,8 @@ async def city_to_capital(task_input: CityToCapitalTaskInput) -> CityToCapitalTa async def test_run_with_tool(test_client: IntTestClient): + """Test a round trip with a tool call request and a reply.""" + class _SayHelloToolInput(BaseModel): name: str @@ -159,6 +162,10 @@ class _SayHelloToolOutput(BaseModel): def say_hello(tool_input: _SayHelloToolInput) -> _SayHelloToolOutput: return _SayHelloToolOutput(message=f"Hello {tool_input.name}") + # Sanity check to make sure that CityToCapitalTaskOutput.capital is a field required by pydantic + with pytest.raises(AttributeError): + _ = CityToCapitalTaskOutput.model_construct(None).capital + @workflowai.agent(id="city-to-capital", tools=[say_hello]) async def city_to_capital(task_input: CityToCapitalTaskInput) -> CityToCapitalTaskOutput: """Say hello to the user"""