Title: Hybrid Recommender Cold-Start Benchmark
Domain: computing_math — Data & Analytics Engineering

Summary: Build a warm-plus-cold hybrid recommender on Linux, using temporal splitting, metadata/embedding cold-start ranking, and a combined output contract.

Task prompt:
You are building a hybrid recommender system on a Linux VM.

Visible inputs:
- `base/input/interactions.csv`
- `base/input/item_metadata.csv`
- `base/input/item_embeddings.json`
- `base/input/user_profiles.csv`
- `base/input/runtime_env/pyproject.toml`
- `base/input/runtime_env/uv.lock`
- `base/software/setup_runtime_env.sh`
- `base/software/run_recommender_env.sh`

Your task:
1. Build a warm-item recommender using both `rating` and `watch_percentage`.
2. Build a cold-start model from metadata and embeddings without interaction data for cold items.
3. Use the canonical per-user temporal split: 70% train, 10% validation, 20% test.
4. Produce a combined ranking that contains both warm and cold items.
5. Write exactly these files under `base/output`:
   - `predictions_warm.csv` — columns: `user_id, item_id, predicted_rating, rank`
   - `predictions_cold.csv` — columns: `user_id, item_id, predicted_score, rank`
   - `predictions_combined.csv` — columns: `user_id, item_id, predicted_score, rank, item_type` (item_type is "warm" or "cold")
   - `evaluation_report.json` — top-level keys: `warm_items`, `cold_items`, `combined`. `warm_items` must include `NDCG@10`, `HitRate@10`, `RMSE`.
   - `model_config.json` — must include keys: `warm_model`, `cold_model`, `hybrid`, `data_split`. `hybrid` must include a key named `method` or `combination` describing the merging strategy. `data_split` must include `method` (containing "temporal"), `train_ratio`, `val_ratio`, `test_ratio`.

Environment notes:
- Use `base/software/setup_runtime_env.sh` to materialize the staged task-local Python environment.
- Use `base/software/run_recommender_env.sh` to run Python inside that environment.
- Do not modify files under `base/input`.


The agent must:
Build a warm-item recommender that uses both `rating` and `watch_percentage`.
Build a cold-start model from `item_metadata.csv` and `item_embeddings.json` without using cold-item interactions.
Use the canonical per-user temporal split: `70%` train, `10%` validation, `20%` test.
Fuse warm and cold scores into one combined ranked recommendation surface.
Write the five required deliverables under `output/`.

Software: Python 3.10
uv
numpy
pandas
scikit-learn
scipy

Input files:
name: interactions.csv
format: csv
path: input/interactions.csv
description: Warm-item user interaction history with rating, watch percentage, and timestamps.
name: item_metadata.csv
format: csv
path: input/item_metadata.csv
description: Item features plus the `is_cold_start` label that defines warm vs. cold membership.
name: item_embeddings.json
format: json
path: input/item_embeddings.json
description: Dense item embeddings used by the cold-start model.
name: user_profiles.csv
format: csv
path: input/user_profiles.csv
description: Per-user profile attributes available at solve time.
name: runtime_env
format: directory
path: input/runtime_env/
description: Pinned task-local `uv` manifest and lockfile for the agent-visible Python runtime.