Skip to content

Commit b5f16b3

Browse files
committed
Refactor PostgresML embedding options builder
- Deprecate the builder methods with the prefix `with` - Update the docs and references
1 parent d77c950 commit b5f16b3

File tree

5 files changed

+82
-36
lines changed

5 files changed

+82
-36
lines changed

models/spring-ai-postgresml/src/main/java/org/springframework/ai/postgresml/PostgresMlEmbeddingOptions.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
*
3434
* @author Christian Tzolov
3535
* @author Thomas Vitale
36+
* @author Ilayaperumal Gopinathan
3637
*/
3738
@JsonInclude(Include.NON_NULL)
3839
public class PostgresMlEmbeddingOptions implements EmbeddingOptions {
@@ -116,26 +117,71 @@ public Builder() {
116117
this.options = new PostgresMlEmbeddingOptions();
117118
}
118119

120+
public Builder transformer(String transformer) {
121+
this.options.setTransformer(transformer);
122+
return this;
123+
}
124+
125+
public Builder vectorType(VectorType vectorType) {
126+
this.options.setVectorType(vectorType);
127+
return this;
128+
}
129+
130+
public Builder kwargs(String kwargs) {
131+
this.options.setKwargs(ModelOptionsUtils.objectToMap(kwargs));
132+
return this;
133+
}
134+
135+
public Builder kwargs(Map<String, Object> kwargs) {
136+
this.options.setKwargs(kwargs);
137+
return this;
138+
}
139+
140+
public Builder metadataMode(MetadataMode metadataMode) {
141+
this.options.setMetadataMode(metadataMode);
142+
return this;
143+
}
144+
145+
/**
146+
* @deprecated use {@link #transformer(String)} )} instead.
147+
*/
148+
@Deprecated(forRemoval = true, since = "1.0.0-M5")
119149
public Builder withTransformer(String transformer) {
120150
this.options.setTransformer(transformer);
121151
return this;
122152
}
123153

154+
/**
155+
* @deprecated use {@link #vectorType(VectorType)} )} instead.
156+
*/
157+
@Deprecated(forRemoval = true, since = "1.0.0-M5")
124158
public Builder withVectorType(VectorType vectorType) {
125159
this.options.setVectorType(vectorType);
126160
return this;
127161
}
128162

163+
/**
164+
* @deprecated use {@link #kwargs(String)} )} instead.
165+
*/
166+
@Deprecated(forRemoval = true, since = "1.0.0-M5")
129167
public Builder withKwargs(String kwargs) {
130168
this.options.setKwargs(ModelOptionsUtils.objectToMap(kwargs));
131169
return this;
132170
}
133171

172+
/**
173+
* @deprecated use {@link #kwargs(Map)} )} instead.
174+
*/
175+
@Deprecated(forRemoval = true, since = "1.0.0-M5")
134176
public Builder withKwargs(Map<String, Object> kwargs) {
135177
this.options.setKwargs(kwargs);
136178
return this;
137179
}
138180

181+
/**
182+
* @deprecated use {@link #metadataMode(MetadataMode)} )} instead.
183+
*/
184+
@Deprecated(forRemoval = true, since = "1.0.0-M5")
139185
public Builder withMetadataMode(MetadataMode metadataMode) {
140186
this.options.setMetadataMode(metadataMode);
141187
return this;

models/spring-ai-postgresml/src/test/java/org/springframework/ai/postgresml/PostgresMlEmbeddingModelIT.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ void embed() {
9090
void embedWithPgVector() {
9191
PostgresMlEmbeddingModel embeddingModel = new PostgresMlEmbeddingModel(this.jdbcTemplate,
9292
PostgresMlEmbeddingOptions.builder()
93-
.withTransformer("distilbert-base-uncased")
94-
.withVectorType(PostgresMlEmbeddingModel.VectorType.PG_VECTOR)
93+
.transformer("distilbert-base-uncased")
94+
.vectorType(PostgresMlEmbeddingModel.VectorType.PG_VECTOR)
9595
.build(),
9696
true);
9797
embeddingModel.afterPropertiesSet();
@@ -104,7 +104,7 @@ void embedWithPgVector() {
104104
@Test
105105
void embedWithDifferentModel() {
106106
PostgresMlEmbeddingModel embeddingModel = new PostgresMlEmbeddingModel(this.jdbcTemplate,
107-
PostgresMlEmbeddingOptions.builder().withTransformer("intfloat/e5-small").build(), true);
107+
PostgresMlEmbeddingOptions.builder().transformer("intfloat/e5-small").build(), true);
108108
embeddingModel.afterPropertiesSet();
109109

110110
float[] embed = embeddingModel.embed(new Document("Hello World!"));
@@ -116,10 +116,10 @@ void embedWithDifferentModel() {
116116
void embedWithKwargs() {
117117
PostgresMlEmbeddingModel embeddingModel = new PostgresMlEmbeddingModel(this.jdbcTemplate,
118118
PostgresMlEmbeddingOptions.builder()
119-
.withTransformer("distilbert-base-uncased")
120-
.withVectorType(PostgresMlEmbeddingModel.VectorType.PG_ARRAY)
121-
.withKwargs(Map.of("device", "cpu"))
122-
.withMetadataMode(MetadataMode.EMBED)
119+
.transformer("distilbert-base-uncased")
120+
.vectorType(PostgresMlEmbeddingModel.VectorType.PG_ARRAY)
121+
.kwargs(Map.of("device", "cpu"))
122+
.metadataMode(MetadataMode.EMBED)
123123
.build(),
124124
true);
125125
embeddingModel.afterPropertiesSet();
@@ -134,8 +134,8 @@ void embedWithKwargs() {
134134
void embedForResponse(String vectorType) {
135135
PostgresMlEmbeddingModel embeddingModel = new PostgresMlEmbeddingModel(this.jdbcTemplate,
136136
PostgresMlEmbeddingOptions.builder()
137-
.withTransformer("distilbert-base-uncased")
138-
.withVectorType(VectorType.valueOf(vectorType))
137+
.transformer("distilbert-base-uncased")
138+
.vectorType(VectorType.valueOf(vectorType))
139139
.build(),
140140
true);
141141
embeddingModel.afterPropertiesSet();
@@ -173,8 +173,8 @@ void embedCallWithRequestOptionsOverride() {
173173

174174
PostgresMlEmbeddingModel embeddingModel = new PostgresMlEmbeddingModel(this.jdbcTemplate,
175175
PostgresMlEmbeddingOptions.builder()
176-
.withTransformer("distilbert-base-uncased")
177-
.withVectorType(VectorType.PG_VECTOR)
176+
.transformer("distilbert-base-uncased")
177+
.vectorType(VectorType.PG_VECTOR)
178178
.build(),
179179
true);
180180
embeddingModel.afterPropertiesSet();
@@ -211,10 +211,10 @@ void embedCallWithRequestOptionsOverride() {
211211
// Override the default options in the request
212212
var request2 = new EmbeddingRequest(List.of("Hello World!", "Spring AI!", "LLM!"),
213213
PostgresMlEmbeddingOptions.builder()
214-
.withTransformer("intfloat/e5-small")
215-
.withVectorType(VectorType.PG_ARRAY)
216-
.withMetadataMode(MetadataMode.EMBED)
217-
.withKwargs(Map.of("device", "cpu"))
214+
.transformer("intfloat/e5-small")
215+
.vectorType(VectorType.PG_ARRAY)
216+
.metadataMode(MetadataMode.EMBED)
217+
.kwargs(Map.of("device", "cpu"))
218218
.build());
219219

220220
embeddingResponse = embeddingModel.call(request2);

models/spring-ai-postgresml/src/test/java/org/springframework/ai/postgresml/PostgresMlEmbeddingOptionsTests.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public void defaultOptions() {
4444
@Test
4545
public void newOptions() {
4646
PostgresMlEmbeddingOptions options = PostgresMlEmbeddingOptions.builder()
47-
.withTransformer("intfloat/e5-small")
48-
.withVectorType(PostgresMlEmbeddingModel.VectorType.PG_VECTOR)
49-
.withMetadataMode(org.springframework.ai.document.MetadataMode.ALL)
50-
.withKwargs(Map.of("device", "cpu"))
47+
.transformer("intfloat/e5-small")
48+
.vectorType(PostgresMlEmbeddingModel.VectorType.PG_VECTOR)
49+
.metadataMode(org.springframework.ai.document.MetadataMode.ALL)
50+
.kwargs(Map.of("device", "cpu"))
5151
.build();
5252

5353
assertThat(options.getTransformer()).isEqualTo("intfloat/e5-small");
@@ -72,8 +72,8 @@ public void mergeOptions() {
7272

7373
// Partial override
7474
options = embeddingModel.mergeOptions(PostgresMlEmbeddingOptions.builder()
75-
.withTransformer("intfloat/e5-small")
76-
.withKwargs(Map.of("device", "cpu"))
75+
.transformer("intfloat/e5-small")
76+
.kwargs(Map.of("device", "cpu"))
7777
.build());
7878

7979
assertThat(options.getTransformer()).isEqualTo("intfloat/e5-small");
@@ -83,10 +83,10 @@ public void mergeOptions() {
8383

8484
// Complete override
8585
options = embeddingModel.mergeOptions(PostgresMlEmbeddingOptions.builder()
86-
.withTransformer("intfloat/e5-small")
87-
.withVectorType(PostgresMlEmbeddingModel.VectorType.PG_VECTOR)
88-
.withMetadataMode(org.springframework.ai.document.MetadataMode.ALL)
89-
.withKwargs(Map.of("device", "cpu"))
86+
.transformer("intfloat/e5-small")
87+
.vectorType(PostgresMlEmbeddingModel.VectorType.PG_VECTOR)
88+
.metadataMode(org.springframework.ai.document.MetadataMode.ALL)
89+
.kwargs(Map.of("device", "cpu"))
9090
.build());
9191

9292
assertThat(options.getTransformer()).isEqualTo("intfloat/e5-small");

spring-ai-docs/src/main/antora/modules/ROOT/pages/api/embeddings/postgresml-embeddings.adoc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ For example to override the default model name for a specific request:
7777
EmbeddingResponse embeddingResponse = embeddingModel.call(
7878
new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
7979
PostgresMlEmbeddingOptions.builder()
80-
.withTransformer("intfloat/e5-small")
81-
.withVectorType(VectorType.PG_ARRAY)
82-
.withKwargs(Map.of("device", "gpu"))
80+
.transformer("intfloat/e5-small")
81+
.vectorType(VectorType.PG_ARRAY)
82+
.kwargs(Map.of("device", "gpu"))
8383
.build()));
8484
----
8585

@@ -148,10 +148,10 @@ var jdbcTemplate = new JdbcTemplate(dataSource); // your posgresml data source
148148
149149
PostgresMlEmbeddingModel embeddingModel = new PostgresMlEmbeddingModel(this.jdbcTemplate,
150150
PostgresMlEmbeddingOptions.builder()
151-
.withTransformer("distilbert-base-uncased") // huggingface transformer model name.
152-
.withVectorType(VectorType.PG_VECTOR) //vector type in PostgreSQL.
153-
.withKwargs(Map.of("device", "cpu")) // optional arguments.
154-
.withMetadataMode(MetadataMode.EMBED) // Document metadata mode.
151+
.transformer("distilbert-base-uncased") // huggingface transformer model name.
152+
.vectorType(VectorType.PG_VECTOR) //vector type in PostgreSQL.
153+
.kwargs(Map.of("device", "cpu")) // optional arguments.
154+
.metadataMode(MetadataMode.EMBED) // Document metadata mode.
155155
.build());
156156
157157
embeddingModel.afterPropertiesSet(); // initialize the jdbc template and database.

spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/postgresml/PostgresMlEmbeddingProperties.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ public class PostgresMlEmbeddingProperties {
4848

4949
@NestedConfigurationProperty
5050
private PostgresMlEmbeddingOptions options = PostgresMlEmbeddingOptions.builder()
51-
.withTransformer(PostgresMlEmbeddingModel.DEFAULT_TRANSFORMER_MODEL)
52-
.withVectorType(PostgresMlEmbeddingModel.VectorType.PG_ARRAY)
53-
.withKwargs(Map.of())
54-
.withMetadataMode(MetadataMode.EMBED)
51+
.transformer(PostgresMlEmbeddingModel.DEFAULT_TRANSFORMER_MODEL)
52+
.vectorType(PostgresMlEmbeddingModel.VectorType.PG_ARRAY)
53+
.kwargs(Map.of())
54+
.metadataMode(MetadataMode.EMBED)
5555
.build();
5656

5757
public PostgresMlEmbeddingOptions getOptions() {

0 commit comments

Comments
 (0)