<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archives des vector - dbi Blog</title>
	<atom:link href="https://www.dbi-services.com/blog/tag/vector/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dbi-services.com/blog/tag/vector/</link>
	<description></description>
	<lastBuildDate>Tue, 06 Oct 2026 05:40:54 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/cropped-favicon_512x512px-min-32x32.png</url>
	<title>Archives des vector - dbi Blog</title>
	<link>https://www.dbi-services.com/blog/tag/vector/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>GoldenGate AI Service bug confirmed in the Maximum Input Characters setting</title>
		<link>https://www.dbi-services.com/blog/goldengate-ai-service-bug-confirmed-in-the-maximum-input-characters-setting/</link>
					<comments>https://www.dbi-services.com/blog/goldengate-ai-service-bug-confirmed-in-the-maximum-input-characters-setting/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Tue, 06 Oct 2026 05:25:17 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[ai service]]></category>
		<category><![CDATA[embeddings]]></category>
		<category><![CDATA[gemini]]></category>
		<category><![CDATA[maximum]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[vector]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=47756</guid>

					<description><![CDATA[<p>In a previous blog, I noted that there might be a bug with the Maximum Input Characters setting in GoldenGate 26ai AI Service. The bug was confirmed by Oracle, so let’s see what it is exactly. Bug found in GoldenGate 26ai AI Service Maximum Input Characters is a setting in the AI Service. You can [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-ai-service-bug-confirmed-in-the-maximum-input-characters-setting/">GoldenGate AI Service bug confirmed in the Maximum Input Characters setting</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In a <a href="https://www.dbi-services.com/blog/goldengate-26ai-ai-service-full-setup-with-a-free-gemini-key/" target="_blank" rel="noopener noreferrer">previous blog</a>, I noted that there might be a bug with the <code>Maximum Input Characters</code> setting in GoldenGate 26ai AI Service. The bug was confirmed by Oracle, so let’s see what it is exactly.</p>



<h2 id="bug-found-in-goldengate-26ai-ai-service" class="wp-block-heading">Bug found in GoldenGate 26ai AI Service</h2>



<p class="wp-block-paragraph"><code>Maximum Input Characters</code> is a setting in the AI Service. You can set it when registering a new model in the web UI.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="700" height="580" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/001_goldengate-26ai-ai-service-max-input-add-model-dialog.png" alt="" class="wp-image-47758" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/001_goldengate-26ai-ai-service-max-input-add-model-dialog.png 700w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/001_goldengate-26ai-ai-service-max-input-add-model-dialog-300x249.png 300w" sizes="(max-width: 700px) 100vw, 700px" /></figure>
</div>


<p class="wp-block-paragraph">In the <a href="https://docs.oracle.com/en/database/goldengate/core/26/coredoc/sm-ads-ai-providers-and-models.html" target="_blank" rel="noopener noreferrer">Oracle documentation</a>, the parameter is described as a cap on how much text is sent to the embedding model before it leaves GoldenGate. This ensures that an <code>@AISERVICE</code> mapping cannot send more than intended, and does not reach a token limit, or increase your consumption.</p>



<p class="wp-block-paragraph">If this setting worked, a model with <code>Maximum Input Characters</code> set to <code>1</code> should truncate any input to a single character before calling the AI Service. This is not what I found when testing it.</p>



<h2 id="proof-of-the-bug" class="wp-block-heading">Proof of the bug</h2>



<h3 id="model-registration" class="wp-block-heading">Model registration</h3>



<p class="wp-block-paragraph">I registered two AI Service models against the same Gemini provider and the same remote model (<code>gemini-embedding-001</code>). They differ only in <code>Maximum Input Characters</code>: one set to <code>1000</code>, the other to <code>1</code>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="900" height="620" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/002_goldengate-26ai-ai-service-max-input-model-max1000.png" alt="" class="wp-image-47759" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/002_goldengate-26ai-ai-service-max-input-model-max1000.png 900w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/002_goldengate-26ai-ai-service-max-input-model-max1000-300x207.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/002_goldengate-26ai-ai-service-max-input-model-max1000-768x529.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="900" height="620" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/003_goldengate-26ai-ai-service-max-input-model-max1.png" alt="" class="wp-image-47760" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/003_goldengate-26ai-ai-service-max-input-model-max1.png 900w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/003_goldengate-26ai-ai-service-max-input-model-max1-768x529.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/10/003_goldengate-26ai-ai-service-max-input-model-max1-300x207.png 300w" sizes="(max-width: 900px) 100vw, 900px" /></figure>
</div>


<p class="wp-block-paragraph">If I query both models with the REST API, I can see the settings properly saved, in <code>limits.maxInputCharacters</code>:</p>



<pre class="wp-block-code"><code>{
    "id": "gemini_embed_max1000",
    "name": "gemini-embedding-max1000",
    "type": "remote",
    "enabled": true,
    "loaded": false,
    "description": "Model with 1000 character limit",
    "capabilities": &#091;
        "embed"
    ],
    "providerId": "gemini",
    "remoteModelName": "gemini-embedding-001",
    "parameters": {},
    "limits": {
        "maxInputCharacters": 1000
    }
}</code></pre>



<pre class="wp-block-code"><code>{
    "id": "gemini_embed_max1",
    "name": "gemini-embedding-max1",
    "type": "remote",
    "enabled": true,
    "loaded": false,
    "description": "Model with 1 character limit",
    "capabilities": &#091;
        "embed"
    ],
    "providerId": "gemini",
    "remoteModelName": "gemini-embedding-001",
    "parameters": {},
    "limits": {
        "maxInputCharacters": 1
    }
}</code></pre>



<h3 id="replicat-used-in-the-test" class="wp-block-heading">Replicat used in the test</h3>



<p class="wp-block-paragraph">I built an <code>EXTAI</code>/<code>REPAI</code> pair between <code>PDB1.APP_PDB1.PRODUCTS</code> on the source and <code>PDB26.APP_PDB26.PRODUCTS</code> on the target. Its <code>COLMAP</code> maps the <code>description</code> column through three separate <code>@AISERVICE</code> calls into three different <code>VECTOR(3072, FLOAT32)</code> columns:</p>



<pre class="wp-block-code"><code>MAP PDB1.APP_PDB1.PRODUCTS, TARGET APP_PDB26.PRODUCTS,
COLMAP (
    USEDEFAULTS,
    desc_vector_max1000 = @AISERVICE(embed, 'gemini_embed_max1000', description),
    desc_vector_max1000_run2 = @AISERVICE(embed, 'gemini_embed_max1000', description),
    desc_vector_max1 = @AISERVICE(embed, 'gemini_embed_max1', description));</code></pre>



<p class="wp-block-paragraph">The first two calls use the same model (<code>gemini_embed_max1000</code>). This is to show the baseline argument that the same input, embedded with the same model twice, produce the same vector. The third call uses the 1 character model, to test the bug.</p>



<h2 id="baseline-and-embedding-noise" class="wp-block-heading">Baseline and embedding noise</h2>



<p class="wp-block-paragraph">The truncation is only relevant if identical inputs reliably produce identical output. Before comparing vectors across models, I first confirmed the embedding had no noise, by inserting the same 100 character <code>description</code> into two source rows and let both flow through the pipeline:</p>



<pre class="wp-block-code"><code>INSERT INTO app_pdb1.products (id, name, description) VALUES (101, 'AI Service Max Input Chars Test Row 1', 'GoldenGate 26ai AI Service test row for comparing embeddings across the max1000 and max1 test models');
INSERT INTO app_pdb1.products (id, name, description) VALUES (102, 'AI Service Max Input Chars Test Row 2', 'GoldenGate 26ai AI Service test row for comparing embeddings across the max1000 and max1 test models');
COMMIT;</code></pre>



<p class="wp-block-paragraph">Then, I compared the <code>gemini_embed_max1000</code> vector between the two rows. I also compared the two separate <code>@AISERVICE</code> calls to the same model within row 101 itself. Both come back with a cosine distance of <code>0</code>:</p>



<pre class="wp-block-code"><code>SQL&gt; SELECT VECTOR_DISTANCE(a.desc_vector_max1000, b.desc_vector_max1000, COSINE) dist_101_vs_102_same_input
FROM app_pdb26.products a, app_pdb26.products b
WHERE a.id = 101
AND b.id = 102;

DIST_101_VS_102_SAME_INPUT
--------------------------
                         0
</code></pre>



<p class="wp-block-paragraph">The conclusion is that <code>gemini-embedding-001</code> is deterministic for identical input. Now, if the <code>max1</code> vector is identical to the <code>max1000</code> vector, we can rule out embedding noise.</p>



<h2 id="does-the-1-character-limit-change-anything" class="wp-block-heading">Does the 1 character limit change anything?</h2>



<p class="wp-block-paragraph">With the same transaction, let’s look at the two different <code>@AISERVICE</code> calls, against a model capped at 1000 characters and one capped at 1:</p>



<pre class="wp-block-code"><code>SQL&gt; SELECT id, VECTOR_DISTANCE(desc_vector_max1000, desc_vector_max1, COSINE) dist_max1000_vs_max1, VECTOR_DISTANCE(desc_vector_max1000, desc_vector_max1000_run2, COSINE) dist_max1000_vs_rerun
FROM app_pdb26.products
WHERE id IN (101, 102);

ID  DIST_MAX1000_VS_MAX1 DIST_MAX1000_VS_RERUN
--- -------------------- ---------------------
101                    0                     0
102                    0                     0</code></pre>



<p class="wp-block-paragraph">On both models, the distance between the resulting vectors is zero. If the <code>Maximum Input Characters</code> were enforced, the <strong>vectors should be different</strong> between both models. This proves that the <code>Maximum Input Characters</code> setting saved as <code>1</code> had no effect on what was sent to Gemini.</p>



<p class="wp-block-paragraph">GoldenGate even has a <a href="https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/" target="_blank" rel="noopener noreferrer">documented warning</a> for a situation where the input would exceed the limit. <code>OGG-30677</code> is defined as <code>@AISERVICE source column {0} contains {1} characters, exceeding model {2}'s maximum input limit of {3} characters</code>. But in my case, the warning never appeared in the log files.</p>



<h2 id="what-can-break" class="wp-block-heading">What can break?</h2>



<p class="wp-block-paragraph">I added a fourth <code>@AISERVICE</code> call to the same replicat, mapping a <code>CLOB</code> column (<code>big_description</code>) through the 1000 character model. I then tried pushing progressively larger inputs.</p>



<p class="wp-block-paragraph">With 100000 characters, the <code>countTokens</code> endpoint reports this input at 23679 tokens, way more than the documented <code>inputTokenLimit</code> of <code>gemini-embedding-001</code>. It applied without any error and produced a real 3072 dimension vector, distinct from every other vector in this blog.</p>



<pre class="wp-block-code"><code>SQL&gt; SELECT id, VECTOR_DIMS(desc_vector_bigtest) dims
FROM app_pdb26.products
WHERE id = 103;

ID  DIMS
--- ----
103 3072</code></pre>



<p class="wp-block-paragraph">Here, we can see that even the documented token limit of your provider might not stop the AI Service to work.</p>



<h3 id="reaching-quota-limit" class="wp-block-heading">Reaching quota limit</h3>



<p class="wp-block-paragraph">On top of the per-request token limit, depending on your billing settings, you might have a usage quota on the API key. A request can be rejected by Gemini, and this error is raised in <code>AIService.log</code>:</p>



<pre class="wp-block-code"><code>{
    "error": {
        "code": 429,
        "message": "You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit. ",
        "status": "RESOURCE_EXHAUSTED"
    }
}</code></pre>



<p class="wp-block-paragraph">And in this case, the replicat abends with the following error:</p>



<pre class="wp-block-code"><code>2026-09-27 08:22:21  WARNING OGG-30679  Response from EMBED endpoint using model gemini_embed_max1000 returned error: code REMOTE_INFERENCE_FAILED, message 'HTTP 429 - Too Many Requests: {
  "error": {
    "code": 429,
    "message": "You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit. ",
    "status": "RESOURCE_EXHAUSTED"
  }
}
'.

2026-09-27 08:22:21  WARNING OGG-01431  Canceled grouped transaction on PDB26.APP_PDB26.PRODUCTS, Mapping error.
2026-09-27 08:22:27  ERROR   OGG-01668  PROCESS ABENDING.</code></pre>



<h2 id="summary" class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph"><code>Maximum Input Characters</code> does not protect a replicat from an oversized <code>@AISERVICE</code> mapping. Because of this, the only real limit to your embeddings in GoldenGate is a usage quota. This can affect your replication, whether you rely on the setting for functional truncation or to lower your costs. Until the bug is fixed, be careful when using the AI Service!</p>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-ai-service-bug-confirmed-in-the-maximum-input-characters-setting/">GoldenGate AI Service bug confirmed in the Maximum Input Characters setting</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/goldengate-ai-service-bug-confirmed-in-the-maximum-input-characters-setting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GoldenGate 26ai AI Service: Full setup with a free Gemini key</title>
		<link>https://www.dbi-services.com/blog/goldengate-26ai-ai-service-full-setup-with-a-free-gemini-key/</link>
					<comments>https://www.dbi-services.com/blog/goldengate-26ai-ai-service-full-setup-with-a-free-gemini-key/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Thu, 24 Sep 2026 06:17:15 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[ai service]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[embeddings]]></category>
		<category><![CDATA[gemini]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restapi]]></category>
		<category><![CDATA[vector]]></category>
		<category><![CDATA[web ui]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=47089</guid>

					<description><![CDATA[<p>I sometimes get asked how the new AI Service of GoldenGate 26ai works, and the best way to show it is to see it in action. In this blog, I will set up the AI Service with Google Gemini, using a free API key in Google AI Studio. Most of what will be said here [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-26ai-ai-service-full-setup-with-a-free-gemini-key/">GoldenGate 26ai AI Service: Full setup with a free Gemini key</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I sometimes get asked how the new <strong>AI Service</strong> of GoldenGate 26ai works, and the best way to show it is to see it in action. In this blog, I will <strong>set up the AI Service with Google Gemini</strong>, using a free API key in Google AI Studio. Most of what will be said here can be applied to the other providers supported by GoldenGate 26ai.</p>



<h2 id="new-ai-service-in-goldengate-26ai" class="wp-block-heading">New AI Service in GoldenGate 26ai</h2>



<p class="wp-block-paragraph">The AI Service is a <strong>Service Manager-level microservice</strong>, not a deployment-level one. Extract, replicat, Distribution and Receiver services belong to a deployment. The AI Service belongs to the Service Manager and is shared by every deployment on the host.</p>



<p class="wp-block-paragraph">If you already use GoldenGate 26ai, you probably know that the AI Service has a separate process:</p>



<pre class="wp-block-code"><code>&#091;oracle@vmogg bin]$ ps -ef|grep AIService
oracle     60905   60721  0 20:50 ?        00:00:00 /u01/app/oracle/product/ogg_23.26.3.0.3/bin/AIService</code></pre>



<p class="wp-block-paragraph">The AI Service holds two kinds of objects:</p>



<ul class="wp-block-list">
<li><strong>Providers</strong> (one per external AI service): a base URL and authentication details.</li>



<li><strong>Models</strong> (one per embedding model you want to call): attached to a provider.</li>
</ul>



<p class="wp-block-paragraph"><strong>None of this is stored in a deployment</strong>. This means that when configuring the AI Service, you only need to configure it once for all your deployments. It also means that every deployment can access every AI model you register.</p>



<p class="wp-block-paragraph">Four providers are supported with GoldenGate 26ai: <strong>Google Gemini, OpenAI, OCI Generative AI and Voyage AI</strong>. They can all do the same thing with GoldenGate. On top of this, you can also configure local models.</p>



<h2 id="getting-a-free-gemini-api-key" class="wp-block-heading">Getting a free Gemini API key</h2>



<p class="wp-block-paragraph">The first step when setting up a Gemini AI Service in GoldenGate is to retrieve the Gemini API key. You can create one for free in <strong>Google AI Studio</strong>, at <a href="https://aistudio.google.com/apikey" target="_blank" rel="noopener noreferrer">aistudio.google.com/apikey</a>:</p>



<ul class="wp-block-list">
<li>Sign in with a Google account and open the API keys page.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="212" height="443" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/001_gemini-ai-service-aistudio-nav-api-keys.png" alt="" class="wp-image-47091" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/001_gemini-ai-service-aistudio-nav-api-keys.png 212w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/001_gemini-ai-service-aistudio-nav-api-keys-144x300.png 144w" sizes="auto, (max-width: 212px) 100vw, 212px" /></figure>
</div>


<ul class="wp-block-list">
<li>Click on <strong>Create API key</strong>.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="487" height="261" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/002_gemini-ai-service-aistudio-create-a-key-dialog.png" alt="" class="wp-image-47092" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/002_gemini-ai-service-aistudio-create-a-key-dialog.png 487w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/002_gemini-ai-service-aistudio-create-a-key-dialog-300x161.png 300w" sizes="auto, (max-width: 487px) 100vw, 487px" /></figure>
</div>


<ul class="wp-block-list">
<li>Copy the key.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1426" height="261" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/003_gemini-ai-service-aistudio-api-keys-list.png" alt="" class="wp-image-47096" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/003_gemini-ai-service-aistudio-api-keys-list.png 1426w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/003_gemini-ai-service-aistudio-api-keys-list-1024x187.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/003_gemini-ai-service-aistudio-api-keys-list-765x140.png 765w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/003_gemini-ai-service-aistudio-api-keys-list-300x55.png 300w" sizes="auto, (max-width: 1426px) 100vw, 1426px" /></figure>
</div>


<p class="wp-block-paragraph">There are two things you should know before using this key for GoldenGate.</p>



<ul class="wp-block-list">
<li><strong>Every Gemini API key is associated with a Google Cloud project.</strong> If you have multiple projects, make sure to select a project where the Gemini API is enabled (see below):</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="733" height="566" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/004_gemini-ai-service-google-cloud-api-enabled-dashboard-1.png" alt="" class="wp-image-47095" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/004_gemini-ai-service-google-cloud-api-enabled-dashboard-1.png 733w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/004_gemini-ai-service-google-cloud-api-enabled-dashboard-1-300x232.png 300w" sizes="auto, (max-width: 733px) 100vw, 733px" /></figure>
</div>


<ul class="wp-block-list">
<li><strong>Check the rate limits at <a href="https://aistudio.google.com/rate-limit" target="_blank" rel="noopener noreferrer">aistudio.google.com/rate-limit</a></strong> before sizing anything. Requests per minute, tokens per minute or requests per day are all important metrics that you should keep an eye on.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="849" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/005_gemini-ai-service-aistudio-rate-limit-page-1024x849.png" alt="" class="wp-image-47097" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/005_gemini-ai-service-aistudio-rate-limit-page-1024x849.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/005_gemini-ai-service-aistudio-rate-limit-page-300x249.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/005_gemini-ai-service-aistudio-rate-limit-page-767x636.png 767w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/005_gemini-ai-service-aistudio-rate-limit-page.png 1437w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">On the free tier, the daily request will most likely be the limited factor. But if the data you are embedding is large, you will be affected by the tokens limit.</p>



<p class="wp-block-paragraph">For a lab, the default project and the key you just created are enough. For anything else, create the key in a dedicated Google Cloud project so quota and billing are isolated. A key created through AI Studio is already restricted to the Gemini API by default, so there is nothing extra to configure there.</p>



<h2 id="goldengate-prerequisites-before-using-the-ai-service" class="wp-block-heading">GoldenGate prerequisites before using the AI Service</h2>



<ul class="wp-block-list">
<li><strong>Outbound connectivity</strong>: An HTTP proxy should be used for an AI service outside your network. If your GoldenGate host reaches the Internet through one, set <code>HTTPS_PROXY</code> from the Service Manager <strong>Configuration</strong> page (in <em><strong>Deployments &gt; ServiceManager &gt; Configuration</strong></em>), as an Environment Variable.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="168" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/006_goldengate-26ai-ai-service-https-proxy-config-1024x168.png" alt="" class="wp-image-47098" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/006_goldengate-26ai-ai-service-https-proxy-config-1024x168.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/006_goldengate-26ai-ai-service-https-proxy-config-764x125.png 764w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/006_goldengate-26ai-ai-service-https-proxy-config-300x49.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/006_goldengate-26ai-ai-service-https-proxy-config.png 1100w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li><strong>CA certificates</strong>: Oracle <strong>requires the use of CA certificates when connecting to any AI service provider</strong>, so the provider’s TLS chain has to be trusted by the Service Manager. Pull the chain with the following command:</li>
</ul>



<pre class="wp-block-code"><code>openssl s_client -showcerts -connect generativelanguage.googleapis.com:443</code></pre>



<p class="wp-block-paragraph">Then, add the CA certificates from the Service Manager certificate management page. The procedure is described in a blog about <a href="https://www.dbi-services.com/blog/ogg-30007-how-to-register-certificates-in-goldengate/" target="_blank" rel="noopener noreferrer">registering certificate in GoldenGate from the web UI</a>. If you skip this step, you will receive the following error when trying to use the AI Service from a replicat:</p>



<pre class="wp-block-code"><code>2026-09-12T08:20:54.578+0000  WARNING OGG-30679  Oracle GoldenGate Delivery for Oracle, REPAI.prm:  Response from EMBED endpoint using model gemini_embed returned error: code REMOTE_INFERENCE_FAILED, message 'SSL connection unexpectedly closed'.</code></pre>



<h2 id="registering-the-provider" class="wp-block-heading">Registering the provider</h2>



<p class="wp-block-paragraph">Again, everything happens in the <strong>Service Manager</strong> web UI.</p>



<ul class="wp-block-list">
<li>Log in to the Service Manager and open the <strong>AI Service</strong> page.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="277" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/007_goldengate-26ai-ai-service-nav-left-panel-1024x277.png" alt="" class="wp-image-47099" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/007_goldengate-26ai-ai-service-nav-left-panel-1024x277.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/007_goldengate-26ai-ai-service-nav-left-panel-300x81.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/007_goldengate-26ai-ai-service-nav-left-panel-768x208.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/007_goldengate-26ai-ai-service-nav-left-panel.png 1440w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li>In the <strong>Providers</strong> section, click <strong>+</strong> and pick the provider type. For this blog, we will use <code>Gemini</code>. Fill in the form and submit.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="720" height="400" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/008_goldengate-26ai-ai-service-add-provider-gemini-form.png" alt="" class="wp-image-47100" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/008_goldengate-26ai-ai-service-add-provider-gemini-form.png 720w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/008_goldengate-26ai-ai-service-add-provider-gemini-form-300x167.png 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="261" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/009_goldengate-26ai-ai-service-provider-added-1024x261.png" alt="" class="wp-image-47101" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/009_goldengate-26ai-ai-service-provider-added-1024x261.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/009_goldengate-26ai-ai-service-provider-added-766x195.png 766w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/009_goldengate-26ai-ai-service-provider-added-300x76.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/009_goldengate-26ai-ai-service-provider-added.png 1100w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">For Gemini, you just need a URL and a key:</p>



<figure class="wp-block-table"><table><thead><tr><th>Field</th><th>Value</th></tr></thead><tbody><tr><td>Provider ID</td><td><code>gemini</code></td></tr><tr><td>Provider Name</td><td><code>GeminiAiStudio</code></td></tr><tr><td>Base URL</td><td><code>https://generativelanguage.googleapis.com/v1beta</code></td></tr><tr><td>API Key</td><td>the key from Google AI Studio</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>Keep the base URL</strong>, ending with <code>/v1beta</code>. Gemini embedding calls are a <code>POST</code> to <code>/v1beta/models/&lt;model&gt;:embedContent</code>, so the model-specific part of the path belongs to the model definition, not the provider.</p>



<h2 id="registering-the-model" class="wp-block-heading">Registering the model</h2>



<p class="wp-block-paragraph">Still on the same <strong>AI Service</strong> page, in the <strong>Models</strong> section, click <strong>+</strong>, fill in the form and submit:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="720" height="560" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/010_goldengate-26ai-ai-service-add-model-gemini-form.png" alt="" class="wp-image-47102" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/010_goldengate-26ai-ai-service-add-model-gemini-form.png 720w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/010_goldengate-26ai-ai-service-add-model-gemini-form-300x233.png 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="146" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/011_goldengate-26ai-ai-service-model-added-1024x146.png" alt="" class="wp-image-47103" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/011_goldengate-26ai-ai-service-model-added-1024x146.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/011_goldengate-26ai-ai-service-model-added-300x43.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/011_goldengate-26ai-ai-service-model-added-764x109.png 764w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/09/011_goldengate-26ai-ai-service-model-added.png 1100w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table"><table><thead><tr><th>Field</th><th>Value</th></tr></thead><tbody><tr><td>Model ID</td><td><code>gemini_embed</code></td></tr><tr><td>Model Name</td><td><code>gemini-embedding</code></td></tr><tr><td>Remote Model Name</td><td><code>gemini-embedding-001</code></td></tr><tr><td>Provider ID</td><td><code>gemini</code></td></tr><tr><td>Capabilities</td><td><code>Embedding</code></td></tr><tr><td>Enabled</td><td>on</td></tr><tr><td>Maximum Input Characters</td><td>see below</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Here is the meaning of each name given above:</p>



<ul class="wp-block-list">
<li><strong>Remote Model Name</strong> is the name known by the provider.</li>



<li><strong>Model ID</strong> is what will be used in the replicat when using <code>@AISERVICE</code>.</li>



<li><strong>Model Name</strong> is just there for you to organize your models.</li>
</ul>



<p class="wp-block-paragraph"><code>gemini-embedding-001</code> is the current general embedding model from Google. It defaults to <strong>3072 dimensions</strong> and accepts anything from 128 to 3072 through the request’s <code>output_dimensionality</code>, with 768, 1536 and 3072 as the recommended values. Querying the model directly (<code>GET /v1beta/models/gemini-embedding-001</code>) gives its input limit:</p>



<pre class="wp-block-code"><code>{
    "name": "models/gemini-embedding-001",
    "inputTokenLimit": 2048,
    "outputTokenLimit": 1,
    "supportedGenerationMethods": &#091;
        "embedContent",
        "countTextTokens",
        "countTokens",
        "asyncBatchEmbedContent"
    ]
}</code></pre>



<p class="wp-block-paragraph">One note on <strong>Maximum Input Characters</strong>: when I write these lines (September 2026, version <code>23.26.3</code>), I still have an ongoing support request with Oracle about this parameter. The description of the parameter is straightforward, but the feature does not work. No matter the size of the input, everything will be passed to the AI Service, and to the AI model. This means that you could very quickly reach token limits if you don’t pay attention. Until this bug is resolved, do not expect this feature to work as intended.</p>



<p class="wp-block-paragraph">Once a provider is enabled, the <strong>AI Service appears in the Services list</strong> on the Service Manager home page, the models become visible under the <strong>AI Service</strong> entry of the Microservices portal navigation, and they show up on a replicat’s <strong>Parameters</strong> page.</p>



<h2 id="calling-gemini-from-a-goldengate-replicat" class="wp-block-heading">Calling Gemini from a GoldenGate replicat</h2>



<p class="wp-block-paragraph">Here is the syntax for the <code>AISERVICE</code>:</p>



<pre class="wp-block-code"><code>@AISERVICE(embed, &lt;model_id&gt;, &lt;column_name&gt;)</code></pre>



<p class="wp-block-paragraph">Three arguments are needed:</p>



<ul class="wp-block-list">
<li>The capability, <code>embed</code>, is the only option available for now.</li>



<li>The <strong>Model ID</strong>, as registered in the AI Service (not the Model Name!)</li>



<li><strong>One source column</strong>. It cannot be a concatenation of columns. If you try to pass <code>first_column || ' ' || second_column</code> through the AI Service, you will get this error:</li>
</ul>



<pre class="wp-block-code"><code>2026-09-12 08:00:12  WARNING OGG-30081  Error in COLMAP clause. Invalid column mapping function or argument found in the COLMAP clause..
..._embed', name || ' - ' || desc...
                 ^.
2026-09-12 08:00:12  ERROR   OGG-00919  Error in COLMAP clause.</code></pre>



<p class="wp-block-paragraph">Here is an example of a replicat parameter file using <code>AISERVICE</code>:</p>



<pre class="wp-block-code"><code>REPLICAT repai
USERIDALIAS target_pdb26 DOMAIN OracleGoldenGate
DDL INCLUDE MAPPED
MAP PDB1.APP_PDB1.products, TARGET PDB26.APP_PDB26.products,
COLMAP (
    USEDEFAULTS,
    desc_vector = @AISERVICE(embed, 'gemini_embed', description));</code></pre>



<h2 id="the-target-column-has-to-exist-first" class="wp-block-heading">The target column has to exist first</h2>



<p class="wp-block-paragraph">If you edit an existing replicat file to add an embedding, you must create the column on the target first. The AI Service will not create it. The column should be an Oracle <code>VECTOR</code>, and its dimension count has to match what the model returns.</p>



<pre class="wp-block-code"><code>ALTER TABLE app_pdb26.products
ADD (desc_vector VECTOR(3072, FLOAT32));</code></pre>



<p class="wp-block-paragraph">Using the default output of <code>gemini-embedding-001</code> gives <code>VECTOR(3072, FLOAT32)</code>. The dimension shouldn’t be changed later.</p>



<h2 id="ogg-30679-when-the-key-is-wrong" class="wp-block-heading"><code>OGG-30679</code> when the key is wrong</h2>



<p class="wp-block-paragraph">Registering a provider or a model with a bad key produces no error at all, since nothing calls the provider at that point. Starting a replicat does not call it either, if there is no data waiting to be applied. It only happens <strong>when an <code>@AISERVICE</code> mapping processes a row.</strong></p>



<p class="wp-block-paragraph">An invalid key comes back as <strong>HTTP 400, not 401</strong>, with <code>API_KEY_INVALID</code> in the details. This is the full record from <code>ggserr.log</code>:</p>



<pre class="wp-block-code"><code>2026-09-12T09:26:59.205+0000  WARNING OGG-30679  Oracle GoldenGate Delivery for Oracle, REPAI.prm:  Response from EMBED endpoint using model gemini_badkey_model returned error: code REMOTE_INFERENCE_FAILED, message 'HTTP 400 - Bad Request: {
    "error": {
        "code": 400,
        "message": "API key not valid. Please pass a valid API key.",
        "status": "INVALID_ARGUMENT",
        "details": &#091;
        {
            "@type": "type.googleapis.com/google.rpc.ErrorInfo",
            "reason": "API_KEY_INVALID",
            "domain": "googleapis.com",
            "metadata": {
            "service": "generativelanguage.googleapis.com"
            }
        },
        {
            "@type": "type.googleapis.com/google.rpc.LocalizedMessage",
            "locale": "en-US",
            "message": "API key not valid. Please pass a valid API key."
        }
        ]
    }
    }
    '.</code></pre>



<p class="wp-block-paragraph">An <code>OGG-30679</code> error also happens when a key is in a Google Cloud project which has not enabled the Generative Language API. This returns <code>PERMISSION_DENIED</code> (403). Here is the full <code>ggserr.log</code> record:</p>



<pre class="wp-block-code"><code>2026-09-12T09:27:16.666+0000  WARNING OGG-30679  Oracle GoldenGate Delivery for Oracle, REPAI.prm:  Response from EMBED endpoint using model gemini_noaccess_model returned error: code REMOTE_INFERENCE_FAILED, message 'HTTP 403 - Forbidden: {
    "error": {
        "code": 403,
        "message": "Gemini API has not been used in project 293237196494 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/generativelanguage.googleapis.com/overview?project=293237196494 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
        "status": "PERMISSION_DENIED",
        "details": &#091;
        {
            "@type": "type.googleapis.com/google.rpc.ErrorInfo",
            "reason": "SERVICE_DISABLED",
            "domain": "googleapis.com",
            "metadata": {
            "serviceTitle": "Gemini API",
            "consumer": "projects/293237196494",
            "containerInfo": "293237196494",
            "activationUrl": "https://console.developers.google.com/apis/api/generativelanguage.googleapis.com/overview?project=293237196494",
            "service": "generativelanguage.googleapis.com"
            }
        },
        {
            "@type": "type.googleapis.com/google.rpc.LocalizedMessage",
            "locale": "en-US",
            "message": "Gemini API has not been used in project 293237196494 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/generativelanguage.googleapis.com/overview?project=293237196494 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry."
        }
        ]
    }
    }
    '.</code></pre>



