2020
2121import org .springframework .ai .chat .messages .Message ;
2222import org .springframework .ai .chat .messages .SystemMessage ;
23+ import org .springframework .ai .template .TemplateRenderer ;
2324import org .springframework .core .io .Resource ;
25+ import org .springframework .util .Assert ;
2426
2527public 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