2024年10月3日木曜日

Google ChromeのSummarization APIを呼び出してみる

以前の記事で、Google ChromeのPrompt APIを呼び出すサンプル・アプリを作成しています。[Google ChromeのPrompt APIをOracle APEXのアプリから呼び出してみる]

以下のドキュメントを参照したところ、Chromeの129.0.6639.0以上であればSummarization APIも呼び出すことができる、とのことだったので先の記事で作成したアプリケーションにSummarization APIを呼び出すボタンを追加してみました。

Built-in AI Early Preview Program - The Summarization API

Prompt APIを呼び出す準備に加えて、Summarization APIを有効にする必要があります。

Chromeよりchrome://flags/#summarization-api-for-gemini-nanoにアクセスします。

Summarization API for Gemini ProEnabledに切り替え、Chromeを再起動します。


静的アプリケーション・ファイルgemini-nano.jsにファンクションsendSummarizeを含めます。

var geminiSession;
/**
* Call Gemini Nano.
*/
async function sendPrompt(promptItem, responseItem) {
if (!geminiSession) {
console.log("no session created - create");
geminiSession = await ai.assistant.create();
};
const prompt = promptItem.getValue();
// one shot;
// const response = await geminiSession.prompt(prompt);
const stream = geminiSession.promptStreaming(prompt);
for await (const chunk of stream) {
responseItem.setValue(chunk);
}
// responseItem.setValue(response);
}
/**
* Summarization
*/
async function sendSummarize(promptItem, responseItem) {
const geminiSummarizer = await ai.summarizer.create();
const prompt = promptItem.getValue();
const response = await geminiSummarizer.summarize(prompt);
responseItem.setValue(response);
}
/**
* Reset session.
*/
function resetSession() {
geminiSession = null;
}
view raw gemini-nano.js hosted with ❤ by GitHub


グローバル・ページにあるインライン・ダイアログにボタンSUMMARIZEを作成します。動作アクション動的アクションで定義とし、ボタンをクリックした時に呼び出されるTRUEアクションでは、以下のJavaScriptコードを実行します。

sendSummarize(apex.items.P0_PROMPT, apex.items.P0_RESPONSE);


以上でボタンSummarizeが作成されました。

変更したアプリケーションでSummarization APIの呼び出しを行ってみます。


日本語も試してみましたが、Chromeの安定版129.0.6668.90では、要約といえるような出力は得られませんでした。

現時点では実用できるレベルとはいえませんが、ブラウザ組み込みのPrompt APIやSummarization APIは、Oracle APEXのアプリケーションに容易に組み込めそうなことは確認できました。

Prompt APIを呼び出すアプリのエクスポートは、Summarization APIの呼び出しを追加して置き換えています。
https://github.com/ujnak/apexapps/blob/master/exports/sample-gemini-nano.zip