Using files

A API Gemini permite fazer upload de arquivos de mídia separadamente da entrada de comando, o que permite reutilizar sua mídia em várias solicitações e comandos. Para mais detalhes, consulte o guia Comandos com mídia.

Método: media.upload

Faz upload de dados para uma ragStore, pré-processa e divide em partes antes de armazenar em um documento RagStore.

Endpoint

  • URI de upload, para solicitações de upload de mídia:
post https://generativelanguage.googleapis.com/upload/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore
  • URI de metadados, para solicitações somente de metadados:
post https://generativelanguage.googleapis.com/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore

Parâmetros de caminho

ragStoreName string

Obrigatório. Imutável. O nome do RagStore em que o arquivo será enviado. Exemplo: ragStores/my-rag-store-123. Ele tem a forma ragStores/{ragstore}.

Corpo da solicitação

O corpo da solicitação contém dados com a seguinte estrutura:

Campos
displayName string

Opcional. Nome de exibição do documento criado.

customMetadata[] object (CustomMetadata)

Metadados personalizados a serem associados aos dados.

chunkingConfig object (ChunkingConfig)

Opcional. Configuração para informar ao serviço como dividir os dados em partes. Se não for fornecido, o serviço vai usar parâmetros padrão.

mimeType string

Opcional. Tipo MIME dos dados. Se não for fornecido, ele será inferido do conteúdo enviado.

Corpo da resposta

Esta é uma cópia de google.longrunning.Operation. Precisamos copiar porque, para interagir com o Scotty, é necessário adicionar um campo específico que não pode ser adicionado no proto de operação de nível superior.

Se bem-sucedido, o corpo da resposta incluirá dados com a estrutura a seguir:

Campos
name string

O nome atribuído pelo servidor, que é exclusivo somente no mesmo serviço que o retorna originalmente. Se você usar o mapeamento padrão de HTTP, name precisa ser um nome de recurso que termine com operations/{unique_id}.

metadata object

Metadados específicos do serviço associados à operação. Eles geralmente contêm informações sobre o progresso e metadados comuns, como a hora da criação. Em alguns serviços, esses metadados talvez não sejam fornecidos. Em qualquer método que retorna uma operação de longa duração, o tipo de metadados, se houver, deve ser documentado.

Um objeto contendo campos de um tipo arbitrário. Um campo adicional "@type" contém uma URI que identifica o tipo. Exemplo: { "id": 1234, "@type": "types.example.com/standard/id" }.

done boolean

Se o valor for false, significa que a operação ainda está em andamento. Se for true, a operação será concluída e error ou response estarão disponíveis.

result Union type
O resultado da operação, que pode ser um error ou uma response válida. Se done == false, nem error ou response estão definidos. Se done == true, será possível definir exatamente um entre error ou response. Alguns serviços podem não fornecer o resultado. result pode ser apenas um dos seguintes:
error object (Status)

Resultado do erro da operação em caso de falha ou cancelamento.

response object

A resposta normal e bem-sucedida da operação. Se o método original não retornar dados em caso de êxito, como Delete, a resposta será google.protobuf.Empty. Se o método original for Get/Create/Update padrão, a resposta será o recurso. Para outros métodos, a resposta precisa ser do tipo XxxResponse, em que Xxx é o nome do método original. Por exemplo, se o nome do método original for TakeSnapshot(), o tipo inferido de resposta será TakeSnapshotResponse.

Um objeto contendo campos de um tipo arbitrário. Um campo adicional "@type" contém uma URI que identifica o tipo. Exemplo: { "id": 1234, "@type": "types.example.com/standard/id" }.

Representação JSON
{
  "name": string,
  "metadata": {
    "@type": string,
    field1: ...,
    ...
  },
  "done": boolean,

  // result
  "error": {
    object (Status)
  },
  "response": {
    "@type": string,
    field1: ...,
    ...
  }
  // Union type
}

ChunkingConfig

Parâmetros para informar ao serviço como dividir o arquivo em partes, inspirados em google3/cloud/ai/platform/extension/lib/retrieval/config/chunker_config.proto

Campos
config Union type
A configuração de divisão em partes a ser usada. config pode ser apenas de um dos tipos a seguir:
whiteSpaceConfig object (WhiteSpaceConfig)

Configuração de divisão de espaço em branco.

Representação JSON
{

  // config
  "whiteSpaceConfig": {
    object (WhiteSpaceConfig)
  }
  // Union type
}

WhiteSpaceConfig

Configuração para um algoritmo de divisão de espaço em branco [delimitado por espaço em branco].

Campos
maxTokensPerChunk integer

Número máximo de tokens por trecho. Os tokens são definidos como palavras para esse algoritmo de divisão. Observação: definimos tokens como palavras divididas por espaços em branco, e não como a saída de um tokenizador. A janela de contexto do modelo de embedding do Gemini mais recente, em 17/04/2025, é de 8.192 tokens. Consideramos que a palavra média tem cinco caracteres. Portanto, definimos o limite superior como 2**9, que é 512 palavras ou 2.560 tokens, considerando o pior caso de um caractere por token. Essa é uma estimativa conservadora para evitar o estouro da janela de contexto.

maxOverlapTokens integer

Número máximo de tokens sobrepostos entre dois blocos adjacentes.

Representação JSON
{
  "maxTokensPerChunk": integer,
  "maxOverlapTokens": integer
}

Método: files.get

Recebe os metadados do File especificado.

Endpoint

get https://generativelanguage.googleapis.com/v1beta/{name=files/*}

Parâmetros de caminho

name string

Obrigatório. O nome do File a ser recebido. Exemplo: files/abc-123. Ele tem a forma files/{file}.

Corpo da solicitação

O corpo da solicitação precisa estar vazio.

