File size: 3,677 Bytes
9fed6cd
4f6e6aa
7ea5fab
aed3f20
66d3d20
abd2b7a
224fa84
092b591
3d14d30
 
aed3f20
494ef37
092b591
d5c8eb9
092b591
 
494ef37
d5c8eb9
092b591
 
 
 
 
78badb3
f0dd428
092b591
224fa84
092b591
224fa84
d3c7ce9
092b591
 
 
 
 
 
224fa84
f0dd428
 
98cb312
 
 
 
 
 
5f59609
98cb312
 
 
 
 
 
f0dd428
b07d203
 
 
9fed6cd
4f6e6aa
494ef37
 
7ea5fab
81c034d
 
4f6e6aa
 
9fed6cd
4f6e6aa
b745016
4f6e6aa
 
 
 
 
 
 
 
 
 
3d14d30
ed41d7d
 
 
 
 
fa61cdd
b07d203
 
 
 
c9bd416
b07d203
 
 
 
 
 
81c034d
ed41d7d
 
 
b745016
12d60b3
ed41d7d
b745016
ed41d7d
 
aed3f20
ed41d7d
f0dd428
ed41d7d
df0ca26
ed41d7d
 
f0dd428
4abf19b
8d2307e
0e30435
9fed6cd
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
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()