Abdulkader commited on
Commit
3c68669
·
verified ·
1 Parent(s): 5fe9e4e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -19
app.py CHANGED
@@ -1,40 +1,62 @@
1
  import gradio as gr
2
  from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
3
 
4
- # Load your exported model from the Hub
5
- model_id = "akhooli/gpt2-small-arabic"
6
 
7
- tokenizer = AutoTokenizer.from_pretrained(model_id)
8
- model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
 
9
 
 
10
  pipe = pipeline(
11
  "text-generation",
12
  model=model,
13
  tokenizer=tokenizer,
14
  max_new_tokens=200,
15
- temperature=0.9,
16
- top_p=0.95,
17
- repetition_penalty=1.05
 
18
  )
19
 
20
- def generate_lyrics(style, mood, prompt):
21
- full_prompt = f"أنت كاتب أغاني لبناني. النمط: {style}، المزاج: {mood}.\n{prompt}"
22
- out = pipe(full_prompt)[0]["generated_text"]
23
- return out[len(full_prompt):].strip()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
- styles = ["بوب", "طرب", "دبكة", "راب"]
26
- moods = ["رومانسي", "حنين", "احتفالي", "حزين"]
27
 
28
  demo = gr.Interface(
29
  fn=generate_lyrics,
30
  inputs=[
31
- gr.Dropdown(styles, label="النمط"),
32
- gr.Dropdown(moods, label="المزاج"),
33
- gr.Textbox(lines=3, placeholder="أدخل فكرة أو جملة بداية...")
34
  ],
35
- outputs=gr.Textbox(label="الكلمات الناتجة"),
36
- title="مولد الأغاني اللبنانية",
37
- description="أدخل النمط والمزاج وفكرة البداية، واحصل على كلمات قابلة للغناء."
38
  )
39
 
40
  if __name__ == "__main__":
 
1
  import gradio as gr
2
  from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
3
 
4
+ # Arabic-capable generative model
5
+ MODEL_ID = "akhooli/gpt2-small-arabic"
6
 
7
+ # Load tokenizer & model
8
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
9
+ model = AutoModelForCausalLM.from_pretrained(MODEL_ID, device_map="auto")
10
 
11
+ # Create generation pipeline with tuned parameters
12
  pipe = pipeline(
13
  "text-generation",
14
  model=model,
15
  tokenizer=tokenizer,
16
  max_new_tokens=200,
17
+ temperature=0.85, # Slightly creative but not chaotic
18
+ top_p=0.92, # Nucleus sampling
19
+ repetition_penalty=1.1, # Avoids echoing the same line
20
+ do_sample=True
21
  )
22
 
23
+ # Persistent role instruction
24
+ ROLE = (
25
+ "أنت شاعر غنائي لبناني محترف، تكتب كلمات أغاني جذابة "
26
+ "بصيغة مقاطع [المقطع الأول]، [اللازمة]، [المقطع الثاني]، "
27
+ "تمزج الصور الشعرية باللهجة اللبنانية وتضيف لمسة موسيقية واضحة."
28
+ )
29
+
30
+ def generate_lyrics(style, mood, user_prompt):
31
+ scaffold = (
32
+ f"{ROLE}\n"
33
+ f"النمط: {style}\n"
34
+ f"المزاج: {mood}\n"
35
+ f"أكتب الأغنية بالتنسيق التالي:\n"
36
+ "[المقطع الأول]:\n"
37
+ "[اللازمة]:\n"
38
+ "[المقطع الثاني]:\n\n"
39
+ f"الموضوع: {user_prompt}\n\n"
40
+ )
41
+
42
+ result = pipe(scaffold)[0]["generated_text"]
43
+ # Trim the role/metadata from output
44
+ clean = result[len(scaffold):].strip()
45
+ return clean
46
 
47
+ styles = ["بوب", "طرب", "دبكة", "راب", "مزج"]
48
+ moods = ["رومانسي", "ساخر", "احتفالي", "حزين", "حنين"]
49
 
50
  demo = gr.Interface(
51
  fn=generate_lyrics,
52
  inputs=[
53
+ gr.Dropdown(styles, label="🎼 النمط"),
54
+ gr.Dropdown(moods, label="🎭 المزاج"),
55
+ gr.Textbox(lines=3, placeholder="💡 الفكرة أو الجملة الافتتاحية للأغنية")
56
  ],
57
+ outputs=gr.Textbox(label="🎤 كلمات الأغنية الناتجة", lines=10),
58
+ title="مولّد الأغاني اللبنانية",
59
+ description="اختر النمط والمزاج، ثم أدخل فكرة الأغنية. سيقوم المولّد بإنشاء كلمات بمقاطع ولازمات."
60
  )
61
 
62
  if __name__ == "__main__":