Skip to content

make blogs more discoverable #17690

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 32 commits into from
Jul 16, 2025
Merged

Conversation

schlawg
Copy link
Collaborator

@schlawg schlawg commented Jun 14, 2025

  • empower qwen to save curators time
  • add some more sort buttons
  • add ui to manage lobby queue
  • blog search

before i get to deployment steps, you'll want to thumbs up/down all the stuff i've changed.

you can mongosh localhost:37017 on snafu to give yourself admin and check out the carousel stuff

although this no longer uses the ublog_post.rank field and that code was deleted, all the ingredients that calculate rank remain untouched in the database. this means we can safely roll back to the old presentation & ranking code if mods threaten insurrection or some other insurmountable problem presents

@schlawg schlawg marked this pull request as ready for review June 14, 2025 09:42
@schlawg schlawg marked this pull request as draft June 15, 2025 02:08
@schlawg schlawg marked this pull request as ready for review June 15, 2025 21:52
@ornicar
Copy link
Collaborator

ornicar commented Jun 17, 2025

If I read the code correctly, then the blogging homepage will show all blog posts tagged by the LLM as "good" (or untagged but let's ignore this for now), sorted only by date.

We lose the ranking of blog posts by:

  • blog tier (!!)
  • manual moderator adjust
  • presence of an image
  • number of likes
  • language

As a result I expect the blogging homepage to be overrun with low quality content that just passed the LLM evaluation, without any additional ranking, therefore without opportunity for popular or quality content to float above the pile.

But I suppose that's the idea. To give every post a chance for the top of the pile. And while I don't think it's a good idea, the implementation of it looks good, and I'm willing to give it a try.

@schlawg
Copy link
Collaborator Author

schlawg commented Jun 17, 2025

But I suppose that's the idea. To give every post a chance for the top of the pile. And while I don't think it's a good idea, the implementation of it looks good, and I'm willing to give it a try.

Good. The filter does a lot of work, check out testy.lichess.dev (which has the full prod blog db up until early march of this year)

@schlawg
Copy link
Collaborator Author

schlawg commented Jun 17, 2025

blog tier (!!)

yes, blog tier's impact on community has been removed. but the db data and ui to set it remains, and i can see it being given purpose in the future (i.e. "best" tier auto-pins to carousel for 7 days, "good" tier auto-adds new posts to carousel, etc.)

manual moderator adjust

mods only used this on titled bloggers they wanted to treat with kid gloves. most of the time they just nerf blog tier to make posters go away for good

presence of an image

good catch - that's an oversight. maybe we can treat lack of image as a downgrade from good -> weak for filtering

number of likes

not really, there is now global options to sort by likes in most indices

language

the community page still lets you pick a language. if you're talking about the -30 days that UblogRank used to apply when looking at a post from another language, that was effectively just a filter. -30 day penalty posts would only begin to appear after roughly 80 paginator pages.

@@ -79,6 +79,7 @@ GET /@/:username/tv controllers.User.tv(username: UserStr)
GET /@/:username/perf/:perfKey controllers.User.perfStat(username: UserStr, perfKey: PerfKey)
GET /@/:username/all controllers.User.gamesAll(username: UserStr, page: Int ?= 1)
GET /@/:username/download controllers.User.download(username: UserStr)
GET /@/:username/blog controllers.Ublog.index(username: UserStr, page: Int ?= 1)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yikes. could we change /@/:username/:filtername to /@/:username/filter/:filtername to make routes less brittle or have external links committed us to the former for all of eternity at this point?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah we shouldn't break these URLs.

One thing we could do is /@/:username/$filter<all|me|rated|...> if we value routes ordering enough to accept the duplication of https://github.com/lichess-org/lila/blob/master/modules/game/src/main/GameFilter.scala#L5-L5

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or replace aggressive routes that can shadow more specific ones with a commented placeholder like # GET /*/:username/:filter - see end of file, and paste the originals at the end.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

although i'm probably the only idiot who runs around copying and pasting blocks of our routes file without checking

@schlawg
Copy link
Collaborator Author

schlawg commented Jun 19, 2025

If I read the code correctly, then the blogging homepage will show all blog posts tagged by the LLM as "good" (or untagged but let's ignore this for now)

about that untagged bit, that was kind of a "TODO". we should have a quality before listing or ingesting anything but we also want resilience to an extended together.ai outage.

how about we add an "oh shit, allow untagged stuff in listings" button to my new favorite page in /dev/settings? if together.ai goes down for a period, we can toggle it and the system knows to just treat all the new stuff as good until the oh shit button is toggled off.

we might want to move llm model from conf to there as well. not to make it easier to change, but so automod.mjs stays up to date with lila.

@ornicar
Copy link
Collaborator

ornicar commented Jun 20, 2025

we can toggle it and the system knows to just treat all the new stuff as good

I'd rather have it treat all the new stuff as bad. Not showcasing good stuff is sad, but showcasing bad stuff is worse.

@schlawg
Copy link
Collaborator Author

schlawg commented Jun 20, 2025

unreviewed stuff could be considered weak? it would allow a bare minimum of function during an extended outage.

at = data.featuredUntil.isEmpty.option(nowInstant),
until = data.featuredUntil.map(nowInstant.plusDays)
)
for _ <- colls.post.updateOrUnsetField($id(post.id), "featured", featured)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we could really use an abstraction like this that consolidates a list of options into respective $set or $unset documents, but it'd probably be an ugly hack given the type system and reactivemongo dsl.

Copy link
Collaborator

@ornicar ornicar Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes! setsAndUnsets is my new favorite function.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was thinking of Option[Any] (rather than BSONValue) but that would require introspection

@ornicar
Copy link
Collaborator

ornicar commented Jun 25, 2025

I'm ready to merge. What are your recommendations for prod deploy?

@schlawg
Copy link
Collaborator Author

schlawg commented Jun 29, 2025

@schlawg schlawg force-pushed the blog-discoverability branch from 1613366 to 5181c26 Compare July 3, 2025 18:29
@ornicar ornicar merged commit d5c0507 into lichess-org:master Jul 16, 2025
6 checks passed
@schlawg schlawg deleted the blog-discoverability branch July 21, 2025 01:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy