replace two letter codes with three letter codes

This commit is contained in:
Sara
2023-10-13 23:36:02 +02:00
parent 47fc52af11
commit 90c6824f52
12 changed files with 91 additions and 140 deletions

View File

@@ -178,7 +178,7 @@ def web():
@app.post("/transcribe", dependencies=[Depends(apikey_auth)]) @app.post("/transcribe", dependencies=[Depends(apikey_auth)])
async def transcribe( async def transcribe(
file: UploadFile, file: UploadFile,
source_language: Annotated[str, Body(...)] = "en", source_language: Annotated[str, Body(...)] = "eng",
timestamp: Annotated[float, Body()] = 0.0 timestamp: Annotated[float, Body()] = 0.0
) -> TranscriptResponse: ) -> TranscriptResponse:
audio_data = await file.read() audio_data = await file.read()

View File

@@ -219,8 +219,8 @@ def web():
@app.post("/translate", dependencies=[Depends(apikey_auth)]) @app.post("/translate", dependencies=[Depends(apikey_auth)])
async def translate( async def translate(
text: str, text: str,
source_language: Annotated[str, Body(...)] = "en", source_language: Annotated[str, Body(...)] = "eng",
target_language: Annotated[str, Body(...)] = "fr", target_language: Annotated[str, Body(...)] = "fra",
) -> TranslateResponse: ) -> TranslateResponse:
func = translatorstub.translate_text.spawn( func = translatorstub.translate_text.spawn(
text=text, text=text,

View File

@@ -8,20 +8,21 @@ API will be a POST request to TRANSCRIPT_URL:
"audio_url": "https://...", "audio_url": "https://...",
"audio_ext": "wav", "audio_ext": "wav",
"timestamp": 123.456 "timestamp": 123.456
"language": "en" "language": "eng"
} }
``` ```
""" """
from pathlib import Path
import httpx
from reflector.processors.audio_transcript import AudioTranscriptProcessor from reflector.processors.audio_transcript import AudioTranscriptProcessor
from reflector.processors.audio_transcript_auto import AudioTranscriptAutoProcessor from reflector.processors.audio_transcript_auto import AudioTranscriptAutoProcessor
from reflector.processors.types import AudioFile, Transcript, Word from reflector.processors.types import AudioFile, Transcript, Word
from reflector.settings import settings from reflector.settings import settings
from reflector.storage import Storage from reflector.storage import Storage
from reflector.utils.retry import retry from reflector.utils.retry import retry
from pathlib import Path
import httpx
class AudioTranscriptBananaProcessor(AudioTranscriptProcessor): class AudioTranscriptBananaProcessor(AudioTranscriptProcessor):

View File

