llm_api_access/gemini/
types.rs

1// src/gemini/types.rs
2use 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}