16
16
17
17
package org .springframework .ai .chat .client ;
18
18
19
+ import java .lang .reflect .Type ;
19
20
import java .net .URL ;
20
21
import java .nio .charset .Charset ;
22
+ import java .util .Arrays ;
21
23
import java .util .List ;
22
24
import java .util .Map ;
23
25
import java .util .function .Consumer ;
37
39
import org .springframework .ai .model .Media ;
38
40
import org .springframework .ai .model .function .FunctionCallback ;
39
41
import org .springframework .core .ParameterizedTypeReference ;
42
+ import org .springframework .core .io .ByteArrayResource ;
40
43
import org .springframework .core .io .Resource ;
41
44
import org .springframework .lang .Nullable ;
42
45
import org .springframework .util .Assert ;
43
46
import org .springframework .util .MimeType ;
44
47
45
48
/**
46
- * Client to perform stateless requests to an AI Model, using a fluent API.
47
- *
49
+ * Client used to perform stateless requests to an AI Model, using a fluent API.
50
+ * <p/>
48
51
* Use {@link ChatClient#builder(ChatModel)} to prepare an instance.
49
52
*
50
53
* @author Mark Pollack
51
54
* @author Christian Tzolov
52
55
* @author Josh Long
53
56
* @author Arjen Poutsma
54
57
* @author Thomas Vitale
58
+ * @author John Blum
59
+ * @see ChatModel
55
60
* @since 1.0.0
56
61
*/
57
62
public interface ChatClient {
@@ -97,15 +102,22 @@ static Builder builder(ChatModel chatModel, ObservationRegistry observationRegis
97
102
98
103
interface PromptUserSpec {
99
104
100
- PromptUserSpec text (String text );
105
+ default PromptUserSpec text (String text ) {
106
+ Charset defaultCharset = Charset .defaultCharset ();
107
+ return text (new ByteArrayResource (text .getBytes (defaultCharset )), defaultCharset );
108
+ }
101
109
102
- PromptUserSpec text (Resource text , Charset charset );
110
+ default PromptUserSpec text (Resource text ) {
111
+ return text (text , Charset .defaultCharset ());
112
+ }
103
113
104
- PromptUserSpec text (Resource text );
114
+ PromptUserSpec text (Resource text , Charset charset );
105
115
106
- PromptUserSpec params (Map <String , Object > p );
116
+ default PromptUserSpec param (String key , Object value ) {
117
+ return params (Map .of (key , value ));
118
+ }
107
119
108
- PromptUserSpec param ( String k , Object v );
120
+ PromptUserSpec params ( Map < String , Object > params );
109
121
110
122
PromptUserSpec media (Media ... media );
111
123
@@ -117,25 +129,36 @@ interface PromptUserSpec {
117
129
118
130
interface PromptSystemSpec {
119
131
120
- PromptSystemSpec text (String text );
132
+ default PromptSystemSpec text (String text ) {
133
+ Charset defaultCharset = Charset .defaultCharset ();
134
+ return text (new ByteArrayResource (text .getBytes (defaultCharset )), defaultCharset );
135
+ }
121
136
122
- PromptSystemSpec text (Resource text , Charset charset );
137
+ default PromptSystemSpec text (Resource text ) {
138
+ return text (text , Charset .defaultCharset ());
139
+ }
123
140
124
- PromptSystemSpec text (Resource text );
141
+ PromptSystemSpec text (Resource text , Charset charset );
125
142
126
- PromptSystemSpec params (Map <String , Object > p );
143
+ default PromptSystemSpec param (String key , Object value ) {
144
+ return params (Map .of (key , value ));
145
+ }
127
146
128
- PromptSystemSpec param ( String k , Object v );
147
+ PromptSystemSpec params ( Map < String , Object > params );
129
148
130
149
}
131
150
132
151
interface AdvisorSpec {
133
152
134
- AdvisorSpec param (String k , Object v );
153
+ default AdvisorSpec param (String key , Object value ) {
154
+ return params (Map .of (key , value ));
155
+ }
135
156
136
- AdvisorSpec params (Map <String , Object > p );
157
+ AdvisorSpec params (Map <String , Object > params );
137
158
138
- AdvisorSpec advisors (Advisor ... advisors );
159
+ default AdvisorSpec advisors (Advisor ... advisors ) {
160
+ return advisors (Arrays .asList (advisors ));
161
+ }
139
162
140
163
AdvisorSpec advisors (List <Advisor > advisors );
141
164
@@ -144,21 +167,39 @@ interface AdvisorSpec {
144
167
interface CallResponseSpec {
145
168
146
169
@ Nullable
147
- <T > T entity (ParameterizedTypeReference <T > type );
170
+ default <T > T entity (Class <T > type ) {
171
+
172
+ return entity (new ParameterizedTypeReference <>() {
173
+
174
+ @ Override
175
+ public Type getType () {
176
+ return type ;
177
+ }
178
+ });
179
+ }
148
180
149
181
@ Nullable
150
- <T > T entity (StructuredOutputConverter <T > structuredOutputConverter );
182
+ <T > T entity (ParameterizedTypeReference <T > type );
151
183
152
184
@ Nullable
153
- <T > T entity (Class <T > type );
185
+ <T > T entity (StructuredOutputConverter <T > structuredOutputConverter );
154
186
155
187
@ Nullable
156
188
ChatResponse chatResponse ();
157
189
158
190
@ Nullable
159
191
String content ();
160
192
161
- <T > ResponseEntity <ChatResponse , T > responseEntity (Class <T > type );
193
+ default <T > ResponseEntity <ChatResponse , T > responseEntity (Class <T > type ) {
194
+
195
+ return responseEntity (new ParameterizedTypeReference <T >() {
196
+
197
+ @ Override
198
+ public Type getType () {
199
+ return type ;
200
+ }
201
+ });
202
+ }
162
203
163
204
<T > ResponseEntity <ChatResponse , T > responseEntity (ParameterizedTypeReference <T > type );
164
205
@@ -202,11 +243,15 @@ interface ChatClientRequestSpec {
202
243
203
244
ChatClientRequestSpec advisors (Consumer <AdvisorSpec > consumer );
204
245
205
- ChatClientRequestSpec advisors (Advisor ... advisors );
246
+ default ChatClientRequestSpec advisors (Advisor ... advisors ) {
247
+ return advisors (Arrays .asList (advisors ));
248
+ }
206
249
207
250
ChatClientRequestSpec advisors (List <Advisor > advisors );
208
251
209
- ChatClientRequestSpec messages (Message ... messages );
252
+ default ChatClientRequestSpec messages (Message ... messages ) {
253
+ return messages (Arrays .asList (messages ));
254
+ }
210
255
211
256
ChatClientRequestSpec messages (List <Message > messages );
212
257
@@ -227,19 +272,29 @@ <I, O> ChatClientRequestSpec function(String name, String description, Class<I>
227
272
228
273
ChatClientRequestSpec toolContext (Map <String , Object > toolContext );
229
274
230
- ChatClientRequestSpec system (String text );
275
+ default ChatClientRequestSpec system (String text ) {
276
+ Charset defaultCharset = Charset .defaultCharset ();
277
+ return system (new ByteArrayResource (text .getBytes (defaultCharset )), defaultCharset );
278
+ }
231
279
232
- ChatClientRequestSpec system (Resource textResource , Charset charset );
280
+ default ChatClientRequestSpec system (Resource text ) {
281
+ return system (text , Charset .defaultCharset ());
282
+ }
233
283
234
- ChatClientRequestSpec system (Resource text );
284
+ ChatClientRequestSpec system (Resource textResource , Charset charset );
235
285
236
286
ChatClientRequestSpec system (Consumer <PromptSystemSpec > consumer );
237
287
238
- ChatClientRequestSpec user (String text );
288
+ default ChatClientRequestSpec user (String text ) {
289
+ Charset defaultCharset = Charset .defaultCharset ();
290
+ return user (new ByteArrayResource (text .getBytes (defaultCharset )), defaultCharset );
291
+ }
239
292
240
- ChatClientRequestSpec user (Resource text , Charset charset );
293
+ default ChatClientRequestSpec user (Resource text ) {
294
+ return user (text , Charset .defaultCharset ());
295
+ }
241
296
242
- ChatClientRequestSpec user (Resource text );
297
+ ChatClientRequestSpec user (Resource text , Charset charset );
243
298
244
299
ChatClientRequestSpec user (Consumer <PromptUserSpec > consumer );
245
300
@@ -254,27 +309,39 @@ <I, O> ChatClientRequestSpec function(String name, String description, Class<I>
254
309
*/
255
310
interface Builder {
256
311
257
- Builder defaultAdvisors (Advisor ... advisor );
258
-
259
- Builder defaultAdvisors ( Consumer < AdvisorSpec > advisorSpecConsumer );
312
+ default Builder defaultAdvisors (Advisor ... advisors ) {
313
+ return defaultAdvisors ( Arrays . asList ( advisors ));
314
+ }
260
315
261
316
Builder defaultAdvisors (List <Advisor > advisors );
262
317
318
+ Builder defaultAdvisors (Consumer <AdvisorSpec > advisorSpecConsumer );
319
+
263
320
Builder defaultOptions (ChatOptions chatOptions );
264
321
265
- Builder defaultUser (String text );
322
+ default Builder defaultUser (String text ) {
323
+ Charset defaulCharset = Charset .defaultCharset ();
324
+ return defaultUser (new ByteArrayResource (text .getBytes (defaulCharset )), defaulCharset );
325
+ }
266
326
267
- Builder defaultUser (Resource text , Charset charset );
327
+ default Builder defaultUser (Resource text ) {
328
+ return defaultUser (text , Charset .defaultCharset ());
329
+ }
268
330
269
- Builder defaultUser (Resource text );
331
+ Builder defaultUser (Resource text , Charset charset );
270
332
271
333
Builder defaultUser (Consumer <PromptUserSpec > userSpecConsumer );
272
334
273
- Builder defaultSystem (String text );
335
+ default Builder defaultSystem (String text ) {
336
+ Charset defaultCharset = Charset .defaultCharset ();
337
+ return defaultSystem (new ByteArrayResource (text .getBytes (defaultCharset )), defaultCharset );
338
+ }
274
339
275
- Builder defaultSystem (Resource text , Charset charset );
340
+ default Builder defaultSystem (Resource text ) {
341
+ return defaultSystem (text , Charset .defaultCharset ());
342
+ }
276
343
277
- Builder defaultSystem (Resource text );
344
+ Builder defaultSystem (Resource text , Charset charset );
278
345
279
346
Builder defaultSystem (Consumer <PromptSystemSpec > systemSpecConsumer );
280
347
0 commit comments