AWS-ANSWER-BOT commited on
Commit
37cfa3c
·
verified ·
1 Parent(s): 262ccd9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -83
app.py CHANGED
@@ -1,89 +1,20 @@
1
- import gradio as gr
2
- import os
3
- import sys
4
- import json
5
- import requests
6
- import random
7
-
8
- MODEL = "gpt-4.1-mini"
9
- API_URL = os.getenv("API_URL")
10
- DISABLED = os.getenv("DISABLED") == 'True'
11
- OPENAI_API_KEYS = os.getenv("OPENAI_API_KEYS").split(',')
12
- NUM_THREADS = int(os.getenv("NUM_THREADS", "1"))
13
-
14
- def exception_handler(exception_type, exception, traceback):
15
- print(f"{exception_type.__name__}: {exception}")
16
- sys.excepthook = exception_handler
17
- sys.tracebacklimit = 0
18
-
19
- def predict(inputs, top_p, temperature, chat_counter, chatbot, history, request: gr.Request):
20
- payload = {
21
- "model": MODEL,
22
- "messages": [{"role": "user", "content": inputs}],
23
- "temperature": temperature,
24
- "top_p": top_p,
25
- "n": 1,
26
- "stream": True,
27
- "presence_penalty": 0,
28
- "frequency_penalty": 0,
29
- }
30
- OPENAI_API_KEY = random.choice(OPENAI_API_KEYS)
31
-
32
- headers = {
33
- "Content-Type": "application/json",
34
- "Authorization": f"Bearer {OPENAI_API_KEY}",
35
- }
36
-
37
- if chat_counter != 0:
38
- messages = []
39
- for i, data in enumerate(history):
40
- role = "user" if i % 2 == 0 else "assistant"
41
- messages.append({"role": role, "content": data})
42
- messages.append({"role": "user", "content": inputs})
43
- payload["messages"] = messages
44
-
45
- chat_counter += 1
46
- history.append(inputs)
47
- partial_words = ""
48
- token_counter = 0
49
- counter = 0
50
-
51
- try:
52
- response = requests.post(API_URL, headers=headers, json=payload, stream=True)
53
- for chunk in response.iter_lines():
54
- if counter == 0:
55
- counter += 1
56
- continue
57
- if chunk:
58
- chunk_str = chunk.decode()
59
- chunk_json = json.loads(chunk_str[6:])
60
- delta = chunk_json['choices'][0]['delta']
61
- if "content" in delta:
62
- partial_words += delta["content"]
63
- if token_counter == 0:
64
- history.append(" " + partial_words)
65
- else:
66
- history[-1] = partial_words
67
- token_counter += 1
68
- yield [(history[i], history[i + 1]) for i in range(0, len(history) - 1, 2)], history, chat_counter, gr.update(interactive=False), gr.update(interactive=False)
69
- except Exception as e:
70
- print(f"Error: {e}")
71
-
72
- yield [(history[i], history[i + 1]) for i in range(0, len(history) - 1, 2)], history, chat_counter, gr.update(interactive=True), gr.update(interactive=True)
73
-
74
- def reset_textbox():
75
- return gr.update(value='', interactive=False), gr.update(interactive=False)
76
-
77
- title = """<h1 align="center">GPT-4.1 mini: Research Preview (Short-Term Availability)</h1>"""
78
- if DISABLED:
79
- title = """<h1 align="center" style="color:red">This app has reached OpenAI's usage limit. Please check back tomorrow.</h1>"""
80
- description = """Language models can be conditioned to act like dialogue agents through a conversational prompt."""
81
 
82
  theme = gr.themes.Default(primary_hue="green")
83
 
84
- with gr.Blocks(css="#col_container { margin-left: auto; margin-right: auto;} #chatbot {height: 520px; overflow: auto;}", theme=theme) as demo:
 
 
85
  gr.HTML(title)
86
  gr.HTML("""<h3 align="center">This app provides you full access to GPT-4.1 mini (1M token limit). You don't need any OPENAI API key.</h3>""")
 
 
 
 
 
 
 
