genai-kit

module
v1.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 9, 2026 License: MIT

README

✨ Gen Ai Kit

CI Status Language Go Version GitHub tag (latest by date) Go Reference

🚀 概要 (About) - genai SDK を公開 API に出さない Vertex AI 向けクライアント。保存も認証情報の配布も引き受けません

Gen Ai Kit は、Google Cloud Vertex AI 向けの Go ライブラリです。テキスト生成、gs:// を使った マルチモーダル入力、参照画像付きの画像生成、Lyria による音楽生成、Veo による動画生成を扱います。 生成物の保存先は決めず、認証は Application Default Credentials に委ねます。

バックエンドは Vertex AIConfig.APIKey だけは暫定の例外です。後述)、 参照画像の gs:// はモデル側に直接解決させ(取得もアップロードも起きません)、画像生成の imagegen を内蔵します。

シグネチャ・フィールド・エラーの一覧は pkg.go.dev にあります。ここに書くのは、 godoc を読んでも気付けないことだけです。


✨ 提供機能 (Features)

  • gemini: Vertex AI クライアント。生成の入口は GenerateText(テキストのみの最短経路)と Generate(それ以外すべて)の 2 つだけです。
    • genai.Part を直接受け取る公開 API はありません。 添付は AttachmentMIMEType と、 DataURI の片方)で表します。SDK の型を公開面へ出すと、利用側が genai を import する 理由が復活してしまうためです。設定値の型と定数は別名として再エクスポートしてあるので、 値を選ぶためだけの import も要りません。
    • 空の添付は黙って読み飛ばします。 参照画像を「あれば渡す」形で組み立てる呼び出し側が、 空要素の除去を毎回書かずに済みます。プロンプトが空でも添付があれば送れます(音声だけを 渡して解析させる用途)。両方空なら ErrEmptyParts です。
    • Config.HTTPClient を渡しても認証は失われません。 genai は HTTP クライアントを渡されると ADC の検出をスキップし、認証ヘッダ無しで送るため、素の &http.Client{Timeout: ...} だと 全リクエストが 401 CREDENTIALS_MISSING になります。本ライブラリが認証情報を付け直し、 渡したインスタンスは書き換えず複製を使います。
    • リトライは genai SDK に任せています。 408 / 429 / 5xx と通信エラーの判定表を持たないので、 SDK が対象を増やせばそのまま追随します。Config で回数と間隔を渡すだけです。
    • 構造化出力でも CleanJSONResponse を通してください。 ResponseSchema を指定しても、 モデルは完結した JSON の後ろに説明文を継ぎ足したり、複数行の本文の中に生の改行を入れたりします。 どれも応答を返しきったあとの話なので、API の再試行では直りません。
  • imagegen: 参照画像付きの画像生成。プロンプト結合・シード採番・既定値・画像抽出を 引き受けます。参照画像は gs://Images)と、呼び出し側が取得済みのバイト列(References)です。 取得はこのパッケージの仕事ではありません — HTTP の参照画像は、取得の経路・タイムアウト・ サイズ上限を呼び出し側が決めてバイト列で渡します。
  • music: 楽曲構成のデータ型(Recipe / Section / LyricsDraft / AIModels)。依存を持たない 葉パッケージで、レシピを読み書きするだけの下流サービスがワークフロー本体を輸入せずに済みます。 JSON タグは snake_case で、保存済みレシピ JSON との互換性の契約です。
  • lyria: 歌詞生成 → 作曲レシピ生成 → Lyria 音声生成の 3 段。
    • プロンプト本文を一切持ちません。 組み立ては TextPromptBuilder / AudioPromptBuilder を 注入して決めます。このパッケージでは Generator が AI を呼ぶ側、Builder が呼ばない 組み立て役を指します。
    • 一括実行の入口は意図的にありません。 3 段を個別に呼ぶのは、段の間に構造検証などの 品質ゲートを挟めるようにするためです。
    • lyria.MusicRecipe / MusicSection / LyricsDraft / AIModelsmusic の型の別名なので、 既存の表記もそのまま使えます。
  • veo: Veo 動画生成の投函と完了待ち。「1 往復ずつ」を gemini が、「どう待つか」を veo が 持ちます。
    • Submit(投函だけ)と Wait(名前を渡して待ちを再開)に分けて呼べます。実行時間に上限のある ジョブ基盤で、投函を済ませて一旦戻る使い方ができます。
    • 投函にはリトライが効き、1 回ごとのポーリングには効きません。 ポーリングの中でさらに バックオフを効かせると、設定した間隔とタイムアウトが意味を失うためです。一時的な失敗は WithMaxPollErrors の回数まで受け流します。
    • 入力系統は併用できません(image / video / references)。API が確実に拒否する組み合わせは 送信前に ErrInvalidVideoInput で弾きます。
  • callguard: AI 呼び出しへの発射間隔・1 回あたりの上限時間・重複排除(singleflight)。
    • クォータはプロジェクト単位で、操作の種類ごとではありません。 テキスト生成と画像生成で 別々に絞っても意味がないため、ワークフロー全体で Guard を 1 つ共有し、重複排除の単位 (Group)だけを呼び出しの種類ごとに分けます。
    • 戻り値は相乗りした全員で共有されます。 呼び出し側が書き換える可能性があるものは 複製してから返してください。

