diff --git a/server/reflector/views/transcripts.py b/server/reflector/views/transcripts.py index 7321de37..f18cba6b 100644 --- a/server/reflector/views/transcripts.py +++ b/server/reflector/views/transcripts.py @@ -190,6 +190,7 @@ class GetTranscript(BaseModel): status: str locked: bool duration: int + summary: str | None created_at: datetime @@ -200,6 +201,7 @@ class CreateTranscript(BaseModel): class UpdateTranscript(BaseModel): name: Optional[str] = Field(None) locked: Optional[bool] = Field(None) + summary: Optional[str] = Field(None) class TranscriptEntryCreate(BaseModel): @@ -262,6 +264,15 @@ async def transcript_update( values["name"] = info.name if info.locked is not None: values["locked"] = info.locked + if info.summary is not None: + values["summary"] = info.summary + # also find FINAL_SUMMARY event and patch it + for te in transcript.events: + if te["event"] == PipelineEvent.FINAL_SUMMARY: + te["summary"] = info.summary + break + values["events"] = transcript.events + await transcripts_controller.update(transcript, values) return transcript diff --git a/server/tests/test_transcripts.py b/server/tests/test_transcripts.py index 768018c6..79c7a802 100644 --- a/server/tests/test_transcripts.py +++ b/server/tests/test_transcripts.py @@ -44,6 +44,54 @@ async def test_transcript_get_update_name(): assert response.json()["name"] == "test2" +@pytest.mark.asyncio +async def test_transcript_get_update_locked(): + from reflector.app import app + + async with AsyncClient(app=app, base_url="http://test/v1") as ac: + response = await ac.post("/transcripts", json={"name": "test"}) + assert response.status_code == 200 + assert response.json()["locked"] is False + + tid = response.json()["id"] + + response = await ac.get(f"/transcripts/{tid}") + assert response.status_code == 200 + assert response.json()["locked"] is False + + response = await ac.patch(f"/transcripts/{tid}", json={"locked": True}) + assert response.status_code == 200 + assert response.json()["locked"] is True + + response = await ac.get(f"/transcripts/{tid}") + assert response.status_code == 200 + assert response.json()["locked"] is True + + +@pytest.mark.asyncio +async def test_transcript_get_update_summary(): + from reflector.app import app + + async with AsyncClient(app=app, base_url="http://test/v1") as ac: + response = await ac.post("/transcripts", json={"name": "test"}) + assert response.status_code == 200 + assert response.json()["summary"] is None + + tid = response.json()["id"] + + response = await ac.get(f"/transcripts/{tid}") + assert response.status_code == 200 + assert response.json()["summary"] is None + + response = await ac.patch(f"/transcripts/{tid}", json={"summary": "test"}) + assert response.status_code == 200 + assert response.json()["summary"] == "test" + + response = await ac.get(f"/transcripts/{tid}") + assert response.status_code == 200 + assert response.json()["summary"] == "test" + + @pytest.mark.asyncio async def test_transcripts_list_anonymous(): # XXX this test is a bit fragile, as it depends on the storage which