Spaces:
Paused
Paused
File size: 2,831 Bytes
9e65b56 1635ec4 9e65b56 1635ec4 9e65b56 | 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 83 84 85 86 87 88 89 90 91 92 | """Capability timeout/retry ๊ธฐ๋ณธ๊ฐ ๋ชจ๋.
Issue #163: capability๋ณ timeout๊ณผ retry ๊ธฐ๋ณธ๊ฐ์ ์ค์ ์ง์ค ๊ด๋ฆฌ.
ํ๊ฒฝ๋ณ์ GOVON_TOOL_TIMEOUT_{CAPABILITY_NAME} ์ผ๋ก ์ค๋ฒ๋ผ์ด๋ ๊ฐ๋ฅ.
์: GOVON_TOOL_TIMEOUT_API_LOOKUP=20 -> api_lookup timeout์ 20์ด๋ก ๋ณ๊ฒฝ
"""
from __future__ import annotations
import os
from dataclasses import dataclass
from typing import Dict
from loguru import logger
@dataclass(frozen=True)
class CapabilityDefaults:
"""capability๋ณ timeout/retry ๊ธฐ๋ณธ๊ฐ."""
timeout_sec: float
max_retries: int
# -----------------------------------------------------------------------
# ๊ธฐ๋ณธ๊ฐ ์ ์ (์ฝ๋๋ฒ ์ด์ค capability metadata์์ ์ถ์ถ)
# -----------------------------------------------------------------------
_DEFAULTS: Dict[str, CapabilityDefaults] = {
"api_lookup": CapabilityDefaults(timeout_sec=10.0, max_retries=1),
"issue_detector": CapabilityDefaults(timeout_sec=15.0, max_retries=0),
"stats_lookup": CapabilityDefaults(timeout_sec=15.0, max_retries=0),
"keyword_analyzer": CapabilityDefaults(timeout_sec=10.0, max_retries=0),
"demographics_lookup": CapabilityDefaults(timeout_sec=15.0, max_retries=0),
}
def get_timeout(capability_name: str) -> float:
"""capability์ timeout(์ด)์ ๋ฐํํ๋ค.
ํ๊ฒฝ๋ณ์ ``GOVON_TOOL_TIMEOUT_{CAPABILITY_NAME_UPPER}`` ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด
ํด๋น ๊ฐ์ ์ฌ์ฉํ๊ณ , ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ฐํํ๋ค.
Parameters
----------
capability_name : str
capability ์ด๋ฆ (์: "api_lookup").
Returns
-------
float
timeout ์ด. ์ ์ ์๋ capability๋ 10.0์ด.
"""
env_key = f"GOVON_TOOL_TIMEOUT_{capability_name.upper()}"
env_val = os.environ.get(env_key)
if env_val is not None:
try:
val = float(env_val)
if val > 0:
return val
logger.warning(
f"GOVON_TOOL_TIMEOUT_{capability_name.upper()} ๊ฐ์ด ์์๊ฐ ์๋๋๋ค: {env_val}"
)
except ValueError:
logger.warning(f"{env_key} ๊ฐ์ ์ซ์๋ก ํ์ฑํ ์ ์์ต๋๋ค: {env_val!r}")
defaults = _DEFAULTS.get(capability_name)
return defaults.timeout_sec if defaults else 10.0
def get_max_retries(capability_name: str) -> int:
"""capability์ ์ต๋ ์ฌ์๋ ํ์๋ฅผ ๋ฐํํ๋ค.
Parameters
----------
capability_name : str
capability ์ด๋ฆ.
Returns
-------
int
์ต๋ ์ฌ์๋ ํ์. ์ ์ ์๋ capability๋ 0.
"""
defaults = _DEFAULTS.get(capability_name)
return defaults.max_retries if defaults else 0
def get_all_defaults() -> Dict[str, CapabilityDefaults]:
"""๋ฑ๋ก๋ ๋ชจ๋ capability ๊ธฐ๋ณธ๊ฐ์ ๋ฐํํ๋ค."""
return dict(_DEFAULTS)
|