本文へ移動
cccskills
無料GitHub で公開

gorse-05-config-migration

Fix Gorse 0.5.x recommendation engine silently disabled or degraded due to config incompatibility with 0.4. Use when: (1) Gorse 0.5 recommendations are poor/empty despite having data, (2) collaborative filtering appears disabled even though [recommend.collaborative] section exists, (3) migrating Gorse config from 0.4 to 0.5, (4) old config keys like [recommend.popular], [recommend.neighbors], [recommend.online], [recommend.offline] are being used with Gorse 0.5. Critical: type="mf" must be explicitly set in [recommend.collaborative] or CF is silently disabled (default "none").

インストール方法を見る

含まれるファイル(1)

  • SKILL.md5.9 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Gorse 0.5.x Config Migration from 0.4

Problem

Gorse 0.5 introduced breaking config changes from 0.4. Old config sections are silently ignored (no error, no warning), making it appear that features like collaborative filtering, trending, and item neighbors are configured when they're actually disabled.

The most critical issue: [recommend.collaborative] defaults to type = "none" in 0.5, meaning collaborative filtering is silently disabled unless you explicitly set type = "mf".

Context / Trigger Conditions

  • Gorse 0.5.x is deployed but recommendations seem random or low quality
  • Collaborative filtering doesn't seem to work despite config having [recommend.collaborative]
  • Config has old 0.4 sections: [recommend.popular], [recommend.neighbors], [recommend.online], [recommend.offline]
  • Upgrading from Gorse 0.4 to 0.5
  • Gorse master starts successfully but old config features don't take effect

Solution

Removed 0.4 Sections (silently ignored in 0.5)

0.4 Section0.5 Replacement
[recommend.popular][[recommend.non-personalized]] (TOML array of tables)
[recommend.neighbors][[recommend.item-to-item]] + [[recommend.user-to-user]]
[recommend.online] (explore/exploit)[recommend.ranker] (FM or LLM-based)
[recommend.offline][recommend.ranker] cache_expire + [recommend.fallback]

Removed 0.4 Keys (do not exist in 0.5)

  • enable_item_neighbor_index
  • enable_user_neighbor_index
  • item_neighbor_type
  • neighbor_type
  • explore_recommend
  • popular_window

Critical Fix: Enable Collaborative Filtering

# 0.4 style (BROKEN in 0.5 — CF silently disabled):
[recommend.collaborative]
fit_period = "60m"
fit_epoch = 100

# 0.5 style (WORKING — must add type = "mf"):
[recommend.collaborative]
type = "mf"
fit_period = "60m"
fit_epoch = 100

Complete 0.5 Config Template

[recommend]
cache_size = 100
cache_expire = "72h"
context_size = 100

[recommend.data_source]
positive_feedback_types = ["reaction", "comment", "repost"]
read_feedback_types = ["view"]
positive_feedback_ttl = 0
item_ttl = 0

# Collaborative filtering — MUST set type = "mf" to enable
[recommend.collaborative]
type = "mf"
fit_period = "60m"
fit_epoch = 100
optimize_period = "360m"
optimize_trials = 10

[recommend.collaborative.early_stopping]
patience = 10

# Trending/popular — TOML array syntax [[...]] for multiple leaderboards
[[recommend.non-personalized]]
name = "trending_weekly"
score = "count(feedback, .FeedbackType == 'reaction') + count(feedback, .FeedbackType == 'comment') * 2"
filter = "(now() - item.Timestamp).Hours() < 168"

# Content-based item similarity (requires items to have Labels)
[[recommend.item-to-item]]
name = "similar_content"
type = "tags"         # matches on item Labels

# Collaborative item similarity
[[recommend.item-to-item]]
name = "also_liked"
type = "users"        # users who liked X also liked Y

# User similarity
[[recommend.user-to-user]]
name = "similar_users"
type = "items"        # users who share liked items

# FM ranker blends all candidate sources
[recommend.ranker]
type = "fm"           # or "llm" for LLM-based reranking
recommenders = ["latest", "collaborative", "non-personalized/trending_weekly", "item-to-item/similar_content", "item-to-item/also_liked", "user-to-user/similar_users"]
fit_period = "60m"
fit_epoch = 100

[recommend.ranker.early_stopping]
patience = 10

[recommend.fallback]
recommenders = ["latest"]

[recommend.replacement]
enable_replacement = true
positive_replacement_decay = 0.8
read_replacement_decay = 0.6