Exemplo de solicitação

Python

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);

Go

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)

Concha

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

Corpo da resposta

Se a solicitação for bem-sucedida, o corpo da resposta conterá uma instância de File.

Método: files.list

Lista os metadados dos Files pertencentes ao projeto solicitante.

Endpoint

get https://generativelanguage.googleapis.com/v1beta/files

Parâmetros de consulta

pageSize integer

Opcional. Número máximo de Files a serem retornados por página. Se não for especificado, o padrão será 10. O valor máximo de pageSize é 100.

pageToken string

Opcional. Um token de página de uma chamada files.list anterior.

Corpo da solicitação

O corpo da solicitação precisa estar vazio.

Exemplo de solicitação

Python

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();
}

Go

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)
}

Concha

echo "My files: "

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

Corpo da resposta

Resposta para files.list.

Se bem-sucedido, o corpo da resposta incluirá dados com a estrutura a seguir:

Campos
files[] object (File)

A lista de Files.

nextPageToken string

Um token que pode ser enviado como um pageToken em uma chamada files.list subsequente.

Representação JSON
{
  "files": [
    {
      object (File)
    }
  ],
  "nextPageToken": string
}

Método: files.delete

Exclui o File.

Endpoint

delete https://generativelanguage.googleapis.com/v1beta/{name=files/*}

Parâmetros de caminho

name string

Obrigatório. O nome do File a ser excluído. Exemplo: files/abc-123. Ele tem a forma files/{file}.

Corpo da solicitação

O corpo da solicitação precisa estar vazio.

Exemplo de solicitação

Python

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.

Go

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")

Concha

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

Corpo da resposta

Se não houver nenhum problema, o corpo da resposta será um objeto JSON vazio.

Recurso REST: files

Recurso: File

Um arquivo enviado para a API. Próximo ID: 15

Campos
name string

Imutável. Identificador. O nome do recurso File. O ID (nome sem o prefixo "files/") pode conter até 40 caracteres alfanuméricos minúsculos ou traços (-). O ID não pode começar nem terminar com um traço. Se o nome estiver vazio na criação, um nome exclusivo será gerado. Exemplo: files/123-456

displayName string

Opcional. O nome de exibição legível para o File. O nome de exibição não pode ter mais de 512 caracteres, incluindo espaços. Exemplo: "Imagem de boas-vindas"

mimeType string

Apenas saída. Tipo MIME do arquivo.

sizeBytes string (int64 format)

Apenas saída. Tamanho do arquivo em bytes.

createTime string (Timestamp format)

Apenas saída. O carimbo de data/hora de quando o File foi criado.

Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" ou "2014-10-02T15:01:23+05:30".

updateTime string (Timestamp format)

Apenas saída. O carimbo de data/hora da última atualização do File.

Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" ou "2014-10-02T15:01:23+05:30".

expirationTime string (Timestamp format)

Apenas saída. O carimbo de data/hora de quando o File será excluído. Só é definido se a File estiver programada para expirar.

Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" ou "2014-10-02T15:01:23+05:30".

sha256Hash string (bytes format)

Apenas saída. Hash SHA-256 dos bytes enviados.

Uma string codificada em base64.

uri string

Apenas saída. O URI do File.

downloadUri string

Apenas saída. O URI de download do File.

state enum (State)

Apenas saída. Estado de processamento do arquivo.

source enum (Source)

Origem do arquivo.

error object (Status)

Apenas saída. Status de erro se o processamento do arquivo falhar.

metadata Union type
Metadados do arquivo. metadata pode ser apenas de um dos tipos a seguir:
videoMetadata object (VideoFileMetadata)

Apenas saída. Metadados de um vídeo.

Representação 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
}

VideoFileMetadata

Metadados de um vídeo File.

Campos
videoDuration string (Duration format)

Duração do vídeo.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

Representação JSON
{
  "videoDuration": string
}

Estado

Estados do ciclo de vida de um arquivo.

Tipos enumerados
STATE_UNSPECIFIED O valor padrão. Esse valor é usado se o estado for omitido.
PROCESSING O arquivo está sendo processado e ainda não pode ser usado para inferência.
ACTIVE O arquivo é processado e fica disponível para inferência.
FAILED Falha ao processar o arquivo.

Origem

Tipos enumerados
SOURCE_UNSPECIFIED Usado se a origem não for especificada.
UPLOADED Indica que o arquivo foi enviado pelo usuário.
GENERATED Indica que o arquivo foi gerado pelo Google.
REGISTERED Indica que o arquivo é registrado, ou seja, um arquivo do Google Cloud Storage.

Status

O tipo Status define um modelo de erro lógico que é adequado a diferentes ambientes de programação, incluindo APIs REST e RPC. É usado por gRPC. Cada mensagem Status contém três partes de dados: código do erro, mensagem de erro e detalhes do erro.

É possível descobrir mais sobre esse modelo de erro e como trabalhar com ele no Guia de design de API.

Campos
code integer

O código de status, que precisa ser um valor de enumeração de google.rpc.Code.

message string

Uma mensagem de erro em inglês para o desenvolvedor. Qualquer mensagem de erro para o usuário precisa ser localizada e enviada no campo google.rpc.Status.details, ou localizada pelo cliente.

details[] object

Uma lista de mensagens com os detalhes do erro. Há um conjunto comum de tipos de mensagens para as APIs usarem.

Um objeto contendo campos de um tipo arbitrário. Um campo adicional "@type" contém uma URI que identifica o tipo. Exemplo: { "id": 1234, "@type": "types.example.com/standard/id" }.

Representação JSON
{
  "code": integer,
  "message": string,
  "details": [
    {
      "@type": string,
      field1: ...,
      ...
    }
  ]
}