File size: 2,994 Bytes
5843465
 
5eb8066
c3c0b4d
 
 
 
18c6822
 
 
 
 
 
 
fe56947
c3c0b4d
 
5eb8066
 
 
c3c0b4d
5eb8066
fe56947
5eb8066
c3c0b4d
5eb8066
 
 
 
 
 
5843465
c3c0b4d
fe56947
33db545
c3c0b4d
 
5eb8066
c4d2b9e
 
 
 
 
c3c0b4d
fe56947
c3c0b4d
fe56947
5eb8066
 
fe56947
5eb8066
c3c0b4d
5eb8066
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import gc 
import gradio as gr
from transformers import pipeline, set_seed

pipe = pipeline('text-generation', framework='pt', model='akhooli/ap2023', tokenizer='akhooli/ap2023')
#gc.collect()
samples = [['أنت'
           ,1.0, 25, 0.8, 1.0, 114],['هل غادر'
            ,1.0, 25, 0.8, 1.0, 114 ],['ألا ليت'
              ,1.0, 25, 0.8, 1.0, 114 ],['يا قدس'
                 ,1.0, 25, 0.8, 1.0, 114],['عيد بأية حال'
                   ,1.0, 25, 0.8, 1.0, 114],['لكل شيء إذا ما'
                    ,1.0, 25, 0.8, 1.0, 114 ],['.'
                       ,1.0, 25, 0.8, 1.0, 114]]
                     
notes = """
- Enter a short prompt or select (click) one of the examples and click SEND 
- Adjust parameters (temperture, top k, top p and penalty) through the slider (keep close to default values).
- For the same seed (randomness), the same output is regenerated if other parameters are fixed. Seed should be 0 or more (not empty) 
- Clear and enter new prompt or select another example and SEND to regenerate
- The '.' means start a new line from no prompt (your prompt need not be long) 
- Be patient: this runs on CPU (free tier)
- Feedback (Twitter): @akhooli (https://twitter.com/akhooli/status/1611025232201977859) 
- Note/Disclaimer: may generate unaccepted or inappropriate content. Use at your own risk.
"""
def sayPoetry(prompt, temp=1.0, topk = 50, topp = 1.0, penalty=1.0, seed=114):
    if not int(seed) >= 0: seed=114
    set_seed(seed)
    gen = pipe(prompt, max_length=96, do_sample=True, temperature=temp, top_k=topk, top_p=topp, repetition_penalty=penalty,
              min_length = 64, no_repeat_ngram_size = 3, return_full_text=True,
               num_beams=5, num_return_sequences=1)[0]["generated_text"]
    poetry =""
    for line in gen.split('.')[:-1]:
        poetry += line #+ "\n"
    return poetry
poetry = gr.Interface(fn=sayPoetry, 
                    inputs=[
                        gr.Textbox(label="Enter short prompt or select from examples:"), 
                        gr.Slider(0.50, 1.5, step=0.01,value=1.0, label='temperature (higher is more creative)'),
                        gr.Slider(5, 60, step=1,value=40, label='top k sampling'),
                        gr.Slider(0.70, 0.95, step=0.01,value=0.90, label='top p probabilities'),
                        gr.Slider(0.10, 1.5, step=0.01,value=1.0, label='repetition penalty'),
                        gr.Number(value=1359719, precision=0, label='random seed'),
                    ], 
                outputs=[gr.Textbox(label="Generated Poetry:")], 
                    
                allow_flagging='never',
                title='Arabic Poetry Generation Demo (updated Jan. 2023)',
                description = "A simple demo of AI generated poetry based on 1M poems fine-tuned using AraGPT2 (be patient, runs on cpu)",
                examples=samples,
                cache_examples=False,
                article = notes)
poetry.launch()