llm-catalog-archive

Change

73b5b9c

73b5b9cebf43c50f475ef8c4bdad3affa26af334 · commit on GitHub

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

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

Lines added
+161
Lines removed
-234
Stored bytes at this commit
547,842
Timestamp
observed
Raw artifact at this commit
raw/gcloud-blog-feed/response.xml
Recorded headers
observed_at2026-09-05T04:29:48.707Z
origin_datenull
status200
final URLhttps://cloudblog.withgoogle.com/products/ai-machine-learning/rss/
etagnull
last-modifiednull
dateSat, 05 Sep 2026 04:29:48 GMT
agenull
cache-controlmax-age=600
cf-cache-statusnull
content-encodinggzip
content-lengthnull
@@@ -1,5 +1,134 @@
<?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;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
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We structured our migration across three distinct phases:&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;strong style="vertical-align: baseline;"&gt;Historical backfill:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Copying existing historical records to Spanner while maintaining referential integrity.&lt;/span&gt;&lt;/p&gt;
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Dual-write / dual-read implementation:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Modifying every DAO to write mutations to both the primary store and Cloud Spanner in parallel during the migration window.
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Automated API verification and parity checking:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Intercepting RPC traffic and verifying end-to-end that every write lands with byte-for-byte equivalence across bot
+&lt;/li&gt;
+&lt;/ul&gt;&lt;/div&gt;
+&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_-_Dual_Write_Architecture.max-1000x1000.png"
+
+ alt="1 - Dual Write Architecture"&gt;
+
+ &lt;/a&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;The architectural pattern is clean, but at our scale, we began to encounter friction. That’s because each DAO requires:&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;A dedicated &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;MutationConverter&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; class mapping complex domain models to Spanner schema columns&lt;/span&gt;&lt
+&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;Dual-write branch handling and rollback or error-reporting logic&lt;/span&gt;&lt;/p&gt;
+&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;A suite of unit tests verifying both primary and Spanner writes using fake time sources and test doubles (&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;FakeTimeSource&lt;/span&gt;&lt;span style="vertical-align: b
+&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Performing these identical, high-precision code changes across 30+ DAOs by hand would have taken months of engineering time.&lt;/span&gt;&lt;/p&gt;
+&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;The solution: Standardized mutation converter patterns&lt;/span&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To verify that our automation pipeline could reliably generate clean code, we first standardized our DAO refactoring pattern around a decoupled &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;MutationConverter&lt;/span&gt;&lt;span sty
+&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;/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;
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Interactive AI chat interfaces in IDEs work well for exploratory coding, but they are poorly suited for systematic, multi-file code updates across an entire codebase. When you need to apply repeatable refactoring to dozens of targets without mis
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We addressed this by building an orchestration script (&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;migration_ui.py&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;) that runs Antigravity CLI in headless mode (&lt;/span&g
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Headless mode lets Antigravity run directly inside shell scripts, continuous integration pipelines, and background automation jobs without requiring manual terminal prompts. This approach helped us scale our work in three key ways:&lt;/span&gt;&
+&lt;ul&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Deterministic prompt architectures:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; We treated our prompts as version-controlled engineering artifacts. We codified precise rules handling common Spanner edge cas
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Batch execution and automated verification:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Our orchestration script takes a target DAO name as input, retrieves the existing single-write source code and schema,
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Overnight execution at scale:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Because the loop runs unattended, engineers can queue up 10 DAOs at the end of the day. By morning, the pipeline generates, tests, a
+&lt;/li&gt;
+&lt;/ul&gt;
+&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Results and key takeaways for cloud engineers&lt;/span&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Combining Spanner's distributed database primitives with Antigravity CLI's headless automation produced clear benefits across our engineering organization:&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;strong style="vertical-align: baseline;"&gt;Significant reduction in migration effort&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: DAO dual-write migrations that previously required extensive manual coding and testing were completed and reviewed in a
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Highly reliable data migration:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Because every generated DAO adhered to the exact same tested &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;MutationCo
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Focus on higher-value engineering:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Engineers avoided repetitive boilerplate refactoring, giving them time to focus on data modeling, architectural resilience, and
+&lt;/li&gt;
+&lt;/ul&gt;
+&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Three tips for your next database migration&lt;/span&gt;&lt;/h3&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;Decouple schema translation first:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Before writing migration scripts, define a strict interface (like our &lt;/span&gt;&lt;span style="vertical-align: baseline;"&g
+&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;Move from interactive chat to headless automation:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; When executing repetitive refactoring across more than three or four files, invest in scripted, headless workfl
+&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;Let the build system act as your guardrail:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Connect your AI generation loop directly to your build and test harness (&lt;/span&gt;&lt;span style="vertical-align:
+&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;Whether you’re migrating financial systems or building cloud-native applications from scratch, Spanner and Antigravity provide a foundation for scalable software development.&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;strong style="vertical-align: baseline;"&gt;Explore Cloud Spanner:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Learn more about Spanner's distributed architecture &lt;/span&gt;&lt;a href="https://cloud.google.com/spanner/docs"&gt;&lt;span style="text
+&lt;/li&gt;
+&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
+&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Discover Gemini for Developers:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; See how AI-assisted coding and headless CLI automation can assist your engineering workflows at &lt;/span&gt;&lt;a href="https://c
+&lt;/li&gt;
+&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Fri, 04 Sep 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/topics/developers-practitioners/using-antigravity-cli-to-streamline-dual-write-database-migration/</guid><category>AI &amp; Machine Learning</category><category>Cloud Migration<
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Available to all as an open-source framework, Mantis is part of Google’s internal approach to find and fix vulnerabilities at machine-speed. It creates a more effective scalable, context-aware repository analysis. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;While sloppiness in AI code scanning frequently leads to hallucinated bugs and weak true-positive rates under 7%, we designed Mantis to be effective by combining industry-standard agentic techniques like critic and review agents with sandboxed r
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;As we &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/identity-security/cloud-ciso-perspectives-how-google-cloud-security-uses-ai-internally/?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&g
@@@ -12,7 +141,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 0x7faa2153de20&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 0x7fb66328e7c0&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;
@@@ -72,7 +201,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 0x7faa20cd6e20&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 0x7fb663ed3b80&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;
@@@ -896,6 +1025,8 @@
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
+&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
+&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;&lt;table&gt;&lt;colgroup&gt;&lt;col/&gt;&lt;col/&gt;&lt;col/&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
@@@ -976,6 +1107,8 @@
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Equip developers with advanced agentic tooling under a single Gemini Enterprise subscription&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We’re rolling out access to &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Google Antigravity in Gemini Enterprise&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;, an agent-first developer platform that brings powerful
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To be more efficient with agentic coding costs, we are pooling developer tools quota included in each Gemini Enterprise subscription and making it available across the whole Google Cloud project so your teams can benefit from the capacity you’re
@@@ -1169,7 +1302,7 @@
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;&lt;a href="https://cloud.google.com/transform/gemini-enterprise-optimize-ai-token-spend"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;What sports cars can teach us about optimizing AI spen
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
-&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/provisioned-throughput"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Protection during usage spikes&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-alig
+&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/provisioned-throughput"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Protection during usage spikes&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-alig
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Wed, 26 Aug 2026 13:30:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/ai-machine-learning/flexible-billing-and-cost-controls-for-agents-on-google-cloud/</guid><category>Cost Management</category><category>AI &amp; Machine Learning</catego
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;General-purpose AI, however capable, does not meet that standard on its own. Foundational model intelligence is necessary. For legal work, it is nowhere near sufficient.&lt;/span&gt;&lt;/p&gt;
@@@ -1611,7 +1744,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 0x7faa20b74c10&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 0x7fb663d0f6a0&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;
@@@ -1692,12 +1825,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 0x7faa20b74c70&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 0x7fb663d0f2e0&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 0x7faa20b74cd0&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 0x7fb663d0f3d0&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
@@@ -2100,7 +2233,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
@@@ -2118,7 +2251,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&
@@@ -2138,11 +2271,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;
@@@ -2166,7 +2299,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;
@@@ -2184,19 +2317,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
@@@ -2285,7 +2418,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
@@@ -2306,7 +2439,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;
@@@ -2336,7 +2469,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;
@@@ -2354,11 +2487,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;
@@@ -2377,7 +2510,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
@@@ -2752,7 +2885,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;
@@@ -2769,18 +2902,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;
@@@ -2910,7 +3043,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;
@@@ -3068,7 +3201,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;
@@@ -3456,210 +3589,4 @@
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With its migration to Google Cloud’s AI architecture, Malachyte demonstrated that production AI inference and training are about more than GPUs and storage. They require real-time continuous learning i
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This approach also shows that even a small team like Malachyte’s can have a big impact in an industry. It just needs access to powerful infrastructure and core AI managed services.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Try it for yourself &lt;/strong&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Looking to shake up your industry or stay ahead of the competition like Malachyte? Try &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/managed-service-for-apache-kafka/docs/overview"&gt;&lt;span style="text-decoration: underline; vertical
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;At the center of it all is Gemini Enterprise, a unified platform designed to &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;power the agentic enterprise&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt
-&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We believe this integrated approach is why Google has been named a &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Leader&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; in &lt;/span&gt;&lt;strong style="vertical-align:
-&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;
-
-
-
-

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