|
|
import os |
|
|
import uuid |
|
|
import contextvars |
|
|
from typing import Optional, Dict, Any |
|
|
|
|
|
|
|
|
try: |
|
|
from langsmith import traceable, Client |
|
|
from langsmith import trace |
|
|
except Exception as e: |
|
|
|
|
|
traceable = lambda *args, **kwargs: (lambda f: f) |
|
|
class _Noop: |
|
|
def __call__(self, *args, **kwargs): |
|
|
class _Ctx: |
|
|
def __enter__(self): |
|
|
class _Run: |
|
|
id = None |
|
|
return _Run() |
|
|
def __exit__(self, exc_type, exc, tb): |
|
|
return False |
|
|
return _Ctx() |
|
|
trace = _Noop() |
|
|
Client = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DEFAULT_LANGSMITH_API_KEY = "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" |
|
|
DEFAULT_PROJECT = "medical_chatbot" |
|
|
|
|
|
os.environ.setdefault("LANGSMITH_TRACING_V2", "true") |
|
|
os.environ.setdefault("LANGSMITH_API_KEY", DEFAULT_LANGSMITH_API_KEY) |
|
|
os.environ.setdefault("LANGCHAIN_PROJECT", DEFAULT_PROJECT) |
|
|
os.environ.setdefault("LANGSMITH_PROJECT", DEFAULT_PROJECT) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_langsmith_client: Optional[Client] = None |
|
|
try: |
|
|
if Client is not None: |
|
|
_langsmith_client = Client( |
|
|
api_url="https://api.smith.langchain.com", |
|
|
api_key=os.environ.get("LANGSMITH_API_KEY"), |
|
|
) |
|
|
except Exception: |
|
|
_langsmith_client = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConversationTracker: |
|
|
def __init__(self) -> None: |
|
|
self.session_id = str(uuid.uuid4()) |
|
|
self.conversation_count = 0 |
|
|
|
|
|
def start_new_session(self) -> None: |
|
|
self.session_id = str(uuid.uuid4()) |
|
|
self.conversation_count = 0 |
|
|
|
|
|
def get_session_metadata(self, increment: bool = False) -> Dict[str, Any]: |
|
|
if increment: |
|
|
self.conversation_count += 1 |
|
|
return { |
|
|
"session_id": self.session_id, |
|
|
"conversation_count": self.conversation_count, |
|
|
"application": os.environ.get("LANGSMITH_PROJECT", DEFAULT_PROJECT), |
|
|
"version": "1.0", |
|
|
} |
|
|
|
|
|
|
|
|
conversation_tracker = ConversationTracker() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def log_to_langsmith(key: str, value: dict, run_id: Optional[str] = None) -> None: |
|
|
client = _langsmith_client |
|
|
if not client: |
|
|
return |
|
|
try: |
|
|
client.create_feedback( |
|
|
run_id=run_id, |
|
|
key=key, |
|
|
value=value, |
|
|
project=os.environ.get("LANGSMITH_PROJECT", DEFAULT_PROJECT), |
|
|
) |
|
|
except Exception: |
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
__all__ = [ |
|
|
"traceable", |
|
|
"trace", |
|
|
"Client", |
|
|
"conversation_tracker", |
|
|
"log_to_langsmith", |
|
|
] |
|
|
|