77
88from ldai import LDMessage
99
10- from ldai_langchain import LangChainProvider
10+ from ldai_langchain import LangChainRunnerFactory
1111
1212
1313class TestConvertMessagesToLangchain :
@@ -16,7 +16,7 @@ class TestConvertMessagesToLangchain:
1616 def test_converts_system_messages_to_system_message (self ):
1717 """Should convert system messages to SystemMessage."""
1818 messages = [LDMessage (role = 'system' , content = 'You are a helpful assistant.' )]
19- result = LangChainProvider .convert_messages_to_langchain (messages )
19+ result = LangChainRunnerFactory .convert_messages_to_langchain (messages )
2020
2121 assert len (result ) == 1
2222 assert isinstance (result [0 ], SystemMessage )
@@ -25,7 +25,7 @@ def test_converts_system_messages_to_system_message(self):
2525 def test_converts_user_messages_to_human_message (self ):
2626 """Should convert user messages to HumanMessage."""
2727 messages = [LDMessage (role = 'user' , content = 'Hello, how are you?' )]
28- result = LangChainProvider .convert_messages_to_langchain (messages )
28+ result = LangChainRunnerFactory .convert_messages_to_langchain (messages )
2929
3030 assert len (result ) == 1
3131 assert isinstance (result [0 ], HumanMessage )
@@ -34,7 +34,7 @@ def test_converts_user_messages_to_human_message(self):
3434 def test_converts_assistant_messages_to_ai_message (self ):
3535 """Should convert assistant messages to AIMessage."""
3636 messages = [LDMessage (role = 'assistant' , content = 'I am doing well, thank you!' )]
37- result = LangChainProvider .convert_messages_to_langchain (messages )
37+ result = LangChainRunnerFactory .convert_messages_to_langchain (messages )
3838
3939 assert len (result ) == 1
4040 assert isinstance (result [0 ], AIMessage )
@@ -47,7 +47,7 @@ def test_converts_multiple_messages_in_order(self):
4747 LDMessage (role = 'user' , content = 'What is the weather like?' ),
4848 LDMessage (role = 'assistant' , content = 'I cannot check the weather.' ),
4949 ]
50- result = LangChainProvider .convert_messages_to_langchain (messages )
50+ result = LangChainRunnerFactory .convert_messages_to_langchain (messages )
5151
5252 assert len (result ) == 3
5353 assert isinstance (result [0 ], SystemMessage )
@@ -62,11 +62,11 @@ class MockMessage:
6262 content = 'Test message'
6363
6464 with pytest .raises (ValueError , match = 'Unsupported message role: unknown' ):
65- LangChainProvider .convert_messages_to_langchain ([MockMessage ()]) # type: ignore
65+ LangChainRunnerFactory .convert_messages_to_langchain ([MockMessage ()]) # type: ignore
6666
6767 def test_handles_empty_message_array (self ):
6868 """Should handle empty message array."""
69- result = LangChainProvider .convert_messages_to_langchain ([])
69+ result = LangChainRunnerFactory .convert_messages_to_langchain ([])
7070 assert len (result ) == 0
7171
7272
@@ -84,7 +84,7 @@ def test_creates_metrics_with_success_true_and_token_usage(self):
8484 },
8585 }
8686
87- result = LangChainProvider .get_ai_metrics_from_response (mock_response )
87+ result = LangChainRunnerFactory .get_ai_metrics_from_response (mock_response )
8888
8989 assert result .success is True
9090 assert result .usage is not None
@@ -103,7 +103,7 @@ def test_creates_metrics_with_snake_case_token_usage(self):
103103 },
104104 }
105105
106- result = LangChainProvider .get_ai_metrics_from_response (mock_response )
106+ result = LangChainRunnerFactory .get_ai_metrics_from_response (mock_response )
107107
108108 assert result .success is True
109109 assert result .usage is not None
@@ -115,7 +115,7 @@ def test_creates_metrics_with_success_true_and_no_usage_when_metadata_missing(se
115115 """Should create metrics with success=True and no usage when metadata is missing."""
116116 mock_response = AIMessage (content = 'Test response' )
117117
118- result = LangChainProvider .get_ai_metrics_from_response (mock_response )
118+ result = LangChainRunnerFactory .get_ai_metrics_from_response (mock_response )
119119
120120 assert result .success is True
121121 assert result .usage is None
@@ -126,15 +126,15 @@ class TestMapProvider:
126126
127127 def test_maps_gemini_to_google_genai (self ):
128128 """Should map gemini to google-genai."""
129- assert LangChainProvider .map_provider ('gemini' ) == 'google-genai'
130- assert LangChainProvider .map_provider ('Gemini' ) == 'google-genai'
131- assert LangChainProvider .map_provider ('GEMINI' ) == 'google-genai'
129+ assert LangChainRunnerFactory .map_provider ('gemini' ) == 'google-genai'
130+ assert LangChainRunnerFactory .map_provider ('Gemini' ) == 'google-genai'
131+ assert LangChainRunnerFactory .map_provider ('GEMINI' ) == 'google-genai'
132132
133133 def test_returns_provider_name_unchanged_for_unmapped_providers (self ):
134134 """Should return provider name unchanged for unmapped providers."""
135- assert LangChainProvider .map_provider ('openai' ) == 'openai'
136- assert LangChainProvider .map_provider ('anthropic' ) == 'anthropic'
137- assert LangChainProvider .map_provider ('unknown' ) == 'unknown'
135+ assert LangChainRunnerFactory .map_provider ('openai' ) == 'openai'
136+ assert LangChainRunnerFactory .map_provider ('anthropic' ) == 'anthropic'
137+ assert LangChainRunnerFactory .map_provider ('unknown' ) == 'unknown'
138138
139139
140140class TestInvokeModel :
@@ -150,7 +150,7 @@ async def test_returns_success_true_for_string_content(self, mock_llm):
150150 """Should return success=True for string content."""
151151 mock_response = AIMessage (content = 'Test response' )
152152 mock_llm .ainvoke = AsyncMock (return_value = mock_response )
153- provider = LangChainProvider (mock_llm )
153+ provider = LangChainRunnerFactory (mock_llm )
154154
155155 messages = [LDMessage (role = 'user' , content = 'Hello' )]
156156 result = await provider .invoke_model (messages )
@@ -163,7 +163,7 @@ async def test_returns_success_false_for_non_string_content_and_logs_warning(sel
163163 """Should return success=False for non-string content and log warning."""
164164 mock_response = AIMessage (content = [{'type' : 'image' , 'data' : 'base64data' }])
165165 mock_llm .ainvoke = AsyncMock (return_value = mock_response )
166- provider = LangChainProvider (mock_llm )
166+ provider = LangChainRunnerFactory (mock_llm )
167167
168168 messages = [LDMessage (role = 'user' , content = 'Hello' )]
169169 result = await provider .invoke_model (messages )
@@ -176,7 +176,7 @@ async def test_returns_success_false_when_model_invocation_throws_error(self, mo
176176 """Should return success=False when model invocation throws an error."""
177177 error = Exception ('Model invocation failed' )
178178 mock_llm .ainvoke = AsyncMock (side_effect = error )
179- provider = LangChainProvider (mock_llm )
179+ provider = LangChainRunnerFactory (mock_llm )
180180
181181 messages = [LDMessage (role = 'user' , content = 'Hello' )]
182182 result = await provider .invoke_model (messages )
@@ -201,7 +201,7 @@ async def test_returns_success_true_for_successful_invocation(self, mock_llm):
201201 mock_structured_llm = MagicMock ()
202202 mock_structured_llm .ainvoke = AsyncMock (return_value = mock_response )
203203 mock_llm .with_structured_output = MagicMock (return_value = mock_structured_llm )
204- provider = LangChainProvider (mock_llm )
204+ provider = LangChainRunnerFactory (mock_llm )
205205
206206 messages = [LDMessage (role = 'user' , content = 'Hello' )]
207207 response_structure = {'type' : 'object' , 'properties' : {}}
@@ -217,7 +217,7 @@ async def test_returns_success_false_when_structured_model_invocation_throws_err
217217 mock_structured_llm = MagicMock ()
218218 mock_structured_llm .ainvoke = AsyncMock (side_effect = error )
219219 mock_llm .with_structured_output = MagicMock (return_value = mock_structured_llm )
220- provider = LangChainProvider (mock_llm )
220+ provider = LangChainRunnerFactory (mock_llm )
221221
222222 messages = [LDMessage (role = 'user' , content = 'Hello' )]
223223 response_structure = {'type' : 'object' , 'properties' : {}}
@@ -236,7 +236,7 @@ class TestGetChatModel:
236236 def test_returns_underlying_llm (self ):
237237 """Should return the underlying LLM."""
238238 mock_llm = MagicMock ()
239- provider = LangChainProvider (mock_llm )
239+ provider = LangChainRunnerFactory (mock_llm )
240240
241241 assert provider .get_chat_model () is mock_llm
242242
0 commit comments