fabagent / agents /llm.py
hee_!J
feat(observability): LangSmith ํ†ตํ•ฉ (wrap_openai + @traceable on 4-Tier agents)
c2127a5
Raw
History Blame Contribute Delete
1.14 kB
"""OpenAI ํด๋ผ์ด์–ธํŠธ์™€ ๋ชจ๋ธ ์„ค์ •
์„œ๋ธŒ์—์ด์ „ํŠธ(cause/impact/response) = SUBAGENT_MODEL
์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๋Š” ํ˜„์žฌ ๊ฒฐ์ •๋ก ์  ์‹œํ€€์„œ๋ผ LLM ํ˜ธ์ถœ ์—†์Œ
๋ชจ๋ธ๋ช…์„ ์—ฌ๊ธฐ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•ด ๊ต์ฒด๋ฅผ ์‰ฝ๊ฒŒ ํ•จ
LangSmith ํŠธ๋ ˆ์ด์‹ฑ: ํ™˜๊ฒฝ๋ณ€์ˆ˜ LANGSMITH_TRACING=true ๋ฉด wrap_openai ๋กœ ๋ชจ๋“  LLM ํ˜ธ์ถœ ์ž๋™ ์บก์ฒ˜
"""
import os
from functools import lru_cache
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
SUBAGENT_MODEL = "gpt-5-mini"
def _langsmith_enabled() -> bool:
return os.getenv("LANGSMITH_TRACING", "").lower() in ("true", "1", "yes")
@lru_cache(maxsize=1)
def client() -> OpenAI:
"""OpenAI ํด๋ผ์ด์–ธํŠธ, ์ฒซ ํ˜ธ์ถœ ์‹œ 1ํšŒ๋งŒ ์ƒ์„ฑ
LANGSMITH_TRACING=true ๋ฉด langsmith.wrappers.wrap_openai ๋กœ ๊ฐ์‹ธ
๋ชจ๋“  chat.completions.create ํ˜ธ์ถœ์ด ์ž๋™์œผ๋กœ LangSmith ๋Œ€์‹œ๋ณด๋“œ์— ํŠธ๋ ˆ์ด์Šค๋กœ ๊ธฐ๋ก๋จ
"""
base = OpenAI()
if _langsmith_enabled():
try:
from langsmith.wrappers import wrap_openai
return wrap_openai(base)
except ImportError:
pass
return base