Gemini и другие генеративные модели ИИ обрабатывают входные и выходные данные с детализацией, называемой токеном .
Для моделей Gemini один токен эквивалентен примерно 4 символам. 100 токенов эквивалентны примерно 60–80 английским словам.
О токенах
 Токены могут представлять собой отдельные символы, например, z , или целые слова, например cat . Длинные слова разбиваются на несколько токенов. Набор всех токенов, используемых моделью, называется словарём, а процесс разбиения текста на токены — токенизацией .
При включенной тарификации стоимость вызова API Gemini частично определяется количеством входящих и исходящих токенов, поэтому полезно знать, как подсчитывать токены.
Попробуйте посчитать жетоны в Colab
Вы можете попробовать подсчитать жетоны с помощью Colab.
|  Посмотреть на ai.google.dev |  Попробуйте блокнот Colab |  Просмотреть блокнот на GitHub | 
Контекстные окна
Модели, доступные через API Gemini, имеют контекстные окна, размер которых измеряется в токенах. Контекстное окно определяет объём входных данных, которые вы можете предоставить, и объём выходных данных, которые может сгенерировать модель. Размер контекстного окна можно определить, вызвав конечную точку getModels или изучив документацию по моделям .
 В следующем примере вы можете видеть, что модель gemini-1.5-flash имеет входной предел около 1 000 000 токенов и выходной предел около 8 000 токенов, что означает, что контекстное окно составляет 1 000 000 токенов. 
from google import genai
client = genai.Client()
model_info = client.models.get(model="gemini-2.0-flash")
print(f"{model_info.input_token_limit=}")
print(f"{model_info.output_token_limit=}")
# ( e.g., input_token_limit=30720, output_token_limit=2048 )
Подсчет токенов
Все входные и выходные данные API Gemini токенизируются, включая текст, файлы изображений и другие нетекстовые данные.
Подсчитать токены можно следующими способами:
Подсчет текстовых токенов
from google import genai
client = genai.Client()
prompt = "The quick brown fox jumps over the lazy dog."
# Count tokens using the new client method.
total_tokens = client.models.count_tokens(
    model="gemini-2.0-flash", contents=prompt
)
print("total_tokens: ", total_tokens)
# ( e.g., total_tokens: 10 )
response = client.models.generate_content(
    model="gemini-2.0-flash", contents=prompt
)
# The usage_metadata provides detailed token counts.
print(response.usage_metadata)
# ( e.g., prompt_token_count: 11, candidates_token_count: 73, total_token_count: 84 )
Подсчет многоходовых (чатовых) токенов
from google import genai
from google.genai import types
client = genai.Client()
chat = client.chats.create(
    model="gemini-2.0-flash",
    history=[
        types.Content(
            role="user", parts=[types.Part(text="Hi my name is Bob")]
        ),
        types.Content(role="model", parts=[types.Part(text="Hi Bob!")]),
    ],
)
# Count tokens for the chat history.
print(
    client.models.count_tokens(
        model="gemini-2.0-flash", contents=chat.get_history()
    )
)
# ( e.g., total_tokens: 10 )
response = chat.send_message(
    message="In one sentence, explain how a computer works to a young child."
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 25, candidates_token_count: 21, total_token_count: 46 )
# You can count tokens for the combined history and a new message.
extra = types.UserContent(
    parts=[
        types.Part(
            text="What is the meaning of life?",
        )
    ]
)
history = chat.get_history()
history.append(extra)
print(client.models.count_tokens(model="gemini-2.0-flash", contents=history))
# ( e.g., total_tokens: 56 )
Count multimodal tokens
All input to the Gemini API is tokenized, including text, image files, and other non-text modalities. Note the following high-level key points about tokenization of multimodal input during processing by the Gemini API:
- With Gemini 2.0, image inputs with both dimensions <=384 pixels are counted as 258 tokens. Images larger in one or both dimensions are cropped and scaled as needed into tiles of 768x768 pixels, each counted as 258 tokens. Prior to Gemini 2.0, images used a fixed 258 tokens. 
- Video and audio files are converted to tokens at the following fixed rates: video at 263 tokens per second and audio at 32 tokens per second. 
Файлы изображений
Example that uses an uploaded image from the File API:
from google import genai
client = genai.Client()
prompt = "Tell me about this image"
your_image_file = client.files.upload(file=media / "organ.jpg")
print(
    client.models.count_tokens(
        model="gemini-2.0-flash", contents=[prompt, your_image_file]
    )
)
# ( e.g., total_tokens: 263 )
response = client.models.generate_content(
    model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )
Example that provides the image as inline data:
from google import genai
import PIL.Image
client = genai.Client()
prompt = "Tell me about this image"
your_image_file = PIL.Image.open(media / "organ.jpg")
# Count tokens for combined text and inline image.
print(
    client.models.count_tokens(
        model="gemini-2.0-flash", contents=[prompt, your_image_file]
    )
)
# ( e.g., total_tokens: 263 )
response = client.models.generate_content(
    model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )
Video or audio files
Audio and video are each converted to tokens at the following fixed rates:
- Видео: 263 токена в секунду
- Аудио: 32 токена в секунду
from google import genai
import time
client = genai.Client()
prompt = "Tell me about this video"
your_file = client.files.upload(file=media / "Big_Buck_Bunny.mp4")
# Poll until the video file is completely processed (state becomes ACTIVE).
while not your_file.state or your_file.state.name != "ACTIVE":
    print("Processing video...")
    print("File state:", your_file.state)
    time.sleep(5)
    your_file = client.files.get(name=your_file.name)
print(
    client.models.count_tokens(
        model="gemini-2.0-flash", contents=[prompt, your_file]
    )
)
# ( e.g., total_tokens: 300 )
response = client.models.generate_content(
    model="gemini-2.0-flash", contents=[prompt, your_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 301, candidates_token_count: 60, total_token_count: 361 )
System instructions and tools
System instructions and tools also count towards the total token count for the input.
 If you use system instructions, the total_tokens count increases to reflect the addition of system_instruction .
 If you use function calling, the total_tokens count increases to reflect the addition of tools .