Skip to content
Draft
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
4 changes: 2 additions & 2 deletions src/openai/resources/evals/runs/runs.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ def cancel(
if not run_id:
raise ValueError(f"Expected a non-empty value for `run_id` but received {run_id!r}")
return self._post(
path_template("/evals/{eval_id}/runs/{run_id}", eval_id=eval_id, run_id=run_id),
path_template("/evals/{eval_id}/runs/{run_id}/cancel", eval_id=eval_id, run_id=run_id),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
Expand Down Expand Up @@ -562,7 +562,7 @@ async def cancel(
if not run_id:
raise ValueError(f"Expected a non-empty value for `run_id` but received {run_id!r}")
return await self._post(
path_template("/evals/{eval_id}/runs/{run_id}", eval_id=eval_id, run_id=run_id),
path_template("/evals/{eval_id}/runs/{run_id}/cancel", eval_id=eval_id, run_id=run_id),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
Expand Down
57 changes: 57 additions & 0 deletions tests/test_eval_run_cancel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from __future__ import annotations

from typing import Literal

import httpx2
import pytest

from openai import OpenAI, AsyncOpenAI


def cancel_response(request: httpx2.Request) -> httpx2.Response:
assert request.method == "POST"
assert request.url == httpx2.URL("https://example.test/v1/evals/eval_test/runs/evalrun_test/cancel")
return httpx2.Response(200, json={"id": "evalrun_test", "eval_id": "eval_test", "status": "canceled"})


@pytest.mark.parametrize("response_mode", ["parsed", "raw", "streaming"])
def test_sync_cancel_endpoint(response_mode: Literal["parsed", "raw", "streaming"]) -> None:
with OpenAI(
api_key="test-key",
base_url="https://example.test/v1",
max_retries=0,
http_client=httpx2.Client(transport=httpx2.MockTransport(cancel_response), trust_env=False),
) as client:
if response_mode == "parsed":
run = client.evals.runs.cancel("evalrun_test", eval_id="eval_test")
elif response_mode == "raw":
run = client.evals.runs.with_raw_response.cancel("evalrun_test", eval_id="eval_test").parse()
else:
with client.evals.runs.with_streaming_response.cancel("evalrun_test", eval_id="eval_test") as response:
run = response.parse()

assert run.id == "evalrun_test"
assert run.status == "canceled"


@pytest.mark.parametrize("response_mode", ["parsed", "raw", "streaming"])
async def test_async_cancel_endpoint(response_mode: Literal["parsed", "raw", "streaming"]) -> None:
async with AsyncOpenAI(
api_key="test-key",
base_url="https://example.test/v1",
max_retries=0,
http_client=httpx2.AsyncClient(transport=httpx2.MockTransport(cancel_response), trust_env=False),
) as client:
if response_mode == "parsed":
run = await client.evals.runs.cancel("evalrun_test", eval_id="eval_test")
elif response_mode == "raw":
raw_response = await client.evals.runs.with_raw_response.cancel("evalrun_test", eval_id="eval_test")
run = raw_response.parse()
else:
async with client.evals.runs.with_streaming_response.cancel(
"evalrun_test", eval_id="eval_test"
) as response:
run = await response.parse()

assert run.id == "evalrun_test"
assert run.status == "canceled"
Loading