From 6d074ed4570dbf85b304d7d5771ca6fe94c02114 Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Thu, 19 Oct 2023 21:05:49 +0200 Subject: [PATCH] www: update frontend to support new transcript format in topics --- .../test_processor_transcript_segment.py | 146 ++++++++++++++++++ www/app/[domain]/transcripts/topicList.tsx | 12 +- .../[domain]/transcripts/webSocketTypes.ts | 8 +- www/app/api/.openapi-generator/FILES | 1 + www/app/api/models/TranscriptSegmentTopic.ts | 88 +++++++++++ www/app/api/models/TranscriptTopic.ts | 8 +- www/app/api/models/index.ts | 1 + 7 files changed, 258 insertions(+), 6 deletions(-) create mode 100644 server/tests/test_processor_transcript_segment.py create mode 100644 www/app/api/models/TranscriptSegmentTopic.ts diff --git a/server/tests/test_processor_transcript_segment.py b/server/tests/test_processor_transcript_segment.py new file mode 100644 index 00000000..3bb6182f --- /dev/null +++ b/server/tests/test_processor_transcript_segment.py @@ -0,0 +1,146 @@ +def test_processor_transcript_segment(): + from reflector.processors.types import Transcript, Word + + transcript = Transcript( + words=[ + Word(text=" the", start=5.12, end=5.48, speaker=0), + Word(text=" different", start=5.48, end=5.8, speaker=0), + Word(text=" projects", start=5.8, end=6.3, speaker=0), + Word(text=" that", start=6.3, end=6.5, speaker=0), + Word(text=" are", start=6.5, end=6.58, speaker=0), + Word(text=" going", start=6.58, end=6.82, speaker=0), + Word(text=" on", start=6.82, end=7.26, speaker=0), + Word(text=" to", start=7.26, end=7.4, speaker=0), + Word(text=" give", start=7.4, end=7.54, speaker=0), + Word(text=" you", start=7.54, end=7.9, speaker=0), + Word(text=" context", start=7.9, end=8.24, speaker=0), + Word(text=" and", start=8.24, end=8.66, speaker=0), + Word(text=" I", start=8.66, end=8.72, speaker=0), + Word(text=" think", start=8.72, end=8.82, speaker=0), + Word(text=" that's", start=8.82, end=9.04, speaker=0), + Word(text=" what", start=9.04, end=9.12, speaker=0), + Word(text=" we'll", start=9.12, end=9.24, speaker=0), + Word(text=" do", start=9.24, end=9.32, speaker=0), + Word(text=" this", start=9.32, end=9.52, speaker=0), + Word(text=" week.", start=9.52, end=9.76, speaker=0), + Word(text=" Um,", start=10.24, end=10.62, speaker=0), + Word(text=" so,", start=11.36, end=11.94, speaker=0), + Word(text=" um,", start=12.46, end=12.92, speaker=0), + Word(text=" what", start=13.74, end=13.94, speaker=0), + Word(text=" we're", start=13.94, end=14.1, speaker=0), + Word(text=" going", start=14.1, end=14.24, speaker=0), + Word(text=" to", start=14.24, end=14.34, speaker=0), + Word(text=" do", start=14.34, end=14.8, speaker=0), + Word(text=" at", start=14.8, end=14.98, speaker=0), + Word(text=" H", start=14.98, end=15.04, speaker=0), + Word(text=" of", start=15.04, end=15.16, speaker=0), + Word(text=" you,", start=15.16, end=15.26, speaker=0), + Word(text=" maybe.", start=15.28, end=15.34, speaker=0), + Word(text=" you", start=15.36, end=15.52, speaker=0), + Word(text=" can", start=15.52, end=15.62, speaker=0), + Word(text=" introduce", start=15.62, end=15.98, speaker=0), + Word(text=" yourself", start=15.98, end=16.42, speaker=0), + Word(text=" to", start=16.42, end=16.68, speaker=0), + Word(text=" the", start=16.68, end=16.72, speaker=0), + Word(text=" team", start=16.72, end=17.52, speaker=0), + Word(text=" quickly", start=17.87, end=18.65, speaker=0), + Word(text=" and", start=18.65, end=19.63, speaker=0), + Word(text=" Oh,", start=20.91, end=21.55, speaker=0), + Word(text=" this", start=21.67, end=21.83, speaker=0), + Word(text=" is", start=21.83, end=22.17, speaker=0), + Word(text=" a", start=22.17, end=22.35, speaker=0), + Word(text=" reflector", start=22.35, end=22.89, speaker=0), + Word(text=" translating", start=22.89, end=23.33, speaker=0), + Word(text=" into", start=23.33, end=23.73, speaker=0), + Word(text=" French", start=23.73, end=23.95, speaker=0), + Word(text=" for", start=23.95, end=24.15, speaker=0), + Word(text=" me.", start=24.15, end=24.43, speaker=0), + Word(text=" This", start=27.87, end=28.19, speaker=0), + Word(text=" is", start=28.19, end=28.45, speaker=0), + Word(text=" all", start=28.45, end=28.79, speaker=0), + Word(text=" the", start=28.79, end=29.15, speaker=0), + Word(text=" way,", start=29.15, end=29.15, speaker=0), + Word(text=" please,", start=29.53, end=29.59, speaker=0), + Word(text=" please,", start=29.73, end=29.77, speaker=0), + Word(text=" please,", start=29.77, end=29.83, speaker=0), + Word(text=" please.", start=29.83, end=29.97, speaker=0), + Word(text=" Yeah,", start=29.97, end=30.17, speaker=0), + Word(text=" that's", start=30.25, end=30.33, speaker=0), + Word(text=" all", start=30.33, end=30.49, speaker=0), + Word(text=" it's", start=30.49, end=30.69, speaker=0), + Word(text=" right.", start=30.69, end=30.69, speaker=0), + Word(text=" Right.", start=30.72, end=30.98, speaker=1), + Word(text=" Yeah,", start=31.56, end=31.72, speaker=2), + Word(text=" that's", start=31.86, end=31.98, speaker=2), + Word(text=" right.", start=31.98, end=32.2, speaker=2), + Word(text=" Because", start=32.38, end=32.46, speaker=0), + Word(text=" I", start=32.46, end=32.58, speaker=0), + Word(text=" thought", start=32.58, end=32.78, speaker=0), + Word(text=" I'd", start=32.78, end=33.0, speaker=0), + Word(text=" be", start=33.0, end=33.02, speaker=0), + Word(text=" able", start=33.02, end=33.18, speaker=0), + Word(text=" to", start=33.18, end=33.34, speaker=0), + Word(text=" pull", start=33.34, end=33.52, speaker=0), + Word(text=" out.", start=33.52, end=33.68, speaker=0), + Word(text=" Yeah,", start=33.7, end=33.9, speaker=0), + Word(text=" that", start=33.9, end=34.02, speaker=0), + Word(text=" was", start=34.02, end=34.24, speaker=0), + Word(text=" the", start=34.24, end=34.34, speaker=0), + Word(text=" one", start=34.34, end=34.44, speaker=0), + Word(text=" before", start=34.44, end=34.7, speaker=0), + Word(text=" that.", start=34.7, end=35.24, speaker=0), + Word(text=" Friends,", start=35.84, end=36.46, speaker=0), + Word(text=" if", start=36.64, end=36.7, speaker=0), + Word(text=" you", start=36.7, end=36.7, speaker=0), + Word(text=" have", start=36.7, end=37.24, speaker=0), + Word(text=" tell", start=37.24, end=37.44, speaker=0), + Word(text=" us", start=37.44, end=37.68, speaker=0), + Word(text=" if", start=37.68, end=37.82, speaker=0), + Word(text=" it's", start=37.82, end=38.04, speaker=0), + Word(text=" good,", start=38.04, end=38.58, speaker=0), + Word(text=" exceptionally", start=38.96, end=39.1, speaker=0), + Word(text=" good", start=39.1, end=39.6, speaker=0), + Word(text=" and", start=39.6, end=39.86, speaker=0), + Word(text=" tell", start=39.86, end=40.0, speaker=0), + Word(text=" us", start=40.0, end=40.06, speaker=0), + Word(text=" when", start=40.06, end=40.2, speaker=0), + Word(text=" it's", start=40.2, end=40.34, speaker=0), + Word(text=" exceptionally", start=40.34, end=40.6, speaker=0), + Word(text=" bad.", start=40.6, end=40.94, speaker=0), + Word(text=" We", start=40.96, end=41.26, speaker=0), + Word(text=" don't", start=41.26, end=41.44, speaker=0), + Word(text=" need", start=41.44, end=41.66, speaker=0), + Word(text=" that", start=41.66, end=41.82, speaker=0), + Word(text=" at", start=41.82, end=41.94, speaker=0), + Word(text=" the", start=41.94, end=41.98, speaker=0), + Word(text=" middle", start=41.98, end=42.18, speaker=0), + Word(text=" of", start=42.18, end=42.36, speaker=0), + Word(text=" age.", start=42.36, end=42.7, speaker=0), + Word(text=" Okay,", start=43.26, end=43.44, speaker=0), + Word(text=" yeah,", start=43.68, end=43.76, speaker=0), + Word(text=" that", start=43.78, end=44.3, speaker=0), + Word(text=" sentence", start=44.3, end=44.72, speaker=0), + Word(text=" right", start=44.72, end=45.1, speaker=0), + Word(text=" before.", start=45.1, end=45.56, speaker=0), + Word(text=" it", start=46.08, end=46.36, speaker=0), + Word(text=" realizing", start=46.36, end=47.0, speaker=0), + Word(text=" that", start=47.0, end=47.28, speaker=0), + Word(text=" I", start=47.28, end=47.28, speaker=0), + Word(text=" was", start=47.28, end=47.64, speaker=0), + Word(text=" saying", start=47.64, end=48.06, speaker=0), + Word(text=" that", start=48.06, end=48.44, speaker=0), + Word(text=" it's", start=48.44, end=48.54, speaker=0), + Word(text=" interesting", start=48.54, end=48.78, speaker=0), + Word(text=" that", start=48.78, end=48.96, speaker=0), + Word(text=" it's", start=48.96, end=49.08, speaker=0), + Word(text=" translating", start=49.08, end=49.32, speaker=0), + Word(text=" the", start=49.32, end=49.56, speaker=0), + Word(text=" French", start=49.56, end=49.76, speaker=0), + Word(text=" was", start=49.76, end=50.16, speaker=0), + Word(text=" completely", start=50.16, end=50.4, speaker=0), + Word(text=" wrong.", start=50.4, end=50.7, speaker=0), + ] + ) + + for segment in transcript.as_segments(): + print(segment) diff --git a/www/app/[domain]/transcripts/topicList.tsx b/www/app/[domain]/transcripts/topicList.tsx index e5de09c8..4fedacb0 100644 --- a/www/app/[domain]/transcripts/topicList.tsx +++ b/www/app/[domain]/transcripts/topicList.tsx @@ -103,7 +103,17 @@ export function TopicList({ /> {activeTopic?.id == topic.id && ( -
{topic.transcript}
+
+ {topic.segments.map((segment, index) => ( +

+ [{formatTime(segment.timestamp)}] Speaker{" "} + {segment.speaker}: {segment.text} +

+ ))} +
)} ))} diff --git a/www/app/[domain]/transcripts/webSocketTypes.ts b/www/app/[domain]/transcripts/webSocketTypes.ts index 450b3b1c..3e02e26a 100644 --- a/www/app/[domain]/transcripts/webSocketTypes.ts +++ b/www/app/[domain]/transcripts/webSocketTypes.ts @@ -1,9 +1,15 @@ +export type SegmentTopic = { + speaker: number; + start: number; + text: string; +}; + export type Topic = { timestamp: number; title: string; - transcript: string; summary: string; id: string; + segments: SegmentTopic[]; }; export type Transcript = { diff --git a/www/app/api/.openapi-generator/FILES b/www/app/api/.openapi-generator/FILES index 16763a8d..9192cb1f 100644 --- a/www/app/api/.openapi-generator/FILES +++ b/www/app/api/.openapi-generator/FILES @@ -8,6 +8,7 @@ models/GetTranscript.ts models/HTTPValidationError.ts models/PageGetTranscript.ts models/RtcOffer.ts +models/TranscriptSegmentTopic.ts models/TranscriptTopic.ts models/UpdateTranscript.ts models/UserInfo.ts diff --git a/www/app/api/models/TranscriptSegmentTopic.ts b/www/app/api/models/TranscriptSegmentTopic.ts new file mode 100644 index 00000000..73496a67 --- /dev/null +++ b/www/app/api/models/TranscriptSegmentTopic.ts @@ -0,0 +1,88 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * FastAPI + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { exists, mapValues } from "../runtime"; +/** + * + * @export + * @interface TranscriptSegmentTopic + */ +export interface TranscriptSegmentTopic { + /** + * + * @type {any} + * @memberof TranscriptSegmentTopic + */ + speaker: any | null; + /** + * + * @type {any} + * @memberof TranscriptSegmentTopic + */ + text: any | null; + /** + * + * @type {any} + * @memberof TranscriptSegmentTopic + */ + timestamp: any | null; +} + +/** + * Check if a given object implements the TranscriptSegmentTopic interface. + */ +export function instanceOfTranscriptSegmentTopic(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "speaker" in value; + isInstance = isInstance && "text" in value; + isInstance = isInstance && "timestamp" in value; + + return isInstance; +} + +export function TranscriptSegmentTopicFromJSON( + json: any, +): TranscriptSegmentTopic { + return TranscriptSegmentTopicFromJSONTyped(json, false); +} + +export function TranscriptSegmentTopicFromJSONTyped( + json: any, + ignoreDiscriminator: boolean, +): TranscriptSegmentTopic { + if (json === undefined || json === null) { + return json; + } + return { + speaker: json["speaker"], + text: json["text"], + timestamp: json["timestamp"], + }; +} + +export function TranscriptSegmentTopicToJSON( + value?: TranscriptSegmentTopic | null, +): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + speaker: value.speaker, + text: value.text, + timestamp: value.timestamp, + }; +} diff --git a/www/app/api/models/TranscriptTopic.ts b/www/app/api/models/TranscriptTopic.ts index 8b395374..f22496b2 100644 --- a/www/app/api/models/TranscriptTopic.ts +++ b/www/app/api/models/TranscriptTopic.ts @@ -42,13 +42,13 @@ export interface TranscriptTopic { * @type {any} * @memberof TranscriptTopic */ - transcript?: any | null; + timestamp: any | null; /** * * @type {any} * @memberof TranscriptTopic */ - timestamp: any | null; + segments?: any | null; } /** @@ -78,8 +78,8 @@ export function TranscriptTopicFromJSONTyped( id: !exists(json, "id") ? undefined : json["id"], title: json["title"], summary: json["summary"], - transcript: !exists(json, "transcript") ? undefined : json["transcript"], timestamp: json["timestamp"], + segments: !exists(json, "segments") ? undefined : json["segments"], }; } @@ -94,7 +94,7 @@ export function TranscriptTopicToJSON(value?: TranscriptTopic | null): any { id: value.id, title: value.title, summary: value.summary, - transcript: value.transcript, timestamp: value.timestamp, + segments: value.segments, }; } diff --git a/www/app/api/models/index.ts b/www/app/api/models/index.ts index 99874641..6a7d7318 100644 --- a/www/app/api/models/index.ts +++ b/www/app/api/models/index.ts @@ -7,6 +7,7 @@ export * from "./GetTranscript"; export * from "./HTTPValidationError"; export * from "./PageGetTranscript"; export * from "./RtcOffer"; +export * from "./TranscriptSegmentTopic"; export * from "./TranscriptTopic"; export * from "./UpdateTranscript"; export * from "./UserInfo";