Skip to content

Commit 11b105e

Browse files
committed
test: fix part 3
1 parent acdbd69 commit 11b105e

File tree

1 file changed

+99
-23
lines changed

1 file changed

+99
-23
lines changed

posthog/test/ai/langchain/test_callbacks.py

Lines changed: 99 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -604,10 +604,8 @@ def test_graph_state(mock_client):
604604
graph.add_edge("fake_plain", "fake_llm")
605605
graph.add_edge("fake_llm", END)
606606

607-
result = graph.compile().invoke(
608-
{"messages": [HumanMessage(content="What's a bar?")], "xyz": None},
609-
config=config,
610-
)
607+
initial_state = {"messages": [HumanMessage(content="What's a bar?")], "xyz": None}
608+
result = graph.compile().invoke(initial_state, config=config)
611609

612610
assert len(result["messages"]) == 3
613611
assert isinstance(result["messages"][0], HumanMessage)
@@ -617,26 +615,104 @@ def test_graph_state(mock_client):
617615
assert isinstance(result["messages"][2], AIMessage)
618616
assert result["messages"][2].content == "It's a type of greeble."
619617

620-
assert mock_client.capture.call_count == 2
621-
generation_args = mock_client.capture.call_args_list[0][1]
622-
trace_args = mock_client.capture.call_args_list[1][1]
623-
assert generation_args["event"] == "$ai_generation"
618+
assert mock_client.capture.call_count == 11
619+
calls = [call[1] for call in mock_client.capture.call_args_list]
620+
621+
trace_args = calls[10]
622+
trace_props = calls[10]["properties"]
623+
624+
# Events are captured in the reverse order.
625+
# Check all trace_ids
626+
for call in calls:
627+
assert call["properties"]["$ai_trace_id"] == trace_props["$ai_trace_id"]
628+
629+
# First span, write the state
630+
assert calls[0]["event"] == "$ai_span"
631+
assert calls[0]["properties"]["$ai_parent_id"] == calls[2]["properties"]["$ai_span_id"]
632+
assert "$ai_span_id" in calls[0]["properties"]
633+
assert calls[0]["properties"]["$ai_input_state"] == initial_state
634+
assert calls[0]["properties"]["$ai_output_state"] == initial_state
635+
636+
# Second span, set the START node
637+
assert calls[1]["event"] == "$ai_span"
638+
assert calls[1]["properties"]["$ai_parent_id"] == calls[2]["properties"]["$ai_span_id"]
639+
assert "$ai_span_id" in calls[1]["properties"]
640+
assert calls[1]["properties"]["$ai_input_state"] == initial_state
641+
assert calls[1]["properties"]["$ai_output_state"] == initial_state
642+
643+
# Third span, finish initialization
644+
assert calls[2]["event"] == "$ai_span"
645+
assert "$ai_span_id" in calls[2]["properties"]
646+
assert calls[2]["properties"]["$ai_span_name"] == START
647+
assert calls[2]["properties"]["$ai_parent_id"] == trace_props["$ai_trace_id"]
648+
assert calls[2]["properties"]["$ai_input_state"] == initial_state
649+
assert calls[2]["properties"]["$ai_output_state"] == initial_state
650+
651+
# Fourth span, save the value of fake_plain during its execution
652+
second_state = {
653+
"messages": [HumanMessage(content="What's a bar?"), AIMessage(content="Let's explore bar.")],
654+
"xyz": "abc",
655+
}
656+
assert calls[3]["event"] == "$ai_span"
657+
assert calls[3]["properties"]["$ai_parent_id"] == calls[4]["properties"]["$ai_span_id"]
658+
assert "$ai_span_id" in calls[3]["properties"]
659+
assert calls[3]["properties"]["$ai_input_state"] == second_state
660+
assert calls[3]["properties"]["$ai_output_state"] == second_state
661+
662+
# Fifth span, run the fake_plain node
663+
assert calls[4]["event"] == "$ai_span"
664+
assert "$ai_span_id" in calls[4]["properties"]
665+
assert calls[4]["properties"]["$ai_span_name"] == "fake_plain"
666+
assert calls[4]["properties"]["$ai_parent_id"] == trace_props["$ai_trace_id"]
667+
assert calls[4]["properties"]["$ai_input_state"] == initial_state
668+
assert calls[4]["properties"]["$ai_output_state"] == second_state
669+
670+
# Sixth span, chat prompt template
671+
assert calls[5]["event"] == "$ai_span"
672+
assert calls[5]["properties"]["$ai_parent_id"] == calls[7]["properties"]["$ai_span_id"]
673+
assert "$ai_span_id" in calls[5]["properties"]
674+
assert calls[5]["properties"]["$ai_span_name"] == "ChatPromptTemplate"
675+
676+
# 7. Generation, fake_llm
677+
assert calls[6]["event"] == "$ai_generation"
678+
assert calls[6]["properties"]["$ai_parent_id"] == calls[7]["properties"]["$ai_span_id"]
679+
assert "$ai_generation_id" in calls[6]["properties"]
680+
assert "$ai_span_name" not in calls[6]["properties"]
681+
682+
# 8. Span, RunnableSequence
683+
assert calls[7]["event"] == "$ai_span"
684+
assert calls[7]["properties"]["$ai_parent_id"] == calls[9]["properties"]["$ai_span_id"]
685+
assert "$ai_span_id" in calls[7]["properties"]
686+
assert calls[7]["properties"]["$ai_span_name"] == "RunnableSequence"
687+
688+
# 9. Span, fake_llm write
689+
assert calls[8]["event"] == "$ai_span"
690+
assert calls[8]["properties"]["$ai_parent_id"] == calls[9]["properties"]["$ai_span_id"]
691+
assert "$ai_span_id" in calls[8]["properties"]
692+
693+
# 10. Span, fake_llm node
694+
assert calls[9]["event"] == "$ai_span"
695+
assert calls[9]["properties"]["$ai_parent_id"] == trace_props["$ai_trace_id"]
696+
assert "$ai_span_id" in calls[9]["properties"]
697+
assert calls[9]["properties"]["$ai_span_name"] == "fake_llm"
698+
699+
# 11. Trace
624700
assert trace_args["event"] == "$ai_trace"
625-
assert trace_args["properties"]["$ai_trace_name"] == "LangGraph"
626-
627-
assert len(trace_args["properties"]["$ai_input_state"]["messages"]) == 1
628-
assert isinstance(trace_args["properties"]["$ai_input_state"]["messages"][0], HumanMessage)
629-
assert trace_args["properties"]["$ai_input_state"]["messages"][0].content == "What's a bar?"
630-
assert trace_args["properties"]["$ai_input_state"]["messages"][0].type == "human"
631-
assert trace_args["properties"]["$ai_input_state"]["xyz"] is None
632-
assert len(trace_args["properties"]["$ai_output_state"]["messages"]) == 3
633-
634-
assert isinstance(trace_args["properties"]["$ai_output_state"]["messages"][0], HumanMessage)
635-
assert trace_args["properties"]["$ai_output_state"]["messages"][0].content == "What's a bar?"
636-
assert isinstance(trace_args["properties"]["$ai_output_state"]["messages"][1], AIMessage)
637-
assert trace_args["properties"]["$ai_output_state"]["messages"][1].content == "Let's explore bar."
638-
assert isinstance(trace_args["properties"]["$ai_output_state"]["messages"][2], AIMessage)
639-
assert trace_args["properties"]["$ai_output_state"]["messages"][2].content == "It's a type of greeble."
701+
assert trace_props["$ai_trace_name"] == "LangGraph"
702+
703+
assert len(trace_props["$ai_input_state"]["messages"]) == 1
704+
assert isinstance(trace_props["$ai_input_state"]["messages"][0], HumanMessage)
705+
assert trace_props["$ai_input_state"]["messages"][0].content == "What's a bar?"
706+
assert trace_props["$ai_input_state"]["messages"][0].type == "human"
707+
assert trace_props["$ai_input_state"]["xyz"] is None
708+
assert len(trace_props["$ai_output_state"]["messages"]) == 3
709+
710+
assert isinstance(trace_props["$ai_output_state"]["messages"][0], HumanMessage)
711+
assert trace_props["$ai_output_state"]["messages"][0].content == "What's a bar?"
712+
assert isinstance(trace_props["$ai_output_state"]["messages"][1], AIMessage)
713+
assert trace_props["$ai_output_state"]["messages"][1].content == "Let's explore bar."
714+
assert isinstance(trace_props["$ai_output_state"]["messages"][2], AIMessage)
715+
assert trace_props["$ai_output_state"]["messages"][2].content == "It's a type of greeble."
640716
assert trace_args["properties"]["$ai_output_state"]["xyz"] == "abc"
641717

642718

0 commit comments

Comments
 (0)