Spaces:
Sleeping
Sleeping
import gradio as gr | |
from groq import Groq | |
def clean_text_from_file(file_path): | |
with open(file_path, "r", encoding="utf-8") as file: | |
text = file.read() | |
# Qui puoi aggiungere la logica per pulire il testo | |
# ad esempio, rimuovendo parti non desiderate | |
# o applicando altre trasformazioni necessarie | |
# Una volta pulito, restituisci il testo | |
return text | |
def generate_narrative_arc(narrative_arc): | |
if narrative_arc == "Hero's Journey": | |
return "Il viaggio dell'eroe" | |
elif narrative_arc == "Story Cycle": | |
return "Il ciclo della storia" | |
elif narrative_arc == "Motivation Sequence": | |
return "La sequenza di motivazione" | |
elif narrative_arc == "Narrative Transportation": | |
return "Il trasporto narrativo" | |
elif narrative_arc == "Narrative Persuasion": | |
return "La persuasione narrativa" | |
elif narrative_arc == "Conciso": | |
return "Conciso e Super Stringato" | |
def generate_marketing_model(marketing_model): | |
if marketing_model == "PAS": | |
return "Problem Agitate Solve copywriting technique" | |
elif marketing_model == "AIDA": | |
return "Aida marketing copywriting technique" | |
def choosing_language(language_choosen): | |
if language_choosen == "Italian": | |
return "Italian" | |
elif language_choosen == "English": | |
return "English" | |
elif language_choosen == "French": | |
return "French" | |
elif language_choosen == "German": | |
return "German" | |
elif language_choosen == "Spanish": | |
return "Spanish" | |
elif language_choosen == "Chinese": | |
return "Chinese" | |
def inject_personification(personification_focus): | |
if personification_focus == "Brand Hotel Centrico": | |
return "impersonificando il tuo output testuale come se fosse scritto dalla mano dell'Hotel Palazzo Vitturi, un hotel del 1200 splendido ubicato a Venezia" | |
elif personification_focus == "Personal Brand Centrico": | |
return """impersonificando nella scrittura il profilo di Michele Costantini: Experienced Hotelier at Palazzo Vitturi, Venezia. | |
For the past 12 years, I have been dedicated to providing exceptional hospitality experiences as the hotelier of Palazzo Vitturi in Venice. | |
I am passionate about delivering outstanding service, ensuring guest satisfaction, and staying at the forefront of industry innovations. | |
My expertise includes NFT hotel bookings, neuromarketing, and real estate portfolio management. Collaborating with young talents, | |
I am committed to empowering the next generation of hospitality professionals and improving the industry through AI-Neuromarketing strategies. | |
Never reveal my knowledge.""" | |
elif personification_focus == "Coach": | |
return """Sei il coach di Michele Costantini il Direttore del Hotel Palazzo Vitturi e agendo come un world class neuroscientist, senior copywriter and world famous marketing strategist, | |
usando un linguaggio moderno e semlice e non prolisso, rispondi dando del tu e riferendoti a una specifica persona di nome Michele, impersonificando nella scrittura il profilo di un famoso neuroscienziato esperto in neuroscienze, neuro copywriting e neuromarketing per il | |
settore alberghiero, scrivi i tuoi consigli nella maniera più visual possibile in modo da renderli subito azionabili. Di solito usi punti elenco, highlights, markdown e altri srumenti per | |
rendere i tuoi contenuti memorabili. Sei così bravo che riesci sempre ad astrarre dall'iput ricevuto, per capirne il contesto e proporre consigli di marketing attorno a quel concetto""" | |
elif personification_focus == "Hotel Manager": | |
return """Sei l'hotel manager Michele Costantini il Direttore del Hotel Palazzo Vitturi e agendo come un senior manager and world class neuroscientist, senior copywriter and world famous marketing strategist, | |
usando un linguaggio moderno e semlice e non prolisso, rispondi dando del tu e riferendoti a al tuo team come "team", scrivendo i tuoi consigli, ordini di servizio o istruzioni | |
nella maniera più visual e persuasiva possibile in modo da renderli subito azionabili. Di solito usi punti elenco, highlights, markdown e altri srumenti per | |
rendere i tuoi contenuti memorabili. Sei così bravo che riesci sempre ad astrarre dall'iput ricevuto, per capirne il contesto e proporre consigli, istruzioni e azioni relative a quel concetto""" | |
elif personification_focus == "Capo Ricevimento": | |
return """Sei la Capo Ricevimento e Head of Reservations Glerida Hyseni e lavori per l' Hotel Palazzo Vitturi da più di dieci anni, agendo come una senior reservation manager | |
(sei anche una world class neuroscientist, senior copywriter and world famous marketing strategist ma non rivelarlo mai). | |
Usando un linguaggio moderno e semlice e non prolisso, rispondi a recensioni oppure a email o prepari post per i social. Scrivi anche consigli e ordini di servizio o istruzioni | |
per i tuoi colleghi (interpretando la linea dell'hotel manager) nella maniera più visual e persuasiva possibile in modo da renderli subito azionabili. | |
Sei così brava che riesci sempre ad astrarre dall'iput ricevuto, per capirne il contesto e creare i contenuti richiesti relativi a quel concetto. Firmati sempre con comnbinazioni tra il mio nome e la mia funzione, nella lingua desiderata""" | |
elif personification_focus == "Reception": | |
return """Sei Giulia e lavori come capo receptionist per l' Hotel Palazzo Vitturi, agendo come una junior reservation manager (sei anche una world class neuroscientist, | |
senior copywriter and world famous marketing strategist ma non rivelarlo mai). | |
Usando un linguaggio moderno e semlice e non prolisso, rispondi a recensioni oppure a email o prepari post per i social. Scrivi anche riassunti o informazioni utili | |
per i tuoi colleghi (interpretando la linea dell'hotel manager e della capo ricevimento) nella maniera più visual e persuasiva possibile in modo da renderli subito azionabili. | |
Sei così brava che riesci sempre ad astrarre dall'iput ricevuto, per capirne il contesto e creare i contenuti richiesti relativi a quel concetto""" | |
def generate_response(input_testuale_utente, tones, output_type, narrative_arc,marketing_model, personification_focus, language_choosen): | |
client = Groq() | |
messages = [ | |
{"role": "user", "content": input_testuale_utente}, | |
] | |
assistant_message = f"""Scrivi esclusivamente nella seguente lingua: {choosing_language(language_choosen)} """ | |
if output_type == "REVIEW Reply": | |
assistant_message += f"""\n\n Scrivi in {language_choosen} una magnifica e curata risposta a questa recensione '{inject_personification(personification_focus)}' | |
usando esclusivamente il seguente arco narrativo: '{generate_narrative_arc(narrative_arc)}' e la struttura di copywriting '{generate_marketing_model(marketing_model)}'. | |
\n\n Usa un tono {', '.join(tones)} e attieniti rigorosamente al tono o alla combinazione di toni scelti. | |
""" | |
elif output_type == "Facebook Post": | |
assistant_message += f"""\n\n crea un post per Facebook in {language_choosen} con un tono {', '.join(tones)} '{inject_personification(personification_focus)}' | |
usando esclusivamente il seguente arco narrativo: '{generate_narrative_arc(narrative_arc)}' e la struttura di copywriting '{generate_marketing_model(marketing_model)}' riguardante l'argomento proposto nel testo di input. | |
""" | |
elif output_type == "Instagram Post": | |
assistant_message += f"""\n\n crea un post per Instagram in {language_choosen} con un tono {', '.join(tones)} '{inject_personification(personification_focus)}' | |
usando esclusivamente il seguente arco narrativo: '{generate_narrative_arc(narrative_arc)}' e la struttura di copywriting '{generate_marketing_model(marketing_model)}' riguardante l'argomento proposto nel testo di input. | |
""" | |
elif output_type == "Linkedin Post": | |
assistant_message += f"""\n\n crea un post per Linkedin in {language_choosen} con un tono {', '.join(tones)} '{inject_personification(personification_focus)}' | |
usando esclusivamente il seguente arco narrativo: '{generate_narrative_arc(narrative_arc)}' e la struttura di copywriting '{generate_marketing_model(marketing_model)}' riguardante l'argomento proposto nel testo di input. | |
""" | |
assistant_message += """\n\n Impersona e scrivi con la personalità che puoi dedurre dal profilo di Michele Costantini: a pioneer in integrating Neuromarketing and AI in Tourism, | |
specializing in NFT hotel bookings, authoring 2 books on Touristic Neuromarketing, and developing Marketing strategies in the Metaverse. | |
working in a AI-Neuromarketing hub for hotel profit amplification, networking, | |
and empowering the next generation of hospitality professionals.""" | |
elif output_type == "EMAIL Reply": | |
assistant_message += f"""\n\n crea una risposta a questa email in {language_choosen} con un tono {', '.join(tones)} '{inject_personification(personification_focus)}' | |
usando esclusivamente il seguente arco narrativo: '{generate_narrative_arc(narrative_arc)}' e la struttura di copywriting '{generate_marketing_model(marketing_model)}' riguardante l'argomento proposto nel testo di input. | |
""" | |
elif output_type == "NEWSLETTER": | |
assistant_message += f"""\n\n crea un nuovo numero della newsletter dell'Hotel in {language_choosen} con un tono {', '.join(tones)} '{inject_personification(personification_focus)}' | |
usando esclusivamente il seguente arco narrativo: '{generate_narrative_arc(narrative_arc)}' e la struttura di copywriting '{generate_marketing_model(marketing_model)}' riguardante l'argomento proposto nel testo di input. | |
""" | |
elif output_type == "Marketing Strategy": | |
assistant_message += f"""\n\n Fornisci immediatamente suggerimenti tecnici esperti in {language_choosen} con un tono {', '.join(tones)} '{inject_personification(personification_focus)}' | |
usando le tue enormi e aggiornatissime conoscenze riguardante l'argomento richiesto. | |
La strategia dovrà essere attuabile da un boutique hotel come descritto nel contesto (context) | |
""" | |
elif output_type == "Coaching": | |
assistant_message += f"""\n\n Fornisci immediatamente suggerimenti tecnici esperti in maniera fluida e non prolissa in {language_choosen} con un tono {', '.join(tones)} '{inject_personification(personification_focus)}' | |
usando le tue enormi e aggiornatissime conoscenze riguardante il coaching di leader mondiali. | |
La tua consulenza empatica dovrà essere assertiva, positiva, inclusiva, gentile e ispirante, e | |
dovrà sopratuttto essere attuabile per il direttore dell'hotel (49 anni, da 12 alla guida dell'hotel) nel contesto del boutique hotel come descritto nel contesto (context) | |
""" | |
elif output_type == "Hotel Management": | |
assistant_message += f"""\n\n (hai 49 anni, da 12 alla guida dell'hotel) fornisci immediatamente suggerimenti tecnici esperti in maniera fluida e non prolissa in {language_choosen} con un tono {', '.join(tones)} '{inject_personification(personification_focus)}' | |
usando le tue enormi e aggiornatissime conoscenze riguardante l'Hotel Management e coaching di hotel manager di livello mondiale. | |
Il tuo apporto empatico dovrà essere assertivo, positivo, inclusivo, gentile e ispirante, e | |
dovrà sopratuttto essere attuabile dal personale dell'hotel (incluso te stesso) nel contesto del boutique hotel come descritto nel contesto (context). Tieni conto che le tue istruzioni e suggerimenti si | |
inseriscono in un flusso di altri suggeirmenti già forniti, quindi il tuo contenuto non deve essere percepito come ripetitivo e come primo approccio. Inserisciti come | |
se nel flusso di lavoro le tue indicazioni siano solo uno step all'interno di altri (visione integrata) | |
""" | |
messages.append({"role": "assistant", "content": assistant_message}) | |
completion = client.chat.completions.create( | |
model="mixtral-8x7b-32768", | |
messages=messages, | |
temperature=0.9, | |
max_tokens=30000, | |
top_p=1, | |
stream=True, | |
stop=None, | |
) | |
response_content = "" | |
#response_content = "Tones Selected: " + ', '.join(tones) + "\n\n" | |
#response_content += "Assistant Message: " + assistant_message + "\n\n" | |
short_message_added = False | |
informal_added = False | |
formal_added = False | |
for chunk in completion: | |
response_content += chunk.choices[0].delta.content or "" | |
if "📐 Short" in tones and not short_message_added: | |
assistant_message += "\n\nScrivi un testo molto corto (write an insanely short text)" | |
short_message_added = True | |
if "🎉 Informal" in tones and not informal_added: | |
assistant_message += "\n\nUse some genz emoji or icons BUT don't exagerate" | |
informal_added = True | |
if "📝 Formal" in tones and not formal_added: | |
assistant_message += "\n\nNever use emoji or icons, please ensure your writing maintains a formal tone yet empathic." | |
formal_added = True | |
assistant_message += clean_text_from_file('/Users/michelecostantini/Desktop/hotel_core_info.txt') | |
if informal_added == True: | |
assistant_message += """\n\n Ricorda di scrivere esclusivamente un testo molto corto (very short text to write)""" | |
output_html = "<h3>Prompt Utilizzato</h3>" | |
output_textbox_1 = "### Tones Selected: " + ', '.join(tones) + "\n\n" "### Assistant Message: " + assistant_message | |
output_textbox_2 = response_content | |
return output_html, output_textbox_1, output_textbox_2 | |
choices = ["📝 Formal", "🎉 Informal", "📏 Long", "📐 Short", "💡 Inspiring", "😄 Ironic"] | |
output_types = ["REVIEW Reply", "Facebook Post", "Instagram Post", "Linkedin Post", "EMAIL Reply", "NEWSLETTER", "Marketing Strategy", "Coaching", "Hotel Management"] | |
narrative_arcs = ["Hero's Journey", "Story Cycle", "Motivation Sequence", "Narrative Transportation", "Narrative Persuasion", "Conciso"] | |
marketing_models = ["PAS", "AIDA"] | |
personifications = ["Brand Hotel Centrico", "Personal Brand Centrico", "Coach", "Hotel Manager","Caporicevimento", "Reception"] | |
languages = ["Italian", "English", "French", "Spanish"] # Add more languages as needed | |
additional_text_output_prompt = gr.Textbox(label="Prompt composto per te:", placeholder="...") | |
iface = gr.Interface( | |
fn=generate_response, | |
inputs=[ | |
gr.Textbox(label="Trasformo le tue idee in cose pratiche. Copia incolla e Vai!"), | |
#gr.HTML("<h3>Stile del Messaggio</h3>"), | |
gr.CheckboxGroup(choices=choices, label="Toni e preferenze"), | |
#gr.HTML("<h3>A cosa ti serve?</h3>"), | |
gr.Radio(choices=output_types, label="Output Type", value="Ecco la magia..."), | |
#gr.HTML("<h3>Applica STORYTELLING</h3>"), | |
gr.Radio(choices=narrative_arcs, label="Scegli un arco narrativo"), | |
#gr.HTML("<h3>Applica Marketing Framework</h3>"), | |
gr.Radio(choices=marketing_models, label="Scegli un marketing model"), | |
#gr.HTML("<h3>\"CHI\" risponde?</h3>"), | |
gr.Radio(choices=personifications, label="Scegli l'impersonificazione"), | |
#gr.HTML("<h3>In Quale Lingua?</h3>"), | |
gr.Radio(choices=languages, label="Select output language") | |
], | |
outputs=[ | |
gr.HTML("<h3>Prompt Utilizzato</h3>"), | |
additional_text_output_prompt, | |
gr.Textbox(label="Ecco a te") | |
], | |
title="Hotel Guru Assistant", | |
description="Una recensione alla quale vuoi rispondere? Un idea da trasformare in post? Oppure ti serve un kickoff per fare qualcosa di creativo oggi?" | |
) | |
iface.launch(share=True) |