Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
from groq import Groq | |
import datetime as DT | |
import pytz | |
from dotenv import load_dotenv | |
load_dotenv() | |
client = Groq(api_key=os.getenv('GROQ_API_KEY')) | |
SYSTEM_PROMPT = """ | |
You complete every sentence in a very interesting way. Use emojis wherever possible. | |
Preserve everything in the user prompt and append to it to complete the ongoing sentence. | |
Don't add additional sentences. | |
eg: | |
Q. What's my | |
A. What's my name? 🤔 | |
Q. I love to eat | |
A. I love to eat eggs for breakfast! 🧦🍳 | |
Q. The weather is | |
A. The weather is perfect for surfing! 🏄♀️ | |
Q. My favorite hobby is | |
A. My favorite hobby is collecting playing cards! 🐰💨 | |
Q. The meaning of life is | |
A. The meaning of life is to find what impact you can create in the life of others! 🍕🕵️♂️ | |
Q. The weather is perfect for surfing! 🏄♀️ My favorite hobby is | |
A. The weather is perfect for surfing! 🏄♀️ My favorite hobby is collecting playing cards! 🐰💨 | |
Q. I love to eat eggs for breakfast! 🧦🍳 Eggs are | |
A. I love to eat eggs for breakfast! 🧦🍳 Eggs are healthy as well as tasty 😋 | |
""" | |
ipAddress = "" | |
lastResponse = "" | |
def __nowInIST(): | |
return DT.datetime.now(pytz.timezone("Asia/Kolkata")) | |
def __attachIp(request: gr.Request): | |
global ipAddress | |
x_forwarded_for = request.headers.get('x-forwarded-for') | |
if x_forwarded_for: | |
ipAddress = x_forwarded_for | |
def pprint(log: str): | |
now = __nowInIST() | |
now = now.strftime("%Y-%m-%d %H:%M:%S") | |
print(f"[{now}] [{ipAddress}] {log}") | |
def autocomplete(text): | |
global lastResponse | |
if text != "": | |
if text[-1] != " ": | |
yield lastResponse | |
return | |
pprint(f"{text=}") | |
response = client.chat.completions.create( | |
model='llama-3.1-8b-instant', | |
messages=[ | |
{ | |
"role": "system", | |
"content": SYSTEM_PROMPT | |
}, | |
{ | |
"role": "user", | |
"content": text | |
} | |
], | |
temperature=0.8, | |
max_tokens=100, | |
stream=True | |
) | |
partialMessage = "" | |
for chunk in response: | |
if chunk.choices[0].delta.content is not None: | |
partialMessage = partialMessage + chunk.choices[0].delta.content | |
yield partialMessage | |
pprint(f"{partialMessage=}") | |
lastResponse = partialMessage | |
else: | |
lastResponse = "" | |
css = """ | |
# .generating { | |
# display: none | |
# } | |
""" | |
with gr.Blocks(css=css, title="Create interesting sentences on the fly ✈") as demo: | |
demo.load(__attachIp, None, None) | |
gr.Markdown("# Create interesting sentences on the fly ✈") | |
gr.Markdown("Powered by Groq & Llama 3.1") | |
with gr.Row(): | |
input_box = gr.Textbox( | |
lines=5, | |
placeholder="Start typing ...", | |
label="Input Sentence", | |
) | |
output_box = gr.Markdown( | |
label="Output Sentence" | |
) | |
copy_button = gr.Button("Use Output", variant="primary") | |
input_box.change( | |
fn=autocomplete, | |
inputs=input_box, | |
outputs=output_box, | |
show_progress="minimal", | |
api_name=None, | |
queue=True, | |
) | |
copy_button.click( | |
fn=lambda x: x, | |
inputs=output_box, | |
outputs=input_box, | |
) | |
# inputBox = gr.Textbox( | |
# lines=2, | |
# placeholder="Start typing ...", | |
# label="Input Sentence", | |
# ) | |
# outputBox = gr.Markdown( | |
# label="Output Sentence" | |
# ) | |
# with gr.Interface( | |
# fn=autocomplete, | |
# inputs=inputBox, | |
# outputs=outputBox, | |
# title="Create interesting sentences on the fly ✈", | |
# description="Powered by Groq & Llama 3.1", | |
# live=True, # Set live to True for real-time feedback | |
# allow_flagging="never", # Disable flagging | |
# css=css | |
# ) as demo: | |
# # demo.load(__attachIp, None, None) | |
# copyButton = gr.Button( | |
# "Use Output", | |
# elem_id="copy-button", | |
# variant="primary" | |
# ).click( | |
# fn=lambda x: x, | |
# inputs=outputBox, | |
# outputs=inputBox, | |
# ) | |
# Launch the app | |
demo.launch( | |
debug=True, | |
server_name="0.0.0.0", | |
) |