Spaces:
Sleeping
Sleeping
Commit History
-
optimizing for speed, parallelizing the processes
Parthnuwal79975b32
-
Updating demo
Parthnuwal7fc9c994 -
Updated ido
Parthnuwal77a07aa4 -
Updated ido
Parthnuwal7c6230f6 -
fix: stop taste worlds getting near-identical names
Parthnuwal7Four of seven worlds came back as permutations of Pop/Music/Electronic/Asian, which made genuinely different groups unreadable. The clustering was fine; the naming was not. YouTube's topicCategories are extremely coarse -- Bollywood playback, K-pop and Western EDM all return "Pop music, Music, Electronic music" -- and the prompt was telling the model to use them, so it faithfully echoed near-identical inputs. Now the channel names lead, generic topics are filtered out, topics are demoted to a trailing hint, and the prompt asks for distinct names with worked examples. Duplicate and reordered-duplicate names are rejected on the way back in, since two worlds sharing a name is worse than falling back to channel labels. Live result: "Bollywood Playback Singers", "Western Pop Artists", "IPL Cricket" in place of "Asian, Pop, Music", "Pop, Electronic, Music", "Cricket, Sport".0e9ab9b -
feat: choose cluster count per user instead of fixing it at six
Parthnuwal7Forcing K=6 split real groups: a viewer with one Western-pop world got it broken into "Pop Music and Electronic", "Pop Music and Film" and "Pop Music and Asia". Now clusters at every K in 3..8 and keeps the best silhouette score, so the count follows the data. On the reference export that picks 7 and keeps pop together.debd89c -
feat: add consent-gated enrichment to the ingest path
Parthnuwal7build_enrichment fetches channel facts and cluster names, and every failure path returns the empty form -- enrichment improves cards when it works and is invisible when it does not, but can never fail a Wrapped. Consent is checked here as well as inside name_clusters. The gate guards the one place user-derived data leaves the server, so it gets two independent guards.37d2217 -
feat: wire viewing style and taste cards into wrapped generation
Parthnuwal7generate_wrapped_cards gains an optional third `enrichment` argument; existing two-argument callers are unaffected. Gated cards are filtered out entirely rather than emitted as null, since a null would render as the empty card the gate exists to prevent.7cf6645 -
feat: add five card generators for viewing style and taste worlds
Parthnuwal7Gated cards return None rather than an empty shape, so the caller can omit them entirely. taste_worlds keeps its channel label alongside any AI-generated name, so the name is always checkable against the channels it came from.357622d -
feat: add cluster_naming service with consent-gated LLM call
Parthnuwal7Naming from video titles was tried and rejected: TF-IDF gave usable labels about a third of the time and hashtag debris otherwise, and a confidently wrong label is worse than none. The model is instead given YouTube's own topic categories as facts. Consent gates the request itself, not just its result. At most five channel names per cluster leave the server; never history, timestamps, titles, or identity.3101940 -
feat: add channel_topics service for YouTube channel facts
Parthnuwal7One channels.list request covers 50 channels at 1 quota unit, so naming six clusters costs a single call against a 10,000/day budget. Never raises: no key, a failed request, or a network error all return None and the caller degrades.03940ee -
feat: add interest_vectors service for channel taste clustering
Parthnuwal7Sessions are baskets, channels are items: co-occurrence -> PPMI -> SVD -> k-means. numpy only; sklearn+scipy would add ~100MB to a free-tier deployment. k-means uses 10 restarts picked by inertia. This is not optional - a single k-means++ init stranded whole groups, producing one cluster containing three disjoint groups while splitting another into singletons. Co-occurrence embeddings are near-degenerate within a group, so an unlucky seeding is easy to hit. Ground truth: recovers 12/12 of the themes planted in the demo fixture.05fae22 -
feat: add discovery service for novelty and concentration trends
Parthnuwal7Two curves that are most interesting when they disagree: falling novelty with falling concentration means the viewer stopped finding new channels but spread attention wider across the ones they had.b099d05 -
feat: add viewing_style service for rapid-fire and run analysis
Parthnuwal7Takeout does not label Shorts, so rapid-fire viewing is inferred from the gaps between watches. Validated to discriminate rather than report a constant: 0.8% on the long-form demo fixture against 76-80% on real Shorts-heavy history.d88fcef
-
Adding v1 of Ido
Parthnuwal700d3a75