Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
sabrenner committed Feb 4, 2025
1 parent 87e08aa commit 460994a
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 150 deletions.
211 changes: 74 additions & 137 deletions tests/contrib/langchain/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,28 +210,29 @@ def responder(module, client_class_key, http_client_key, endpoint_path: list[str
yield


@pytest.fixture
@pytest.mark.respx()
def openai_completion(respx_mock):
def _openai_completion_object(
n: int = 1,
):
from datetime import datetime

import httpx
from openai.types.completion import Completion
from openai.types.completion_choice import CompletionChoice
from openai.types.completion_usage import CompletionUsage

choice = CompletionChoice(
text="I am a helpful assistant.",
index=0,
logprobs=None,
finish_reason="length",
)

choices = [choice for _ in range(n)]

completion = Completion(
id="foo",
model="gpt-3.5-turbo-instruct",
object="text_completion",
choices=[
CompletionChoice(
text="I am a helpful assistant.",
index=0,
logprobs=None,
finish_reason="length",
)
],
choices=choices,
created=int(datetime.now().timestamp()),
usage=CompletionUsage(
prompt_tokens=5,
Expand All @@ -240,37 +241,35 @@ def openai_completion(respx_mock):
),
)

respx_mock.post("/v1/completions").mock(return_value=httpx.Response(200, json=completion.model_dump(mode="json")))
return completion


@pytest.fixture
@pytest.mark.respx()
def openai_completion_multiple(respx_mock):
def _openai_chat_completion_object(
n: int = 1,
tools: bool = False,
):
from datetime import datetime

import httpx
from openai.types.completion import Completion
from openai.types.completion_choice import CompletionChoice
from openai.types.chat import ChatCompletionMessage
from openai.types.chat.chat_completion import ChatCompletion
from openai.types.chat.chat_completion import Choice
from openai.types.completion_usage import CompletionUsage

completion = Completion(
choice = Choice(
finish_reason="stop",
index=0,
message=ChatCompletionMessage(
content="Hello world!",
role="assistant",
),
)
choices = [choice for _ in range(n)]

completion = ChatCompletion(
id="foo",
model="gpt-3.5-turbo-instruct",
object="text_completion",
choices=[
CompletionChoice(
text="I am a helpful assistant.",
index=0,
logprobs=None,
finish_reason="length",
),
CompletionChoice(
text="I am a helpful assistant too!",
index=1,
logprobs=None,
finish_reason="length",
),
],
model="gpt-4",
object="chat.completion",
choices=choices,
created=int(datetime.now().timestamp()),
usage=CompletionUsage(
prompt_tokens=5,
Expand All @@ -279,6 +278,42 @@ def openai_completion_multiple(respx_mock):
),
)

if tools:
from openai.types.chat.chat_completion_message_tool_call import ChatCompletionMessageToolCall
from openai.types.chat.chat_completion_message_tool_call import Function

tool_call = ChatCompletionMessageToolCall(
function=Function(
arguments='{"a":1,"b":2}',
name="add",
),
id="bar",
type="function",
)

for choice in completion.choices:
choice.message.tool_calls = [tool_call]

return completion


@pytest.fixture
@pytest.mark.respx()
def openai_completion(respx_mock):
completion = _openai_completion_object()

import httpx

respx_mock.post("/v1/completions").mock(return_value=httpx.Response(200, json=completion.model_dump(mode="json")))


@pytest.fixture
@pytest.mark.respx()
def openai_completion_multiple(respx_mock):
import httpx

completion = _openai_completion_object(n=2)

respx_mock.post("/v1/completions").mock(return_value=httpx.Response(200, json=completion.model_dump(mode="json")))


Expand All @@ -305,35 +340,9 @@ def openai_completion_error(respx_mock):
@pytest.fixture
@pytest.mark.respx()
def openai_chat_completion(respx_mock):
from datetime import datetime

import httpx
from openai.types.chat import ChatCompletionMessage
from openai.types.chat.chat_completion import ChatCompletion
from openai.types.chat.chat_completion import Choice
from openai.types.completion_usage import CompletionUsage

completion = ChatCompletion(
id="foo",
model="gpt-4",
object="chat.completion",
choices=[
Choice(
finish_reason="stop",
index=0,
message=ChatCompletionMessage(
content="Hello world!",
role="assistant",
),
)
],
created=int(datetime.now().timestamp()),
usage=CompletionUsage(
prompt_tokens=5,
completion_tokens=5,
total_tokens=10,
),
)
completion = _openai_chat_completion_object()

respx_mock.post("/v1/chat/completions").mock(
return_value=httpx.Response(200, json=completion.model_dump(mode="json"))
Expand All @@ -343,43 +352,9 @@ def openai_chat_completion(respx_mock):
@pytest.fixture
@pytest.mark.respx()
def openai_chat_completion_multiple(respx_mock):
from datetime import datetime

import httpx
from openai.types.chat import ChatCompletionMessage
from openai.types.chat.chat_completion import ChatCompletion
from openai.types.chat.chat_completion import Choice
from openai.types.completion_usage import CompletionUsage

completion = ChatCompletion(
id="foo",
model="gpt-4",
object="chat.completion",
choices=[
Choice(
finish_reason="stop",
index=0,
message=ChatCompletionMessage(
content="Hello world!",
role="assistant",
),
),
Choice(
finish_reason="stop",
index=0,
message=ChatCompletionMessage(
content="World hello!",
role="assistant",
),
),
],
created=int(datetime.now().timestamp()),
usage=CompletionUsage(
prompt_tokens=5,
completion_tokens=5,
total_tokens=10,
),
)
completion = _openai_chat_completion_object(n=2)

respx_mock.post("/v1/chat/completions").mock(
return_value=httpx.Response(200, json=completion.model_dump(mode="json"))
Expand All @@ -389,47 +364,9 @@ def openai_chat_completion_multiple(respx_mock):
@pytest.fixture
@pytest.mark.respx()
def openai_chat_completion_tools(respx_mock):
from datetime import datetime

import httpx
from openai.types.chat import ChatCompletionMessage
from openai.types.chat.chat_completion import ChatCompletion
from openai.types.chat.chat_completion import Choice
from openai.types.chat.chat_completion_message_tool_call import ChatCompletionMessageToolCall
from openai.types.chat.chat_completion_message_tool_call import Function
from openai.types.completion_usage import CompletionUsage

completion = ChatCompletion(
id="foo",
model="gpt-4",
object="chat.completion",
choices=[
Choice(
finish_reason="stop",
index=0,
message=ChatCompletionMessage(
content="Hello world!",
role="assistant",
tool_calls=[
ChatCompletionMessageToolCall(
function=Function(
arguments='{"a":1,"b":2}',
name="add",
),
id="bar",
type="function",
),
],
),
)
],
created=int(datetime.now().timestamp()),
usage=CompletionUsage(
prompt_tokens=5,
completion_tokens=5,
total_tokens=10,
),
)
completion = _openai_chat_completion_object(tools=True)

respx_mock.post("/v1/chat/completions").mock(
return_value=httpx.Response(200, json=completion.model_dump(mode="json"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"error": 0,
"meta": {
"_dd.p.dm": "-0",
"_dd.p.tid": "67a102f200000000",
"_dd.p.tid": "67a257a700000000",
"langchain.request.api_key": "...key>",
"langchain.request.messages.0.0.content": "Respond like a frat boy.",
"langchain.request.messages.0.0.message_type": "SystemMessage",
Expand All @@ -30,14 +30,14 @@
"langchain.request.type": "chat_model",
"langchain.response.completions.0.0.content": "Hello world!",
"langchain.response.completions.0.0.message_type": "AIMessage",
"langchain.response.completions.0.1.content": "World hello!",
"langchain.response.completions.0.1.content": "Hello world!",
"langchain.response.completions.0.1.message_type": "AIMessage",
"langchain.response.completions.1.0.content": "Hello world!",
"langchain.response.completions.1.0.message_type": "AIMessage",
"langchain.response.completions.1.1.content": "World hello!",
"langchain.response.completions.1.1.content": "Hello world!",
"langchain.response.completions.1.1.message_type": "AIMessage",
"language": "python",
"runtime-id": "424868b67e904e92b8626273a6e771f6"
"runtime-id": "17c27aac7afb415fa2d87b3f3bf1378c"
},
"metrics": {
"_dd.measured": 1,
Expand All @@ -48,8 +48,8 @@
"langchain.tokens.prompt_tokens": 10,
"langchain.tokens.total_cost": 3.5000000000000004e-05,
"langchain.tokens.total_tokens": 20,
"process_id": 79621
"process_id": 1518
},
"duration": 6863000,
"start": 1738605298269374000
"duration": 6479000,
"start": 1738692519215022000
}]]
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"error": 0,
"meta": {
"_dd.p.dm": "-0",
"_dd.p.tid": "67a102ed00000000",
"_dd.p.tid": "67a2578700000000",
"langchain.request.api_key": "...key>",
"langchain.request.model": "gpt-3.5-turbo-instruct",
"langchain.request.openai.parameters.frequency_penalty": "0",
Expand All @@ -29,9 +29,9 @@
"langchain.response.completions.0.text": "I am a helpful assistant.",
"langchain.response.completions.1.finish_reason": "length",
"langchain.response.completions.1.logprobs": "None",
"langchain.response.completions.1.text": "I am a helpful assistant too!",
"langchain.response.completions.1.text": "I am a helpful assistant.",
"language": "python",
"runtime-id": "78a3ac00072b4dbd85dcb18195090178"
"runtime-id": "c64df646b0274caaa34422a7b07e64a6"
},
"metrics": {
"_dd.measured": 1,
Expand All @@ -42,8 +42,8 @@
"langchain.tokens.prompt_tokens": 5,
"langchain.tokens.total_cost": 1.7500000000000002e-05,
"langchain.tokens.total_tokens": 10,
"process_id": 79446
"process_id": 99901
},
"duration": 2453000,
"start": 1738605293414865000
"duration": 2862000,
"start": 1738692487893691000
}]]

0 comments on commit 460994a

Please sign in to comment.