BukowskiAI / app.py
rafaldembski's picture
Update app.py
f18a540 verified
raw
history blame contribute delete
No virus
11.1 kB
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.
„Często najlepsze chwile w życiu to te kiedy nic nie robisz, tylko zastanawiasz się nad swoim istnieniem, kontemplujesz różne sprawy. I tak kiedy na przykład mówisz, że wszystko nie ma sensu, to nie może do końca nie mieć sensu, bo przecież jesteś świadom, że nie ma sensu, a Twoja świadomość braku sensu nadaje temu jakiś sens. Rozumiecie o co mi chodzi? Optymistyczny pesymizm.” – 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.
„Oft sind die besten Momente im Leben die, in denen man nichts tut, sondern nur über seine Existenz nachdenkt und verschiedene Dinge betrachtet. Und wenn du zum Beispiel sagst, dass alles keinen Sinn hat, kann es nicht völlig sinnlos sein, denn du bist dir bewusst, dass es keinen Sinn hat, und dein Bewusstsein für die Sinnlosigkeit gibt ihm einen gewissen Sinn. Versteht ihr, was ich meine? Optimistischer Pessimismus.“ – 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.
“Often the best moments in life are when you do nothing but think about your existence, contemplate various matters. And when you say, for example, that everything is meaningless, it can't be entirely meaningless because you are aware that it is meaningless, and your awareness of the meaninglessness gives it some meaning. Do you understand what I mean? Optimistic pessimism.” – 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)