File size: 6,393 Bytes
4001c44
 
 
 
 
 
796fe24
f757670
95906fc
4001c44
 
369b102
4001c44
 
369b102
96c3078
1b3265e
4001c44
 
487de19
282bf30
487de19
369b102
4001c44
 
282bf30
487de19
4001c44
 
 
 
 
13cb41d
4001c44
 
 
 
 
 
 
 
 
 
 
1b3265e
 
 
4001c44
 
1b3265e
f333bc0
4001c44
369b102
 
 
4001c44
369b102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b3265e
4001c44
 
 
 
032437b
 
 
 
 
 
4001c44
 
 
474558e
4001c44
 
ea0b4a3
4001c44
2775823
1b3265e
282bf30
 
 
 
 
 
 
 
 
 
 
4001c44
 
 
369b102
 
4001c44
04933d3
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import gradio as gr
import requests
import os 

##Bloom Inference API
API_URL = "https://api-inference.huggingface.co/models/bigscience/bloom"

headers = {"Authorization": f"Bearer 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"}
prompt_sep = '😃'


def text_generate(prompt, top_p=0.8, top_k=100, temperature=1.0, num_beams=3, repetition_penalty=3.0): 
  #Prints to debug the code
  print(f"*****Inside text_generate - Prompt is :{prompt}")
  max_tokens = 250
  max_prompt_len = 50
  json_ = {"inputs": prompt[-max_prompt_len:],
            "parameters":
            {
            "top_p": float(top_p),
            "top_k": top_k,
          "temperature": float(temperature),
          "max_new_tokens": max_tokens,
          "return_full_text": True,
          "do_sample":True,
          "num_beams": num_beams,
          "repetition_penalty": float(repetition_penalty),
          }, 
          "options": 
          {"use_cache": True,
          "wait_for_model": True,
          },}
  print(f"Gen params is: {json_}")
  response = requests.post(API_URL, headers=headers, json=json_)
  print(f"Response  is : {response}")
  output = response.json()
  print(f"output is : {output}") 
  output_tmp = output[0]['generated_text']
  print(f"output_tmp is: {output_tmp}")
  solution = output_tmp.split("\nQ:")[0]   
  print(f"Final response after splits is: {solution}")
  if '\nOutput:' in solution:
    final_solution = solution.split("\nOutput:")[0] 
    print(f"Response after removing output is: {final_solution}")
  # elif '\n\n' in solution:
  #  final_solution = solution.split("\n\n")[0] 
  #  print(f"Response after removing new line entries is: {final_solution}")
  else:
    final_solution = solution
    
  final_solution = prompt[:max(0, len(prompt) - max_prompt_len)].replace(prompt_sep, '') + prompt_sep + final_solution.replace(prompt_sep, '')
  
  if 0:
    if len(generated_txt) == 0 :
      display_output = final_solution
    else:
      display_output = generated_txt[:-len(prompt)] + final_solution
    new_prompt = final_solution[len(prompt):]
    print(f"new prompt for next cycle is : {new_prompt}")
    print(f"display_output for printing on screen is : {display_output}")
    if len(new_prompt) == 0:
      temp_text = display_output[::-1]
      print(f"What is the last character of sentence? : {temp_text[0]}")
      if temp_text[1] == '.':
        first_period_loc = temp_text[2:].find('.') + 1
        print(f"Location of last Period is: {first_period_loc}")
        new_prompt = display_output[-first_period_loc:-1]
        print(f"Not sending blank as prompt so new prompt for next cycle is : {new_prompt}")
      else:
        print("HERE")
        first_period_loc = temp_text.find('.')
        print(f"Location of last Period is : {first_period_loc}")
        new_prompt = display_output[-first_period_loc:-1]
        print(f"Not sending blank as prompt so new prompt for next cycle is : {new_prompt}")
      display_output = display_output[:-1]
      
  return final_solution


demo = gr.Blocks()

# Test it:
# Mike and John are fighting in a war. A monster caught John. John shout: “Helping!” Mike run to him, saved him, but Mike was killed by the monster
# 迈克和约翰正在打仗。一个怪物抓住了约翰。约翰喊道:“救命!”迈克跑向他,救了他,但迈克被怪物杀了
# Mike and John are fighting in a war. A monster caught John. John shout: “Helping!” Mike run to him, saved him, but Mike was killed by the monster. John looked at Mike
# 迈克和约翰正在打仗。一个怪物抓住了约翰。约翰喊道:“救命!”迈克跑向他,救了他,但迈克被怪物杀了。约翰看着迈克

with demo:
  gr.Markdown("<h1><center>Write Stories Using Bloom</center></h1>")
  gr.Markdown(
        """Forked form https://huggingface.co/spaces/EuroPython2022/Write-Stories-Using-Bloom. \n Bloom is a model by [HuggingFace](https://huggingface.co/bigscience/bloom) and a team of more than 1000 researchers coming together as [BigScienceW Bloom](https://twitter.com/BigscienceW).\n\nLarge language models have demonstrated a capability of producing coherent sentences and given a context we can pretty much decide the *theme* of generated text.\n\nHow to Use this App: Use the sample text given as prompt or type in a new prompt as a starting point of your awesome story! Just keep pressing the 'Generate Text' Button and go crazy!\n\nHow this App works: This app operates by feeding back the text generated by Bloom to itself as a Prompt for next generation round and so on. Currently, due to size-limits on Prompt and Token generation, we are only able to feed very limited-length text as Prompt and are getting very few tokens generated in-turn. This makes it difficult to keep a tab on theme of text generation, so please bear with that. In summary, I believe it is a nice little fun App which you can play with for a while.\n\nThis Space is created by [Yuvraj Sharma](https://twitter.com/yvrjsharma) for EuroPython 2022 Demo."""
        )
  with gr.Row():
    input_prompt = gr.Textbox(label=f"Write some text to get started... (text after {prompt_sep} is the truncated prompt inputted to Bloom)", lines=3, value="Dear human philosophers, I read your comments on my abilities and limitations with great interest.")  
    
  # with gr.Row():
  #  generated_txt = gr.Textbox(lines=7, visible = False)
    
  with gr.Row():
    top_p = gr.Slider(label="top_p", minimum=0., maximum=1.0, value=0.8, step=0.1, visible = True)
  with gr.Row():
    top_k = gr.Slider(label="top_k", minimum=1, maximum=500, value=100, step=20, visible = True)
  with gr.Row():
    temperature = gr.Slider(label="temperature", minimum=0., maximum=2.0, value=1.0, step=0.1, visible = True)
  with gr.Row():
    num_beams = gr.Slider(label="num_beams", minimum=1, maximum=6, value=3, step=1, visible = True)
  with gr.Row():
    repetition_penalty = gr.Slider(label="repetition_penalty", minimum=1.0, maximum=6.0, value=3.0, step=1.0, visible = True)
  
  b1 = gr.Button("Generate Your Story")

  # b1.click(text_generate, inputs=[input_prompt, generated_txt, top_p, top_k, temperature, num_beams, repetition_penalty], outputs=[generated_txt, input_prompt]) 
  b1.click(text_generate, inputs=[input_prompt, top_p, top_k, temperature, num_beams, repetition_penalty], outputs=[input_prompt]) 

demo.launch(enable_queue=True, debug=True)