Spaces:
Runtime error
Runtime error
File size: 2,783 Bytes
515f392 | 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 | """
LangSmith μΆμ (tracing) μ νΈλ¦¬ν° λͺ¨λ.
LangGraph λ
Έλ μ€νμ LangSmithμμ μΆμ νκ³ λͺ¨λν°λ§νκΈ° μν λꡬλ₯Ό μ 곡ν©λλ€.
곡μ λ¬Έμ: https://docs.langchain.com/langsmith/trace-with-langgraph
"""
import os
import logging
import asyncio
from functools import wraps
from typing import Any, Callable
from inspect import iscoroutinefunction
from langsmith import traceable
logger = logging.getLogger(__name__)
def ensure_tracing_enabled() -> bool:
"""
LangSmith μΆμ μ΄ μ¬λ°λ₯΄κ² μ€μ λμλμ§ νμΈν©λλ€.
Returns:
bool: μΆμ μ΄ νμ±νλμ΄ μμΌλ©΄ True, κ·Έλ μ§ μμΌλ©΄ False
"""
required_vars = ["LANGCHAIN_TRACING_V2", "LANGCHAIN_API_KEY"]
missing_vars = [var for var in required_vars if not os.getenv(var)]
if missing_vars:
logger.warning(
"LangSmith μΆμ μ΄ λΉνμ±νλμμ΅λλ€. λλ½λ νκ²½λ³μ: %s",
", ".join(missing_vars)
)
return False
return True
def trace_node(node_name: str) -> Callable:
"""
LangGraph λ
Έλ μ€νμ μΆμ νλ λ°μ½λ μ΄ν°.
μ΄ λ°μ½λ μ΄ν°λ κ° λ
Έλμ μ
λ ₯/μΆλ ₯, μ€ν μκ°, μλ¬λ₯Ό
LangSmith λμ보λμ μλμΌλ‘ κΈ°λ‘ν©λλ€.
λκΈ° λ° λΉλκΈ° ν¨μ λͺ¨λ μ§μν©λλ€.
Args:
node_name: LangSmithμ νμλ λ
Έλ μ΄λ¦
Returns:
Callable: λ°μ½λ μ΄νΈλ ν¨μ
Example:
@trace_node("check_cache")
async def check_cache_node(state: AgentState) -> AgentState:
# λ
Έλ λ‘μ§
return state
"""
def decorator(func: Callable) -> Callable:
# async ν¨μμΈμ§ νμΈ
if iscoroutinefunction(func):
@wraps(func)
@traceable(name=node_name, run_type="chain")
async def async_wrapper(*args, **kwargs) -> Any:
try:
result = await func(*args, **kwargs)
return result
except Exception as e:
logger.error("π΄ λ
Έλ μ€ν¨: %s - %s", node_name, str(e))
raise
return async_wrapper
else:
@wraps(func)
@traceable(name=node_name, run_type="chain")
def sync_wrapper(*args, **kwargs) -> Any:
try:
result = func(*args, **kwargs)
return result
except Exception as e:
logger.error("π΄ λ
Έλ μ€ν¨: %s - %s", node_name, str(e))
raise
return sync_wrapper
return decorator
# λͺ¨λ import μ μλμΌλ‘ μΆμ μ€μ νμΈ
ensure_tracing_enabled()
|