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.")
|