diff --git a/kedro-agentic-workflows/conf/base/genai-config.yml b/kedro-agentic-workflows/conf/base/genai-config.yml index 623268d3..140c9f6b 100644 --- a/kedro-agentic-workflows/conf/base/genai-config.yml +++ b/kedro-agentic-workflows/conf/base/genai-config.yml @@ -52,12 +52,22 @@ intent_prompt_langfuse: # credentials: opik_credentials # --- Tracing --- -intent_tracer_langfuse: - type: kedro_datasets_experimental.langfuse.LangfuseTraceDataset - credentials: langfuse_credentials - mode: langchain # langchain | openai | sdk +# intent_tracer_langfuse: +# type: kedro_datasets_experimental.langfuse.LangfuseTraceDataset +# credentials: langfuse_credentials +# mode: langchain # langchain | openai | sdk | autogen + +intent_tracer_opik: + type: kedro_datasets_experimental.opik.OpikTraceDataset + credentials: opik_credentials + mode: langchain # langchain | openai | sdk | autogen + +# autogen_tracer_langfuse: +# type: kedro_datasets_experimental.langfuse.LangfuseTraceDataset +# credentials: langfuse_credentials +# mode: autogen -# intent_tracer_opik: -# type: kedro_datasets_experimental.opik.OpikTraceDataset -# credentials: opik_credentials -# mode: openai # langchain | openai | sdk +autogen_tracer_opik: + type: kedro_datasets_experimental.opik.OpikTraceDataset + credentials: opik_credentials + mode: autogen diff --git a/kedro-agentic-workflows/requirements.txt b/kedro-agentic-workflows/requirements.txt index 15dd5986..9e5492f0 100644 --- a/kedro-agentic-workflows/requirements.txt +++ b/kedro-agentic-workflows/requirements.txt @@ -4,7 +4,7 @@ ipython>=8.10 jupyterlab>=3.0 notebook kedro>=1.2.0 -kedro-datasets[pandas-sqltabledataset,pandas-sqlquerydataset,yaml-yamldataset,opik,langchain-chatopenaidataset, langfuse]~=9.0.0 +kedro-datasets[pandas-sqltabledataset,pandas-sqlquerydataset,yaml-yamldataset,opik,opik-opiktracedataset-autogen,langchain-chatopenaidataset,langfuse]~=9.0.0 kedro-viz>=12.3.0 langgraph~=1.0.0 scikit-learn~=1.7.2 diff --git a/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/intent_detection/pipeline.py b/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/intent_detection/pipeline.py index a81bac41..8c85383f 100755 --- a/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/intent_detection/pipeline.py +++ b/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/intent_detection/pipeline.py @@ -31,7 +31,7 @@ def create_pipeline(**kwargs) -> Pipeline: "params:user_id", "user_data", "session_id", - "intent_tracer_langfuse", + "intent_tracer_opik", ], outputs=["user_context", "session_config"], name="load_context_node", diff --git a/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/response_generation_autogen/nodes.py b/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/response_generation_autogen/nodes.py index f866e9f5..614b7645 100755 --- a/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/response_generation_autogen/nodes.py +++ b/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/response_generation_autogen/nodes.py @@ -16,6 +16,7 @@ def generate_response( intent_detection_result: dict, user_context: dict, session_config: dict, + tracer, ) -> dict: """ Run the ResponseGenerationAgent to produce a final answer. @@ -30,17 +31,37 @@ def generate_response( result = {"messages": [AIMessage(content=message)]} else: - agent = ResponseGenerationAgentAutogen(context=response_generation_context) - agent.compile() + # Wrap agent execution in a span for tracing + with tracer.start_as_current_span("response_generation") as span: + # Log input context to the span + span.set_attribute("intent", intent_detection_result["intent"]) + span.set_attribute( + "intent_reason", intent_detection_result.get("reason", "") + ) + span.set_attribute( + "user_id", + user_context.get("profile", {}).get("user_id", "unknown"), + ) - context = { - "messages": [], - "intent": intent_detection_result["intent"], - "intent_generator_summary": intent_detection_result["reason"], - "user_context": user_context, - } + agent = ResponseGenerationAgentAutogen(context=response_generation_context) + agent.compile() - result = agent.invoke(context, session_config) + context = { + "messages": [], + "intent": intent_detection_result["intent"], + "intent_generator_summary": intent_detection_result["reason"], + "user_context": user_context, + } + + result = agent.invoke(context, session_config) + + # Log output to the span + if result.get("messages"): + span.set_attribute( + "response", result["messages"][-1].content[:500] + ) # Truncate for safety + span.set_attribute("claim_created", result.get("claim_created", False)) + span.set_attribute("escalated", result.get("escalated", False)) for m in result["messages"]: try: diff --git a/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/response_generation_autogen/pipeline.py b/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/response_generation_autogen/pipeline.py index e7615c20..a116cd4d 100644 --- a/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/response_generation_autogen/pipeline.py +++ b/kedro-agentic-workflows/src/kedro_agentic_workflows/pipelines/response_generation_autogen/pipeline.py @@ -1,9 +1,6 @@ from kedro.pipeline import Pipeline, node, pipeline, llm_context_node, tool -from .nodes import ( - generate_response, - log_response_and_end_session, -) +from .nodes import generate_response, log_response_and_end_session from .tools import build_lookup_docs, build_get_user_claims, build_create_claim @@ -28,6 +25,8 @@ def create_pipeline(**kwargs) -> Pipeline: "intent_detection_result", "user_context", "session_config", + # "autogen_tracer_langfuse" + "autogen_tracer_opik" ], outputs="final_response", name="generate_response_node", @@ -39,4 +38,4 @@ def create_pipeline(**kwargs) -> Pipeline: name="end_session_node", ), ] - ) \ No newline at end of file + )