diff --git a/libraries/microsoft-agents-activity/microsoft_agents/activity/conversation_reference.py b/libraries/microsoft-agents-activity/microsoft_agents/activity/conversation_reference.py index d2bce181..46f8da8c 100644 --- a/libraries/microsoft-agents-activity/microsoft_agents/activity/conversation_reference.py +++ b/libraries/microsoft-agents-activity/microsoft_agents/activity/conversation_reference.py @@ -4,7 +4,7 @@ from __future__ import annotations from uuid import uuid4 as uuid -from typing import Optional, Annotated +from typing import Optional, Annotated, TYPE_CHECKING from pydantic import Field @@ -15,6 +15,10 @@ from ._type_aliases import NonEmptyString from .activity_types import ActivityTypes from .activity_event_names import ActivityEventNames +from ._model_utils import pick_model, SkipNone + +if TYPE_CHECKING: + from .activity import Activity class ConversationReference(AgentsModel): @@ -50,10 +54,11 @@ class ConversationReference(AgentsModel): locale: Optional[NonEmptyString] = None service_url: NonEmptyString = None - def get_continuation_activity(self) -> "Activity": # type: ignore + def get_continuation_activity(self) -> Activity: from .activity import Activity - return Activity( + return pick_model( + Activity, type=ActivityTypes.event, name=ActivityEventNames.continue_conversation, id=str(uuid()), @@ -61,6 +66,6 @@ def get_continuation_activity(self) -> "Activity": # type: ignore service_url=self.service_url, conversation=self.conversation, recipient=self.agent, - from_property=self.user, + from_property=SkipNone(self.user), relates_to=self, ) diff --git a/tests/activity/test_conversation_reference.py b/tests/activity/test_conversation_reference.py index bafabc67..70d04222 100644 --- a/tests/activity/test_conversation_reference.py +++ b/tests/activity/test_conversation_reference.py @@ -1,8 +1,5 @@ from uuid import UUID -import pytest -from pydantic import ValidationError - from microsoft_agents.activity import ( ActivityEventNames, ActivityTypes, @@ -50,9 +47,14 @@ def test_get_continuation_activity_generates_new_id_each_time(): assert first_activity.id != second_activity.id -def test_get_continuation_activity_raises_when_user_is_missing(): +def test_get_continuation_activity_omits_sender_when_user_is_missing(): conversation_reference = _create_conversation_reference(user=None) conversation_reference.user = None - with pytest.raises(ValidationError): - conversation_reference.get_continuation_activity() + continuation_activity = conversation_reference.get_continuation_activity() + + assert continuation_activity.from_property is None + assert "from_property" not in continuation_activity.model_fields_set + assert "from" not in continuation_activity.model_dump( + exclude_unset=True, by_alias=True + )