0x00 한

Research / Cross-service topics

LLMs in the recommendation pipeline

Based only on primary material released through 2026-08-13, X put an LLM in as a judge, Meta as an ads feature encoder, an offline judge for Groups Search, and a graph-path reasoner for heavy-user requests, and Netflix as the ranker itself inferred (framing check). At X, the content annotation pipeline Grox uses an LLM to attach quality and safety labels to posts ahead of time verified (Grox case). Of these, the safety labels are passed to the filter and to the ad-adjacency verdict (whether ads may be placed next to a post) verified (What generalizes from this case). Meta said it also uses an LLM as a graph-path reasoner for heavy users on an undisclosed short-form video surface verified (ConnectionMind case). Netflix's published experiment is limited to a surface where recommendations are precomputed in batch (a batch-compute surface) verified (Netflix case).

There are six slots where LLMs and VLMs (language models that also handle images) enter a recommender system. Mixing them up causes confusion, so we take them one slot at a time.

  1. Content annotation (nearline): Feed one item into an LLM, extract quality/topic/safety labels, and write them to a KV store. Serving only does a lookup.
  2. Safety verdict: A special case of the annotation above, but looked at separately because behavior on failure differs. Passing content when no verdict exists is called fail-open; blocking it is called fail-closed.
  3. The ranking model itself: An LLM architecture used as the ranker. Related discussion is in sequence-transformer-ranking.md.
  4. User interest summarization: Summarize user history with an LLM to build a profile.
  5. Offline evaluation (LLM-as-judge): An LLM scores the quality of ranking results. It does not enter the serving path.
  6. Parsing user natural-language instructions: When a user states ranking preferences in words, the system interprets them and applies them to the ranker.

The two companies filled exactly opposite slots. X holds slots 1 and 2, and Meta holds slots 5 and 6 inferred. Each cell in the table below is backed by primary sources later in these notes, but the "opposite" contrast itself is an interpretation of only what is public. Every "no statement" cell in the table is also inferred. The corpus checked is the source list below (read 2026-08-09), and we say nothing about undisclosed systems.

Slot X Meta
1 Content annotation Confirmed (Grox) ads only, both confirmed (HIR = entities, LLaTTE = fine-tuned LLaMA content embedding)
2 Safety verdict Confirmed (PTOS, fail-closed) No statement
3 LLM as ranker A Transformer ranker exists (Phoenix) For ads it is still an analogy (LLM-scale). For the organic feed, a 2026-08 ConnectionMind statement appeared (supplement below the table)
4 User interest summarization Cannot confirm No statement
5 LLM-as-judge No statement Confirmed (Groups Search, Llama 3)
6 Natural-language instructions None A product exists; the model is undisclosed

Supplementing the Meta organic feed cell for slot 3 (LLM as ranker) in the table:

  • In the ConnectionMind statement, Llama 3.1-8B serves as a graph-path reasoner and serves the online hot path (the path run on every request) for 5–10% of heavy users.
  • The remaining 90–95% is served by a Student GNN trained on meta-paths (graph path patterns defined by sequences of node and edge types) that the LLM discovered offline.
  • The surface is undisclosed ("short-form video platform"). Details are in the ConnectionMind case.

The gap in slot 3 was first broken in 2026-07, and in 2026-08 Meta ConnectionMind gave a second statement. The first to break it was Netflix GenRec (Netflix case).

⚠ Claim changed (2026-08-13) Previously we wrote: "There is no first-party statement from either X or Meta that an LLM enters the organic feed ranking path". When ConnectionMind made that statement, half of this claim was overturned.

However, the forms in which the two companies put in an LLM are fundamentally different.

  • Netflix GenRec is the ranker itself. It attaches a catalog softmax head to an LLM backbone.
  • Meta ConnectionMind is a graph-path reasoner. The LLM emits path expansions as JSON and is aligned with F1-based GRPO (a reinforcement learning technique).
  • ConnectionMind chose a hybrid in the serving layer. Most traffic is served by a GNN trained on meta-paths the LLM mined offline, and the LLM covers only the online hot path for 5–10% of heavy users.

The most notable point in this slot is that what "the LLM ranks" means differs between the two cases.

Case: X's Grox (2026)

Grox is a nearline content annotation pipeline with which X labels posts using an LLM. The code is in grox/, it is Kafka-based, and it does not sit in the request path. verified xai-org/x-algorithm, 2026 — grox/main.py, grox/data_loaders/kafka_loader.py

