File size: 2,527 Bytes
f6f5153 f49b99e 18898ac c589e1a 2571345 c589e1a 2571345 c589e1a ee24018 834791f c589e1a 70bcdad 776a762 7d55b61 ee24018 c589e1a f49b99e c589e1a 776a762 70bcdad 776a762 70bcdad 776a762 f49b99e 776a762 834791f ee24018 776a762 7d55b61 17ee92b 7d55b61 d6e934b 7d55b61 17ee92b 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 97 98 99 100 101 102 103 |
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 = ""
# char_limit= 500
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
# if len(response) > char_limit:
# response = response[:char_limit]
# for punc in [".", "!", "?"]:
# i = response.rfind(punc)
# if i != -1:
# response = response[:i+1]
# break
# 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()
|