Skip to content

Commit 01bdb76

Browse files
committed
Improve inheritance hierarchy of ChatOptions/FunctionCallingOptions
- Convert ChatOptions.Builder to have `Builder<B extends Builder<B, C>, C extends ChatOptions>` - This will allow the subclasses which extend this builder to provide their implementation of ChatOptions i.e, in our case FunctionCallingOptions - Update the default builder implementations with this change - Update FunctionCallingOptions and its default builder implementation to enforce this hiearchical change
1 parent 6477c0c commit 01bdb76

File tree

4 files changed

+12
-11
lines changed

4 files changed

+12
-11
lines changed

spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/ChatOptions.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ public interface ChatOptions extends ModelOptions {
9494
* {@link ChatOptions}.
9595
* @return Returns a new {@link ChatOptions.Builder}.
9696
*/
97-
static ChatOptions.Builder<? extends DefaultChatOptionsBuilder> builder() {
97+
static ChatOptions.Builder<? extends DefaultChatOptionsBuilder, ChatOptions> builder() {
9898
return new DefaultChatOptionsBuilder();
9999
}
100100

101101
/**
102102
* Builder for creating {@link ChatOptions} instance.
103103
*/
104-
interface Builder<B extends Builder<B>> {
104+
interface Builder<B extends Builder<B, C>, C extends ChatOptions> {
105105

106106
/**
107107
* Builds with the model to use for the chat.
@@ -163,7 +163,7 @@ interface Builder<B extends Builder<B>> {
163163
* Build the {@link ChatOptions}.
164164
* @return the Chat options.
165165
*/
166-
ChatOptions build();
166+
C build();
167167

168168
}
169169

spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/DefaultChatOptionsBuilder.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
/**
2222
* Implementation of {@link ChatOptions.Builder} to create {@link DefaultChatOptions}.
2323
*/
24-
public class DefaultChatOptionsBuilder<T extends DefaultChatOptionsBuilder<T>> implements ChatOptions.Builder<T> {
24+
public class DefaultChatOptionsBuilder<T extends DefaultChatOptionsBuilder<T, C>, C extends ChatOptions>
25+
implements ChatOptions.Builder<T, C> {
2526

2627
protected DefaultChatOptions options;
2728

@@ -77,8 +78,8 @@ public T topP(Double topP) {
7778
return self();
7879
}
7980

80-
public ChatOptions build() {
81-
return this.options;
81+
public C build() {
82+
return (C) this.options;
8283
}
8384

8485
}

spring-ai-core/src/main/java/org/springframework/ai/model/function/DefaultFunctionCallingOptionsBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
* @author Ilayaperumal Gopinathan
3434
*/
3535
public class DefaultFunctionCallingOptionsBuilder
36-
extends DefaultChatOptionsBuilder<DefaultFunctionCallingOptionsBuilder>
37-
implements FunctionCallingOptions.Builder<DefaultFunctionCallingOptionsBuilder> {
36+
extends DefaultChatOptionsBuilder<DefaultFunctionCallingOptionsBuilder, FunctionCallingOptions>
37+
implements FunctionCallingOptions.Builder<DefaultFunctionCallingOptionsBuilder, FunctionCallingOptions> {
3838

3939
public DefaultFunctionCallingOptionsBuilder() {
4040
// Set the options in the parent class to be the same instance

spring-ai-core/src/main/java/org/springframework/ai/model/function/FunctionCallingOptions.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public interface FunctionCallingOptions extends ChatOptions {
3535
* @return Returns {@link DefaultFunctionCallingOptionsBuilder} to create a new
3636
* instance of {@link FunctionCallingOptions}.
3737
*/
38-
static FunctionCallingOptions.Builder<? extends FunctionCallingOptions.Builder> builder() {
38+
static DefaultFunctionCallingOptionsBuilder builder() {
3939
return new DefaultFunctionCallingOptionsBuilder();
4040
}
4141

@@ -87,7 +87,7 @@ default void setProxyToolCalls(Boolean proxyToolCalls) {
8787
/**
8888
* Builder for creating {@link FunctionCallingOptions} instance.
8989
*/
90-
interface Builder<T extends Builder<T>> extends ChatOptions.Builder<T> {
90+
interface Builder<T extends Builder<T, F>, F extends FunctionCallingOptions> extends ChatOptions.Builder<T, F> {
9191

9292
/**
9393
* The list of Function Callbacks to be registered with the Chat model.
@@ -143,7 +143,7 @@ interface Builder<T extends Builder<T>> extends ChatOptions.Builder<T> {
143143
* Builds the {@link FunctionCallingOptions}.
144144
* @return the FunctionCalling options.
145145
*/
146-
FunctionCallingOptions build();
146+
F build();
147147

148148
}
149149

0 commit comments

Comments
 (0)