20
20
21
21
import org .springframework .ai .chat .messages .Message ;
22
22
import org .springframework .ai .chat .messages .SystemMessage ;
23
+ import org .springframework .ai .template .TemplateRenderer ;
23
24
import org .springframework .core .io .Resource ;
25
+ import org .springframework .util .Assert ;
24
26
25
27
public class SystemPromptTemplate extends PromptTemplate {
26
28
@@ -32,6 +34,14 @@ public SystemPromptTemplate(Resource resource) {
32
34
super (resource );
33
35
}
34
36
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
+
35
45
@ Override
36
46
public Message createMessage () {
37
47
return new SystemMessage (render ());
@@ -52,4 +62,50 @@ public Prompt create(Map<String, Object> model) {
52
62
return new Prompt (new SystemMessage (render (model )));
53
63
}
54
64
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
+
55
111
}
0 commit comments