/
cppv
/
hackathon13
Обзор
Документация
Войти
/
cppv
/
hackathon13
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
app/main.py
98 строк
3 KB
cppv
hackathon13
25 май 2025, 11:54
25 май 2025, 11:54
8af8c2d
Код
Авторство
О чём код?
from flask import Flask, render_template, request, jsonify, session import os from app.document_processor import DocumentProcessor from app.gigachat_assistant import GigaChatAssistant from langchain_community.embeddings import FakeEmbeddings # путь к папке где лежит прога app_dir = os.path.dirname(os.path.abspath(__file__)) project_dir = os.path.dirname(app_dir) app = Flask(__name__, template_folder=os.path.join(project_dir, 'templates'), static_folder=os.path.join(project_dir, 'static')) app.secret_key = os.urandom(24) # куда сохранять всякие файлы DOCS_DIR = os.path.join(project_dir, 'data', 'docs') INDEX_PATH = os.path.join(project_dir, 'data', 'index') # ключ для гигачата, не трогать!!! GIGACHAT_CREDENTIALS = { "auth_key": "OWRlNWU4MDAtZTVhMi00OGU0LWJiMDAtNGIyYTUxMWIyNDg1OjZiYTM4ZTkxLWI2OTUtNGFkMy04YzQ1LTJhMTM1NGYzMTM4Ng==" } # всякие штуки которые нужны для работы embeddings = FakeEmbeddings(size=1536) # фейковые эмбеддинги для теста document_processor = None assistant = None def initialize_components(): """ запускаем все что нужно для работы """ global document_processor, assistant # создаем папки если их нет os.makedirs(DOCS_DIR, exist_ok=True) os.makedirs(os.path.dirname(INDEX_PATH), exist_ok=True) # врубаем обработку документов document_processor = DocumentProcessor(DOCS_DIR, INDEX_PATH) # делаем хранилище векторов vectorstore = document_processor.process_documents(embeddings) # если хранилище пустое, создаем тестовое if vectorstore is None: from langchain_community.vectorstores import FAISS import tempfile # временный документ чтоб не было ошибок temp_doc = "This is a temporary document for initialization" vectorstore = FAISS.from_texts([temp_doc], embeddings) # запускаем помощника assistant = GigaChatAssistant(GIGACHAT_CREDENTIALS, vectorstore) @app.route('/') def index(): """ домашняя страница """ return render_template('index.html') @app.route('/ask', methods=['POST']) def ask(): """ когда юзер задает вопрос """ data = request.json question = data.get('question', '') # берем историю из сессии history = session.get('history', []) # пока что просто спрашиваем у модели # потом сделаем нормально через assistant.answer_question(question) response = assistant.direct_chat(question, history) # сохраняем переписку history.append({'role': 'user', 'content': question}) history.append({'role': 'assistant', 'content': response}) session['history'] = history return jsonify({'response': response}) @app.route('/clear_history', methods=['POST']) def clear_history(): """ очистить историю чата """ session['history'] = [] return jsonify({'status': 'success'}) if __name__ == '__main__': initialize_components() app.config['PROPAGATE_EXCEPTIONS'] = True app.run(debug=True, host='0.0.0.0', port=5001)