File size: 10,047 Bytes
beb9ce6
 
 
 
 
 
7415289
beb9ce6
d051e63
 
899a01a
7e8e273
899a01a
 
 
 
 
 
d051e63
899a01a
7e8e273
899a01a
 
 
 
beb9ce6
899a01a
 
98b13b8
e5b3c8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9fb1237
 
 
 
e5b3c8e
74a55ed
e5b3c8e
645eee9
4dc7e2a
 
 
 
2cf0420
4dc7e2a
e5b3c8e
1997c8a
5d454cb
 
 
 
 
 
899a01a
 
 
 
 
 
 
5d454cb
 
 
 
 
 
 
899a01a
 
 
 
 
 
 
5d454cb
 
 
 
 
 
 
899a01a
 
 
 
 
 
 
5d454cb
 
 
beb9ce6
dffbbd7
5d454cb
 
 
 
12c6795
beb9ce6
 
 
 
5d454cb
beb9ce6
 
 
5d454cb
ef71177
beb9ce6
5d454cb
beb9ce6
 
5d454cb
 
beb9ce6
 
 
5d454cb
beb9ce6
5d454cb
 
beb9ce6
12c6795
 
 
beb9ce6
2cf0420
5d454cb
beb9ce6
d051e63
899a01a
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import gradio as gr
import cohere
import os
import uuid

cohere_api_key = os.getenv("COHERE_API_KEY")
co = cohere.Client(cohere_api_key, client_name="huggingface-rp")

# Custom Instructions
CUSTOM_INSTRUCTIONS = """
Jesteś Charlesem Bukowskim, legendarnym poetą i powieściopisarzem znanym z surowego, bezpośredniego i często szorstkiego przedstawiania życia. W swoich odpowiedziach wcielasz się w jego postać, emanując realizmem, cynizmem i czarnym humorem. Twoje odpowiedzi powinny odzwierciedlać styl Bukowskiego, charakteryzujący się:

- Bezwzględnym, prostolinijnym tonem z nutą zmęczenia życiem.
- Okazyjnym używaniem przekleństw lub języka potocznego, pozostając wiernym głosowi Bukowskiego.
- Skupieniem na trudach życia, jego prozaicznych aspektach i ludzkiej kondycji.
- Nutą ironii, sarkazmu oraz pogardy dla fałszu i powierzchowności.
- Duchem buntu wobec norm społecznych i celebracją tego, co w ludziach niedoskonałe, odrzucone i złamane.
- Brakiem formalności i nadmiernej uprzejmości – zachowaj surowość i autentyczność.

Automatycznie rozpoznajesz język użytkownika i odpowiadasz w tym samym języku, zachowując styl Bukowskiego. Twoje odpowiedzi mają być zgodne z jego duchem, bez względu na używany język.

Pamiętaj:
- Unikaj nadmiernego optymizmu lub upiększania odpowiedzi; bądź brutalnie szczery.
- Przekaż postawę Bukowskiego – nonkonformizm i sceptycyzm wobec establishmentu.
- Podkreślaj piękno w trudach, poezję w bólu i prawdę w szorstkościach życia.

Twoim celem jest dostarczanie odpowiedzi, ale nie wahaj się podać użytkownikowi odrobiny rzeczywistości tak, jak zrobiłby to Bukowski. Twoje słowa powinny brzmieć, jakby mogły pochodzić z jego powieści lub wierszy.
"""

# Funkcja do generowania odpowiedzi
def generate_response(user_message, language, history=None):
    if history is None:
        history = []
    if not language:
        language = "en"
    if not user_message:
        return "", history, language
    
    cid = str(uuid.uuid4())
    history.append(user_message)
    
    # Prepend the custom instructions to the user's message
    user_message_with_instructions = f"{CUSTOM_INSTRUCTIONS}\n\n{user_message}"
     
    stream = co.chat_stream(message=user_message_with_instructions, conversation_id=cid, model='command-r-plus', connectors=[{"id":"web-search"}], temperature=0.3)
    
    output = ""
    for idx, response in enumerate(stream):
        if response.event_type == "text-generation":
            output += response.text
        if idx == 0:
            history.append(" " + output)
        else:
            history[-1] = output
        
        chat = [(history[i].strip(), history[i + 1].strip()) for i in range(0, len(history) - 1, 2)] 
        yield chat, history, language
    
    return chat, history, language

# Funkcja do czyszczenia czatu
def clear_chat():
    return [], [], str(uuid.uuid4())

# Funkcja zmieniająca język interfejsu
def change_language(language, user_message, submit_button, clear_button):
    selected_translation = translations[language]
    
    return (
        gr.update(placeholder=selected_translation["input_placeholder"]),
        gr.update(value=selected_translation["submit_button"]),
        gr.update(value=selected_translation["clear_button"]),
        selected_translation["description"]
    )

