Spaces:
Running
Running
zach
commited on
Commit
·
49be7fc
1
Parent(s):
d7356ce
Remove excessive logging from debugging
Browse files- src/app.py +2 -7
- src/config.py +2 -1
- src/integrations/anthropic_api.py +1 -4
- src/integrations/elevenlabs_api.py +4 -10
- src/integrations/hume_api.py +5 -9
- src/utils.py +3 -6
src/app.py
CHANGED
|
@@ -41,22 +41,17 @@ def process_prompt(prompt: str) -> str:
|
|
| 41 |
Returns:
|
| 42 |
tuple: The generated text and audio data from both Hume and ElevenLabs.
|
| 43 |
"""
|
| 44 |
-
logger.
|
| 45 |
try:
|
| 46 |
# Validate prompt length before processing
|
| 47 |
validate_prompt_length(prompt, PROMPT_MAX_LENGTH, PROMPT_MIN_LENGTH)
|
| 48 |
|
| 49 |
# Generate text with Claude API
|
| 50 |
generated_text = generate_text_with_claude(prompt)
|
| 51 |
-
logger.
|
| 52 |
|
| 53 |
-
# Convert text to speech with Hume TTS API
|
| 54 |
hume_audio = text_to_speech_with_hume(prompt, generated_text)
|
| 55 |
-
logger.debug(f"Hume audio data: {len(hume_audio)} bytes")
|
| 56 |
-
|
| 57 |
-
# Convert text to speech with ElevenLabs TTS API
|
| 58 |
elevenlabs_audio = text_to_speech_with_elevenlabs(generated_text)
|
| 59 |
-
logger.debug(f"ElevenLabs audio data: {len(elevenlabs_audio)} bytes")
|
| 60 |
|
| 61 |
logger.info("Successfully processed prompt.")
|
| 62 |
return generated_text, hume_audio, elevenlabs_audio
|
|
|
|
| 41 |
Returns:
|
| 42 |
tuple: The generated text and audio data from both Hume and ElevenLabs.
|
| 43 |
"""
|
| 44 |
+
logger.info(f"Processing prompt: {truncate_text(prompt, max_length=100)}")
|
| 45 |
try:
|
| 46 |
# Validate prompt length before processing
|
| 47 |
validate_prompt_length(prompt, PROMPT_MAX_LENGTH, PROMPT_MIN_LENGTH)
|
| 48 |
|
| 49 |
# Generate text with Claude API
|
| 50 |
generated_text = generate_text_with_claude(prompt)
|
| 51 |
+
logger.info(f"Generated text (length={len(generated_text)} characters).")
|
| 52 |
|
|
|
|
| 53 |
hume_audio = text_to_speech_with_hume(prompt, generated_text)
|
|
|
|
|
|
|
|
|
|
| 54 |
elevenlabs_audio = text_to_speech_with_elevenlabs(generated_text)
|
|
|
|
| 55 |
|
| 56 |
logger.info("Successfully processed prompt.")
|
| 57 |
return generated_text, hume_audio, elevenlabs_audio
|
src/config.py
CHANGED
|
@@ -51,4 +51,5 @@ def log_env_variable(var_name: str, value: str) -> None:
|
|
| 51 |
"""
|
| 52 |
logger.debug(f"Environment variable '{var_name}' validated with value: {value}")
|
| 53 |
|
| 54 |
-
|
|
|
|
|
|
| 51 |
"""
|
| 52 |
logger.debug(f"Environment variable '{var_name}' validated with value: {value}")
|
| 53 |
|
| 54 |
+
if DEBUG:
|
| 55 |
+
logger.debug(f"DEBUG mode enabled.")
|
src/integrations/anthropic_api.py
CHANGED
|
@@ -119,10 +119,7 @@ def generate_text_with_claude(prompt: str) -> str:
|
|
| 119 |
>>> generate_text_with_claude("")
|
| 120 |
"The prompt exceeds the maximum allowed length of 500 characters. Your prompt contains 512 characters."
|
| 121 |
"""
|
| 122 |
-
|
| 123 |
-
logger.debug(f"Using model: {anthropic_config.model}, max tokens: {anthropic_config.max_tokens}")
|
| 124 |
-
logger.debug(f"System prompt: {truncate_text(anthropic_config.system_prompt)}")
|
| 125 |
-
logger.debug(f"Preparing API request with prompt: {prompt[:50]}{'...' if len(prompt) > 50 else ''}")
|
| 126 |
|
| 127 |
try:
|
| 128 |
response: Message = anthropic_config.client.messages.create(
|
|
|
|
| 119 |
>>> generate_text_with_claude("")
|
| 120 |
"The prompt exceeds the maximum allowed length of 500 characters. Your prompt contains 512 characters."
|
| 121 |
"""
|
| 122 |
+
logger.debug(f"Generating text with Claude. Prompt length: {len(prompt)} characters.")
|
|
|
|
|
|
|
|
|
|
| 123 |
|
| 124 |
try:
|
| 125 |
response: Message = anthropic_config.client.messages.create(
|
src/integrations/elevenlabs_api.py
CHANGED
|
@@ -90,10 +90,7 @@ def text_to_speech_with_elevenlabs(text: str) -> bytes:
|
|
| 90 |
Raises:
|
| 91 |
ElevenLabsException: If there is an error communicating with the ElevenLabs API or processing the response.
|
| 92 |
"""
|
| 93 |
-
logger.debug(f"
|
| 94 |
-
logger.debug(f"Using Voice ID: {elevenlabs_config.voice_id}")
|
| 95 |
-
logger.debug(f"Using Model ID: {elevenlabs_config.model_id}")
|
| 96 |
-
logger.debug(f"Using Output Format: {elevenlabs_config.output_format}")
|
| 97 |
|
| 98 |
try:
|
| 99 |
# Generate audio using the ElevenLabs SDK
|
|
@@ -106,7 +103,7 @@ def text_to_speech_with_elevenlabs(text: str) -> bytes:
|
|
| 106 |
|
| 107 |
# Ensure the response is an iterator
|
| 108 |
if not hasattr(audio_iterator, "__iter__") or not hasattr(audio_iterator, "__next__"):
|
| 109 |
-
logger.error(
|
| 110 |
raise ElevenLabsException("Invalid audio iterator received from ElevenLabs API.")
|
| 111 |
|
| 112 |
# Combine chunks into a single bytes object
|
|
@@ -117,14 +114,11 @@ def text_to_speech_with_elevenlabs(text: str) -> bytes:
|
|
| 117 |
logger.error("No audio data received from ElevenLabs API.")
|
| 118 |
raise ElevenLabsException("Empty audio data received from ElevenLabs API.")
|
| 119 |
|
| 120 |
-
logger.
|
| 121 |
return audio
|
| 122 |
|
| 123 |
except Exception as e:
|
| 124 |
-
logger.exception(
|
| 125 |
-
f"Error generating text-to-speech with ElevenLabs: {e}. "
|
| 126 |
-
f"Text: {truncate_text(text)}, Voice ID: {elevenlabs_config.voice_id}"
|
| 127 |
-
)
|
| 128 |
raise ElevenLabsException(
|
| 129 |
message=f"Failed to generate audio with ElevenLabs: {e}",
|
| 130 |
original_exception=e,
|
|
|
|
| 90 |
Raises:
|
| 91 |
ElevenLabsException: If there is an error communicating with the ElevenLabs API or processing the response.
|
| 92 |
"""
|
| 93 |
+
logger.debug(f"Generating speech with ElevenLabs. Text length: {len(text)} characters.")
|
|
|
|
|
|
|
|
|
|
| 94 |
|
| 95 |
try:
|
| 96 |
# Generate audio using the ElevenLabs SDK
|
|
|
|
| 103 |
|
| 104 |
# Ensure the response is an iterator
|
| 105 |
if not hasattr(audio_iterator, "__iter__") or not hasattr(audio_iterator, "__next__"):
|
| 106 |
+
logger.error("Invalid audio iterator response.")
|
| 107 |
raise ElevenLabsException("Invalid audio iterator received from ElevenLabs API.")
|
| 108 |
|
| 109 |
# Combine chunks into a single bytes object
|
|
|
|
| 114 |
logger.error("No audio data received from ElevenLabs API.")
|
| 115 |
raise ElevenLabsException("Empty audio data received from ElevenLabs API.")
|
| 116 |
|
| 117 |
+
logger.info(f"Received ElevenLabs audio ({len(audio)} bytes).")
|
| 118 |
return audio
|
| 119 |
|
| 120 |
except Exception as e:
|
| 121 |
+
logger.exception(f"Error generating speech: {e}")
|
|
|
|
|
|
|
|
|
|
| 122 |
raise ElevenLabsException(
|
| 123 |
message=f"Failed to generate audio with ElevenLabs: {e}",
|
| 124 |
original_exception=e,
|
src/integrations/hume_api.py
CHANGED
|
@@ -78,8 +78,7 @@ def text_to_speech_with_hume(prompt: str, text: str) -> bytes:
|
|
| 78 |
Raises:
|
| 79 |
HumeException: If there is an error communicating with the Hume TTS API.
|
| 80 |
"""
|
| 81 |
-
logger.debug(f"
|
| 82 |
-
logger.debug(f"Generated text for TTS: {truncate_text(text)}")
|
| 83 |
|
| 84 |
request_body = {
|
| 85 |
"text": text,
|
|
@@ -95,21 +94,18 @@ def text_to_speech_with_hume(prompt: str, text: str) -> bytes:
|
|
| 95 |
json=request_body,
|
| 96 |
)
|
| 97 |
|
| 98 |
-
#
|
| 99 |
-
logger.debug(f"Hume TTS API Response Status: {response.status_code}")
|
| 100 |
-
|
| 101 |
if response.status_code != 200:
|
| 102 |
logger.error(f"Hume TTS API Error: {response.status_code} - {response.text[:200]}... (truncated)")
|
| 103 |
raise HumeException(f"Hume TTS API responded with status {response.status_code}: {response.text}")
|
| 104 |
|
| 105 |
-
#
|
| 106 |
if response.headers.get("Content-Type", "").startswith("audio/"):
|
| 107 |
audio_data = response.content # Raw binary audio data
|
| 108 |
-
logger.
|
| 109 |
return audio_data
|
| 110 |
|
| 111 |
# Unexpected content type
|
| 112 |
-
logger.error(f"Unexpected Content-Type: {response.headers.get('Content-Type', 'Unknown')}")
|
| 113 |
raise HumeException(f"Unexpected Content-Type: {response.headers.get('Content-Type', 'Unknown')}")
|
| 114 |
|
| 115 |
except requests.exceptions.RequestException as e:
|
|
@@ -119,7 +115,7 @@ def text_to_speech_with_hume(prompt: str, text: str) -> bytes:
|
|
| 119 |
original_exception=e,
|
| 120 |
)
|
| 121 |
except Exception as e:
|
| 122 |
-
logger.exception(
|
| 123 |
raise HumeException(
|
| 124 |
message=f"Unexpected error while processing the Hume TTS response: {e}",
|
| 125 |
original_exception=e,
|
|
|
|
| 78 |
Raises:
|
| 79 |
HumeException: If there is an error communicating with the Hume TTS API.
|
| 80 |
"""
|
| 81 |
+
logger.debug(f"Processing TTS with Hume. Prompt length: {len(prompt)} characters. Text length: {len(text)} characters.")
|
|
|
|
| 82 |
|
| 83 |
request_body = {
|
| 84 |
"text": text,
|
|
|
|
| 94 |
json=request_body,
|
| 95 |
)
|
| 96 |
|
| 97 |
+
# Validate response
|
|
|
|
|
|
|
| 98 |
if response.status_code != 200:
|
| 99 |
logger.error(f"Hume TTS API Error: {response.status_code} - {response.text[:200]}... (truncated)")
|
| 100 |
raise HumeException(f"Hume TTS API responded with status {response.status_code}: {response.text}")
|
| 101 |
|
| 102 |
+
# Process audio response
|
| 103 |
if response.headers.get("Content-Type", "").startswith("audio/"):
|
| 104 |
audio_data = response.content # Raw binary audio data
|
| 105 |
+
logger.info(f"Received audio data from Hume ({len(response.content)} bytes).")
|
| 106 |
return audio_data
|
| 107 |
|
| 108 |
# Unexpected content type
|
|
|
|
| 109 |
raise HumeException(f"Unexpected Content-Type: {response.headers.get('Content-Type', 'Unknown')}")
|
| 110 |
|
| 111 |
except requests.exceptions.RequestException as e:
|
|
|
|
| 115 |
original_exception=e,
|
| 116 |
)
|
| 117 |
except Exception as e:
|
| 118 |
+
logger.exception("Request to Hume TTS API failed.")
|
| 119 |
raise HumeException(
|
| 120 |
message=f"Unexpected error while processing the Hume TTS response: {e}",
|
| 121 |
original_exception=e,
|
src/utils.py
CHANGED
|
@@ -40,16 +40,14 @@ def truncate_text(text: str, max_length: int = 50) -> str:
|
|
| 40 |
''
|
| 41 |
"""
|
| 42 |
if max_length <= 0:
|
| 43 |
-
logger.warning(f"Invalid max_length
|
| 44 |
return ""
|
| 45 |
|
| 46 |
is_truncated = len(text) > max_length
|
| 47 |
-
truncated_text = text[:max_length]
|
| 48 |
if is_truncated:
|
| 49 |
-
|
| 50 |
|
| 51 |
-
|
| 52 |
-
return truncated_text
|
| 53 |
|
| 54 |
|
| 55 |
def validate_env_var(var_name: str) -> str:
|
|
@@ -76,7 +74,6 @@ def validate_env_var(var_name: str) -> str:
|
|
| 76 |
...
|
| 77 |
ValueError: MISSING_VAR is not set. Please ensure it is defined in your environment variables.
|
| 78 |
"""
|
| 79 |
-
logger.debug(f"Validating environment variable: {var_name}")
|
| 80 |
value = os.environ.get(var_name, "")
|
| 81 |
if not value:
|
| 82 |
raise ValueError(f"{var_name} is not set. Please ensure it is defined in your environment variables.")
|
|
|
|
| 40 |
''
|
| 41 |
"""
|
| 42 |
if max_length <= 0:
|
| 43 |
+
logger.warning(f"Invalid max_length={max_length}. Returning empty string.")
|
| 44 |
return ""
|
| 45 |
|
| 46 |
is_truncated = len(text) > max_length
|
|
|
|
| 47 |
if is_truncated:
|
| 48 |
+
logger.debug(f"Truncated text to {max_length} characters.")
|
| 49 |
|
| 50 |
+
return text[:max_length] + ("..." if is_truncated else "")
|
|
|
|
| 51 |
|
| 52 |
|
| 53 |
def validate_env_var(var_name: str) -> str:
|
|
|
|
| 74 |
...
|
| 75 |
ValueError: MISSING_VAR is not set. Please ensure it is defined in your environment variables.
|
| 76 |
"""
|
|
|
|
| 77 |
value = os.environ.get(var_name, "")
|
| 78 |
if not value:
|
| 79 |
raise ValueError(f"{var_name} is not set. Please ensure it is defined in your environment variables.")
|