87
 
88
  with gr.Column(elem_id="col_container", visible=not DISABLED) as main_block:
89
  chatbot = gr.Chatbot(elem_id='chatbot')
@@ -94,14 +25,17 @@ with gr.Blocks(css="#col_container { margin-left: auto; margin-right: auto;} #ch
94
  b1 = gr.Button(visible=not DISABLED)
95
  with gr.Column(scale=3):
96
  server_status_code = gr.Textbox(label="Status code from OpenAI server")
 
97
  with gr.Accordion("Parameters", open=False):
98
  top_p = gr.Slider(minimum=0, maximum=1.0, value=1.0, step=0.05, interactive=True, label="Top-p (nucleus sampling)")
99
  temperature = gr.Slider(minimum=0, maximum=5.0, value=1.0, step=0.1, interactive=True, label="Temperature")
100
  chat_counter = gr.Number(value=0, visible=False, precision=0)
101
 
102
  inputs.submit(reset_textbox, [], [inputs, b1], queue=False)
103
- inputs.submit(predict, [inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter, inputs, b1])
 
104
  b1.click(reset_textbox, [], [inputs, b1], queue=False)
105
- b1.click(predict, [inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter, inputs, b1])
 
106
 
107
  demo.queue(max_size=10, default_concurrency_limit=NUM_THREADS, api_open=False).launch(share=False)
 
1
+ In this app, you can explore the outputs of a gpt-4 turbo LLM.
2
+ """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
  theme = gr.themes.Default(primary_hue="green")
5
 
6
+ with gr.Blocks(css="""#col_container { margin-left: auto; margin-right: auto;}
7
+ #chatbot {height: 520px; overflow: auto;}""",
8
+ theme=theme) as demo:
9
  gr.HTML(title)
10
  gr.HTML("""<h3 align="center">This app provides you full access to GPT-4.1 mini (1M token limit). You don't need any OPENAI API key.</h3>""")
11
+ gr.HTML("""
12
+ <div style="padding: 12px; margin-bottom: 16px; border-radius: 6px; background-color: #e6f4ea; text-align: center;">
13
+ 🚀 <b>Try our new ChatAnnotator</b> powered by Cohere's <b>Command-A</b> model!
14
+ It offers a much-improved interface allowing you to <b>highlight and annotate specific errors</b> directly within chatbot responses, and even prompt immediate corrections.
15
+ <a href="https://chatannotator.com" target="_blank">Click here to check it out!</a>
16
+ </div>
17
+ """)
18
 
19
  with gr.Column(elem_id="col_container", visible=not DISABLED) as main_block:
20
  chatbot = gr.Chatbot(elem_id='chatbot')
 
25
  b1 = gr.Button(visible=not DISABLED)
26
  with gr.Column(scale=3):
27
  server_status_code = gr.Textbox(label="Status code from OpenAI server")
28
+
29
  with gr.Accordion("Parameters", open=False):
30
  top_p = gr.Slider(minimum=0, maximum=1.0, value=1.0, step=0.05, interactive=True, label="Top-p (nucleus sampling)")
31
  temperature = gr.Slider(minimum=0, maximum=5.0, value=1.0, step=0.1, interactive=True, label="Temperature")
32
  chat_counter = gr.Number(value=0, visible=False, precision=0)
33
 
34
  inputs.submit(reset_textbox, [], [inputs, b1], queue=False)
35
+ inputs.submit(predict, [inputs, top_p, temperature, chat_counter, chatbot, state],
36
+ [chatbot, state, chat_counter, server_status_code, inputs, b1])
37
  b1.click(reset_textbox, [], [inputs, b1], queue=False)
38
+ b1.click(predict, [inputs, top_p, temperature, chat_counter, chatbot, state],
39
+ [chatbot, state, chat_counter, server_status_code, inputs, b1])
40
 
41
  demo.queue(max_size=10, default_concurrency_limit=NUM_THREADS, api_open=False).launch(share=False)