mirror of
https://github.com/katanemo/plano.git
synced 2026-06-20 15:28:07 +02:00
fix precommit and tests
This commit is contained in:
parent
3a2c1828ee
commit
58cf6b29bc
2 changed files with 35 additions and 39 deletions
|
|
@ -537,17 +537,13 @@ mod tests {
|
||||||
let agent_map = HashMap::new();
|
let agent_map = HashMap::new();
|
||||||
let request_headers = HeaderMap::new();
|
let request_headers = HeaderMap::new();
|
||||||
|
|
||||||
let initial_request = ChatCompletionsRequest {
|
let messages = vec![create_test_message(Role::User, "Hello")];
|
||||||
messages: vec![create_test_message(Role::User, "Hello")],
|
|
||||||
model: "test-model".to_string(),
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
|
|
||||||
let pipeline = create_test_pipeline(vec!["nonexistent-agent", "terminal-agent"]);
|
let pipeline = create_test_pipeline(vec!["nonexistent-agent", "terminal-agent"]);
|
||||||
|
|
||||||
let result = processor
|
let result = processor
|
||||||
.process_filter_chain(
|
.process_filter_chain(
|
||||||
&initial_request.messages,
|
&messages,
|
||||||
&pipeline,
|
&pipeline,
|
||||||
&agent_map,
|
&agent_map,
|
||||||
&request_headers,
|
&request_headers,
|
||||||
|
|
|
||||||
|
|
@ -54,31 +54,31 @@ impl ProviderRequestType {
|
||||||
/// This is useful for processing chat history across different provider formats
|
/// This is useful for processing chat history across different provider formats
|
||||||
pub fn get_message_history(&self) -> Vec<crate::apis::openai::Message> {
|
pub fn get_message_history(&self) -> Vec<crate::apis::openai::Message> {
|
||||||
use crate::apis::openai::{Message, MessageContent, Role};
|
use crate::apis::openai::{Message, MessageContent, Role};
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
Self::ChatCompletionsRequest(r) => r.messages.clone(),
|
Self::ChatCompletionsRequest(r) => r.messages.clone(),
|
||||||
Self::MessagesRequest(r) => {
|
Self::MessagesRequest(r) => {
|
||||||
// Convert Anthropic messages to OpenAI format
|
// Convert Anthropic messages to OpenAI format
|
||||||
let mut openai_messages = Vec::new();
|
let mut openai_messages = Vec::new();
|
||||||
|
|
||||||
// Add system prompt as system message if present
|
// Add system prompt as system message if present
|
||||||
if let Some(system) = &r.system {
|
if let Some(system) = &r.system {
|
||||||
openai_messages.push(system.clone().into());
|
openai_messages.push(system.clone().into());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert each Anthropic message to OpenAI format
|
// Convert each Anthropic message to OpenAI format
|
||||||
for msg in &r.messages {
|
for msg in &r.messages {
|
||||||
if let Ok(converted_msgs) = TryInto::<Vec<Message>>::try_into(msg.clone()) {
|
if let Ok(converted_msgs) = TryInto::<Vec<Message>>::try_into(msg.clone()) {
|
||||||
openai_messages.extend(converted_msgs);
|
openai_messages.extend(converted_msgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
openai_messages
|
openai_messages
|
||||||
}
|
}
|
||||||
Self::BedrockConverse(r) => {
|
Self::BedrockConverse(r) => {
|
||||||
// Convert Bedrock messages to OpenAI format
|
// Convert Bedrock messages to OpenAI format
|
||||||
let mut openai_messages = Vec::new();
|
let mut openai_messages = Vec::new();
|
||||||
|
|
||||||
// Add system messages if present
|
// Add system messages if present
|
||||||
if let Some(system) = &r.system {
|
if let Some(system) = &r.system {
|
||||||
for sys_block in system {
|
for sys_block in system {
|
||||||
|
|
@ -96,7 +96,7 @@ impl ProviderRequestType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert conversation messages
|
// Convert conversation messages
|
||||||
if let Some(messages) = &r.messages {
|
if let Some(messages) = &r.messages {
|
||||||
for msg in messages {
|
for msg in messages {
|
||||||
|
|
@ -104,7 +104,7 @@ impl ProviderRequestType {
|
||||||
crate::apis::amazon_bedrock::ConversationRole::User => Role::User,
|
crate::apis::amazon_bedrock::ConversationRole::User => Role::User,
|
||||||
crate::apis::amazon_bedrock::ConversationRole::Assistant => Role::Assistant,
|
crate::apis::amazon_bedrock::ConversationRole::Assistant => Role::Assistant,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Extract text from content blocks
|
// Extract text from content blocks
|
||||||
let content = msg.content.iter()
|
let content = msg.content.iter()
|
||||||
.filter_map(|block| {
|
.filter_map(|block| {
|
||||||
|
|
@ -116,7 +116,7 @@ impl ProviderRequestType {
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
|
||||||
openai_messages.push(Message {
|
openai_messages.push(Message {
|
||||||
role,
|
role,
|
||||||
content: MessageContent::Text(content),
|
content: MessageContent::Text(content),
|
||||||
|
|
@ -126,13 +126,13 @@ impl ProviderRequestType {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
openai_messages
|
openai_messages
|
||||||
}
|
}
|
||||||
Self::BedrockConverseStream(r) => {
|
Self::BedrockConverseStream(r) => {
|
||||||
// Same as BedrockConverse
|
// Same as BedrockConverse
|
||||||
let mut openai_messages = Vec::new();
|
let mut openai_messages = Vec::new();
|
||||||
|
|
||||||
if let Some(system) = &r.system {
|
if let Some(system) = &r.system {
|
||||||
for sys_block in system {
|
for sys_block in system {
|
||||||
match sys_block {
|
match sys_block {
|
||||||
|
|
@ -149,14 +149,14 @@ impl ProviderRequestType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(messages) = &r.messages {
|
if let Some(messages) = &r.messages {
|
||||||
for msg in messages {
|
for msg in messages {
|
||||||
let role = match msg.role {
|
let role = match msg.role {
|
||||||
crate::apis::amazon_bedrock::ConversationRole::User => Role::User,
|
crate::apis::amazon_bedrock::ConversationRole::User => Role::User,
|
||||||
crate::apis::amazon_bedrock::ConversationRole::Assistant => Role::Assistant,
|
crate::apis::amazon_bedrock::ConversationRole::Assistant => Role::Assistant,
|
||||||
};
|
};
|
||||||
|
|
||||||
let content = msg.content.iter()
|
let content = msg.content.iter()
|
||||||
.filter_map(|block| {
|
.filter_map(|block| {
|
||||||
if let crate::apis::amazon_bedrock::ContentBlock::Text { text } = block {
|
if let crate::apis::amazon_bedrock::ContentBlock::Text { text } = block {
|
||||||
|
|
@ -167,7 +167,7 @@ impl ProviderRequestType {
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
|
||||||
openai_messages.push(Message {
|
openai_messages.push(Message {
|
||||||
role,
|
role,
|
||||||
content: MessageContent::Text(content),
|
content: MessageContent::Text(content),
|
||||||
|
|
@ -177,13 +177,13 @@ impl ProviderRequestType {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
openai_messages
|
openai_messages
|
||||||
}
|
}
|
||||||
Self::ResponsesAPIRequest(r) => {
|
Self::ResponsesAPIRequest(r) => {
|
||||||
// Convert ResponsesAPIRequest input to a user message
|
// Convert ResponsesAPIRequest input to a user message
|
||||||
let mut openai_messages = Vec::new();
|
let mut openai_messages = Vec::new();
|
||||||
|
|
||||||
// Add instructions as system message if present
|
// Add instructions as system message if present
|
||||||
if let Some(instructions) = &r.instructions {
|
if let Some(instructions) = &r.instructions {
|
||||||
openai_messages.push(Message {
|
openai_messages.push(Message {
|
||||||
|
|
@ -194,7 +194,7 @@ impl ProviderRequestType {
|
||||||
tool_call_id: None,
|
tool_call_id: None,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert input to messages
|
// Convert input to messages
|
||||||
use crate::apis::openai_responses::{InputParam, InputItem};
|
use crate::apis::openai_responses::{InputParam, InputItem};
|
||||||
match &r.input {
|
match &r.input {
|
||||||
|
|
@ -218,7 +218,7 @@ impl ProviderRequestType {
|
||||||
crate::apis::openai_responses::MessageRole::System => Role::System,
|
crate::apis::openai_responses::MessageRole::System => Role::System,
|
||||||
crate::apis::openai_responses::MessageRole::Developer => Role::System, // Map developer to system
|
crate::apis::openai_responses::MessageRole::Developer => Role::System, // Map developer to system
|
||||||
};
|
};
|
||||||
|
|
||||||
// Extract text from message content
|
// Extract text from message content
|
||||||
let content = msg.content.iter()
|
let content = msg.content.iter()
|
||||||
.filter_map(|c| {
|
.filter_map(|c| {
|
||||||
|
|
@ -230,7 +230,7 @@ impl ProviderRequestType {
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
|
||||||
openai_messages.push(Message {
|
openai_messages.push(Message {
|
||||||
role,
|
role,
|
||||||
content: MessageContent::Text(content),
|
content: MessageContent::Text(content),
|
||||||
|
|
@ -243,7 +243,7 @@ impl ProviderRequestType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
openai_messages
|
openai_messages
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -261,7 +261,7 @@ impl ProviderRequestType {
|
||||||
// Separate system messages from regular messages
|
// Separate system messages from regular messages
|
||||||
let mut system_messages = Vec::new();
|
let mut system_messages = Vec::new();
|
||||||
let mut regular_messages = Vec::new();
|
let mut regular_messages = Vec::new();
|
||||||
|
|
||||||
for msg in messages {
|
for msg in messages {
|
||||||
if msg.role == crate::apis::openai::Role::System {
|
if msg.role == crate::apis::openai::Role::System {
|
||||||
system_messages.push(msg.clone());
|
system_messages.push(msg.clone());
|
||||||
|
|
@ -269,7 +269,7 @@ impl ProviderRequestType {
|
||||||
regular_messages.push(msg.clone());
|
regular_messages.push(msg.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set system prompt if there are system messages
|
// Set system prompt if there are system messages
|
||||||
if !system_messages.is_empty() {
|
if !system_messages.is_empty() {
|
||||||
// Combine all system messages into one
|
// Combine all system messages into one
|
||||||
|
|
@ -283,10 +283,10 @@ impl ProviderRequestType {
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
|
||||||
r.system = Some(crate::apis::anthropic::MessagesSystemPrompt::Single(system_text));
|
r.system = Some(crate::apis::anthropic::MessagesSystemPrompt::Single(system_text));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert regular messages
|
// Convert regular messages
|
||||||
r.messages = regular_messages.iter()
|
r.messages = regular_messages.iter()
|
||||||
.filter_map(|msg| {
|
.filter_map(|msg| {
|
||||||
|
|
@ -297,10 +297,10 @@ impl ProviderRequestType {
|
||||||
Self::BedrockConverse(r) | Self::BedrockConverseStream(r) => {
|
Self::BedrockConverse(r) | Self::BedrockConverseStream(r) => {
|
||||||
// Convert OpenAI messages to Bedrock format
|
// Convert OpenAI messages to Bedrock format
|
||||||
use crate::apis::amazon_bedrock::{ContentBlock, ConversationRole, SystemContentBlock};
|
use crate::apis::amazon_bedrock::{ContentBlock, ConversationRole, SystemContentBlock};
|
||||||
|
|
||||||
let mut system_blocks = Vec::new();
|
let mut system_blocks = Vec::new();
|
||||||
let mut bedrock_messages = Vec::new();
|
let mut bedrock_messages = Vec::new();
|
||||||
|
|
||||||
for msg in messages {
|
for msg in messages {
|
||||||
match msg.role {
|
match msg.role {
|
||||||
crate::apis::openai::Role::System => {
|
crate::apis::openai::Role::System => {
|
||||||
|
|
@ -314,13 +314,13 @@ impl ProviderRequestType {
|
||||||
crate::apis::openai::Role::Assistant => ConversationRole::Assistant,
|
crate::apis::openai::Role::Assistant => ConversationRole::Assistant,
|
||||||
_ => continue,
|
_ => continue,
|
||||||
};
|
};
|
||||||
|
|
||||||
let content = if let crate::apis::openai::MessageContent::Text(text) = &msg.content {
|
let content = if let crate::apis::openai::MessageContent::Text(text) = &msg.content {
|
||||||
vec![ContentBlock::Text { text: text.clone() }]
|
vec![ContentBlock::Text { text: text.clone() }]
|
||||||
} else {
|
} else {
|
||||||
vec![]
|
vec![]
|
||||||
};
|
};
|
||||||
|
|
||||||
bedrock_messages.push(crate::apis::amazon_bedrock::Message {
|
bedrock_messages.push(crate::apis::amazon_bedrock::Message {
|
||||||
role,
|
role,
|
||||||
content,
|
content,
|
||||||
|
|
@ -329,7 +329,7 @@ impl ProviderRequestType {
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !system_blocks.is_empty() {
|
if !system_blocks.is_empty() {
|
||||||
r.system = Some(system_blocks);
|
r.system = Some(system_blocks);
|
||||||
}
|
}
|
||||||
|
|
@ -349,18 +349,18 @@ impl ProviderRequestType {
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
|
||||||
if !system_text.is_empty() {
|
if !system_text.is_empty() {
|
||||||
r.instructions = Some(system_text);
|
r.instructions = Some(system_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert user/assistant messages to InputParam
|
// Convert user/assistant messages to InputParam
|
||||||
// For simplicity, we'll use the last user message as the input
|
// For simplicity, we'll use the last user message as the input
|
||||||
// or combine all non-system messages
|
// or combine all non-system messages
|
||||||
let input_messages: Vec<_> = messages.iter()
|
let input_messages: Vec<_> = messages.iter()
|
||||||
.filter(|msg| msg.role != crate::apis::openai::Role::System)
|
.filter(|msg| msg.role != crate::apis::openai::Role::System)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if !input_messages.is_empty() {
|
if !input_messages.is_empty() {
|
||||||
// If there's only one message, use Text format
|
// If there's only one message, use Text format
|
||||||
if input_messages.len() == 1 {
|
if input_messages.len() == 1 {
|
||||||
|
|
@ -373,7 +373,7 @@ impl ProviderRequestType {
|
||||||
let combined_text = input_messages.iter()
|
let combined_text = input_messages.iter()
|
||||||
.filter_map(|msg| {
|
.filter_map(|msg| {
|
||||||
if let crate::apis::openai::MessageContent::Text(text) = &msg.content {
|
if let crate::apis::openai::MessageContent::Text(text) = &msg.content {
|
||||||
Some(format!("{}: {}",
|
Some(format!("{}: {}",
|
||||||
match msg.role {
|
match msg.role {
|
||||||
crate::apis::openai::Role::User => "User",
|
crate::apis::openai::Role::User => "User",
|
||||||
crate::apis::openai::Role::Assistant => "Assistant",
|
crate::apis::openai::Role::Assistant => "Assistant",
|
||||||
|
|
@ -387,7 +387,7 @@ impl ProviderRequestType {
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
|
||||||
r.input = crate::apis::openai_responses::InputParam::Text(combined_text);
|
r.input = crate::apis::openai_responses::InputParam::Text(combined_text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue