Skip to content
Merged
Show file tree
Hide file tree
Changes from 50 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
637201f
test(langchain): Consolidate available tools assertion
alexander-alderman-webb Mar 20, 2026
d1d8160
whitespace change
alexander-alderman-webb Mar 20, 2026
fbde33f
test(langchain): Consolidate span origin assertion
alexander-alderman-webb Mar 20, 2026
a4ed760
test(langchain): Replace mocks with httpx types
alexander-alderman-webb Mar 20, 2026
f8d42e9
different function
alexander-alderman-webb Mar 20, 2026
fccd72f
simplify
alexander-alderman-webb Mar 20, 2026
d832e71
Merge branch 'webb/langchain/consolidate-tool-test' into webb/langcha…
alexander-alderman-webb Mar 20, 2026
258e72e
Merge branch 'webb/langchain/span-origin' into webb/langchain/remove-…
alexander-alderman-webb Mar 20, 2026
685f4f2
test(langchain): Add basic agent test with Responses call
alexander-alderman-webb Mar 20, 2026
dc31e7f
add conftest
alexander-alderman-webb Mar 20, 2026
ae4f8d3
remove unused variable
alexander-alderman-webb Mar 20, 2026
1ee423c
merge and version check
alexander-alderman-webb Mar 20, 2026
b693ad2
fix undefined global
alexander-alderman-webb Mar 20, 2026
5b1480a
Merge branch 'webb/langchain/remove-mocks' into webb/langchain/add-ba…
alexander-alderman-webb Mar 20, 2026
014add2
simplify openai-agents
alexander-alderman-webb Mar 20, 2026
f4a8602
remove types that have default values
alexander-alderman-webb Mar 23, 2026
a728bd0
test(langchain): Add tool execution test
alexander-alderman-webb Mar 23, 2026
df300a9
test(langchain): Add text completion test
alexander-alderman-webb Mar 23, 2026
ac173ce
Merge branch 'master' into webb/langchain/consolidate-tool-test
alexander-alderman-webb Mar 23, 2026
c7552cf
Merge branch 'webb/langchain/consolidate-tool-test' into webb/langcha…
alexander-alderman-webb Mar 23, 2026
3ac4da9
Merge branch 'webb/langchain/span-origin' into webb/langchain/remove-…
alexander-alderman-webb Mar 23, 2026
4e39d36
Merge branch 'webb/langchain/remove-mocks' into webb/langchain/add-ba…
alexander-alderman-webb Mar 23, 2026
f1f3584
Merge branch 'webb/langchain/add-basic-test' into webb/langchain/tool…
alexander-alderman-webb Mar 23, 2026
260b648
Merge branch 'webb/langchain/tool-test' into webb/langchain/text-comp…
alexander-alderman-webb Mar 23, 2026
b6e9f70
add agent invocation origin assertion
alexander-alderman-webb Mar 23, 2026
6fd0c69
Merge branch 'webb/langchain/span-origin' into webb/langchain/remove-…
alexander-alderman-webb Mar 23, 2026
81b3178
Merge branch 'webb/langchain/remove-mocks' into webb/langchain/add-ba…
alexander-alderman-webb Mar 23, 2026
4ed8d2e
Merge branch 'webb/langchain/add-basic-test' into webb/langchain/tool…
alexander-alderman-webb Mar 23, 2026
9beb3f4
Merge branch 'webb/langchain/tool-test' into webb/langchain/text-comp…
alexander-alderman-webb Mar 23, 2026
86f4a42
do not use mutable default values
alexander-alderman-webb Mar 23, 2026
0016f1f
Merge branch 'webb/langchain/add-basic-test' into webb/langchain/tool…
alexander-alderman-webb Mar 23, 2026
e6bfe4d
remove redundant assertion
alexander-alderman-webb Mar 23, 2026
8e2cec9
fix legacy import
alexander-alderman-webb Mar 23, 2026
4dc9f04
keep old is not None assertion
alexander-alderman-webb Mar 23, 2026
ce30f2b
Merge branch 'webb/langchain/consolidate-tool-test' into webb/langcha…
alexander-alderman-webb Mar 23, 2026
498541b
Merge branch 'webb/langchain/span-origin' into webb/langchain/remove-…
alexander-alderman-webb Mar 23, 2026
7476057
Merge branch 'webb/langchain/remove-mocks' into webb/langchain/add-ba…
alexander-alderman-webb Mar 23, 2026
3891d5d
Merge branch 'webb/langchain/add-basic-test' into webb/langchain/tool…
alexander-alderman-webb Mar 23, 2026
d6910d2
Merge branch 'webb/langchain/tool-test' into webb/langchain/text-comp…
alexander-alderman-webb Mar 23, 2026
62f4f38
remove types with default values
alexander-alderman-webb Mar 23, 2026
94bdcb1
Merge branch 'webb/langchain/remove-mocks' into webb/langchain/add-ba…
alexander-alderman-webb Mar 23, 2026
60158dd
Merge branch 'webb/langchain/add-basic-test' into webb/langchain/tool…
alexander-alderman-webb Mar 23, 2026
e1c9d78
Merge branch 'webb/langchain/tool-test' into webb/langchain/text-comp…
alexander-alderman-webb Mar 23, 2026
787bf58
do not gate token assertions and typo
alexander-alderman-webb Mar 23, 2026
5d2353a
Merge branch 'webb/langchain/add-basic-test' into webb/langchain/tool…
alexander-alderman-webb Mar 23, 2026
1b4b2ba
do not gate token assertions
alexander-alderman-webb Mar 23, 2026
4fd2b14
Merge branch 'webb/langchain/tool-test' into webb/langchain/text-comp…
alexander-alderman-webb Mar 23, 2026
c7e871b
assert that there is only one tool span
alexander-alderman-webb Mar 23, 2026
09673b7
expect string response tool calls
alexander-alderman-webb Mar 23, 2026
5f3a05e
Merge branch 'webb/langchain/tool-test' into webb/langchain/text-comp…
alexander-alderman-webb Mar 23, 2026
aac8a1d
merge master
alexander-alderman-webb Mar 24, 2026
503b28c
.
alexander-alderman-webb Mar 24, 2026
0631f88
.
alexander-alderman-webb Mar 24, 2026
6f71424
typo
alexander-alderman-webb Mar 24, 2026
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
118 changes: 115 additions & 3 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@
from sentry_sdk.transport import Transport
from sentry_sdk.utils import reraise

