Using files

Gemini API は、プロンプト入力とは別にメディア ファイルのアップロードをサポートしているため、複数のリクエストや複数のプロンプトでメディアを再利用できます。詳しくは、メディアを使用したプロンプトのガイドをご覧ください。

メソッド: media.upload

データを ragStore にアップロードし、前処理とチャンク化を行ってから RagStore ドキュメントに保存します。

エンドポイント

  • アップロード URI(メディアのアップロード リクエストの場合):
post https://generativelanguage.googleapis.com/upload/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore
  • メタデータ URI(メタデータのみのリクエストの場合):
post https://generativelanguage.googleapis.com/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore

パスパラメータ

ragStoreName string

必須。変更不可。ファイルをアップロードする RagStore の名前。例: ragStores/my-rag-store-123 形式は ragStores/{ragstore} です。

リクエストの本文

リクエストの本文には、次の構造のデータが含まれます。

フィールド
displayName string

省略可。作成されたドキュメントの表示名。

customMetadata[] object (CustomMetadata)

データに関連付けるカスタム メタデータ。

chunkingConfig object (ChunkingConfig)

省略可。サービスにデータのチャンク方法を指示する構成。指定しない場合、サービスはデフォルトのパラメータを使用します。

mimeType string

省略可。データの MIME タイプ。指定されていない場合は、アップロードされたコンテンツから推測されます。

レスポンスの本文

これは google.longrunning.Operation のコピーです。scotty とやり取りするには、最上位の Operation proto に追加できない scotty 固有のフィールドを追加する必要があるため、コピーする必要があります。

成功した場合、レスポンスの本文には次の構造のデータが含まれます。

フィールド
name string

サーバーによって割り当てられる名前。最初にその名前を返すサービスと同じサービス内でのみ一意になります。デフォルトの HTTP マッピングを使用している場合は、nameoperations/{unique_id} で終わるリソース名にします。

metadata object

オペレーションに関連付けられているサービス固有のメタデータ。通常は進捗情報や、作成日時などの共通メタデータが含まれます。一部のサービスでは、このようなメタデータが提供されないこともあります。メタデータがある場合、長時間実行オペレーションを返すメソッドでは、メタデータの型をドキュメント化しておく必要があります。

任意の型のフィールドを含むオブジェクト。追加フィールドの "@type" には、その型を識別する URI が含まれます。例: { "id": 1234, "@type": "types.example.com/standard/id" }

done boolean

値が false の場合は、オペレーションが進行中であることを意味します。true の場合、オペレーションは完了しており、error または response が利用可能です。

result Union type
オペレーションの結果。error または有効な response になります。done == false の場合、errorresponse も設定されません。done == true の場合、error または response のどちらか一つだけが設定されます。一部のサービスでは結果が返されない場合があります。result は次のいずれかになります。
error object (Status)

失敗またはキャンセルされた場合のオペレーションのエラー結果。

response object

オペレーションの通常の成功レスポンス。元のメソッドで成功時にデータが返されない場合(Delete など)、レスポンスは google.protobuf.Empty になります。元のメソッドが標準の Get/Create/Update である場合、レスポンスはリソースになります。他のメソッドについては、レスポンスの型が XxxResponseXxx は元のメソッド名)になります。たとえば、元のメソッド名が 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 に基づいています。

フィールド
config Union type
使用するチャンク構成。config は次のいずれかになります。
whiteSpaceConfig object (WhiteSpaceConfig)

空白文字のチャンク化の構成。

JSON 表現
{

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

WhiteSpaceConfig

空白文字チャンク アルゴリズムの構成 [空白文字区切り]。

フィールド
maxTokensPerChunk integer

チャンクあたりの最大トークン数。このチャンク アルゴリズムでは、トークンは単語として定義されます。注: ここでは、トークンはトークナイザーの出力ではなく、空白で区切られた単語として定義します。2025 年 4 月 17 日時点の最新の Gemini エンベディング モデルのコンテキスト ウィンドウは、現在 8,192 トークンです。平均的な単語は 5 文字であると仮定します。したがって、最悪の場合を想定して、上限を 2**9(512 語または 2,560 トークン)に設定します。これは、コンテキスト ウィンドウのオーバーフローを防ぐための控えめな見積もりです。

maxOverlapTokens integer

隣接する 2 つのチャンク間で重複するトークンの最大数。

JSON 表現
{
  "maxTokensPerChunk": integer,
  "maxOverlapTokens": integer
}

メソッド: files.get

指定された File のメタデータを取得します。

エンドポイント

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

パスパラメータ

name string

必須。取得する File の名前。例: files/abc-123 形式は files/{file} です。

リクエストの本文

リクエストの本文は空にする必要があります。

リクエスト例

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)

Shell

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 のメタデータを一覧表示します。

エンドポイント

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

クエリ パラメータ

pageSize integer

省略可。ページごとに返す File の最大数。指定しない場合、デフォルトは 10 です。pageSize の最大値は 100 です。

pageToken string

省略可。前回の files.list 呼び出しのページトークン。

リクエストの本文

リクエストの本文は空にする必要があります。

リクエスト例

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

Shell

echo "My files: "

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

レスポンスの本文

files.list に対するレスポンス。

成功した場合、レスポンスの本文には次の構造のデータが含まれます。

フィールド
files[] object (File)

File のリスト。

nextPageToken string

後続の files.list 呼び出しで pageToken として送信できるトークン。

JSON 表現
{
  "files": [
    {
      object (File)
    }
  ],
  "nextPageToken": string
}

メソッド: files.delete

File を削除します。

エンドポイント

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

パスパラメータ

name string

必須。削除する File の名前。例: files/abc-123 形式は files/{file} です。

リクエストの本文

リクエストの本文は空にする必要があります。

リクエスト例

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

Shell

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

レスポンスの本文

成功した場合、レスポンスの本文は空の JSON オブジェクトになります。

REST リソース: ファイル

リソース: File

API にアップロードされたファイル。次の ID: 15

フィールド
name string

変更不可。ID。File リソース名。ID(「files/」接頭辞を除く名前)には、小文字の英数字またはダッシュ(-)を最大 40 文字まで使用できます。ID の先頭または末尾にダッシュを使用することはできません。作成時に名前が空の場合、一意の名前が生成されます。例: files/123-456

displayName string

省略可。File の人が読める表示名。表示名は、スペースを含めて 512 文字以下にする必要があります。例: 「Welcome Image」

mimeType string

出力専用。ファイルの MIME タイプ。

sizeBytes string (int64 format)

出力専用。ファイルのサイズ(バイト単位)。

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 でエンコードされた文字列。

uri string

出力専用。File の URI。

downloadUri string

出力専用。File のダウンロード URI。

state enum (State)

出力専用。ファイルの処理ステータス。

source enum (Source)

ファイルのソース。

error object (Status)

出力専用。ファイルの処理が失敗した場合のエラー ステータス。

metadata Union type
ファイルのメタデータ。metadata は次のいずれかになります。
videoMetadata object (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
}

VideoFileMetadata

動画 File のメタデータ。

フィールド
videoDuration string (Duration format)

動画の長さ。

s で終わる小数点以下 9 桁までの秒単位の期間。例: "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 メッセージには、エラーコード、エラー メッセージ、エラーの詳細という 3 種類のデータが含まれます。

このエラーモデルと操作方法について詳しくは、API 設計ガイドをご覧ください。

フィールド
code integer

ステータス コード。google.rpc.Code の列挙値である必要があります。

message string

デベロッパー向けのエラー メッセージ。英語で記述します。ユーザー向けのエラー メッセージは、ローカライズして 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: ...,
      ...
    }
  ]
}