e45465d52d
Destination resolution
- Replace the single ResolveDestinationUseCase with four dedicated
functions, one per release type:
resolve_season_destination (pack season, folder move)
resolve_episode_destination (single episode, file move)
resolve_movie_destination (movie, file move)
resolve_series_destination (multi-season pack, folder move)
- Each returns a dedicated DTO carrying only the fields relevant to
that release type — no more polymorphic ResolvedDestination with
half the fields unused depending on the case.
- Looser series folder matching: exact computed-name match is reused
silently; any deviation (different group, multiple candidates) now
prompts the user with all options including the computed name.
Agent tools
- Four new tools wrapping the use cases above; old resolve_destination
removed from the registry.
- New move_to_destination tool: create_folder + move, chained — used
after a resolve_* call to perform the actual relocation.
- Low-level filesystem_operations module (create_folder, move via mv)
for instant same-FS renames (ZFS).
Prompt & persona
- New PromptBuilder (alfred/agent/prompt.py) replacing prompts.py:
identity + personality block, situational expressions, memory
schema, episodic/STM/config context, tool catalogue.
- Per-user expression system: knowledge/users/common.yaml +
{username}.yaml are merged at runtime; one phrase per situation
(greeting/success/error/...) is sampled into the system prompt.
qBittorrent integration
- Credentials now come from settings (qbittorrent_url/username/password)
instead of hardcoded defaults.
- New client methods: find_by_name, set_location, recheck — the trio
needed to update a torrent's save path and re-verify after a move.
- Host→container path translation settings (qbittorrent_host_path /
qbittorrent_container_path) for docker-mounted setups.
Subtitles
- Identifier: strip parenthesized qualifiers (simplified, brazil…) at
tokenization; new _tokenize_suffix used for the episode_subfolder
pattern so episode-stem tokens no longer pollute language detection.
- Placer: extract _build_dest_name so it can be reused by the new
dry_run path in ManageSubtitlesUseCase.
- Knowledge: add yue, ell, ind, msa, rus, vie, heb, tam, tel, tha,
hin, ukr; add 'fre' to fra; add 'simplified'/'traditional' to zho.
Misc
- LTM workspace: add 'trash' folder slot.
- Default LLM provider switched to deepseek.
- testing/debug_release.py: CLI to parse a release, hit TMDB, and
dry-run the destination resolution end-to-end.
81 lines
2.1 KiB
Bash
81 lines
2.1 KiB
Bash
# --- IMPORTANT ---
|
|
# Settings are split across multiple files for clarity.
|
|
# Files (loaded in this order, last wins):
|
|
# .env.alfred — app config and service addresses (safe to commit)
|
|
# .env.secrets — generated secrets, passwords, URIs and API keys (DO NOT COMMIT)
|
|
# .env.make — build metadata synced from pyproject.toml (safe to commit)
|
|
#
|
|
# To customize: edit .env.alfred for config, .env.secrets for secrets.
|
|
|
|
# --- Alfred ---
|
|
MAX_HISTORY_MESSAGES=10
|
|
MAX_TOOL_ITERATIONS=10
|
|
REQUEST_TIMEOUT=30
|
|
|
|
# LLM Settings
|
|
LLM_TEMPERATURE=0.2
|
|
|
|
# Persistence
|
|
DATA_STORAGE_DIR=data
|
|
|
|
# Network
|
|
HOST=0.0.0.0
|
|
PORT=3080
|
|
|
|
# --- DATABASES ---
|
|
# Passwords and connection URIs are auto-generated in .env.secrets.
|
|
# Edit host/port/user/dbname here if needed.
|
|
|
|
# MongoDB (Application Data)
|
|
MONGO_HOST=mongodb
|
|
MONGO_PORT=27017
|
|
MONGO_USER=alfred
|
|
MONGO_DB_NAME=alfred
|
|
|
|
# PostgreSQL (Vector Database / RAG)
|
|
POSTGRES_HOST=vectordb
|
|
POSTGRES_PORT=5432
|
|
POSTGRES_USER=alfred
|
|
POSTGRES_DB_NAME=alfred
|
|
|
|
# --- EXTERNAL SERVICES ---
|
|
|
|
# TMDB — Media metadata (required). Get your key at https://www.themoviedb.org/
|
|
# → TMDB_API_KEY goes in .env.secrets
|
|
TMDB_BASE_URL=https://api.themoviedb.org/3
|
|
|
|
# qBittorrent
|
|
# → QBITTORRENT_PASSWORD goes in .env.secrets
|
|
QBITTORRENT_URL=https://qb.lan.anustart.top
|
|
QBITTORRENT_USERNAME=letmein
|
|
QBITTORRENT_PORT=16140
|
|
# Path translation: host-side prefix → container-side prefix
|
|
QBITTORRENT_HOST_PATH=/mnt/testipool
|
|
QBITTORRENT_CONTAINER_PATH=/mnt/data
|
|
|
|
# Meilisearch
|
|
# → MEILI_MASTER_KEY goes in .env.secrets
|
|
# MEILI_ENABLED=false # KEY DOESN'T EXISTS => SEARCH IS THE PROPER KEY
|
|
SEARCH=false
|
|
MEILI_NO_ANALYTICS=true
|
|
MEILI_HOST=http://meilisearch:7700
|
|
|
|
# --- LLM CONFIGURATION ---
|
|
# Providers: local, openai, anthropic, deepseek, google, kimi
|
|
# → API keys go in .env.secrets
|
|
DEFAULT_LLM_PROVIDER=deepseek
|
|
|
|
# Local LLM (Ollama)
|
|
#OLLAMA_BASE_URL=http://ollama:11434
|
|
#OLLAMA_MODEL=llama3.3:latest
|
|
|
|
OLLAMA_BASE_URL=http://10.0.0.11:11434
|
|
OLLAMA_MODEL=glm-4.7-flash:latest
|
|
|
|
# --- RAG ENGINE ---
|
|
RAG_ENABLED=TRUE
|
|
RAG_API_URL=http://rag_api:8000
|
|
RAG_API_PORT=8000
|
|
EMBEDDINGS_PROVIDER=ollama
|
|
EMBEDDINGS_MODEL=nomic-embed-text
|