siumai-bridge 0.11.0-beta.9

Protocol bridge helpers for siumai gateway and facade integrations
Documentation
//! Shared response-target capability definitions for bridge inspection.

use crate::BridgeTarget;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(super) enum ResponseUsageMode {
    PreserveAll,
    AnthropicAggregateOnly,
    GeminiPartialBreakdown,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(super) enum ResponseFinishReasonMode {
    OpenAiFamily,
    AnthropicMessages,
    GeminiGenerateContent,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(super) enum ResponseContentPartProviderMetadataMode {
    OpenAiResponses,
    AnthropicMessages,
    GeminiGenerateContent,
    None,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(super) enum ResponseProviderMetadataMode {
    OpenAiResponses,
    AnthropicMessages,
    GeminiGenerateContent,
    None,
}

#[derive(Debug, Clone, Copy)]
pub(super) struct ResponseTargetCapabilities {
    pub target: BridgeTarget,
    pub supports_reasoning_blocks: bool,
    pub supports_system_fingerprint: bool,
    pub supports_service_tier: bool,
    pub supports_provider_executed_tool_results: bool,
    pub supports_tool_approval_requests: bool,
    pub supports_source_parts_as_grounding: bool,
    pub usage_mode: ResponseUsageMode,
    pub finish_reason_mode: ResponseFinishReasonMode,
    pub content_part_provider_metadata_mode: ResponseContentPartProviderMetadataMode,
    pub provider_metadata_mode: ResponseProviderMetadataMode,
}

pub(super) const fn response_target_capabilities(
    target: BridgeTarget,
) -> ResponseTargetCapabilities {
    match target {
        BridgeTarget::OpenAiResponses => ResponseTargetCapabilities {
            target,
            supports_reasoning_blocks: true,
            supports_system_fingerprint: true,
            supports_service_tier: true,
            supports_provider_executed_tool_results: true,
            supports_tool_approval_requests: true,
            supports_source_parts_as_grounding: false,
            usage_mode: ResponseUsageMode::PreserveAll,
            finish_reason_mode: ResponseFinishReasonMode::OpenAiFamily,
            content_part_provider_metadata_mode:
                ResponseContentPartProviderMetadataMode::OpenAiResponses,
            provider_metadata_mode: ResponseProviderMetadataMode::OpenAiResponses,
        },
        BridgeTarget::OpenAiChatCompletions => ResponseTargetCapabilities {
            target,
            supports_reasoning_blocks: false,
            supports_system_fingerprint: true,
            supports_service_tier: true,
            supports_provider_executed_tool_results: false,
            supports_tool_approval_requests: false,
            supports_source_parts_as_grounding: false,
            usage_mode: ResponseUsageMode::PreserveAll,
            finish_reason_mode: ResponseFinishReasonMode::OpenAiFamily,
            content_part_provider_metadata_mode: ResponseContentPartProviderMetadataMode::None,
            provider_metadata_mode: ResponseProviderMetadataMode::None,
        },
        BridgeTarget::AnthropicMessages => ResponseTargetCapabilities {
            target,
            supports_reasoning_blocks: true,
            supports_system_fingerprint: false,
            supports_service_tier: true,
            supports_provider_executed_tool_results: true,
            supports_tool_approval_requests: false,
            supports_source_parts_as_grounding: false,
            usage_mode: ResponseUsageMode::AnthropicAggregateOnly,
            finish_reason_mode: ResponseFinishReasonMode::AnthropicMessages,
            content_part_provider_metadata_mode:
                ResponseContentPartProviderMetadataMode::AnthropicMessages,
            provider_metadata_mode: ResponseProviderMetadataMode::AnthropicMessages,
        },
        BridgeTarget::GeminiGenerateContent => ResponseTargetCapabilities {
            target,
            supports_reasoning_blocks: true,
            supports_system_fingerprint: false,
            supports_service_tier: false,
            supports_provider_executed_tool_results: false,
            supports_tool_approval_requests: false,
            supports_source_parts_as_grounding: true,
            usage_mode: ResponseUsageMode::GeminiPartialBreakdown,
            finish_reason_mode: ResponseFinishReasonMode::GeminiGenerateContent,
            content_part_provider_metadata_mode:
                ResponseContentPartProviderMetadataMode::GeminiGenerateContent,
            provider_metadata_mode: ResponseProviderMetadataMode::GeminiGenerateContent,
        },
    }
}