fix(transcription): Behebt Start- und API-Fehler in der App [2f488f42]
This commit is contained in:
64
transcription-tool/backend/services/translation_service.py
Normal file
64
transcription-tool/backend/services/translation_service.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from sqlalchemy.orm import Session
|
||||
from ..database import Meeting, AnalysisResult
|
||||
from .llm_service import call_gemini_api
|
||||
from ..prompt_library import get_prompt
|
||||
from typing import Dict, Any, List
|
||||
|
||||
def _format_transcript_for_translation(chunks: List[Any]) -> str:
|
||||
"""Formats the transcript into a single string for the translation prompt."""
|
||||
full_transcript = []
|
||||
# Ensure chunks are treated correctly, whether they are dicts or objects
|
||||
for chunk in chunks:
|
||||
json_content = getattr(chunk, 'json_content', None)
|
||||
if not json_content:
|
||||
continue
|
||||
for line in json_content:
|
||||
speaker = line.get("speaker", "Unknown")
|
||||
text = line.get("text", "")
|
||||
full_transcript.append(f"{speaker}: {text}")
|
||||
return "\n".join(full_transcript)
|
||||
|
||||
def translate_transcript(db: Session, meeting_id: int, target_language: str) -> AnalysisResult:
|
||||
"""
|
||||
Translates the transcript of a meeting and stores it.
|
||||
"""
|
||||
meeting = db.query(Meeting).filter(Meeting.id == meeting_id).first()
|
||||
if not meeting:
|
||||
raise ValueError("Meeting not found")
|
||||
|
||||
prompt_key = f"translation_{target_language.lower()}"
|
||||
|
||||
# Check if translation already exists
|
||||
existing_translation = db.query(AnalysisResult).filter(
|
||||
AnalysisResult.meeting_id == meeting_id,
|
||||
AnalysisResult.prompt_key == prompt_key
|
||||
).first()
|
||||
|
||||
if existing_translation:
|
||||
return existing_translation
|
||||
|
||||
# Prepare transcript
|
||||
transcript_text = _format_transcript_for_translation(meeting.chunks)
|
||||
if not transcript_text:
|
||||
raise ValueError("Transcript is empty, cannot translate.")
|
||||
|
||||
# Get prompt from library
|
||||
prompt = get_prompt('translate_transcript', {
|
||||
'transcript': transcript_text,
|
||||
'target_language': target_language
|
||||
})
|
||||
|
||||
# Call Gemini API using the new service function
|
||||
translated_text = call_gemini_api(prompt)
|
||||
|
||||
# Store result
|
||||
translation_result = AnalysisResult(
|
||||
meeting_id=meeting_id,
|
||||
prompt_key=prompt_key,
|
||||
result_text=translated_text
|
||||
)
|
||||
db.add(translation_result)
|
||||
db.commit()
|
||||
db.refresh(translation_result)
|
||||
|
||||
return translation_result
|
||||
Reference in New Issue
Block a user