Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,13 @@ intent_prompt_langfuse:
sync_policy: local # local|remote|strict
mode: langchain # langchain|sdk

# intent_prompt_opik:
# type: kedro_datasets_experimental.opik.OpikPromptDataset
# filepath: data/intent_detection/prompts/intent_prompt_opik.json
# prompt_name: "intent-classifier"
# prompt_type: "chat"
# credentials: opik_credentials

# --- Tracing ---
intent_tracer_langfuse:
type: kedro_datasets_experimental.langfuse.LangfuseTraceDataset
credentials: langfuse_credentials
mode: langchain # langchain | openai | sdk
mode: langchain # langchain | openai | sdk | autogen

# intent_tracer_opik:
# type: kedro_datasets_experimental.opik.OpikTraceDataset
# credentials: opik_credentials
# mode: openai # langchain | openai | sdk
autogen_tracer_langfuse:
type: kedro_datasets_experimental.langfuse.LangfuseTraceDataset
credentials: langfuse_credentials
mode: autogen
54 changes: 54 additions & 0 deletions kedro-agentic-workflows/conf/opik/genai-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# --- LLMs setup ---
llm:
type: langchain.ChatOpenAIDataset
kwargs:
model: "gpt-4o"
temperature: 0.0
credentials: openai

llm_openai:
type: kedro_agentic_workflows.datasets.openai_model_dataset.OpenAIModelDataset
model_name: "gpt-4o"
model_settings:
temperature: 0.0
credentials: openai

llm_autogen:
type: kedro_agentic_workflows.datasets.autogen_model_client.OpenAIChatCompletionClientDataset
kwargs:
model: "gpt-4o"
temperature: 0.0
credentials: openai

# --- Prompts ---
tool_prompt:
type: kedro_datasets_experimental.langchain.LangChainPromptDataset
filepath: data/response_generation/prompts/tool.txt
template: PromptTemplate
dataset:
type: text.TextDataset

response_prompt:
type: kedro_datasets_experimental.langchain.LangChainPromptDataset
filepath: data/response_generation/prompts/response.yml
template: ChatPromptTemplate
dataset:
type: yaml.YAMLDataset

intent_prompt_opik:
type: kedro_datasets_experimental.opik.OpikPromptDataset
filepath: data/intent_detection/prompts/intent_prompt_opik.json
prompt_name: "intent-classifier"
prompt_type: "chat"
credentials: opik_credentials

# --- Tracing ---
intent_tracer_opik:
type: kedro_datasets_experimental.opik.OpikTraceDataset
credentials: opik_credentials
mode: openai

autogen_tracer_opik:
type: kedro_datasets_experimental.opik.OpikTraceDataset
credentials: opik_credentials
mode: autogen
12 changes: 12 additions & 0 deletions kedro-agentic-workflows/requirements-langfuse.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
autogen-agentchat
autogen-ext[openai]
ipython>=8.10
jupyterlab>=3.0
notebook
kedro>=1.2.0
kedro-datasets[pandas-sqltabledataset,pandas-sqlquerydataset,yaml-yamldataset,langchain-chatopenaidataset,langfuse,langfuse-langfusetracedataset-autogen]~=9.0.0
kedro-viz>=12.3.0
langgraph~=1.0.0
scikit-learn~=1.7.2
questionary~=2.1.1
openai-agents
Original file line number Diff line number Diff line change
Expand Up @@ -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,langchain-chatopenaidataset,opik]~=9.0.0
kedro-viz>=12.3.0
langgraph~=1.0.0
scikit-learn~=1.7.2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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:
Expand Down
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -23,11 +20,11 @@ def create_pipeline(**kwargs) -> Pipeline:
),
node(
func=generate_response,
inputs=[
"response_generation_context",
inputs=["response_generation_context",
"intent_detection_result",
"user_context",
"session_config",
"autogen_tracer_langfuse"
],
outputs="final_response",
name="generate_response_node",
Expand All @@ -39,4 +36,4 @@ def create_pipeline(**kwargs) -> Pipeline:
name="end_session_node",
),
]
)
)