fix: Langfuse SDK v4 migration, tracing improvements, and LLM config
- Langfuse SDK v4: fix prompt-to-trace linking (as_type=generation) - tracing: compile_prompt with Langfuse managed prompt fallback - journey: remove journey CLI subcommand (keep only interactive) - LLM: add service-specific llm modules for batch-agent and chat - gitignore: exclude eval private test data - config: add LANGFUSE settings to shared config
This commit is contained in:
@@ -232,6 +232,38 @@ def compile_prompt(
|
||||
return fallback.format(**variables)
|
||||
|
||||
|
||||
def get_prompt_object(
|
||||
name: str,
|
||||
*,
|
||||
version: int | None = None,
|
||||
label: str | None = None,
|
||||
cache_ttl_seconds: int = 300,
|
||||
) -> Any | None:
|
||||
"""Fetch the raw Langfuse prompt *object* (not the compiled string).
|
||||
|
||||
Returns ``None`` when Langfuse is disabled or the prompt is not found.
|
||||
Use this when you need to pass the prompt to ``start_observation(prompt=...)``
|
||||
for linking the prompt to a trace in the Langfuse UI.
|
||||
"""
|
||||
lf = _get_client()
|
||||
if lf is None:
|
||||
return None
|
||||
|
||||
try:
|
||||
kwargs: dict[str, Any] = {
|
||||
"name": name,
|
||||
"cache_ttl_seconds": cache_ttl_seconds,
|
||||
}
|
||||
if version is not None:
|
||||
kwargs["version"] = version
|
||||
if label is not None:
|
||||
kwargs["label"] = label
|
||||
return lf.get_prompt(**kwargs)
|
||||
except Exception as exc:
|
||||
logger.warning("tracing: get_prompt_object(%s) failed: %s", name, exc)
|
||||
return None
|
||||
|
||||
|
||||
def link_prompt_to_trace(
|
||||
span: Any,
|
||||
prompt_name: str,
|
||||
@@ -239,19 +271,19 @@ def link_prompt_to_trace(
|
||||
version: int | None = None,
|
||||
label: str | None = None,
|
||||
) -> None:
|
||||
"""Attach prompt metadata to a span/trace."""
|
||||
"""Link a Langfuse managed prompt to a span/observation.
|
||||
|
||||
Uses the SDK v4 ``prompt=`` parameter so that the prompt version
|
||||
appears linked in the Langfuse UI with metrics tracking.
|
||||
"""
|
||||
lf = _get_client()
|
||||
if lf is None or isinstance(span, _NullSpan):
|
||||
return
|
||||
|
||||
try:
|
||||
kwargs: dict[str, Any] = {"name": prompt_name}
|
||||
if version is not None:
|
||||
kwargs["version"] = version
|
||||
if label is not None:
|
||||
kwargs["label"] = label
|
||||
prompt = lf.get_prompt(**kwargs)
|
||||
span.update(metadata={"prompt": {"name": prompt_name, "version": prompt.version}})
|
||||
prompt = get_prompt_object(prompt_name, version=version, label=label)
|
||||
if prompt is not None:
|
||||
span.update(prompt=prompt)
|
||||
except Exception as exc:
|
||||
logger.warning("tracing: link_prompt_to_trace(%s) failed: %s", prompt_name, exc)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user