subapi / gemini_webapi /constants.py
habulaj's picture
Upload 49 files
e816bb2 verified
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.
"""
# Chat methods
LIST_CHATS = "MaZiqc"
READ_CHAT = "hNvQHb"
DELETE_CHAT = "GzXR5e"
DELETE_CHAT_SECOND = "qWymEb"
# Gem methods
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 # Randomly raised when generating with certain models, but disappears soon after
USAGE_LIMIT_EXCEEDED = 1037
MODEL_INCONSISTENT = 1050
MODEL_HEADER_INVALID = 1052
IP_TEMPORARILY_BLOCKED = 1060