NiketKakkar's picture
Initial Space deployment
da01d3c
Raw
History Blame Contribute Delete
2.58 kB
"""Modal client — thin wrapper around Container 1 and Container 2 .remote() calls."""
import modal
generate_commentary = modal.Function.from_name("f1-paddock-oracle", "generate_commentary")
reason_strategy = modal.Function.from_name("f1-paddock-oracle", "reason_strategy")
_persona_chat = modal.Function.from_name("f1-paddock-oracle", "persona_chat")
_commentary_call_count = 0
_strategy_call_count = 0
_persona_call_count = 0
_LOADING_FIRST = "Connecting to the pit wall… (~20s first call)"
_LOADING_SUBSEQUENT = "On it — back in a few seconds"
def get_commentary_loading_message() -> str:
return _LOADING_FIRST if _commentary_call_count == 0 else _LOADING_SUBSEQUENT
def get_strategy_loading_message() -> str:
return _LOADING_FIRST if _strategy_call_count == 0 else _LOADING_SUBSEQUENT
def get_persona_loading_message() -> str:
return _LOADING_FIRST if _persona_call_count == 0 else _LOADING_SUBSEQUENT
def call_generate_commentary(prompt: str, style: str = "", warmup: bool = False) -> dict:
global _commentary_call_count
full_prompt = f"[{style}] {prompt}" if style else prompt
result = generate_commentary.remote(prompt=full_prompt, warmup=warmup)
if not warmup:
_commentary_call_count += 1
return result
def call_reason_strategy(prompt: str, warmup: bool = False) -> dict:
global _strategy_call_count
result = reason_strategy.remote(prompt=prompt, warmup=warmup)
if not warmup:
_strategy_call_count += 1
return result
def call_persona_chat(system_prompt: str, user_message: str, warmup: bool = False) -> dict:
global _persona_call_count
result = _persona_chat.remote(
system_prompt=system_prompt,
user_message=user_message,
warmup=warmup,
)
if not warmup:
_persona_call_count += 1
return result
def transcribe_audio(audio_bytes: bytes) -> str:
"""Transcribe raw audio bytes to text using Cohere's transcription API.
Args:
audio_bytes: Raw audio bytes from gr.Audio component (WAV format).
Returns:
Transcribed text string. Returns empty string on failure.
"""
import os
import io
import cohere
api_key = os.environ.get("COHERE_API_KEY", "")
if not api_key:
raise EnvironmentError("COHERE_API_KEY environment variable not set.")
client = cohere.Client(api_key)
audio_file = io.BytesIO(audio_bytes)
audio_file.name = "recording.wav"
response = client.transcribe(file=audio_file)
return response.text if hasattr(response, "text") else str(response)