fix the translator api
This commit is contained in:
@@ -74,6 +74,7 @@ active_group_id = None
|
||||
last_completed_group_id = None
|
||||
announcement_task = None
|
||||
caster = None
|
||||
reset_task = None
|
||||
|
||||
# Initialization flag
|
||||
initialized = False
|
||||
@@ -103,7 +104,7 @@ async def process_announcement(text: str, group: EndpointGroup):
|
||||
Process an announcement using the multilang_translator.
|
||||
This is based on the announcement_from_german_text function in main_local.py.
|
||||
"""
|
||||
global active_group_id, last_completed_group_id, caster
|
||||
global active_group_id, last_completed_group_id, caster, reset_task
|
||||
|
||||
# Make sure the caster is initialized
|
||||
if not initialized:
|
||||
@@ -117,7 +118,7 @@ async def process_announcement(text: str, group: EndpointGroup):
|
||||
active_group_id = group.id
|
||||
|
||||
# Update status to translating
|
||||
group.progress.current_state = AnnouncementStates.TRANSLATING
|
||||
group.progress.current_state = AnnouncementStates.TRANSLATING.value
|
||||
group.progress.progress = 0.2
|
||||
|
||||
# Translate the text for each language
|
||||
@@ -135,7 +136,7 @@ async def process_announcement(text: str, group: EndpointGroup):
|
||||
if big.language == base_lang:
|
||||
translated_text = text
|
||||
else:
|
||||
group.progress.current_state = AnnouncementStates.TRANSLATING
|
||||
group.progress.current_state = AnnouncementStates.TRANSLATING.value
|
||||
translated_text = llm_translator.translate_de_to_x(
|
||||
text,
|
||||
big.language,
|
||||
@@ -148,7 +149,7 @@ async def process_announcement(text: str, group: EndpointGroup):
|
||||
log.info(f'Translated text ({big.language}): {translated_text}')
|
||||
|
||||
# Update status to generating voice
|
||||
group.progress.current_state = AnnouncementStates.GENERATING_VOICE
|
||||
group.progress.current_state = AnnouncementStates.GENERATING_VOICE.value
|
||||
group.progress.progress = 0.4
|
||||
|
||||
# This will use the voice_provider's text_to_speech.synthesize function
|
||||
@@ -165,23 +166,20 @@ async def process_announcement(text: str, group: EndpointGroup):
|
||||
caster.big_conf[i].audio_source = lc3_audio
|
||||
|
||||
# Update status to routing
|
||||
group.progress.current_state = AnnouncementStates.ROUTING
|
||||
group.progress.current_state = AnnouncementStates.ROUTING.value
|
||||
group.progress.progress = 0.6
|
||||
await asyncio.sleep(0.5) # Small delay for routing
|
||||
await asyncio.sleep(0.5) # Small delay for routing # TODO: actually needs to be implemented
|
||||
|
||||
# Update status to active and start streaming
|
||||
group.progress.current_state = AnnouncementStates.ACTIVE
|
||||
group.progress.current_state = AnnouncementStates.ACTIVE.value
|
||||
group.progress.progress = 0.8
|
||||
caster.start_streaming()
|
||||
|
||||
# Wait for streaming to complete
|
||||
if hasattr(caster, 'streamer') and hasattr(caster.streamer, 'task'):
|
||||
await caster.streamer.task
|
||||
else:
|
||||
await asyncio.sleep(3) # Fallback wait if no task available
|
||||
|
||||
await caster.streamer.task
|
||||
|
||||
# Update status to complete
|
||||
group.progress.current_state = AnnouncementStates.COMPLETE
|
||||
group.progress.current_state = AnnouncementStates.COMPLETE.value
|
||||
group.progress.progress = 1.0
|
||||
last_completed_group_id = group.id
|
||||
|
||||
@@ -191,16 +189,21 @@ async def process_announcement(text: str, group: EndpointGroup):
|
||||
|
||||
# After a while, reset to idle state (in a separate task)
|
||||
async def reset_to_idle():
|
||||
log.info(f"Waiting 10 seconds before resetting group {group.id} to IDLE state")
|
||||
await asyncio.sleep(10) # Keep completed state visible for 10 seconds
|
||||
if group.progress.current_state == AnnouncementStates.COMPLETE:
|
||||
group.progress.current_state = AnnouncementStates.IDLE
|
||||
log.info(f"Resetting group {group.id} to IDLE state")
|
||||
# Use direct value lookup for the state comparison
|
||||
if group.progress.current_state == AnnouncementStates.COMPLETE.value:
|
||||
group.progress.current_state = AnnouncementStates.IDLE.value
|
||||
group.progress.progress = 0.0
|
||||
log.info(f"Group {group.id} state reset to IDLE")
|
||||
|
||||
asyncio.create_task(reset_to_idle())
|
||||
# Create and save the task so it won't be garbage collected
|
||||
reset_task = asyncio.create_task(reset_to_idle())
|
||||
|
||||
except Exception as e:
|
||||
log.error(f"Error in processing announcement: {e}")
|
||||
group.progress.current_state = AnnouncementStates.ERROR
|
||||
group.progress.current_state = AnnouncementStates.ERROR.value
|
||||
group.progress.error = str(e)
|
||||
if active_group_id == group.id:
|
||||
active_group_id = None
|
||||
@@ -261,6 +264,8 @@ async def start_announcement(text: str, group_id: int):
|
||||
"""Start a new announcement to the specified endpoint group."""
|
||||
global announcement_task, active_group_id
|
||||
|
||||
log.info(f"Received announcement request - text: '{text}', group_id: {group_id}")
|
||||
|
||||
# Find the group
|
||||
group = None
|
||||
for g in endpoint_groups:
|
||||
@@ -292,6 +297,9 @@ async def start_announcement(text: str, group_id: int):
|
||||
@app.get("/announcements/status")
|
||||
async def get_announcement_status():
|
||||
"""Get the status of the current announcement."""
|
||||
global active_group_id, last_completed_group_id
|
||||
log.debug(f"Status request - active_group_id: {active_group_id}, last_completed_group_id: {last_completed_group_id}")
|
||||
|
||||
# If an announcement is active, return its status
|
||||
if active_group_id is not None:
|
||||
group = None
|
||||
@@ -301,6 +309,7 @@ async def get_announcement_status():
|
||||
break
|
||||
|
||||
if group:
|
||||
log.debug(f"Returning active status for group {group.id}: {group.progress.current_state}")
|
||||
return {
|
||||
"state": group.progress.current_state,
|
||||
"progress": group.progress.progress,
|
||||
@@ -325,7 +334,8 @@ async def get_announcement_status():
|
||||
group = g
|
||||
break
|
||||
|
||||
if group and group.progress.current_state == AnnouncementStates.COMPLETE:
|
||||
if group and group.progress.current_state == AnnouncementStates.COMPLETE.value:
|
||||
log.debug(f"Returning completed status for group {group.id}")
|
||||
return {
|
||||
"state": group.progress.current_state,
|
||||
"progress": group.progress.progress,
|
||||
@@ -343,8 +353,9 @@ async def get_announcement_status():
|
||||
}
|
||||
|
||||
# Default: no active announcement
|
||||
log.debug("Returning idle status (no active or completed announcements)")
|
||||
return {
|
||||
"state": AnnouncementStates.IDLE,
|
||||
"state": AnnouncementStates.IDLE.value,
|
||||
"progress": 0.0,
|
||||
"error": None,
|
||||
"details": {
|
||||
|
||||
Reference in New Issue
Block a user