<p class="wp-block-paragraph">When registering a model/provider, you will not get an error if it is not correctly configured. Running a replicat with an <code>@AISERVICE</code> mapping is the only test which can validate your model registration.</p>



<h2 id="replication-example" class="wp-block-heading">Replication example</h2>



<p class="wp-block-paragraph">Here is an <code>EXTAI</code>/<code>REPAI</code> replication example, inserting into <code>APP_PDB26.products_src</code> on the source:</p>



<pre class="wp-block-code"><code>INSERT INTO app_pdb26.products_src (id, name, description)
VALUES (9701, 'GoldenGate 26ai Live Demo Mug', 'A ceramic mug for GoldenGate engineers, printed with the AI Service architecture diagram.');
COMMIT;</code></pre>



<p class="wp-block-paragraph">On the target, a <code>VECTOR(3072, FLOAT32)</code> column is populated by Gemini:</p>



<pre class="wp-block-code"><code>SQL&gt; SELECT id, name, VECTOR_DIMS(desc_vector) AS dims
FROM app_pdb26.products
WHERE id = 9701;

        ID NAME                            DIMS
---------- ------------------------------ -----
      9701 GoldenGate 26ai Live Demo Mug   3072

# Vector content
&#091;-1.34540349E-002,1.69963725E-002,2.44766194E-002,-6.56813234E-002,-5.2943374E-003,-2.17550527E-003,1.45018185E-002,-1.24750044E-002,1.46362577E-002,...</code></pre>



