File size: 2,799 Bytes
47fcff2
79cade0
e630485
18d6e67
771f83c
2cfcbca
771f83c
 
79cade0
0c5007d
e630485
79cade0
246199f
 
0cce7a0
79cade0
 
 
 
 
 
18d6e67
e630485
246199f
 
 
79cade0
d4c8596
 
 
e630485
 
 
 
2cfcbca
e630485
d4c8596
e630485
 
 
 
 
2cfcbca
246199f
18d6e67
e630485
3ba965f
18d6e67
a604d22
b94dfba
 
 
 
 
246199f
a604d22
 
47fcff2
 
3ba965f
 
 
 
 
 
 
 
 
 
b94dfba
3ba965f
 
246199f
 
3ba965f
 
47fcff2
 
e630485
47fcff2
61abdf6
47fcff2
96700cc
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
import gradio as gr
import os
import openai
import tenacity
import nest_asyncio
import asyncio

nest_asyncio.apply()

ACCESS_TOKEN = os.getenv("HF_TOKEN")
openai.api_key = ACCESS_TOKEN

# Retry logic with tenacity for handling API rate limits
@tenacity.retry(wait=tenacity.wait_exponential(multiplier=1, min=4, max=10), stop=tenacity.stop_after_attempt(5))
async def respond(
    message,
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    try:
        print("Making request to OpenAI API...")
        # Only use the system message and the current message for the response
        messages = [{"role": "system", "content": system_message},
                    {"role": "user", "content": message}]

        response = await openai.Completion.create(
            model="text-davinci-003",
            prompt=system_message + "\n" + message,
            max_tokens=max_tokens,
            temperature=temperature,
            top_p=top_p,
        )

        print("Received response from OpenAI API...")
        response_text = response.choices[0].text
        print("Response text:", response_text)
        return response_text

    except openai.error.APIError as e:
        print("APIError:", e)
        return "Error occurred. Please try again."

    except Exception as e:
        print("Exception:", e)
        return "Error occurred. Please try again."


# Gradio function to handle user input and response generation without history
def generate_response(message, system_message, max_tokens, temperature, top_p):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    response = loop.run_until_complete(respond(message, system_message, max_tokens, temperature, top_p))
    return response


def launch_app():
    try:
        demo = gr.Blocks()
        with demo:
            gr.Markdown("# Chatbot")
            message = gr.Textbox(label="Message")
            system_message = gr.Textbox(label="System message")
            max_tokens = gr.Slider(minimum=1, maximum=2048, value=2048, step=1, label="Max new tokens")
            temperature = gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature")
            top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-P")
            response = gr.Text(label="Response")

            # Use the generate_response function without history
            gr.Button("Generate Response").click(
                generate_response,
                inputs=[message, system_message, max_tokens, temperature, top_p],
                outputs=[response],
                show_progress=False,
            )
        demo.launch(show_error=True)
    except KeyError as e:
        print("Error:", e)
        print("Please try again.")

if __name__ == "__main__":
    launch_app()