File size: 1,874 Bytes
0ab3d49 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
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),
}
|