Uniaff commited on
Commit
7280012
·
verified ·
1 Parent(s): 32a3628

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -37
app.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import os
2
  import sys
3
  import time
@@ -5,21 +7,26 @@ import gradio as gr
5
  import requests
6
  from langchain.prompts import ChatPromptTemplate
7
  from langchain_community.llms import Ollama
8
- import subprocess
9
  from datetime import datetime
10
 
11
- from func_ai import classify_comment, retrieve_from_vdb, VECTOR_API_URL
12
- from func_facebook import get_page_id, has_page_replied, get_unanswered_comments, reply_comment, hide_negative_comments
 
 
 
 
 
 
 
 
 
 
13
 
14
  def log_message(message):
15
  timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
16
  print(f"[{timestamp}] {message}")
17
 
18
- # Wait for the server to start
19
- time.sleep(10)
20
- llm = Ollama(model="llama3.1")
21
- log_message("Модель Ollama 'llama3.1' инициализирована.")
22
-
23
  template = """
24
  You are an assistant answering users' questions using the provided context. Your tasks:
25
 
@@ -40,37 +47,53 @@ Question: {input}
40
 
41
  def delete_faiss_index():
42
  log_message("Удаляем FAISS индекс.")
43
- response = requests.delete(f"{VECTOR_API_URL}/delete_index/")
44
-
45
- if response.status_code == 200:
46
- log_message("FAISS индекс успешно удален.")
47
- return "Faiss успешно удален."
48
- else:
49
- log_message(f"Ошибка при удалении FAISS индекса: {response.json().get('detail')}")
50
- return {"status": "error", "message": response.json().get("detail", "Ошибка при удалении FAISS индекса.")}
51
-
 
 
52
 
53
  def upload_file_vdb(file):
54
  log_message("Загружаем файл")
55
  API_URL = f"{VECTOR_API_URL}/upload/"
56
 
57
- file_path = file
58
  file_name = os.path.basename(file_path)
59
 
60
- # Открываем файл в бинарном режиме
61
- with open(file_path, 'rb') as f:
62
- files = {'file': (file_name, f)}
63
- response = requests.post(API_URL, files=files)
64
-
65
- # Обработка ответа от сервера
66
- if response.status_code == 200:
67
- log_message("Файл успешно загружен.")
68
- return "Файл успешно загружен."
69
- else:
70
- log_message(f"Ошибка при загрузке файла: {response.json().get('detail')}")
71
- return f"Ошибка: {response.json().get('detail')}"
72
-
73
- def generate_response(user_query):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  log_message(f"Генерация ответа на запрос: {user_query}")
75
  prompt = ChatPromptTemplate.from_template(template)
76
 
@@ -80,9 +103,13 @@ def generate_response(user_query):
80
  log_message(f"Контекст ��з базы данных: {context[:100]}...")
81
  full_prompt = prompt.format(context=context, input=user_query)
82
 
83
- response = llm.invoke(full_prompt)
84
- log_message(f"Сгенерированный ответ: {response}")
85
- return response
 
 
 
 
86
 
87
  def process_comments(ACCESS_TOKEN):
88
  log_message("Начинаем процесс скрытия отрицательных комментариев.")
@@ -101,6 +128,14 @@ def process_comments(ACCESS_TOKEN):
101
 
102
  processed_posts = []
103
 
 
 
 
 
 
 
 
 
104
  for post_data in posts_with_unanswered_comments:
105
  post_id = post_data['post_id']
106
  post_message = post_data['post_message']
@@ -114,7 +149,7 @@ def process_comments(ACCESS_TOKEN):
114
  classification = classify_comment(message)
115
  log_message(f"Классификация комментария: {classification}")
116
  if classification == "interrogative":
117
- response_message = generate_response(message)
118
  log_message(f"Ответ на комментарий: {response_message}")
119
  success = reply_comment(comment_id=comment['id'], message=response_message, token=ACCESS_TOKEN)
120
  if success:
@@ -136,6 +171,10 @@ def process_comments(ACCESS_TOKEN):
136
  "posts": processed_posts
137
  }
138
 
 
 
 
 
139
  with gr.Blocks() as demo:
140
  with gr.Tab("Главная страница"):
141
  gr.Markdown("# Facebook Comment Filter")
@@ -145,7 +184,7 @@ with gr.Blocks() as demo:
145
  process_btn.click(process_comments, inputs=token_input, outputs=output_main)
146
 
147
  with gr.Tab("Загрузить данные"):
148
- gr.Markdown("# Отправь excel файл")
149
  file_input = gr.File(label="Загрузите Excel файл (.xlsx)")
150
  output_second = gr.Text()
151
  second_page_btn = gr.Button("Отправить файл")
 
1
+ # app.py
2
+
3
  import os
4
  import sys
5
  import time
 
7
  import requests
8
  from langchain.prompts import ChatPromptTemplate
9
  from langchain_community.llms import Ollama
 
10
  from datetime import datetime
11
 
12
+ from func_ai import classify_comment, retrieve_from_vdb, analyze_sentiment, log_message as ai_log
13
+ from func_facebook import (
14
+ get_page_id,
15
+ has_page_replied,
16
+ get_unanswered_comments,
17
+ reply_comment,
18
+ hide_negative_comments,
19
+ log_message as fb_log
20
+ )
21
+
22
+ # Инициализация переменных окружения
23
+ VECTOR_API_URL = os.getenv('API_URL')
24
 
25
  def log_message(message):
26
  timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
27
  print(f"[{timestamp}] {message}")
28
 
29
+ # Шаблон для генерации ответов
 
 
 
 
30
  template = """
