## Background: Amazon Bedrock Guardrails
AWS Bedrock Guardrails enables configurable safety and compliance
controls for generative AI applications:
- Evaluates both user inputs and model responses against policies.
:contentReference[oaicite:8]{index=8}
- Can block or filter content based on harmful categories, denied
topics, PII, or hallucination criteria.
:contentReference[oaicite:9]{index=9}
- Guardrails are applied during inference API calls by specifying
`guardrailIdentifier` and `guardrailVersion` in the request.
:contentReference[oaicite:10]{index=10}
Relevant AWS documentation:
- User Guide:
https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html
- How Guardrails Works:
https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-how.html
- API Reference (GuardrailConfiguration):
https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GuardrailConfiguration.html
Some AWS environments enforce IAM policies that require a guardrail to
be specified on every Bedrock API call (via a `StringEquals` condition
on `bedrock:GuardrailIdentifier`). Without this, Zed returns
`AccessDenied` and Bedrock models are completely unusable in those
environments.
This adds two optional settings, `guardrail_identifier` and
`guardrail_version`, to the Bedrock provider config. When set, a
`GuardrailStreamConfiguration` is attached to every `converse_stream`
request. When unset, behaviour is identical to before.
```json
{
"language_models": {
"bedrock": {
"guardrail_identifier": "arn:aws:bedrock:us-east-1:123456789012:guardrail/abc123",
"guardrail_version": "DRAFT"
}
}
}
```
`guardrail_version` defaults to `"DRAFT"` if omitted.
Release Notes:
- agent: Added `guardrail_identifier` and `guardrail_version` settings
for AWS Bedrock, enabling use in environments where IAM policies require
a guardrail on all model requests
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
500 lines
17 KiB
Rust
500 lines
17 KiB
Rust
use crate::merge_from::MergeFrom;
|
|
use collections::HashMap;
|
|
use language_model_core::ReasoningEffort;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use settings_macros::{MergeFrom, with_fallible_options};
|
|
|
|
use std::sync::Arc;
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct AllLanguageModelSettingsContent {
|
|
pub anthropic: Option<AnthropicSettingsContent>,
|
|
pub bedrock: Option<AmazonBedrockSettingsContent>,
|
|
pub deepseek: Option<DeepseekSettingsContent>,
|
|
pub google: Option<GoogleSettingsContent>,
|
|
pub lmstudio: Option<LmStudioSettingsContent>,
|
|
pub mistral: Option<MistralSettingsContent>,
|
|
pub ollama: Option<OllamaSettingsContent>,
|
|
pub opencode: Option<OpenCodeSettingsContent>,
|
|
pub open_router: Option<OpenRouterSettingsContent>,
|
|
pub openai: Option<OpenAiSettingsContent>,
|
|
pub openai_compatible: Option<HashMap<Arc<str>, OpenAiCompatibleSettingsContent>>,
|
|
pub vercel_ai_gateway: Option<VercelAiGatewaySettingsContent>,
|
|
pub x_ai: Option<XAiSettingsContent>,
|
|
#[serde(rename = "zed.dev")]
|
|
pub zed_dot_dev: Option<ZedDotDevSettingsContent>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct AnthropicSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<AnthropicAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct AnthropicAvailableModel {
|
|
/// The model's name in the Anthropic API. e.g. claude-3-5-sonnet-latest, claude-3-opus-20240229, etc
|
|
pub name: String,
|
|
/// The model's name in Zed's UI, such as in the model selector dropdown menu in the agent panel.
|
|
pub display_name: Option<String>,
|
|
/// The model's context window size.
|
|
pub max_tokens: u64,
|
|
/// A model `name` to substitute when calling tools, in case the primary model doesn't support tool calling.
|
|
pub tool_override: Option<String>,
|
|
/// Configuration of Anthropic's caching API.
|
|
pub cache_configuration: Option<LanguageModelCacheConfiguration>,
|
|
pub max_output_tokens: Option<u64>,
|
|
#[serde(serialize_with = "crate::serialize_optional_f32_with_two_decimal_places")]
|
|
pub default_temperature: Option<f32>,
|
|
#[serde(default)]
|
|
pub extra_beta_headers: Vec<String>,
|
|
/// The model's mode (e.g. thinking)
|
|
pub mode: Option<ModelMode>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct AmazonBedrockSettingsContent {
|
|
pub available_models: Option<Vec<BedrockAvailableModel>>,
|
|
pub endpoint_url: Option<String>,
|
|
pub region: Option<String>,
|
|
pub profile: Option<String>,
|
|
pub authentication_method: Option<BedrockAuthMethodContent>,
|
|
pub allow_global: Option<bool>,
|
|
/// The guardrail identifier (ARN or ID) to apply to Bedrock API requests.
|
|
pub guardrail_identifier: Option<String>,
|
|
/// The guardrail version to use. Defaults to "DRAFT" if not specified.
|
|
pub guardrail_version: Option<String>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct BedrockAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub cache_configuration: Option<LanguageModelCacheConfiguration>,
|
|
pub max_output_tokens: Option<u64>,
|
|
#[serde(serialize_with = "crate::serialize_optional_f32_with_two_decimal_places")]
|
|
pub default_temperature: Option<f32>,
|
|
pub mode: Option<ModelMode>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub enum BedrockAuthMethodContent {
|
|
#[serde(rename = "named_profile")]
|
|
NamedProfile,
|
|
#[serde(rename = "sso")]
|
|
SingleSignOn,
|
|
#[serde(rename = "api_key")]
|
|
ApiKey,
|
|
/// IMDSv2, PodIdentity, env vars, etc.
|
|
#[serde(rename = "default")]
|
|
Automatic,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct OllamaSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub auto_discover: Option<bool>,
|
|
pub available_models: Option<Vec<OllamaAvailableModel>>,
|
|
pub context_window: Option<u64>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct OllamaAvailableModel {
|
|
/// The model name in the Ollama API (e.g. "llama3.2:latest")
|
|
pub name: String,
|
|
/// The model's name in Zed's UI, such as in the model selector dropdown menu in the agent panel.
|
|
pub display_name: Option<String>,
|
|
/// The Context Length parameter to the model (aka num_ctx or n_ctx)
|
|
pub max_tokens: u64,
|
|
/// The number of seconds to keep the connection open after the last request
|
|
pub keep_alive: Option<KeepAlive>,
|
|
/// Whether the model supports tools
|
|
pub supports_tools: Option<bool>,
|
|
/// Whether the model supports vision
|
|
pub supports_images: Option<bool>,
|
|
/// Whether to enable think mode
|
|
pub supports_thinking: Option<bool>,
|
|
}
|
|
|
|
#[derive(Clone, Serialize, Deserialize, Debug, Eq, PartialEq, JsonSchema, MergeFrom)]
|
|
#[serde(untagged)]
|
|
pub enum KeepAlive {
|
|
/// Keep model alive for N seconds
|
|
Seconds(isize),
|
|
/// Keep model alive for a fixed duration. Accepts durations like "5m", "10m", "1h", "1d", etc.
|
|
Duration(String),
|
|
}
|
|
|
|
impl KeepAlive {
|
|
/// Keep model alive until a new model is loaded or until Ollama shuts down
|
|
pub fn indefinite() -> Self {
|
|
Self::Seconds(-1)
|
|
}
|
|
}
|
|
|
|
impl Default for KeepAlive {
|
|
fn default() -> Self {
|
|
Self::indefinite()
|
|
}
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct OpenCodeSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<OpenCodeAvailableModel>>,
|
|
/// Whether to show OpenCode Zen models. Defaults to true.
|
|
pub show_zen_models: Option<bool>,
|
|
/// Whether to show OpenCode Go models. Defaults to true.
|
|
pub show_go_models: Option<bool>,
|
|
/// Whether to show OpenCode Free models. Defaults to true.
|
|
pub show_free_models: Option<bool>,
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum OpenCodeModelSubscription {
|
|
Zen,
|
|
Go,
|
|
Free,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct OpenCodeAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub max_output_tokens: Option<u64>,
|
|
/// The API protocol to use for this model: "anthropic", "openai_responses", "openai_chat", or "google".
|
|
pub protocol: String,
|
|
/// The subscription for this model: "zen", "go", or "free". Defaults to Zen.
|
|
pub subscription: Option<OpenCodeModelSubscription>,
|
|
/// Custom Model API URL to use for this model.
|
|
pub custom_model_api_url: Option<String>,
|
|
/// Supported reasoning effort levels, for example `["low", "medium", "high"].
|
|
pub reasoning_effort_levels: Option<Vec<ReasoningEffort>>,
|
|
/// When using OpenAiChat protocol, whether thinking tokens are sent as a dedicated `reasoning_content` field or inline in message text.
|
|
#[serde(default)]
|
|
pub interleaved_reasoning: bool,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct LmStudioSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub api_key: Option<String>,
|
|
pub available_models: Option<Vec<LmStudioAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct LmStudioAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub supports_tool_calls: bool,
|
|
pub supports_images: bool,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct DeepseekSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<DeepseekAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct DeepseekAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub max_output_tokens: Option<u64>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct MistralSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<MistralAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct MistralAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub max_output_tokens: Option<u64>,
|
|
pub max_completion_tokens: Option<u64>,
|
|
pub supports_tools: Option<bool>,
|
|
pub supports_images: Option<bool>,
|
|
pub supports_thinking: Option<bool>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct OpenAiSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<OpenAiAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct OpenAiAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub max_output_tokens: Option<u64>,
|
|
pub max_completion_tokens: Option<u64>,
|
|
pub reasoning_effort: Option<OpenAiReasoningEffort>,
|
|
#[serde(default)]
|
|
pub capabilities: OpenAiModelCapabilities,
|
|
}
|
|
|
|
pub use language_model_core::ReasoningEffort as OpenAiReasoningEffort;
|
|
|
|
impl MergeFrom for OpenAiReasoningEffort {
|
|
fn merge_from(&mut self, other: &Self) {
|
|
*self = *other;
|
|
}
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct OpenAiCompatibleSettingsContent {
|
|
pub api_url: String,
|
|
pub available_models: Vec<OpenAiCompatibleAvailableModel>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct OpenAiModelCapabilities {
|
|
#[serde(default = "default_true")]
|
|
pub chat_completions: bool,
|
|
#[serde(default = "default_true")]
|
|
pub images: bool,
|
|
}
|
|
|
|
impl Default for OpenAiModelCapabilities {
|
|
fn default() -> Self {
|
|
Self {
|
|
chat_completions: default_true(),
|
|
images: default_true(),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct OpenAiCompatibleAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub max_output_tokens: Option<u64>,
|
|
pub max_completion_tokens: Option<u64>,
|
|
pub reasoning_effort: Option<OpenAiReasoningEffort>,
|
|
#[serde(default)]
|
|
pub capabilities: OpenAiCompatibleModelCapabilities,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct OpenAiCompatibleModelCapabilities {
|
|
pub tools: bool,
|
|
pub images: bool,
|
|
pub parallel_tool_calls: bool,
|
|
pub prompt_cache_key: bool,
|
|
#[serde(default = "default_true")]
|
|
pub chat_completions: bool,
|
|
#[serde(default)]
|
|
pub interleaved_reasoning: bool,
|
|
}
|
|
|
|
impl Default for OpenAiCompatibleModelCapabilities {
|
|
fn default() -> Self {
|
|
Self {
|
|
tools: true,
|
|
images: false,
|
|
parallel_tool_calls: false,
|
|
prompt_cache_key: false,
|
|
chat_completions: default_true(),
|
|
interleaved_reasoning: false,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct VercelAiGatewaySettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<VercelAiGatewayAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct VercelAiGatewayAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub max_output_tokens: Option<u64>,
|
|
pub max_completion_tokens: Option<u64>,
|
|
#[serde(default)]
|
|
pub capabilities: OpenAiCompatibleModelCapabilities,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct GoogleSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<GoogleAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct GoogleAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub mode: Option<ModelMode>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct XAiSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<XaiAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct XaiAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub max_output_tokens: Option<u64>,
|
|
pub max_completion_tokens: Option<u64>,
|
|
pub supports_images: Option<bool>,
|
|
pub supports_tools: Option<bool>,
|
|
pub parallel_tool_calls: Option<bool>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct ZedDotDevSettingsContent {
|
|
pub available_models: Option<Vec<ZedDotDevAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct ZedDotDevAvailableModel {
|
|
/// The provider of the language model.
|
|
pub provider: ZedDotDevAvailableProvider,
|
|
/// The model's name in the provider's API. e.g. claude-3-5-sonnet-20240620
|
|
pub name: String,
|
|
/// The name displayed in the UI, such as in the agent panel model dropdown menu.
|
|
pub display_name: Option<String>,
|
|
/// The size of the context window, indicating the maximum number of tokens the model can process.
|
|
pub max_tokens: usize,
|
|
/// The maximum number of output tokens allowed by the model.
|
|
pub max_output_tokens: Option<u64>,
|
|
/// The maximum number of completion tokens allowed by the model (o1-* only)
|
|
pub max_completion_tokens: Option<u64>,
|
|
/// Override this model with a different Anthropic model for tool calls.
|
|
pub tool_override: Option<String>,
|
|
/// Indicates whether this custom model supports caching.
|
|
pub cache_configuration: Option<LanguageModelCacheConfiguration>,
|
|
/// The default temperature to use for this model.
|
|
#[serde(serialize_with = "crate::serialize_optional_f32_with_two_decimal_places")]
|
|
pub default_temperature: Option<f32>,
|
|
/// Any extra beta headers to provide when using the model.
|
|
#[serde(default)]
|
|
pub extra_beta_headers: Vec<String>,
|
|
/// The model's mode (e.g. thinking)
|
|
pub mode: Option<ModelMode>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
#[serde(rename_all = "lowercase")]
|
|
pub enum ZedDotDevAvailableProvider {
|
|
Anthropic,
|
|
OpenAi,
|
|
Google,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom)]
|
|
pub struct OpenRouterSettingsContent {
|
|
pub api_url: Option<String>,
|
|
pub available_models: Option<Vec<OpenRouterAvailableModel>>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct OpenRouterAvailableModel {
|
|
pub name: String,
|
|
pub display_name: Option<String>,
|
|
pub max_tokens: u64,
|
|
pub max_output_tokens: Option<u64>,
|
|
pub max_completion_tokens: Option<u64>,
|
|
pub supports_tools: Option<bool>,
|
|
pub supports_images: Option<bool>,
|
|
pub mode: Option<ModelMode>,
|
|
pub provider: Option<OpenRouterProvider>,
|
|
}
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct OpenRouterProvider {
|
|
order: Option<Vec<String>>,
|
|
#[serde(default = "default_true")]
|
|
allow_fallbacks: bool,
|
|
#[serde(default)]
|
|
require_parameters: bool,
|
|
#[serde(default)]
|
|
data_collection: DataCollection,
|
|
only: Option<Vec<String>>,
|
|
ignore: Option<Vec<String>>,
|
|
quantizations: Option<Vec<String>>,
|
|
sort: Option<String>,
|
|
}
|
|
|
|
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
#[serde(rename_all = "lowercase")]
|
|
pub enum DataCollection {
|
|
#[default]
|
|
Allow,
|
|
Disallow,
|
|
}
|
|
|
|
fn default_true() -> bool {
|
|
true
|
|
}
|
|
|
|
/// Configuration for caching language model messages.
|
|
#[with_fallible_options]
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct LanguageModelCacheConfiguration {
|
|
pub max_cache_anchors: usize,
|
|
pub should_speculate: bool,
|
|
pub min_total_token: u64,
|
|
}
|
|
|
|
pub use language_model_core::ModelMode;
|
|
|
|
impl MergeFrom for ModelMode {
|
|
fn merge_from(&mut self, other: &Self) {
|
|
*self = *other;
|
|
}
|
|
}
|