try:
import openai
except ImportError:
openai = None


from tests import _warning_recorder, _warning_recorder_mgr

from typing import TYPE_CHECKING
Expand Down Expand Up @@ -1018,21 +1024,29 @@ async def inner(values):

@pytest.fixture
def server_side_event_chunks():
def inner(events):
def inner(events, include_event_type=True):
for event in events:
payload = event.model_dump()
chunk = f"event: {payload['type']}\ndata: {json.dumps(payload)}\n\n"
chunk = (
f"event: {payload['type']}\ndata: {json.dumps(payload)}\n\n"
if include_event_type
else f"data: {json.dumps(payload)}\n\n"
)
yield chunk.encode("utf-8")

return inner


@pytest.fixture
def get_model_response():
def inner(response_content, serialize_pydantic=False):
def inner(response_content, serialize_pydantic=False, request_headers=None):
if request_headers is None:
request_headers = {}

model_request = HttpxRequest(
"POST",
"/responses",
headers=request_headers,
)

if serialize_pydantic:
Expand All @@ -1049,6 +1063,104 @@ def inner(response_content, serialize_pydantic=False):
return inner


@pytest.fixture
def nonstreaming_responses_model_response():
return openai.types.responses.Response(
id="resp_123",
output=[
openai.types.responses.ResponseOutputMessage(
id="msg_123",
type="message",
status="completed",
content=[
openai.types.responses.ResponseOutputText(
text="Hello, how can I help you?",
type="output_text",
annotations=[],
)
],
role="assistant",
)
],
parallel_tool_calls=False,
tool_choice="none",
tools=[],
created_at=10000000,
model="gpt-4",
object="response",
usage=openai.types.responses.ResponseUsage(
input_tokens=10,
input_tokens_details=openai.types.responses.response_usage.InputTokensDetails(
cached_tokens=0,
),
output_tokens=20,
output_tokens_details=openai.types.responses.response_usage.OutputTokensDetails(
reasoning_tokens=5,
),
total_tokens=30,
),
)


@pytest.fixture
def responses_tool_call_model_responses():
def inner(
tool_name: str,
arguments: str,
response_model: str,
response_text: str,
response_ids: "Iterator[str]",
usages: "Iterator[openai.types.responses.ResponseUsage]",
):
yield openai.types.responses.Response(
id=next(response_ids),
output=[
openai.types.responses.ResponseFunctionToolCall(
id="call_123",
call_id="call_123",
name=tool_name,
type="function_call",
arguments=arguments,
)
],
parallel_tool_calls=False,
tool_choice="none",
tools=[],
created_at=10000000,
model=response_model,
object="response",
usage=next(usages),
)

yield openai.types.responses.Response(
id=next(response_ids),
output=[
openai.types.responses.ResponseOutputMessage(
id="msg_final",
type="message",
status="completed",
content=[
openai.types.responses.ResponseOutputText(
text=response_text,
type="output_text",
annotations=[],
)
],
role="assistant",
)
],
parallel_tool_calls=False,
tool_choice="none",
tools=[],
created_at=10000000,
model=response_model,
object="response",
usage=next(usages),
)

return inner


class MockServerRequestHandler(BaseHTTPRequestHandler):
def do_GET(self): # noqa: N802
# Process an HTTP GET request and return a response.
Expand Down
Loading
Loading