Spaces:
Sleeping
Sleeping
| """ | |
| 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): | |
| 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: | |
| 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() | |