llm_api_access/gemini/
types.rs
1use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5use crate::structs::general::Content;
6
7#[derive(Debug, Serialize)]
8pub struct GeminiRequest {
9 pub contents: Vec<Content>,
10}
11
12#[derive(Debug, Deserialize)]
13pub struct GeminiResponse {
14 pub candidates: Vec<Candidate>,
15 pub prompt_feedback: Option<PromptFeedback>,
16 pub usage_metadata: Option<UsageMetadata>,
17 pub model_version: Option<String>,
18}
19
20#[derive(Debug, Deserialize)]
21pub struct UsageMetadata {
22 #[serde(rename = "promptTokenCount")]
23 pub prompt_token_count: u32,
24 #[serde(rename = "candidatesTokenCount")]
25 pub candidates_token_count: u32,
26 #[serde(rename = "totalTokenCount")]
27 pub total_token_count: u32,
28 #[serde(rename = "promptTokensDetails")]
29 pub prompt_tokens_details: Option<Vec<TokenDetails>>,
30 #[serde(rename = "candidatesTokensDetails")]
31 pub candidates_tokens_details: Option<Vec<TokenDetails>>,
32}
33
34#[derive(Debug, Deserialize)]
35pub struct TokenDetails {
36 pub modality: String,
37 #[serde(rename = "tokenCount")]
38 pub token_count: u32,
39}
40
41#[derive(Debug, Deserialize)]
42pub struct Candidate {
43 pub content: Content,
44 #[serde(rename = "finishReason")]
45 pub finish_reason: Option<String>,
46 #[serde(rename = "avgLogprobs")]
47 pub avg_log_probs: Option<f64>,
48 pub index: Option<usize>,
49 pub safety_ratings: Option<Vec<SafetyRating>>,
50}
51
52#[derive(Debug, Deserialize)]
53pub struct PromptFeedback {
54 pub safety_ratings: Vec<SafetyRating>,
55}
56
57#[derive(Debug, Deserialize)]
58pub struct SafetyRating {
59 pub category: String,
60 pub probability: String,
61}
62
63#[derive(Deserialize, Debug)]
64pub struct GeminiErrorResponse {
65 pub error: GeminiError,
66}
67
68#[allow(dead_code)]
69#[derive(Deserialize, Debug)]
70pub struct GeminiError {
71 pub code: u16,
72 pub message: String,
73 pub status: String,
74 pub details: Option<Vec<GeminiErrorDetail>>,
75}
76
77#[allow(dead_code)]
78#[derive(Deserialize, Debug)]
79pub struct GeminiErrorDetail {
80 #[serde(rename = "@type")]
81 pub type_: String,
82 pub reason: String,
83 pub domain: String,
84 pub metadata: HashMap<String, String>,
85}