feat(briefing): extend post_message() to accept optional metadata dict
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -41,7 +41,12 @@ async def get_or_create_today_conversation(user_id: int, model: str) -> Conversa
|
|||||||
return conv
|
return conv
|
||||||
|
|
||||||
|
|
||||||
async def post_message(conversation_id: int, role: str, content: str) -> Message:
|
async def post_message(
|
||||||
|
conversation_id: int,
|
||||||
|
role: str,
|
||||||
|
content: str,
|
||||||
|
metadata: dict | None = None,
|
||||||
|
) -> Message:
|
||||||
"""Append a message to a briefing conversation."""
|
"""Append a message to a briefing conversation."""
|
||||||
async with async_session() as session:
|
async with async_session() as session:
|
||||||
msg = Message(
|
msg = Message(
|
||||||
@@ -49,6 +54,7 @@ async def post_message(conversation_id: int, role: str, content: str) -> Message
|
|||||||
role=role,
|
role=role,
|
||||||
content=content,
|
content=content,
|
||||||
status="complete",
|
status="complete",
|
||||||
|
msg_metadata=metadata,
|
||||||
)
|
)
|
||||||
session.add(msg)
|
session.add(msg)
|
||||||
# Bump conversation updated_at
|
# Bump conversation updated_at
|
||||||
|
|||||||
@@ -27,3 +27,30 @@ def test_slot_greeting():
|
|||||||
assert "morning" in slot_greeting("compilation").lower() or slot_greeting("compilation")
|
assert "morning" in slot_greeting("compilation").lower() or slot_greeting("compilation")
|
||||||
assert slot_greeting("morning") != slot_greeting("midday")
|
assert slot_greeting("morning") != slot_greeting("midday")
|
||||||
assert slot_greeting("midday") != slot_greeting("afternoon")
|
assert slot_greeting("midday") != slot_greeting("afternoon")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_post_message_accepts_metadata():
|
||||||
|
"""post_message should accept an optional metadata dict and store it."""
|
||||||
|
from unittest.mock import AsyncMock, patch, MagicMock
|
||||||
|
|
||||||
|
mock_msg = MagicMock()
|
||||||
|
mock_msg.id = 1
|
||||||
|
|
||||||
|
with patch("fabledassistant.services.briefing_conversations.async_session") as mock_session_cls:
|
||||||
|
mock_session = AsyncMock()
|
||||||
|
mock_session.__aenter__ = AsyncMock(return_value=mock_session)
|
||||||
|
mock_session.__aexit__ = AsyncMock(return_value=False)
|
||||||
|
mock_session.add = MagicMock()
|
||||||
|
mock_session.get = AsyncMock(return_value=None)
|
||||||
|
mock_session.commit = AsyncMock()
|
||||||
|
mock_session.refresh = AsyncMock()
|
||||||
|
mock_session_cls.return_value = mock_session
|
||||||
|
|
||||||
|
from fabledassistant.services.briefing_conversations import post_message
|
||||||
|
metadata = {"weather": {"location": "Berlin"}, "rss_item_ids": [1, 2]}
|
||||||
|
await post_message(1, "assistant", "Hello", metadata=metadata)
|
||||||
|
|
||||||
|
# Verify Message was constructed with msg_metadata
|
||||||
|
call_args = mock_session.add.call_args[0][0]
|
||||||
|
assert call_args.msg_metadata == metadata
|
||||||
|
|||||||
Reference in New Issue
Block a user