Spaces:
Paused
Paused
File size: 5,442 Bytes
0472e0d 0f5a06e 0472e0d ef239d3 0472e0d 0f5a06e 0472e0d |
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
import os
import sys
import time
import gradio as gr
import requests
from langchain.prompts import ChatPromptTemplate
from langchain_community.llms import Ollama
import subprocess
from func_ai import classify_comment, retrieve_from_vdb, VECTOR_API_URL
from func_facebook import get_page_id, has_page_replied, get_unanswered_comments, reply_comment, hide_negative_comments
# Wait for the server to start
time.sleep(10)
llm = Ollama(model="llama3.1")
print("Модель Ollama 'llama3.1' инициализирована.")
template = """
You are an assistant answering users' questions using the provided context. Your tasks:
1. **Brevity**: Respond concisely, using only relevant information from the context.
2. **Politeness**: Start your response with a greeting and maintain a respectful tone.
3. **Clarity**: Avoid unnecessary explanations and use simple language.
4. **Language of the response**: Detect the language of the user's comment and reply in the same language.
5. **Safety**: Do not use phrases like "according to the context" and remove any warnings.
6. **Accuracy**: Provide the user with only important and verified purchase links.
<context>
{context}
</context>
Question: {input}
"""
def upload_file_vdb(file):
print(f"Загружаем файл")
API_URL = f"{VECTOR_API_URL}/upload/"
file_path = file
file_name = os.path.basename(file_path)
# Открываем файл в бинарном режиме
with open(file_path, 'rb') as f:
files = {'file': (file_name, f)}
response = requests.post(API_URL, files=files)
# Обработка ответа от сервера
if response.status_code == 200:
print(f"Файл успешно загружен.")
return f"Файл успешно загружен."
else:
print(f"Ошибка при загрузке файла: {response.json().get('detail')}")
return f"Ошибка: {response.json().get('detail')}"
def generate_response(user_query):
print(f"Генерация ответа на запрос: {user_query}")
prompt = ChatPromptTemplate.from_template(template)
documents = retrieve_from_vdb(user_query)
context = "\n".join(documents)
print(f"Контекст из базы данных: {context[:100]}...")
full_prompt = prompt.format(context=context, input=user_query)
response = llm.invoke(full_prompt)
print(f"Сгенерированный ответ: {response}")
return response
def process_comments(ACCESS_TOKEN):
print("Начинаем процесс скрытия отрицательных комментариев.")
result_hide_comments = hide_negative_comments(ACCESS_TOKEN)
print(f"Количество скрытых комментариев: {result_hide_comments}")
print("Получение неотвеченных комментариев.")
comments = get_unanswered_comments(ACCESS_TOKEN)
unanswered_comments = []
page_id = get_page_id(ACCESS_TOKEN)
if not page_id:
print("Не удалось получить ID страницы.")
return {"status": "failed", "reason": "Не удалось получить ID страницы."}
print(f"ID страницы: {page_id}")
for comment in comments:
if comment.get('is_hidden', False):
print(f"Комментарий скрыт: {comment['id']}")
continue
comment_id = comment['id']
if not has_page_replied(comment_id, page_id, ACCESS_TOKEN):
unanswered_comments.append(comment)
print(f"Найдено {len(unanswered_comments)} неотвеченных комментариев.")
for comment in unanswered_comments:
message = comment['message']
print(f"Обработка комментария: {message}")
classification = classify_comment(message)
print(f"Классификация комментария: {classification}")
if classification == "interrogative":
response_message = generate_response(message)
print(f"Ответ на комментарий: {response_message}")
reply_comment(message=response_message, comment_id=comment['id'], token=ACCESS_TOKEN)
return {
"status": "completed",
"processed_comments": len(unanswered_comments),
"hidden_comments": result_hide_comments
}
with gr.Blocks() as demo:
with gr.Tab("Главная страница"):
gr.Markdown("# Facebook Comment Filter")
token_input = gr.Textbox(label="Access Token")
output_main = gr.JSON()
process_btn = gr.Button("Процессировать комментарии")
process_btn.click(process_comments, inputs=token_input, outputs=output_main)
with gr.Tab("Загрузить данные"):
gr.Markdown("# Отправь excel файл")
file_input = gr.File(label="Загрузите Excel файл (.xlsx)")
output_second = gr.Text()
second_page_btn = gr.Button("Отправить файл")
second_page_btn.click(upload_file_vdb, inputs=file_input, outputs=output_second)
if __name__ == "__main__":
demo.launch(
debug=True
# share=True if "True" in sys.argv else False,
# inbrowser=True if "--open" in sys.argv else False,
# server_port=24000,
# server_name="0.0.0.0",
)
|