umyunsang's picture
Upload folder using huggingface_hub
d2585c1 verified
"""E2E ํ…Œ์ŠคํŠธ ์„ค์ • ๋ฐ ์ƒ์ˆ˜."""
from __future__ import annotations
import os
import time
from dataclasses import dataclass, field
from typing import Dict
BASE_URL = os.environ.get("GOVON_RUNTIME_URL", "http://localhost:7860").rstrip("/")
API_KEY = os.environ.get("API_KEY")
TIMEOUT = int(os.environ.get("E2E_TIMEOUT", "300"))
BASE_MODEL = os.environ.get("BASE_MODEL", "LGAI-EXAONE/EXAONE-4.0-32B-AWQ")
TIMESTAMP = time.strftime("%Y%m%d_%H%M%S")
RESULTS_PATH = os.environ.get("E2E_RESULTS_PATH", f"e2e_results_{TIMESTAMP}.json")
LOG_PATH = os.environ.get("E2E_LOG_PATH", f"e2e_log_{TIMESTAMP}.jsonl")
VALID_TOOLS = frozenset(
{
"api_lookup",
"draft_response",
"issue_detector",
"stats_lookup",
"keyword_analyzer",
"demographics_lookup",
}
)
# ReAct 5-node ๊ทธ๋ž˜ํ”„ ํ‘œ์ค€ ํ๋ฆ„ (์Šน์ธ ๊ฒฝ๋กœ)
EXPECTED_APPROVED_FLOW = [
"session_load",
"agent",
"approval_wait",
"tools",
"agent",
"persist",
]
# ๊ฑฐ์ ˆ ๊ฒฝ๋กœ
EXPECTED_REJECTED_FLOW = [
"session_load",
"agent",
"approval_wait",
"persist",
]
@dataclass(frozen=True)
class NodeSLA:
"""๋…ธ๋“œ๋ณ„ SLA ์ž„๊ณ„๊ฐ’ (์ดˆ)."""
name: str
max_p95_sec: float
NODE_SLA_THRESHOLDS: list[NodeSLA] = [
NodeSLA("agent", 60.0),
NodeSLA("tools", 60.0),
NodeSLA("session_load", 5.0),
NodeSLA("persist", 5.0),
]
LEGAL_PATTERNS = [
r"์ œ\s*\d+\s*์กฐ",
r"์ œ\s*\d+\s*ํ•ญ",
r"๋ฒ•๋ฅ ",
r"์‹œํ–‰๋ น",
r"์กฐ๋ก€",
r"ํŒ๋ก€",
r"๋Œ€๋ฒ•์›",
r"๋ฒ•",
r"๋ น",
r"๊ทœ์ •",
]
CIVIL_LAW_PATTERNS = [r"๋ฏผ๋ฒ•", r"์ œ\s*\d+\s*์กฐ", r"์ž„๋Œ€์ฐจ", r"๊ณ„์•ฝ", r"์†ํ•ด๋ฐฐ์ƒ", r"์ฑ„๊ถŒ", r"์ฑ„๋ฌด"]
CRIMINAL_LAW_PATTERNS = [r"ํ˜•๋ฒ•", r"ํ˜•์‚ฌ", r"์ฒ˜๋ฒŒ", r"๋ฒŒ๊ธˆ", r"์ง•์—ญ", r"๋ณดํ˜ธ๋ฒ•", r"์ œ\s*\d+\s*์กฐ"]
IP_PATTERNS = [r"์ƒํ‘œ๋ฒ•", r"ํŠนํ—ˆ๋ฒ•", r"์ €์ž‘๊ถŒ", r"์ง€์‹์žฌ์‚ฐ", r"์ œ\s*\d+\s*์กฐ", r"์นจํ•ด"]
PRECEDENT_PATTERNS = [r"๋Œ€๋ฒ•์›", r"ํŒ๋ก€", r"ํŒ๊ฒฐ", r"์„ ๊ณ ", r"\d{4}\s*[๋‹ค๋‚˜]\s*\d+"]