Skip to content
Merged
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 @@ -605,8 +605,12 @@ def _check_model_presence(self, options: dict[str, Any]) -> None:
options["model"] = self.model_id

def _get_current_conversation_id(self, options: dict[str, Any], **kwargs: Any) -> str | None:
"""Get the current conversation ID from options dict or kwargs."""
return options.get("conversation_id") or kwargs.get("conversation_id")
"""Get the current conversation ID, preferring kwargs over options.

This ensures runtime-updated conversation IDs (for example, from tool execution
loops) take precedence over the initial configuration provided in options.
"""
return kwargs.get("conversation_id") or options.get("conversation_id")

def _prepare_messages_for_openai(self, chat_messages: Sequence[ChatMessage]) -> list[dict[str, Any]]:
"""Prepare the chat messages for a request.
Expand Down
14 changes: 14 additions & 0 deletions python/packages/core/tests/openai/test_openai_responses_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -1682,6 +1682,20 @@ async def test_prepare_options_store_parameter_handling() -> None:
assert "previous_response_id" not in options


async def test_conversation_id_precedence_kwargs_over_options() -> None:
"""When both kwargs and options contain conversation_id, kwargs wins."""
client = OpenAIResponsesClient(model_id="test-model", api_key="test-key")
messages = [ChatMessage(role="user", text="Hello")]

# options has a stale response id, kwargs carries the freshest one
opts = {"conversation_id": "resp_old_123"}
run_opts = await client._prepare_options(messages, opts, conversation_id="resp_new_456") # type: ignore

# Verify kwargs takes precedence and maps to previous_response_id for resp_* IDs
assert run_opts.get("previous_response_id") == "resp_new_456"
assert "conversation" not in run_opts


def test_with_callable_api_key() -> None:
"""Test OpenAIResponsesClient initialization with callable API key."""

Expand Down
Loading