lash_remote_protocol/protocol/
prompt.rs1#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
2pub struct RemotePromptLayer {
3 #[serde(default, skip_serializing_if = "Option::is_none")]
4 pub template: Option<RemotePromptTemplate>,
5 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
6 pub slots: HashMap<RemotePromptSlot, RemotePromptSlotLayer>,
7}
8
9impl RemotePromptLayer {
10 pub fn new() -> Self {
11 Self::default()
12 }
13
14 pub fn is_empty(&self) -> bool {
15 self.template.is_none() && self.slots.is_empty()
16 }
17}
18
19#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
20#[serde(rename_all = "snake_case")]
21pub enum RemotePromptBuiltin {
22 MainAgentIntro,
23 ExecutionInstructions,
24 CoreGuidance,
25}
26
27#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
28#[serde(rename_all = "snake_case")]
29pub enum RemotePromptSlot {
30 Intro,
31 Execution,
32 Guidance,
33 ProjectInstructions,
34 RuntimeContext,
35 Environment,
36}
37
38#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
39#[serde(tag = "kind", rename_all = "snake_case")]
40pub enum RemotePromptTemplateEntry {
41 Text { content: String },
42 Builtin { builtin: RemotePromptBuiltin },
43 Slot { slot: RemotePromptSlot },
44}
45
46#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
47pub struct RemotePromptTemplateSection {
48 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub title: Option<String>,
50 #[serde(default, skip_serializing_if = "Vec::is_empty")]
51 pub entries: Vec<RemotePromptTemplateEntry>,
52}
53
54#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
55pub struct RemotePromptTemplate {
56 pub sections: Vec<RemotePromptTemplateSection>,
57}
58
59#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
60pub struct RemotePromptSlotLayer {
61 #[serde(default)]
62 pub reset: bool,
63 #[serde(default, skip_serializing_if = "Vec::is_empty")]
64 pub contributions: Vec<RemotePromptContribution>,
65}
66
67#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
68pub struct RemotePromptContribution {
69 pub slot: RemotePromptSlot,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
71 pub title: Option<String>,
72 #[serde(default)]
73 pub priority: i32,
74 #[serde(
75 default,
76 skip_serializing_if = "RemotePromptContributionGate::is_empty"
77 )]
78 pub gate: RemotePromptContributionGate,
79 pub content: String,
80}
81
82#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
83pub struct RemotePromptContributionGate {
84 #[serde(default, skip_serializing_if = "Vec::is_empty")]
85 pub tools: Vec<String>,
86 #[serde(default)]
87 pub minimum_availability: RemoteToolAvailability,
88}
89
90impl RemotePromptContributionGate {
91 pub fn is_empty(&self) -> bool {
92 self.tools.is_empty()
93 }
94}