From 4dbcb80228c14a4cce1c02ea23f0fab98537d571 Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Wed, 15 Nov 2023 15:17:21 +0100 Subject: [PATCH] server: remove reference to banana.dev --- server/env.example | 18 ---- server/reflector/llm/llm_banana.py | 54 ------------ .../processors/audio_transcript_banana.py | 86 ------------------- server/reflector/settings.py | 17 ++-- 4 files changed, 6 insertions(+), 169 deletions(-) delete mode 100644 server/reflector/llm/llm_banana.py delete mode 100644 server/reflector/processors/audio_transcript_banana.py diff --git a/server/env.example b/server/env.example index 8c4dcdab..c5a38bf5 100644 --- a/server/env.example +++ b/server/env.example @@ -51,17 +51,6 @@ #TRANSLATE_URL=https://xxxxx--reflector-translator-web.modal.run #TRANSCRIPT_MODAL_API_KEY=xxxxx -## Using serverless banana.dev (require reflector-gpu-banana deployed) -## XXX this service is buggy do not use at the moment -## XXX it also require the audio to be saved to S3 -#TRANSCRIPT_BACKEND=banana -#TRANSCRIPT_URL=https://reflector-gpu-banana-xxxxx.run.banana.dev -#TRANSCRIPT_BANANA_API_KEY=xxx -#TRANSCRIPT_BANANA_MODEL_KEY=xxx -#TRANSCRIPT_STORAGE_AWS_ACCESS_KEY_ID=xxx -#TRANSCRIPT_STORAGE_AWS_SECRET_ACCESS_KEY=xxx -#TRANSCRIPT_STORAGE_AWS_BUCKET_NAME="reflector-bucket/chunks" - ## ======================================================= ## LLM backend ## @@ -78,13 +67,6 @@ #LLM_URL=https://xxxxxx--reflector-llm-web.modal.run #LLM_MODAL_API_KEY=xxx -## Using serverless banana.dev (require reflector-gpu-banana deployed) -## XXX this service is buggy do not use at the moment -#LLM_BACKEND=banana -#LLM_URL=https://reflector-gpu-banana-xxxxx.run.banana.dev -#LLM_BANANA_API_KEY=xxxxx -#LLM_BANANA_MODEL_KEY=xxxxx - ## Using OpenAI #LLM_BACKEND=openai #LLM_OPENAI_KEY=xxx diff --git a/server/reflector/llm/llm_banana.py b/server/reflector/llm/llm_banana.py deleted file mode 100644 index e0384770..00000000 --- a/server/reflector/llm/llm_banana.py +++ /dev/null @@ -1,54 +0,0 @@ -import httpx - -from reflector.llm.base import LLM -from reflector.settings import settings -from reflector.utils.retry import retry - - -class BananaLLM(LLM): - def __init__(self): - super().__init__() - self.timeout = settings.LLM_TIMEOUT - self.headers = { - "X-Banana-API-Key": settings.LLM_BANANA_API_KEY, - "X-Banana-Model-Key": settings.LLM_BANANA_MODEL_KEY, - } - - async def _generate( - self, prompt: str, gen_schema: dict | None, gen_cfg: dict | None, **kwargs - ): - json_payload = {"prompt": prompt} - if gen_schema: - json_payload["gen_schema"] = gen_schema - if gen_cfg: - json_payload["gen_cfg"] = gen_cfg - async with httpx.AsyncClient() as client: - response = await retry(client.post)( - settings.LLM_URL, - headers=self.headers, - json=json_payload, - timeout=self.timeout, - retry_timeout=300, # as per their sdk - ) - response.raise_for_status() - text = response.json()["text"] - return text - - -LLM.register("banana", BananaLLM) - -if __name__ == "__main__": - from reflector.logger import logger - - async def main(): - llm = BananaLLM() - prompt = llm.create_prompt( - instruct="Complete the following task", - text="Tell me a joke about programming.", - ) - result = await llm.generate(prompt=prompt, logger=logger) - print(result) - - import asyncio - - asyncio.run(main()) diff --git a/server/reflector/processors/audio_transcript_banana.py b/server/reflector/processors/audio_transcript_banana.py deleted file mode 100644 index fe339eea..00000000 --- a/server/reflector/processors/audio_transcript_banana.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -Implementation using the GPU service from banana. - -API will be a POST request to TRANSCRIPT_URL: - -```json -{ - "audio_url": "https://...", - "audio_ext": "wav", - "timestamp": 123.456 - "language": "en" -} -``` - -""" - -from pathlib import Path - -import httpx -from reflector.processors.audio_transcript import AudioTranscriptProcessor -from reflector.processors.audio_transcript_auto import AudioTranscriptAutoProcessor -from reflector.processors.types import AudioFile, Transcript, Word -from reflector.settings import settings -from reflector.storage import Storage -from reflector.utils.retry import retry - - -class AudioTranscriptBananaProcessor(AudioTranscriptProcessor): - def __init__(self, banana_api_key: str, banana_model_key: str): - super().__init__() - self.transcript_url = settings.TRANSCRIPT_URL - self.timeout = settings.TRANSCRIPT_TIMEOUT - self.storage = Storage.get_instance( - settings.TRANSCRIPT_STORAGE_BACKEND, "TRANSCRIPT_STORAGE_" - ) - self.headers = { - "X-Banana-API-Key": banana_api_key, - "X-Banana-Model-Key": banana_model_key, - } - - async def _transcript(self, data: AudioFile): - async with httpx.AsyncClient() as client: - print(f"Uploading audio {data.path.name} to S3") - url = await self._upload_file(data.path) - - print(f"Try to transcribe audio {data.path.name}") - request_data = { - "audio_url": url, - "audio_ext": data.path.suffix[1:], - "timestamp": float(round(data.timestamp, 2)), - } - response = await retry(client.post)( - self.transcript_url, - json=request_data, - headers=self.headers, - timeout=self.timeout, - ) - - print(f"Transcript response: {response.status_code} {response.content}") - response.raise_for_status() - result = response.json() - transcript = Transcript( - text=result["text"], - words=[ - Word(text=word["text"], start=word["start"], end=word["end"]) - for word in result["words"] - ], - ) - - # remove audio file from S3 - await self._delete_file(data.path) - - return transcript - - @retry - async def _upload_file(self, path: Path) -> str: - upload_result = await self.storage.put_file(path.name, open(path, "rb")) - return upload_result.url - - @retry - async def _delete_file(self, path: Path): - await self.storage.delete_file(path.name) - return True - - -AudioTranscriptAutoProcessor.register("banana", AudioTranscriptBananaProcessor) diff --git a/server/reflector/settings.py b/server/reflector/settings.py index 013ab9b7..f9b997cb 100644 --- a/server/reflector/settings.py +++ b/server/reflector/settings.py @@ -41,7 +41,7 @@ class Settings(BaseSettings): AUDIO_BUFFER_SIZE: int = 256 * 960 # Audio Transcription - # backends: whisper, banana, modal + # backends: whisper, modal TRANSCRIPT_BACKEND: str = "whisper" TRANSCRIPT_URL: str | None = None TRANSCRIPT_TIMEOUT: int = 90 @@ -50,10 +50,6 @@ class Settings(BaseSettings): TRANSLATE_URL: str | None = None TRANSLATE_TIMEOUT: int = 90 - # Audio transcription banana.dev configuration - TRANSCRIPT_BANANA_API_KEY: str | None = None - TRANSCRIPT_BANANA_MODEL_KEY: str | None = None - # Audio transcription modal.com configuration TRANSCRIPT_MODAL_API_KEY: str | None = None @@ -61,13 +57,16 @@ class Settings(BaseSettings): TRANSCRIPT_STORAGE_BACKEND: str = "aws" # Storage configuration for AWS - TRANSCRIPT_STORAGE_AWS_BUCKET_NAME: str = "reflector-bucket/chunks" + TRANSCRIPT_STORAGE_AWS_BUCKET_NAME: str = "reflector-bucket" TRANSCRIPT_STORAGE_AWS_REGION: str = "us-east-1" TRANSCRIPT_STORAGE_AWS_ACCESS_KEY_ID: str | None = None TRANSCRIPT_STORAGE_AWS_SECRET_ACCESS_KEY: str | None = None + # Transcript MP3 storage + TRANSCRIPT_MP3_STORAGE_BACKEND: str = "aws" + # LLM - # available backend: openai, banana, modal, oobabooga + # available backend: openai, modal, oobabooga LLM_BACKEND: str = "oobabooga" # LLM common configuration @@ -82,10 +81,6 @@ class Settings(BaseSettings): LLM_TEMPERATURE: float = 0.7 ZEPHYR_LLM_URL: str | None = None - # LLM Banana configuration - LLM_BANANA_API_KEY: str | None = None - LLM_BANANA_MODEL_KEY: str | None = None - # LLM Modal configuration LLM_MODAL_API_KEY: str | None = None