MarketMate / app.py
amir22010's picture
removed audio
8d2307e
import gradio as gr
from llama_cpp import Llama
import os
from groq import Groq
import numpy as np
import wave
import uuid
from GoogleTTS import GoogleTTS
os.environ["TOKENIZERS_PARALLELISM"] = "false"
#tts
#import torchaudio
#from speechbrain.inference.TTS import FastSpeech2
# from speechbrain.inference.TTS import Tacotron2
# from speechbrain.inference.vocoders import HIFIGAN
#fastspeech2 = FastSpeech2.from_hparams(source="speechbrain/tts-fastspeech2-ljspeech", savedir="pretrained_models/tts-fastspeech2-ljspeech")
# tacotron2 = Tacotron2.from_hparams(source="speechbrain/tts-tacotron2-ljspeech", savedir="tmpdir_tts")
# hifi_gan = HIFIGAN.from_hparams(source="speechbrain/tts-hifigan-ljspeech", savedir="pretrained_models/tts-hifigan-ljspeech")
#google tts
tts = GoogleTTS()
def text_to_speech(text):
# mel_output, mel_length, alignment = tacotron2.encode_text(text)
# Running Vocoder (spectrogram-to-waveform)
# waveforms = hifi_gan.decode_batch(mel_output)
# Save the waverform
outfile = f"{os.path.join(os.getcwd(), str(uuid.uuid4()))}.wav"
# torchaudio.save(outfile, waveforms.squeeze(1), 22050)
if len(text) > 5000:
text_str = text[0:4999]
else:
text_str = text
ret = tts.tts(text_str, outfile)
return outfile
def combine_audio_files(audio_files):
data= []
outfile = "sounds.wav"
for infile in audio_files:
w = wave.open(infile, 'rb')
data.append([w.getparams(), w.readframes(w.getnframes())] )
w.close()
#os.remove(infile) # Remove temporary files
output = wave.open(outfile, 'wb')
output.setparams(data[0][0])
for i in range(len(data)):
output.writeframes(data[i][1])
output.close()
return outfile
client = Groq(
api_key=os.getenv("GROQ_API_KEY"),
)
llm = Llama.from_pretrained(
repo_id="amir22010/fine_tuned_product_marketing_email_gemma_2_9b_q4_k_m", #custom fine tuned model
filename="unsloth.Q4_K_M.gguf", #model file name
cache_dir=os.path.abspath(os.getcwd()),
n_ctx=2048,
n_batch=126,
verbose=False
)
#marketing prompt
marketing_email_prompt = """Below is a product and description, please write a marketing email for this product.
### Product:
{}
### Description:
{}
### Marketing Email:
{}"""
async def greet(product,description):
user_reques = marketing_email_prompt.format(
product, # product
description, # description
"", # output - leave this blank for generation!
)
#llama guard
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": product+"\n"+description
}
],
model="llama-guard-3-8b",
)
warning_message = chat_completion.choices[0].message.content
if warning_message != 'safe':
yield warning_message
else:
output = llm.create_chat_completion(
messages=[
{"role":"system","content": "Your go-to Email Marketing Guru - I'm here to help you craft short and concise compelling campaigns, boost conversions, and take your business to the next level."},
{"role": "user", "content": user_reques},
],
max_tokens=2048,
temperature=0.7,
stream=True
)
partial_message = ""
audio_list = []
for chunk in output:
print(chunk)
delta = chunk['choices'][0]['delta']
if 'content' in delta:
partial_message = partial_message + delta.get('content', '')
yield partial_message
#
demo = gr.Interface(fn=greet, inputs=["text","text"], outputs="text")
demo.launch()