Key 0.5 Config Differences

  1. [[recommend.non-personalized]] uses Expr language for score/filter functions

    • Available: count(feedback, .FeedbackType == 'X'), item.Timestamp, now()
    • Filter: (now() - item.Timestamp).Hours() < N
  2. [[recommend.item-to-item]] types: "tags" (label similarity), "users" (collaborative), "embedding"

  3. [[recommend.user-to-user]] types: "items" (shared items), "tags", "embedding"

  4. [recommend.ranker] types: "none", "fm" (factorization machines), "llm"

    • recommenders list uses "category/name" format to reference specific recommenders
  5. Custom feedback types: Any string is valid in positive_feedback_types (e.g., "extended_view", "bookmark")

Verification

After updating the config:

  1. Restart Gorse master and check logs for config parse errors
  2. Visit Gorse dashboard (port 8088) — new recommenders should appear
  3. Check /api/dashboard/config endpoint to verify config was accepted
  4. After fit_period (default 60m), verify model training runs in worker logs

Notes

  • Gorse 0.5 does NOT warn about unrecognized config keys — they're silently ignored
  • The [[double.bracket]] syntax is TOML array of tables — allows multiple entries
  • The [single.bracket] syntax is a regular table — only one allowed
  • [recommend.ranker].recommenders must reference recommenders by their "category/name" path
  • Custom feedback types are supported — Gorse doesn't validate feedback type names

References

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Fix ArgoCD ExternalSecret deployment failing with "namespace X is not permitted in project Y". Use when: (1) ExternalSecret shows OutOfSync in ArgoCD but won't sync, (2) ArgoCD application status shows "namespace X is not permitted in project 'infrastructure'", (3) ExternalSecret targets a namespace managed by a different ArgoCD project, (4) Using apps-of-apps pattern with separate infrastructure and application projects.

日本語の概要は準備中です。原文の説明を表示しています。

divinevideo/divine-mobile2662026年10月13日 更新

Art direction for any content — reads text, PDF, Word, HTML, PPT, then proposes 2-3 creative directions with photography style, mood, and visual language. After selection, generates AI image prompts and visual briefs section-by-section. Use when the user shares content and needs visual direction, image sourcing, or creative direction for any material.

日本語の概要は準備中です。原文の説明を表示しています。

divinevideo/divine-mobile2662026年10月13日 更新

Fix "Null check operator used on a null value" errors when an object is set to null during an async await. Use when: (1) Object reference is nullified while awaiting, (2) Code accesses object with ! after await returns, (3) Cancel/dispose operations run concurrently with async operations on same object. Solution: capture local reference before await.

日本語の概要は準備中です。原文の説明を表示しています。

divinevideo/divine-mobile2662026年10月13日 更新

Add custom metadata headers (x-amz-meta-*) to AWS v4 signed requests for GCS S3-compatible API. Use when: (1) Adding custom metadata to GCS uploads via S3 API, (2) Getting signature mismatch errors after adding new headers, (3) x-amz-meta-* headers being ignored or causing 403 errors. Custom headers MUST be included in canonical headers and signed headers list.

日本語の概要は準備中です。原文の説明を表示しています。

divinevideo/divine-mobile2662026年10月13日 更新

Fix password/secret authentication failures caused by trailing newlines when creating Google Cloud secrets (or similar) with bash here-strings. Use when: (1) Password authentication fails with correct password, (2) Secret created with `<<< "value"` syntax, (3) Error like "password authentication failed" or "invalid token" despite correct value. Bash here-strings (`<<<`) add a trailing newline that corrupts secrets.

日本語の概要は準備中です。原文の説明を表示しています。

divinevideo/divine-mobile2662026年10月13日 更新

Fix silent video/media processing failures caused by URL extraction code that filters on file extensions (.mp4, .webm, .webp). Use when: (1) Media moderation, transcoding, or analysis silently skips files from Blossom or content-addressed storage servers, (2) URL extraction from Nostr event tags (imeta, r tags) drops URLs without recognized extensions, (3) CDN fallback URLs append .mp4 but the actual server uses extensionless content-addressed paths like /{sha256}. Common in Nostr video events (kind 34236) where different clients use different URL formats.

日本語の概要は準備中です。原文の説明を表示しています。

divinevideo/divine-mobile2662026年10月13日 更新

divinevideo のスキルをすべて見る

このスキルの問題を報告する