File size: 2,249 Bytes
f6f5153
 
 
 
 
f49b99e
18898ac
 
c589e1a
2571345
c589e1a
2571345
c589e1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ffd4434
ee24018
834791f
c589e1a
70bcdad
776a762
ee24018
c589e1a
 
 
 
 
 
 
 
f49b99e
c589e1a
 
 
776a762
70bcdad
 
776a762
70bcdad
776a762
 
 
f49b99e
776a762
 
 
834791f
ee24018
 
 
 
 
776a762
70bcdad
 
7b8bbfd
 
 
 
 
 
 
 
 
 
776a762
7b8bbfd
 
 
 
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
import gradio as gr
from huggingface_hub import InferenceClient
from sentence_transformers import SentenceTransformer
import torch


with open("knowledge.txt", "r", encoding="utf-8") as file:
  knowledge = file.read()

print(knowledge)

cleaned_chunks = [chunk.strip() for chunk in knowledge.strip().split("\n") if chunk.strip()]
print(cleaned_chunks)

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

chunk_embeddings = model.encode(cleaned_chunks, convert_to_tensor=True)
print(chunk_embeddings)

cleaned_text = ""

def get_top_chunks(query):
    query_embedding = model.encode(query, convert_to_tensor=True)
    query_embedding_normalized = query_embedding / query_embedding.norm()

    similarities = torch.matmul(chunk_embeddings, query_embedding_normalized)
    print(similarities)
    top_indices = torch.topk(similarities, k=5).indices.tolist()
    print(top_indices)

    return [cleaned_chunks[i] for i in top_indices]

top_results = get_top_chunks("What are some good wizard characters?")
print(top_results)







client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")


def respond(message, history):
    response = ""

    top_chunks = get_top_chunks(message)
    context = "\n".join(top_chunks)

    messages = [
        {
            "role": "system",
            "content": (
                "You are a chatbot that helps users create characters for role-playing games. "
                "Use the following knowledge to inform your answers:\n\n" + context + "and keep your answers under 300 words."
            )
        }
    ]

    if history:
        messages.extend(history)

    messages.append({"role": "user", "content": message})

    stream = client.chat_completion(
        messages,
        max_tokens=300,
        temperature=1.2,
        stream=True
    )

    for message in stream:
        token = message.choices[0].delta.content
        if token is not None:
            response += token
            yield response

chatbot = gr.ChatInterface(respond, type="messages")


chatbot = gr.ChatInterface(
    respond,
    type="messages",
    examples=None,
    title="Character Creator",
    description="Welcome! Tell me what you want to create and we can make your character come to life!"
)


chatbot.launch()