Spaces:
Running
Running
Ayona commited on
Commit ·
8f359a6
1
Parent(s): 22df219
handoff: align help and trim debug leakage
Browse files- HELP.md +4 -0
- docs/deployment/hf/HF_DEPLOYMENT_SUMMARY.md +2 -0
- docs/deployment/hf/README_HF.md +6 -4
- main.py +2 -15
HELP.md
CHANGED
|
@@ -98,6 +98,10 @@
|
|
| 98 |
- Потужні моделі: 15-30 секунд
|
| 99 |
- З режимом Thinking: 30-60 секунд
|
| 100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
---
|
| 102 |
|
| 103 |
## Закладка: Пошук
|
|
|
|
| 98 |
- Потужні моделі: 15-30 секунд
|
| 99 |
- З режимом Thinking: 30-60 секунд
|
| 100 |
|
| 101 |
+
### Для customer MVP
|
| 102 |
+
- Основний підтримуваний сценарій поставки: **Генерація** + налаштування `provider/model/thinking/comment`.
|
| 103 |
+
- Якщо retrieval-контур не входить у ТЗ або не підготовлені актуальні індекси, вкладки **Пошук** і **Аналіз** можуть бути вимкнені без втрати основної цінності MVP.
|
| 104 |
+
|
| 105 |
---
|
| 106 |
|
| 107 |
## Закладка: Пошук
|
docs/deployment/hf/HF_DEPLOYMENT_SUMMARY.md
CHANGED
|
@@ -4,6 +4,8 @@ NOTE: This HF deployment summary is a convenience document for operators. Canoni
|
|
| 4 |
|
| 5 |
# 🎉 Підсумок: Готовність до розгортання на Hugging Face Spaces
|
| 6 |
|
|
|
|
|
|
|
| 7 |
## ✅ Створені файли
|
| 8 |
|
| 9 |
### 1. Основні файли розгортання:
|
|
|
|
| 4 |
|
| 5 |
# 🎉 Підсумок: Готовність до розгортання на Hugging Face Spaces
|
| 6 |
|
| 7 |
+
> Примітка для handoff: canonical instructions and current MVP scope live in `docs/deployment/hf/DEPLOYMENT_HF.md`, `docs/README.md`, `README.md`, and `docs/SCOPE_AND_DATA_FRESHNESS.md`. This file is only a summary note.
|
| 8 |
+
|
| 9 |
## ✅ Створені файли
|
| 10 |
|
| 11 |
### 1. Основні файли розгортання:
|
docs/deployment/hf/README_HF.md
CHANGED
|
@@ -21,8 +21,8 @@ Legal Position AI Analyzer — це інструмент для автомати
|
|
| 21 |
### Основні можливості:
|
| 22 |
|
| 23 |
- 🤖 **Генерація правових позицій** з судових рішень
|
| 24 |
-
- 🔍 **Пошук релевантних прецедентів** в базі даних
|
| 25 |
-
- ⚖️ **Аналіз схожості** з існуючими правовими позиціями
|
| 26 |
- 📊 **Пакетне тестування** для обробки множини справ
|
| 27 |
- 🎯 **Підтримка декількох AI моделей**:
|
| 28 |
- Anthropic Claude (Opus 4.5, Sonnet 4.5, Haiku 4.5)
|
|
@@ -39,15 +39,17 @@ Legal Position AI Analyzer — це інструмент для автомати
|
|
| 39 |
3. Додайте коментар (опціонально)
|
| 40 |
4. Натисніть "Генерувати позицію"
|
| 41 |
|
| 42 |
-
### 2. Пошук прецедентів
|
| 43 |
|
| 44 |
- Автоматичний пошук після генерації позиції
|
| 45 |
- Або ручний пошук за текстом/URL
|
|
|
|
| 46 |
|
| 47 |
-
### 3. Аналіз релевантності
|
| 48 |
|
| 49 |
- Порівняння з існуючими правовими позиціями
|
| 50 |
- Оцінка застосовності до нової справи
|
|
|
|
| 51 |
|
| 52 |
## ⚙️ Конфігурація
|
| 53 |
|
|
|
|
| 21 |
### Основні можливості:
|
| 22 |
|
| 23 |
- 🤖 **Генерація правових позицій** з судових рішень
|
| 24 |
+
- 🔍 **Пошук релевантних прецедентів** в базі даних *(опціонально)*
|
| 25 |
+
- ⚖️ **Аналіз схожості** з існуючими правовими позиціями *(опціонально)*
|
| 26 |
- 📊 **Пакетне тестування** для обробки множини справ
|
| 27 |
- 🎯 **Підтримка декількох AI моделей**:
|
| 28 |
- Anthropic Claude (Opus 4.5, Sonnet 4.5, Haiku 4.5)
|
|
|
|
| 39 |
3. Додайте коментар (опціонально)
|
| 40 |
4. Натисніть "Генерувати позицію"
|
| 41 |
|
| 42 |
+
### 2. Пошук прецедентів *(опціонально)*
|
| 43 |
|
| 44 |
- Автоматичний пошук після генерації позиції
|
| 45 |
- Або ручний пошук за текстом/URL
|
| 46 |
+
- Для customer MVP може бути вимкнений, якщо retrieval не входить у погоджений scope
|
| 47 |
|
| 48 |
+
### 3. Аналіз релевантності *(опціонально)*
|
| 49 |
|
| 50 |
- Порівняння з існуючими правовими позиціями
|
| 51 |
- Оцінка застосовності до нової справи
|
| 52 |
+
- Не є обов’язковим критерієм приймання MVP без окремого узгодження
|
| 53 |
|
| 54 |
## ⚙️ Конфігурація
|
| 55 |
|
main.py
CHANGED
|
@@ -796,26 +796,13 @@ def generate_legal_position(
|
|
| 796 |
raise Exception(f"Текст судового рішення занадто короткий або відсутній (довжина: {len(court_decision_text) if court_decision_text else 0} символів). Будь ласка, перевірте вхідні дані.")
|
| 797 |
|
| 798 |
if provider == ModelProvider.OPENAI.value:
|
| 799 |
-
# Diagnostic: test raw httpx connection before using OpenAI SDK
|
| 800 |
http_client = None
|
| 801 |
response_text = None
|
| 802 |
try:
|
| 803 |
print(f"[DEBUG] OpenAI pre-flight check...")
|
| 804 |
print(f"[DEBUG] openai SDK version: {openai.__version__}")
|
| 805 |
print(f"[DEBUG] httpx version: {httpx.__version__}")
|
| 806 |
-
|
| 807 |
-
|
| 808 |
-
# Quick raw httpx connectivity test to api.openai.com
|
| 809 |
-
try:
|
| 810 |
-
with httpx.Client(timeout=10.0, http2=False) as test_client:
|
| 811 |
-
test_resp = test_client.get("https://api.openai.com/v1/models",
|
| 812 |
-
headers={"Authorization": f"Bearer {OPENAI_API_KEY[:20]}...truncated"})
|
| 813 |
-
print(f"[DEBUG] Raw httpx test -> HTTP {test_resp.status_code}")
|
| 814 |
-
except Exception as pre_err:
|
| 815 |
-
import traceback
|
| 816 |
-
print(f"[WARNING] Raw httpx pre-flight failed: {type(pre_err).__name__}: {pre_err}")
|
| 817 |
-
print(f"[WARNING] Pre-flight traceback: {traceback.format_exc()}")
|
| 818 |
-
|
| 819 |
http_client = httpx.Client(
|
| 820 |
timeout=httpx.Timeout(120.0, connect=30.0),
|
| 821 |
http2=False,
|
|
@@ -1024,7 +1011,7 @@ def generate_legal_position(
|
|
| 1024 |
# Debug: check what we're sending to Anthropic
|
| 1025 |
print(f"[DEBUG] Sending to Anthropic - content length: {len(content)}")
|
| 1026 |
print(f"[DEBUG] Content preview: {content[:500]}")
|
| 1027 |
-
print(f"[DEBUG]
|
| 1028 |
|
| 1029 |
messages = [{
|
| 1030 |
"role": "user",
|
|
|
|
| 796 |
raise Exception(f"Текст судового рішення занадто короткий або відсутній (довжина: {len(court_decision_text) if court_decision_text else 0} символів). Будь ласка, перевірте вхідні дані.")
|
| 797 |
|
| 798 |
if provider == ModelProvider.OPENAI.value:
|
|
|
|
| 799 |
http_client = None
|
| 800 |
response_text = None
|
| 801 |
try:
|
| 802 |
print(f"[DEBUG] OpenAI pre-flight check...")
|
| 803 |
print(f"[DEBUG] openai SDK version: {openai.__version__}")
|
| 804 |
print(f"[DEBUG] httpx version: {httpx.__version__}")
|
| 805 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 806 |
http_client = httpx.Client(
|
| 807 |
timeout=httpx.Timeout(120.0, connect=30.0),
|
| 808 |
http2=False,
|
|
|
|
| 1011 |
# Debug: check what we're sending to Anthropic
|
| 1012 |
print(f"[DEBUG] Sending to Anthropic - content length: {len(content)}")
|
| 1013 |
print(f"[DEBUG] Content preview: {content[:500]}")
|
| 1014 |
+
print(f"[DEBUG] Anthropic API key configured: {bool(ANTHROPIC_API_KEY)}")
|
| 1015 |
|
| 1016 |
messages = [{
|
| 1017 |
"role": "user",
|