Skip to content

Commit 2d7c781

Browse files
committed
Fix Vercel
1 parent 2acc1c3 commit 2d7c781

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

pydantic_ai_slim/pydantic_ai/ui/vercel_ai/_adapter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def encode_event(self, event: BaseChunk, accept: str | None = None) -> str:
5757
@classmethod
5858
async def validate_request(cls, request: Request) -> RequestData:
5959
"""Validate a Vercel AI request."""
60-
return request_data_ta.validate_json(await request.json())
60+
return request_data_ta.validate_json(await request.body())
6161

6262
@classmethod
6363
async def dispatch_request(

pydantic_ai_slim/pydantic_ai/ui/vercel_ai/_request_types.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
https://github.com/vercel/ai/blob/ai%405.0.34/packages/ai/src/ui/ui-messages.ts
55
"""
66

7-
from typing import Any, Literal
7+
from typing import Annotated, Any, Literal
88

9-
from pydantic import TypeAdapter
9+
from pydantic import Discriminator, TypeAdapter
1010

1111
from ._utils import CamelBaseModel, ProviderMetadata
1212

@@ -56,15 +56,24 @@ class UIMessage(CamelBaseModel):
5656
parts: list[UIPart]
5757

5858

59-
class SubmitMessage(CamelBaseModel):
59+
class SubmitMessage(CamelBaseModel, extra='allow'):
6060
"""Submit message request."""
6161

6262
trigger: Literal['submit-message'] = 'submit-message'
6363
id: str
6464
messages: list[UIMessage]
6565

6666

67-
RequestData = SubmitMessage
67+
class RegenerateMessage(CamelBaseModel, extra='allow'):
68+
"""Ask the agent to regenerate a message."""
69+
70+
trigger: Literal['regenerate-message']
71+
id: str
72+
messages: list[UIMessage]
73+
message_id: str
74+
75+
76+
RequestData = Annotated[SubmitMessage | RegenerateMessage, Discriminator('trigger')]
6877

6978
# Type adapter for parsing requests
7079
request_data_ta: TypeAdapter[RequestData] = TypeAdapter(RequestData)

tests/test_vercel_ai.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
from pydantic_ai import Agent
99
from pydantic_ai.builtin_tools import WebSearchTool
10-
from pydantic_ai.models.openai import OpenAIResponsesModel
11-
from pydantic_ai.providers.openai import OpenAIProvider
1210
from pydantic_ai.ui.vercel_ai import VercelAIAdapter
1311
from pydantic_ai.ui.vercel_ai._request_types import (
1412
SubmitMessage,
@@ -17,7 +15,12 @@
1715
UIMessage,
1816
)
1917

20-
from .conftest import IsStr
18+
from .conftest import IsStr, try_import
19+
20+
with try_import() as openai_import_successful:
21+
from pydantic_ai.models.openai import OpenAIResponsesModel
22+
from pydantic_ai.providers.openai import OpenAIProvider
23+
2124

2225
pytestmark = [
2326
pytest.mark.anyio,
@@ -31,6 +34,7 @@
3134
]
3235

3336

37+
@pytest.mark.skipif(not openai_import_successful(), reason='OpenAI not installed')
3438
async def test_run(allow_model_requests: None, openai_api_key: str):
3539
model = OpenAIResponsesModel('gpt-5', provider=OpenAIProvider(api_key=openai_api_key))
3640
agent = Agent(model=model, builtin_tools=[WebSearchTool()])

0 commit comments

Comments
 (0)