以下のドキュメントを参照したところ、Chromeの129.0.6639.0以上であればSummarization APIも呼び出すことができる、とのことだったので先の記事で作成したアプリケーションにSummarization APIを呼び出すボタンを追加してみました。
Built-in AI Early Preview Program - The Summarization API
Prompt APIを呼び出す準備に加えて、Summarization APIを有効にする必要があります。
Summarization API for Gemini ProをEnabledに切り替え、Chromeを再起動します。
静的アプリケーション・ファイルのgemini-nano.jsにファンクションsendSummarizeを含めます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} |
グローバル・ページにあるインライン・ダイアログにボタンSUMMARIZEを作成します。動作のアクションは動的アクションで定義とし、ボタンをクリックした時に呼び出されるTRUEアクションでは、以下のJavaScriptコードを実行します。
sendSummarize(apex.items.P0_PROMPT, apex.items.P0_RESPONSE);
変更したアプリケーションでSummarization APIの呼び出しを行ってみます。
現時点では実用できるレベルとはいえませんが、ブラウザ組み込みのPrompt APIやSummarization APIは、Oracle APEXのアプリケーションに容易に組み込めそうなことは確認できました。
Prompt APIを呼び出すアプリのエクスポートは、Summarization APIの呼び出しを追加して置き換えています。
https://github.com/ujnak/apexapps/blob/master/exports/sample-gemini-nano.zip
完