Skip to content

Commit 203e790

Browse files
committed
refactor(openai,grouping): system/user separation for planning
- Updated openai.rs to change structured_output_blocking signature: now accepts a system message and a separate set of chat messages for more flexible composition when calling OpenAI. Updated message preparation logic accordingly. - groupings.rs updated to use ChatMessage and the new API from openai.rs, switching message construction to the new approach. Updates grouping logic to call structured_output_blocking with system and user separation. Together these changes improve the modularity and adaptability of agent planning workflows and allow easier integration of new agent modules.
1 parent e24b295 commit 203e790

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

crates/but-action/src/grouping.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
use std::{fmt::Debug, str};
22

3-
use async_openai::types::{ChatCompletionRequestSystemMessage, ChatCompletionRequestUserMessage};
43
use but_tools::workspace::ProjectStatus;
54
use schemars::JsonSchema;
65
use serde::{Deserialize, Serialize};
76

8-
use crate::{OpenAiProvider, openai};
7+
use crate::{ChatMessage, OpenAiProvider, openai};
98

109
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
1110
pub enum BranchSuggestion {
@@ -97,13 +96,11 @@ pub fn group(openai: &OpenAiProvider, project_status: &ProjectStatus) -> anyhow:
9796
serialized_project_status
9897
);
9998

100-
let messages = vec![
101-
ChatCompletionRequestSystemMessage::from(system_message).into(),
102-
ChatCompletionRequestUserMessage::from(user_message).into(),
103-
];
99+
let messages = vec![ChatMessage::User(user_message)];
104100

105-
let grouping = openai::structured_output_blocking::<Grouping>(openai, messages)?
106-
.ok_or_else(|| anyhow::anyhow!("Failed to get grouping from OpenAI"))?;
101+
let grouping =
102+
openai::structured_output_blocking::<Grouping>(openai, system_message, messages)?
103+
.ok_or_else(|| anyhow::anyhow!("Failed to get grouping from OpenAI"))?;
107104

108105
Ok(grouping)
109106
}

crates/but-action/src/openai.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,24 @@ pub fn structured_output_blocking<
121121
T: serde::Serialize + DeserializeOwned + JsonSchema + std::marker::Send + 'static,
122122
>(
123123
openai: &OpenAiProvider,
124-
messages: Vec<ChatCompletionRequestMessage>,
124+
system_message: &str,
125+
chat_messages: Vec<ChatMessage>,
125126
) -> anyhow::Result<Option<T>> {
126127
let client = openai.client()?;
127-
let messages_owned = messages.clone();
128+
let mut messages: Vec<ChatCompletionRequestMessage> =
129+
vec![ChatCompletionRequestSystemMessage::from(system_message).into()];
130+
131+
messages.extend(
132+
chat_messages
133+
.into_iter()
134+
.map(ChatCompletionRequestMessage::from)
135+
.collect::<Vec<_>>(),
136+
);
128137

129138
std::thread::spawn(move || {
130139
tokio::runtime::Runtime::new()
131140
.unwrap()
132-
.block_on(structured_output::<T>(&client, messages_owned))
141+
.block_on(structured_output::<T>(&client, messages))
133142
})
134143
.join()
135144
.unwrap()

0 commit comments

Comments
 (0)