Grox runs as 3 processes. grox-engine, grox-dispatcher, and a gRPC server communicate through multiprocessing.Manager queues. verified — grox/main.py, grox/schedules/context.py:19-28

What it extracts — 9 plans

As of Gen3 (0bfc279), Grox has 9 plans, and 4 of them build multimodal post embeddings verified — plan_master.py and each plan file in grox/plans/. At HEAD (862a123, 2026-10-17), 21 plans are registered with @register, and the plan files moved under grox/flows/ verified — grox/flows/.

plan Output
plan_initial_banger quality score, description, tags, Grok topics, slop score, minor-presence score, image-editability
plan_post_safety "deluxe" safety bool metadata
plan_safety_ptos PTOS policy violation verdict (2 stages: category detection → per-policy verdict)
plan_spam_comment reply spam
plan_reply_ranking reply score 0–3
plan_post_embedding_* (4) multimodal post embeddings v3/v4/v5_1

slop score — the LLM assigns an integer to "low-quality content"

The slop score is a low-quality content score (an integer) assigned by the LLM, and it is an instrumented production feature, not an experiment. verified — grox/classifiers/content/banger_initial_screen.py:33-41, grox/tasks/task_pub.py:317, :175-178

  • In the classifier output schema, slop_score: int | None is a 1st-class field.
  • This value is persisted as slopScore.
  • Per-value counters are attached as well. An example counter name is task.publish_unified_post_annotations.slop_score_3.count.

One and the same VLM call yields two kinds of results. One is quality screening (BANGER_INITIAL_SCREEN). The other is a ranking signal (GROK_RANKER). verified — banger_initial_screen.py:49-52,157

Safety labels are fail-closed, reply quality is fail-open

