Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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):
Expand Down Expand Up @@ -50,17 +54,18 @@ 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()),
channel_id=self.channel_id,
service_url=self.service_url,
conversation=self.conversation,
recipient=self.agent,
from_property=self.user,
from_property=SkipNone(self.user),
relates_to=self,
)
14 changes: 8 additions & 6 deletions tests/activity/test_conversation_reference.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
from uuid import UUID

import pytest
from pydantic import ValidationError

from microsoft_agents.activity import (
ActivityEventNames,
ActivityTypes,
Expand Down Expand Up @@ -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
Comment thread
rodrigobr-msft marked this conversation as resolved.

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
)
Comment thread
rodrigobr-msft marked this conversation as resolved.
Loading