Team Ai
Apppublic

devin15/cursor2api-rust

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
model.rs108 linesDownload Raw Back to chat
1use serde::{Deserialize, Serialize};2 3#[derive(Serialize, Deserialize)]4#[serde(untagged)]5pub enum MessageContent {6    Text(String),7    Vision(Vec<VisionMessageContent>),8}9 10#[derive(Serialize, Deserialize)]11pub struct VisionMessageContent {12    #[serde(rename = "type")]13    pub content_type: String,14    #[serde(skip_serializing_if = "Option::is_none")]15    pub text: Option<String>,16    #[serde(skip_serializing_if = "Option::is_none")]17    pub image_url: Option<ImageUrl>,18}19 20#[derive(Serialize, Deserialize)]21pub struct ImageUrl {22    pub url: String,23    #[serde(skip_serializing_if = "Option::is_none")]24    pub detail: Option<String>,25}26 27#[derive(Serialize, Deserialize)]28pub struct Message {29    pub role: Role,30    pub content: MessageContent,31}32 33#[derive(Serialize, Deserialize, PartialEq)]34pub enum Role {35    #[serde(rename = "system", alias = "developer")]36    System,37    #[serde(rename = "user", alias = "human")]38    User,39    #[serde(rename = "assistant", alias = "ai")]40    Assistant,41}42 43#[derive(Serialize)]44pub struct ChatResponse {45    pub id: String,46    pub object: String,47    pub created: i64,48    #[serde(skip_serializing_if = "Option::is_none")]49    pub model: Option<String>,50    pub choices: Vec<Choice>,51    #[serde(skip_serializing_if = "Option::is_none")]52    pub usage: Option<Usage>,53}54 55#[derive(Serialize)]56pub struct Choice {57    pub index: i32,58    #[serde(skip_serializing_if = "Option::is_none")]59    pub message: Option<Message>,60    #[serde(skip_serializing_if = "Option::is_none")]61    pub delta: Option<Delta>,62    pub finish_reason: Option<String>,63}64 65#[derive(Serialize)]66pub struct Delta {67    #[serde(skip_serializing_if = "Option::is_none")]68    pub role: Option<Role>,69    #[serde(skip_serializing_if = "Option::is_none")]70    pub content: Option<String>,71}72 73#[derive(Serialize)]74pub struct Usage {75    pub prompt_tokens: u32,76    pub completion_tokens: u32,77    pub total_tokens: u32,78}79 80// 模型定义81#[derive(Serialize, Clone)]82pub struct Model {83    pub id: &'static str,84    pub created: &'static i64,85    pub object: &'static str,86    pub owned_by: &'static str,87}88 89use crate::app::model::{AppConfig, UsageCheck};90use super::constant::USAGE_CHECK_MODELS;91 92impl Model {93    pub fn is_usage_check(&self) -> bool {94        match AppConfig::get_usage_check() {95            UsageCheck::None => false,96            UsageCheck::Default => USAGE_CHECK_MODELS.contains(&self.id),97            UsageCheck::All => true,98            UsageCheck::Custom(models) => models.contains(&self.id),99        }100    }101}102 103#[derive(Serialize)]104pub struct ModelsResponse {105    pub object: &'static str,106    pub data: &'static [Model],107}108