cursor / src /app /model /build_key.rs
ronghua's picture
up
3c2af29
use serde::{Deserialize, Serialize};
use crate::{app::constant::COMMA, chat::constant::AVAILABLE_MODELS};
#[derive(Deserialize)]
pub struct BuildKeyRequest {
pub auth_token: String,
#[serde(default)]
pub disable_vision: Option<bool>,
#[serde(default)]
pub enable_slow_pool: Option<bool>,
#[serde(default)]
pub usage_check_models: Option<UsageCheckModelConfig>,
#[serde(default)]
pub include_web_references: Option<bool>,
}
pub struct UsageCheckModelConfig {
pub model_type: UsageCheckModelType,
pub model_ids: Vec<&'static str>,
}
impl<'de> Deserialize<'de> for UsageCheckModelConfig {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
#[derive(Deserialize)]
struct Helper {
#[serde(rename = "type")]
model_type: UsageCheckModelType,
#[serde(default)]
model_ids: String,
}
let helper = Helper::deserialize(deserializer)?;
let model_ids = if helper.model_ids.is_empty() {
Vec::new()
} else {
helper
.model_ids
.split(COMMA)
.filter_map(|model| {
let model = model.trim();
AVAILABLE_MODELS
.iter()
.find(|m| m.id == model)
.map(|m| m.id)
})
.collect()
};
Ok(UsageCheckModelConfig {
model_type: helper.model_type,
model_ids,
})
}
}
#[derive(Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum UsageCheckModelType {
Default,
Disabled,
All,
Custom,
}
#[derive(Serialize)]
#[serde(rename_all = "lowercase")]
pub enum BuildKeyResponse {
Key(String),
Error(String),
}