|
|
| import openai
|
| from langsmith.wrappers import wrap_openai
|
| import os
|
|
|
| print("🔌 APPLYING LANGSMITH TRACE PATCH...")
|
|
|
|
|
| _OriginalOpenAI = openai.OpenAI
|
| _OriginalAsyncOpenAI = openai.AsyncOpenAI
|
|
|
|
|
| def PatchedOpenAI(*args, **kwargs):
|
| print("✨ Creating Wrapped OpenAI Client (Sync)")
|
| client = _OriginalOpenAI(*args, **kwargs)
|
| return wrap_openai(client)
|
|
|
| def PatchedAsyncOpenAI(*args, **kwargs):
|
| print("✨ Creating Wrapped OpenAI Client (Async)")
|
| client = _OriginalAsyncOpenAI(*args, **kwargs)
|
| return wrap_openai(client)
|
|
|
|
|
| openai.OpenAI = PatchedOpenAI
|
| openai.AsyncOpenAI = PatchedAsyncOpenAI
|
|
|
| from langsmith import traceable
|
|
|
|
|
|
|
|
|
| def instrument_class(cls):
|
| for attr_name, attr_value in cls.__dict__.items():
|
| if callable(attr_value) and not attr_name.startswith("__"):
|
| setattr(cls, attr_name, traceable(attr_value, run_type="tool"))
|
| return cls
|
|
|
|
|