forked from github/copilot-sdk-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSystemMessageConfig.java
More file actions
140 lines (129 loc) · 4.47 KB
/
SystemMessageConfig.java
File metadata and controls
140 lines (129 loc) · 4.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
*--------------------------------------------------------------------------------------------*/
package com.github.copilot.sdk.json;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.github.copilot.sdk.SystemMessageMode;
/**
* Configuration for customizing the system message.
* <p>
* The system message controls the behavior and personality of the AI assistant.
* This configuration allows you to either append to, replace, or fine-tune the
* default system message.
*
* <h2>Example - Append Mode</h2>
*
* <pre>{@code
* var config = new SystemMessageConfig().setMode(SystemMessageMode.APPEND)
* .setContent("Always respond in a formal tone.");
* }</pre>
*
* <h2>Example - Replace Mode</h2>
*
* <pre>{@code
* var config = new SystemMessageConfig().setMode(SystemMessageMode.REPLACE)
* .setContent("You are a helpful coding assistant.");
* }</pre>
*
* <h2>Example - Customize Mode</h2>
*
* <pre>{@code
* var config = new SystemMessageConfig().setMode(SystemMessageMode.CUSTOMIZE)
* .setSections(
* Map.of(SystemPromptSections.TONE,
* new SectionOverride().setAction(SectionOverrideAction.REPLACE)
* .setContent("Be concise and formal."),
* SystemPromptSections.CODE_CHANGE_RULES,
* new SectionOverride().setAction(SectionOverrideAction.REMOVE)))
* .setContent("Additional instructions appended after all sections.");
* }</pre>
*
* @see SessionConfig#setSystemMessage(SystemMessageConfig)
* @see SystemMessageMode
* @see SectionOverride
* @see SystemPromptSections
* @since 1.0.0
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SystemMessageConfig {
private SystemMessageMode mode;
private String content;
@JsonInclude(JsonInclude.Include.NON_NULL)
@com.fasterxml.jackson.annotation.JsonProperty("sections")
private Map<String, SectionOverride> sections;
/**
* Gets the system message mode.
*
* @return the mode (APPEND, REPLACE, or CUSTOMIZE)
*/
public SystemMessageMode getMode() {
return mode;
}
/**
* Sets the system message mode.
* <p>
* Use {@link SystemMessageMode#APPEND} to add to the default system message
* while preserving guardrails, {@link SystemMessageMode#REPLACE} to fully
* customize the system message, or {@link SystemMessageMode#CUSTOMIZE} to
* override individual sections.
*
* @param mode
* the mode (APPEND, REPLACE, or CUSTOMIZE)
* @return this config for method chaining
*/
public SystemMessageConfig setMode(SystemMessageMode mode) {
this.mode = mode;
return this;
}
/**
* Gets the system message content.
*
* @return the content to append or use as replacement
*/
public String getContent() {
return content;
}
/**
* Sets the system message content.
* <p>
* For {@link SystemMessageMode#APPEND} and {@link SystemMessageMode#REPLACE}
* modes, this is the primary content. For {@link SystemMessageMode#CUSTOMIZE}
* mode, this is appended after all section overrides.
*
* @param content
* the system message content
* @return this config for method chaining
*/
public SystemMessageConfig setContent(String content) {
this.content = content;
return this;
}
/**
* Gets the section-level overrides for {@link SystemMessageMode#CUSTOMIZE}
* mode.
*
* @return the sections map, or {@code null}
*/
public Map<String, SectionOverride> getSections() {
return sections;
}
/**
* Sets section-level overrides for {@link SystemMessageMode#CUSTOMIZE} mode.
* <p>
* Keys are section identifiers from {@link SystemPromptSections}. Each value
* describes how that section should be modified. Sections with a
* {@link SectionOverride#getTransform() transform} callback are handled locally
* by the SDK via a {@code systemMessage.transform} RPC call; the rest are sent
* to the CLI as-is.
*
* @param sections
* a map of section identifier to override operation
* @return this config for method chaining
* @since 1.2.0
*/
public SystemMessageConfig setSections(Map<String, SectionOverride> sections) {
this.sections = sections;
return this;
}
}