feat: persist photos and enrich conversation history
This commit is contained in:
@@ -105,6 +105,54 @@ class ConversationRecorderTest(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertEqual(saved["sessionId"], "conv_test")
|
||||
self.assertEqual(saved["sequence"], 1)
|
||||
|
||||
async def test_image_is_persisted_as_message_with_artifact(self):
|
||||
conversation = SimpleNamespace(message_count=0)
|
||||
|
||||
class FakeSession:
|
||||
def __init__(self):
|
||||
self.added = []
|
||||
self.committed = False
|
||||
|
||||
async def __aenter__(self):
|
||||
return self
|
||||
|
||||
async def __aexit__(self, *_args):
|
||||
return None
|
||||
|
||||
def add(self, value):
|
||||
self.added.append(value)
|
||||
|
||||
async def get(self, _model, _session_id):
|
||||
return conversation
|
||||
|
||||
async def commit(self):
|
||||
self.committed = True
|
||||
|
||||
session = FakeSession()
|
||||
recorder = ConversationRecorder("conv_test")
|
||||
with (
|
||||
patch("services.conversation_history.SessionLocal", return_value=session),
|
||||
patch("services.conversation_history.put_object") as put_object,
|
||||
):
|
||||
await recorder._record_image(
|
||||
b"jpeg-data",
|
||||
input_id="input_photo",
|
||||
timestamp="2026-08-05T10:00:00+08:00",
|
||||
mime_type="image/jpeg",
|
||||
)
|
||||
|
||||
self.assertTrue(session.committed)
|
||||
self.assertEqual(len(session.added), 2)
|
||||
message, artifact = session.added
|
||||
self.assertEqual(message.content_type, "image")
|
||||
self.assertEqual(message.role, "user")
|
||||
self.assertEqual(message.extra["input_id"], "input_photo")
|
||||
self.assertEqual(artifact.message_id, message.id)
|
||||
self.assertEqual(artifact.kind, "image")
|
||||
self.assertEqual(artifact.size_bytes, len(b"jpeg-data"))
|
||||
self.assertEqual(conversation.message_count, 1)
|
||||
put_object.assert_called_once()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user