mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-07-27 06:28:50 +00:00
191 lines
No EOL
5.9 KiB
Markdown
191 lines
No EOL
5.9 KiB
Markdown
# XDG Base Directory Specification Compliance
|
|
|
|
Starting with version 0.2.14, Llama Stack follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) for organizing configuration and data files. This provides better integration with modern desktop environments and allows for more flexible customization of where files are stored.
|
|
|
|
## Overview
|
|
|
|
The XDG Base Directory Specification defines standard locations for different types of application data:
|
|
|
|
- **Configuration files** (`XDG_CONFIG_HOME`): User-specific configuration files
|
|
- **Data files** (`XDG_DATA_HOME`): User-specific data files that should persist
|
|
- **Cache files** (`XDG_CACHE_HOME`): User-specific cache files
|
|
- **State files** (`XDG_STATE_HOME`): User-specific state files
|
|
|
|
## Directory Mapping
|
|
|
|
Llama Stack now uses the following XDG-compliant directory structure:
|
|
|
|
| Data Type | XDG Directory | Default Location | Description |
|
|
|-----------|---------------|------------------|-------------|
|
|
| Configuration | `XDG_CONFIG_HOME` | `~/.config/llama-stack` | Distribution configs, provider configs |
|
|
| Data | `XDG_DATA_HOME` | `~/.local/share/llama-stack` | Model checkpoints, persistent files |
|
|
| Cache | `XDG_CACHE_HOME` | `~/.cache/llama-stack` | Temporary cache files |
|
|
| State | `XDG_STATE_HOME` | `~/.local/state/llama-stack` | Runtime state, databases |
|
|
|
|
## Environment Variables
|
|
|
|
You can customize the locations by setting these environment variables:
|
|
|
|
```bash
|
|
# Override the base directories
|
|
export XDG_CONFIG_HOME="/custom/config/path"
|
|
export XDG_DATA_HOME="/custom/data/path"
|
|
export XDG_CACHE_HOME="/custom/cache/path"
|
|
export XDG_STATE_HOME="/custom/state/path"
|
|
|
|
# Or override specific Llama Stack directories
|
|
export SQLITE_STORE_DIR="/custom/database/path"
|
|
export FILES_STORAGE_DIR="/custom/files/path"
|
|
```
|
|
|
|
## Backwards Compatibility
|
|
|
|
Llama Stack maintains full backwards compatibility with existing installations:
|
|
|
|
1. **Legacy Environment Variable**: If `LLAMA_STACK_CONFIG_DIR` is set, it will be used for all directories
|
|
2. **Legacy Directory Detection**: If `~/.llama` exists and contains data, it will continue to be used
|
|
3. **Gradual Migration**: New installations use XDG paths, existing installations continue to work
|
|
|
|
## Migration Guide
|
|
|
|
### Automatic Migration
|
|
|
|
Use the built-in migration command to move from legacy `~/.llama` to XDG-compliant directories:
|
|
|
|
```bash
|
|
# Preview what would be migrated
|
|
llama migrate-xdg --dry-run
|
|
|
|
# Perform the migration
|
|
llama migrate-xdg
|
|
```
|
|
|
|
### Manual Migration
|
|
|
|
If you prefer to migrate manually, here's the mapping:
|
|
|
|
```bash
|
|
# Create XDG directories
|
|
mkdir -p ~/.config/llama-stack
|
|
mkdir -p ~/.local/share/llama-stack
|
|
mkdir -p ~/.local/state/llama-stack
|
|
|
|
# Move configuration files
|
|
mv ~/.llama/distributions ~/.config/llama-stack/
|
|
mv ~/.llama/providers.d ~/.config/llama-stack/
|
|
|
|
# Move data files
|
|
mv ~/.llama/checkpoints ~/.local/share/llama-stack/
|
|
|
|
# Move state files
|
|
mv ~/.llama/runtime ~/.local/state/llama-stack/
|
|
|
|
# Clean up empty legacy directory
|
|
rmdir ~/.llama
|
|
```
|
|
|
|
### Environment Variables in Configurations
|
|
|
|
Template configurations now use XDG-compliant environment variables:
|
|
|
|
```yaml
|
|
# Old format
|
|
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/ollama}/registry.db
|
|
|
|
# New format
|
|
db_path: ${env.SQLITE_STORE_DIR:=${env.XDG_STATE_HOME:-~/.local/state}/llama-stack/distributions/ollama}/registry.db
|
|
```
|
|
|
|
## Configuration Examples
|
|
|
|
### Using Custom XDG Directories
|
|
|
|
```bash
|
|
# Set custom XDG directories
|
|
export XDG_CONFIG_HOME="/opt/llama-stack/config"
|
|
export XDG_DATA_HOME="/opt/llama-stack/data"
|
|
export XDG_STATE_HOME="/opt/llama-stack/state"
|
|
|
|
# Start Llama Stack
|
|
llama stack run my-distribution.yaml
|
|
```
|
|
|
|
### Using Legacy Directory
|
|
|
|
```bash
|
|
# Continue using legacy directory
|
|
export LLAMA_STACK_CONFIG_DIR="/home/user/.llama"
|
|
|
|
# Start Llama Stack
|
|
llama stack run my-distribution.yaml
|
|
```
|
|
|
|
### Custom Database and File Locations
|
|
|
|
```bash
|
|
# Override specific directories
|
|
export SQLITE_STORE_DIR="/fast/ssd/llama-stack/databases"
|
|
export FILES_STORAGE_DIR="/large/disk/llama-stack/files"
|
|
|
|
# Start Llama Stack
|
|
llama stack run my-distribution.yaml
|
|
```
|
|
|
|
## Benefits of XDG Compliance
|
|
|
|
1. **Standards Compliance**: Follows established Linux/Unix conventions
|
|
2. **Better Organization**: Separates configuration, data, cache, and state files
|
|
3. **Flexibility**: Easy to customize storage locations
|
|
4. **Backup-Friendly**: Easier to backup just data files or just configuration
|
|
5. **Multi-User Support**: Better support for shared systems
|
|
6. **Cross-Platform**: Works consistently across different environments
|
|
|
|
## Template Updates
|
|
|
|
All distribution templates have been updated to use XDG-compliant paths:
|
|
|
|
- Database files use `XDG_STATE_HOME`
|
|
- Model checkpoints use `XDG_DATA_HOME`
|
|
- Configuration files use `XDG_CONFIG_HOME`
|
|
- Cache files use `XDG_CACHE_HOME`
|
|
|
|
## Troubleshooting
|
|
|
|
### Migration Issues
|
|
|
|
If you encounter issues during migration:
|
|
|
|
1. **Check Permissions**: Ensure you have write permissions to target directories
|
|
2. **Disk Space**: Verify sufficient disk space in target locations
|
|
3. **Existing Files**: Handle conflicts with existing files in target locations
|
|
|
|
### Environment Variable Conflicts
|
|
|
|
If you have multiple environment variables set:
|
|
|
|
1. `LLAMA_STACK_CONFIG_DIR` takes highest precedence
|
|
2. Individual `XDG_*` variables override defaults
|
|
3. Fallback to legacy `~/.llama` if it exists
|
|
4. Default to XDG standard paths for new installations
|
|
|
|
### Debugging Path Resolution
|
|
|
|
To see which paths Llama Stack is using:
|
|
|
|
```python
|
|
from llama_stack.distribution.utils.xdg_utils import (
|
|
get_llama_stack_config_dir,
|
|
get_llama_stack_data_dir,
|
|
get_llama_stack_state_dir,
|
|
)
|
|
|
|
print(f"Config: {get_llama_stack_config_dir()}")
|
|
print(f"Data: {get_llama_stack_data_dir()}")
|
|
print(f"State: {get_llama_stack_state_dir()}")
|
|
```
|
|
|
|
## Future Considerations
|
|
|
|
- Container deployments will continue to use `/app` or similar paths
|
|
- Cloud deployments may use provider-specific storage systems
|
|
- The XDG specification primarily applies to local development and single-user systems |