Deprecated: Ash-Based Recommender System Integration
Context
Godot Engine’s V-Sekai project requires a scalable recommendation system (200k+ user-items) with modern metadata handling. The current implementation does not exist. The decision to use Ash is driven by the fact that our backend (uro) is already implemented in Elixir, ensuring seamless integration and leveraging existing expertise.
Problem Statement
- Scalability bottlenecks in Python-based recommendation serving
- Inefficient user/item bag management
- Missing JSON-LD attribute compatibility
Proposed Solution
Implement Ash framework with Rustler-based NIF integration for librecommender.
Implementation Steps:
- Create Ash resource DSL for recommendation entities
- Implement NIFs for bag operations using Rustler
- Add JSON-LD context annotation layer
- Support both item-item and user-item recommendation algorithms
Implementation Plan
- Phase 1: Ash core setup
- Port uro entity relationships
- Rustler integration tests
- Phase 2: Recommender bridge
- Implement protocol for librecommender
- JSON-LD attribute mapping
- Validation:
- Success Criteria: <500ms p99 inference latency
- Failure Threshold: >5% data serialization errors
Benefits
- 10x concurrent recommendation capacity
- Native Ecto/Ash metadata queries
- Future-proofed for Fediverse integration
Risks and Limitations
- Rust-Elixir type conversion overhead
- NIF complexity
- JSON-LD namespace collisions
Alternatives Considered
Option | Pros | Cons |
---|---|---|
Pure Python | Faster MVP | Limits scale |
Pure Elixir | Simpler stack | Lacks optim algos |
When to Avoid This Solution
Projects requiring simple recommendation needs (<1k items) or without Rust ops support.
Organizational Alignment
Supports V-Sekai 2025 goals for UGC and fediverse interoperability.
Proposal Status
Status: Deprecated
Decision Makers
- Fire
References
- Ash Framework https://ash-hq.org/
- Rustler 0.30 NIF guide https://github.com/rusterlium/rustler
- V-Sekai Roadmap 2025 https://v-sekai.github.io/manuals/roadmap.html
- Librecommender Rust Serving Guide https://librecommender.readthedocs.io/en/latest/serving_guide/rust.html