jacob-c commited on
Commit
3bc2967
·
1 Parent(s): c9ff2a7
Files changed (1) hide show
  1. app.py +18 -21
app.py CHANGED
@@ -13,7 +13,7 @@ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
13
 
14
  # API URLs and headers
15
  AUDIO_API_URL = "https://api-inference.huggingface.co/models/MIT/ast-finetuned-audioset-10-10-0.4593"
16
- LYRICS_API_URL = "https://api-inference.huggingface.co/models/EleutherAI/gpt-j-6B"
17
  headers = {"Authorization": f"Bearer {os.environ.get('HF_TOKEN')}"}
18
 
19
  def format_error(message):
@@ -30,27 +30,15 @@ def create_lyrics_prompt(classification_results):
30
  # Get additional musical elements
31
  additional_elements = [r['label'] for r in classification_results[1:3]]
32
 
33
- # Create a detailed creative prompt
34
- prompt = f"""Write creative and original song lyrics that capture the following musical elements:
 
35
 
36
- Primary Style: {genre} ({confidence*100:.1f}% confidence)
37
- Secondary Elements: {', '.join(additional_elements)}
38
-
39
- Requirements:
40
- 1. Create lyrics that strongly reflect the {genre} style
41
- 2. Incorporate elements of {' and '.join(additional_elements)}
42
- 3. Include both verses and a chorus
43
- 4. Match the mood and atmosphere typical of this genre
44
- 5. Use appropriate musical terminology and style
45
-
46
- Lyrics:
47
-
48
- [Verse 1]
49
- """
50
  return prompt
51
 
52
  def generate_lyrics_with_retry(prompt, max_retries=5, initial_wait=2):
53
- """Generate lyrics using GPT-J-6B with retry logic"""
54
  wait_time = initial_wait
55
 
56
  for attempt in range(max_retries):
@@ -61,9 +49,9 @@ def generate_lyrics_with_retry(prompt, max_retries=5, initial_wait=2):
61
  json={
62
  "inputs": prompt,
63
  "parameters": {
64
- "max_new_tokens": 250,
65
- "temperature": 0.8,
66
- "top_p": 0.92,
67
  "do_sample": True,
68
  "return_full_text": False,
69
  "stop": ["[End]", "\n\n\n"]
@@ -81,10 +69,19 @@ def generate_lyrics_with_retry(prompt, max_retries=5, initial_wait=2):
81
  # Clean up and format the generated text
82
  lines = generated_text.split('\n')
83
  cleaned_lines = []
 
 
84
  for line in lines:
85
  line = line.strip()
86
  if line and not line.startswith('###') and not line.startswith('```'):
 
 
87
  cleaned_lines.append(line)
 
 
 
 
 
88
  return "\n".join(cleaned_lines)
89
  return "Error: No text generated"
90
  elif response.status_code == 503:
 
13
 
14
  # API URLs and headers
15
  AUDIO_API_URL = "https://api-inference.huggingface.co/models/MIT/ast-finetuned-audioset-10-10-0.4593"
16
+ LYRICS_API_URL = "https://api-inference.huggingface.co/models/gpt2-xl"
17
  headers = {"Authorization": f"Bearer {os.environ.get('HF_TOKEN')}"}
18
 
19
  def format_error(message):
 
30
  # Get additional musical elements
31
  additional_elements = [r['label'] for r in classification_results[1:3]]
32
 
33
+ # Create a more focused prompt for GPT2-XL
34
+ prompt = f"""Write song lyrics in the style of {genre}.
35
+ Theme: A {genre} song with elements of {' and '.join(additional_elements)}
36
 
37
+ [Verse 1]"""
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  return prompt
39
 
40
  def generate_lyrics_with_retry(prompt, max_retries=5, initial_wait=2):
41
+ """Generate lyrics using GPT2-XL with retry logic"""
42
  wait_time = initial_wait
43
 
44
  for attempt in range(max_retries):
 
49
  json={
50
  "inputs": prompt,
51
  "parameters": {
52
+ "max_new_tokens": 200,
53
+ "temperature": 0.9,
54
+ "top_p": 0.95,
55
  "do_sample": True,
56
  "return_full_text": False,
57
  "stop": ["[End]", "\n\n\n"]
 
69
  # Clean up and format the generated text
70
  lines = generated_text.split('\n')
71
  cleaned_lines = []
72
+ current_section = "[Verse 1]"
73
+
74
  for line in lines:
75
  line = line.strip()
76
  if line and not line.startswith('###') and not line.startswith('```'):
77
+ if line.lower().startswith('[verse') or line.lower().startswith('[chorus'):
78
+ current_section = line
79
  cleaned_lines.append(line)
80
+
81
+ # Add chorus after first verse if not present
82
+ if len(cleaned_lines) == 4 and current_section == "[Verse 1]":
83
+ cleaned_lines.append("\n[Chorus]")
84
+
85
  return "\n".join(cleaned_lines)
86
  return "Error: No text generated"
87
  elif response.status_code == 503: