"""
Gemini (Google AI) の利用可能なモデルを一覧表示するスクリプト。
このスクリプトは、`ai.env` ファイルから Google API キーを読み込み、
Google Generative AI SDK を使用して、`generateContent` メソッドをサポートする
利用可能な Gemini モデルのIDを出力します。
API キーの認証エラーや権限エラーなどの例外処理も含まれています。
:doc:`list_gemini_models_usage`
"""
import google.generativeai as genai
import os
import sys
from tkai_lib import read_ai_config
[ドキュメント]
def get_api_key() -> str | None:
"""
ai.env ファイルから GOOGLE_API_KEY を取得する。
この関数は `tkai_lib.read_ai_config` を呼び出して指定された環境設定ファイルを読み込み、
その中から "GOOGLE_API_KEY" という名前の環境変数の値を取得します。
:returns: str | None: GOOGLE_API_KEY の値。設定されていない場合は None。
"""
read_ai_config("ai.env")
return os.getenv("GOOGLE_API_KEY")
[ドキュメント]
def list_models() -> int:
"""
利用可能な Gemini モデルの一覧を取得し、`generateContent` をサポートするモデルの件数を返す。
Google Generative AI SDK を使用して、Google AI サービスに登録されているすべてのモデルを取得します。
その中から、`generateContent` メソッドをサポートしているモデルのみをフィルタリングし、
そのモデルID (m.name) を標準出力に表示し、総数を返します。
:returns: int: `generateContent` をサポートするモデルの総数。
"""
count = 0
for m in genai.list_models():
if 'generateContent' in m.supported_generation_methods:
print(f"ID: {m.name}")
count += 1
return count
[ドキュメント]
def main() -> int:
"""
Gemini (Google AI) の利用可能モデルを確認し、一覧を出力するメイン処理。
`ai.env` から API キーを読み込み、API の認証と設定を行います。
その後、`list_models` 関数を呼び出して利用可能なモデルの一覧を取得・表示します。
API キーの欠落、無効なAPIキー、権限エラーなど、発生しうる例外を捕捉し、
詳細なエラーメッセージを出力して適切な終了コードを返します。
:returns: int: 処理が正常に完了した場合は 0、エラーが発生した場合は 1。
"""
print("--- Gemini (Google AI) 利用可能モデル確認 ---")
try:
print("ai.env を読み込みます...")
api_key = get_api_key()
print(f"GOOGLE_API_KEY exists = {bool(api_key)}")
if not api_key:
print("ERROR: GOOGLE_API_KEY が設定されていません")
print(" ai.env の内容、または read_ai_config() を確認してください")
return 1
print("API を設定中...")
genai.configure(api_key=api_key)
print("--- 利用可能なモデル一覧を取得します ---")
count = list_models()
print(f"--- 完了: {count} 件 ---")
return 0
except Exception as e:
# 認証エラーや権限エラーの判定
error_msg = str(e).lower()
if "api_key_invalid" in error_msg or "invalid api key" in error_msg:
print("ERROR: Google API の認証に失敗しました")
print(" API KEY が無効か、設定が間違っている可能性があります")
print(" Google AI Studio で新しいキーを確認し、ai.env を更新してください")
elif "permissiondenied" in error_msg or "403" in error_msg:
print("ERROR: 権限エラーが発生しました")
print(" API KEY の制限設定(IP制限やサービス制限)を確認してください")
else:
print("ERROR: モデル一覧の取得に失敗しました")
print(f"[{type(e).__name__}] {e}")
return 1
if __name__ == "__main__":
# もとのコードの "_MAIN__" を修正し、終了コードを返すように変更
sys.exit(main())