@@ -5,8 +5,8 @@ API will be a POST request to TRANSCRIPT_URL:
```form ```form
"timestamp": 123.456 "timestamp": 123.456
"source_language": "en" "source_language": "eng"
"target_language": "en" "target_language": "eng"
"file": <audio file> "file": <audio file>
``` ```
@@ -33,7 +33,7 @@ class AudioTranscriptModalProcessor(AudioTranscriptProcessor):
files = { files = {
"file": (data.name, data.fd), "file": (data.name, data.fd),
} }
source_language = self.get_pref("audio:source_language", "en") source_language = self.get_pref("audio:source_language", "eng")
json_payload = {"source_language": source_language} json_payload = {"source_language": source_language}
response = await retry(client.post)( response = await retry(client.post)(
self.transcript_url, self.transcript_url,

View File

@@ -1,7 +1,7 @@
from faster_whisper import WhisperModel
from reflector.processors.audio_transcript import AudioTranscriptProcessor from reflector.processors.audio_transcript import AudioTranscriptProcessor
from reflector.processors.audio_transcript_auto import AudioTranscriptAutoProcessor from reflector.processors.audio_transcript_auto import AudioTranscriptAutoProcessor
from reflector.processors.types import AudioFile, Transcript, Word from reflector.processors.types import AudioFile, Transcript, Word
from faster_whisper import WhisperModel
class AudioTranscriptWhisperProcessor(AudioTranscriptProcessor): class AudioTranscriptWhisperProcessor(AudioTranscriptProcessor):
@@ -14,7 +14,7 @@ class AudioTranscriptWhisperProcessor(AudioTranscriptProcessor):
async def _transcript(self, data: AudioFile): async def _transcript(self, data: AudioFile):
segments, _ = self.model.transcribe( segments, _ = self.model.transcribe(
data.path.as_posix(), data.path.as_posix(),
language="en", language="eng",
beam_size=5, beam_size=5,
# condition_on_previous_text=True, # condition_on_previous_text=True,
word_timestamps=True, word_timestamps=True,

View File

@@ -28,8 +28,8 @@ class TranscriptTranslatorProcessor(Processor):
# FIXME this should be a processor after, as each user may want # FIXME this should be a processor after, as each user may want
# different languages # different languages
source_language = self.get_pref("audio:source_language", "en") source_language = self.get_pref("audio:source_language", "eng")
target_language = self.get_pref("audio:target_language", "en") target_language = self.get_pref("audio:target_language", "eng")
if source_language == target_language: if source_language == target_language:
return return

View File

@@ -117,113 +117,64 @@ class FinalTitle(BaseModel):
title: str title: str
# https://github.com/facebookresearch/seamless_communication/tree/main/scripts/m4t/predict#supported-languages
class TranslationLanguages(BaseModel): class TranslationLanguages(BaseModel):
language_to_id_mapping: dict = { language_to_id_mapping: dict = {
"Afrikaans": "af", "afr": "Afrikaans",
"Albanian": "sq", "azj": "North Azerbaijani",
"Amharic": "am", "bos": "Bosnian",
"Arabic": "ar", "cat": "Catalan",
"Armenian": "hy", "ceb": "Cebuano",
"Asturian": "ast", "ces": "Czech",
"Azerbaijani": "az", "cym": "Welsh",
"Bashkir": "ba", "dan": "Danish",
"Belarusian": "be", "deu": "German",
"Bengali": "bn", "eng": "English",
"Bosnian": "bs", "est": "Estonian",
"Breton": "br", "eus": "Basque",
"Bulgarian": "bg", "fin": "Finnish",
"Burmese": "my", "fra": "French",
"Catalan; Valencian": "ca", "gaz": "West Central Oromo",
"Cebuano": "ceb", "gle": "Irish",
"Central Khmer": "km", "glg": "Galician",
"Chinese": "zh", "hrv": "Croatian",
"Croatian": "hr", "hun": "Hungarian",
"Czech": "cs", "ibo": "Igbo",
"Danish": "da", "ind": "Indonesian",
"Dutch; Flemish": "nl", "isl": "Icelandic",
"English": "en", "ita": "Italian",
"Estonian": "et", "jav": "Javanese",
"Finnish": "fi", "lit": "Lithuanian",
"French": "fr", "lug": "Ganda",
"Fulah": "ff", "luo": "Luo",
"Gaelic; Scottish Gaelic": "gd", "lvs": "Standard Latvian",
"Galician": "gl", "mlt": "Maltese",
"Ganda": "lg", "nld": "Dutch",
"Georgian": "ka", "nno": "Norwegian Nynorsk",
"German": "de", "nob": "Norwegian Bokmål",
"Greeek": "el", "nya": "Nyanja",
"Gujarati": "gu", "pol": "Polish",
"Haitian; Haitian Creole": "ht", "por": "Portuguese",
"Hausa": "ha", "ron": "Romanian",
"Hebrew": "he", "slk": "Slovak",
"Hindi": "hi", "slv": "Slovenian",
"Hungarian": "hu", "sna": "Shona",
"Icelandic": "is", "som": "Somali",
"Igbo": "ig", "spa": "Spanish",
"Iloko": "ilo", "swe": "Swedish",
"Indonesian": "id", "swh": "Swahili",
"Irish": "ga", "tgl": "Tagalog",
"Italian": "it", "tur": "Turkish",
"Japanese": "ja", "uzn": "Northern Uzbek",
"Javanese": "jv", "vie": "Vietnamese",
"Kannada": "kn", "yor": "Yoruba",
"Kazakh": "kk", "zsm": "Standard Malay",
"Korean": "ko", "zul": "Zulu",
"Lao": "lo",
"Latvian": "lv",
"Lingala": "ln",
"Lithuanian": "lt",
"Luxembourgish; Letzeburgesch": "lb",
"Macedonian": "mk",
"Malagasy": "mg",
"Malay": "ms",
"Malayalam": "ml",
"Marathi": "mr",
"Mongolian": "mn",
"Nepali": "ne",
"Northern Sotho": "ns",
"Norwegian": "no",
"Occitan": "oc",
"Oriya": "or",
"Panjabi; Punjabi": "pa",
"Persian": "fa",
"Polish": "pl",
"Portuguese": "pt",
"Pushto; Pashto": "ps",
"Romanian; Moldavian; Moldovan": "ro",
"Russian": "ru",
"Serbian": "sr",
"Sindhi": "sd",
"Sinhala; Sinhalese": "si",
"Slovak": "sk",
"Slovenian": "sl",
"Somali": "so",
"Spanish": "es",
"Sundanese": "su",
"Swahili": "sw",
"Swati": "ss",
"Swedish": "sv",
"Tagalog": "tl",
"Tamil": "ta",
"Thai": "th",
"Tswana": "tn",
"Turkish": "tr",
"Ukrainian": "uk",
"Urdu": "ur",
"Uzbek": "uz",
"Vietnamese": "vi",
"Welsh": "cy",
"Western Frisian": "fy",
"Wolof": "wo",
"Xhosa": "xh",
"Yiddish": "yi",
"Yoruba": "yo",
"Zulu": "zu",
} }
@property @property
def supported_languages(self): def supported_languages(self):
return self.language_to_id_mapping.values() return self.language_to_id_mapping.keys()
def is_supported(self, lang_id: str) -> bool: def is_supported(self, lang_id: str) -> bool:
if lang_id in self.supported_languages: if lang_id in self.supported_languages:

View File

@@ -1,7 +1,6 @@
import asyncio import asyncio
import av import av
from reflector.logger import logger from reflector.logger import logger
from reflector.processors import ( from reflector.processors import (
AudioChunkerProcessor, AudioChunkerProcessor,
@@ -23,8 +22,8 @@ async def process_audio_file(
filename, filename,
event_callback, event_callback,
only_transcript=False, only_transcript=False,
source_language="en", source_language="eng",
target_language="en", target_language="eng",
): ):
# build pipeline for audio processing # build pipeline for audio processing
processors = [ processors = [
@@ -73,8 +72,8 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("source", help="Source file (mp3, wav, mp4...)") parser.add_argument("source", help="Source file (mp3, wav, mp4...)")
parser.add_argument("--only-transcript", "-t", action="store_true") parser.add_argument("--only-transcript", "-t", action="store_true")
parser.add_argument("--source-language", default="en") parser.add_argument("--source-language", default="eng")
parser.add_argument("--target-language", default="en") parser.add_argument("--target-language", default="eng")
parser.add_argument("--output", "-o", help="Output file (output.jsonl)") parser.add_argument("--output", "-o", help="Output file (output.jsonl)")
args = parser.parse_args() args = parser.parse_args()

View File

@@ -90,8 +90,8 @@ async def rtc_offer_base(
event_callback=None, event_callback=None,
event_callback_args=None, event_callback_args=None,
audio_filename: Path | None = None, audio_filename: Path | None = None,
source_language: str = "en", source_language: str = "eng",
target_language: str = "en", target_language: str = "eng",
): ):
# build an rtc session # build an rtc session
offer = RTCSessionDescription(sdp=params.sdp, type=params.type) offer = RTCSessionDescription(sdp=params.sdp, type=params.type)

View File

@@ -87,8 +87,8 @@ class Transcript(BaseModel):
long_summary: str | None = None long_summary: str | None = None
topics: list[TranscriptTopic] = [] topics: list[TranscriptTopic] = []
events: list[TranscriptEvent] = [] events: list[TranscriptEvent] = []
source_language: str = "en" source_language: str = "eng"
target_language: str = "en" target_language: str = "eng"
def add_event(self, event: str, data: BaseModel) -> TranscriptEvent: def add_event(self, event: str, data: BaseModel) -> TranscriptEvent:
ev = TranscriptEvent(event=event, data=data.model_dump()) ev = TranscriptEvent(event=event, data=data.model_dump())
@@ -170,8 +170,8 @@ class TranscriptController:
async def add( async def add(
self, self,
name: str, name: str,
source_language: str = "en", source_language: str = "eng",
target_language: str = "en", target_language: str = "eng",
user_id: str | None = None, user_id: str | None = None,
): ):
transcript = Transcript( transcript = Transcript(
@@ -231,8 +231,8 @@ class GetTranscript(BaseModel):
class CreateTranscript(BaseModel): class CreateTranscript(BaseModel):
name: str name: str
source_language: str = Field("en") source_language: str = Field("eng")
target_language: str = Field("en") target_language: str = Field("eng")
class UpdateTranscript(BaseModel): class UpdateTranscript(BaseModel):

View File

@@ -46,7 +46,7 @@ async def dummy_transcript():
class TestAudioTranscriptProcessor(AudioTranscriptProcessor): class TestAudioTranscriptProcessor(AudioTranscriptProcessor):
async def _transcript(self, data: AudioFile): async def _transcript(self, data: AudioFile):
source_language = self.get_pref("audio:source_language", "en") source_language = self.get_pref("audio:source_language", "eng")
print("transcripting", source_language) print("transcripting", source_language)
print("pipeline", self.pipeline) print("pipeline", self.pipeline)
print("prefs", self.pipeline.prefs) print("prefs", self.pipeline.prefs)

View File

@@ -10,15 +10,15 @@ async def test_transcript_create_default_translation():
response = await ac.post("/transcripts", json={"name": "test en"}) response = await ac.post("/transcripts", json={"name": "test en"})
assert response.status_code == 200 assert response.status_code == 200
assert response.json()["name"] == "test en" assert response.json()["name"] == "test en"
assert response.json()["source_language"] == "en" assert response.json()["source_language"] == "eng"
assert response.json()["target_language"] == "en" assert response.json()["target_language"] == "eng"
tid = response.json()["id"] tid = response.json()["id"]
response = await ac.get(f"/transcripts/{tid}") response = await ac.get(f"/transcripts/{tid}")
assert response.status_code == 200 assert response.status_code == 200
assert response.json()["name"] == "test en" assert response.json()["name"] == "test en"
assert response.json()["source_language"] == "en" assert response.json()["source_language"] == "eng"
assert response.json()["target_language"] == "en" assert response.json()["target_language"] == "eng"
@pytest.mark.asyncio @pytest.mark.asyncio
@@ -31,15 +31,15 @@ async def test_transcript_create_en_fr_translation():
) )
assert response.status_code == 200 assert response.status_code == 200
assert response.json()["name"] == "test en/fr" assert response.json()["name"] == "test en/fr"
assert response.json()["source_language"] == "en" assert response.json()["source_language"] == "eng"
assert response.json()["target_language"] == "fr" assert response.json()["target_language"] == "fra"
tid = response.json()["id"] tid = response.json()["id"]
response = await ac.get(f"/transcripts/{tid}") response = await ac.get(f"/transcripts/{tid}")
assert response.status_code == 200 assert response.status_code == 200
assert response.json()["name"] == "test en/fr" assert response.json()["name"] == "test en/fr"
assert response.json()["source_language"] == "en" assert response.json()["source_language"] == "eng"
assert response.json()["target_language"] == "fr" assert response.json()["target_language"] == "fra"
@pytest.mark.asyncio @pytest.mark.asyncio
@@ -52,12 +52,12 @@ async def test_transcript_create_fr_en_translation():
) )
assert response.status_code == 200 assert response.status_code == 200
assert response.json()["name"] == "test fr/en" assert response.json()["name"] == "test fr/en"
assert response.json()["source_language"] == "fr" assert response.json()["source_language"] == "fra"
assert response.json()["target_language"] == "en" assert response.json()["target_language"] == "eng"
tid = response.json()["id"] tid = response.json()["id"]
response = await ac.get(f"/transcripts/{tid}") response = await ac.get(f"/transcripts/{tid}")
assert response.status_code == 200 assert response.status_code == 200
assert response.json()["name"] == "test fr/en" assert response.json()["name"] == "test fr/en"
assert response.json()["source_language"] == "fr" assert response.json()["source_language"] == "fra"
assert response.json()["target_language"] == "en" assert response.json()["target_language"] == "eng"