Loversofdeath commited on
Commit
05647e2
·
verified ·
1 Parent(s): 2012aa4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -48
app.py CHANGED
@@ -1,55 +1,57 @@
1
  import gradio as gr
 
2
  import re
3
 
4
- # Загружаем текстовые данные из файлов лора
5
- def load_lore_files():
6
- lore_data = {}
7
- for filename in ["vampires.txt"]:
8
- with open(filename, "r", encoding="utf-8") as file:
9
- lore_data[filename] = file.read()
10
- return lore_data
11
 
12
- lore_data = load_lore_files()
13
-
14
- # Функция для очистки текста от нежелательных символов
15
  def clean_text(text):
16
- # Убираем все символы, кроме букв и пробелов
17
- return re.sub(r'[^a-zA-Zа-яА-ЯёЁ\s]', '', text.lower())
18
-
19
- # Функция поиска ответа
20
- def chatbot(message, history, system_message, max_tokens, temperature, top_p):
21
- # Приводим запрос к стандартному виду
22
- cleaned_message = clean_text(message)
23
-
24
- response = ""
25
- for filename, text in lore_data.items():
26
- cleaned_text = clean_text(text)
27
- if cleaned_message in cleaned_text:
28
- response += f"В файле {filename} есть что-то похожее на ваш запрос!\n"
29
-
30
- if response == "":
31
- return "Извините, ничего не нашёл по вашему запросу."
32
-
33
- # Добавляем ответ в историю
34
- history.append((message, response))
35
- return response, history
36
-
37
- # Интерфейс чата с Gradio
38
- demo = gr.ChatInterface(
39
- chatbot,
40
- additional_inputs=[
41
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
42
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
43
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
44
- gr.Slider(
45
- minimum=0.1,
46
- maximum=1.0,
47
- value=0.95,
48
- step=0.05,
49
- label="Top-p (nucleus sampling)",
50
- ),
51
- ],
 
 
 
 
 
 
52
  )
53
 
54
- if __name__ == "__main__":
55
- demo.launch()
 
1
  import gradio as gr
2
+ import os
3
  import re
4
 
5
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
6
+ from langchain.embeddings import HuggingFaceEmbeddings
7
+ from langchain.vectorstores import FAISS
8
+ from langchain.chains import RetrievalQA
9
+ from langchain.llms import HuggingFaceHub
 
 
10
 
11
+ # Убираем спецсимволы (кроме базовой пунктуации)
 
 
12
  def clean_text(text):
13
+ return re.sub(r"[^\w\s.,!?–—:;()«»\"'-]", "", text, flags=re.UNICODE)
14
+
15
+ # Собираем весь лор из нескольких файлов
16
+ def load_all_lore_texts(folder="."):
17
+ texts = []
18
+ for filename in os.listdir(folder):
19
+ if filename.startswith("lore") and filename.endswith(".txt"):
20
+ with open(os.path.join(folder, filename), "r", encoding="utf-8") as f:
21
+ content = clean_text(f.read())
22
+ texts.append(content)
23
+ return "\n".join(texts)
24
+
25
+ # Загрузка и разбиение текста
26
+ full_lore = load_all_lore_texts()
27
+ splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
28
+ chunks = splitter.split_text(full_lore)
29
+
30
+ # Векторизация
31
+ embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2") # поддерживает русский
32
+ db = FAISS.from_texts(chunks, embeddings)
33
+ retriever = db.as_retriever()
34
+
35
+ # Русскоязычная LLM
36
+ llm = HuggingFaceHub(
37
+ repo_id="cointegrated/rugpt3large_based_on_gpt2",
38
+ model_kwargs={"temperature":0.6, "max_new_tokens":300}
39
+ )
40
+
41
+ qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
42
+
43
+ # Ответ бота
44
+ def ask_bot(question):
45
+ cleaned_question = clean_text(question)
46
+ return qa_chain.run(cleaned_question)
47
+
48
+ # Интерфейс
49
+ iface = gr.Interface(
50
+ fn=ask_bot,
51
+ inputs=gr.Textbox(lines=2, placeholder="Спроси что-нибудь по лору..."),
52
+ outputs="text",
53
+ title="ЛорБот",
54
+ description="Задавайте вопросы о вселенной. Поддерживается русский язык."
55
  )
56
 
57
+ iface.launch()