| from enum import Enum, IntEnum, StrEnum
|
|
|
| STREAMING_FLAG_INDEX = 7
|
| GEM_FLAG_INDEX = 19
|
| TEMPORARY_CHAT_FLAG_INDEX = 45
|
|
|
|
|
| class Endpoint(StrEnum):
|
| GOOGLE = "https://www.google.com"
|
| INIT = "https://gemini.google.com/app"
|
| GENERATE = "https://gemini.google.com/_/BardChatUi/data/assistant.lamda.BardFrontendService/StreamGenerate"
|
| ROTATE_COOKIES = "https://accounts.google.com/RotateCookies"
|
| UPLOAD = "https://content-push.googleapis.com/upload"
|
| BATCH_EXEC = "https://gemini.google.com/_/BardChatUi/data/batchexecute"
|
|
|
|
|
| class GRPC(StrEnum):
|
| """
|
| Google RPC ids used in Gemini API.
|
| """
|
|
|
|
|
| LIST_CHATS = "MaZiqc"
|
| READ_CHAT = "hNvQHb"
|
| DELETE_CHAT = "GzXR5e"
|
| DELETE_CHAT_SECOND = "qWymEb"
|
|
|
|
|
| LIST_GEMS = "CNgdBe"
|
| CREATE_GEM = "oMH3Zd"
|
| UPDATE_GEM = "kHv0Vd"
|
| DELETE_GEM = "UXcSJb"
|
|
|
| BARD_SETTINGS = "ESY5D"
|
|
|
| LIST_MODELS = "otAQ7b"
|
|
|
| IMAGE_FULL_SIZE = "c8o8Fe"
|
|
|
|
|
| class Headers(Enum):
|
| GEMINI = {
|
| "Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
|
| "Host": "gemini.google.com",
|
| "Origin": "https://gemini.google.com",
|
| "Referer": "https://gemini.google.com/",
|
| "X-Same-Domain": "1",
|
| }
|
| ROTATE_COOKIES = {
|
| "Content-Type": "application/json",
|
| }
|
| UPLOAD = {"Push-ID": "feeds/mcudyrk2a4khkz"}
|
|
|
|
|
| class Model(Enum):
|
| UNSPECIFIED = ("unspecified", {}, False)
|
| G_3_PRO_AI_FREE = (
|
| "gemini-3-pro-ai-free",
|
| {
|
| "x-goog-ext-525001261-jspb": '[1,null,null,null,"9d8ca3786ebdfbea",null,null,0,[4],null,null,1]'
|
| },
|
| False,
|
| )
|
| G_3_FLASH_AI_FREE = (
|
| "gemini-3-flash-ai-free",
|
| {
|
| "x-goog-ext-525001261-jspb": '[1,null,null,null,"fbb127bbb056c959",null,null,0,[4],null,null,1]'
|
| },
|
| False,
|
| )
|
| G_3_FLASH_THINKING_AI_FREE = (
|
| "gemini-3-flash-thinking-ai-free",
|
| {
|
| "x-goog-ext-525001261-jspb": '[1,null,null,null,"5bf011840784117a",null,null,0,[4],null,null,1]'
|
| },
|
| False,
|
| )
|
| G_3_PRO_AI_PRO = (
|
| "gemini-3-pro-ai-pro",
|
| {
|
| "x-goog-ext-525001261-jspb": '[1,null,null,null,"e6fa609c3fa255c0",null,null,0,[4],null,null,2]'
|
| },
|
| True,
|
| )
|
| G_3_FLASH_AI_PRO = (
|
| "gemini-3-flash-ai-pro",
|
| {
|
| "x-goog-ext-525001261-jspb": '[1,null,null,null,"56fdd199312815e2",null,null,0,[4],null,null,2]'
|
| },
|
| True,
|
| )
|
| G_3_FLASH_THINKING_AI_PRO = (
|
| "gemini-3-flash-thinking-ai-pro",
|
| {
|
| "x-goog-ext-525001261-jspb": '[1,null,null,null,"e051ce1aa80aa576",null,null,0,[4],null,null,2]'
|
| },
|
| True,
|
| )
|
|
|
| def __init__(self, name, header, advanced_only):
|
| self.model_name = name
|
| self.model_header = header
|
| self.advanced_only = advanced_only
|
|
|
| @classmethod
|
| def from_name(cls, name: str):
|
| for model in cls:
|
| if model.model_name == name:
|
| return model
|
|
|
| raise ValueError(
|
| f"Unknown model name: {name}. Available models: {', '.join([model.model_name for model in cls])}"
|
| )
|
|
|
| @classmethod
|
| def from_dict(cls, model_dict: dict):
|
| if "model_name" not in model_dict or "model_header" not in model_dict:
|
| raise ValueError(
|
| "When passing a custom model as a dictionary, 'model_name' and 'model_header' keys must be provided."
|
| )
|
|
|
| if not isinstance(model_dict["model_header"], dict):
|
| raise ValueError(
|
| "When passing a custom model as a dictionary, 'model_header' must be a dictionary containing valid header strings."
|
| )
|
|
|
| custom_model = cls.UNSPECIFIED
|
| custom_model.model_name = model_dict["model_name"]
|
| custom_model.model_header = model_dict["model_header"]
|
| return custom_model
|
|
|
|
|
| class ErrorCode(IntEnum):
|
| """
|
| Known error codes returned from server.
|
| """
|
|
|
| TEMPORARY_ERROR_1013 = 1013
|
| USAGE_LIMIT_EXCEEDED = 1037
|
| MODEL_INCONSISTENT = 1050
|
| MODEL_HEADER_INVALID = 1052
|
| IP_TEMPORARILY_BLOCKED = 1060
|
|
|