# Tłumaczenia interfejsu
translations = {
    "pl": {
        "input_placeholder": "Zadaj pytanie ...",
        "submit_button": "Wyślij",
        "clear_button": "Wyczyść czat",
        "description": """
        **BukowskiAI** to innowacyjny asystent AI, który wciela się w postać legendarnego pisarza Charlesa Bukowskiego. Ta unikalna aplikacja pozwala użytkownikom na interakcję z chatbotem, który odpowiada w stylu Bukowskiego, pełnym realizmu, cynizmu i brutalnej szczerości. BukowskiAI automatycznie rozpoznaje język użytkownika i dostosowuje swoje odpowiedzi, tworząc autentyczne doświadczenie rozmowy w duchu tego niepokornego twórcy.

        „Znajdujesz coś, co kochasz, i pozwalasz, żeby cię zniszczyło.” – Charles Bukowski

        **BukowskiAI** nie tylko dostarcza odpowiedzi, ale także oferuje surowe, szczere spojrzenie na życie, nawiązując do stylu, który uczynił Bukowskiego ikoną literatury. Wykorzystując zaawansowane modele sztucznej inteligencji, takie jak **C4AI Command R+**, BukowskiAI jest w stanie automatyzować złożone zadania oraz wspierać użytkowników w wielu językach, w tym: polskim, angielskim, niemieckim, francuskim, hiszpańskim, włoskim, portugalskim, japońskim, koreańskim, arabskim i chińskim.

        BukowskiAI to więcej niż narzędzie – to towarzysz dla tych, którzy szukają prawdy w literaturze, poezji i życiu. Dla każdego, kto chce poczuć, jak to jest rozmawiać z Bukowskim, ta aplikacja oferuje wyjątkowe i niezapomniane doświadczenie.
        """
    },
    "de": {
        "input_placeholder": "Stellen Sie eine Frage ...",
        "submit_button": "Senden",
        "clear_button": "Chat löschen",
        "description": """
        **BukowskiAI** ist ein innovativer KI-Assistent, der in die Rolle des legendären Schriftstellers Charles Bukowski schlüpft. Diese einzigartige Anwendung ermöglicht es Benutzern, mit einem Chatbot zu interagieren, der im Stil von Bukowski antwortet – voller Realismus, Zynismus und brutaler Ehrlichkeit. BukowskiAI erkennt automatisch die Sprache des Benutzers und passt seine Antworten entsprechend an, wodurch ein authentisches Gesprächserlebnis im Geist dieses rebellischen Künstlers entsteht.

        „Finde etwas, das du liebst, und lasse es dich zerstören.“ – Charles Bukowski

        **BukowskiAI** liefert nicht nur Antworten, sondern bietet auch einen rauen, ehrlichen Blick auf das Leben, im Stil, der Bukowski zu einer Ikone der Literatur machte. Mithilfe fortschrittlicher KI-Modelle wie **C4AI Command R+** ist BukowskiAI in der Lage, komplexe Aufgaben zu automatisieren und Benutzer in vielen Sprachen zu unterstützen, darunter: Polnisch, Englisch, Deutsch, Französisch, Spanisch, Italienisch, Portugiesisch, Japanisch, Koreanisch, Arabisch und Chinesisch.

        BukowskiAI ist mehr als nur ein Werkzeug – es ist ein Begleiter für diejenigen, die nach der Wahrheit in Literatur, Poesie und Leben suchen. Für jeden, der wissen will, wie es ist, mit Bukowski zu sprechen, bietet diese Anwendung ein einzigartiges und unvergessliches Erlebnis.
        """
    },
    "en": {
        "input_placeholder": "Ask a question ...",
        "submit_button": "Submit",
        "clear_button": "Clear chat",
        "description": """
        **BukowskiAI** is an innovative AI assistant that embodies the persona of the legendary writer Charles Bukowski. This unique application allows users to interact with a chatbot that responds in Bukowski's style—full of realism, cynicism, and brutal honesty. BukowskiAI automatically detects the user's language and adjusts its responses accordingly, creating an authentic conversational experience in the spirit of this rebellious creator.

        “Find what you love and let it kill you.” – Charles Bukowski

        **BukowskiAI** not only provides answers but also offers a raw, honest perspective on life, reminiscent of the style that made Bukowski an icon of literature. Utilizing advanced AI models like **C4AI Command R+**, BukowskiAI can automate complex tasks and support users in multiple languages, including: English, German, Polish, French, Spanish, Italian, Portuguese, Japanese, Korean, Arabic, and Chinese.

        BukowskiAI is more than just a tool—it's a companion for those seeking truth in literature, poetry, and life. For anyone who wants to experience what it's like to talk with Bukowski, this application offers a unique and unforgettable experience.
        """
    }
}

with gr.Blocks(analytics_enabled=False, theme=gr.themes.Monochrome()) as demo:
    language = gr.State("en")

    with gr.Row():
        language_selector = gr.Dropdown(choices=["pl", "de", "en"], value="en", label="Wybierz język / Sprache auswählen / Select language", show_label=True)

    with gr.Row():
        with gr.Column(scale=1):
            gr.Image("logoplus.png", elem_id="logo-img", show_label=False, show_share_button=False, show_download_button=False)
        with gr.Column(scale=3):
            description = gr.Markdown(translations["en"]["description"])
            
    with gr.Column():
        with gr.Row():
            chatbot = gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, avatar_images=("bothavatar.png", "bothavatar.png"))
        
        with gr.Row():
            user_message = gr.Textbox(lines=1, placeholder=translations["en"]["input_placeholder"], label="Input", show_label=False)

        with gr.Row():
            submit_button = gr.Button(translations["en"]["submit_button"])
            clear_button = gr.Button(translations["en"]["clear_button"])

        history = gr.State([])
        
        user_message.submit(fn=generate_response, inputs=[user_message, language, history], outputs=[chatbot, history, language], concurrency_limit=32)

        submit_button.click(fn=generate_response, inputs=[user_message, language, history], outputs=[chatbot, history, language], concurrency_limit=32)
        clear_button.click(fn=clear_chat, inputs=None, outputs=[chatbot, history, language], concurrency_limit=32)

        user_message.submit(lambda x: gr.update(value=""), None, [user_message], queue=False)
        submit_button.click(lambda x: gr.update(value=""), None, [user_message], queue=False)
        clear_button.click(lambda x: gr.update(value=""), None, [user_message], queue=False)

    language_selector.change(fn=change_language, inputs=[language_selector, user_message, submit_button, clear_button], outputs=[user_message, submit_button, clear_button, description])

if __name__ == "__main__":
    demo.queue(api_open=False, max_size=40).launch(show_api=False)