|
16 | 16 | package com.google.adk.models.langchain4j; |
17 | 17 |
|
18 | 18 | import static org.assertj.core.api.Assertions.*; |
| 19 | +import static org.junit.jupiter.api.Assertions.assertThrows; |
19 | 20 | import static org.mockito.ArgumentMatchers.any; |
20 | 21 | import static org.mockito.Mockito.*; |
21 | 22 |
|
|
31 | 32 | import dev.langchain4j.model.chat.ChatModel; |
32 | 33 | import dev.langchain4j.model.chat.StreamingChatModel; |
33 | 34 | import dev.langchain4j.model.chat.request.ChatRequest; |
| 35 | +import dev.langchain4j.model.chat.request.ChatRequestParameters; |
34 | 36 | import dev.langchain4j.model.chat.request.json.JsonObjectSchema; |
35 | 37 | import dev.langchain4j.model.chat.request.json.JsonStringSchema; |
36 | 38 | import dev.langchain4j.model.chat.response.ChatResponse; |
@@ -1145,4 +1147,89 @@ void testGenerateContentWithMalformedCharsetFallback() { |
1145 | 1147 |
|
1146 | 1148 | assertThat(textContent.text()).isEqualTo(textPayload); |
1147 | 1149 | } |
| 1150 | + |
| 1151 | + @Test |
| 1152 | + @DisplayName("Should auto-detect model name from ChatModel when not explicitly set") |
| 1153 | + void testBuilderAutoDetectsModelNameFromChatModel() { |
| 1154 | + // Given |
| 1155 | + final ChatRequestParameters params = mock(ChatRequestParameters.class); |
| 1156 | + when(params.modelName()).thenReturn("auto-detected-model"); |
| 1157 | + when(chatModel.defaultRequestParameters()).thenReturn(params); |
| 1158 | + |
| 1159 | + // When |
| 1160 | + final LangChain4j lc4j = LangChain4j.builder().chatModel(chatModel).build(); |
| 1161 | + |
| 1162 | + // Then |
| 1163 | + assertThat(lc4j.modelName()).isEqualTo("auto-detected-model"); |
| 1164 | + assertThat(lc4j.model()).isEqualTo("auto-detected-model"); |
| 1165 | + } |
| 1166 | + |
| 1167 | + @Test |
| 1168 | + @DisplayName("Should auto-detect model name from StreamingChatModel when not explicitly set") |
| 1169 | + void testBuilderAutoDetectsModelNameFromStreamingChatModel() { |
| 1170 | + // Given |
| 1171 | + final ChatRequestParameters params = mock(ChatRequestParameters.class); |
| 1172 | + when(params.modelName()).thenReturn("auto-detected-streaming-model"); |
| 1173 | + when(streamingChatModel.defaultRequestParameters()).thenReturn(params); |
| 1174 | + |
| 1175 | + // When |
| 1176 | + final LangChain4j lc4j = LangChain4j.builder().streamingChatModel(streamingChatModel).build(); |
| 1177 | + |
| 1178 | + // Then |
| 1179 | + assertThat(lc4j.modelName()).isEqualTo("auto-detected-streaming-model"); |
| 1180 | + assertThat(lc4j.model()).isEqualTo("auto-detected-streaming-model"); |
| 1181 | + } |
| 1182 | + |
| 1183 | + @Test |
| 1184 | + @DisplayName("Should prefer explicit model name over auto-detected one") |
| 1185 | + void testBuilderPrefersExplicitModelName() { |
| 1186 | + // Given |
| 1187 | + final ChatRequestParameters params = mock(ChatRequestParameters.class); |
| 1188 | + when(params.modelName()).thenReturn("auto-detected-model"); |
| 1189 | + when(chatModel.defaultRequestParameters()).thenReturn(params); |
| 1190 | + |
| 1191 | + // When |
| 1192 | + final LangChain4j lc4j = |
| 1193 | + LangChain4j.builder().chatModel(chatModel).modelName("explicit-model").build(); |
| 1194 | + |
| 1195 | + // Then |
| 1196 | + assertThat(lc4j.modelName()).isEqualTo("explicit-model"); |
| 1197 | + } |
| 1198 | + |
| 1199 | + @Test |
| 1200 | + @DisplayName("Should fall back to StreamingChatModel name when ChatModel has none") |
| 1201 | + void testBuilderFallsBackToStreamingModelNameWhenChatModelHasNone() { |
| 1202 | + // Given |
| 1203 | + final ChatRequestParameters emptyParams = mock(ChatRequestParameters.class); |
| 1204 | + when(chatModel.defaultRequestParameters()).thenReturn(emptyParams); |
| 1205 | + final ChatRequestParameters streamingParams = mock(ChatRequestParameters.class); |
| 1206 | + when(streamingParams.modelName()).thenReturn("streaming-model"); |
| 1207 | + when(streamingChatModel.defaultRequestParameters()).thenReturn(streamingParams); |
| 1208 | + |
| 1209 | + // When |
| 1210 | + final LangChain4j lc4j = |
| 1211 | + LangChain4j.builder().chatModel(chatModel).streamingChatModel(streamingChatModel).build(); |
| 1212 | + |
| 1213 | + // Then |
| 1214 | + assertThat(lc4j.modelName()).isEqualTo("streaming-model"); |
| 1215 | + } |
| 1216 | + |
| 1217 | + @Test |
| 1218 | + @DisplayName("Should fail when no source declares a model name") |
| 1219 | + void testBuilderFailsWhenNoModelNameAvailable() { |
| 1220 | + // Given |
| 1221 | + final ChatRequestParameters emptyParams = mock(ChatRequestParameters.class); |
| 1222 | + when(chatModel.defaultRequestParameters()).thenReturn(emptyParams); |
| 1223 | + when(streamingChatModel.defaultRequestParameters()).thenReturn(emptyParams); |
| 1224 | + |
| 1225 | + // When / Then |
| 1226 | + assertThrows( |
| 1227 | + IllegalStateException.class, |
| 1228 | + () -> |
| 1229 | + LangChain4j.builder() |
| 1230 | + .chatModel(chatModel) |
| 1231 | + .streamingChatModel(streamingChatModel) |
| 1232 | + .build()); |
| 1233 | + assertThrows(IllegalStateException.class, () -> LangChain4j.builder().build()); |
| 1234 | + } |
1148 | 1235 | } |
0 commit comments