<p class="wp-block-paragraph">The vector has 3072 dimensions, matching the default output of <code>gemini-embedding-001</code>.</p>



<h2 id="to-summarize" class="wp-block-heading">To summarize</h2>



<p class="wp-block-paragraph">To set up Gemini in GoldenGate 26ai, you need to:</p>



<ol class="wp-block-list">
<li>Create the API key at <a href="https://aistudio.google.com/apikey" target="_blank" rel="noopener noreferrer">aistudio.google.com/apikey</a>. The project must have the Gemini API enabled.</li>



<li>Set <code>HTTPS_PROXY</code> for the Service Manager if the host goes out through a proxy, and register the provider’s CA chain in the Service Manager.</li>



<li>Add the provider in <strong>AI Service</strong>, with the base URL <code>https://generativelanguage.googleapis.com/v1beta</code> and the API key.</li>



<li>Add the model, with <code>gemini-embedding-001</code> as the <em>Remote Model Name</em></li>



<li>Add the <code>VECTOR</code> column to the target table <strong>before</strong> altering the replicat parameter file, sized based on the dimension of the model output.</li>



<li>Add one <code>COLMAP</code> line, <code>USEDEFAULTS</code> and <code>col = @AISERVICE(embed, &lt;model_id&gt;, &lt;column_name&gt;)</code>, with a single column as the third argument.</li>



<li>Apply one row and check the target column. Until this happens, you cannot be sure that your replicat will behave as intended.</li>
</ol>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-26ai-ai-service-full-setup-with-a-free-gemini-key/">GoldenGate 26ai AI Service: Full setup with a free Gemini key</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/goldengate-26ai-ai-service-full-setup-with-a-free-gemini-key/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: www.dbi-services.com @ 2026-10-16 19:19:47 by W3 Total Cache
-->