make a basic useable example

This commit is contained in:
2025-02-25 12:45:21 +01:00
parent 00895f52b2
commit 9597104438
3 changed files with 50 additions and 30 deletions

View File

@@ -8,6 +8,8 @@ import asyncio
from copy import copy
import time
import logging as log
import aioconsole
from utils import resample
from translator import llm_translator, test_content
from text_to_speech import text_to_speech
@@ -28,22 +30,21 @@ def syntesize_resample(text, tts_model, file_wav, file_wav_resamp):
return audio_dur
def translate_from_german(text_de):
def translate_from_german(text_de, model):
config = copy(LANG_CONFIG)
base_lang = "de"
file = config[base_lang]["filepath_wav"]
file_resamp = config[base_lang]['filepath_wav_resamp']
tts_json = {}
#tts_json[base_lang] = syntesize_resample(text_de, config['de']["tts"], file, file_resamp)
# delete source language since no translation is needed for it
#del config[base_lang]
for key, val in config.items():
if key == base_lang:
text = text_de
else:
text = llm_translator.translate_de_to_x(text_de, key)
text = llm_translator.translate_de_to_x(text_de, key, model=model)
log.info('%s', text)
file = val['filepath_wav']
file_resamp = val['filepath_wav_resamp']
tts_json[key] = syntesize_resample(text, val['tts'], file, file_resamp)
@@ -53,27 +54,39 @@ def translate_from_german(text_de):
async def announcement_from_german_text(caster:multicast_control.Multicaster, text_de):
tts_json = translate_from_german(text_de)
tts_json = translate_from_german(text_de, model = 'llama3.2:3b-instruct-q4_0')
start = time.time()
rates = [d['audio']['sample_rate'] for d in tts_json.values()]
#for i, big in enumerate(caster.big_conf):
# big.input_format = f'int16le,{rates[i]},1'
await caster.init_audio()
caster.start_streaming()
log.info("Starting all broadcasts took %s s", round(time.time() - start, 3))
async def command_line_ui(caster: multicast_control.Multicaster):
while True:
command = await aioconsole.ainput("\nEnter your Announcement|quit] > ")
if command.strip().lower() == "quit":
print("👋 Exiting...")
if caster.device:
caster.stop_streaming()
await caster.shutdown()
break # Exit loop
# TODO: Implement predefined announcements
elif command.strip() == '':
print('Nothing to Announce')
else:
await announcement_from_german_text(caster, command)
async def main():
log.basicConfig(
level=log.DEBUG,
level=log.INFO,
format='%(module)s.py:%(lineno)d %(levelname)s: %(message)s'
)
global_conf = auracast_config.global_base_config
#global_conf.transport='serial:/dev/serial/by-id/usb-SEGGER_J-Link_001057705357-if02,1000000,rtscts' # transport for nrf54l15dk
global_conf.transport='serial:/dev/serial/by-id/usb-ZEPHYR_Zephyr_HCI_UART_sample_81BD14B8D71B5662-if00,115200,rtscts' #nrf52dongle hci_uart usb cdc
@@ -92,12 +105,11 @@ async def main():
caster = multicast_control.Multicaster(global_conf, big_conf)
await caster.init_broadcast()
#await announcement_from_german_text(caster, test_content.TESTSENTENCE_DE_HELLO)
#await command_line_ui(caster)
await announcement_from_german_text(caster, test_content.TESTSENTENCE_DE_HELLO)
await asyncio.wait([caster.streamer.task])
await command_line_ui(caster)
#await asyncio.wait([caster.streamer.task])
if __name__ == '__main__':
asyncio.run(main())

View File

@@ -1,12 +1,13 @@
import time
import requests
import json
import logging as log
import time
import ollama
from . import credentials
from . import syspromts
from . import test_content
from multilang_translator.translator import credentials
from multilang_translator.translator import syspromts
from multilang_translator.translator import test_content
# ollama.create( # TODO: create models on startup
# model='example',
@@ -28,7 +29,8 @@ def query_model(model, query):
return response.json()
def translate_de_to_x(text:str, target_language: str, model='llama3.2:1b'):
def translate_de_to_x(text:str, target_language: str, model='llama3.2:3b-instruct-q4_0'): # remember to use instruct models
start=time.time()
s = getattr(syspromts, f"TRANSLATOR_DE_{target_language.upper()}")
response = ollama.chat(
model = model,
@@ -37,17 +39,23 @@ def translate_de_to_x(text:str, target_language: str, model='llama3.2:1b'):
{'role': 'user', 'content': text}
],
)
log.info('Running the translator to %s took %s s', target_language, round(time.time() - start, 3))
return response['message']['content']
if __name__ == "__main__":
import time
start=time.time()
response = translate_de_to_x(test_content.TESTSENTENCE_DE_HELLO, target_language='en')
print("First query took", time.time() - start)
response = translate_de_to_x('Der Zug ist da.', target_language='en', model='llama3.2:1b-instruct-q4_0')
print("Query took", time.time() - start)
print(response)
start=time.time()
response = translate_de_to_x(test_content.TESTSENTENCE_DE_HELLO, target_language='fr')
print("Second query took", time.time() - start)
response = translate_de_to_x(test_content.TESTSENTENCE_DE_RAINBOW, target_language='en')
print("query took", time.time() - start)
print(response)
start=time.time()
response = translate_de_to_x(test_content.TESTSENTENCE_DE_RAINBOW, target_language='fr')
print("query took", time.time() - start)
print(response)

View File

@@ -1,4 +1,4 @@
TRANSLATOR_DE_EN = 'You are a translator. Translate the following sentence from German to English. Only respond with the translated sentence:\n'
TRANSLATOR_DE_FR = 'Vous êtes un traducteur. Traduisez la phrase suivante de l\'allemand vers le français. Répondez uniquement par la traduction :\n'
TRANSLATOR_DE_ES = 'Estás un traductor. Traduce la siguiente frase del alemán al español. Responda solo con la traducción:\n'
TRANSLATOR_DE_IT = 'Siete un traduttore. Traducete la seguente frase dal tedesco all \'inglese. Rispondete solo con la traduzione della frase:\n'
TRANSLATOR_DE_EN = 'Du bist ein Übersetzer. Übersetze die folgende Satz aus dem Deutschen ins Englische. Antworte nur mit der übersetzten Satz.\n'
TRANSLATOR_DE_FR = 'Du bist ein Übersetzer. Übersetze die folgende Satz aus dem Deutschen ins Französische. Antworte nur mit der übersetzten Satz.\n'
TRANSLATOR_DE_ES = 'Du bist ein Übersetzer. Übersetze die folgende Satz aus dem Deutschen ins Spanische. Antworte nur mit der übersetzten Satz.\n'
TRANSLATOR_DE_IT = 'Du bist ein Übersetzer. Übersetze die folgende Satz aus dem Deutschen ins Italienische. Antworte nur mit der übersetzten Satz.\n'