- Sources read: 4
- Canon files updated: 5
- Radar entries: 1
Other changes reviewed today:
- X switched the default ads blender for For You back to slot-spread after one week and added shuffled-history retrieval, off by default.
- Kuaishou published a paper on RecoGEM, a serving system dedicated to generative recommendation that serves 400 million DAU per day on average.
1Interests users add are applied separately at each funnel stage — Facebook
Source Your Algorithm: Giving People More Ways to Personalize Facebook Recommendations — Meta Engineering blog, 2026-11-10, blog.
Background Facebook announced Your algorithm in its newsroom on 2026-10-13. It is a page where users add and remove interests that drive Feed and Reels recommendations, or write them as free text. That post said only that it uses an LLM and did not disclose where in ranking the entries go. This post is the engineering explanation of the same feature and describes, stage by stage, the path an interest takes from verification through retrieval (the stage that gathers candidates to pass to ranking), ranking, re-ranking, and the on-device cache.
What we learnedA. Interests do not change the ranker; they enter through a separate mechanism at each funnel stage
- Each "Interested In" interest gets four dedicated retrieval sources verified — blog.
- Two find matching content directly through search-like topic clusters, and two widen the range through a content graph and item-to-item similarity.
- Each request fetches candidates for only one interest, so when there are several interests they take turns across requests.
- The post says that without these sources, content for a new interest might not enter the ranking pipeline at all.
- Candidates semantically close to an interest receive a boost in late ranking verified — same blog post.
- The relevance check is an embedding-based comparison between the meaning of the interest and the candidate.
- The control layer of re-ranking (the stage that reorders a list that already has ranking scores) bounds the volume of each interest verified — same blog post.
- It spaces out recommendations for the same interest and caps each interest's daily contribution.
- A new interest receives extra weight for a limited period and afterward is learned from engagement responses. The values for the period, the weight, and the cap are not stated.
"Each interest in Interested In drives four dedicated retrieval sources." "The control layer spaces out recommendations for the same interest and caps each interest’s daily contribution. Retrieval also fetches candidates for only one interest per request, so every interest gets a turn. New interests receive extra weight for a limited period." — Your Algorithm blog (blog), 2026-11-10
What we learnedB. A small LLM verifies the input, and a fine-tuned LLM removes unwanted posts after ranking
- When an interest is added or moved, a small LLM checks whether it holds up as a topic, finds duplicates, and maps it to a cleaned-up topic name verified — same blog post.
- A verified interest gets an embedding and search keywords and is stored in a preference store that Feed and Reels read together.
- Integrity and safety checks are handled by a dedicated component separate from the LLM.
- "Not Interested" is applied in layers across several stages verified — same blog post.
- During ranking, the same embedding comparison removes candidates that are too close, and closer ones are lowered by demotion (a treatment that lowers impression rank) rules.
- After ranking, a fine-tuned LLM reviews the final list and removes items related to an interest recently added to "Not Interested".
- A request to reduce AI-generated or suggestive content goes to a dedicated demotion signal, not to topic matching. If a specific creator is named, that creator's content is filtered out immediately.
- The pre-filled interest list shown on a first visit and the one-sentence summary (Lately Summary) are also produced by an LLM from past Feed and Reels watch signals verified — same blog post.
- Pre-launch evaluation had a separate LLM score the output of each LLM call against expected behavior verified — same blog post.
"The ranking funnel matches interests to candidates using embeddings, which are fast but coarse. To catch what they miss, a fine-tuned LLM reviews the ranked list and removes content it judges to be related to an interest recently added to Not Interested In. A key insight was that a small model fine-tuned to return only the items to remove was faster and more reliable than a general-purpose model judging each item individually." — Your Algorithm blog (blog), 2026-11-10
What we learnedOther changes
- When an interest is added, the user gets new recommendations right away through a supplementary request (supplementary tail load) outside the regular request cycle verified — blog.
- When an interest is put in "Not Interested", the client receives that interest's cluster and discards matching content already cached on the device before display verified — same blog post.
- The post has no figures such as A/B results, latency, or user counts verified — same blog post.
Canon update services/facebook.md had the intro sentence of ### User controls rewritten based on the new blog post, with a block of mechanism bullets and quotes added. The inferred bullet written from the newsroom post alone ("the LLM turns free text into topics or embeddings…") was replaced with confirmed content. A blog link was added to the Your algorithm row of the table, item 15 (the weight period and cap values) to ## Open questions, and the blog to ## Sources. In topics/llm-in-recsys.md, the intro, Meta cells 4, 5, and 6 of the role table, the ## Role 6 section, ## What is still unconfirmed on the Meta side, and the Facebook entry in ## Who uses this were revised. In topics/feed-diversity.md, a sub-bullet on per-interest spacing and daily caps was added to the Facebook entry in ## Who uses this.
Why it matters ⚠ Claim changed: llm-in-recsys.md stated that "there is no public information at all on whether the natural-language parser of Dear Algo / Your Algorithm is an LLM or a classifier, or where it attaches in the pipeline", but for Facebook there is now a stage-by-stage answer. The answer is not "put conditions into the ranker" but a structure that combines added retrieval sources, a late-ranking boost, a re-ranking cap, and LLM post-processing filtering. There is no statement on whether the Instagram feature of the same name has the same structure, so we leave it as an inference.
2The default ads blender went back to slot-spread after one week — X
Source xai-org/x-algorithm @ 660cd74 — xAI, 2026-11-10, code. In these notes' numbering, this is Gen4+Gen60.4+N, the number these notes assigned in order to commits after the 2026-08-13 Gen4 release.
Background In X For You, the ads blender (the last stage that inserts ads among organic posts) decides ad placement. The candidates are the multi-risk blender (which combines the risk level of posts next to an ad with the contexts the advertiser allowed to decide placement) and the slot-spread blender (which first sets ad slots evenly across the page and pulls safe posts near a slot next to the ad). The default changed to slot-spread on 2026-10-31 and to multi-risk on 2026-11-03. This commit changes the default back to slot-spread in the cron mirror (a file that syncs production feature-switch defaults daily and publishes them) and adds a few retrieval experiment paths that are off by default.
What we learnedA. The default ads blender switched from multi-risk back to slot-spread
- The default of the ads blender in home-mixer (the service that receives For You requests) is
slot_spreadverified —params/param.rs:976-981.- The last sync time in the mirror header is 2026-11-09T16:00:34Z.
- This is the third switch in ten days: 10-31 slot_spread, 11-03 multi_risk, 11-10 slot_spread.
param!(
AdsBlenderType,
String,
"rust_home_mixer_ads_blender",
"slot_spread"
);
What we learnedB. A source that shuffles history order and calls retrieval once more was added, off by default
- The new candidate source calls Phoenix retrieval (the two-tower candidate search of the Grok-based Phoenix model) once more with a copy of the user history whose row order is randomly shuffled verified —
sources/shuffled_history_phoenix_source.rs.- The switch
EnableShuffledHistoryRetrievalis false by default —params/param.rs:188-193. - The shuffle runs
shufflerow by row on the Arrow columnar history and then serializes it again. The resulting candidates carry the served type (a label showing which source a candidate came from)ForYouPhoenixRetrievalShuffledHistory. - It is turned off for topic requests, in-network-only requests, and cache-reuse requests. The cap and the exclusion of already seen posts use the same parameters as the existing
PhoenixSource.
- The switch
- We infer this is an experiment that collects candidates relying less on the order information in the history, to measure the effect inferred. The basis is that it feeds input with the same model and cap but a different order, and records statistics for selected and unselected candidates separately.
What we learnedC. The default threshold of the new-user engagement filter is set to 0.4% likes per view, but the filter is still off
- The default threshold of the filter that removes low-engagement OON (out-of-network) posts for viewers right after sign-up or return became a ratio of 0.004 verified —
params/param.rs:876-887.- Ratio mode changed from false to true, and the threshold from 0.0 to 0.004. The default metric is
fav, so the threshold is like count ÷ view count. - The filter switch
EnableNewUserMinEngagementFilteris off by default, and the target window is 1,800 seconds after account creation or return. - Posts with no view count or a count of 0 are kept, and in-network posts are not checked —
filters/new_user_min_engagement_filter.rs:64-108.
- Ratio mode changed from false to true, and the threshold from 0.0 to 0.004. The default metric is
What we learnedOther changes
- Two dedicated indexes for AI-generated video (detected through author self-labeling, C2PA, Grok signatures, and so on) were added to the Phoenix retrieval index with 1-, 2-, and 7-day windows, and posts in the NSFW video index are excluded verified —
phoenix-rankall/src/config/mod.rs:222-227. C2PA is a content provenance standard that embeds the generating tool and edit history in a signed file. No serving request looks up these indexes. - A Phoenix not-interested prediction term was added to the video carousel sort score with weight 0.0 verified —
util/video_carousel.rs. A test pins that, at weight −25, a video with a not-interested probability of 0.02 moves down one slot. - The carousel header icon can now be turned on and off with a switch and is off by default verified —
params/param.rs:1254-1259. - A switch that puts a pipeline trace card of Under the Hood (a transparency tool where users see the labels on their own posts and pipeline processing) at the top of For You was added, off by default verified —
for_you_server.rs. - VF (visibility-filtering, a service that decides per post whether it may be shown to this viewer) gained a mechanism to turn a single rule on or off for the experiment group only, but the only registered experiment is for testing verified —
rules/experiment.rs. Experiment exposure is logged only for requests where that rule would change the verdict. - The safety label cache deletes the key and deletes it once more after 30 seconds, and discards cache fills built from reads more than 30 seconds old verified —
safety-label-source/dragonfly.rs. - Phoenix ranking training gained ad campaign, line item, creative format, and objective ID embedding inputs, off by default (dimension 0) verified —
xrex/models/recsys_model.py. - Experiment20Fou 0.3 was added to the list of shadow traffic (a path that sends only scoring to an experiment cluster and does not use it for serving) ratios verified —
params/param.rs:91-101. - The default training data reader was changed to a Rust parquet reader, and model reload supports incremental download between peers. There is no policy change verified —
xrex/configs/data_feeds.py.
Canon update services/x.md had the reference commit in ## Summary raised to 660cd74. The ads blender default and history sentences in ### The final placement is not score order, the ## Ads intro and history list, and the multi_risk default period in ### Ads blending and brand safety verdict were revised. A ShuffledHistoryPhoenixSource row and detail bullets were added to the candidate source table, a default-threshold sub-bullet to the NewUserMinEngagementFilter bullet, and a not-interested term and a header icon bullet to the carousel entry. One bullet each was added to ### Phoenix retrieval index, the ## Safety intro, and the ### Under the Hood section, and a C2PA row to the ## Glossary table, with a Gen4+60 row added to the git log basis and reference commit table in ## Sources and to the commit summary table. The brand safety bullet and the source reference commit in topics/llm-in-recsys.md were revised as well.
Why it matters X has switched between two ads blenders three times in ten days, and we infer it has not yet settled which one to keep as the final default. The basis is that only the same two values alternate in the mirror and no other ads parameter changed, so we leave it as an inference. All other changes are off by default, so as of this commit the only change in For You behavior is ad placement.
3A system serving generative recommendation to 400 million DAU was published — Kuaishou
Source RecoGEM: A Serving System for Production-Scale Generative Recommendation — Kuaishou Technology et al., 2026-11-09 v1, paper.
Background Generative recommendation (GR) does not score each candidate; instead it generates an item identifier token by token over several steps. This approach fits neither existing recommendation serving pipelines nor LLM serving stacks. It must carry many candidate states at each step, and the latency limit is short. This paper reports the dedicated serving system Kuaishou built to solve this problem and the scale of its deployment.
What we learnedA. Generative recommendation serving has been running in large-scale production for more than nine months
- RecoGEM has been deployed for more than nine months, serves 400 million DAU per day on average across search, ads, and recommendation, and runs about ten generative models including OneRec-v2 verified — paper HTML.
- Most authors are affiliated with Kuaishou Technology, and the paper writes "our production lines" instead of a product name.
- The structure is a decoupled design that leaves candidate state transitions and real-time artifact updates to a runtime outside the execution engine.
- On the OneModel workload it reaches more than 1,000 QPS per instance, P99 under 35ms, and 2.88× the throughput of the baseline system, and the cluster peak is 60,000 QPS verified — same paper.
"RecoGEM has been deployed in production for over nine months, serving our applications with an average of 400 million daily active users across search, advertising, and recommendation scenarios" — RecoGEM (paper), 2026-11-09
Canon update radar.md had a Kuaishou RecoGEM entry added to ## New this month.
Why it matters On the generative retrieval thread's question of whether serving cost is a barrier, Kuaishou answered with large-scale deployment figures. It is not directly related to tracked services, so it stays in the radar only.
Radar
- Kuaishou RecoGEM — a serving system dedicated to generative recommendation — arXiv 2611.12296.
- We skimmed 30 arXiv cs.IR responses (submitted 2026-11-07–11-09). TS-GEAR, generative retrieval for Taobao Shangou search ads, has deployment results but is limited to nearby-delivery search ads, so we dropped it.
- The Reddit newsroom post Introducing Reddit Reviews (2026-11-10) is a feature that groups product-related conversations in search with AI and shows them as review pages. It is unrelated to feed ranking, so we did not add it to the canon.
- The new r/RedditEng post Beyond Static Credentials (workload identity and mTLS, 2026-11-09) and the Netflix Tech Blog synopsis fact-checking post (2026-11-09) are unrelated to recommendation, so we skipped them.
What to check next
- Reddit RSS closes (2026-11-13); after that the r/RedditEng lookup has to move to the WebSearch fallback path.
- X ads blender default — check in the next mirror whether the third switch is the last one.
- X shuffled-history retrieval and the AI video index — watch whether the switch is turned on or home-mixer starts looking up the new index.
- Instagram Your Algorithm — there is no primary material from the Instagram side stating whether it has the same structure as the Facebook blog post. The grade is inferred.
- research.netflix.com/publications — HTTP 404 again today.
Lookup failed: ai.meta.com/blog — the list only shows posts up to 2026-07, so we could not confirm recent posts