31
  You are an assistant answering users' questions using the provided context. Your tasks:
32
 
 
47
 
48
  def delete_faiss_index():
49
  log_message("Удаляем FAISS индекс.")
50
+ try:
51
+ response = requests.delete(f"{VECTOR_API_URL}/delete_index/")
52
+ if response.status_code == 200:
53
+ log_message("FAISS индекс успешно удален.")
54
+ return "FAISS успешно удален."
55
+ else:
56
+ log_message(f"Ошибка при удалении FAISS индекса: {response.json().get('detail')}")
57
+ return {"status": "error", "message": response.json().get("detail", "Ошибка при удалении FAISS индекса.")}
58
+ except Exception as e:
59
+ log_message(f"Ошибка при удалении FAISS индекса: {e}")
60
+ return {"status": "error", "message": str(e)}
61
 
62
  def upload_file_vdb(file):
63
  log_message("Загружаем файл")
64
  API_URL = f"{VECTOR_API_URL}/upload/"
65
 
66
+ file_path = file.name # Получаем имя файла
67
  file_name = os.path.basename(file_path)
68
 
69
+ # Сохраняем загруженный файл во временное место
70
+ temp_path = f"/tmp/{file_name}"
71
+ try:
72
+ with open(temp_path, 'wb') as f:
73
+ f.write(file.read())
74
+ log_message(f"Файл сохранен во временное место: {temp_path}")
75
+
76
+ # Отправляем файл в векторную базу данных
77
+ with open(temp_path, 'rb') as f:
78
+ files = {'file': (file_name, f)}
79
+ response = requests.post(API_URL, files=files)
80
+
81
+ # Удаляем временный файл
82
+ os.remove(temp_path)
83
+ log_message(f"Временный файл {temp_path} удален.")
84
+
85
+ # Обработка ответа от сервера
86
+ if response.status_code == 200:
87
+ log_message("Файл успешно загружен.")
88
+ return "Файл успешно загружен."
89
+ else:
90
+ log_message(f"Ошибка при загрузке файла: {response.json().get('detail')}")
91
+ return f"Ошибка: {response.json().get('detail')}"
92
+ except Exception as e:
93
+ log_message(f"Ошибка при загрузке файла: {e}")
94
+ return f"Ошибка: {str(e)}"
95
+
96
+ def generate_response(user_query, llm):
97
  log_message(f"Генерация ответа на запрос: {user_query}")
98
  prompt = ChatPromptTemplate.from_template(template)
99
 
 
103
  log_message(f"Контекст ��з базы данных: {context[:100]}...")
104
  full_prompt = prompt.format(context=context, input=user_query)
105
 
106
+ try:
107
+ response = llm.invoke(full_prompt)
108
+ log_message(f"Сгенерированный ответ: {response}")
109
+ return response
110
+ except Exception as e:
111
+ log_message(f"Ошибка при генерации ответа: {e}")
112
+ return "Извините, возникла ошибка при обработке вашего запроса."
113
 
114
  def process_comments(ACCESS_TOKEN):
115
  log_message("Начинаем процесс скрытия отрицательных комментариев.")
 
128
 
129
  processed_posts = []
130
 
131
+ # Инициализируем модель Ollama
132
+ try:
133
+ llm = Ollama(model="llama3.1")
134
+ log_message("Модель Ollama 'llama3.1' инициализирована.")
135
+ except Exception as e:
136
+ log_message(f"Ошибка инициализации модели Ollama: {e}")
137
+ return {"status": "failed", "reason": "Ошибка инициализации модели AI."}
138
+
139
  for post_data in posts_with_unanswered_comments:
140
  post_id = post_data['post_id']
141
  post_message = post_data['post_message']
 
149
  classification = classify_comment(message)
150
  log_message(f"Классификация комментария: {classification}")
151
  if classification == "interrogative":
152
+ response_message = generate_response(message, llm)
153
  log_message(f"Ответ на комментарий: {response_message}")
154
  success = reply_comment(comment_id=comment['id'], message=response_message, token=ACCESS_TOKEN)
155
  if success:
 
171
  "posts": processed_posts
172
  }
173
 
174
+ def generate_response_interface(user_query, llm):
175
+ return generate_response(user_query, llm)
176
+
177
+ # Создание интерфейса Gradio
178
  with gr.Blocks() as demo:
179
  with gr.Tab("Главная страница"):
180
  gr.Markdown("# Facebook Comment Filter")
 
184
  process_btn.click(process_comments, inputs=token_input, outputs=output_main)
185
 
186
  with gr.Tab("Загрузить данные"):
187
+ gr.Markdown("# Отправь Excel файл")
188
  file_input = gr.File(label="Загрузите Excel файл (.xlsx)")
189
  output_second = gr.Text()
190
  second_page_btn = gr.Button("Отправить файл")