elph-ai 0.0.23

Unified LLM API with provider collections, auth resolution, and streaming
Documentation
use std::collections::HashMap;

use crate::types::{ContentBlock, Message, UserContent};

pub fn infer_copilot_initiator(messages: &[Message]) -> &'static str {
    match messages.last() {
        Some(Message::User { .. }) | None => "user",
        _ => "agent",
    }
}

pub fn has_copilot_vision_input(messages: &[Message]) -> bool {
    messages.iter().any(|msg| match msg {
        Message::User { content, .. } => match content {
            UserContent::Blocks(blocks) => blocks.iter().any(|b| matches!(b, ContentBlock::Image { .. })),
            UserContent::Text(_) => false,
        },
        Message::ToolResult { content, .. } => content.iter().any(|b| matches!(b, ContentBlock::Image { .. })),
        _ => false,
    })
}

pub fn build_copilot_dynamic_headers(messages: &[Message], has_images: bool) -> HashMap<String, String> {
    let mut headers = HashMap::new();
    headers.insert("X-Initiator".to_string(), infer_copilot_initiator(messages).to_string());
    headers.insert("Openai-Intent".to_string(), "conversation-edits".to_string());
    if has_images {
        headers.insert("Copilot-Vision-Request".to_string(), "true".to_string());
    }
    headers
}