Python: Implemented FoundryChatClient (#193)

* Initial version of FoundryChatClient

* Updates to the tool call streaming wrapper

* Small fixes

* Small updates and addressed PR feedback

* Handle automatic client creation

* Small improvement

* Added credential parameter

* Small improvements

* Made FoundryChatClient disposable

* Small fixes

* Added unit tests

* Refactored samples

* Small improvements

* Small fix

* Addressed PR feedback

* Small fixes

* Small updates

* Small fix

* Addressed PR feedback
This commit is contained in:
Dmytro Struk
2025-07-18 13:10:14 -07:00
committed by GitHub
Unverified
parent 9287572b0d
commit ccd7a44ec7
26 changed files with 2050 additions and 22 deletions
@@ -49,7 +49,7 @@ class MockAgent(Agent):
async def run(
self,
messages: str | ChatMessage | list[str | ChatMessage] | None = None,
messages: str | ChatMessage | list[str] | list[ChatMessage] | None = None,
*,
thread: AgentThread | None = None,
**kwargs: Any,
@@ -58,7 +58,7 @@ class MockAgent(Agent):
async def run_stream(
self,
messages: str | ChatMessage | list[str | ChatMessage] | None = None,
messages: str | ChatMessage | list[str] | list[ChatMessage] | None = None,
*,
thread: AgentThread | None = None,
**kwargs: Any,
@@ -121,7 +121,7 @@ def chat_client() -> MockChatClient:
@fixture
def chat_client_base() -> MockChatClientBase:
return MockChatClientBase(ai_model_id="test")
return MockChatClientBase()
@fixture
@@ -350,7 +350,7 @@ def test_chat_response_updates_to_chat_response_one():
# Check the type and content
assert len(chat_response.messages) == 1
assert chat_response.text == "I'm doing well, thank you!"
assert chat_response.text == "I'm doing well, thank you!"
assert isinstance(chat_response.messages[0], ChatMessage)
assert len(chat_response.messages[0].contents) == 1
assert chat_response.messages[0].message_id == "1"
@@ -429,13 +429,13 @@ def test_chat_response_updates_to_chat_response_multiple_multiple():
assert len(chat_response.messages[0].contents) == 3
assert isinstance(chat_response.messages[0].contents[0], TextContent)
assert chat_response.messages[0].contents[0].text == "I'm doing well, thank you!"
assert chat_response.messages[0].contents[0].text == "I'm doing well, thank you!"
assert isinstance(chat_response.messages[0].contents[1], TextReasoningContent)
assert chat_response.messages[0].contents[1].text == "Additional context"
assert isinstance(chat_response.messages[0].contents[2], TextContent)
assert chat_response.messages[0].contents[2].text == "More context Final part"
assert chat_response.messages[0].contents[2].text == "More contextFinal part"
assert chat_response.text == "I'm doing well, thank you! More context Final part"
assert chat_response.text == "I'm doing well, thank you! More contextFinal part"
# region: ChatToolMode
@@ -643,7 +643,7 @@ def test_agent_run_response_from_updates(agent_run_response_update: AgentRunResp
updates = [agent_run_response_update, agent_run_response_update]
response = AgentRunResponse.from_agent_run_response_updates(updates)
assert len(response.messages) > 0
assert response.text == "Test content Test content"
assert response.text == "Test contentTest content"
def test_agent_run_response_str_method(chat_message: ChatMessage) -> None: