llm-catalog-archive

Change

e156b78

e156b78db11c2594b86f356d3f2c1ec0016497da · commit on GitHub

gcloud-blog-feed: changed (542530 bytes, HTTP 200)

raw/gcloud-blog-feed/response.xml modified

Lines added
+160
Lines removed
-276
Stored bytes at this commit
542,530
Timestamp
observed
Raw artifact at this commit
raw/gcloud-blog-feed/response.xml
Recorded headers
observed_at2026-09-09T04:42:50.150Z
origin_datenull
status200
final URLhttps://cloudblog.withgoogle.com/products/ai-machine-learning/rss/
etagnull
last-modifiednull
dateWed, 09 Sep 2026 04:42:50 GMT
agenull
cache-controlmax-age=600
cf-cache-statusnull
content-encodinggzip
content-lengthnull
@@@ -1,5 +1,137 @@
<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>AI &amp; Machine Learning</title><link>https://cloud.google.com/blog/products/a
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>AI &amp; Machine Learning</title><link>https://cloud.google.com/blog/products/a
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Buffmee is an interactive AI service built on the concept of 'AI that helps you grow.' By grounding responses in over 100 sources — including books, magazines, and web media — it helps users search for information, summarize key points, and expl
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;As part of their app launch, the engineer team needed to ground a massive variety of proprietary content, including books and magazines. However, they struggled with latency issues that prevented them from meeting their target response times, an
+&lt;div class="block-image_full_width"&gt;
+
+
+
+
+
+
+
+ &lt;div class="article-module h-c-page"&gt;
+ &lt;div class="h-c-grid"&gt;
+
+
+ &lt;figure class="article-image--large
+
+
+ h-c-grid__col
+ h-c-grid__col--6 h-c-grid__col--offset-3
+
+
+ "
+ &gt;
+
+
+
+
+ &lt;img
+ src="https://storage.googleapis.com/gweb-cloudblog-publish/images/image1_9ZYjQgt.max-1000x1000.png"
+
+ alt="image1"&gt;
+
+ &lt;/a&gt;
+
+ &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="xjvun"&gt;Buffmee App Description and Images&lt;/p&gt;&lt;/figcaption&gt;
+
+ &lt;/figure&gt;
+
+
+ &lt;/div&gt;
+ &lt;/div&gt;
+
+
+
+
+
+&lt;/div&gt;
+&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To meet these performance targets, organizations need a systematic approach to AI evaluation and real-time bottleneck identification. That is why we are sharing the automated evaluation framework and p
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The results were inspiring: &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;KDDI reduced total application response latency by 38%, successfully hitting their target response performance. They also achieved a nearly 18% improvement
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;"Our vision hinged on a platform where content, once ingested, would instantly function as a working RAG system. Google's careful, hands-on guidance made that a reality — we're sincerely grateful for their support." — Shunya Onoda, AI Product De
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With these performance and accuracy improvements, Buffmee now empowers users to safely explore their favorite media through interactive Q&amp;amp;A and deep-dive analysis, delivering a highly personalized experience while maintaining strict trus
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Let’s deep dive into how they achieved these results. &lt;/span&gt;&lt;/p&gt;
+&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Establish automated evaluation for diverse content&lt;/span&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Traditional manual testing requires immense effort and cannot scale to accommodate a large content library. To solve this, the development team designed a systematic AI evaluation process using Gemini Enterprise Agent Platform Evaluation Service
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By implementing automated evaluation frameworks like LLM-as-a-Judge and the Rule of Hundreds, the team replaced labor-intensive manual testing with a data-driven process. They ingested their extensive document corpus, constructed hundreds of aut
+&lt;div class="block-image_full_width"&gt;
+
+
+
+
+
+
+
+ &lt;div class="article-module h-c-page"&gt;
+ &lt;div class="h-c-grid"&gt;
+
+
+ &lt;figure class="article-image--large
+
+
+ h-c-grid__col
+ h-c-grid__col--6 h-c-grid__col--offset-3
+
+
+ "
+ &gt;
+
+
+
+
+ &lt;img
+ src="https://storage.googleapis.com/gweb-cloudblog-publish/images/image2_R5gWUyX.max-1000x1000.png"
+
+ alt="image2"&gt;
+
+ &lt;/a&gt;
+
+ &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="xjvun"&gt;KDDI's automated evaluation loop: AI generates questions and scores answers, while humans calibrate thresholds and analyze edge-case failures.&lt;/p&gt;&lt;/figcaption&gt;
+
+ &lt;/figure&gt;
+
+
+ &lt;/div&gt;
+ &lt;/div&gt;
+
+
+
+
+
+&lt;/div&gt;
+&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Identify bottlenecks and optimize performance with an agentic loop&lt;/span&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To improve response speeds, the team implemented BigQuery Agent Analytics and the Agent Development Kit (ADK) log analysis agent. By analyzing actual production logs, they visualized how skill division and prompt bloat—especially with highly com
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The team optimized the system prompt, including the inline integration of skills, and reviewed the sub-agent routing. This allowed them to identify and resolve deep-stack bottlenecks in real time without sacrificing response accuracy.&lt;/span&g
+&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Four core principles for reliable evaluation &lt;/span&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To achieve these results, the team implemented four core technical practices:&lt;/span&gt;&lt;/p&gt;
+&lt;ol&gt;
+&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Transitioning to binary evaluation: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;By selectively moving away from ambiguous 1–5 ratings to a binary "pass (1) / fail (0)" system for critical metrics, the team
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Strategic content sampling:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Rather than attempting to evaluate every single document, the team classified their entire corpus along a two-dimensional grid: File F
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Thresholds grounded in product judgment:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Instead of relying solely on default tool parameters, the product owner reviewed randomly sampled answers alongside their
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Modular splitting of massive prompts into ADK Skills:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Because massive system prompts exceeding 800 lines can cause LLM attention drift and latency degradation, th
+&lt;/li&gt;
+&lt;/ol&gt;
+&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Get started&lt;/span&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Building scalable, reliable generative AI applications requires both automated evaluation and deep performance analytics. To apply these techniques to your own applications:&lt;/span&gt;&lt;/p&gt;
+&lt;ul&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Measure quality systematically with the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/evaluation-overview?hl=ja"&gt;&lt;span style="text-decoration: underline; vertical-align:
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Structure your agents with &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/build/adk"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Agent Development Kit&
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Ground your agents with &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/generative-ai-app-builder/docs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Agent Search&lt;/span&gt;&lt;/a&gt;&l
+&lt;/li&gt;
+&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Tue, 08 Sep 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/topics/customers/how-kddi-optimized-rag-performance-with-agent-development-kit/</guid><category>AI &amp; Machine Learning</category><category>Telecommunications</category><categ
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To solve this, we took an alternative approach: We built an automated refactoring pipeline powered by Antigravity CLI in headless mode. This helped us accelerate our migration velocity significantly while maintaining strict data parity in our st
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;The challenge: Anatomy of a dual-write migration&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;When migrating high-throughput production services where financial accuracy is essential, simple cutover scripts do not work. You must verify that both the legacy datastore and Spanner receive identical writes simultaneously until all the histor
@@@ -76,7 +208,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Instead of embedding raw Spanner table names and column assignments directly inside core DAO business logic, we isolate Spanner schema translation into dedicated converter units:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;// Example of the standardized pattern generated by our pipeline\r\n\r\ntype BpcTransferAmountsMutationConverter interface {\r\n ToInsertMutation(entity *model.BpcTransferAmount) (*spanner.Mutation, error)\r\n
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;// Example of the standardized pattern generated by our pipeline\r\n\r\ntype BpcTransferAmountsMutationConverter interface {\r\n ToInsertMutation(entity *model.BpcTransferAmount) (*spanner.Mutation, error)\r\n
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By establishing a rigid, deterministic contract between the DAO and the Spanner SDK (&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;spanner.Mutation&lt;/span&gt;&lt;span style="vertical-ali
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Why use Antigravity&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;CLI in headless mode?&lt;/span&gt;&lt;/h3&gt;
@@@ -141,7 +273,7 @@
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;git clone https://github.com/google/mantis.git&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fb66328e7c0&amp;gt;)])]&a
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;git clone https://github.com/google/mantis.git&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fd81a4573d0&amp;gt;)])]&a
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
@@@ -201,7 +333,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Stay tuned for monthly updates on Google Cloud’s AI announcements, news, and best practices. For a deeper dive into the latest from Google Cloud customers, read our monthly recap, &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/cus
&lt;div class="block-aside"&gt;&lt;dl&gt;
&lt;dt&gt;aside_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;title&amp;#x27;, &amp;#x27;$300 in free credit to try Google Cloud AI and ML&amp;#x27;), (&amp;#x27;body&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fb663ed3b80&amp;gt;), (&amp;#x27;btn_text&amp;#x27;, &amp;#x27;Start building
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;title&amp;#x27;, &amp;#x27;$300 in free credit to try Google Cloud AI and ML&amp;#x27;), (&amp;#x27;body&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fd81a603610&amp;gt;), (&amp;#x27;btn_text&amp;#x27;, &amp;#x27;Start building
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;hr/&gt;
&lt;h2 style="text-align: center;"&gt;&lt;span style="vertical-align: baseline;"&gt;July&lt;/span&gt;&lt;/h2&gt;
@@@ -1744,7 +1876,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;a href="https://cloud.google.com/ai/financial-services"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise for Financial Services&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt
&lt;div class="block-aside"&gt;&lt;dl&gt;
&lt;dt&gt;aside_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;title&amp;#x27;, &amp;#x27;Get vital board insights with Google Cloud&amp;#x27;), (&amp;#x27;body&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fb663d0f6a0&amp;gt;), (&amp;#x27;btn_text&amp;#x27;, &amp;#x27;Visit the hub&amp;#x27
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;title&amp;#x27;, &amp;#x27;Get vital board insights with Google Cloud&amp;#x27;), (&amp;#x27;body&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fd81a257430&amp;gt;), (&amp;#x27;btn_text&amp;#x27;, &amp;#x27;Visit the hub&amp;#x27
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;h3 data-block-key="hswvv"&gt;&lt;b&gt;How to stay strong with security fundamentals in the AI era&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="eoh1k"&gt;&lt;i&gt;By Chris Betz, CISO, Google Cloud&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-paragraph_with_image"&gt;&lt;div class="article-module h-c-page"&gt;
@@@ -1825,12 +1957,12 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To learn more about building and maintaining strong security foundations in the AI era, read our newest &lt;/span&gt;&lt;a href="https://cloud.google.com/security/resources/cyber-snapshot-reports"&gt;&lt;span style="text-decoration: underline; v
&lt;div class="block-aside"&gt;&lt;dl&gt;
&lt;dt&gt;aside_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;title&amp;#x27;, &amp;#x27;Learn something new&amp;#x27;), (&amp;#x27;body&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fb663d0f2e0&amp;gt;), (&amp;#x27;btn_text&amp;#x27;, &amp;#x27;Watch now&amp;#x27;), (&amp;#x27;href&amp;#x2
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;title&amp;#x27;, &amp;#x27;Learn something new&amp;#x27;), (&amp;#x27;body&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fd81a257250&amp;gt;), (&amp;#x27;btn_text&amp;#x27;, &amp;#x27;Watch now&amp;#x27;), (&amp;#x27;href&amp;#x2
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;h3 data-block-key="4bd61"&gt;&lt;b&gt;In case you missed it&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="5tvtn"&gt;Here are the latest updates, products, services, and resources from our security teams so far this month:&lt;/p&gt;&lt;ul&gt;&lt;li data-block-key="4
&lt;div class="block-aside"&gt;&lt;dl&gt;
&lt;dt&gt;aside_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;title&amp;#x27;, &amp;#x27;Join the Google Cloud CISO Community&amp;#x27;), (&amp;#x27;body&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fb663d0f3d0&amp;gt;), (&amp;#x27;btn_text&amp;#x27;, &amp;#x27;Learn more&amp;#x27;), (&amp
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;title&amp;#x27;, &amp;#x27;Join the Google Cloud CISO Community&amp;#x27;), (&amp;#x27;body&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fd81a257400&amp;gt;), (&amp;#x27;btn_text&amp;#x27;, &amp;#x27;Learn more&amp;#x27;), (&amp
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;h3 data-block-key="29tyz"&gt;&lt;b&gt;Threat Intelligence news&lt;/b&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li data-block-key="cm2sc"&gt;&lt;b&gt;Staying ahead of adversarial AI through agentic source code review&lt;/b&gt;: To help defenders implement agentic approaches s
&lt;div class="block-paragraph"&gt;&lt;h3 data-block-key="rcfc5"&gt;&lt;b&gt;Now hear this: Podcasts from Google Cloud&lt;/b&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li data-block-key="drbpp"&gt;&lt;b&gt;Cloud Security Podcast: All about Project Atlas, Wiz's AI vulnerability research&lt;/b&gt;: Near Orfeld, head
@@@ -2233,7 +2365,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The unified &lt;/span&gt;&lt;a href="https://github.com/googleapis/python-genai" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;google-genai&lt;/span&gt;&lt;/a&gt;&lt;span style="verti
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Prototype: Google AI Studio, raw API key\r\nfrom google import genai\r\nclient = genai.Client(api_key=&amp;quot;YOUR_AI_STUDIO_KEY&amp;quot;)\r\n\r\n# Production: GEAP, no key — uses Application Default Credentials
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Prototype: Google AI Studio, raw API key\r\nfrom google import genai\r\nclient = genai.Client(api_key=&amp;quot;YOUR_AI_STUDIO_KEY&amp;quot;)\r\n\r\n# Production: GEAP, no key — uses Application Default Credentials
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;#2  How do I set up a Google Cloud project without becoming an IAM expert?&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The biggest reason startups stall on the migration to Agent Platform isn't the code, it's the operational leap from "here's an API key" to a cloud project with folders, service accounts, org policies, logging, and IAM bindings. If your team does
@@@ -2251,7 +2383,7 @@
&lt;/ol&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# One-shot: create a Vertex-ready project and turn on the services a\r\n# typical AI startup uses.\r\ngcloud projects create my-startup-prod --name=&amp;quot;My Startup (prod)&amp;quot;\r\ngcloud config set project m
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# One-shot: create a Vertex-ready project and turn on the services a\r\n# typical AI startup uses.\r\ngcloud projects create my-startup-prod --name=&amp;quot;My Startup (prod)&amp;quot;\r\ngcloud config set project m
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Sources: &lt;/span&gt;&lt;a href="https://cloud.google.com/sdk/gcloud/reference/services/enable"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;gcloud services enable refe
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;If you're a solo founder, resist the urge to build in your personal GCP account. Create a proper organization or self-owned org first, then create the project &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;inside&
@@@ -2271,11 +2403,11 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The pattern you're aiming for is one where your &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;code never sees a key at all&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;. It just calls the &lt;/span&g
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# On a developer laptop\r\ngcloud auth application-default login\r\n\r\n# On a server (Cloud Run, GKE, etc.) — no login, no key file.\r\n# Attach a service account with just the roles the app needs.\r\ngcloud run dep
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# On a developer laptop\r\ngcloud auth application-default login\r\n\r\n# On a server (Cloud Run, GKE, etc.) — no login, no key file.\r\n# Attach a service account with just the roles the app needs.\r\ngcloud run dep
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Application code — notice: no keys, no secrets.\r\nfrom google import genai\r\n\r\nclient = genai.Client(\r\n vertexai=True,\r\n project=&amp;quot;my-startup-prod&amp;quot;,\r\n location=&amp;quot;us-centr
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Application code — notice: no keys, no secrets.\r\nfrom google import genai\r\n\r\nclient = genai.Client(\r\n vertexai=True,\r\n project=&amp;quot;my-startup-prod&amp;quot;,\r\n location=&amp;quot;us-centr
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Do one last favor to your future self: give that service account the &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;minimum&lt;/span&gt;&lt;span style="vertical-align: b
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;#4 When should I actually stop procrastinating and migrate from AI Studio's API key to Agent Platform's IAM model?&lt;/span&gt;&lt;/h3&gt;
@@@ -2299,7 +2431,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Practical checklist for cutover day:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# 1. Revoke every existing AI Studio key that has ever left a laptop.\r\n# (Go to https://aistudio.google.com/apikey and delete them.)\r\n\r\n# 2. Confirm your production code has no api_key= arguments.\r\ngrep -r
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# 1. Revoke every existing AI Studio key that has ever left a laptop.\r\n# (Go to https://aistudio.google.com/apikey and delete them.)\r\n\r\n# 2. Confirm your production code has no api_key= arguments.\r\ngrep -r
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;If step 3 prints a response, you're on Agent Platform.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;span style="vertical-align: baseline;"&gt;Scale: get more capacity without paying a premium.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
@@@ -2317,19 +2449,19 @@
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Pin to a regional endpoint.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Over half of startup traffic on Agent Platform defaults to global routing. Pinning to a specific region (say &lt;/span&gt;&lt;strong style="vertical-align
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;from google import genai\r\n\r\n# Global (default): competes against worldwide demand.\r\n# Regional: routes only to the regional cluster, less contention.\r\nclient = genai.Client(\r\n vertexai=True,\r\n proje
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;from google import genai\r\n\r\n# Global (default): competes against worldwide demand.\r\n# Regional: routes only to the regional cluster, less contention.\r\nclient = genai.Client(\r\n vertexai=True,\r\n proje
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Add real retry and backoff.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; A 429 is a retryable signal, not a fatal error. Any production client should have exponential backoff with jit
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;from google import genai\r\nfrom google.genai import types\r\n\r\nclient = genai.Client(\r\n vertexai=True, project=&amp;quot;my-startup-prod&amp;quot;, location=&amp;quot;us-central1&amp;quot;,\r\n http_option
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;from google import genai\r\nfrom google.genai import types\r\n\r\nclient = genai.Client(\r\n vertexai=True, project=&amp;quot;my-startup-prod&amp;quot;, location=&amp;quot;us-central1&amp;quot;,\r\n http_option
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;How do you see this coming?  &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Preferably not from a user telling you. Agent Platform publishes serving metrics to Cloud Monitoring, and the
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The metric to actually alert on is &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;aiplatform.googleapis.com/publisher/online_serving/model_invocation_count&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;. It carries an &lt
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;One thing worth internalizing, because it trips people up: you cannot build a "warn me at 80% of my quota" alert for Standard PayGo. Under Dynamic Shared Quota there is no fixed per-project number to be at 80% of. A 429 means transient contentio
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;gcloud monitoring policies create --policy-from-file=capacity-alert.yaml&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;gcloud monitoring policies create --policy-from-file=capacity-alert.yaml&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Sources: &lt;/span&gt;&lt;a href="https://cloud.google.com/monitoring/api/metrics_gcp_a_b"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Agent Platform metrics list&lt;/s
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Follow the &lt;/span&gt;&lt;a href="https://cloud.google.com/vertex-ai/generative-ai/docs/quotas"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Agent Platform rate limits documentation&lt;/span&gt;&lt;/a&gt;&lt;spa
@@@ -2418,7 +2550,7 @@
&lt;/ol&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Priority PayGo request: use the global endpoint + two extra headers.\r\nfrom google import genai\r\nfrom google.genai import types\r\n\r\nclient = genai.Client(vertexai=True, project=&amp;quot;my-startup-prod&amp;q
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Priority PayGo request: use the global endpoint + two extra headers.\r\nfrom google import genai\r\nfrom google.genai import types\r\n\r\nclient = genai.Client(vertexai=True, project=&amp;quot;my-startup-prod&amp;q
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;3. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Once you can predict your baseline TPM,&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; buy PT to cover
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt; Sources: &lt;/span&gt;&lt;a href="https://cloud.google.com/vertex-ai/generative-ai/docs/priority-paygo"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Priority PayGo docs&lt;/span&gt;&lt;/a&gt;&lt;span style="verti
@@@ -2439,7 +2571,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Batch prediction on Agent Platform runs in a completely separate queue, does not consume your interactive DSQ, and is typically about half the price of on-demand inference. That's a rare double win: faster live traffic &lt;/span&gt;&lt;span styl
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Kick off a batch prediction job from a JSONL file in Cloud Storage.\r\n# Each line is one prompt; results land in another Cloud Storage prefix.\r\nfrom google import genai\r\nfrom google.genai import types\r\n\r\nc
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Kick off a batch prediction job from a JSONL file in Cloud Storage.\r\n# Each line is one prompt; results land in another Cloud Storage prefix.\r\nfrom google import genai\r\nfrom google.genai import types\r\n\r\nc
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Common candidates: nightly document summarization, background classification of new signups, bulk translation, embedding backfills, evaluation runs against your test set. If any of those are on your li
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Govern: Keep costs, keys, and agents under control.&lt;/span&gt;&lt;/h3&gt;
@@@ -2469,7 +2601,7 @@
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;2. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;A billing budget with a Pub/Sub trigger that disables billing&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;. Still the right tool when you need bl
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Sketch: create a budget SCOPED TO ONE PROJECT that publishes to Pub/Sub at 50%, 90%, 100%.\r\ngcloud billing budgets create \\\r\n --billing-account=012345-6789AB-CDEF01 \\\r\n --display-name=&amp;quot;my-startup
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Sketch: create a budget SCOPED TO ONE PROJECT that publishes to Pub/Sub at 50%, 90%, 100%.\r\ngcloud billing budgets create \\\r\n --billing-account=012345-6789AB-CDEF01 \\\r\n --display-name=&amp;quot;my-startup
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Sources: &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://cloud.google.com/billing/docs/how-to/budgets-spend-caps"&gt;&lt;span style="text-decoration: underl
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Two things to get ahead of  for, as the defaults can cause unexpected issues: &lt;/span&gt;&lt;/p&gt;
@@@ -2487,11 +2619,11 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The short answer is: &lt;/span&gt;&lt;a href="https://cloud.google.com/secret-manager"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Secret Manager&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&g
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Store a third-party API key (Stripe, OpenAI, whatever).\r\necho -n &amp;quot;sk_live_xxx&amp;quot; | gcloud secrets create stripe-live-key --data-file=-\r\n\r\n# Grant only the runtime service account access to rea
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Store a third-party API key (Stripe, OpenAI, whatever).\r\necho -n &amp;quot;sk_live_xxx&amp;quot; | gcloud secrets create stripe-live-key --data-file=-\r\n\r\n# Grant only the runtime service account access to rea
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Application code fetches it at startup; nothing lives on disk.\r\nfrom google.cloud import secretmanager\r\nsm = secretmanager.SecretManagerServiceClient()\r\nresp = sm.access_secret_version(\r\n name=&amp;quot;
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Application code fetches it at startup; nothing lives on disk.\r\nfrom google.cloud import secretmanager\r\nsm = secretmanager.SecretManagerServiceClient()\r\nresp = sm.access_secret_version(\r\n name=&amp;quot;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Then two little disciplines that pay for themselves the first time you need them:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
@@@ -2510,7 +2642,7 @@
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;2. Sandboxed code execution.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; If your agent runs generated code,  a common pattern for data-analysis or "run this Python for me" flows, do not run it in your application process. Use
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Enable server-side code execution inside a sandbox for a request.\r\nfrom google import genai\r\nfrom google.genai import types\r\n\r\nclient = genai.Client(vertexai=True, project=&amp;quot;my-startup-prod&amp;quot
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Enable server-side code execution inside a sandbox for a request.\r\nfrom google import genai\r\nfrom google.genai import types\r\n\r\nclient = genai.Client(vertexai=True, project=&amp;quot;my-startup-prod&amp;quot
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;3. Prompt and response filtering.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://cloud.google.com/security-command-center/docs/model-armor-overview"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;4. Behavioral monitoring.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://cloud.google.com/security-command-center"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Secu
@@@ -2885,7 +3017,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We define the upstream CPU model using &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;HuggingFacePipelineModelHandler&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;. This model classifies sentiment into &lt;/span&gt;&lt;c
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;model_handler = HuggingFacePipelineModelHandler(\r\n task=&amp;quot;sentiment-analysis&amp;quot;,\r\n model=&amp;quot;distilbert-base-uncased-finetuned-sst-2-english&amp;quot;\r\n)&amp;#x27;), (&amp;#x27;langua
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;model_handler = HuggingFacePipelineModelHandler(\r\n task=&amp;quot;sentiment-analysis&amp;quot;,\r\n model=&amp;quot;distilbert-base-uncased-finetuned-sst-2-english&amp;quot;\r\n)&amp;#x27;), (&amp;#x27;langua
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;2. Building the heavyweight ADK agent&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The ADK agent acts as our remediation assistant. We equip it with three tools:&lt;/span&gt;&lt;/p&gt;
@@@ -2902,18 +3034,18 @@
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;def make_adk_tools(project: str, dataset: str = &amp;quot;sentiment_demo&amp;quot;):\r\n def lookup_user(user_id: int) -&amp;gt; dict:\r\n &amp;quot;&amp;quot;&amp;quot;Look up user information (email addre
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;def make_adk_tools(project: str, dataset: str = &amp;quot;sentiment_demo&amp;quot;):\r\n def lookup_user(user_id: int) -&amp;gt; dict:\r\n &amp;quot;&amp;quot;&amp;quot;Look up user information (email addre
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We configure the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;LlmAgent&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; and package it in the &lt;/span&gt;&lt;code style="vertic
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;adk_agent = LlmAgent(\r\n name=&amp;quot;remediation_agent&amp;quot;,\r\n model=&amp;quot;gemini-3.5-flash&amp;quot;,\r\n instruction=(\r\n &amp;quot;You are a customer service remediation assistant w
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;adk_agent = LlmAgent(\r\n name=&amp;quot;remediation_agent&amp;quot;,\r\n model=&amp;quot;gemini-3.5-flash&amp;quot;,\r\n instruction=(\r\n &amp;quot;You are a customer service remediation assistant w
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;3. Assembling the Dataflow DAG&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The entire pipeline is declared cleanly. The upstream sentiment inference feeds directly into the filtering step (&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;FilterNegativeADK&lt;/code&gt;&lt;span style="vertical-align: baseline;"
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;with beam.Pipeline(options=pipeline_options) as p:\r\n # 1. Read from Pub/Sub and classify sentiment on CPU\r\n sentiment_results = (\r\n p\r\n | &amp;quot;ReadFromPubSub&amp;quot; &amp;gt;&amp;gt
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;with beam.Pipeline(options=pipeline_options) as p:\r\n # 1. Read from Pub/Sub and classify sentiment on CPU\r\n sentiment_results = (\r\n p\r\n | &amp;quot;ReadFromPubSub&amp;quot; &amp;gt;&amp;gt
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Cost and performance advantages&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By introducing this filtering step, we gain major engineering and operational advantages:&lt;/span&gt;&lt;/p&gt;
@@@ -3043,7 +3175,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Because public projects like &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;bigquery-public-data&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; are strictly read-only, you must map the logical property graph inside your o
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;-- 1. Map the graph inside YOUR project \r\n\r\n\r\nCREATE OR REPLACE PROPERTY GRAPH `YOUR_PROJECT_ID.YOUR_DATASET.thelook_ecommerce_graph`\r\nNODE TABLES(\r\n `bigquery-public-data.thelook_ecommerce.users` AS User\
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;-- 1. Map the graph inside YOUR project \r\n\r\n\r\nCREATE OR REPLACE PROPERTY GRAPH `YOUR_PROJECT_ID.YOUR_DATASET.thelook_ecommerce_graph`\r\nNODE TABLES(\r\n `bigquery-public-data.thelook_ecommerce.users` AS User\
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Democratizing graph intelligence in BigQuery Studio&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To make managing and deploying these relationship networks frictionless for both developers and business users, we have built native, intuitive operational tools directly into BigQuery Studio:&lt;/span&gt;&lt;/p&gt;
@@@ -3201,7 +3333,7 @@
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Looker’s semantic layer eliminates this guesswork, serving critical context to Gemini Enterprise in the form of codified data, allowing the agent to give deterministic, predictable responses.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
&lt;dt&gt;code_block&lt;/dt&gt;
- &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;[ Gemini Enterprise Chat UI ] \r\n │\r\n (A2A Protocol / NLP)\r\n ▼\r\n [ Looker Governed Agent ] ──► Generates Deterministic SQL\r\n │\r\n [ Looker Semantic Layer
+ &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;[ Gemini Enterprise Chat UI ] \r\n │\r\n (A2A Protocol / NLP)\r\n ▼\r\n [ Looker Governed Agent ] ──► Generates Deterministic SQL\r\n │\r\n [ Looker Semantic Layer
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;When a Gemini Enterprise user requests a business KPI in Gemini Enterprise, the request is routed directly to a Looker agent. The semantic layer generates deterministic, precise SQL based on version-co
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Robust governance and secure access management&lt;/strong&gt;&lt;/h3&gt;
@@@ -3341,252 +3473,4 @@
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Monitoring operational health and driving ROI&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Because a resilient platform foundation requires deep observability, WPP’s engineering team now monitors strict operational metrics instead of relying solely on deployment frequency. The team tracks request latency across p50, p95, and p99 perce
&lt;p style="padding-left: 40px;"&gt;&lt;code style="font-style: italic; vertical-align: baseline;"&gt;"Navigating a transformation of this scale across multiple complex workstreams—spanning data engineering, platform infrastructure, and AI integration—required more than just alignment; it demanded
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For WPP, operationalizing its data and AI stacks at this velocity provided the necessary infrastructure for its advanced workloads, and the business impact was clear and quantifiable. By building this dual foundation, the company reduced creativ
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We’ve spent our careers trying to solve this problem for major companies like Spotify and Priceline, and it’s why Sidd founded &lt;/span&gt;&lt;a href="https://www.malachyte.com/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Malachyte was inspired by some unique insights into how advanced AI models, and large language models in particular, could be applied in new ways to old challenges like personalization and recommendations. &lt;/span&gt;&lt;/p&gt;
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;As Malachyte set out to win potential customers’ business, we needed secure, scalable, reliable and, above all, leading-edge AI infrastructure to continue building the personalization algorithm we had always envisioned. By utilizing Google Cloud
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This is the story of how we built it, and the ways any founder can use services like these to start deploying AI foundation models in new ways.&lt;/span&gt;&lt;/p&gt;
-&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;How Malachyte lifted sales for their users &lt;/strong&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For Malachyte, the aha moment was discovering that it could use neural networks with attention mechanisms — the same concept powering large language models — to personalize retail search and product pages. This approach is what enables LLMs to d
-&lt;div class="block-image_full_width"&gt;
-
-
-
-
-
-
-
- &lt;div class="article-module h-c-page"&gt;
- &lt;div class="h-c-grid"&gt;
-
-
- &lt;figure class="article-image--large
-
-
- h-c-grid__col
- h-c-grid__col--6 h-c-grid__col--offset-3
-
-
- "
- &gt;
-
-
-
-
- &lt;img
- src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_-_Malachyte_blog_.max-1000x1000.png"
-
- alt="1 - Malachyte blog"&gt;
-
- &lt;/a&gt;
-
- &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="o24ff"&gt;What if we predicted the next thing a user wants on an ecommerce website just like LLMs predict the next word in a sentence?&lt;/p&gt;&lt;/figcaption&gt;
-
- &lt;/figure&gt;
-

Diff display stops at 400 lines. The line counts above are from the whole diff. 115 lines shown here cut at 300 characters. The raw artifact at this commit is linked above.