Within the same service, the handling is the opposite. When the LLM result is missing, the safety label is handled toward blocking, and reply quality toward passing verified. The design intent is clear.

  • Brand safety: A post that Grok (xAI's LLM) has not scored is simply classified as MediumRisk. In Gen3 (0bfc279), that meant no ad was placed next to it verified — home-mixer/models/brand_safety.rs:47-51
    • Since the 2026-09-01 commit (Gen4+13), the default ads blender is multi-risk and places BSR-high ads even between MediumRisk posts verified — params/param.rs, x.md ads section.
  • Reply ranking: When there is no result, the score is defaulted to the maximum of 3.0. verified — grox/tasks/task_pub.py:451

For posts after a specific snowflake ID, a post without a PTOS_REVIEWED label is always MediumRisk. The threshold ID is 2_054_275_414_225_846_272, and a snowflake ID embeds its creation time. In other words, from some point on, LLM safety review was stated explicitly as a precondition for ad adjacency. verified — home-mixer/models/brand_safety.rs:37,53

Hallucination guard

Grox checks topic IDs output by the LLM against a fetched allow-list. Unknown IDs are dropped and a counter is incremented. verified — grox/tasks/task_pub.py:232-265

JSON parsing has a 3-stage fallback. It tries pydantic model_validate_json, json_repair, and a regex in that order, and raises an exception if all fail. verified — grox/classifiers/content/reply_ranking.py

The temperature is not 0 but a value very close to 0 verified (the value itself) — banger_initial_screen.py:45-47. The value is temperature = 0.000001. It appears to be meant to avoid a zero-temperature code path, but the code gives no reason inferred.

If the reasoning API call fails, it silently falls back to the VLM on any exception. This means the model tier can vary per request. verified — grox/classifiers/content/safety_ptos.py:269-280

2-stage safety structure

The PTOS safety verdict supports 7 categories, and only 2 of them, AdultContent and ViolentMedia, go through the "deluxe 4.2" path. In deluxe mode, it unconditionally injects one more AdultContent recheck and removes it if there is no violation. This is a high-recall second pass deliberately applied to the highest-risk category. verified — safety_ptos.py:217-230, grox/tasks/task_safety_ptos_policy.py:39-61

↑ Contents

What generalizes from this case

In the Grox case, LLM output is produced ahead of time outside the request path and does not feed directly into the home ranker. verified

  • Nearline is the standard for LLM annotation. It does not put the LLM in the request path; it processes ahead of time via Kafka and writes to KV. X blocks duplicate requests within a 60-second window with 9 dedup caches. verified — grox/tasks/task_rate_limit.py:59…174
    • All 9 are TTLCache(maxsize=10_000, ttl=60).
  • LLM output does not enter the ranker directly; it is passed to the filter and ads layer. At X, Grok safety labels go to the filter and the brand-safety verdict. Topics go to a user-side multi-hot feature. As of Gen3 (0bfc279), the ranking Transformer (Phoenix) took only ID embeddings as input verified — home-mixer/models/query.rs:78-79, phoenix/runners.py:130-144
    • The Phoenix README at HEAD (862a123) says the ranking model takes semantic IDs built from the post's multimodal embeddings as input features verified — phoenix/README.md:241-249, 411.
    • The same README says the input of the multimodal post embedding itself is turned off in all registered ranking configs verified — phoenix/README.md:412, 424-426.
  • As of Gen3 (2026-05-15), multimodal embeddings were built but home ranking did not use them. At that time, multimodal never appeared outside grox/ verified — repo-wide grep.
    • At HEAD (862a123, 2026-10-17), multimodal appears in 28 files outside grox/ verified — 2026-10-19 git grep.
    • home-mixer reads the tweet_multimodal_embeddings dataset and uses it for dedup in the For You video carousel, and this dedup is on by default verified — post_v8_search_embedding_client.rs:14, params/param.rs:1107-1112.
    • The name of the sink that exports the embeddings (StratoPostMultimodalEmbeddingMhSearchAi) points to search verified — grox/tasks/task_write_mm_embedding_sink.py:47.
    • However, since a variant named RECSYS_EMBED_V4 exists, an undisclosed internal recsys consumer is likely to exist inferred.

↑ Contents

Not yet confirmed — user interest summarization

Whether X builds user profiles with an LLM cannot be determined from public sources alone.

home-mixer (the X service that handles For You feed requests) only reads inferred_grok_topics, a per-user inferred interest topic value. This value is a 32-bit multi-hot and is read from Strato (X's internal data lookup layer). The service that produces it is not in the public repo. verified — home-mixer/query_hydrators/inferred_grok_topics_query_hydrator.rs:22-27

Grox has no user summarization task. TaskContext has no user field at all, and the TaskWithUser abstract class exists but has no implementation. verified — grox/schedules/types.py:56-69, grox/tasks/task.py


↑ Contents

Meta — two things are mixed: LLM representation (real) and LLM analogy (rhetoric)

In the Meta recommendation literature, the word LLM refers to two different things. One is a representation (feature) that an LLM actually produced, and the other is the analogy by which the GEM, LLaTTE, and MARM blog posts liken ads models to LLMs. Mixing them reverses the conclusion.

What Substance Where
A. LLM = representation A fine-tuned LLaMA / custom LLM inference engine encodes content and entities into embeddings, and those vectors enter as input features of a regular (non-LLM) ranker Real The LLaTTE paper ("fine-tuned LLaMA models") and HIR ("customized LLM inference engine"); both are ads
B. LLM = architectural analogy Phrases such as "LLM-inspired", "LLM-style scaling laws", and "LLM-Scale" liken training scale, scaling curves, or parameter counts to LLMs. The models referred to are not language models Rhetoric GEM, LLaTTE, MARM blog posts

The primary source for A is the quotes in "Slot 1" and "Slot 3" below, and the primary source for B is the quotes in the table right below verified.

Therefore "the Meta ads stack actually consumes LLM-derived features" and "Meta's ranking model is not an LLM" are both true at the same time inferred. These notes previously looked only at B and lumped A in as an analogy too; that was an error. We correct it here.

↑ Contents

Caveat: "LLM-scale" ≠ "the ranker is an LLM" (the problem with B)

LLM-scale-style phrases in Meta ads blog posts do not mean the ranker is an LLM. The phrases in the three posts liken training scale and recipe, the shape of the scaling curve, and parameter count, respectively, to LLMs. verified Full check of document bodies, 2026-08-09:

Phrase Source Actual meaning
"an LLM-inspired paradigm", "trained at the scale of large language models" GEM blog post, 2025-11-10 An analogy for training scale and recipe. It is an ads recommendation model, not a language model
"predictable, LLM-style scaling laws" LLaTTE blog post, 2026-08-05 An analogy for the shape of the scaling curve. The same post states the difference itself: "Unlike LLMs, which process dense and continuous text, ads recommendation systems must integrate sparse ID features"
"Serve LLM-Scale Models for Ads" MARM blog post, 2026-03-31 An analogy for parameter count (O(1T))

The word "Llama" appears 0 times in the bodies of the GEM, LLaTTE, and MARM blog posts observed 2026-08-09. The corpus checked is the bodies of the 3 blog posts in the table above; the result of downloading each body and counting Llama/LLaMA strings is 0.

⚠ However, this is limited to blog posts. The LLaTTE paper (arXiv 2601.20083) states explicitly verified: "dense content embeddings produced by fine-tuned LLaMA models". This quote is revisited in Slot 3 below. This is a case where the blog post says only B (analogy) and leaves A, the real LLM feature, only in the paper.

inferred We have repeatedly seen press and summary posts render these three phrases as "Meta uses LLMs for feed ranking." This rendering is wrong in two places: the LLM goes not into the ranker but into the input features, and the surface is not the feed but ads.

↑ Contents

Slot 1 — content annotation: only for ad entities

The first-party statement that Meta annotates content with an LLM is confirmed on the ads side, in HIR. HIR processes the multimodal content of advertisers and products with an LLM inference engine and uses it as input features for representation learning. verified Exploring Hierarchical Interest Representation For Meta Ads Deep Funnel Optimization, 2026-07-15

"We retrieve the multimodal information in summary text, images, and video and process it through a customized LLM inference engine that produces encoded feature inputs for our representation learning." "multimodal advertiser and product content processed through LLMs enriches sparse interactions, enabling generalization to rare and unseen entities." "These features are pulled from structured page metadata and advertiser catalog attributes and processed through vision or language models."

HIR has the same structure as X's Grox but a different target. Grox annotates posts that users uploaded, and HIR annotates advertiser and product entities. The purposes also differ. Grox's purpose is quality and safety verdicts (filter and ad-adjacency gating), and HIR's purpose is cold-start generalization ("rare and unseen entities").

inferred This is what divides the two companies' LLM uses. X uses the LLM as a judge, and Meta (ads) uses it as a feature encoder. The same phrase "content understanding" points to opposite roles.

inferred We could not find a first-party statement that Meta annotates organic feed content with an LLM. Here, organic feeds are Facebook Feed, Instagram Feed, Reels, and Threads. The corpus checked is the Meta blog posts and papers in the source list below plus 15 Transparency Center system cards (read 2026-08-09). HIR is explicitly ads deep funnel literature.

↑ Contents

Slot 3 — LLaTTE's "semantic feature" = decisive evidence for A

The LLaTTE paper writes that semantic features are a prerequisite for scaling. verified LLaTTE (arXiv 2601.20083), 2026-01-27:

"semantic features bend the scaling curve: they are a prerequisite for scaling, enabling the model to effectively utilize the capacity of deeper and longer architectures."

The blog post also lists "content/semantic enrichment" as one of the scaling axes verified.

The same paper states directly that the source of this semantic feature is an LLM verified (full HTML text checked 2026-08-09):

"we introduce dense content embeddings produced by fine-tuned LLaMA models as well as Content Understanding models processing heterogeneous multimodal signals (e.g., text and images)" "when LLaMA content embeddings are enabled..."

In other words, "semantic feature = LLM output" is confirmed, not presumed. The blog post does not state this; only the paper does.

This is where A and B diverge. The LLaTTE model itself is not an LLM, but vectors produced by LLaMA enter its input. The first part is B ("Unlike LLMs…") and the latter part is A, and both sentences are in the same post.

This LLaTTE claim ties directly to the opposition in sequence-transformer-ranking.md. HSTU (the sequence model on the Meta organic recommendation side) says "raw categorical engagement feature" alone is sufficient, and LLaTTE says semantic features are a prerequisite for scaling. Two lineages within the same company say opposite things.

↑ Contents

Slot 5 — the only place Meta names Llama in a blog post

The Facebook Groups Search blog post says it uses Llama 3 as an automated judge for grading search results. verified Modernizing the Facebook Groups Search, 2026-04-21

"We utilize Llama 3 with multimodal capabilities as an automated judge to grade search results against queries."

The use matters. This grading is an offline evaluation inside the build verification test (BVT), not the serving path. Even the detail that the prompt was designed to recognize a "somewhat relevant" category is public.

The same post writes about putting an LLM into ranking in the future tense:

"LLMs in Ranking: We plan to apply LLMs directly within the ranking stage." "Adaptive Retrieval: We are exploring LLM-driven adaptive retrieval strategies..."

That is, in Meta's public literature as of 2026-08, "putting an LLM directly into the ranking stage" is a plan, not a deployment inferred. The future tense in the quotes above is verified, but the part "no deployment statement in the whole public literature" is limited to the same corpus (blog posts, papers, 15 cards). It is also about Groups search, not the feed.

⚠ "Directly" matters here. Putting LLM output in as features is already deployed on the ads side (A above).

↑ Contents

Role 6 — A product exists, but the model is not disclosed

Meta has one thing X does not: a surface where users instruct the ranking in natural language.

  • Threads Dear Algo / Your Algo: Users write Dear Algo in a public post, followed by what they want to see more or less of. The instruction text reads: "Just type 'Dear Algo' in a public Threads post, followed by what you'd like to see more or less of." The application window is 3 days for public posts and 1, 3, or 7 days for private ones. verified Details are in threads.md.
  • Instagram Your Algorithm: AI summarizes the user's topics of interest and shows them, and it accepts free-text input. It applies across Feed, Reels, and Explore. verified Details are in instagram.md.

Neither product discloses which model parses the natural language. Instagram says only "AI". observed 2026-08-09 (corpus inspected: the body of the 2 newsroom posts above)

inferred Because the system takes free text and converts it into topic preferences, there must be an LLM or at least a text classifier. However, it could also be implemented with a lightweight topic classifier, so there is no basis to assert that it is an LLM.

inferred This is also the productized form of role 4 (user interest summary). The fact that Instagram shows users "the AI-summarized topics of your interest" means that profile exists internally. X's inferred_grok_topics is the other side of the same object. On X, this value is only read, and its producer is not public. In other words, on X only the pipeline is visible and the product is not, while on Meta only the product is visible and the pipeline is not.

↑ Contents

Case: Meta ConnectionMind — Meta's first production A/B claim for role 3 (LLM as ranker) (2026-08)

ConnectionMind is a paper in which Meta says it put an LLM into the online serving path of recommendation. Llama 3.1-8B handles requests from 5–10% of heavy users directly, and a lightweight GNN trained on graph paths found by that LLM handles the rest. The paper did not disclose the surface. verified — ConnectionMind: Leveraging Social Networks and Large Language Models for Personalized Recommendation at Meta (arXiv 2608.10187), 2026-08-10

There are 6 authors. The 1st author, Haoyu Han, is an intern at Michigan State University, and the other 5 are affiliated with Meta Platforms (Menlo Park). There is no affiliation footnote with an internal team name (Core Ranking / GenAI, etc.). verified same paper

There are three key points.

  1. Serving is hybrid. The LLM is on the online hot path only for the top 5–10% heavy users. A Student GNN serves the other 90–95%. This GNN is trained on meta-paths that the LLM discovered offline.
    • §6.1 says: "For this cohort, requests are routed to the full ConnectionMind LLM" / "we employ an offline distillation pipeline. The LLM processes historical contexts to discover effective meta-paths. These paths are extracted to train a lightweight Graph Neural Network (Student GNN)".
    • This is a different compromise from Netflix GenRec's "100% LLM on batch-compute surfaces."
    • This is the first organic-feed statement in which an LLM actually enters the hot path, and also a dual statement that the GNN still serves the majority.
  2. The LLM emits graph paths as JSON. This behaves completely differently from Netflix GenRec's "pooled hidden state → catalog softmax" scorer. ConnectionMind actually generates text.
    • In §4.1, the state s_d is a prompt containing: "current paths, candidate next-hop edges, and compact textual node profiles".
    • The LLM outputs: "structured action with two components: path expansions and surfaced item–path pairs".
    • Beam search and constrained decoding are not stated explicitly, and outputs are verified after the fact with a format reward.
    • Training goes from SFT to GRPO. SFT does teacher-forcing with BFS shortest paths.
    • The GRPO reward is format −1/+1, an F1-based recommendation reward, and step-wise shaping. The weights are α_rec=0.5·α_step=0.3·α_fmt=0.2.
  3. The deployed backbone is Llama 3.1-8B-Instruct verified §6.1. The A/B ran for several weeks on tens of millions of users.
    • The results are watch time +0.43% ± 0.14%, exposure +0.33% ± 0.08%, and video sessions +0.22% ± 0.13%.
    • The offline benchmarks are the public Delicious and Foursquare sets. They are not Meta data, and there are no LightGCN, SASRec, or HSTU baselines.

⚠ Four cautions apply when handling this statement:

  • The surface is not public. The paper says only "short-form video platform" for the surface. The graph schema points to Facebook Reels/Video, but it should not be cited that way. This surface caveat is included in the ranking section of facebook.md, where the statement was folded in.
    • The graph schema is User–Group, Group–Item, Page–Item, and Item–Item (Co-watch).
  • Meta's own systems (HSTU/GEM/LLaTTE/MARM) are cited 0 times. The only Meta-affiliated citation is Fan et al. 2019 GraphRec. The paper does not establish how this relates to the company's other ranking lines. It may be a parallel line from a separate team.
  • The offline experiments are academic benchmarks. It used Delicious 60/20/20 and Foursquare as benchmarks. There are no strong sequential/generative-rec baselines, and no deep ablation on Meta data.
  • Serving cost and latency are entirely undisclosed. The paper does not say what SLO the 8B LLM actually sustains on the heavy-user hot path, or what the GPU cost, QPS, and p99 latency are. This contrasts sharply with the Netflix GenRec serving-layer blog post, which describes vLLM, MSS (Netflix's common model inference backend), and FSx pre-materialization.

Even so, this paper shakes the center of our judgment on role 3. Until 2026-08, this note's proposition was "Meta does not use LLMs for ranking itself." Even if limited to the heavy-user cohort, an 8B LLM on the online hot path overturns half of that proposition. However, the form differs from Netflix. Netflix replaced the scoring function itself with an LLM backbone, while Meta put the LLM in as a path explorer over a graph. The newly revealed fact is that the substance of role 3 differs by company.

↑ Contents

Case: Netflix — The first deployment-grade first-party statement for role 3 (LLM as ranker)

Netflix uses an internal LLM as the ranker itself in GenRec and reported metric improvements in an A/B test on ~10% of traffic. However, the experiment is limited to batch-compute surfaces, and there is no full-rollout statement yet. verified — GenRec: Towards LLM-Native Recommendation at Netflix, 2026-07

  • A model post-trained from an internal LLM on Netflix data ranks directly verified same post.
    • Training is split into 2 stages. The Netflix-adapted LLM is updated rarely, and the ranking post-training is updated frequently.
    • The ranking backbone is ~1B-10B.
  • Features are expressed in language instead of vectors (verbalization). This is a first-party statement that the feature engineering problem becomes a prompt and context construction problem verified same post. The original text reads: "The context window becomes our new 'feature budget'".
  • Training uses a reward-weighted loss verified same post. It is not full RL, and GRPO is future work.
    • On efficiency, it uses "roughly 40×" fewer Phase-2 labels, and offline MRR (mean reciprocal rank of the correct answer) improves by "about +1.6%".
  • Serving is vLLM's prefill-only approach verified same post. It is 1 pass for the whole candidate set, not 1 pass per candidate. This is a concrete form of reusing LLM serving infrastructure for recommendation.
    • The original text reads: "the model consumes the prompt once and scores the entire candidate set in a single forward pass, with no token-by-token decoding".
  • Short-term and long-term metrics improved significantly in a 4-week A/B on ~10% of traffic verified same post. It is a measured deployment experiment, not Meta Groups Search's "plan" or GEM's "analogy." However, it is limited to "batch-compute recommendation surfaces", and there is no full-rollout statement yet.
  • The serving stack was published in a separate blog post verified — In-House LLM Serving at Netflix, 2026-07-17. GenRec is not an experimental side effect; it is part of the criteria for selecting the serving stack.
    • This item is explicitly listed among the 4 workloads for which Netflix adopted vLLM as its paved-path engine (the in-house standard path): "prefill-only inference for ranking and retrieval".
    • The post describes two factors that determine GenRec's batch serving cost. One is constrained-decoding batch scaling, and the other is model pre-materialization (Amazon FSx).
    • In V0, batch scaling hit a GIL bottleneck, and V1 uses C++ multi-threading: "logits processing time staying flat as batch size grows".
    • Details are in services/netflix.md §GenRec serving layer.

⚠ "The LLM ranks" is easy to misread. The scoring structure is not generation verified same post:

"we extract a pooled hidden state h" → combined with item i's learned embedding eᵢ and the scoring head ϕ via "(e.g., via dot product or small MLP)" to give sᵢ, then ranked by softmax. "All parameters — the backbone, scoring head, and item embeddings — are trained jointly."

The LLM does not generate item titles to recommend. The LLM is an encoder that produces the user representation h, and the final scoring is still an embedding dot product or a small MLP.

inferred Seen this way, the actual form of role 3 is closer to replacing the sequence Transformer backbone with an LLM and changing the input representation from IDs and features to text than to "making recommendation a generative model." In effect, it is the same skeleton as Netflix FM (a GPT-style sequence Transformer with ID and feature tokens), with only the backbone and input changed. Related discussion is in sequence-transformer-ranking.md. Missing this distinction leads to confusing GenRec with generative retrieval of the semantic ID family (IDs that represent an item as a sequence of semantic tokens), but the two are different approaches. Generative retrieval is covered in the "generative retrieval / semantic ID" entry of radar.md.

Netflix's other roles are as follows:

  • Role 1 (content annotation): There is no first-party statement on LLM annotation. For artwork selection, only research-stage papers exist on VLM/LLM post-training verified — arXiv 2601.02764, 2026-01.
    • Content metadata has traditionally been tag-based, and because Netflix is a curated catalog that already has rich metadata per item, demand for UGC (user-generated content) annotation is small to begin with inferred.
  • Role 6 (natural-language instruction): There is a conversational search beta. Users state mood and intent in natural language and it recommends verified — About Netflix 2025.
    • The OpenAI collaboration claim is secondary reporting, and we could not confirm a primary source inferred.

Placed alongside X and Meta, X put the LLM in as a judge (annotation, safety); Meta as a feature encoder (ads), an offline judge, and, from 2026-08, a graph path reasoner for heavy-user requests; and Netflix as the ranker itself. Of the three, only Netflix has an LLM as the scoring function in the serving path. However, the published experiment is limited to batch-compute surfaces.

inferred Corpus size may explain this order: with thousands of candidates the LLM inference cost is affordable, and with corpora of hundreds of millions under a millisecond-level budget, as at X and Meta, it is natural to start with roles 1 and 2 (offline). Details are in netflix.md.

↑ Contents

Framing verification — is "X is the product surface, Meta is upstream" correct?

The hypothesis set at the start of this note is only half right. It is corrected here.

  • The wrong half: X's Grok is not a product surface visible to users. Grox is a nearline pipeline, and users see neither the slop score nor the PTOS verdict. If anything, the side with a user-facing natural-language surface is Meta (Dear Algo, Your Algorithm). The hypothesis had this part backwards.
  • The right half: X's LLM output actually makes decisions in the serving path. It passes filters and gates ad adjacency (brand_safety.rs). Until ConnectionMind in 2026-08, Meta's published LLM uses were the offline evaluation of Groups Search and the offline feature encoding of HIR, and entering the serving path was "we plan to".
    • ConnectionMind said it sends requests from the top 5–10% most active users to the LLM verified — arXiv 2608.10187 §6.1.

The accurate statement is this inferred. The evidence grade is medium. It is solid based on the public literature, but it says nothing about undisclosed systems. Updated 2026-08-13: ConnectionMind overturned the second sentence.

X wired LLM verdicts into production decisions, and Meta uses LLMs as an (ads) feature encoder, a (Groups Search) offline judge, and now a graph path reasoner on the heavy-user hot path (on an undisclosed short-form video surface). The first first-party statement of an LLM entering the organic feed ranking path was Netflix GenRec (2026-07, LLM = scoring function), and Meta ConnectionMind (2026-08, LLM = graph path reasoner) is the second.

⚠ The risk that the public asymmetry looks like a conclusion is still this note's biggest risk. There are four points where this framing could be shaken:

  • Meta barely publishes its organic feed stack. Absence did not mean non-use, and in fact this was confirmed when ConnectionMind appeared.
  • X publishes its source, so everything that exists can be seen.
  • Netflix's statement is limited to batch-compute surfaces, and Meta's is limited to 5–10% of heavy users. Neither company has "100% LLM on the full hot path."
  • When lining up the three companies in one line, the differences in surface type and serving cohort must not be erased.

inferred(secondhand) A 2026 Digiday article reported the same direction. The article title is "Meta's LLM bet has yet to touch its core ads business". It is secondary reporting, so it was not used as evidence, and the conclusion above was built from Meta first-party documents alone.

↑ Contents

What is still unconfirmed on the Meta side

As of this note's last updated date (2026-08-13), most Meta-side questions are open. Only the source of LLaTTE's semantic features was resolved, on 2026-08-09, and one follow-up question remains there.

  • The natural-language parser of Dear Algo / Your Algorithm. Nothing is public about whether it is an LLM or a classifier, or where it attaches in the pipeline (candidate filter / score boost).
  • Whether organic feed content has LLM annotation. Only the ads side (HIR) is confirmed.
  • Whether LLaTTE's semantic features are LLM output. Resolved (2026-08-09). The paper writes "fine-tuned LLaMA models" directly, and it is covered under item A above. The remaining question is whether those LLaMA embeddings also enter the organic feed ranker, which we have not yet confirmed.
  • Whether the "LLMs in Ranking" plan of Groups Search was actually deployed. As of 2026-04 it was in the future tense.
  • Whether Meta has an LLM safety verdict equivalent to X's PTOS. Meta handles content policy enforcement separately from the recommendation literature, so we could not confirm it within the scope of this repository.

↑ Contents

Who uses this

X (Grox), Meta ads and Facebook Groups Search, and Netflix (GenRec) have stated in primary material that they use LLMs verified. Instagram and Threads released features where users enter ranking preferences in natural language verified. However, the bodies of the relevant newsroom posts for the two services do not disclose which model parses that natural language observed 2026-08-09.

  • X: Uses Grox. It was split into a dedicated service in the 2026 generation verified.
  • X (2025 Scala generation): Grok-based filters and features entered home-mixer/tweet-mixer first. All 24 Grok-related files were newly added in the 2025-09-03 commit, and the 2023 snapshot has 0. verified twitter/the-algorithm c54bec0, 2025 — git ls-tree -r --name-only c54bec0 | grep -ci grok = 24, and the same command gives 0 at the 2023 tip 72eda9a.
    • Examples of the files are GrokGoreFilter, GrokNsfwFilter, GrokSpamFilter, GrokViolentFilter, GrokSlopScoreRescorer, and GrokAnnotationsFeatureHydrator.
    • Of these, the 4 safety filters are boilerplate made by copying 61–66% of the existing PreviouslyServedTweetsFilter.scala, according to git copy detection. verified — git show --name-status -C -C --diff-filter=C c54bec0
  • Meta ads: LLM features are real. Dense content embeddings made by HIR's "customized LLM inference engine" (encoding advertiser and product content, 2026-07) and the LLaTTE paper's "fine-tuned LLaMA models" enter as ranker inputs verified.
    • Separately, "LLM-scale" in the GEM/LLaTTE/MARM blog posts is an analogy about model architecture. The two must be distinguished (the A/B table above). Details are in facebook.md.
    • As of the 2026-10-19 GenRecs Tokenization blog post, Meta ads ranking and retrieval use sequences of semantic tokens (semantic ID) instead of item IDs as the input representation, and together with GEM and the Adaptive Ranking Model delivered conversion +0.35% verified — GenRecs Tokenization (blog).
      • The tokens are made by quantizing content embeddings from a pretrained multimodal model combined with engagement-based representations verified. Against the A/B table above, this is a statement that extends A (representation) to the ID role inferred.
      • The +0.35% was measured in 2026-02 (footnote "Meta Internal Data, measured in February 2026") verified. Details are in daily 2026-10-21.
  • Facebook Groups Search: Uses Llama 3 as an offline automated judge. An LLM in the ranking stage is at the planning stage. verified
  • Instagram: Your Algorithm has an AI-generated topic summary and free-text input. The model is undisclosed. verified (feature) / observed 2026-08-09 (model not stated, body of the relevant newsroom post) → instagram.md
  • Threads: Has Dear Algo / Your Algo. It is the only case that makes ranking preferences a public social object. Reposting applies someone else's preferences to my feed. The parser is not public. verified (feature) / observed 2026-08-09 (model not stated, body of the relevant newsroom post) → threads.md
  • Facebook Feed (organic): There is still no system card or blog statement about the organic feed itself.
    • However, ConnectionMind (2026-08) said it deployed Llama 3.1-8B on the heavy-user hot path of an undisclosed "short-form video platform" verified (the statement itself).
    • From the graph schema, that surface is likely Facebook Reels/Video, but it cannot be confirmed inferred (surface). Details are in the ConnectionMind section of facebook.md.
  • Netflix: In GenRec, the LLM is the ranker itself (10% traffic A/B, 2026). Conversational search is a beta, and the artwork LLM is at the research stage. verified Details are in netflix.md.
  • Other services: Not yet investigated. This is an open question.

↑ Contents

Sources

X

Meta

Netflix

↑ Contents