@@ -702,12 +702,12 @@ func (u *UnifiedTranscriptionService) mergeDiarizationWithTranscription(transcri
702702 }
703703
704704 // Also assign speakers to words if available
705- if len (transcript .Words ) > 0 {
706- mergedTranscript .Words = make ([]interfaces.TranscriptWord , len (transcript .Words ))
707- copy (mergedTranscript .Words , transcript .Words )
708-
709- for i := range mergedTranscript .Words {
710- word := & mergedTranscript .Words [i ]
705+ if len (transcript .WordSegments ) > 0 {
706+ mergedTranscript .WordSegments = make ([]interfaces.TranscriptWord , len (transcript .WordSegments ))
707+ copy (mergedTranscript .WordSegments , transcript .WordSegments )
708+
709+ for i := range mergedTranscript .WordSegments {
710+ word := & mergedTranscript .WordSegments [i ]
711711 bestSpeaker := u .findBestSpeakerForSegment (word .Start , word .End , diarization .Segments )
712712 if bestSpeaker != "" {
713713 word .Speaker = & bestSpeaker
@@ -757,81 +757,10 @@ func (u *UnifiedTranscriptionService) saveTranscriptionResults(jobID string, res
757757 return nil
758758}
759759
760- // convertTranscriptResultToJSON converts the interface result to the expected JSON format
760+ // convertTranscriptResultToJSON converts the interface result to JSON format
761761func (u * UnifiedTranscriptionService ) convertTranscriptResultToJSON (result * interfaces.TranscriptResult ) (string , error ) {
762- // Convert to the format expected by the existing database schema
763- legacyFormat := struct {
764- Segments []struct {
765- Start float64 `json:"start"`
766- End float64 `json:"end"`
767- Text string `json:"text"`
768- Speaker * string `json:"speaker,omitempty"`
769- } `json:"segments"`
770- Word []struct {
771- Start float64 `json:"start"`
772- End float64 `json:"end"`
773- Word string `json:"word"`
774- Score float64 `json:"score"`
775- Speaker * string `json:"speaker,omitempty"`
776- } `json:"word_segments,omitempty"`
777- Language string `json:"language"`
778- Text string `json:"text"`
779- }{
780- Language : result .Language ,
781- Text : result .Text ,
782- }
783-
784- // Convert segments
785- legacyFormat .Segments = make ([]struct {
786- Start float64 `json:"start"`
787- End float64 `json:"end"`
788- Text string `json:"text"`
789- Speaker * string `json:"speaker,omitempty"`
790- }, len (result .Segments ))
791-
792- for i , seg := range result .Segments {
793- legacyFormat .Segments [i ] = struct {
794- Start float64 `json:"start"`
795- End float64 `json:"end"`
796- Text string `json:"text"`
797- Speaker * string `json:"speaker,omitempty"`
798- }{
799- Start : seg .Start ,
800- End : seg .End ,
801- Text : seg .Text ,
802- Speaker : seg .Speaker ,
803- }
804- }
805-
806- // Convert words
807- if len (result .Words ) > 0 {
808- legacyFormat .Word = make ([]struct {
809- Start float64 `json:"start"`
810- End float64 `json:"end"`
811- Word string `json:"word"`
812- Score float64 `json:"score"`
813- Speaker * string `json:"speaker,omitempty"`
814- }, len (result .Words ))
815-
816- for i , word := range result .Words {
817- legacyFormat .Word [i ] = struct {
818- Start float64 `json:"start"`
819- End float64 `json:"end"`
820- Word string `json:"word"`
821- Score float64 `json:"score"`
822- Speaker * string `json:"speaker,omitempty"`
823- }{
824- Start : word .Start ,
825- End : word .End ,
826- Word : word .Word ,
827- Score : word .Score ,
828- Speaker : word .Speaker ,
829- }
830- }
831- }
832-
833- // Convert to JSON string
834- jsonBytes , err := json .Marshal (legacyFormat )
762+ // Now that the struct fields match the JSON field names, we can directly marshal
763+ jsonBytes , err := json .Marshal (result )
835764 if err != nil {
836765 return "" , err
837766 }
0 commit comments