File size: 4,486 Bytes
f20c21c
 
 
 
4151e0b
56f6b98
f20c21c
0c5b5d8
 
 
 
 
 
56f6b98
 
f20c21c
 
0c5b5d8
 
 
 
 
 
 
 
 
 
 
 
4151e0b
 
 
 
 
 
 
 
 
 
 
0c5b5d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4151e0b
 
f20c21c
4151e0b
f20c21c
 
4151e0b
 
f20c21c
4151e0b
f20c21c
4151e0b
0c5b5d8
 
 
4151e0b
0c5b5d8
 
4151e0b
 
0c5b5d8
4151e0b
0c5b5d8
 
 
 
678bb37
0c5b5d8
f20c21c
0c5b5d8
f20c21c
678bb37
 
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
import gradio as gr
import os
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, AIMessage
import utils.helper as hp
# from dotenv import load_dotenv

if "OPENAI_API_KEY" in os.environ and os.environ["OPENAI_API_KEY"] != "":
    openai_key = os.getenv("OPENAI_API_KEY")




# load_dotenv("E:/Development/Python/scripts/keys.env")



with gr.Blocks() as demo:
    if "openai_key" not in locals():
        openai_key = gr.Text(label="OpenAI Key", placeholder="Paste your OpenAI API Key here")
    else:
        openai_key = gr.Text(label="OpenAI Key", placeholder=openai_key)
        openai_key.visible = 0
    with gr.Row():
        name1 = gr.Text(label="Character 1", name="name1")
        name2 = gr.Text(label="Character 2", name="name2")
        iterations = gr.Number(  label="Iterations",  name="iterations")
    btn_run = gr.Button("Run")
    output = gr.outputs.HTML( )
    kofi_html = gr.HTML("""
<div>
 <p style="text-align: center;">
    </script>
    <a href="https://ko-fi.com/S6S1LV2XL" target="_blank"><img height="36" style="border: 0px; height: 36px; display: block; margin: 0 auto;" src="https://storage.ko-fi.com/cdn/kofi5.png?v=3" border="0" alt="Buy Me a Coffee at ko-fi.com" /></a>
    </p>
</div>

""")
    # 
    components = [None, None, kofi_html]
    def format_chat(chat_history):
            chat_html = "<div style='padding: 10px; border: 1px solid #ccc;'>"
            for message in chat_history:
                chat_html += "<p style='color:{}; '><strong>{}</strong>: {}</p>".format(message["color"], message["sender"], message["content"])
            chat_html += "</div>"
            return chat_html

    def color_chg(name):
        background_color = (11, 15, 25)
        background_brightness = sum(background_color) / len(background_color)

        value = sum(ord(char) for char in name)
        red = (value % 128) + 128
        green = (value // 128 % 128) + 128
        blue = (value // 16384 % 128) + 128

    #    Calculate the contrast ratio between the background and the generated color
        brightness = (red + green + blue) / 3
        contrast_ratio = max(brightness, background_brightness) / min(brightness, background_brightness)

    # Adjust the brightness of the generated color if the contrast ratio is too low
        if contrast_ratio < 4.5:
        # Increase the brightness by finding the ratio needed to achieve the desired contrast ratio
            brightness_ratio = 4.5 / contrast_ratio
            red = min(int(red * brightness_ratio), 255)
            green = min(int(green * brightness_ratio), 255)
            blue = min(int(blue * brightness_ratio), 255)

        color_hex = "#{:02x}{:02x}{:02x}".format(red, green, blue)
        return color_hex

    def initialize(name1, name2, iterations, openai_key):
        chat1 = ChatOpenAI(temperature=0.9, openai_api_key=openai_key)
        chat2 = ChatOpenAI(temperature=0.9, openai_api_key=openai_key)
        welcome_msg = hp.generate_welcome_message(name1, name2, openai_key)
        MessageStack1 = [SystemMessage(content=hp.generate_system_message(name1, openai_key)),
                 AIMessage(content = "ACK"),
                 HumanMessage(content=welcome_msg)]


        MessageStack2 = [SystemMessage(content=hp.generate_system_message(name2, openai_key)),
                 AIMessage(content = "ACK")]

        MsgStack = [ name2+": " + welcome_msg]

        chat_history = [{"sender": name2, "content": welcome_msg, "color" : color_chg(name2)}]
        print( iterations)

        for i in range(int(iterations)):
            response1 = hp.filtered_response(chat1,MessageStack1)
            print(name1+": " + response1.content)
            MsgStack.append( name1+": "+response1.content)
            MessageStack1.append(AIMessage(content =response1.content))
            MessageStack2.append(HumanMessage(content =response1.content))

            response2 = hp.filtered_response(chat2,MessageStack2)
            print(name2+": "+response2.content)
            MsgStack.append( name2+": "+response2.content)
            chat_history.append({"sender": name1, "content": response1.content, "color" : color_chg(name1) } )
            chat_history.append({"sender": name2, "content": response2.content, "color" : color_chg(name2) } )
      
        return format_chat(chat_history)

    btn_run.click(fn=initialize, inputs=[name1, name2, iterations, openai_key], outputs = output)


demo.launch( )