Skip to content

Commit dbaa608

Browse files
sunyuhan1998ilayaperumalg
authored andcommitted
fix: Fixed GH-3526, Fixed the issue where using the builder() in SystemPromptTemplate returned a Builder for PromptTemplate instead.
Auto-cherry-pick to 1.0.x Fixes #3526 Signed-off-by: Sun Yuhan <[email protected]>
1 parent cd0cc46 commit dbaa608

File tree

3 files changed

+391
-6
lines changed

3 files changed

+391
-6
lines changed

spring-ai-model/src/main/java/org/springframework/ai/chat/prompt/PromptTemplate.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -209,17 +209,17 @@ public static Builder builder() {
209209
return new Builder();
210210
}
211211

212-
public static final class Builder {
212+
public static class Builder {
213213

214-
private String template;
214+
protected String template;
215215

216-
private Resource resource;
216+
protected Resource resource;
217217

218-
private Map<String, Object> variables = new HashMap<>();
218+
protected Map<String, Object> variables = new HashMap<>();
219219

220-
private TemplateRenderer renderer = DEFAULT_TEMPLATE_RENDERER;
220+
protected TemplateRenderer renderer = DEFAULT_TEMPLATE_RENDERER;
221221

222-
private Builder() {
222+
protected Builder() {
223223
}
224224

225225
public Builder template(String template) {

spring-ai-model/src/main/java/org/springframework/ai/chat/prompt/SystemPromptTemplate.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020

2121
import org.springframework.ai.chat.messages.Message;
2222
import org.springframework.ai.chat.messages.SystemMessage;
23+
import org.springframework.ai.template.TemplateRenderer;
2324
import org.springframework.core.io.Resource;
25+
import org.springframework.util.Assert;
2426

2527
public class SystemPromptTemplate extends PromptTemplate {
2628

@@ -32,6 +34,14 @@ public SystemPromptTemplate(Resource resource) {
3234
super(resource);
3335
}
3436

37+
private SystemPromptTemplate(String template, Map<String, Object> variables, TemplateRenderer renderer) {
38+
super(template, variables, renderer);
39+
}
40+
41+
private SystemPromptTemplate(Resource resource, Map<String, Object> variables, TemplateRenderer renderer) {
42+
super(resource, variables, renderer);
43+
}
44+
3545
@Override
3646
public Message createMessage() {
3747
return new SystemMessage(render());
@@ -52,4 +62,50 @@ public Prompt create(Map<String, Object> model) {
5262
return new Prompt(new SystemMessage(render(model)));
5363
}
5464

65+
public static Builder builder() {
66+
return new Builder();
67+
}
68+
69+
public static class Builder extends PromptTemplate.Builder {
70+
71+
public Builder template(String template) {
72+
Assert.hasText(template, "template cannot be null or empty");
73+
this.template = template;
74+
return this;
75+
}
76+
77+
public Builder resource(Resource resource) {
78+
Assert.notNull(resource, "resource cannot be null");
79+
this.resource = resource;
80+
return this;
81+
}
82+
83+
public Builder variables(Map<String, Object> variables) {
84+
Assert.notNull(variables, "variables cannot be null");
85+
Assert.noNullElements(variables.keySet(), "variables keys cannot be null");
86+
this.variables = variables;
87+
return this;
88+
}
89+
90+
public Builder renderer(TemplateRenderer renderer) {
91+
Assert.notNull(renderer, "renderer cannot be null");
92+
this.renderer = renderer;
93+
return this;
94+
}
95+
96+
@Override
97+
public SystemPromptTemplate build() {
98+
if (this.template != null && this.resource != null) {
99+
throw new IllegalArgumentException("Only one of template or resource can be set");
100+
}
101+
else if (this.resource != null) {
102+
return new SystemPromptTemplate(this.resource, this.variables, this.renderer);
103+
}
104+
else {
105+
return new SystemPromptTemplate(this.template, this.variables, this.renderer);
106+
}
107+
}
108+
109+
}
110+
55111
}

0 commit comments

Comments
 (0)