Using files

API Gemini поддерживает загрузку медиафайлов отдельно от ввода в подсказку, что позволяет повторно использовать ваши медиафайлы в нескольких запросах и нескольких подсказках. Подробнее см. в руководстве «Подсказки с медиафайлами» .

Метод: media.upload

Загружает данные в ragStore, выполняет предварительную обработку и разбивает на фрагменты перед сохранением в документе RagStore.

Конечная точка

  • URI загрузки для запросов на загрузку медиафайлов:
  • разместить https: / /generativelanguage.googleapis.com /upload /v1beta /{ragStoreName=ragStores /*}:uploadToRagStore
  • URI метаданных для запросов только на метаданные:
  • пост https: / /generativelanguage.googleapis.com /v1beta /{ragStoreName=ragStores /*}:uploadToRagStore

    Параметры пути

    string ragStoreName

    Обязательно. Неизменяемо. Имя RagStore , в который нужно загрузить файл. Пример: ragStores/my-rag-store-123 Имя имеет вид ragStores/{ragstore} .

    Текст запроса

    Тело запроса содержит данные со следующей структурой:

    Поля
    string displayName

    Необязательно. Отображаемое имя созданного документа.

    object ( CustomMetadata ) customMetadata[] ( CustomMetadata )

    Пользовательские метаданные, которые будут связаны с данными.

    object ( ChunkingConfig ) chunkingConfig ( ChunkingConfig )

    Необязательно. Конфигурация, указывающая сервису, как разбивать данные на фрагменты. Если не указано, сервис будет использовать параметры по умолчанию.

    string mimeType

    Необязательно. MIME-тип данных. Если не указан, он будет определён на основе загруженного контента.

    Тело ответа

    Это копия google.longrunning.Operation. Нам нужно её скопировать, поскольку для взаимодействия со scotty необходимо добавить специфичное для scotty поле, которое невозможно добавить в протокол операции верхнего уровня.

    В случае успеха тело ответа содержит данные со следующей структурой:

    Поля
    string name

    Имя, назначенное сервером, уникально только в пределах той же службы, которая его изначально возвращает. Если вы используете HTTP-сопоставление по умолчанию, name должно быть именем ресурса, заканчивающимся на operations/{unique_id} .

    object metadata

    Метаданные, специфичные для сервиса, связанные с операцией. Обычно они содержат информацию о ходе выполнения и общие метаданные, такие как время создания. Некоторые сервисы могут не предоставлять такие метаданные. Любой метод, возвращающий длительную операцию, должен документировать тип метаданных, если таковой имеется.

    Объект, содержащий поля произвольного типа. Дополнительное поле "@type" содержит URI, идентифицирующий тип. Пример: { "id": 1234, "@type": "types.example.com/standard/id" } .

    done boolean

    Если значение равно false , это означает, что операция всё ещё выполняется. Если true , операция завершена и доступен либо error , либо response .

    result Union type
    Результат операции, который может быть как error , так и допустимым response . Если done == false , ни error , ни response не устанавливаются. Если done == true , может быть установлен только один из вариантов: error или response . Некоторые службы могут не предоставлять результат. result может быть только одним из следующих:
    object ( Status ) error (статус)

    Ошибочный результат операции в случае сбоя или отмены.

    object response

    Обычный, успешный ответ операции. Если исходный метод не возвращает данных об успешном выполнении, например, Delete , ответом будет google.protobuf.Empty . Если исходный метод — стандартный Get / Create / Update , ответом должен быть ресурс. Для других методов ответ должен иметь тип XxxResponse , где Xxx — имя исходного метода. Например, если имя исходного метода — TakeSnapshot() , выводимый тип ответа — TakeSnapshotResponse .

    Объект, содержащий поля произвольного типа. Дополнительное поле "@type" содержит URI, идентифицирующий тип. Пример: { "id": 1234, "@type": "types.example.com/standard/id" } .

    JSON-представление
    {
      "name": string,
      "metadata": {
        "@type": string,
        field1: ...,
        ...
      },
      "done": boolean,
    
      // result
      "error": {
        object (Status)
      },
      "response": {
        "@type": string,
        field1: ...,
        ...
      }
      // Union type
    }

    ChunkingConfig

    Параметры, сообщающие сервису, как разбить файл на части. Навеяно google3/cloud/ai/platform/extension/lib/retrieval/config/chunker_config.proto

    Поля
    Union type config
    Конфигурация фрагментации, которую следует использовать. config может быть только одной из следующих:
    объект whiteSpaceConfig object ( WhiteSpaceConfig )

    Конфигурация фрагментации белого пространства.

    JSON-представление
    {
    
      // config
      "whiteSpaceConfig": {
        object (WhiteSpaceConfig)
      }
      // Union type
    }

    WhiteSpaceConfig

    Конфигурация для алгоритма разбиения на фрагменты с помощью пробелов [разделители — пробелы].

    Поля
    maxTokensPerChunk integer

    Максимальное количество токенов в блоке. Для этого алгоритма разбиения на блоки токены определяются как слова. Примечание: мы определяем токены как слова, разделённые пробелами, а не как результат работы токенизатора. Контекстное окно последней модели встраивания Gemini по состоянию на 17.04.2025 в настоящее время составляет 8192 токена. Мы предполагаем, что среднее слово состоит из 5 символов. Поэтому мы устанавливаем верхний предел 2**9, что составляет 512 слов, или 2560 токенов, в худшем случае предполагая, что на токен приходится один символ. Это консервативная оценка, призванная предотвратить переполнение контекстного окна.

    maxOverlapTokens integer

    Максимальное количество перекрывающихся токенов между двумя соседними фрагментами.

    JSON-представление
    {
      "maxTokensPerChunk": integer,
      "maxOverlapTokens": integer
    }

    Метод: files.get

    Получает метаданные для указанного File .

    Конечная точка

    получить https: / /generativelanguage.googleapis.com /v1beta /{name=files /*}

    Параметры пути

    string name

    Обязательно. Имя File , который нужно получить. Пример: files/abc-123 Имя имеет вид files/{file} .

    Текст запроса

    Тело запроса должно быть пустым.

    Пример запроса

    Питон

    from google import genai
    
    client = genai.Client()
    myfile = client.files.upload(file=media / "poem.txt")
    file_name = myfile.name
    print(file_name)  # "files/*"
    
    myfile = client.files.get(name=file_name)
    print(myfile)

    Node.js

    // Make sure to include the following import:
    // import {GoogleGenAI} from '@google/genai';
    const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
    const myfile = await ai.files.upload({
      file: path.join(media, "poem.txt"),
    });
    const fileName = myfile.name;
    console.log(fileName);
    
    const fetchedFile = await ai.files.get({ name: fileName });
    console.log(fetchedFile);

    Идти

    ctx := context.Background()
    client, err := genai.NewClient(ctx, &genai.ClientConfig{
    	APIKey:  os.Getenv("GEMINI_API_KEY"),
    	Backend: genai.BackendGeminiAPI,
    })
    if err != nil {
    	log.Fatal(err)
    }
    myfile, err := client.Files.UploadFromPath(
    	ctx,
    	filepath.Join(getMedia(), "poem.txt"), 
    	&genai.UploadFileConfig{
    		MIMEType: "text/plain",
    	},
    )
    if err != nil {
    	log.Fatal(err)
    }
    fileName := myfile.Name
    fmt.Println(fileName)
    file, err := client.Files.Get(ctx, fileName, nil)
    if err != nil {
    	log.Fatal(err)
    }
    fmt.Println(file)

    Оболочка

    name=$(jq ".file.name" file_info.json)
    # Get the file of interest to check state
    curl https://generativelanguage.googleapis.com/v1beta/files/$name > file_info.json
    # Print some information about the file you got
    name=$(jq ".file.name" file_info.json)
    echo name=$name
    file_uri=$(jq ".file.uri" file_info.json)
    echo file_uri=$file_uri

    Тело ответа

    В случае успеха тело ответа содержит экземпляр File .

    Метод: files.list

    Перечисляет метаданные File , принадлежащих запрашивающему проекту.

    Конечная точка

    получить https: / /generativelanguage.googleapis.com /v1beta /files

    Параметры запроса

    pageSize integer

    Необязательно. Максимальное количество File , возвращаемых на страницу. Если не указано, по умолчанию 10. Максимальный pageSize — 100.

    string pageToken

    Необязательно. Токен страницы из предыдущего вызова files.list .

    Текст запроса

    Тело запроса должно быть пустым.

    Пример запроса

    Питон

    from google import genai
    
    client = genai.Client()
    print("My files:")
    for f in client.files.list():
        print("  ", f.name)

    Node.js

    // Make sure to include the following import:
    // import {GoogleGenAI} from '@google/genai';
    const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
    console.log("My files:");
    // Using the pager style to list files
    const pager = await ai.files.list({ config: { pageSize: 10 } });
    let page = pager.page;
    const names = [];
    while (true) {
      for (const f of page) {
        console.log("  ", f.name);
        names.push(f.name);
      }
      if (!pager.hasNextPage()) break;
      page = await pager.nextPage();
    }

    Идти

    ctx := context.Background()
    client, err := genai.NewClient(ctx, &genai.ClientConfig{
    	APIKey:  os.Getenv("GEMINI_API_KEY"),
    	Backend: genai.BackendGeminiAPI,
    })
    if err != nil {
    	log.Fatal(err)
    }
    fmt.Println("My files:")
    page, err := client.Files.List(ctx, nil)
    if err != nil {
    	log.Fatal(err)
    }
    for _, f := range page.Items {
    	fmt.Println("  ", f.Name)
    }

    Оболочка

    echo "My files: "
    
    curl "https://generativelanguage.googleapis.com/v1beta/files?key=$GEMINI_API_KEY"

    Тело ответа

    Ответ для files.list .

    В случае успеха тело ответа содержит данные со следующей структурой:

    Поля
    files[] object ( File )

    Список File s.

    string nextPageToken

    Токен, который можно отправить как pageToken в последующий вызов files.list .

    JSON-представление
    {
      "files": [
        {
          object (File)
        }
      ],
      "nextPageToken": string
    }

    Метод: files.delete

    Удаляет File .

    Конечная точка

    удалить https: / /generativelanguage.googleapis.com /v1beta /{name=files /*}

    Параметры пути

    string name

    Обязательно. Имя File для удаления. Пример: files/abc-123 Имя имеет вид files/{file} .

    Текст запроса

    Тело запроса должно быть пустым.

    Пример запроса

    Питон

    from google import genai
    
    client = genai.Client()
    myfile = client.files.upload(file=media / "poem.txt")
    
    client.files.delete(name=myfile.name)
    
    try:
        result = client.models.generate_content(
            model="gemini-2.0-flash", contents=[myfile, "Describe this file."]
        )
        print(result)
    except genai.errors.ClientError:
        pass

    Node.js

    // The Gen AI SDK for TypeScript and JavaScript is in preview.
    // Some features have not been implemented.

    Идти

    ctx := context.Background()
    client, err := genai.NewClient(ctx, &genai.ClientConfig{
    	APIKey:  os.Getenv("GEMINI_API_KEY"),
    	Backend: genai.BackendGeminiAPI,
    })
    if err != nil {
    	log.Fatal(err)
    }
    myfile, err := client.Files.UploadFromPath(
    	ctx, 
    	filepath.Join(getMedia(), "poem.txt"), 
    	&genai.UploadFileConfig{
    		MIMEType: "text/plain",
    	},
    )
    if err != nil {
    	log.Fatal(err)
    }
    // Delete the file.
    _, err = client.Files.Delete(ctx, myfile.Name, nil)
    if err != nil {
    	log.Fatal(err)
    }
    // Attempt to use the deleted file.
    parts := []*genai.Part{
    	genai.NewPartFromURI(myfile.URI, myfile.MIMEType,),
    	genai.NewPartFromText("Describe this file."),
    }
    
    contents := []*genai.Content{
    	genai.NewContentFromParts(parts, genai.RoleUser),
    }
    
    _, err = client.Models.GenerateContent(ctx, "gemini-2.0-flash", contents, nil)
    // Expect an error when using a deleted file.
    if err != nil {
    	return nil
    }
    return fmt.Errorf("expected an error when using deleted file")

    Оболочка

    curl --request "DELETE" https://generativelanguage.googleapis.com/v1beta/files/$name?key=$GEMINI_API_KEY

    Тело ответа

    В случае успеха тело ответа представляет собой пустой объект JSON.

    Ресурс REST: файлы

    Ресурс: Файл

    Файл загружен в API. Следующий идентификатор: 15.

    Поля
    string name

    Неизменяемый. Идентификатор. Имя ресурса File . Идентификатор (имя без префикса «files/») может содержать до 40 символов, включая строчные буквы, цифры или дефисы (-). Идентификатор не может начинаться или заканчиваться дефисом. Если при создании имя пустое, будет сгенерировано уникальное имя. Пример: files/123-456

    string displayName

    Необязательно. Удобное для восприятия отображаемое имя File . Длина отображаемого имени не должна превышать 512 символов, включая пробелы. Пример: «Welcome Image»

    string mimeType

    Только вывод. MIME-тип файла.

    string ( int64 format) sizeBytes (формат int64)

    Только вывод. Размер файла в байтах.

    createTime string ( Timestamp format)

    Только вывод. Отметка времени создания File .

    Использует RFC 3339, согласно которому сгенерированный вывод всегда будет нормализован по оси Z и содержать 0, 3, 6 или 9 знаков после запятой. Также допускаются смещения, отличные от «Z». Примеры: "2014-10-02T15:01:23Z" , "2014-10-02T15:01:23.045123456Z" или "2014-10-02T15:01:23+05:30" .

    строка updateTime string ( Timestamp format)

    Только вывод. Отметка времени последнего обновления File .

    Использует RFC 3339, согласно которому сгенерированный вывод всегда будет нормализован по оси Z и содержать 0, 3, 6 или 9 знаков после запятой. Также допускаются смещения, отличные от «Z». Примеры: "2014-10-02T15:01:23Z" , "2014-10-02T15:01:23.045123456Z" или "2014-10-02T15:01:23+05:30" .

    строка expirationTime string ( Timestamp format)

    Только вывод. Временная метка, указывающая, когда File будет удалён. Устанавливается только в том случае, если срок действия File истекает.

    Использует RFC 3339, согласно которому сгенерированный вывод всегда будет нормализован по оси Z и содержать 0, 3, 6 или 9 знаков после запятой. Также допускаются смещения, отличные от «Z». Примеры: "2014-10-02T15:01:23Z" , "2014-10-02T15:01:23.045123456Z" или "2014-10-02T15:01:23+05:30" .

    sha256Hash string ( bytes format)

    Только вывод. SHA-256 хэш загруженных байтов.

    Строка в кодировке base64.

    string uri

    Только вывод. URI File .

    string downloadUri

    Только вывод. URI загрузки File .

    state enum ( State )

    Только вывод. Состояние обработки файла.

    source enum ( Source )

    Источник файла.

    object ( Status ) error (статус)

    Только вывод. Статус ошибки, если обработка файла не удалась.

    metadata Union type
    Метаданные для файла. metadata могут быть только одними из следующих:
    object ( VideoFileMetadata ) videoMetadata ( VideoFileMetadata )

    Только вывод. Метаданные для видео.

    JSON-представление
    {
      "name": string,
      "displayName": string,
      "mimeType": string,
      "sizeBytes": string,
      "createTime": string,
      "updateTime": string,
      "expirationTime": string,
      "sha256Hash": string,
      "uri": string,
      "downloadUri": string,
      "state": enum (State),
      "source": enum (Source),
      "error": {
        object (Status)
      },
    
      // metadata
      "videoMetadata": {
        object (VideoFileMetadata)
      }
      // Union type
    }

    ВидеофайлМетаданные

    Метаданные для File .

    Поля
    Строка videoDuration string ( Duration format)

    Продолжительность видео.

    Длительность в секундах, содержащая до девяти знаков после запятой, заканчивается на « s ». Пример: "3.5s" .

    JSON-представление
    {
      "videoDuration": string
    }

    Состояние

    Состояния жизненного цикла файла.

    Перечисления
    STATE_UNSPECIFIED Значение по умолчанию. Используется, если состояние не указано.
    PROCESSING Файл обрабатывается и пока не может быть использован для вывода.
    ACTIVE Файл обработан и доступен для вывода.
    FAILED Файл не удалось обработать.

    Источник

    Перечисления
    SOURCE_UNSPECIFIED Используется, если источник не указан.
    UPLOADED Указывает, что файл загружен пользователем.
    GENERATED Указывает, что файл создан Google.
    REGISTERED Указывает, что файл зарегистрирован, т. е. является файлом Google Cloud Storage.

    Статус

    Тип Status определяет логическую модель ошибок, подходящую для различных сред программирования, включая REST API и RPC API. Он используется в gRPC . Каждое сообщение Status содержит три фрагмента данных: код ошибки, сообщение об ошибке и сведения об ошибке.

    Дополнительную информацию об этой модели ошибок и о том, как с ней работать, можно найти в Руководстве по проектированию API .

    Поля
    code integer

    Код состояния, который должен быть значением перечисления google.rpc.Code .

    string message

    Сообщение об ошибке для разработчика, которое должно быть на английском языке. Любое сообщение об ошибке для пользователя должно быть локализовано и отправлено в поле google.rpc.Status.details или локализовано клиентом.

    details[] object

    Список сообщений с подробностями об ошибках. Существует общий набор типов сообщений, которые могут использовать API.

    Объект, содержащий поля произвольного типа. Дополнительное поле "@type" содержит URI, идентифицирующий тип. Пример: { "id": 1234, "@type": "types.example.com/standard/id" } .

    JSON-представление
    {
      "code": integer,
      "message": string,
      "details": [
        {
          "@type": string,
          field1: ...,
          ...
        }
      ]
    }