File size: 2,009 Bytes
d2585c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""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+"]