genai SDK を import するのは gemini だけです。 上位のパッケージはいずれも gemini の 1〜2 メソッドのインターフェースだけを受け取るため、テストでは SDK も GCP 認証も要りません。


📦 パッケージ構成 (Package Structure)

genai-kit/
├── gemini/      # Vertex AI クライアント。生成・リトライ・レスポンス抽出と、Veo の 1 往復
├── imagegen/    # gs:// 参照画像付きの画像生成(gemini.Generator を注入)
├── music/       # 楽曲構成のデータ型。依存を持たない葉
├── lyria/       # 歌詞 → レシピ → 音声の 3 段
├── veo/         # Veo 動画生成の投函と完了待ち
├── callguard/   # 発射間隔・上限時間・重複排除。依存を持たない葉
└── internal/
    └── poll/    #   veo が使うポーリングの骨格

インポートパスはいずれも github.com/shouni/genai-kit/ を前置します。


🚦 使い方 (Usage)

go get github.com/shouni/genai-kit
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/shouni/genai-kit/gemini"
)

func main() {
	ctx := context.Background()

	client, err := gemini.New(ctx, gemini.Config{
		ProjectID:  "your-google-cloud-project-id",
		LocationID: "asia-northeast1",
	})
	if err != nil {
		log.Fatal(err)
	}

	resp, err := client.GenerateText(ctx, "gemini-3.7-flash", "Goで短い俳句を書いて")
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(resp.Text)
}

ProjectIDLocationID は両方必須です。認証は Application Default Credentials に従うため、 Cloud Run などの環境では API キーをアプリケーションに持たせずに運用できます。ローカルでは gcloud auth application-default login で認証情報を用意してください。

添付付きの生成・画像生成・音楽生成・動画生成の例は pkg.go.dev にあります。 踏むと高くつく点も、それぞれの godoc に書いてあります — 参照画像の URI が gs:// のみで、HTTP 取得も File API 経由も持たないこと(imagegen パッケージ)、NegativePrompt の区切りが互換性の契約であること、 安全フィルタと人物生成に既定値が補われること(imagegen.Request)、発射間隔も重複排除も持たないので callguard でデコレートしてテキスト生成と Guard を共有すること(imagegen.Client)。


⚠️ Config.APIKey は暫定サポートです

指定すると Gemini API バックエンドへ切り替わりますが、これは最新の Lyria が Vertex AI で提供されて おらず、音楽生成だけが API キー経路でしか動かないための例外です。Vertex AI で使えるようになった 時点で削除します。新しい用途でこれを選ばないでください — 呼び出し側がどちらのバックエンドかを 意識せずに済むことが、このライブラリの設計上の狙いだからです。


🤝 依存関係 (Dependencies)


📜 ライセンス (License)

このプロジェクトは MIT License の下で公開されています。

Directories

Path Synopsis
Package callguard は、外部 AI API の呼び出しに「発射間隔」「1 回あたりの上限時間」 「同一内容の同時実行の重複排除」をまとめて掛けるためのプリミティブです。
Package callguard は、外部 AI API の呼び出しに「発射間隔」「1 回あたりの上限時間」 「同一内容の同時実行の重複排除」をまとめて掛けるためのプリミティブです。
Package gemini は、Vertex AI 向けの genai SDK をラップし、 リトライ設定とレスポンス抽出を備えたクライアントを提供します。
Package gemini は、Vertex AI 向けの genai SDK をラップし、 リトライ設定とレスポンス抽出を備えたクライアントを提供します。
Package imagegen は、Vertex AI の画像モデルによる画像生成を実行します。
Package imagegen は、Vertex AI の画像モデルによる画像生成を実行します。
internal
poll
Package poll は、状態が変わるまで一定間隔で問い合わせ続ける待ち方をまとめます。
Package poll は、状態が変わるまで一定間隔で問い合わせ続ける待ち方をまとめます。
Package lyria は、歌詞生成・楽曲設計・Lyria による音声生成を束ねる 音楽生成ワークフローを提供します。
Package lyria は、歌詞生成・楽曲設計・Lyria による音声生成を束ねる 音楽生成ワークフローを提供します。
Package music は、楽曲構成を表すデータ型(Recipe とその周辺)を提供します。
Package music は、楽曲構成を表すデータ型(Recipe とその周辺)を提供します。
Package veo は、Veo による動画生成を扱うクライアントを提供します。
Package veo は、Veo による動画生成を扱うクライアントを提供します。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL