Skip to main content

rust_genai_types/
enums.rs

1use serde::{Deserialize, Serialize};
2
3/// Outcome of the code execution.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
6pub enum Outcome {
7    OutcomeUnspecified,
8    OutcomeOk,
9    OutcomeFailed,
10    OutcomeDeadlineExceeded,
11}
12
13/// Programming language of the executable code.
14#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
15#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
16pub enum Language {
17    LanguageUnspecified,
18    Python,
19}
20
21/// Specifies how the response should be scheduled in the conversation.
22#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
23#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
24pub enum FunctionResponseScheduling {
25    SchedulingUnspecified,
26    Silent,
27    WhenIdle,
28    Interrupt,
29}
30
31/// The JSON Schema data type.
32#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
33#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
34pub enum Type {
35    TypeUnspecified,
36    String,
37    Number,
38    Integer,
39    Boolean,
40    Array,
41    Object,
42    Null,
43}
44
45/// Server content modalities.
46#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
47#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
48pub enum MediaModality {
49    ModalityUnspecified,
50    Text,
51    Image,
52    Video,
53    Audio,
54    Document,
55}
56
57/// The type of the VAD signal.
58#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
59#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
60pub enum VadSignalType {
61    VadSignalTypeUnspecified,
62    VadSignalTypeSos,
63    VadSignalTypeEos,
64}
65
66/// Start of speech sensitivity.
67#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
68#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
69pub enum StartSensitivity {
70    StartSensitivityUnspecified,
71    StartSensitivityHigh,
72    StartSensitivityLow,
73}
74
75/// End of speech sensitivity.
76#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
77#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
78pub enum EndSensitivity {
79    EndSensitivityUnspecified,
80    EndSensitivityHigh,
81    EndSensitivityLow,
82}
83
84/// The different ways of handling user activity.
85#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
86#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
87pub enum ActivityHandling {
88    ActivityHandlingUnspecified,
89    StartOfActivityInterrupts,
90    NoInterruption,
91}
92
93/// Options about which input is included in the user's turn.
94#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
95#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
96pub enum TurnCoverage {
97    TurnCoverageUnspecified,
98    TurnIncludesOnlyActivity,
99    TurnIncludesAllInput,
100}
101
102/// Response modalities for generation.
103#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
104#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
105pub enum Modality {
106    ModalityUnspecified,
107    Text,
108    Image,
109    Audio,
110}
111
112/// The media resolution to use.
113///
114/// 参考 token 映射(不同媒体类型不同):
115/// - 图像: `LOW/MEDIUM/HIGH/ULTRA_HIGH` ≈ 280/560/1120/2240 tokens
116/// - 视频: `LOW/MEDIUM/HIGH` ≈ 70/70/280 tokens per frame
117/// - PDF: `LOW/MEDIUM/HIGH` ≈ 280/560/1120 tokens + 原生文本(Gemini 3)
118///
119/// 实际计费与限制以服务端为准。
120#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
121#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
122pub enum MediaResolution {
123    MediaResolutionUnspecified,
124    MediaResolutionLow,
125    MediaResolutionMedium,
126    MediaResolutionHigh,
127    MediaResolutionUltraHigh,
128}
129
130/// Safety filter level for image generation.
131#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
132#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
133pub enum SafetyFilterLevel {
134    BlockLowAndAbove,
135    BlockMediumAndAbove,
136    BlockOnlyHigh,
137    BlockNone,
138}
139
140/// Person generation policy for media generation.
141#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
142#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
143pub enum PersonGeneration {
144    DontAllow,
145    AllowAdult,
146    AllowAll,
147}
148
149/// Prompt language for image generation.
150#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
151#[serde(rename_all = "lowercase")]
152pub enum ImagePromptLanguage {
153    Auto,
154    En,
155    Ja,
156    Ko,
157    Hi,
158    Zh,
159    Pt,
160    Es,
161}
162
163/// Reference image type for image editing.
164#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
165#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
166pub enum ReferenceImageType {
167    ReferenceTypeRaw,
168    ReferenceTypeMask,
169    ReferenceTypeControl,
170    ReferenceTypeStyle,
171    ReferenceTypeSubject,
172    ReferenceTypeContent,
173}
174
175/// Mask reference mode for image editing.
176#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
177#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
178pub enum MaskReferenceMode {
179    MaskModeDefault,
180    MaskModeUserProvided,
181    MaskModeBackground,
182    MaskModeForeground,
183    MaskModeSemantic,
184}
185
186/// Control reference type for image editing.
187#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
188#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
189pub enum ControlReferenceType {
190    ControlTypeDefault,
191    ControlTypeCanny,
192    ControlTypeScribble,
193    ControlTypeFaceMesh,
194}
195
196/// Subject reference type for image editing.
197#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
198#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
199pub enum SubjectReferenceType {
200    SubjectTypeDefault,
201    SubjectTypePerson,
202    SubjectTypeAnimal,
203    SubjectTypeProduct,
204}
205
206/// Edit mode for image editing.
207#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
208#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
209pub enum EditMode {
210    EditModeDefault,
211    EditModeInpaintRemoval,
212    EditModeInpaintInsertion,
213    EditModeOutpaint,
214    EditModeControlledEditing,
215    EditModeStyle,
216    EditModeBgswap,
217    EditModeProductImage,
218}
219
220/// Segment image mode.
221#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
222#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
223pub enum SegmentMode {
224    Foreground,
225    Background,
226    Prompt,
227    Semantic,
228    Interactive,
229}
230
231/// Reference image type for video generation.
232#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
233#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
234pub enum VideoGenerationReferenceType {
235    Asset,
236    Style,
237}
238
239/// Mask mode for video generation.
240#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
241#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
242pub enum VideoGenerationMaskMode {
243    Insert,
244    Remove,
245    RemoveStatic,
246    Outpaint,
247}
248
249/// Video compression quality.
250#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
251#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
252pub enum VideoCompressionQuality {
253    Optimized,
254    Lossless,
255}
256
257/// The tokenization quality used for a media part (per-part).
258#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
259#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
260pub enum PartMediaResolutionLevel {
261    MediaResolutionUnspecified,
262    MediaResolutionLow,
263    MediaResolutionMedium,
264    MediaResolutionHigh,
265    MediaResolutionUltraHigh,
266}
267
268/// Function behavior for Live API.
269#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
270#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
271pub enum Behavior {
272    Unspecified,
273    Blocking,
274    NonBlocking,
275}
276
277/// Function calling mode.
278#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
279#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
280pub enum FunctionCallingMode {
281    ModeUnspecified,
282    Auto,
283    Any,
284    None,
285    Validated,
286}
287
288/// Harm category.
289#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
290#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
291pub enum HarmCategory {
292    HarmCategoryUnspecified,
293    HarmCategoryHarassment,
294    HarmCategoryHateSpeech,
295    HarmCategorySexuallyExplicit,
296    HarmCategoryDangerousContent,
297    HarmCategoryCivicIntegrity,
298    HarmCategoryImageHate,
299    HarmCategoryImageDangerousContent,
300    HarmCategoryImageHarassment,
301    HarmCategoryImageSexuallyExplicit,
302    HarmCategoryJailbreak,
303}
304
305/// Harm block threshold.
306#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
307#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
308pub enum HarmBlockThreshold {
309    HarmBlockThresholdUnspecified,
310    BlockNone,
311    BlockOnlyHigh,
312    BlockMediumAndAbove,
313    BlockLowAndAbove,
314    Off,
315}
316
317/// Harm probability.
318#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
319#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
320pub enum HarmProbability {
321    HarmProbabilityUnspecified,
322    Negligible,
323    Low,
324    Medium,
325    High,
326}
327
328/// Specifies how the harm block threshold is applied.
329#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
330#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
331pub enum HarmBlockMethod {
332    HarmBlockMethodUnspecified,
333    Severity,
334    Probability,
335}
336
337/// Batch/Job state.
338#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
339#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
340pub enum JobState {
341    JobStateUnspecified,
342    JobStateQueued,
343    JobStatePending,
344    JobStateRunning,
345    JobStateSucceeded,
346    JobStateFailed,
347    JobStateCancelling,
348    JobStateCancelled,
349    JobStatePaused,
350    JobStateExpired,
351    JobStateUpdating,
352    JobStatePartiallySucceeded,
353}
354
355/// Tuning method.
356#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
357#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
358pub enum TuningMethod {
359    SupervisedFineTuning,
360    PreferenceTuning,
361    Distillation,
362}
363
364/// Tuning mode for SFT tuning (Vertex AI only).
365#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
366#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
367pub enum TuningMode {
368    TuningModeUnspecified,
369    TuningModeFull,
370    TuningModePeftAdapter,
371}
372
373/// Adapter size for tuning.
374#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
375#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
376pub enum AdapterSize {
377    AdapterSizeUnspecified,
378    AdapterSizeOne,
379    AdapterSizeTwo,
380    AdapterSizeFour,
381    AdapterSizeEight,
382    AdapterSizeSixteen,
383    AdapterSizeThirtyTwo,
384}
385
386/// Reason why the prompt was blocked.
387#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
388#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
389pub enum BlockedReason {
390    BlockedReasonUnspecified,
391    Safety,
392    Other,
393    Blocklist,
394    ProhibitedContent,
395    ImageSafety,
396    ModelArmor,
397    Jailbreak,
398}
399
400/// The reason why token generation stopped.
401#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
402#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
403pub enum FinishReason {
404    FinishReasonUnspecified,
405    Stop,
406    MaxTokens,
407    Safety,
408    Recitation,
409    Language,
410    Other,
411    Blocklist,
412    ProhibitedContent,
413    Spii,
414    MalformedFunctionCall,
415    ImageSafety,
416    UnexpectedToolCall,
417    ImageProhibitedContent,
418    NoImage,
419    ImageRecitation,
420    ImageOther,
421}
422
423/// Thinking level for thinking models.
424#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
425#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
426pub enum ThinkingLevel {
427    ThinkingLevelUnspecified,
428    Low,
429    Medium,
430    High,
431    Minimal,
432}
433
434/// Status of the URL retrieval.
435#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
436#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
437pub enum UrlRetrievalStatus {
438    UrlRetrievalStatusUnspecified,
439    UrlRetrievalStatusSuccess,
440    UrlRetrievalStatusError,
441    UrlRetrievalStatusPaywall,
442    UrlRetrievalStatusUnsafe,
443}
444
445/// Harm severity.
446#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
447#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
448pub enum HarmSeverity {
449    HarmSeverityUnspecified,
450    HarmSeverityNegligible,
451    HarmSeverityLow,
452    HarmSeverityMedium,
453    HarmSeverityHigh,
454}
455
456/// Traffic type for quota accounting.
457#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
458#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
459pub enum TrafficType {
460    TrafficTypeUnspecified,
461    OnDemand,
462    ProvisionedThroughput,
463}
464
465/// File state.
466#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
467#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
468pub enum FileState {
469    #[serde(alias = "STATE_UNSPECIFIED")]
470    StateUnspecified,
471    #[serde(alias = "STATE_PROCESSING")]
472    Processing,
473    #[serde(alias = "STATE_ACTIVE")]
474    Active,
475    #[serde(alias = "STATE_FAILED")]
476    Failed,
477}
478
479/// Document state.
480#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
481#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
482pub enum DocumentState {
483    #[serde(alias = "STATE_UNSPECIFIED")]
484    StateUnspecified,
485    #[serde(alias = "STATE_PENDING")]
486    Pending,
487    #[serde(alias = "STATE_ACTIVE")]
488    Active,
489    #[serde(alias = "STATE_FAILED")]
490    Failed,
491}
492
493/// File source.
494#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
495#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
496pub enum FileSource {
497    SourceUnspecified,
498    Uploaded,
499    Generated,
500}
501
502/// Reason why the turn is complete.
503#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
504#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
505pub enum TurnCompleteReason {
506    TurnCompleteReasonUnspecified,
507    MalformedFunctionCall,
508    ResponseRejected,
509    NeedMoreInput,
510}
511
512/// Dynamic retrieval mode for `GoogleSearchRetrieval`.
513#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
514#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
515pub enum DynamicRetrievalConfigMode {
516    ModeUnspecified,
517    ModeDynamic,
518}
519
520/// Environment for computer use tool.
521#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
522#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
523pub enum Environment {
524    EnvironmentUnspecified,
525    EnvironmentBrowser,
526}
527
528/// Feature selection preference for model routing.
529#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
530#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
531pub enum FeatureSelectionPreference {
532    FeatureSelectionPreferenceUnspecified,
533    PrioritizeQuality,
534    Balanced,
535    PrioritizeCost,
536}
537
538/// The API spec that the external API implements.
539#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
540#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
541pub enum ApiSpec {
542    ApiSpecUnspecified,
543    SimpleSearch,
544    ElasticSearch,
545}
546
547/// Type of auth scheme.
548#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
549#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
550pub enum AuthType {
551    AuthTypeUnspecified,
552    NoAuth,
553    ApiKeyAuth,
554    HttpBasicAuth,
555    GoogleServiceAccountAuth,
556    Oauth,
557    OidcAuth,
558}
559
560/// Location of the API key.
561#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
562#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
563pub enum HttpElementLocation {
564    HttpInUnspecified,
565    HttpInQuery,
566    HttpInHeader,
567}
568
569/// Phishing block threshold for Google Search.
570#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
571#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
572pub enum PhishBlockThreshold {
573    PhishBlockThresholdUnspecified,
574    BlockLowAndAbove,
575    BlockMediumAndAbove,
576    BlockHighAndAbove,
577    BlockHigherAndAbove,
578    BlockVeryHighAndAbove,
579    BlockOnlyExtremelyHigh,
580}
581
582#[cfg(test)]
583mod tests {
584    use super::*;
585
586    #[test]
587    fn harm_category_serialization() {
588        let value = serde_json::to_string(&HarmCategory::HarmCategoryDangerousContent).unwrap();
589        assert_eq!(value, "\"HARM_CATEGORY_DANGEROUS_CONTENT\"");
590    }
591
592    #[test]
593    fn image_prompt_language_serialization() {
594        let value = serde_json::to_string(&ImagePromptLanguage::Zh).unwrap();
595        assert_eq!(value, "\"zh\"");
596    }
597}