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)