Buckets:
| import{s as Et,o as Nt,n as Hl}from"../chunks/scheduler.6efaaf90.js";import{S as kt,i as Bt,e as M,s as n,c,h as Rt,a as i,d as t,b as a,f as At,g as d,j as o,k as ft,l as $t,m as s,n as r,t as T,o as J,p as j}from"../chunks/index.eb3e1f0f.js";import{T as _l}from"../chunks/Tip.292c2c3d.js";import{C as Vt,H as u,E as vt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.7c119f85.js";import{C as w}from"../chunks/CodeBlock.21b21a59.js";function Wt(h){let p,U='As <a href="https://huggingface.co/google/embeddinggemma-300m" rel="nofollow"><code>google/embeddinggemma-300m</code></a> is a gated model, you will need to <a href="https://huggingface.co/google/embeddinggemma-300m" rel="nofollow">accept the gating (i.e., Google’s usage license) on the Hugging Face Hub</a>, and <a href="https://huggingface.co/settings/tokens/new?tokenType=read" rel="nofollow">generate a <code>HF_TOKEN</code> with read access to the model</a>, so that the container can download the model weights. If you were to use the ONNX export at <a href="https://huggingface.co/onnx-community/embeddinggemma-300m-ONNX" rel="nofollow"><code>onnx-community/embeddinggemma-300m-ONNX</code></a>, supported with Text Embeddings Inference on CPU, you wouldn’t need to provide the token given that this variant is not under any form of gating.';return{c(){p=M("p"),p.innerHTML=U},l(y){p=i(y,"P",{"data-svelte-h":!0}),o(p)!=="svelte-6b6p9a"&&(p.innerHTML=U)},m(y,m){s(y,p,m)},p:Hl,d(y){y&&t(p)}}}function Zt(h){let p,U="Make sure to replace the <code><HF_TOKEN></code> in the command below with your Hugging Face Hub token.";return{c(){p=M("p"),p.innerHTML=U},l(y){p=i(y,"P",{"data-svelte-h":!0}),o(p)!=="svelte-1nevgcw"&&(p.innerHTML=U)},m(y,m){s(y,p,m)},p:Hl,d(y){y&&t(p)}}}function St(h){let p,U="The snippet above will take ~5-6 hours to complete when running on a single NVIDIA L4 with 24GB VRAM + 8 vCPUs with 32GB RAM, which costs 0.70–0.75 USD/hour, meaning that generating 100,000 embeddings costs ~3.75 USD; but it could be reduced further if you were to use CPU-only instances running inference with ONNX weights instead.";return{c(){p=M("p"),p.textContent=U},l(y){p=i(y,"P",{"data-svelte-h":!0}),o(p)!=="svelte-jaqsnz"&&(p.textContent=U)},m(y,m){s(y,p,m)},p:Hl,d(y){y&&t(p)}}}function Qt(h){let p,U,y,m,b,$e,A,Ve,f,xl="<small>Written by Alvaro Bartolome</small><br/><small>Last updated 2026-02-23</small>",ve,E,ql='This example shows how to generate 100,000 embeddings for <a href="https://huggingface.co/datasets/HuggingFaceFW/finewiki" rel="nofollow">FineWiki</a> (an updated and better extracted version of the <a href="https://huggingface.co/datasets/wikimedia/wikipedia" rel="nofollow"><code>wikimedia/Wikipedia</code></a> up to August of 2025) with <a href="https://huggingface.co/google/embeddinggemma-300m" rel="nofollow">Google EmbeddingGemma 300m</a> running with <a href="https://github.com/huggingface/text-embeddings-inference" rel="nofollow">Text Embeddings Inference</a> on Cloud Run.',We,N,Ll='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/google-cloud/examples/cloud-run/finewiki-embeddings-with-embedding-gemma/finewiki-embeddings-cloud-run.png" alt="100,000 FineWiki embeddings with EmbeddingGemma on Cloud Run"/>',Ze,k,Se,B,zl='<li>You have a Google Cloud account and you are logged into the Cloud Console.</li> <li>You have the necessary permissions on Google Cloud to create a service account, assign permissions to it, create secrets, and create / delete services on Cloud Run.</li> <li>You have a Hugging Face Hub account with read-access to <a href="https://huggingface.co/google/embeddinggemma-300m" rel="nofollow"><code>google/embeddinggemma-300m</code></a>.</li> <li>You have Python 3.10+ with <code>pip</code> installed locally (recommended via <code>uv</code>).</li>',Qe,R,Dl='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/google-cloud/examples/cloud-run/finewiki-embeddings-with-embedding-gemma/embedding-gemma-hugging-face.png" alt="Google EmbeddingGemma on the Hugging Face Hub"/>',Ge,I,Fe,$,Ye,V,Xe,v,Pl="Before you start running the <code>gcloud</code> commands, you need to make sure that both Cloud Run and Secret Manager APIs are enabled on your Google Cloud account.",_e,W,He,Z,xe,S,Ol="Then, you can set the following environment variables to be used through the example:",qe,Q,Le,G,ze,F,Kl="Then you need to create a new secret with the value of the <code>HF_TOKEN</code> with read access for the gated model, to prevent from exposing it as an environment variable.",De,g,Pe,Y,Oe,X,Ke,_,et="Before deploying the Cloud Run service, it’s convenient to create a Service Account that will be used to create the service with access to the secret manager, as well as to invoke the service afterwards with a dedicated identity token.",el,H,ll,x,lt="And grant it the <code>secretmanager.secretAccessor</code> role to be able to read the <code>HF_TOKEN</code> secret.",tl,q,sl,L,nl,z,tt="Before deploying the service, we’ll adjust a few Text Embeddings Inference arguments to improve performance during embedding generation. Specifically, we’ll reduce concurrency and batch sizes to avoid timeouts with large FineWiki entries.",al,D,st="<li><code>--max-client-batch-size 16</code>: process up to 16 sequences within a single batch i.e., per forward pass.</li> <li><code>--max-batch-tokens 32768</code>: limit each batch to 16 sequences of up to 2048 tokens (the model’s maximum length defined in <code>config.json</code> of <code>google/embeddinggemma-300m</code>). Longer sequences are truncated to 2048.</li> <li><code>--max-concurrent-requests 16</code>: lower from the default 512 to prevent excessive queuing and timeouts.</li>",Ml,P,nt='For additional configuration details, see the <a href="https://huggingface.co/docs/text-embeddings-inference/en/cli_arguments" rel="nofollow">Text Embeddings Router CLI documentation</a>.',il,O,at='Finally, mention that we will be deploying on a single NVIDIA L4 GPU with 24GB VRAM, 8 vCPUs and 32GB of RAM; but soon you will also be able to <a href="https://docs.cloud.google.com/run/docs/configuring/services/gpu#gpu-type" rel="nofollow">deploy on larger GPU instances on Cloud Run e.g. NVIDIA RTX PRO 6000 Blackwell GPU with 96 GB VRAM, still on preview</a> and only supported with Text Embeddings Inference v1.9.1 or later, which as of Feb 2025 is still unreleased on Google Cloud as Hugging Face DLC.',ol,K,pl,ee,cl,le,Mt='Once deployed, you can send requests to it via the service URL and the identity token impersonating the service account; but also <a href="https://docs.cloud.google.com/sdk/gcloud/reference/run/services/proxy" rel="nofollow">via a proxy to localhost already authenticated</a>.',dl,te,it="To send requests via the URL with the service account token, you need to add the <code>run.invoker</code> role to the service account as:",rl,se,Tl,ne,ot='Then you can send HTTP requests via cURL (or your preferred alternative) to the <a href="https://developers.openai.com/api/reference/resources/embeddings/methods/create" rel="nofollow">OpenAI-compatible Embeddings API endpoint</a> on Text Embeddings Inference as:',Jl,ae,jl,Me,pt='Or rather to the <a href="https://huggingface.github.io/text-embeddings-inference/" rel="nofollow">Text Embeddings Inference API</a> directly as:',yl,ie,wl,oe,Ul,pe,ct='<a href="https://huggingface.co/datasets/HuggingFaceFW/finewiki" rel="nofollow"><code>HuggingFaceFW/finewiki</code></a> won’t be used since it contains 325 language subsets, and in this example we’ll be focused on the English (<code>en</code>) subset only, which contains 6.61 million rows that we’ll filter down to 100,000 for the example, but you could use either another subset or another portion out of the English subset.',ul,ce,dt='<img src="https://cdn-uploads.huggingface.co/production/uploads/62596f9e1c0a084224b93e00/nmYXgDCjHwhQpq5NaB4Uv.png" alt="FineWiki: The finest knowledge from the Free Encyclopedia"/>',ml,de,rt='To filter down the rows, we didn’t kept 100,000 random rows, but rather tokenized all of those with the EmbeddingGemma tokenizer and given that the maximum input length is 2048, we only considered rows where the length of the <code>input_ids</code> was lower than 2048, to prevent from truncating larger sequences if those were exceeding 2048. The outcome of this filtering has been uploaded to the Hugging Face Hub at <a href="https://huggingface.co/google-cloud-partnership/finewiki-en-100k" rel="nofollow"><code>google-cloud-partnership/finewiki-en-100k</code></a> containing only the columns <code>text</code> and <code>id</code> to also make the dataset a bit lighter since we only care about those columns in this example.',hl,re,Il,Te,gl,Je,Tt="Once the dataset is downloaded, then you can already install the required Python dependencies:",Cl,je,Jt="<li><code>openai</code> for the OpenAI Python SDK with the Embeddings API client to send the requests.</li> <li><code>pyarrow</code> to iteratively add new rows to a Parquet file (to be later loaded as a Hugging Face dataset).</li>",bl,ye,Al,we,jt="And then run the following Python snippet which sends requests to the Cloud Run service URL to the OpenAI-compatible endpoint <code>/v1/embeddings</code> on Text Embeddings Inference, with the identity token for the service account (which needs to be rotated every hour as it expires).",fl,Ue,El,C,Nl,ue,yt="Then you can read the <code>embeddings.parquet</code> file into a Hugging Face Dataset and upload the generated embeddings to the Hugging Face Hub as:",kl,me,Bl,he,wt='You can find the generated dataset with the embeddings at <a href="https://huggingface.co/datasets/google-cloud-partnership/finewiki-en-100k-embeddings" rel="nofollow"><code>google-cloud-partnership/finewiki-en-100k-embeddings</code></a>.',Rl,Ie,Ut='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/google-cloud/examples/cloud-run/finewiki-embeddings-with-embedding-gemma/embeddings-dataset.png" alt="FineWiki English 100K entries with embeddings"/>',$l,ge,ut='Alternatively, you can also keep it locally or insert it into a vector database. As next steps on how to use the pre-computed embeddings, see <a href="https://colab.research.google.com/github/apache/beam/blob/master/examples/notebooks/beam-ml/alloydb_product_catalog_embeddings.ipynb" rel="nofollow">Vector Embedding Ingestion with Apache Beam and AlloyDB</a>, or also <a href="https://firebase.google.com/docs/firestore/vector-search" rel="nofollow">Search with vector embeddings | Firestore Documentation</a>.',Vl,Ce,vl,be,mt='To avoid inadvertent charges, e.g., if the Cloud Run services are inadvertently invoked more times than your monthly Cloud Run invocation allocation, you should delete the Cloud Run Service, either go to the Cloud Run Console at <a href="https://console.cloud.google.com/run" rel="nofollow">https://console.cloud.google.com/run</a> and delete the <code>google--embeddinggemma-300</code> service; or run the following <code>gcloud</code> command:',Wl,Ae,Zl,fe,ht="Additionally, as you created the service account for this specific service, it might make sense to remove it too:",Sl,Ee,Ql,Ne,Gl,ke,It='<li><a href="https://docs.cloud.google.com/sdk/gcloud/reference/run/deploy" rel="nofollow">gcloud run deploy | Google Cloud SDK</a></li> <li><a href="https://huggingface.co/datasets/HuggingFaceFW/finewiki" rel="nofollow">FineWiki: The finest knowledge from the Free Encyclopedia</a></li> <li><a href="https://developers.googleblog.com/en/introducing-embeddinggemma/" rel="nofollow">Introducing EmbeddingGemma: The Best-in-Class Open Model for On-Device Embeddings</a></li> <li><a href="https://platform.openai.com/docs/guides/embeddings?lang=python" rel="nofollow">Vector embeddings | OpenAI Developers</a></li>',Fl,Be,Yl,Re,Xl;return b=new Vt({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),A=new u({props:{title:"100,000 FineWiki embeddings with EmbeddingGemma on Cloud Run",local:"100000-finewiki-embeddings-with-embeddinggemma-on-cloud-run",headingTag:"h1"}}),k=new u({props:{title:"Setup and Requirements",local:"setup-and-requirements",headingTag:"h2"}}),I=new _l({props:{$$slots:{default:[Wt]},$$scope:{ctx:h}}}),$=new u({props:{title:"Enable APIs and Set environment variables",local:"enable-apis-and-set-environment-variables",headingTag:"h2"}}),V=new u({props:{title:"Enable APIs",local:"enable-apis",headingTag:"h3"}}),W=new w({props:{code:"IWdjbG91ZCUyMHNlcnZpY2VzJTIwZW5hYmxlJTIwcnVuLmdvb2dsZWFwaXMuY29tJTIwc2VjcmV0bWFuYWdlci5nb29nbGVhcGlzLmNvbQ==",highlighted:"!gcloud services enable run.googleapis.com secretmanager.googleapis.com",wrap:!1}}),Z=new u({props:{title:"Set environment variables",local:"set-environment-variables",headingTag:"h3"}}),Q=new w({props:{code:"JTI1ZW52JTIwUFJPSkVDVF9JRCUyMCUzQ1BST0pFQ1RfSUQlM0UlMEElMjVlbnYlMjBMT0NBVElPTiUyMHVzLWNlbnRyYWwxJTBBJTI1ZW52JTIwQ09OVEFJTkVSX1VSSSUyMGdoY3IuaW8lMkZodWdnaW5nZmFjZSUyRnRleHQtZW1iZWRkaW5ncy1pbmZlcmVuY2UlM0E4OS0xLjklMEElMjVlbnYlMjBTRVJWSUNFX05BTUUlMjBnb29nbGUtLWVtYmVkZGluZ2dlbW1hLTMwMG0lMEElMjVlbnYlMjBTRVJWSUNFX0FDQ09VTlQlMjBnb29nbGUtLWVtYmVkZGluZ2dlbW1hLTMwMG0tLXNh",highlighted:`%env PROJECT_ID <PROJECT_ID> | |
| %env LOCATION us-central1 | |
| %env CONTAINER_URI ghcr.io/huggingface/text-embeddings-inference:<span class="hljs-number">89</span>-<span class="hljs-number">1.9</span> | |
| %env SERVICE_NAME google--embeddinggemma-300m | |
| %env SERVICE_ACCOUNT google--embeddinggemma-300m--sa`,wrap:!1}}),G=new u({props:{title:"Create HF_TOKEN secret",local:"create-hftoken-secret",headingTag:"h2"}}),g=new _l({props:{warning:!0,$$slots:{default:[Zt]},$$scope:{ctx:h}}}),Y=new w({props:{code:"IXByaW50ZiUyMCUzQ0hGX1RPS0VOJTNFJTIwJTdDJTIwZ2Nsb3VkJTIwc2VjcmV0cyUyMGNyZWF0ZSUyMEhGX1RPS0VOJTIwLS1kYXRhLWZpbGUlM0Qt",highlighted:"!printf <HF_TOKEN> | gcloud secrets create HF_TOKEN --data-file=-",wrap:!1}}),X=new u({props:{title:"Create a service account",local:"create-a-service-account",headingTag:"h2"}}),H=new w({props:{code:"IWdjbG91ZCUyMGlhbSUyMHNlcnZpY2UtYWNjb3VudHMlMjBjcmVhdGUlMjAlMjRTRVJWSUNFX0FDQ09VTlRfTkFNRSUyMC0tZGlzcGxheS1uYW1lJTNEJTIyQ2xvdWQlMjBSdW4lMjBTZXJ2aWNlJTIwQWNjb3VudCUyMGZvciUyMEVtYmVkZGluZ0dlbW1hJTIy",highlighted:'!gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --display-name=<span class="hljs-string">"Cloud Run Service Account for EmbeddingGemma"</span>',wrap:!1}}),q=new w({props:{code:"IWdjbG91ZCUyMHByb2plY3RzJTIwYWRkLWlhbS1wb2xpY3ktYmluZGluZyUyMCUyNFBST0pFQ1RfSUQlMjAlNUMlMEElMjAlMjAlMjAlMjAtLW1lbWJlciUyMHNlcnZpY2VBY2NvdW50JTNBJTI0U0VSVklDRV9BQ0NPVU5UJTQwJTI0UFJPSkVDVF9JRC5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tcm9sZSUzRHJvbGVzJTJGc2VjcmV0bWFuYWdlci5zZWNyZXRBY2Nlc3Nvcg==",highlighted:`!gcloud projects add-iam-policy-binding $PROJECT_ID \\ | |
| --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \\ | |
| --role=roles/secretmanager.secretAccessor`,wrap:!1}}),L=new u({props:{title:"Deploy the service",local:"deploy-the-service",headingTag:"h2"}}),K=new w({props:{code:"IWdjbG91ZCUyMHJ1biUyMGRlcGxveSUyMCUyNFNFUlZJQ0VfTkFNRSUyMCU1QyUwQSUyMCUyMCUyMCUyMC0taW1hZ2UlM0QlMjRDT05UQUlORVJfVVJJJTIwJTVDJTBBJTIwJTIwJTIwJTIwLS1hcmdzJTNEJTIyLS1tb2RlbC1pZCUzRGdvb2dsZSUyRmVtYmVkZGluZ2dlbW1hLTMwMG0lMkMtLW1heC1jbGllbnQtYmF0Y2gtc2l6ZSUzRDE2JTJDLS1tYXgtYmF0Y2gtdG9rZW5zJTNEMzI3NjglMkMtLW1heC1jb25jdXJyZW50LXJlcXVlc3RzJTNEMTYlMjIlMjAlNUMlMEElMjAlMjAlMjAlMjAtLXNldC1zZWNyZXRzJTNEJTIySEZfVE9LRU4lM0RIRl9UT0tFTiUzQWxhdGVzdCUyMiUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tcG9ydCUzRDgwODAlMjAlNUMlMEElMjAlMjAlMjAlMjAtLXNlcnZpY2UtYWNjb3VudCUyMCUyNFNFUlZJQ0VfQUNDT1VOVCU0MCUyNFBST0pFQ1RfSUQuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20lMjAlNUMlMEElMjAlMjAlMjAlMjAtLWNwdSUzRDglMjAlNUMlMEElMjAlMjAlMjAlMjAtLW1lbW9yeSUzRDMyR2klMjAlNUMlMEElMjAlMjAlMjAlMjAtLW5vLWNwdS10aHJvdHRsaW5nJTIwJTVDJTBBJTIwJTIwJTIwJTIwLS1uby1ncHUtem9uYWwtcmVkdW5kYW5jeSUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tc3RhcnR1cC1wcm9iZSUyMHRjcFNvY2tldC5wb3J0JTNEODA4MCUyQ2luaXRpYWxEZWxheVNlY29uZHMlM0QyNDAlMkNmYWlsdXJlVGhyZXNob2xkJTNEMSUyQ3RpbWVvdXRTZWNvbmRzJTNEMjQwJTJDcGVyaW9kU2Vjb25kcyUzRDI0MCUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tZ3B1JTNEMSUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tZ3B1LXR5cGUlM0RudmlkaWEtbDQlMjAlNUMlMEElMjAlMjAlMjAlMjAtLW1heC1pbnN0YW5jZXMlM0QzJTIwJTVDJTBBJTIwJTIwJTIwJTIwLS1jb25jdXJyZW5jeSUzRDE2JTIwJTVDJTBBJTIwJTIwJTIwJTIwLS1yZWdpb24lM0QlMjRMT0NBVElPTiUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tdGltZW91dCUzRDUwMCUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tbm8tYWxsb3ctdW5hdXRoZW50aWNhdGVk",highlighted:`!gcloud run deploy $SERVICE_NAME \\ | |
| --image=$CONTAINER_URI \\ | |
| --args=<span class="hljs-string">"--model-id=google/embeddinggemma-300m,--max-client-batch-size=16,--max-batch-tokens=32768,--max-concurrent-requests=16"</span> \\ | |
| --<span class="hljs-built_in">set</span>-secrets=<span class="hljs-string">"HF_TOKEN=HF_TOKEN:latest"</span> \\ | |
| --port=<span class="hljs-number">8080</span> \\ | |
| --service-account $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \\ | |
| --cpu=<span class="hljs-number">8</span> \\ | |
| --memory=32Gi \\ | |
| --no-cpu-throttling \\ | |
| --no-gpu-zonal-redundancy \\ | |
| --startup-probe tcpSocket.port=<span class="hljs-number">8080</span>,initialDelaySeconds=<span class="hljs-number">240</span>,failureThreshold=<span class="hljs-number">1</span>,timeoutSeconds=<span class="hljs-number">240</span>,periodSeconds=<span class="hljs-number">240</span> \\ | |
| --gpu=<span class="hljs-number">1</span> \\ | |
| --gpu-<span class="hljs-built_in">type</span>=nvidia-l4 \\ | |
| --<span class="hljs-built_in">max</span>-instances=<span class="hljs-number">3</span> \\ | |
| --concurrency=<span class="hljs-number">16</span> \\ | |
| --region=$LOCATION \\ | |
| --timeout=<span class="hljs-number">500</span> \\ | |
| --no-allow-unauthenticated`,wrap:!1}}),ee=new u({props:{title:"Send requests to the service",local:"send-requests-to-the-service",headingTag:"h2"}}),se=new w({props:{code:"IWdjbG91ZCUyMHJ1biUyMHNlcnZpY2VzJTIwYWRkLWlhbS1wb2xpY3ktYmluZGluZyUyMCUyNFNFUlZJQ0VfTkFNRSUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tbWVtYmVyJTNEJTIyc2VydmljZUFjY291bnQlM0ElMjRTRVJWSUNFX0FDQ09VTlRfTkFNRSU0MCUyNFBST0pFQ1RfSUQuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20lMjIlMjAlNUMlMEElMjAlMjAlMjAlMjAtLXJvbGUlM0QlMjJyb2xlcyUyRnJ1bi5pbnZva2VyJTIy",highlighted:`!gcloud run services add-iam-policy-binding $SERVICE_NAME \\ | |
| --member=<span class="hljs-string">"serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com"</span> \\ | |
| --role=<span class="hljs-string">"roles/run.invoker"</span>`,wrap:!1}}),ae=new w({props:{code:"IWN1cmwlMjAlMjQoZ2Nsb3VkJTIwcnVuJTIwc2VydmljZXMlMjBkZXNjcmliZSUyMCUyNFNFUlZJQ0VfTkFNRSUyMC0tcmVnaW9uJTIwJTI0TE9DQVRJT04lMjAtLWZvcm1hdCUyMHZhbHVlKHN0YXR1cy51cmwpKSUyRnYxJTJGZW1iZWRkaW5ncyUyMCU1QyUwQSUyMCUyMCUyMCUyMC1IJTIwJTIyQXV0aG9yaXphdGlvbiUzQSUyMEJlYXJlciUyMCUyNChnY2xvdWQlMjBhdXRoJTIwcHJpbnQtaWRlbnRpdHktdG9rZW4lMjAtLWltcGVyc29uYXRlLXNlcnZpY2UtYWNjb3VudCUyMCUyNFNFUlZJQ0VfQUNDT1VOVCU0MCUyNFBST0pFQ1RfSUQuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20pJTIyJTIwJTVDJTBBJTIwJTIwJTIwJTIwLUglMjAlMjJDb250ZW50LVR5cGUlM0ElMjBhcHBsaWNhdGlvbiUyRmpzb24lMjIlMjAlNUMlMEElMjAlMjAlMjAlMjAtZCUyMCclN0IlMjJtb2RlbCUyMiUzQSUyMmdvb2dsZSUyRmVtYmVkZGluZ2dlbW1hLTMwMG0lMjIlMkMlMjJpbnB1dCUyMiUzQSUyMnRhc2slM0ElMjBzZWFyY2glMjByZXN1bHQlMjAlN0MlMjBxdWVyeSUzQSUyMFdoaWNoJTIwcGxhbmV0JTIwaXMlMjBrbm93biUyMGFzJTIwdGhlJTIwUmVkJTIwUGxhbmV0JTNGJTIyJTdEJyUyMCU1QyUwQSUyMCUyMCUyMCUyMC1zUyUyMCU3QyUyMGpx",highlighted:`!curl $(gcloud run services describe $SERVICE_NAME --region $LOCATION --<span class="hljs-built_in">format</span> value(status.url))/v1/embeddings \\ | |
| -H <span class="hljs-string">"Authorization: Bearer $(gcloud auth print-identity-token --impersonate-service-account $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com)"</span> \\ | |
| -H <span class="hljs-string">"Content-Type: application/json"</span> \\ | |
| -d <span class="hljs-string">'{"model":"google/embeddinggemma-300m","input":"task: search result | query: Which planet is known as the Red Planet?"}'</span> \\ | |
| -sS | jq`,wrap:!1}}),ie=new w({props:{code:"IWN1cmwlMjAlMjQoZ2Nsb3VkJTIwcnVuJTIwc2VydmljZXMlMjBkZXNjcmliZSUyMCUyNFNFUlZJQ0VfTkFNRSUyMC0tcmVnaW9uJTIwJTI0TE9DQVRJT04lMjAtLWZvcm1hdCUyMHZhbHVlKHN0YXR1cy51cmwpKSUyRmVtYmVkJTIwJTVDJTBBJTIwJTIwJTIwJTIwLUglMjAlMjJBdXRob3JpemF0aW9uJTNBJTIwQmVhcmVyJTIwJTI0KGdjbG91ZCUyMGF1dGglMjBwcmludC1pZGVudGl0eS10b2tlbiUyMC0taW1wZXJzb25hdGUtc2VydmljZS1hY2NvdW50JTIwJTI0U0VSVklDRV9BQ0NPVU5UJTQwJTI0UFJPSkVDVF9JRC5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSklMjIlMjAlNUMlMEElMjAlMjAlMjAlMjAtSCUyMCUyMkNvbnRlbnQtVHlwZSUzQSUyMGFwcGxpY2F0aW9uJTJGanNvbiUyMiUyMCU1QyUwQSUyMCUyMCUyMCUyMC1kJTIwJyU3QiUyMmlucHV0cyUyMiUzQSUyMldoaWNoJTIwcGxhbmV0JTIwaXMlMjBrbm93biUyMGFzJTIwdGhlJTIwUmVkJTIwUGxhbmV0JTNGJTIyJTJDJTIycHJvbXB0X25hbWUlMjIlM0ElMjJxdWVyeSUyMiU3RCclMjAlNUMlMEElMjAlMjAlMjAlMjAtc1MlMjAlN0MlMjBqcQ==",highlighted:`!curl $(gcloud run services describe $SERVICE_NAME --region $LOCATION --<span class="hljs-built_in">format</span> value(status.url))/embed \\ | |
| -H <span class="hljs-string">"Authorization: Bearer $(gcloud auth print-identity-token --impersonate-service-account $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com)"</span> \\ | |
| -H <span class="hljs-string">"Content-Type: application/json"</span> \\ | |
| -d <span class="hljs-string">'{"inputs":"Which planet is known as the Red Planet?","prompt_name":"query"}'</span> \\ | |
| -sS | jq`,wrap:!1}}),oe=new u({props:{title:"Compute 100,000 FineWiki embeddings",local:"compute-100000-finewiki-embeddings",headingTag:"h2"}}),re=new w({props:{code:"JTIwJTI1cGlwJTIwaW5zdGFsbCUyMGRhdGFzZXRzJTIwLS11cGdyYWRlJTIwLS1xdWlldA==",highlighted:" %pip install datasets --upgrade --quiet",wrap:!1}}),Te=new w({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBZGF0YXNldCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnb29nbGUtY2xvdWQtcGFydG5lcnNoaXAlMkZmaW5ld2lraS1lbi0xMDBrJTIyJTJDJTIwc3BsaXQlM0QlMjJ0cmFpbiUyMiklMEFkYXRhc2V0",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| dataset = load_dataset(<span class="hljs-string">"google-cloud-partnership/finewiki-en-100k"</span>, split=<span class="hljs-string">"train"</span>) | |
| dataset`,wrap:!1}}),ye=new w({props:{code:"JTI1cGlwJTIwaW5zdGFsbCUyMHB5YXJyb3clMjBvcGVuYWklMjAtLXVwZ3JhZGUlMjAtLXF1aWV0",highlighted:"%pip install pyarrow openai --upgrade --quiet",wrap:!1}}),Ue=new w({props:{code:"aW1wb3J0JTIwYXN5bmNpbyUwQWltcG9ydCUyMG9zJTBBaW1wb3J0JTIwc3VicHJvY2VzcyUwQSUwQWltcG9ydCUyMHB5YXJyb3clMjBhcyUyMHBhJTBBaW1wb3J0JTIwcHlhcnJvdy5wYXJxdWV0JTIwYXMlMjBwcSUwQWZyb20lMjBvcGVuYWklMjBpbXBvcnQlMjBBc3luY09wZW5BSSUwQSUwQUJBVENIX1NJWkUlMjAlM0QlMjAxNiUwQU1BWF9DT05DVVJSRU5UX1JFUVVFU1RTJTIwJTNEJTIwMTYlMEFQQVJRVUVUX0ZJTEUlMjAlM0QlMjAlMjJlbWJlZGRpbmdzLnBhcnF1ZXQlMjIlMEElMEElMEFCQVNFX1VSTCUyMCUzRCUyMCglMEElMjAlMjAlMjAlMjBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJnY2xvdWQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJydW4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJzZXJ2aWNlcyUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMmRlc2NyaWJlJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3MuZ2V0ZW52KCUyMlNFUlZJQ0VfTkFNRSUyMiklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjItLXJlZ2lvbiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9zLmdldGVudiglMjJMT0NBVElPTiUyMiklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjItLWZvcm1hdCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnZhbHVlKHN0YXR1cy51cmwpJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVEJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMC5kZWNvZGUoJTIydXRmLTglMjIpJTBBJTIwJTIwJTIwJTIwLnN0cmlwKCklMEEpJTBBJTBBQVBJX0tFWSUyMCUzRCUyMCglMEElMjAlMjAlMjAlMjBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJnY2xvdWQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJhdXRoJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIycHJpbnQtaWRlbnRpdHktdG9rZW4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjItLWltcGVyc29uYXRlLXNlcnZpY2UtYWNjb3VudCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGYlMjIlN0Jvcy5nZXRlbnYoJ1NFUlZJQ0VfQUNDT1VOVF9OQU1FJyklN0QlNDAlN0Jvcy5nZXRlbnYoJ1BST0pFQ1RfSUQnKSU3RC5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1RCUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAuZGVjb2RlKCUyMnV0Zi04JTIyKSUwQSUyMCUyMCUyMCUyMC5zdHJpcCgpJTBBKSUwQSUwQWNsaWVudCUyMCUzRCUyMEFzeW5jT3BlbkFJKGJhc2VfdXJsJTNEZiUyMiU3QkJBU0VfVVJMJTdEJTJGdjElMjIlMkMlMjBhcGlfa2V5JTNEQVBJX0tFWSklMEElMEElMEFhc3luYyUyMGRlZiUyMGZldGNoX2VtYmVkZGluZ3MoYmF0Y2glM0ElMjBsaXN0JTJDJTIwYmF0Y2hfaWQlM0ElMjBpbnQpJTIwLSUzRSUyMHR1cGxlJTVCZGljdCUyMCU3QyUyME5vbmUlMkMlMjBpbnQlNUQlM0ElMEElMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBhd2FpdCUyMGNsaWVudC5lbWJlZGRpbmdzLmNyZWF0ZShpbnB1dCUzRGJhdGNoJTJDJTIwbW9kZWwlM0QlMjJnb29nbGUlMkZlbWJlZGRpbmdnZW1tYS0zMDBtJTIyKSUyQyUyMGJhdGNoX2lkJTBBJTIwJTIwJTIwJTIwZXhjZXB0JTIwRXhjZXB0aW9uJTIwYXMlMjBlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQoZiUyMkVycm9yJTIwZm9yJTIwYmF0Y2glMjAlN0JiYXRjaF9pZCU3RCUzQSUyMCU3QmUlN0QlMjIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwTm9uZSUyQyUyMGJhdGNoX2lkJTBBJTBBJTBBYXN5bmMlMjBkZWYlMjBnZW5lcmF0ZV9lbWJlZGRpbmdzKCklMjAtJTNFJTIwTm9uZSUzQSUwQSUyMCUyMCUyMCUyMHNlbWFwaG9yZSUyMCUzRCUyMGFzeW5jaW8uU2VtYXBob3JlKE1BWF9DT05DVVJSRU5UX1JFUVVFU1RTKSUwQSUyMCUyMCUyMCUyMHdyaXRlciUyMCUzRCUyME5vbmUlMEElMjAlMjAlMjAlMjBzY2hlbWElMjAlM0QlMjBwYS5zY2hlbWEoJTVCKCUyMmlkJTIyJTJDJTIwcGEuc3RyaW5nKCkpJTJDJTIwKCUyMnRleHQlMjIlMkMlMjBwYS5zdHJpbmcoKSklMkMlMjAoJTIyZW1iZWRkaW5nJTIyJTJDJTIwcGEubGlzdF8ocGEuZmxvYXQzMigpKSklNUQpJTBBJTBBJTIwJTIwJTIwJTIwYXN5bmMlMjBkZWYlMjBib3VuZGVkX2ZldGNoKGJhdGNoJTJDJTIwYmF0Y2hfaWQpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXN5bmMlMjB3aXRoJTIwc2VtYXBob3JlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwYXdhaXQlMjBmZXRjaF9lbWJlZGRpbmdzKGJhdGNoJTJDJTIwYmF0Y2hfaWQpJTBBJTBBJTIwJTIwJTIwJTIwdGFza3MlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjBiYXRjaF9tZXRhZGF0YSUyMCUzRCUyMCU3QiU3RCUwQSUyMCUyMCUyMCUyMHRvdGFsX3Byb2Nlc3NlZCUyMCUzRCUyMDAlMEElMEElMjAlMjAlMjAlMjBmb3IlMjBpZHglMkMlMjBiYXRjaCUyMGluJTIwZW51bWVyYXRlKGRhdGFzZXQuYmF0Y2goYmF0Y2hfc2l6ZSUzREJBVENIX1NJWkUpKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJhdGNoX21ldGFkYXRhJTVCaWR4JTVEJTIwJTNEJTIwJTdCJTIyaWRzJTIyJTNBJTIwYmF0Y2glNUIlMjJpZCUyMiU1RCUyQyUyMCUyMnRleHRzJTIyJTNBJTIwYmF0Y2glNUIlMjJ0ZXh0JTIyJTVEJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGFza3MuYXBwZW5kKGJvdW5kZWRfZmV0Y2goYmF0Y2glNUIlMjJ0ZXh0JTIyJTVEJTJDJTIwaWR4KSklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGxlbih0YXNrcyklMjAlM0UlM0QlMjBNQVhfQ09OQ1VSUkVOVF9SRVFVRVNUUyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdyaXRlciUyMCUzRCUyMGF3YWl0JTIwcHJvY2Vzc19hbmRfd3JpdGUodGFza3MlMkMlMjBiYXRjaF9tZXRhZGF0YSUyQyUyMHdyaXRlciUyQyUyMHNjaGVtYSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0b3RhbF9wcm9jZXNzZWQlMjAlMkIlM0QlMjBCQVRDSF9TSVpFJTIwKiUyMGxlbih0YXNrcyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0YXNrcy5jbGVhcigpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmF0Y2hfbWV0YWRhdGEuY2xlYXIoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50KGYlMjJQcm9jZXNzZWQlMjAlN0J0b3RhbF9wcm9jZXNzZWQlN0QlMjByb3dzJTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME5PVEUlM0ElMjBUbyUyMHByZXZlbnQlMjB0aGUlMjBpZGVudGl0eSUyMHRva2VuJTIwZnJvbSUyMGV4cGlyaW5nJTJDJTIwd2UlMjBnZW5lcmF0ZSUyMGElMjBuZXclMjBvbmUlMjBhZnRlciUyMDE2JTIwKiUyMDE2JTIwcm93cyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGFyZSUyMHByb2Nlc3NlZCUyMGkuZS4lMkMlMjBhZnRlciUyMDE2JTIwcmVxdWVzdHMlMjB3aXRoJTIwYSUyMGJhdGNoJTIwc2l6ZSUyMG9mJTIwMTYlMjBhcmUlMjBwcm9jZXNzZWQuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2xpZW50LmFwaV9rZXklMjAlM0QlMjAoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyZ2Nsb3VkJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyYXV0aCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnByaW50LWlkZW50aXR5LXRva2VuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyLS1pbXBlcnNvbmF0ZS1zZXJ2aWNlLWFjY291bnQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmJTIyJTdCb3MuZ2V0ZW52KCdTRVJWSUNFX0FDQ09VTlRfTkFNRScpJTdEJTQwJTdCb3MuZ2V0ZW52KCdQUk9KRUNUX0lEJyklN0QuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmRlY29kZSglMjJ1dGYtOCUyMiklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAuc3RyaXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMEElMjAlMjAlMjAlMjBpZiUyMHRhc2tzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd3JpdGVyJTIwJTNEJTIwYXdhaXQlMjBwcm9jZXNzX2FuZF93cml0ZSh0YXNrcyUyQyUyMGJhdGNoX21ldGFkYXRhJTJDJTIwd3JpdGVyJTJDJTIwc2NoZW1hKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRvdGFsX3Byb2Nlc3NlZCUyMCUyQiUzRCUyMEJBVENIX1NJWkUlMjAqJTIwbGVuKHRhc2tzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50KGYlMjJQcm9jZXNzZWQlMjAlN0J0b3RhbF9wcm9jZXNzZWQlN0QlMjByb3dzJTIyKSUwQSUwQSUyMCUyMCUyMCUyMGlmJTIwd3JpdGVyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd3JpdGVyLmNsb3NlKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyRW1iZWRkaW5ncyUyMHNhdmVkJTIwdG8lMjAlN0JQQVJRVUVUX0ZJTEUlN0QlMjIpJTBBJTBBJTBBYXN5bmMlMjBkZWYlMjBwcm9jZXNzX2FuZF93cml0ZSh0YXNrcyUyQyUyMGJhdGNoX21ldGFkYXRhJTJDJTIwd3JpdGVyJTJDJTIwc2NoZW1hKSUyMC0lM0UlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwcmVzcG9uc2VzJTIwJTNEJTIwYXdhaXQlMjBhc3luY2lvLmdhdGhlcigqdGFza3MlMkMlMjByZXR1cm5fZXhjZXB0aW9ucyUzRFRydWUpJTBBJTBBJTIwJTIwJTIwJTIwcm93cyUyMCUzRCUyMCU1QiU1RCUwQSUyMCUyMCUyMCUyMGZvciUyMHJlc3VsdCUyMGluJTIwcmVzcG9uc2VzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBpc2luc3RhbmNlKHJlc3VsdCUyQyUyMEV4Y2VwdGlvbiklMjBvciUyMHJlc3VsdCU1QjAlNUQlMjBpcyUyME5vbmUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb250aW51ZSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3BvbnNlJTJDJTIwYmF0Y2hfaWR4JTIwJTNEJTIwcmVzdWx0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWV0YWRhdGElMjAlM0QlMjBiYXRjaF9tZXRhZGF0YS5nZXQoYmF0Y2hfaWR4KSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbm90JTIwbWV0YWRhdGElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb250aW51ZSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGlkXyUyQyUyMHRleHQlMkMlMjBkYXRhJTIwaW4lMjB6aXAobWV0YWRhdGElNUIlMjJpZHMlMjIlNUQlMkMlMjBtZXRhZGF0YSU1QiUyMnRleHRzJTIyJTVEJTJDJTIwcmVzcG9uc2UuZGF0YSklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByb3dzLmFwcGVuZCglN0IlMjJpZCUyMiUzQSUyMGlkXyUyQyUyMCUyMnRleHQlMjIlM0ElMjB0ZXh0JTJDJTIwJTIyZW1iZWRkaW5nJTIyJTNBJTIwZGF0YS5lbWJlZGRpbmclN0QpJTBBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMldyaXRpbmclMjAlN0JsZW4ocm93cyklN0QlMjByb3dzJTIwaW50byUyMCU3QlBBUlFVRVRfRklMRSU3RCUyMiklMEElMjAlMjAlMjAlMjBpZiUyMHJvd3MlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0YWJsZSUyMCUzRCUyMHBhLlRhYmxlLmZyb21fcHlsaXN0KHJvd3MlMkMlMjBzY2hlbWElM0RzY2hlbWEpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjB3cml0ZXIlMjBpcyUyME5vbmUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3cml0ZXIlMjAlM0QlMjBwcS5QYXJxdWV0V3JpdGVyKFBBUlFVRVRfRklMRSUyQyUyMHNjaGVtYSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3cml0ZXIud3JpdGVfdGFibGUodGFibGUpJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwd3JpdGVyJTBBJTBBJTBBYXdhaXQlMjBnZW5lcmF0ZV9lbWJlZGRpbmdzKCk=",highlighted:`<span class="hljs-keyword">import</span> asyncio | |
| <span class="hljs-keyword">import</span> os | |
| <span class="hljs-keyword">import</span> subprocess | |
| <span class="hljs-keyword">import</span> pyarrow <span class="hljs-keyword">as</span> pa | |
| <span class="hljs-keyword">import</span> pyarrow.parquet <span class="hljs-keyword">as</span> pq | |
| <span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> AsyncOpenAI | |
| BATCH_SIZE = <span class="hljs-number">16</span> | |
| MAX_CONCURRENT_REQUESTS = <span class="hljs-number">16</span> | |
| PARQUET_FILE = <span class="hljs-string">"embeddings.parquet"</span> | |
| BASE_URL = ( | |
| subprocess.check_output( | |
| [ | |
| <span class="hljs-string">"gcloud"</span>, | |
| <span class="hljs-string">"run"</span>, | |
| <span class="hljs-string">"services"</span>, | |
| <span class="hljs-string">"describe"</span>, | |
| os.getenv(<span class="hljs-string">"SERVICE_NAME"</span>), | |
| <span class="hljs-string">"--region"</span>, | |
| os.getenv(<span class="hljs-string">"LOCATION"</span>), | |
| <span class="hljs-string">"--format"</span>, | |
| <span class="hljs-string">"value(status.url)"</span>, | |
| ] | |
| ) | |
| .decode(<span class="hljs-string">"utf-8"</span>) | |
| .strip() | |
| ) | |
| API_KEY = ( | |
| subprocess.check_output( | |
| [ | |
| <span class="hljs-string">"gcloud"</span>, | |
| <span class="hljs-string">"auth"</span>, | |
| <span class="hljs-string">"print-identity-token"</span>, | |
| <span class="hljs-string">"--impersonate-service-account"</span>, | |
| <span class="hljs-string">f"<span class="hljs-subst">{os.getenv(<span class="hljs-string">'SERVICE_ACCOUNT_NAME'</span>)}</span>@<span class="hljs-subst">{os.getenv(<span class="hljs-string">'PROJECT_ID'</span>)}</span>.iam.gserviceaccount.com"</span>, | |
| ] | |
| ) | |
| .decode(<span class="hljs-string">"utf-8"</span>) | |
| .strip() | |
| ) | |
| client = AsyncOpenAI(base_url=<span class="hljs-string">f"<span class="hljs-subst">{BASE_URL}</span>/v1"</span>, api_key=API_KEY) | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">fetch_embeddings</span>(<span class="hljs-params">batch: <span class="hljs-built_in">list</span>, batch_id: <span class="hljs-built_in">int</span></span>) -> <span class="hljs-built_in">tuple</span>[<span class="hljs-built_in">dict</span> | <span class="hljs-literal">None</span>, <span class="hljs-built_in">int</span>]: | |
| <span class="hljs-keyword">try</span>: | |
| <span class="hljs-keyword">return</span> <span class="hljs-keyword">await</span> client.embeddings.create(<span class="hljs-built_in">input</span>=batch, model=<span class="hljs-string">"google/embeddinggemma-300m"</span>), batch_id | |
| <span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e: | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Error for batch <span class="hljs-subst">{batch_id}</span>: <span class="hljs-subst">{e}</span>"</span>) | |
| <span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>, batch_id | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">generate_embeddings</span>() -> <span class="hljs-literal">None</span>: | |
| semaphore = asyncio.Semaphore(MAX_CONCURRENT_REQUESTS) | |
| writer = <span class="hljs-literal">None</span> | |
| schema = pa.schema([(<span class="hljs-string">"id"</span>, pa.string()), (<span class="hljs-string">"text"</span>, pa.string()), (<span class="hljs-string">"embedding"</span>, pa.list_(pa.float32()))]) | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">bounded_fetch</span>(<span class="hljs-params">batch, batch_id</span>): | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> semaphore: | |
| <span class="hljs-keyword">return</span> <span class="hljs-keyword">await</span> fetch_embeddings(batch, batch_id) | |
| tasks = [] | |
| batch_metadata = {} | |
| total_processed = <span class="hljs-number">0</span> | |
| <span class="hljs-keyword">for</span> idx, batch <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(dataset.batch(batch_size=BATCH_SIZE)): | |
| batch_metadata[idx] = {<span class="hljs-string">"ids"</span>: batch[<span class="hljs-string">"id"</span>], <span class="hljs-string">"texts"</span>: batch[<span class="hljs-string">"text"</span>]} | |
| tasks.append(bounded_fetch(batch[<span class="hljs-string">"text"</span>], idx)) | |
| <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(tasks) >= MAX_CONCURRENT_REQUESTS: | |
| writer = <span class="hljs-keyword">await</span> process_and_write(tasks, batch_metadata, writer, schema) | |
| total_processed += BATCH_SIZE * <span class="hljs-built_in">len</span>(tasks) | |
| tasks.clear() | |
| batch_metadata.clear() | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Processed <span class="hljs-subst">{total_processed}</span> rows"</span>) | |
| <span class="hljs-comment"># <span class="hljs-doctag">NOTE:</span> To prevent the identity token from expiring, we generate a new one after 16 * 16 rows</span> | |
| <span class="hljs-comment"># are processed i.e., after 16 requests with a batch size of 16 are processed.</span> | |
| client.api_key = ( | |
| subprocess.check_output( | |
| [ | |
| <span class="hljs-string">"gcloud"</span>, | |
| <span class="hljs-string">"auth"</span>, | |
| <span class="hljs-string">"print-identity-token"</span>, | |
| <span class="hljs-string">"--impersonate-service-account"</span>, | |
| <span class="hljs-string">f"<span class="hljs-subst">{os.getenv(<span class="hljs-string">'SERVICE_ACCOUNT_NAME'</span>)}</span>@<span class="hljs-subst">{os.getenv(<span class="hljs-string">'PROJECT_ID'</span>)}</span>.iam.gserviceaccount.com"</span>, | |
| ] | |
| ) | |
| .decode(<span class="hljs-string">"utf-8"</span>) | |
| .strip() | |
| ) | |
| <span class="hljs-keyword">if</span> tasks: | |
| writer = <span class="hljs-keyword">await</span> process_and_write(tasks, batch_metadata, writer, schema) | |
| total_processed += BATCH_SIZE * <span class="hljs-built_in">len</span>(tasks) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Processed <span class="hljs-subst">{total_processed}</span> rows"</span>) | |
| <span class="hljs-keyword">if</span> writer: | |
| writer.close() | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Embeddings saved to <span class="hljs-subst">{PARQUET_FILE}</span>"</span>) | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">process_and_write</span>(<span class="hljs-params">tasks, batch_metadata, writer, schema</span>) -> <span class="hljs-literal">None</span>: | |
| responses = <span class="hljs-keyword">await</span> asyncio.gather(*tasks, return_exceptions=<span class="hljs-literal">True</span>) | |
| rows = [] | |
| <span class="hljs-keyword">for</span> result <span class="hljs-keyword">in</span> responses: | |
| <span class="hljs-keyword">if</span> <span class="hljs-built_in">isinstance</span>(result, Exception) <span class="hljs-keyword">or</span> result[<span class="hljs-number">0</span>] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>: | |
| <span class="hljs-keyword">continue</span> | |
| response, batch_idx = result | |
| metadata = batch_metadata.get(batch_idx) | |
| <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> metadata: | |
| <span class="hljs-keyword">continue</span> | |
| <span class="hljs-keyword">for</span> id_, text, data <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(metadata[<span class="hljs-string">"ids"</span>], metadata[<span class="hljs-string">"texts"</span>], response.data): | |
| rows.append({<span class="hljs-string">"id"</span>: id_, <span class="hljs-string">"text"</span>: text, <span class="hljs-string">"embedding"</span>: data.embedding}) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Writing <span class="hljs-subst">{<span class="hljs-built_in">len</span>(rows)}</span> rows into <span class="hljs-subst">{PARQUET_FILE}</span>"</span>) | |
| <span class="hljs-keyword">if</span> rows: | |
| table = pa.Table.from_pylist(rows, schema=schema) | |
| <span class="hljs-keyword">if</span> writer <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>: | |
| writer = pq.ParquetWriter(PARQUET_FILE, schema) | |
| writer.write_table(table) | |
| <span class="hljs-keyword">return</span> writer | |
| <span class="hljs-keyword">await</span> generate_embeddings()`,wrap:!1}}),C=new _l({props:{warning:!0,$$slots:{default:[St]},$$scope:{ctx:h}}}),me=new w({props:{code:"b3V0cHV0JTIwJTNEJTIwRGF0YXNldC5mcm9tX3BhcnF1ZXQoUEFSUVVFVF9GSUxFKSUwQW91dHB1dC5wdXNoX3RvX2h1YiglMjJmaW5ld2lraS1lbi0xMDBrLWVtYmVkZGluZ3MlMjIlMkMlMjBzcGxpdCUzRCUyMnRyYWluJTIyKSUwQW91dHB1dA==",highlighted:`output = Dataset.from_parquet(PARQUET_FILE) | |
| output.push_to_hub(<span class="hljs-string">"finewiki-en-100k-embeddings"</span>, split=<span class="hljs-string">"train"</span>) | |
| output`,wrap:!1}}),Ce=new u({props:{title:"Clean up",local:"clean-up",headingTag:"h2"}}),Ae=new w({props:{code:"IWdjbG91ZCUyMHJ1biUyMHNlcnZpY2VzJTIwZGVsZXRlJTIwJTI0U0VSVklDRV9OQU1FJTIwLS1yZWdpb24lMjAlMjRMT0NBVElPTiUyMC0tcXVpZXQ=",highlighted:"!gcloud run services delete $SERVICE_NAME --region $LOCATION --quiet",wrap:!1}}),Ee=new w({props:{code:"IWdjbG91ZCUyMGlhbSUyMHNlcnZpY2UtYWNjb3VudHMlMjBkZWxldGUlMjAlMjRTRVJWSUNFX0FDQ09VTlQlNDAlMjRQUk9KRUNUX0lELmlhbS5nc2VydmljZWFjY291bnQuY29t",highlighted:"!gcloud iam service-accounts delete $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com",wrap:!1}}),Ne=new u({props:{title:"References",local:"references",headingTag:"h2"}}),Be=new vt({props:{source:"https://github.com/huggingface/Google-Cloud-Containers/blob/main/docs/source/examples/cloud-run-finewiki-embeddings-with-embedding-gemma.mdx"}}),{c(){p=M("meta"),U=n(),y=M("p"),m=n(),c(b.$$.fragment),$e=n(),c(A.$$.fragment),Ve=n(),f=M("p"),f.innerHTML=xl,ve=n(),E=M("p"),E.innerHTML=ql,We=n(),N=M("p"),N.innerHTML=Ll,Ze=n(),c(k.$$.fragment),Se=n(),B=M("ul"),B.innerHTML=zl,Qe=n(),R=M("p"),R.innerHTML=Dl,Ge=n(),c(I.$$.fragment),Fe=n(),c($.$$.fragment),Ye=n(),c(V.$$.fragment),Xe=n(),v=M("p"),v.innerHTML=Pl,_e=n(),c(W.$$.fragment),He=n(),c(Z.$$.fragment),xe=n(),S=M("p"),S.textContent=Ol,qe=n(),c(Q.$$.fragment),Le=n(),c(G.$$.fragment),ze=n(),F=M("p"),F.innerHTML=Kl,De=n(),c(g.$$.fragment),Pe=n(),c(Y.$$.fragment),Oe=n(),c(X.$$.fragment),Ke=n(),_=M("p"),_.textContent=et,el=n(),c(H.$$.fragment),ll=n(),x=M("p"),x.innerHTML=lt,tl=n(),c(q.$$.fragment),sl=n(),c(L.$$.fragment),nl=n(),z=M("p"),z.textContent=tt,al=n(),D=M("ul"),D.innerHTML=st,Ml=n(),P=M("p"),P.innerHTML=nt,il=n(),O=M("p"),O.innerHTML=at,ol=n(),c(K.$$.fragment),pl=n(),c(ee.$$.fragment),cl=n(),le=M("p"),le.innerHTML=Mt,dl=n(),te=M("p"),te.innerHTML=it,rl=n(),c(se.$$.fragment),Tl=n(),ne=M("p"),ne.innerHTML=ot,Jl=n(),c(ae.$$.fragment),jl=n(),Me=M("p"),Me.innerHTML=pt,yl=n(),c(ie.$$.fragment),wl=n(),c(oe.$$.fragment),Ul=n(),pe=M("p"),pe.innerHTML=ct,ul=n(),ce=M("p"),ce.innerHTML=dt,ml=n(),de=M("p"),de.innerHTML=rt,hl=n(),c(re.$$.fragment),Il=n(),c(Te.$$.fragment),gl=n(),Je=M("p"),Je.textContent=Tt,Cl=n(),je=M("ul"),je.innerHTML=Jt,bl=n(),c(ye.$$.fragment),Al=n(),we=M("p"),we.innerHTML=jt,fl=n(),c(Ue.$$.fragment),El=n(),c(C.$$.fragment),Nl=n(),ue=M("p"),ue.innerHTML=yt,kl=n(),c(me.$$.fragment),Bl=n(),he=M("p"),he.innerHTML=wt,Rl=n(),Ie=M("p"),Ie.innerHTML=Ut,$l=n(),ge=M("p"),ge.innerHTML=ut,Vl=n(),c(Ce.$$.fragment),vl=n(),be=M("p"),be.innerHTML=mt,Wl=n(),c(Ae.$$.fragment),Zl=n(),fe=M("p"),fe.textContent=ht,Sl=n(),c(Ee.$$.fragment),Ql=n(),c(Ne.$$.fragment),Gl=n(),ke=M("ul"),ke.innerHTML=It,Fl=n(),c(Be.$$.fragment),Yl=n(),Re=M("p"),this.h()},l(e){const l=Rt("svelte-u9bgzb",document.head);p=i(l,"META",{name:!0,content:!0}),l.forEach(t),U=a(e),y=i(e,"P",{}),At(y).forEach(t),m=a(e),d(b.$$.fragment,e),$e=a(e),d(A.$$.fragment,e),Ve=a(e),f=i(e,"P",{"data-svelte-h":!0}),o(f)!=="svelte-1920ugq"&&(f.innerHTML=xl),ve=a(e),E=i(e,"P",{"data-svelte-h":!0}),o(E)!=="svelte-5rmadl"&&(E.innerHTML=ql),We=a(e),N=i(e,"P",{"data-svelte-h":!0}),o(N)!=="svelte-1t0zvlb"&&(N.innerHTML=Ll),Ze=a(e),d(k.$$.fragment,e),Se=a(e),B=i(e,"UL",{"data-svelte-h":!0}),o(B)!=="svelte-p5fvw6"&&(B.innerHTML=zl),Qe=a(e),R=i(e,"P",{"data-svelte-h":!0}),o(R)!=="svelte-utxuyz"&&(R.innerHTML=Dl),Ge=a(e),d(I.$$.fragment,e),Fe=a(e),d($.$$.fragment,e),Ye=a(e),d(V.$$.fragment,e),Xe=a(e),v=i(e,"P",{"data-svelte-h":!0}),o(v)!=="svelte-1tblvpt"&&(v.innerHTML=Pl),_e=a(e),d(W.$$.fragment,e),He=a(e),d(Z.$$.fragment,e),xe=a(e),S=i(e,"P",{"data-svelte-h":!0}),o(S)!=="svelte-dj1pq7"&&(S.textContent=Ol),qe=a(e),d(Q.$$.fragment,e),Le=a(e),d(G.$$.fragment,e),ze=a(e),F=i(e,"P",{"data-svelte-h":!0}),o(F)!=="svelte-1c5hl38"&&(F.innerHTML=Kl),De=a(e),d(g.$$.fragment,e),Pe=a(e),d(Y.$$.fragment,e),Oe=a(e),d(X.$$.fragment,e),Ke=a(e),_=i(e,"P",{"data-svelte-h":!0}),o(_)!=="svelte-7ktf6s"&&(_.textContent=et),el=a(e),d(H.$$.fragment,e),ll=a(e),x=i(e,"P",{"data-svelte-h":!0}),o(x)!=="svelte-vfthf9"&&(x.innerHTML=lt),tl=a(e),d(q.$$.fragment,e),sl=a(e),d(L.$$.fragment,e),nl=a(e),z=i(e,"P",{"data-svelte-h":!0}),o(z)!=="svelte-1tz8iae"&&(z.textContent=tt),al=a(e),D=i(e,"UL",{"data-svelte-h":!0}),o(D)!=="svelte-136c8nf"&&(D.innerHTML=st),Ml=a(e),P=i(e,"P",{"data-svelte-h":!0}),o(P)!=="svelte-17ohuf1"&&(P.innerHTML=nt),il=a(e),O=i(e,"P",{"data-svelte-h":!0}),o(O)!=="svelte-1ephvf"&&(O.innerHTML=at),ol=a(e),d(K.$$.fragment,e),pl=a(e),d(ee.$$.fragment,e),cl=a(e),le=i(e,"P",{"data-svelte-h":!0}),o(le)!=="svelte-1bcg7lo"&&(le.innerHTML=Mt),dl=a(e),te=i(e,"P",{"data-svelte-h":!0}),o(te)!=="svelte-guhf9t"&&(te.innerHTML=it),rl=a(e),d(se.$$.fragment,e),Tl=a(e),ne=i(e,"P",{"data-svelte-h":!0}),o(ne)!=="svelte-10a9fiq"&&(ne.innerHTML=ot),Jl=a(e),d(ae.$$.fragment,e),jl=a(e),Me=i(e,"P",{"data-svelte-h":!0}),o(Me)!=="svelte-1gtz8s6"&&(Me.innerHTML=pt),yl=a(e),d(ie.$$.fragment,e),wl=a(e),d(oe.$$.fragment,e),Ul=a(e),pe=i(e,"P",{"data-svelte-h":!0}),o(pe)!=="svelte-xhoov9"&&(pe.innerHTML=ct),ul=a(e),ce=i(e,"P",{"data-svelte-h":!0}),o(ce)!=="svelte-s63mq2"&&(ce.innerHTML=dt),ml=a(e),de=i(e,"P",{"data-svelte-h":!0}),o(de)!=="svelte-amh0bz"&&(de.innerHTML=rt),hl=a(e),d(re.$$.fragment,e),Il=a(e),d(Te.$$.fragment,e),gl=a(e),Je=i(e,"P",{"data-svelte-h":!0}),o(Je)!=="svelte-17meu9r"&&(Je.textContent=Tt),Cl=a(e),je=i(e,"UL",{"data-svelte-h":!0}),o(je)!=="svelte-ymm42s"&&(je.innerHTML=Jt),bl=a(e),d(ye.$$.fragment,e),Al=a(e),we=i(e,"P",{"data-svelte-h":!0}),o(we)!=="svelte-1ka30cz"&&(we.innerHTML=jt),fl=a(e),d(Ue.$$.fragment,e),El=a(e),d(C.$$.fragment,e),Nl=a(e),ue=i(e,"P",{"data-svelte-h":!0}),o(ue)!=="svelte-1p98518"&&(ue.innerHTML=yt),kl=a(e),d(me.$$.fragment,e),Bl=a(e),he=i(e,"P",{"data-svelte-h":!0}),o(he)!=="svelte-b4t9x4"&&(he.innerHTML=wt),Rl=a(e),Ie=i(e,"P",{"data-svelte-h":!0}),o(Ie)!=="svelte-1gkjh8r"&&(Ie.innerHTML=Ut),$l=a(e),ge=i(e,"P",{"data-svelte-h":!0}),o(ge)!=="svelte-1ck3epr"&&(ge.innerHTML=ut),Vl=a(e),d(Ce.$$.fragment,e),vl=a(e),be=i(e,"P",{"data-svelte-h":!0}),o(be)!=="svelte-le1cd4"&&(be.innerHTML=mt),Wl=a(e),d(Ae.$$.fragment,e),Zl=a(e),fe=i(e,"P",{"data-svelte-h":!0}),o(fe)!=="svelte-1rf5xe8"&&(fe.textContent=ht),Sl=a(e),d(Ee.$$.fragment,e),Ql=a(e),d(Ne.$$.fragment,e),Gl=a(e),ke=i(e,"UL",{"data-svelte-h":!0}),o(ke)!=="svelte-zibdkn"&&(ke.innerHTML=It),Fl=a(e),d(Be.$$.fragment,e),Yl=a(e),Re=i(e,"P",{}),At(Re).forEach(t),this.h()},h(){ft(p,"name","hf:doc:metadata"),ft(p,"content",Gt)},m(e,l){$t(document.head,p),s(e,U,l),s(e,y,l),s(e,m,l),r(b,e,l),s(e,$e,l),r(A,e,l),s(e,Ve,l),s(e,f,l),s(e,ve,l),s(e,E,l),s(e,We,l),s(e,N,l),s(e,Ze,l),r(k,e,l),s(e,Se,l),s(e,B,l),s(e,Qe,l),s(e,R,l),s(e,Ge,l),r(I,e,l),s(e,Fe,l),r($,e,l),s(e,Ye,l),r(V,e,l),s(e,Xe,l),s(e,v,l),s(e,_e,l),r(W,e,l),s(e,He,l),r(Z,e,l),s(e,xe,l),s(e,S,l),s(e,qe,l),r(Q,e,l),s(e,Le,l),r(G,e,l),s(e,ze,l),s(e,F,l),s(e,De,l),r(g,e,l),s(e,Pe,l),r(Y,e,l),s(e,Oe,l),r(X,e,l),s(e,Ke,l),s(e,_,l),s(e,el,l),r(H,e,l),s(e,ll,l),s(e,x,l),s(e,tl,l),r(q,e,l),s(e,sl,l),r(L,e,l),s(e,nl,l),s(e,z,l),s(e,al,l),s(e,D,l),s(e,Ml,l),s(e,P,l),s(e,il,l),s(e,O,l),s(e,ol,l),r(K,e,l),s(e,pl,l),r(ee,e,l),s(e,cl,l),s(e,le,l),s(e,dl,l),s(e,te,l),s(e,rl,l),r(se,e,l),s(e,Tl,l),s(e,ne,l),s(e,Jl,l),r(ae,e,l),s(e,jl,l),s(e,Me,l),s(e,yl,l),r(ie,e,l),s(e,wl,l),r(oe,e,l),s(e,Ul,l),s(e,pe,l),s(e,ul,l),s(e,ce,l),s(e,ml,l),s(e,de,l),s(e,hl,l),r(re,e,l),s(e,Il,l),r(Te,e,l),s(e,gl,l),s(e,Je,l),s(e,Cl,l),s(e,je,l),s(e,bl,l),r(ye,e,l),s(e,Al,l),s(e,we,l),s(e,fl,l),r(Ue,e,l),s(e,El,l),r(C,e,l),s(e,Nl,l),s(e,ue,l),s(e,kl,l),r(me,e,l),s(e,Bl,l),s(e,he,l),s(e,Rl,l),s(e,Ie,l),s(e,$l,l),s(e,ge,l),s(e,Vl,l),r(Ce,e,l),s(e,vl,l),s(e,be,l),s(e,Wl,l),r(Ae,e,l),s(e,Zl,l),s(e,fe,l),s(e,Sl,l),r(Ee,e,l),s(e,Ql,l),r(Ne,e,l),s(e,Gl,l),s(e,ke,l),s(e,Fl,l),r(Be,e,l),s(e,Yl,l),s(e,Re,l),Xl=!0},p(e,[l]){const gt={};l&2&&(gt.$$scope={dirty:l,ctx:e}),I.$set(gt);const Ct={};l&2&&(Ct.$$scope={dirty:l,ctx:e}),g.$set(Ct);const bt={};l&2&&(bt.$$scope={dirty:l,ctx:e}),C.$set(bt)},i(e){Xl||(T(b.$$.fragment,e),T(A.$$.fragment,e),T(k.$$.fragment,e),T(I.$$.fragment,e),T($.$$.fragment,e),T(V.$$.fragment,e),T(W.$$.fragment,e),T(Z.$$.fragment,e),T(Q.$$.fragment,e),T(G.$$.fragment,e),T(g.$$.fragment,e),T(Y.$$.fragment,e),T(X.$$.fragment,e),T(H.$$.fragment,e),T(q.$$.fragment,e),T(L.$$.fragment,e),T(K.$$.fragment,e),T(ee.$$.fragment,e),T(se.$$.fragment,e),T(ae.$$.fragment,e),T(ie.$$.fragment,e),T(oe.$$.fragment,e),T(re.$$.fragment,e),T(Te.$$.fragment,e),T(ye.$$.fragment,e),T(Ue.$$.fragment,e),T(C.$$.fragment,e),T(me.$$.fragment,e),T(Ce.$$.fragment,e),T(Ae.$$.fragment,e),T(Ee.$$.fragment,e),T(Ne.$$.fragment,e),T(Be.$$.fragment,e),Xl=!0)},o(e){J(b.$$.fragment,e),J(A.$$.fragment,e),J(k.$$.fragment,e),J(I.$$.fragment,e),J($.$$.fragment,e),J(V.$$.fragment,e),J(W.$$.fragment,e),J(Z.$$.fragment,e),J(Q.$$.fragment,e),J(G.$$.fragment,e),J(g.$$.fragment,e),J(Y.$$.fragment,e),J(X.$$.fragment,e),J(H.$$.fragment,e),J(q.$$.fragment,e),J(L.$$.fragment,e),J(K.$$.fragment,e),J(ee.$$.fragment,e),J(se.$$.fragment,e),J(ae.$$.fragment,e),J(ie.$$.fragment,e),J(oe.$$.fragment,e),J(re.$$.fragment,e),J(Te.$$.fragment,e),J(ye.$$.fragment,e),J(Ue.$$.fragment,e),J(C.$$.fragment,e),J(me.$$.fragment,e),J(Ce.$$.fragment,e),J(Ae.$$.fragment,e),J(Ee.$$.fragment,e),J(Ne.$$.fragment,e),J(Be.$$.fragment,e),Xl=!1},d(e){e&&(t(U),t(y),t(m),t($e),t(Ve),t(f),t(ve),t(E),t(We),t(N),t(Ze),t(Se),t(B),t(Qe),t(R),t(Ge),t(Fe),t(Ye),t(Xe),t(v),t(_e),t(He),t(xe),t(S),t(qe),t(Le),t(ze),t(F),t(De),t(Pe),t(Oe),t(Ke),t(_),t(el),t(ll),t(x),t(tl),t(sl),t(nl),t(z),t(al),t(D),t(Ml),t(P),t(il),t(O),t(ol),t(pl),t(cl),t(le),t(dl),t(te),t(rl),t(Tl),t(ne),t(Jl),t(jl),t(Me),t(yl),t(wl),t(Ul),t(pe),t(ul),t(ce),t(ml),t(de),t(hl),t(Il),t(gl),t(Je),t(Cl),t(je),t(bl),t(Al),t(we),t(fl),t(El),t(Nl),t(ue),t(kl),t(Bl),t(he),t(Rl),t(Ie),t($l),t(ge),t(Vl),t(vl),t(be),t(Wl),t(Zl),t(fe),t(Sl),t(Ql),t(Gl),t(ke),t(Fl),t(Yl),t(Re)),t(p),j(b,e),j(A,e),j(k,e),j(I,e),j($,e),j(V,e),j(W,e),j(Z,e),j(Q,e),j(G,e),j(g,e),j(Y,e),j(X,e),j(H,e),j(q,e),j(L,e),j(K,e),j(ee,e),j(se,e),j(ae,e),j(ie,e),j(oe,e),j(re,e),j(Te,e),j(ye,e),j(Ue,e),j(C,e),j(me,e),j(Ce,e),j(Ae,e),j(Ee,e),j(Ne,e),j(Be,e)}}}const Gt='{"title":"100,000 FineWiki embeddings with EmbeddingGemma on Cloud Run","local":"100000-finewiki-embeddings-with-embeddinggemma-on-cloud-run","sections":[{"title":"Setup and Requirements","local":"setup-and-requirements","sections":[],"depth":2},{"title":"Enable APIs and Set environment variables","local":"enable-apis-and-set-environment-variables","sections":[{"title":"Enable APIs","local":"enable-apis","sections":[],"depth":3},{"title":"Set environment variables","local":"set-environment-variables","sections":[],"depth":3}],"depth":2},{"title":"Create HF_TOKEN secret","local":"create-hftoken-secret","sections":[],"depth":2},{"title":"Create a service account","local":"create-a-service-account","sections":[],"depth":2},{"title":"Deploy the service","local":"deploy-the-service","sections":[],"depth":2},{"title":"Send requests to the service","local":"send-requests-to-the-service","sections":[],"depth":2},{"title":"Compute 100,000 FineWiki embeddings","local":"compute-100000-finewiki-embeddings","sections":[],"depth":2},{"title":"Clean up","local":"clean-up","sections":[],"depth":2},{"title":"References","local":"references","sections":[],"depth":2}],"depth":1}';function Ft(h){return Nt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class qt extends kt{constructor(p){super(),Bt(this,p,Ft,Qt,Et,{})}}export{qt as component}; | |
Xet Storage Details
- Size:
- 53.5 kB
- Xet hash:
- 83c1e90d72ed895d817896ced714d71f50bb9c9b82f824409281cc800202ef64
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.