GeminiBalance / app /domain /gemini_models.py
CatPtain's picture
Upload 77 files
76b9762 verified
from typing import Any, Dict, List, Literal, Optional, Union
from pydantic import BaseModel, Field
from app.core.constants import DEFAULT_TEMPERATURE, DEFAULT_TOP_K, DEFAULT_TOP_P
class SafetySetting(BaseModel):
category: Optional[
Literal[
"HARM_CATEGORY_HATE_SPEECH",
"HARM_CATEGORY_DANGEROUS_CONTENT",
"HARM_CATEGORY_HARASSMENT",
"HARM_CATEGORY_SEXUALLY_EXPLICIT",
"HARM_CATEGORY_CIVIC_INTEGRITY",
]
] = None
threshold: Optional[
Literal[
"HARM_BLOCK_THRESHOLD_UNSPECIFIED",
"BLOCK_LOW_AND_ABOVE",
"BLOCK_MEDIUM_AND_ABOVE",
"BLOCK_ONLY_HIGH",
"BLOCK_NONE",
"OFF",
]
] = None
class GenerationConfig(BaseModel):
stopSequences: Optional[List[str]] = None
responseMimeType: Optional[str] = None
responseSchema: Optional[Dict[str, Any]] = None
candidateCount: Optional[int] = 1
maxOutputTokens: Optional[int] = None
temperature: Optional[float] = DEFAULT_TEMPERATURE
topP: Optional[float] = DEFAULT_TOP_P
topK: Optional[int] = DEFAULT_TOP_K
presencePenalty: Optional[float] = None
frequencyPenalty: Optional[float] = None
responseLogprobs: Optional[bool] = None
logprobs: Optional[int] = None
thinkingConfig: Optional[Dict[str, Any]] = None
class SystemInstruction(BaseModel):
role: Optional[str] = "system"
parts: Union[List[Dict[str, Any]], Dict[str, Any]]
class GeminiContent(BaseModel):
role: Optional[str] = None
parts: List[Dict[str, Any]]
class GeminiRequest(BaseModel):
contents: List[GeminiContent] = []
tools: Optional[Union[List[Dict[str, Any]], Dict[str, Any]]] = []
safetySettings: Optional[List[SafetySetting]] = Field(
default=None, alias="safety_settings"
)
generationConfig: Optional[GenerationConfig] = Field(
default=None, alias="generation_config"
)
systemInstruction: Optional[SystemInstruction] = Field(
default=None, alias="system_instruction"
)
class Config:
populate_by_name = True
class ResetSelectedKeysRequest(BaseModel):
keys: List[str]
key_type: str
class VerifySelectedKeysRequest(BaseModel):
keys: List[str]