Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,40 +1,62 @@
|
|
1 |
import gradio as gr
|
2 |
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
|
3 |
|
4 |
-
#
|
5 |
-
|
6 |
|
7 |
-
tokenizer
|
8 |
-
|
|
|
9 |
|
|
|
10 |
pipe = pipeline(
|
11 |
"text-generation",
|
12 |
model=model,
|
13 |
tokenizer=tokenizer,
|
14 |
max_new_tokens=200,
|
15 |
-
temperature=0.
|
16 |
-
top_p=0.
|
17 |
-
repetition_penalty=1.
|
|
|
18 |
)
|
19 |
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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__":
|