mirror of
https://github.com/katanemo/plano.git
synced 2026-07-02 15:51:02 +02:00
allow for MessageContent to track NULL in special cases
This commit is contained in:
parent
b4dce33e38
commit
71cc5f2d96
5 changed files with 11 additions and 8 deletions
|
|
@ -649,6 +649,7 @@ impl ArchFunctionHandler {
|
||||||
for (idx, message) in messages.iter().enumerate() {
|
for (idx, message) in messages.iter().enumerate() {
|
||||||
let mut role = message.role.clone();
|
let mut role = message.role.clone();
|
||||||
let mut content = match &message.content {
|
let mut content = match &message.content {
|
||||||
|
MessageContent::Null => String::new(),
|
||||||
MessageContent::Text(text) => text.clone(),
|
MessageContent::Text(text) => text.clone(),
|
||||||
MessageContent::Parts(_) => String::new(),
|
MessageContent::Parts(_) => String::new(),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -219,6 +219,7 @@ impl ResponseMessage {
|
||||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||||
#[serde(untagged)]
|
#[serde(untagged)]
|
||||||
pub enum MessageContent {
|
pub enum MessageContent {
|
||||||
|
Null,
|
||||||
Text(String),
|
Text(String),
|
||||||
Parts(Vec<ContentPart>),
|
Parts(Vec<ContentPart>),
|
||||||
}
|
}
|
||||||
|
|
@ -227,6 +228,7 @@ pub enum MessageContent {
|
||||||
impl ExtractText for MessageContent {
|
impl ExtractText for MessageContent {
|
||||||
fn extract_text(&self) -> String {
|
fn extract_text(&self) -> String {
|
||||||
match self {
|
match self {
|
||||||
|
MessageContent::Null => String::new(),
|
||||||
MessageContent::Text(text) => text.clone(),
|
MessageContent::Text(text) => text.clone(),
|
||||||
MessageContent::Parts(parts) => parts.extract_text(),
|
MessageContent::Parts(parts) => parts.extract_text(),
|
||||||
}
|
}
|
||||||
|
|
@ -248,6 +250,7 @@ impl ExtractText for Vec<ContentPart> {
|
||||||
impl Display for MessageContent {
|
impl Display for MessageContent {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
|
MessageContent::Null => write!(f, ""),
|
||||||
MessageContent::Text(text) => write!(f, "{}", text),
|
MessageContent::Text(text) => write!(f, "{}", text),
|
||||||
MessageContent::Parts(parts) => {
|
MessageContent::Parts(parts) => {
|
||||||
let text_parts: Vec<String> = parts
|
let text_parts: Vec<String> = parts
|
||||||
|
|
@ -624,6 +627,7 @@ impl ProviderRequest for ChatCompletionsRequest {
|
||||||
self.messages.iter().fold(String::new(), |acc, m| {
|
self.messages.iter().fold(String::new(), |acc, m| {
|
||||||
acc + " "
|
acc + " "
|
||||||
+ &match &m.content {
|
+ &match &m.content {
|
||||||
|
MessageContent::Null => String::new(),
|
||||||
MessageContent::Text(text) => text.clone(),
|
MessageContent::Text(text) => text.clone(),
|
||||||
MessageContent::Parts(parts) => parts
|
MessageContent::Parts(parts) => parts
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -640,6 +644,7 @@ impl ProviderRequest for ChatCompletionsRequest {
|
||||||
fn get_recent_user_message(&self) -> Option<String> {
|
fn get_recent_user_message(&self) -> Option<String> {
|
||||||
self.messages.last().and_then(|msg| {
|
self.messages.last().and_then(|msg| {
|
||||||
match &msg.content {
|
match &msg.content {
|
||||||
|
MessageContent::Null => None,
|
||||||
MessageContent::Text(text) => Some(text.clone()),
|
MessageContent::Text(text) => Some(text.clone()),
|
||||||
MessageContent::Parts(_) => None, // No user message in parts
|
MessageContent::Parts(_) => None, // No user message in parts
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,7 @@ pub fn convert_openai_message_to_anthropic_content(
|
||||||
|
|
||||||
// Handle regular content
|
// Handle regular content
|
||||||
match &message.content {
|
match &message.content {
|
||||||
|
MessageContent::Null => {}
|
||||||
MessageContent::Text(text) => {
|
MessageContent::Text(text) => {
|
||||||
if !text.is_empty() {
|
if !text.is_empty() {
|
||||||
blocks.push(MessagesContentBlock::Text {
|
blocks.push(MessagesContentBlock::Text {
|
||||||
|
|
|
||||||
|
|
@ -174,10 +174,7 @@ impl TryFrom<ResponsesInputConverter> for Vec<Message> {
|
||||||
|
|
||||||
impl From<Message> for MessagesSystemPrompt {
|
impl From<Message> for MessagesSystemPrompt {
|
||||||
fn from(val: Message) -> Self {
|
fn from(val: Message) -> Self {
|
||||||
let system_text = match val.content {
|
let system_text = val.content.extract_text();
|
||||||
MessageContent::Text(text) => text,
|
|
||||||
MessageContent::Parts(parts) => parts.extract_text(),
|
|
||||||
};
|
|
||||||
MessagesSystemPrompt::Single(system_text)
|
MessagesSystemPrompt::Single(system_text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -248,6 +245,7 @@ impl TryFrom<Message> for BedrockMessage {
|
||||||
Role::User => {
|
Role::User => {
|
||||||
// Convert user message content to content blocks
|
// Convert user message content to content blocks
|
||||||
match message.content {
|
match message.content {
|
||||||
|
MessageContent::Null => {}
|
||||||
MessageContent::Text(text) => {
|
MessageContent::Text(text) => {
|
||||||
if !text.is_empty() {
|
if !text.is_empty() {
|
||||||
content_blocks.push(ContentBlock::Text { text });
|
content_blocks.push(ContentBlock::Text { text });
|
||||||
|
|
@ -550,10 +548,7 @@ impl TryFrom<ChatCompletionsRequest> for ConverseRequest {
|
||||||
for message in req.messages {
|
for message in req.messages {
|
||||||
match message.role {
|
match message.role {
|
||||||
Role::System => {
|
Role::System => {
|
||||||
let system_text = match message.content {
|
let system_text = message.content.extract_text();
|
||||||
MessageContent::Text(text) => text,
|
|
||||||
MessageContent::Parts(parts) => parts.extract_text(),
|
|
||||||
};
|
|
||||||
system_messages.push(SystemContentBlock::Text { text: system_text });
|
system_messages.push(SystemContentBlock::Text { text: system_text });
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
|
|
||||||
|
|
@ -209,6 +209,7 @@ impl TryFrom<MessagesResponse> for ChatCompletionsResponse {
|
||||||
|
|
||||||
// Convert MessageContent to String for response
|
// Convert MessageContent to String for response
|
||||||
let content_string = match content {
|
let content_string = match content {
|
||||||
|
MessageContent::Null => None,
|
||||||
MessageContent::Text(text) => Some(text),
|
MessageContent::Text(text) => Some(text),
|
||||||
MessageContent::Parts(parts) => {
|
MessageContent::Parts(parts) => {
|
||||||
let text = parts.extract_text();
|
let text = parts.extract_text();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue