fix: revert to sync API, keep all obfuscation fixes — v0.7/v1.0.190
Deploy contracts-flask / validate (push) Successful in 0s
Deploy contracts-flask / validate (push) Successful in 0s
This commit is contained in:
@@ -6,7 +6,7 @@ DrHider — обфускация документов (двухпроходна
|
||||
|
||||
Согласованность: одна и та же сущность во всех файлах → одно и то же фиктивное значение.
|
||||
"""
|
||||
DRHIDER_VERSION = "0.6"
|
||||
DRHIDER_VERSION = "0.7"
|
||||
import io
|
||||
import csv
|
||||
import re
|
||||
|
||||
+7
-48
@@ -3,17 +3,11 @@
|
||||
Все тяжёлые операции — на ВМ (contracts.kube5s.ru).
|
||||
"""
|
||||
import os
|
||||
import uuid
|
||||
import threading
|
||||
import httpx
|
||||
from flask import Flask, render_template, request, jsonify
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# DrHider job store (in-memory, no persistence)
|
||||
_drhider_jobs = {}
|
||||
_drhider_lock = threading.Lock()
|
||||
|
||||
VM_API = os.environ.get("VM_API", "https://contracts.kube5s.ru")
|
||||
LLM_URL = os.environ.get("LLM_API_URL", "https://api.aillm.ru/v1/chat/completions")
|
||||
LLM_KEY = os.environ.get("LLM_API_KEY", "")
|
||||
@@ -116,8 +110,11 @@ def drhider():
|
||||
|
||||
@app.route("/api/drhider", methods=["POST"])
|
||||
def api_drhider():
|
||||
"""Обфускация: старт фоновой задачи."""
|
||||
"""Обфускация: файлы → ZIP."""
|
||||
import io
|
||||
from flask import send_file
|
||||
from services.drhider import obfuscate_files
|
||||
from services.llm_client import HttpxLLMClient
|
||||
|
||||
uploaded = request.files.getlist("files")
|
||||
if not uploaded:
|
||||
@@ -127,52 +124,14 @@ def api_drhider():
|
||||
if not files:
|
||||
return jsonify({"ok": False, "error": "Нет файлов"}), 400
|
||||
|
||||
job_id = uuid.uuid4().hex
|
||||
with _drhider_lock:
|
||||
_drhider_jobs[job_id] = {"done": False, "data": None, "error": None}
|
||||
|
||||
def _process():
|
||||
try:
|
||||
from services.llm_client import HttpxLLMClient
|
||||
llm = HttpxLLMClient(LLM_URL, LLM_KEY, LLM_MODEL) if LLM_KEY else None
|
||||
zip_data, _csv = obfuscate_files(files, llm_client=llm)
|
||||
with _drhider_lock:
|
||||
_drhider_jobs[job_id] = {"done": True, "data": zip_data, "error": None}
|
||||
except Exception as e:
|
||||
with _drhider_lock:
|
||||
_drhider_jobs[job_id] = {"done": True, "data": None, "error": str(e)}
|
||||
|
||||
threading.Thread(target=_process, daemon=True).start()
|
||||
return jsonify({"ok": True, "job_id": job_id})
|
||||
|
||||
|
||||
@app.route("/api/drhider/<job_id>/status")
|
||||
def api_drhider_status(job_id):
|
||||
"""Статус задачи."""
|
||||
with _drhider_lock:
|
||||
job = _drhider_jobs.get(job_id)
|
||||
if not job:
|
||||
return jsonify({"ok": False, "error": "Неизвестный job_id"}), 404
|
||||
return jsonify({"ok": True, "done": job["done"], "error": job["error"]})
|
||||
|
||||
|
||||
@app.route("/api/drhider/<job_id>/download")
|
||||
def api_drhider_download(job_id):
|
||||
"""Скачать результат."""
|
||||
from flask import send_file
|
||||
import io
|
||||
with _drhider_lock:
|
||||
job = _drhider_jobs.get(job_id)
|
||||
if not job or not job["done"]:
|
||||
return jsonify({"ok": False, "error": "Не готов"}), 404
|
||||
if job["error"]:
|
||||
return jsonify({"ok": False, "error": job["error"]}), 500
|
||||
buf = io.BytesIO(job["data"])
|
||||
buf = io.BytesIO(zip_data)
|
||||
buf.seek(0)
|
||||
# Очистка
|
||||
with _drhider_lock:
|
||||
_drhider_jobs.pop(job_id, None)
|
||||
return send_file(buf, mimetype="application/zip", as_attachment=True, download_name="drhider_output.zip")
|
||||
except Exception as e:
|
||||
return jsonify({"ok": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
@app.route("/health")
|
||||
|
||||
@@ -6,7 +6,7 @@ DrHider — обфускация документов (двухпроходна
|
||||
|
||||
Согласованность: одна и та же сущность во всех файлах → одно и то же фиктивное значение.
|
||||
"""
|
||||
DRHIDER_VERSION = "0.6"
|
||||
DRHIDER_VERSION = "0.7"
|
||||
import io
|
||||
import csv
|
||||
import re
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
<a href="/">Сверка договоров</a>
|
||||
<span class="sep">|</span>
|
||||
<strong>DrHider</strong>
|
||||
<span style="font-size:11px;color:var(--muted);">v0.6</span>
|
||||
<span style="font-size:11px;color:var(--muted);">v0.7</span>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
<body>
|
||||
<div class="topbar">
|
||||
<img src="/static/logo.svg" alt="Nubes">
|
||||
<span class="title">Сверка договоров — LLM AI-driven Event Sourcing <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.0.189-flask</span></span>
|
||||
<span class="title">Сверка договоров — LLM AI-driven Event Sourcing <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.0.190-flask</span></span>
|
||||
<div id="pipelineStepper" style="display:flex;gap:8px;font-size:11px;align-items:center;color:var(--muted);">
|
||||
<span id="stepUpload">○ Загрузка</span><span>→</span>
|
||||
<span id="stepClassify">○ Классификация</span><span>→</span>
|
||||
|
||||
Reference in New Issue
Block a user