|
|
import gradio as gr |
|
|
import random |
|
|
|
|
|
from huggingface_hub import InferenceClient |
|
|
from sentence_transformers import SentenceTransformer |
|
|
import torch |
|
|
|
|
|
with open("knowledge.txt", "r", encoding="utf-8") as file: |
|
|
recent = file.read() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cleaned_text = recent.strip() |
|
|
|
|
|
chunks = cleaned_text.split("\n") |
|
|
|
|
|
cleaned_chunks = [] |
|
|
|
|
|
|
|
|
for chunk in chunks: |
|
|
stripped_chunk = chunk.strip() |
|
|
if stripped_chunk: |
|
|
cleaned_chunks.append(stripped_chunk) |
|
|
|
|
|
|
|
|
|
|
|
model = SentenceTransformer('all-MiniLM-L6-v2') |
|
|
|
|
|
chunk_embeddings = model.encode(cleaned_chunks, convert_to_tensor=True) |
|
|
|
|
|
|
|
|
|
|
|
def get_top_chunks(query): |
|
|
|
|
|
query_embedding = model.encode(query, convert_to_tensor=True) |
|
|
|
|
|
query_embedding_normalized = query_embedding / query_embedding.norm() |
|
|
|
|
|
chunk_embeddings_normalized = chunk_embeddings / chunk_embeddings.norm(dim=1, keepdim=True) |
|
|
|
|
|
|
|
|
similarities = torch.matmul(chunk_embeddings_normalized, query_embedding_normalized) |
|
|
|
|
|
|
|
|
top_indices = torch.topk(similarities, k=3).indices |
|
|
|
|
|
|
|
|
|
|
|
top_chunks = [] |
|
|
|
|
|
for i in top_indices: |
|
|
chunk = chunks[i] |
|
|
|
|
|
top_chunks.append(chunk) |
|
|
|
|
|
return top_chunks |
|
|
|
|
|
client = InferenceClient('google/gemma-3-27b-it',) |
|
|
|
|
|
|
|
|
|
|
|
def respond(message,history): |
|
|
|
|
|
|
|
|
gift_ideas = get_top_chunks(message) |
|
|
messages = [{'role': 'system', 'content': f'You give really good gift ideas and are super helpful! You also tell me the price of each item. Give me 5 gift ideas if I ask. Use the following database for gift ideas: {gift_ideas}'}] |
|
|
|
|
|
if history: |
|
|
messages.extend(history) |
|
|
|
|
|
messages.append({"role": "user", "content": message}) |
|
|
|
|
|
response = client.chat_completion( |
|
|
|
|
|
|
|
|
messages, |
|
|
max_tokens = 500, |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return response['choices'][0]['message']['content'].strip() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("The bug is in the gradio") |
|
|
with gr.Blocks(theme='hmb/amethyst') as demo: |
|
|
|
|
|
gr.Image(value="wrap_it_top_image.png", show_label=False, elem_id="top-image") |
|
|
|
|
|
|
|
|
gr.Markdown("## 🎁 Introducing WrapIT!") |
|
|
gr.Markdown("**WrapIT** helps users find personalized gift ideas and craft thoughtful card messages by inputting details like the recipient's interests, celebration type, and budget ✨ *All you have to do is wrap it.*") |
|
|
|
|
|
|
|
|
|
|
|
gr.ChatInterface( |
|
|
fn=respond, |
|
|
examples=["Best birthday gift?", "Romantic anniversary idea?", "Budget-friendly gifts?"] |
|
|
) |
|
|
|
|
|
|
|
|
with gr.Row(): |
|
|
gr.HTML( |
|
|
""" |
|
|
<iframe style="border-radius:12px" |
|
|
src="https://open.spotify.com/embed/track/4356Typ82hUiFAynbLYbPn" |
|
|
width="100%" |
|
|
height="152" |
|
|
frameBorder="0" |
|
|
allowfullscreen="" |
|
|
allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" |
|
|
loading="lazy"> |
|
|
</iframe> |
|
|
""" |
|
|
) |
|
|
|
|
|
demo.launch(debug=True, share=True) |