Skip to content

Commit 4f81e06

Browse files
sallyomclaude
andcommitted
Switch to get_client() and SDK 3.x recommended API
Changed from low-level Langfuse() client to the recommended get_client() approach for SDK 3.x: - Use configure() to set API credentials - Use get_client() to get the client instance - Use start_as_current_span() instead of start_span() - Use start_as_current_generation() instead of start_generation() This is the recommended approach per Langfuse SDK 3.x docs and should properly support update_trace(user_id=...) for user tracking. References: - https://langfuse.com/docs/sdk/python - https://langfuse.com/docs/tracing-features/users 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 4e0aa86 commit 4f81e06

File tree

1 file changed

+12
-19
lines changed

1 file changed

+12
-19
lines changed

components/runners/claude-code-runner/wrapper.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
# Langfuse for LLM observability (optional)
2626
try:
27-
from langfuse import Langfuse
27+
from langfuse import get_client, configure
2828
LANGFUSE_AVAILABLE = True
2929
except ImportError:
3030
LANGFUSE_AVAILABLE = False
@@ -197,41 +197,34 @@ async def _run_claude_agent_sdk(self, prompt: str):
197197
langfuse_enabled = os.getenv('LANGFUSE_ENABLED', '').strip().lower() in ('1', 'true', 'yes')
198198
if langfuse_enabled:
199199
try:
200-
langfuse_client = Langfuse(
200+
# Configure Langfuse client (SDK 3.x recommended approach)
201+
configure(
201202
public_key=os.getenv('LANGFUSE_PUBLIC_KEY'),
202203
secret_key=os.getenv('LANGFUSE_SECRET_KEY'),
203204
host=os.getenv('LANGFUSE_HOST')
204205
)
206+
langfuse_client = get_client()
205207

206208
# Extract user context for observability
207209
user_id = os.getenv('USER_ID', '').strip()
208210
user_name = os.getenv('USER_NAME', '').strip()
209211

210-
# Start a span for this session (Langfuse SDK 3.x)
211-
# Top-level span becomes the trace root
212-
# Try passing user_id in metadata AND calling update_trace()
213-
langfuse_session_span = langfuse_client.start_span(
212+
# Start a span for this session using SDK 3.x recommended API
213+
# Use start_as_current_span() with get_client()
214+
langfuse_session_span = langfuse_client.start_as_current_span(
214215
name="claude_agent_session",
215216
input={"prompt": prompt},
216-
user_id=user_id if user_id else None, # Try as direct parameter
217217
metadata={
218218
"session_id": self.context.session_id,
219219
"namespace": self.context.get_env('AGENTIC_SESSION_NAMESPACE', 'unknown'),
220220
"user_name": user_name if user_name else None,
221-
"user_id": user_id if user_id else None, # Also in metadata
222221
},
223222
)
224223

225-
# Also try update_trace() as backup
224+
# Set user_id on trace using update_trace() (SDK 3.x API)
226225
if user_id:
227-
try:
228-
result = langfuse_session_span.update_trace(user_id=user_id)
229-
logging.info(f"Langfuse: update_trace() returned: {result}")
230-
logging.info(f"Langfuse: Tracking session for user {user_name} ({user_id})")
231-
except Exception as e:
232-
logging.warning(f"Failed to set user_id on trace: {e}")
233-
import traceback
234-
logging.warning(traceback.format_exc())
226+
langfuse_session_span.update_trace(user_id=user_id)
227+
logging.info(f"Langfuse: Tracking session for user {user_name} ({user_id})")
235228

236229
logging.info(f"Langfuse tracing enabled for session")
237230
except Exception as e:
@@ -636,7 +629,7 @@ async def process_response_stream(client_obj):
636629
generation_kwargs["usage_details"] = usage_dict
637630
logging.info(f"Langfuse: Tracking generation with usage: {usage_dict}")
638631

639-
generation = langfuse_client.start_generation(**generation_kwargs)
632+
generation = langfuse_client.start_as_current_generation(**generation_kwargs)
640633
generation.end()
641634
except Exception as e:
642635
logging.debug(f"Failed to create Langfuse generation: {e}")
@@ -672,7 +665,7 @@ async def process_response_stream(client_obj):
672665
# Add Langfuse span for tool decision
673666
if langfuse_client and langfuse_session_span:
674667
try:
675-
tool_span = langfuse_client.start_span(
668+
tool_span = langfuse_client.start_as_current_span(
676669
name=f"tool_{tool_name}",
677670
input=tool_input,
678671
metadata={

0 commit comments

Comments
 (0)