roder-api 0.2.3

Agentic software development tools and SDKs for Roder.
Documentation
use super::{
    EDIT_TOOL_PATCH, ModelCatalogEntry, PROVIDER_OPENAI, REASONING_HIGH, REASONING_LOW,
    REASONING_MAX, REASONING_MEDIUM, REASONING_NONE, REASONING_ULTRA, REASONING_XHIGH,
    ReasoningOption, STANDARD_REASONING,
};

const GPT_56_REASONING: &[ReasoningOption] = &[
    ReasoningOption {
        effort: REASONING_LOW,
        description: "Fast responses with lighter reasoning",
    },
    ReasoningOption {
        effort: REASONING_MEDIUM,
        description: "Balances speed and reasoning depth for everyday tasks",
    },
    ReasoningOption {
        effort: REASONING_HIGH,
        description: "Greater reasoning depth for complex problems",
    },
    ReasoningOption {
        effort: REASONING_XHIGH,
        description: "Extra high reasoning depth for complex problems",
    },
    ReasoningOption {
        effort: REASONING_MAX,
        description: "Maximum reasoning depth for the hardest problems",
    },
    ReasoningOption {
        effort: REASONING_ULTRA,
        description: "Maximum reasoning with automatic task delegation",
    },
];

const GPT_56_LUNA_REASONING: &[ReasoningOption] = &[
    ReasoningOption {
        effort: REASONING_LOW,
        description: "Fast responses with lighter reasoning",
    },
    ReasoningOption {
        effort: REASONING_MEDIUM,
        description: "Balances speed and reasoning depth for everyday tasks",
    },
    ReasoningOption {
        effort: REASONING_HIGH,
        description: "Greater reasoning depth for complex problems",
    },
    ReasoningOption {
        effort: REASONING_XHIGH,
        description: "Extra high reasoning depth for complex problems",
    },
    ReasoningOption {
        effort: REASONING_MAX,
        description: "Maximum reasoning depth for the hardest problems",
    },
];

const GPT_6_REASONING: &[ReasoningOption] = &[
    ReasoningOption {
        effort: REASONING_LOW,
        description: "Fast responses with lighter reasoning",
    },
    ReasoningOption {
        effort: REASONING_MEDIUM,
        description: "Balances speed and reasoning depth for everyday tasks",
    },
    ReasoningOption {
        effort: REASONING_HIGH,
        description: "Greater reasoning depth for complex problems",
    },
    ReasoningOption {
        effort: REASONING_XHIGH,
        description: "Extra high reasoning depth for complex problems",
    },
    ReasoningOption {
        effort: REASONING_MAX,
        description: "Maximum reasoning depth for the hardest problems",
    },
];

const GPT_6_SOL_LUNA_REASONING: &[ReasoningOption] = &[
    ReasoningOption {
        effort: REASONING_NONE,
        description: "No reasoning for fastest responses",
    },
    ReasoningOption {
        effort: REASONING_LOW,
        description: "Fast responses with lighter reasoning",
    },
    ReasoningOption {
        effort: REASONING_MEDIUM,
        description: "Balanced reasoning",
    },
    ReasoningOption {
        effort: REASONING_HIGH,
        description: "Deeper reasoning",
    },
    ReasoningOption {
        effort: REASONING_XHIGH,
        description: "Extra high reasoning",
    },
    ReasoningOption {
        effort: REASONING_MAX,
        description: "Maximum reasoning",
    },
];

pub(super) const GPT_6_ASTRA: ModelCatalogEntry = openai_codex_model(
    "gpt-6-astra",
    "GPT-6-Astra",
    "OpenAI's most capable model, built for the hardest end-to-end work.",
    REASONING_HIGH,
    GPT_6_REASONING,
    1_050_000,
    1_050_000,
);

pub(super) const GPT_6_SOL: ModelCatalogEntry = openai_codex_model(
    "gpt-6-sol",
    "GPT-6 Sol",
    "Agentic coding model balancing intelligence and cost.",
    REASONING_MEDIUM,
    GPT_6_SOL_LUNA_REASONING,
    1_050_000,
    1_050_000,
);

pub(super) const GPT_6_LUNA: ModelCatalogEntry = openai_codex_model(
    "gpt-6-luna",
    "GPT-6 Luna",
    "Efficient model for focused, high-volume tasks.",
    REASONING_MEDIUM,
    GPT_6_SOL_LUNA_REASONING,
    1_050_000,
    1_050_000,
);

pub(super) const GPT_56_SOL: ModelCatalogEntry = openai_codex_model(
    "gpt-5.6-sol",
    "GPT-5.6-Sol",
    "Latest frontier agentic coding model.",
    REASONING_LOW,
    GPT_56_REASONING,
    372_000,
    372_000,
);

pub(super) const GPT_56_TERRA: ModelCatalogEntry = openai_codex_model(
    "gpt-5.6-terra",
    "GPT-5.6-Terra",
    "Balanced agentic coding model for everyday work.",
    REASONING_MEDIUM,
    GPT_56_REASONING,
    372_000,
    372_000,
);

pub(super) const GPT_56_LUNA: ModelCatalogEntry = openai_codex_model(
    "gpt-5.6-luna",
    "GPT-5.6-Luna",
    "Fast and affordable agentic coding model.",
    REASONING_MEDIUM,
    GPT_56_LUNA_REASONING,
    372_000,
    372_000,
);

pub(super) const GPT_54: ModelCatalogEntry = openai_codex_model(
    "gpt-5.4",
    "GPT-5.4",
    "Strong model for everyday coding.",
    REASONING_MEDIUM,
    STANDARD_REASONING,
    272_000,
    1_000_000,
);

const fn openai_codex_model(
    id: &'static str,
    display_name: &'static str,
    description: &'static str,
    default_reasoning: &'static str,
    supported_reasoning: &'static [ReasoningOption],
    context_window: u32,
    max_context_window: u32,
) -> ModelCatalogEntry {
    ModelCatalogEntry {
        id,
        display_name,
        description,
        provider: PROVIDER_OPENAI,
        default_reasoning,
        supported_reasoning,
        context_window,
        max_context_window,
        auto_compact_token_limit: context_window.saturating_mul(9) / 10,
        supports_compaction: true,
        supports_images: true,
        supports_tools: true,
        supports_structured: false,
        edit_tool: Some(EDIT_TOOL_PATCH),
        hidden: false,
    }
}