{"templateName":"blog-page","canonicalLink":"https://www.snowflake.com/en/blog/engineering/specializing-small-model-sql-autocomplete/","robotsTags":["index","follow"],"cssClassNames":"blog-page page basicpage summit-page","allowedRenditionsWidth":["320","480","640","768","960","1200","1440","1920"],"description":"Discover how Snowflake built a 4B dense model for SQL autocomplete, using context grounding and GRPO to boost precision from 23% to 40%.","language":"en","title":"Building a Snowflake-Native SQL Autocomplete Model","analyticsPageType":"homepage","analyticsCategory":"general","analyticsSubCategory":"","excludeFromAnalytics":false,":mappedPath":"/en/blog/engineering/specializing-small-model-sql-autocomplete/",":items":{"root":{"columnCount":12,"columnClassNames":{"experiencefragment-banner":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-sub-header":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-pre-footer":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-header":"aem-GridColumn aem-GridColumn--default--12","markup_editor-table":"aem-GridColumn aem-GridColumn--default--12","responsivegrid":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-footer":"aem-GridColumn aem-GridColumn--default--12","markup_editor":"aem-GridColumn aem-GridColumn--default--12","container_47873732":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12",":items":{"experiencefragment-banner":{"id":"experiencefragment-2bb3825457","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/pushdown-banner-blank/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/pushdown-banner-blank.xfmodel.json",":type":"snowflake-site/components/experiencefragment"},"experiencefragment-header":{"id":"experiencefragment-e3ec69b15a","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master.xfmodel.json","languageNavPath":"/content/snowflake-site/global/en/blog/engineering/specializing-small-model-sql-autocomplete.languagenav.json",":type":"snowflake-site/components/experiencefragment","appliedCssClassNames":"snowflake-sticky-nav-host"},"experiencefragment-sub-header":{"id":"experiencefragment-0243051071","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/sub-navigation/engineering-blog-sub-nav/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/sub-navigation/engineering-blog-sub-nav.xfmodel.json",":type":"snowflake-site/components/experiencefragment"},"responsivegrid":{"columnCount":12,"columnClassNames":{"container_breadcrumb":"aem-GridColumn aem-GridColumn--default--12","container_main_content":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12",":items":{"container_breadcrumb":{"layout":"RESPONSIVE_GRID","columnCount":12,"columnClassNames":{"breadcrumb":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","id":"blog-page-breadcrumb-indentation",":items":{"breadcrumb":{"id":"breadcrumb-30388deb75","breadcrumbItems":[{"title":"Blog","path":"/en/blog/engineering/","active":false},{"title":"Gen AI","path":"/en/blog/engineering/gen-ai/","active":false},{"title":"Building a Snowflake-Native SQL Autocomplete Model","path":"/en/blog/engineering/specializing-small-model-sql-autocomplete/","active":false}],":type":"snowflake-site/components/blog/breadcrumb"}},":itemsOrder":["breadcrumb"],":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-container"},"container_main_content":{"layout":"RESPONSIVE_GRID","columnCount":12,"columnClassNames":{"flexible_column_container":"aem-GridColumn aem-GridColumn--default--12","related_content":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","id":"main-content",":items":{"flexible_column_container":{"id":"flexible-column-container-cea616b014","propertiesId":"snowflake-blog-template-main-container","type":"2-column-60-40","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"none","bottomPadding":"none","spaceBetween":"none","reverseOnMobile":true,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-8011a57ab5",":items":{"container_hero":{"layout":"RESPONSIVE_GRID","columnCount":12,"columnClassNames":{"blog_hero":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","id":"container-d580fd7194",":items":{"blog_hero":{"id":"blog-hero-979cf243f6","linkedInShareUrl":"https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.snowflake.com%2Fcontent%2Fsnowflake-site%2Fglobal%2Fen%2Fblog%2Fengineering%2Fspecializing-small-model-sql-autocomplete&title=Building+a+Snowflake-Native+SQL+Autocomplete+Model","twitterShareUrl":"https://x.com/intent/post?url=https%3A%2F%2Fwww.snowflake.com%2Fcontent%2Fsnowflake-site%2Fglobal%2Fen%2Fblog%2Fengineering%2Fspecializing-small-model-sql-autocomplete&text=Building+a+Snowflake-Native+SQL+Autocomplete+Model","facebookShareUrl":"https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.snowflake.com%2Fcontent%2Fsnowflake-site%2Fglobal%2Fen%2Fblog%2Fengineering%2Fspecializing-small-model-sql-autocomplete","showClaude":true,"showChatGpt":true,"authors":[{"authorImage":{"id":"image-177b075bd0","height":"1282","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--2e4aa405-02eb-444d-8b60-91e122779701/arun-ponnusamy.jpg?quality=85&preferwebp=true","isLcpImage":false,"width":"1282",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-227e65ca97","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/arun-ponnusamy/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Arun Ponnusamy"}},{"authorImage":{"id":"image-2786f732a8","height":"640","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--97980a53-6310-44b8-9432-150c4beb396d/kelvinsohead.jpg?quality=85&preferwebp=true","alt":"Kelvin So","isLcpImage":false,"width":"637",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-3e1cd9ec55","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/kelvin-so/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Kelvin So"}},{"authorImage":{"id":"image-6b331e5d0a","height":"200","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--d0a2a67d-af6b-4660-bb40-f88540e63a42/khalid.jpg?quality=85&preferwebp=true","alt":"Khalid Bijon","isLcpImage":false,"width":"200",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-70b6b9f68f","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/khalid-bijon/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Khalid Bijon"}},{"authorImage":{"id":"image-889fb46cb4","height":"1631","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--4b737f9b-2d72-411c-b16c-f60326169d8b/yite-wang.jpg?quality=85&preferwebp=true","isLcpImage":false,"width":"1631",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-aba2d1fda0","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/yite-wang/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Yite Wang"}},{"authorImage":{"id":"image-11873b20f7","height":"282","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--6a18c85b-19f5-48ba-baf6-a6cd2e3d69c2/jslee.jpg?quality=85&preferwebp=true","isLcpImage":false,"width":"227",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-87a00ab723","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/jaeseong-lee/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Jaeseong Lee"}},{"authorImage":{"id":"image-07dce713e7","height":"328","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--91e118d5-5e68-4422-b71b-2a33781308d9/yuxiong-headshot.png?quality=85&preferwebp=true","alt":"Yuxiong He","isLcpImage":false,"width":"216",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-034370f5e1","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/yuxiong-he/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Yuxiong He"}},{"authorImage":{"id":"image-a13be82c3d","height":"3557","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--b83797d3-baae-46b4-b8fd-3b89fd88f643/zhewei-yao.jpg?quality=85&preferwebp=true","alt":"Zhewei Yao","isLcpImage":false,"width":"3144",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-4bc41976aa","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/zhewei-yao/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Zhewei Yao"}},{"authorImage":{"id":"image-5817e0dc17","height":"504","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--955c127f-58f0-4065-90ef-7a42f0bf9a29/anni-li.png?quality=85&preferwebp=true","isLcpImage":false,"width":"500",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-4b4a304c98","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/anni-li/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Anni Li"}},{"authorImage":{"id":"image-3ca37aa27e","height":"500","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--bf5e0c24-0465-4596-9480-e9e33612326a/paul-dong.png?quality=85&preferwebp=true","isLcpImage":false,"width":"502",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-dde4212e76","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/paul-dong/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Paul Dong"}},{"authorImage":{"id":"image-79ea363626","height":"502","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--71e41862-4b0f-46ac-87b1-9c2ea6ea07ec/hamid-mousavi.png?quality=85&preferwebp=true","isLcpImage":false,"width":"500",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-3a577ddd17","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/hamid-mousavi/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Hamid Mousavi"}},{"authorImage":{"id":"image-852a2f0bf8","height":"239","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--d26a3e0d-b047-484f-845e-b38cb054daee/yueqin-yin.png?quality=85&preferwebp=true","isLcpImage":false,"width":"307",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-950f59b29b","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/yueqin-yin/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Yueqin Yin"}}],"image":{"id":"image-fd832316e5","height":"720","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--8356a77b-79b0-4938-b4c2-dc928b4ace8d/sf-eng-blog-ml-4-1.png?quality=85&preferwebp=true","isLcpImage":false,"width":"1680",":type":"snowflake-site/components/image"},"timeToRead":"13","publicationDate":"AUG 06, 2026","tag":{"tagText":"Gen AI","tagColor":"#29B5E8"},"title":{"lines":["Building a Snowflake-Native SQL Autocomplete Model"],"type":"heading2",":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/blog/blog-hero"}},":itemsOrder":["blog_hero"],":type":"snowflake-site/components/container"},"responsivegrid_content":{"columnCount":12,"columnClassNames":{"blog_text_815432050":"aem-GridColumn aem-GridColumn--default--12","blog_text_376056852":"aem-GridColumn aem-GridColumn--default--12","image_845495934":"aem-GridColumn aem-GridColumn--default--12","image":"aem-GridColumn aem-GridColumn--default--12","image_1814746302":"aem-GridColumn aem-GridColumn--default--12","blog_text":"aem-GridColumn aem-GridColumn--default--12","blog_text_785270884":"aem-GridColumn aem-GridColumn--default--12","blog_text_710712828":"aem-GridColumn aem-GridColumn--default--12","blog_text_1416139562":"aem-GridColumn aem-GridColumn--default--12","blog_text_1731737935":"aem-GridColumn aem-GridColumn--default--12","blog_text_421805838":"aem-GridColumn aem-GridColumn--default--12","blog_text_1230464934":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","appliedCssClassNames":"snowflake-layout-container-inner-padding-small",":items":{"image":{"id":"image-228b7207a6","height":"941","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--a415c61c-726b-49f0-ae70-000098c41a89/figure-1.-building-a-snowflake-native-sql-autocomplete-model.png?quality=85&preferwebp=true","alt":"Figure 1. Building a Snowflake-Native SQL Autocomplete Model","isLcpImage":true,"width":"1672","title":"Figure 1. Building a Snowflake-Native SQL Autocomplete Model",":type":"snowflake-site/components/image"},"blog_text":{"id":"blog-text-fc042a566c","text":"\u003Cp\u003ESQL autocomplete looks simple: Given the text around a cursor, predict what a developer is likely to type next.\u003C/p\u003E\r\n\u003Cp\u003EIn production, however, SQL autocomplete is a demanding problem of both inference speed and quality. A suggestion must arrive almost instantly, follow the Snowflake SQL dialect, use the correct objects from the available schema and align with the user's likely intent. The model must also know when to stay silent. When the available context does not support a reliable completion, or when the SQL around the cursor is already complete, showing nothing is better than interrupting the user with an unnecessary or incorrect suggestion.\u003C/p\u003E\r\n\u003Cp\u003EAt Snowflake, \u003Ca href=\"https://docs.snowflake.com/en/user-guide/cortex-code/cortex-code-snowsight#label-cortex-code-ai-suggestions\" target=\"_blank\" rel=\"noopener noreferrer\"\u003EAI Code Suggestions — our SQL autocomplete feature in Snowsight — are\u003C/a\u003E \u003Ca href=\"https://docs.snowflake.com/en/release-notes/2026/other/2026-07-28-cortex-code-ai-suggestions-ga\" target=\"_blank\" rel=\"noopener noreferrer\"\u003Enow generally available\u003C/a\u003E, serving up to 70,000 users a day and processing up to 2 million triggers. Our previous production system used a 30B-A3B mixture-of-experts (MoE) model trained primarily on synthetic, targeted examples. We set out to determine whether a much smaller model, trained specifically for the Snowflake autocomplete experience, could improve suggestion quality while reducing serving computation.\u003C/p\u003E\r\n\u003Cp\u003EThe work delivered several production improvements:\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003EA 4B dense model outperformed the previous 30B-A3B MoE model in both internal precision and actual user acceptance.\u003C/li\u003E\r\n\u003Cli\u003EInternal test-set precision increased from 23.4% to 40.4%.\u003C/li\u003E\r\n\u003Cli\u003EActual user acceptance increased from 17.80% to 26.35%, even as the model produced 20% more suggestions.\u003C/li\u003E\r\n\u003Cli\u003EMedian inference latency decreased by 71%, to 29% of the previous model's baseline.\u003C/li\u003E\r\n\u003C/ul\u003E\r\n\u003Cp\u003ETwo technical advances were central to these gains:\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003EContext-grounded training targets improved precision by more than 13 percentage points after supervised fine-tuning.\u003C/li\u003E\r\n\u003Cli\u003EAn LLM-judge reward provided a stronger reinforcement-learning signal than a rule-based SQL-BLEU reward.\u003C/li\u003E\r\n\u003C/ul\u003E\r\n\u003Cp\u003EIn this blog, we describe how we built a production-oriented evaluation from internal employee editing sessions, reconstructed intended completions, curated context-grounded post-training targets and used reinforcement learning to teach the model what to suggest, how much to suggest and when to remain silent.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_815432050":{"id":"blog-text-0a3890422c","text":"\u003Ctable\u003E\r\n\u003Ccaption\u003ETable 1. Quality, acceptance and median inference latency of the previous and new Snowflake SQL autocomplete models\u003C/caption\u003E\r\n\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EModel\u003C/th\u003E\r\n\u003Cth\u003EArchitecture\u003C/th\u003E\r\n\u003Cth\u003EInternal test-set precision\u003C/th\u003E\r\n\u003Cth\u003EActual user acceptance rate⁺\u003C/th\u003E\r\n\u003Cth\u003ERelative inference latency\u003C/th\u003E\r\n\u003Cth\u003ERelative suggestion volume\u003C/th\u003E\r\n\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd\u003EPrevious model\u003C/td\u003E\r\n\u003Ctd\u003E30B-A3B MoE\u003C/td\u003E\r\n\u003Ctd\u003E23.4%\u003C/td\u003E\r\n\u003Ctd\u003E17.80%\u003C/td\u003E\r\n\u003Ctd\u003E100% (baseline)\u003C/td\u003E\r\n\u003Ctd\u003E100%\u003C/td\u003E\r\n\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003ENew model\u003C/td\u003E\r\n\u003Ctd\u003E4B dense\u003C/td\u003E\r\n\u003Ctd\u003E40.4%\u003C/td\u003E\r\n\u003Ctd\u003E26.35%\u003C/td\u003E\r\n\u003Ctd\u003E29% of baseline\u003C/td\u003E\r\n\u003Ctd\u003E120% of baseline\u003C/td\u003E\r\n\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_1731737935":{"id":"blog-text-cd0fe901b8","text":"\u003Cp\u003E⁺ Actual user acceptance rates were calculated over comparable seven-day windows for both models.\u003C/p\u003E\r\n\u003Ch2\u003EAutocomplete is a precision-first problem\u003C/h2\u003E\r\n\u003Cp\u003EGeneral-purpose coding models provide a strong foundation for autocomplete. Many are pretrained with fill-in-the-middle objectives and have learned patterns across programming languages, configuration files and SQL dialects.\u003C/p\u003E\r\n\u003Cp\u003EBut Snowflake SQL represents only a small portion of that pretraining distribution. General coding ability does not guarantee familiarity with Snowflake-specific syntax, enterprise schemas or the query patterns encountered in production.\u003C/p\u003E\r\n\u003Cp\u003EAutocomplete also differs from conventional code generation. In a chat interface, the user explicitly requests an answer and can review it before acting. Autocomplete intervenes while the user is already working. A poor suggestion can interrupt the user and reduce trust in future completions.\u003C/p\u003E\r\n\u003Cp\u003EThis leads to three core requirements.\u003C/p\u003E\r\n\u003Cp\u003E\u003Cb\u003ELow latency:\u003C/b\u003E Suggestions must feel immediate. Moving from a 30B-A3B MoE model to a 4B dense model reduces the time required to serve each trigger.\u003C/p\u003E\r\n\u003Cp\u003E\u003Cb\u003ESnowflake specialization:\u003C/b\u003E The model must understand the structure of Snowflake SQL and ground its suggestions in schema information, prior SQL history relevant to the current schema and the text surrounding the cursor.\u003C/p\u003E\r\n\u003Cp\u003E\u003Cb\u003ECalibrated abstention:\u003C/b\u003E The model should remain silent when the context does not support a reliable suggestion or when the query is already complete.\u003C/p\u003E\r\n\u003Cp\u003EWhile latency is easy to quantify, measuring the other two requires an evaluation set that represents not only successful completions, but also ambiguous contexts and cases where the correct response is empty.\u003C/p\u003E\r\n\u003Ch2\u003EBuilding evaluation from internal editing sessions\u003C/h2\u003E\r\n\u003Cp\u003ETo reflect production-like behavior without using customer data, we construct our evaluation datasets from autocomplete interactions generated by Snowflake employees in internal environments.\u003C/p\u003E\r\n\u003Cp\u003EWe maintain a continuously evolving suite of evaluation datasets sampled from different internal traffic periods. Each dataset is fixed once created, allowing reproducible comparisons across model versions, while new datasets are added as product capabilities, query patterns and user behavior evolve.\u003C/p\u003E\r\n\u003Cp\u003EWe also maintain specialized datasets for specific failure modes and edge cases, but use them primarily for diagnosis rather than as the main measure of model quality.\u003C/p\u003E\r\n\u003Ch3\u003EReconstructing the intended completion\u003C/h3\u003E\r\n\u003Cp\u003EEach sampled trigger contains the SQL prefix and suffix, relevant schema, prior SQL history, trimmed worksheet context and several queries subsequently executed by the user.\u003C/p\u003E\r\n\u003Cp\u003ENot every subsequent query is related to the original trigger. A user may switch worksheets, execute an unrelated statement or continue editing through several intermediate versions.\u003C/p\u003E\r\n\u003Cp\u003EWe first use an LLM to identify which subsequent executed query, if any, most likely evolved from the worksheet state at the time of the trigger. We then use another LLM step to extract the completion that best represents the intended edit at the original cursor position.\u003C/p\u003E\r\n\u003Cp\u003EThis is not a simple text-diff problem. Between the trigger and execution, the user may edit both sides of the cursor, correct typos, rename aliases or restructure the query. A direct diff can therefore assign unrelated changes to the autocomplete span.\u003C/p\u003E\r\n\u003Cp\u003EAmbiguous examples receive additional human inspection. The result is a fixed reference completion that can be used consistently across model evaluations.\u003C/p\u003E\r\n\u003Cp\u003EDuring evaluation, an LLM judge receives the model suggestion together with the available context and reference completion. It classifies the suggestion as incorrect, partially useful or fully useful, and identifies the primary failure category.\u003C/p\u003E\r\n\u003Ch3\u003EMeasuring useful autocomplete\u003C/h3\u003E\r\n\u003Cp\u003EAutocomplete quality cannot be determined by a single metric.\u003C/p\u003E\r\n\u003Cp\u003EA model can achieve high precision by responding very rarely, or it can generate technically correct suggestions that are too short to add meaningful value.\u003C/p\u003E\r\n\u003Cp\u003EWe therefore track three primary behaviors.\u003C/p\u003E\r\n\u003Cp\u003E\u003Cb\u003EPrecision\u003C/b\u003E is the percentage of nonempty suggestions judged to be fully useful:\u003C/p\u003E\r\n\u003Cp\u003EPrecision = fully useful suggestions / all nonempty suggestions\u003C/p\u003E\r\n\u003Cp\u003EFor the current product experience, we generally prefer a conservative model with high precision over one that responds more often but less reliably.\u003C/p\u003E\r\n\u003Cp\u003E\u003Cb\u003ESuggestion length\u003C/b\u003E is tracked to prevent precision from rewarding trivial completions. In earlier experiments, we trained high-precision models whose correct suggestions were often only a single word or token. Users reported that these suggestions did not meaningfully improve the experience.\u003C/p\u003E\r\n\u003Cp\u003E\u003Cb\u003EAbstention\u003C/b\u003E must be measured in both directions. The laziness rate captures cases where the reference completion is nonempty but the model produces nothing. We also curate examples where the prefix and suffix already form the complete query and the expected response is empty.\u003C/p\u003E\r\n\u003Cp\u003ETogether, these metrics describe whether the model responds, whether the response is useful and whether it provides enough value to show.\u003C/p\u003E\r\n\u003Cp\u003EWith these behaviors defined, we next applied the same principles to the data used for post-training.\u003C/p\u003E\r\n\u003Ch2\u003ETraining only on predictable completions\u003C/h2\u003E\r\n\u003Cp\u003EWe use the same LLM-assisted reconstruction pipeline to curate post-training data from internal employee editing sessions. Compared with rule-based matching, this process substantially improves coverage when employees edit both sides of the cursor or execute several intermediate queries.\u003C/p\u003E\r\n\u003Cp\u003EHowever, accurately recovering what the user eventually typed does not guarantee that the model could have predicted it from the context available at the trigger. This distinction led us to make context grounding a central part of training-data curation.\u003C/p\u003E\r\n\u003Ch3\u003EContext grounding\u003C/h3\u003E\r\n\u003Cp\u003EConsider a user who eventually inserts a column absent from the provided schema, perhaps because schema retrieval was incomplete. Or consider a filter containing a literal that never appeared in the SQL history, worksheet context or schema metadata.\u003C/p\u003E\r\n\u003Cp\u003EThese may be valid human edits, but they are impossible autocomplete targets. Training on them encourages guessing and penalizes the model for failing to produce information it could not have known.\u003C/p\u003E\r\n\u003Cp\u003EWe define a target as \u003Cb\u003Econtext-grounded\u003C/b\u003E when it can be reasonably inferred from the prefix, suffix, schema, prior SQL history and worksheet context.\u003C/p\u003E\r\n\u003Cp\u003EFor each raw reference edit, we identify the longest useful prefix that can be reasonably supported by the available context. If the full edit contains an unpredictable identifier or literal, we retain only the longest useful portion that remains predictable from the available context. If no useful portion is sufficiently grounded, the training target is empty. The model is therefore trained to generate only what it could reasonably have inferred at that moment.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_376056852":{"id":"blog-text-6ead8c8877","text":"\u003Ctable\u003E\r\n\u003Ccaption\u003ETable 2. Effect of context-grounded training data on autocomplete quality\u003C/caption\u003E\r\n\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003ESFT Model\u003C/th\u003E\r\n\u003Cth\u003EInternal test-set precision\u003C/th\u003E\r\n\u003Cth\u003EAvg. judge rating\u003C/th\u003E\r\n\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd\u003EWithout context grounding\u003C/td\u003E\r\n\u003Ctd\u003E23.9%\u003C/td\u003E\r\n\u003Ctd\u003E0.704\u003C/td\u003E\r\n\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EWith context grounding\u003C/td\u003E\r\n\u003Ctd\u003E37.4%\u003C/td\u003E\r\n\u003Ctd\u003E0.865\u003C/td\u003E\r\n\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_785270884":{"id":"blog-text-6128ac6b92","text":"\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n\u003Cp\u003EAs shown in Table 2, context grounding improved internal test-set precision by more than 13 percentage points and raised the average judge rating from 0.704 to 0.865 after supervised fine-tuning (SFT). Removing targets unsupported by the available context substantially improved suggestion quality and reduced the incentive to guess.\u003C/p\u003E\r\n\u003Cp\u003EContext grounding alone, however, does not fully determine the ideal training target. A predictable continuation is not necessarily useful enough to show, while an unpredictable ground truth does not imply an alternative reasonable prediction could not have been provided there. Training-data curation must therefore consider both predictability and the behavior we want from the product.\u003C/p\u003E\r\n\u003Cp\u003EWe also anonymize identifiers and other potentially sensitive information before training. Although anonymization removes semantic clues, it often acts as useful regularization by encouraging the model to rely on SQL structure and the schema included in the prompt rather than memorizing familiar identifiers.\u003C/p\u003E\r\n\u003Cp\u003EThese supervised-data improvements teach the model what can be inferred from the available context. But autocomplete also requires behavioral alignment: The model must decide whether a possible completion is useful enough to show, how much of it to generate and when to abstain. We use reinforcement learning to further strengthen those decisions.\u003C/p\u003E\r\n\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"image_845495934":{"id":"image-36e5a74008","height":"1063","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--d5342a83-ac4c-4689-bf14-c20390143ea4/figure-2.-figure-1.-building-a-snowflake-native-sql-autocomplete-model.jpg?quality=85&preferwebp=true","alt":"Figure 2. Building a Snowflake-Native SQL Autocomplete Model","isLcpImage":false,"width":"1920","title":"Figure 2. Building a Snowflake-Native SQL Autocomplete Model",":type":"snowflake-site/components/image"},"blog_text_421805838":{"id":"blog-text-b0f64387a2","text":"\u003Ch2\u003EReinforcement learning for calibrated autocomplete\u003C/h2\u003E\r\n\u003Cp\u003EAfter SFT, we used reinforcement learning to improve three behaviors that are central to autocomplete: what to complete, how much to complete and when to remain silent.\u003C/p\u003E\r\n\u003Cp\u003EWe trained the model with Group Relative Policy Optimization (GRPO). For each prompt, the model generates several candidate completions, and a reward function ranks them according to their usefulness.\u003C/p\u003E\r\n\u003Cp\u003EReward design is particularly important for autocomplete. Unlike conventional text-to-SQL or code-generation tasks, the SQL around the cursor may be incomplete, and the best response may be empty. Execution success is therefore not a generally available reward signal. A useful reward must evaluate not only the quality of the generated SQL, but also whether the model should respond and how much it should suggest.\u003C/p\u003E\r\n\u003Cp\u003ETo support this behavior, we combine graded quality signals with deterministic checks that discourage ungrounded identifiers, unnecessary continuations and excessive abstention. These checks ensure that the model receives positive feedback only for completions that are appropriately scoped and supported by the available context.\u003C/p\u003E\r\n\u003Ch3\u003EComparing rule-based and model-based rewards\u003C/h3\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"image_1814746302":{"id":"image-448eb581e3","height":"890","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--a5303559-cd5e-4ce3-8df1-21ec5fe26801/figure-3.-figure-1.-building-a-snowflake-native-sql-autocomplete-model.png?quality=85&preferwebp=true","alt":"Figure 3. Building a Snowflake-Native SQL Autocomplete Model","isLcpImage":false,"width":"1767","title":"Figure 3. Building a Snowflake-Native SQL Autocomplete Model",":type":"snowflake-site/components/image"},"blog_text_710712828":{"id":"blog-text-2799140fc2","text":"\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n\u003Cp\u003EAmong the reward approaches we evaluated, two emerged as the most promising. The first was SQL-BLEU, a deterministic SQL-aware metric that compares a candidate with the reference completion using both token-level and structural similarity. It is inexpensive and reproducible, and works even when the query is incomplete. However, like other reference-based metrics, SQL-BLEU is limited by its dependence on a single target. It may under-reward a completion that differs from the reference text but still represents a valid and useful next edit.\u003C/p\u003E\r\n\u003Cp\u003EOur second approach used an LLM judge aligned with the same notion of usefulness as our offline evaluation. The judge considers whether a completion is syntactically valid, semantically meaningful, aligned with the intended edit and coherent with the text on both sides of the cursor.\u003C/p\u003E\r\n\u003Cp\u003EStarting from the same SFT checkpoint, the LLM-judge reward produced stronger results than the SQL-BLEU reward, as shown in Table 3.\u003C/p\u003E\r\n\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_1416139562":{"id":"blog-text-30e444199b","text":"\u003Ctable\u003E\r\n\u003Ccaption\u003ETable 3. Comparison of rule-based and LLM-judge reinforcement-learning rewards\u003C/caption\u003E\r\n\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EReward (same SFT checkpoint)\u003C/th\u003E\r\n\u003Cth\u003EInternal test-set precision\u003C/th\u003E\r\n\u003Cth\u003EAvg. judge rating\u003C/th\u003E\r\n\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd\u003ESFT baseline⁺\u003C/td\u003E\r\n\u003Ctd\u003E31.8%\u003C/td\u003E\r\n\u003Ctd\u003E0.693\u003C/td\u003E\r\n\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGates + SQL-BLEU (rule-based)\u003C/td\u003E\r\n\u003Ctd\u003E33.1%\u003C/td\u003E\r\n\u003Ctd\u003E0.805\u003C/td\u003E\r\n\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGates + LLM judge\u003C/td\u003E\r\n\u003Ctd\u003E36.1%\u003C/td\u003E\r\n\u003Ctd\u003E0.841\u003C/td\u003E\r\n\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_1230464934":{"id":"blog-text-9dea70d991","text":"\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n\u003Cp\u003E⁺Experiments in this table used an intermediate SFT checkpoint during reward development rather than the final deployed checkpoint. The values therefore differ from the final results reported in Table 1.\u003C/p\u003E\r\n\u003Cp\u003EThe rule-based reward remains valuable as a fast and deterministic signal during development. The LLM judge, however, better captures semantic equivalence and user intent, making it a stronger signal for final model alignment.\u003C/p\u003E\r\n\u003Cp\u003EReward design also requires careful balancing. In an early experiment, optimizing too heavily for precision caused the model to remain silent on most prompts. Although the resulting model appeared precise, it failed to provide completions in many cases where it could have helped. This result reinforced the importance of optimizing the full autocomplete behavior rather than a single metric. The final reward balances suggestion quality, groundedness and appropriate participation.\u003C/p\u003E\r\n\u003Ch2\u003EResults\u003C/h2\u003E\r\n\u003Cp\u003EThe final 4B dense model delivered substantially higher precision than the previous 30B-A3B MoE model. More importantly, the offline improvement translated into a higher actual acceptance rate across the deployed user population.\u003C/p\u003E\r\n\u003Cp\u003EThe production deployment confirmed the gains summarized in Table 1. The new model increased internal test-set precision from 23.4% to 40.4%, increased actual user acceptance from 17.80% to 26.35% over comparable seven-day windows and reduced median inference latency to 29% of the previous baseline — all while producing 20% more suggestions.\u003C/p\u003E\r\n\u003Cp\u003EOffline precision remains higher than observed acceptance. A meaningful portion of dismissed suggestions still align with the query the user eventually executes. Acceptance is influenced by factors beyond correctness: Users may continue typing, correct a typo, revise another part of the query or simply not act on a suggestion at that moment.\u003C/p\u003E\r\n\u003Cp\u003EThis distinction matters. A useful autocomplete system must optimize not only for correctness, but also for timing and the amount of value provided by each suggestion.\u003C/p\u003E\r\n\u003Ch2\u003EConclusion\u003C/h2\u003E\r\n\u003Cp\u003EProduction SQL autocomplete is a precision-first, latency-sensitive problem where specialization and calibrated silence matter as much as raw generation capability.\u003C/p\u003E\r\n\u003Cp\u003EBy building representative evaluation sets, reconstructing intent from internal employee editing sessions, removing unsupported training targets and aligning the model with reinforcement learning, we trained a 4B dense model that outperformed the previous 30B-A3B system in precision, acceptance and inference efficiency. No customer query data was used in evaluation or training.\u003C/p\u003E\r\n\u003Cp\u003E\u003Ca href=\"https://docs.snowflake.com/en/release-notes/2026/other/2026-07-28-cortex-code-ai-suggestions-ga\" target=\"_blank\" rel=\"noopener noreferrer\"\u003EAI Code Suggestions in Cortex Code are now generally available.\u003C/a\u003E We invite Snowflake users to try the feature and let us know where it helps, where it gets in the way and how we can make the autocomplete experience even better.\u003C/p\u003E\r\n\u003Cp\u003EThe broader lesson is that autocomplete quality does not depend on model scale alone. It comes from aligning every part of the training and evaluation pipeline with one deceptively difficult product question:\u003C/p\u003E\r\n\u003Cp\u003E\u003Cb\u003EAt this exact cursor position, is there something useful the model can confidently say?\u003C/b\u003E&nbsp;\u003Cbr\u003E\r\n\u003C/p\u003E\r\n\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n\u003Chr\u003E\r\n\r\n\u003Cp\u003E\u003Cb\u003EContributors\u003C/b\u003E\u003Cbr\u003E\r\n\u003Cb\u003ECortex Code Team:\u003C/b\u003E Anni Li,* Paul Dong,* Arun Ponnusamy, Hamid Mousavi, Kelvin So, Khalid Bijon\u003Cbr\u003E\r\n\u003Cb\u003ESnowflake AI Research:\u003C/b\u003E Yite Wang,* Yueqin Yin, Jaeseong Lee, Yuxiong He, Zhewei Yao\u003C/p\u003E\r\n\u003Cp\u003E\u003Ci\u003E* These authors contributed equally to this work.\u003C/i\u003E\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"}},":itemsOrder":["image","blog_text","blog_text_815432050","blog_text_1731737935","blog_text_376056852","blog_text_785270884","image_845495934","blog_text_421805838","image_1814746302","blog_text_710712828","blog_text_1416139562","blog_text_1230464934"],":type":"wcm/foundation/components/responsivegrid"},"responsivegrid_premium_content_banner":{"columnCount":12,"columnClassNames":{},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","appliedCssClassNames":"snowflake-responsive-component-top-padding-medium",":items":{},":itemsOrder":[],":type":"wcm/foundation/components/responsivegrid"},"container_author_chip":{"layout":"RESPONSIVE_GRID","columnCount":12,"columnClassNames":{"author_chip":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","id":"container-338582772f",":items":{"author_chip":{"id":"author-chip-d2f8bd2395","title":{"id":"title","type":"heading2","lines":["Learn more about the authors"],":type":"snowflake-site/components/title-v2"},"authors":[{"authorImage":{"id":"image-177b075bd0","height":"1282","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--2e4aa405-02eb-444d-8b60-91e122779701/arun-ponnusamy.jpg?quality=85&preferwebp=true","isLcpImage":false,"width":"1282",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-227e65ca97","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/arun-ponnusamy/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Arun Ponnusamy"},"authorTitle":"Staff Software Engineer"},{"authorImage":{"id":"image-2786f732a8","height":"640","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--97980a53-6310-44b8-9432-150c4beb396d/kelvinsohead.jpg?quality=85&preferwebp=true","alt":"Kelvin So","isLcpImage":false,"width":"637",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-3e1cd9ec55","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/kelvin-so/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Kelvin So"},"authorTitle":"Principal Software Engineer"},{"authorImage":{"id":"image-6b331e5d0a","height":"200","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--d0a2a67d-af6b-4660-bb40-f88540e63a42/khalid.jpg?quality=85&preferwebp=true","alt":"Khalid Bijon","isLcpImage":false,"width":"200",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-70b6b9f68f","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/khalid-bijon/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Khalid Bijon"},"authorTitle":"Senior Software Engineer"},{"authorImage":{"id":"image-889fb46cb4","height":"1631","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--4b737f9b-2d72-411c-b16c-f60326169d8b/yite-wang.jpg?quality=85&preferwebp=true","isLcpImage":false,"width":"1631",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-aba2d1fda0","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/yite-wang/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Yite Wang"},"authorTitle":"Research Scientist"},{"authorImage":{"id":"image-11873b20f7","height":"282","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--6a18c85b-19f5-48ba-baf6-a6cd2e3d69c2/jslee.jpg?quality=85&preferwebp=true","isLcpImage":false,"width":"227",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-87a00ab723","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/jaeseong-lee/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Jaeseong Lee"},"authorTitle":"Research Scientist"},{"authorImage":{"id":"image-07dce713e7","height":"328","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--91e118d5-5e68-4422-b71b-2a33781308d9/yuxiong-headshot.png?quality=85&preferwebp=true","alt":"Yuxiong He","isLcpImage":false,"width":"216",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-034370f5e1","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/yuxiong-he/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Yuxiong He"},"authorTitle":"Sr. Director, Software Engineering"},{"authorImage":{"id":"image-a13be82c3d","height":"3557","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--b83797d3-baae-46b4-b8fd-3b89fd88f643/zhewei-yao.jpg?quality=85&preferwebp=true","alt":"Zhewei Yao","isLcpImage":false,"width":"3144",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-4bc41976aa","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/zhewei-yao/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Zhewei Yao"},"authorTitle":"Staff Software Engineer"},{"authorImage":{"id":"image-5817e0dc17","height":"504","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--955c127f-58f0-4065-90ef-7a42f0bf9a29/anni-li.png?quality=85&preferwebp=true","isLcpImage":false,"width":"500",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-4b4a304c98","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/anni-li/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Anni Li"},"authorTitle":"Software Engineer"},{"authorImage":{"id":"image-3ca37aa27e","height":"500","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--bf5e0c24-0465-4596-9480-e9e33612326a/paul-dong.png?quality=85&preferwebp=true","isLcpImage":false,"width":"502",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-dde4212e76","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/paul-dong/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Paul Dong"},"authorTitle":"Software Engineer"},{"authorImage":{"id":"image-79ea363626","height":"502","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--71e41862-4b0f-46ac-87b1-9c2ea6ea07ec/hamid-mousavi.png?quality=85&preferwebp=true","isLcpImage":false,"width":"500",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-3a577ddd17","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/hamid-mousavi/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Hamid Mousavi"},"authorTitle":"Software Engineer"},{"authorImage":{"id":"image-852a2f0bf8","height":"239","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--d26a3e0d-b047-484f-845e-b38cb054daee/yueqin-yin.png?quality=85&preferwebp=true","isLcpImage":false,"width":"307",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-950f59b29b","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/yueqin-yin/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Yueqin Yin"},"authorTitle":"Research Intern"}],":type":"snowflake-site/components/blog/author-chip"}},":itemsOrder":["author_chip"],":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-responsive-component-top-padding-medium"}},":itemsOrder":["container_hero","responsivegrid_content","responsivegrid_premium_content_banner","container_author_chip"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-01a4bc85c8",":items":{"blog_table_of_content":{"id":"blog-table-of-content-bb9a2c8443",":type":"snowflake-site/components/blog/blog-table-of-content","tableOfContents":[]}},":itemsOrder":["blog_table_of_content"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},":type":"snowflake-site/components/flexible-column-container","isBlogPage":true,"isActiveTOC":false},"related_content":{"id":"related-content-1f46112d0c","relatedContent":[],":type":"snowflake-site/components/blog/related-content","isBlogPage":true}},":itemsOrder":["flexible_column_container","related_content"],":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-container"}},":itemsOrder":["container_breadcrumb","container_main_content"],":type":"wcm/foundation/components/responsivegrid"},"container_47873732":{"additionalClasses":"section--blog-newsletter","layout":"RESPONSIVE_GRID","columnCount":12,"columnClassNames":{"flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","id":"container-021fd190e3",":items":{"flexible_column_cont":{"id":"flexible-column-container-e063d219fd","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"small","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"section--blog-newsletter","backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-49df47ea56",":items":{"marketo_v2":{"id":"marketo-v2-cb747700c4","marketoForm":{"hidden":null,"edit":false,"successUrl":null,"formId":"3320","script":null,"values":null},"title":{"id":"title","type":"heading3","lines":["Subscribe to our blog newsletter","Get the best, coolest and latest delivered to your inbox each week"],":type":"snowflake-site/components/title-v2"},"munchkinId":"252-RFO-227","serverInstance":"252-RFO-227.mktoweb.com","formConfigured":true,"marketoConfigured":true,":type":"snowflake-site/components/form/marketo-v2"},"text":{"id":"text-f05f6ba28c","additionalClasses":"newsletter-disclaimer","text":"\u003Cp\u003EBy submitting this form, I understand Snowflake will process my personal information in accordance with their Privacy Notice.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text"}},":itemsOrder":["marketo_v2","text"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},":type":"snowflake-site/components/flexible-column-container","isBlogPage":true,"isActiveTOC":false}},":itemsOrder":["flexible_column_cont"],":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-container"},"experiencefragment-pre-footer":{"id":"experiencefragment-367be932f9","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/get-started-pre-footer/get-started-pre-footer/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/get-started-pre-footer/get-started-pre-footer.xfmodel.json",":type":"snowflake-site/components/experiencefragment"},"markup_editor":{"id":"markup-editor-6a285b8101","title":"Page CSS","cssContent":"@media screen and (min-width:768px){.snowflake-blog-author-chip-wrapper{justify-content:flex-start}.snowflake-blog-related-content-on-blog-page{max-width:1408px;margin-left:auto;margin-right:auto}.snowflake-text{font-family:Lato,sans-serif;font-weight:400;font-size:16px;line-height:24px}}.section--blog-newsletter{max-width:none;width:100%;padding-left:0;padding-right:0;margin-left:0;margin-right:0;margin-bottom:0}.section--blog-newsletter .mktoField{background-color:transparent !important}.section--blog-newsletter\u003E.container{padding-left:0;padding-right:0}@media screen and (min-width:768px){.section--blog-newsletter\u003E.container{padding-left:0;padding-right:0}}.newsletter-disclaimer p{font-size:14px !important}.section--blog-newsletter .snowflake-marketo-form-container{margin-bottom:24px;background-color:#f6f9fa;gap:48px;box-shadow:none}.section--blog-newsletter .snowflake-title p.snowflake-title-line:first-child{font-family:Texta;font-size:24px;line-height:26px;font-weight:700;margin-bottom:4px}.section--blog-newsletter .snowflake-title p.snowflake-title-line{text-transform:none;font-family:\"Lato\",sans-serif;font-size:16px;line-height:24px;font-weight:normal}@media screen and (min-width:1024px){.section--blog-newsletter .snowflake-marketo-form-container{display:flex;justify-content:center}.section--blog-newsletter .snowflake-title .snowflake-title-line{text-align:left}.section--blog-newsletter .snowflake-marketo-form .mktoFormRow:has(\u003E input[type=\"hidden\"]){flex-grow:0}.section--blog-newsletter .snowflake-marketo-form{display:flex;width:50% !important}.section--blog-newsletter .snowflake-marketo-form .mktoButtonRow{flex-grow:0;width:auto !important;margin-left:0;margin-right:0}.section--blog-newsletter .snowflake-marketo-form .mktoFormRow{flex-grow:1}.section--blog-newsletter\u003E.container{padding-left:0;padding-right:0}.section--blog-newsletter .snowflake-marketo-form-title{width:50%;margin-bottom:0 !important}.section--blog-newsletter .center .snowflake-title{align-items:flex-start}}.snowflake-sub-navigation a.snowflake-sub-navigation-primary-link{width:auto !important}.snowflake-blog-hero{align-items:stretch !important}","isGSAPEnabled":false,":type":"snowflake-site/components/markup-editor"},"markup_editor-table":{"id":"markup-editor-353447c34e","title":"Table Styling CSS","cssContent":"#snowflake-blog-template-main-container table{width:100%;background-color:var(--ui-background-01);border-collapse:collapse;border:2px solid var(--ui-background-09);font-family:'Lato',sans-serif;color:var(--ui-background-09)}#snowflake-blog-template-main-container table thead{background-color:var(--ui-01)}#snowflake-blog-template-main-container table th,#snowflake-blog-template-main-container table td{border:2px solid var(--ui-background-09);padding:var(--spacing-01)}","isGSAPEnabled":false,":type":"snowflake-site/components/markup-editor"},"experiencefragment-footer":{"id":"experiencefragment-309d546df1","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master.xfmodel.json",":type":"snowflake-site/components/experiencefragment"}},":itemsOrder":["experiencefragment-banner","experiencefragment-header","experiencefragment-sub-header","responsivegrid","container_47873732","experiencefragment-pre-footer","markup_editor","markup_editor-table","experiencefragment-footer"],":type":"wcm/foundation/components/responsivegrid"}},":itemsOrder":["root"],":type":"snowflake-site/components/structure/page",":hierarchyType":"page",":path":"/content/snowflake-site/global/en/blog/engineering/specializing-small-model-sql-autocomplete","isPasswordProtected":false,"analyticsContentTags":["snowflake-site:taxonomy/blog/engineering-blog/gen-ai"],"analyticsEnabled":true,"coveoConfig":{"pipeline":"snowflake.com","apiKey":"xx335921a6-2a0a-40f2-a167-e390b4766c3d","organizationId":"snowflakecomputingproduction8neljofn","searchHub":"snowflake.com"},"analyticsDebugMode":false,"analyticsData":{"excludeFromAnalytics":false,"subCategory":"","pageType":"homepage","templateName":"blog-page","siteName":"snowflake","pageUrl":"/content/snowflake-site/global/en/blog/engineering/specializing-small-model-sql-autocomplete","language":"en","category":"general","pageName":"Building a Snowflake-Native SQL Autocomplete Model","contentTags":["snowflake-site:taxonomy/blog/engineering-blog/gen-ai"]},"locale":"en"}
  