File size: 4,277 Bytes
80ae694
e0b99d4
7f6518d
a9ac4db
7f6518d
 
a9ac4db
7f6518d
 
 
 
a9ac4db
7f6518d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a9ac4db
 
7f6518d
 
 
d7b10f7
7f6518d
 
 
 
 
 
 
 
 
ef0fc8d
7f6518d
 
 
d7b10f7
7f6518d
aa623c9
7f6518d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0378931
7f6518d
 
 
 
 
 
 
 
 
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
119
120
import gradio as gr
import random
import os
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()
  # opens the text, saves as "file"
  # reads the text and saves as water_cycle_text variable



cleaned_text = recent.strip()
# cleaning up the text
chunks = cleaned_text.split("\n")
# seperating the text into one sentence pieces
cleaned_chunks = []
# creating an empty list to put the cleaned chunks in

for chunk in chunks:
  stripped_chunk = chunk.strip()
  if stripped_chunk:
    cleaned_chunks.append(stripped_chunk)
    # loop through chunks and add not empty chunks to cleaned_chunks list


model = SentenceTransformer('all-MiniLM-L6-v2')

chunk_embeddings = model.encode(cleaned_chunks, convert_to_tensor=True)
# encode the model, pass through my cleaned chunks and convert to vector embeddings (not arrays)


def get_top_chunks(query):
  # create my function taking query as parameter
  query_embedding = model.encode(query, convert_to_tensor=True)
  # encode query to vector embedding for comparison
  query_embedding_normalized = query_embedding / query_embedding.norm()
  # normalize my query to 1; allows for comparison of meaning
  chunk_embeddings_normalized = chunk_embeddings / chunk_embeddings.norm(dim=1, keepdim=True)
  # normailizing chunks for comparison of meaning

  similarities = torch.matmul(chunk_embeddings_normalized, query_embedding_normalized)

  # using matmul (matrix multiplication method) to compare query to chunks
  top_indices = torch.topk(similarities, k=3).indices

  # get the indices of the chunks that are most similar to query

  top_chunks = []

  for i in top_indices:
    chunk = chunks[i]
    # for each index number in top_indices, get back the text
    top_chunks.append(chunk)
    # values of each index number is added to top_chunks
  return top_chunks
    
client = InferenceClient(
    model='Qwen/Qwen2.5-72B-Instruct',
    #token = 'HF_TOKEN'
) 

#client is where you can change the LLM model!
def respond(message,history):
    if not message.strip():
        return "Hello!"
    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 = ""
    for message in client.chat_completion(
        #max_tokens controls how many words your responses is 
        messages,
        max_tokens = 500,
        stream = True,
        
        #temperature = 0.8, #code a decimal between 0-2
        #top_p = .65 #code a decimal between 0-1
    ):
        token = message.choices[0].delta.content
        response += token
        yield response
    #print(response["choices"][0]["message"]["content"].strip())
    
    #yield response["choices"][0]["message"]["content"].strip()
    


#with gr.Blocks(theme='hmb/amethyst') as demo:
 #   with gr.Row(equal_height=True):
  #      with gr.Column(scale=10):
   #            """
    #            # 🎁 Introducing WrapIT!
     #           **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(respond, type='messages')

  
    
    #chatbot = gr.Chatbot()
    #msg = gr.Textbox(placeholder="Say hi to WrapIT here!", label="Message")
    #send = gr.Button("Send")

    #msg.submit(respond, [msg, chatbot], [msg, chatbot])
    #send.click(respond, [msg, chatbot], [msg, chatbot])
chat_interface = gr.ChatInterface(fn=respond, title="🎁 Introducing WrapIT!", theme='hmb/amethyst', description=" **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.*")
chat_interface.launch()