Skip to content
Draft
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
3fab84b
chore: remove unused imports and variables
nkanu17 Mar 23, 2026
1cb752f
docs(index-migrator): add planning workspace and repo guidance
nkanu17 Mar 17, 2026
309eccf
feat(migrate): add index migration CLI and core engine
nkanu17 Mar 19, 2026
ab8bb42
feat(migrate): add interactive migration wizard
nkanu17 Mar 19, 2026
0cc6736
docs(migrate): add migration guides and field attributes reference
nkanu17 Mar 19, 2026
0c29118
test(migrate): add migration planner, wizard, and integration tests
nkanu17 Mar 19, 2026
8d17a0f
chore: add nitin_docs and nitin_scripts to gitignore
nkanu17 Mar 19, 2026
cc42b77
feat(migrate): add async migration support
nkanu17 Mar 20, 2026
33ebf54
refactor(migrate): remove unused imports
nkanu17 Mar 20, 2026
183ffc5
feat:add batch indexing
nkanu17 Mar 20, 2026
5ec0bd1
feat(migrate): optimize doc enumeration and simplify CLI
nkanu17 Mar 20, 2026
9fe44d9
docs(migrations): fix typo in downtime considerations section
nkanu17 Mar 23, 2026
e1add9c
feat(migrate): add rename operations to planner
nkanu17 Mar 23, 2026
c08c727
feat(migrate): implement rename execution in sync/async executors
nkanu17 Mar 23, 2026
239a46f
feat(migrate): complete wizard with all supported operations
nkanu17 Mar 23, 2026
1521a4c
fix(migrate): robust schema validation with FT.INFO attribute handling
nkanu17 Mar 23, 2026
00181b3
fix(migrate): handle prefix changes in key_sample validation
nkanu17 Mar 23, 2026
516cc19
feat(migrate): add automatic functional validation with wildcard search
nkanu17 Mar 23, 2026
ab8a017
fix(migrate): HNSW param parsing and weight normalization for validation
nkanu17 Mar 23, 2026
b3d88a0
test(migrate): add integration tests for migration routes
nkanu17 Mar 23, 2026
d452eab
docs(migrate): update migration docs for new capabilities
nkanu17 Mar 23, 2026
4eee541
fix(migrate): address code review feedback
nkanu17 Mar 23, 2026
76a8719
fix(migrate): address PR review feedback
nkanu17 Mar 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -234,3 +234,13 @@ tests/data

# Local working directory (personal scripts, docs, tools)
local/
nitin_docs/
nitin_scripts/

# Local notebooks (kept for development, not committed)
docs/user_guide/13_index_migrations.ipynb

# Migration temp files (generated by rvl migrate commands)
migration_plan.yaml
migration_report.yaml
schema_patch.yaml
165 changes: 165 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
# AGENTS.md - RedisVL Project Context

## Frequently Used Commands

```bash
# Development workflow
make install # Install dependencies
make format # Format code (black + isort)
make check-types # Run mypy type checking
make lint # Run all linting (format + types)
make test # Run tests (no external APIs)
make test-all # Run all tests (includes API tests)
make check # Full check (lint + test)

# Redis setup
make redis-start # Start Redis container
make redis-stop # Stop Redis container

# Documentation
make docs-build # Build documentation
make docs-serve # Serve docs locally
```

Pre-commit hooks are also configured, which you should
run before you commit:
```bash
pre-commit run --all-files
```

## Important Architectural Patterns

### Async/Sync Dual Interfaces
- Most core classes have both sync and async versions (e.g., `SearchIndex` / `AsyncSearchIndex`)
- Follow existing patterns when adding new functionality

### Schema-Driven Design
```python
# Index schemas define structure
schema = IndexSchema.from_yaml("schema.yaml")
index = SearchIndex(schema, redis_url="redis://localhost:6379")
```

## Critical Rules

### Do Not Modify
- **CRITICAL**: Do not change this line unless explicitly asked:
```python
token.strip().strip(",").replace(""", "").replace(""", "").lower()
```

### Git Operations
**CRITICAL**: NEVER use `git push` or attempt to push to remote repositories. The user will handle all git push operations.

### Branch and Commit Policy
**IMPORTANT**: Use conventional branch names and conventional commits.

Branch naming:
- Human-created branches should use `<type>/<short-kebab-description>`
- Automation-created branches may use `codex/<type>/<short-kebab-description>`
- Preferred branch types: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`, `build`, `ci`
- Examples:
- `feat/index-migrator`
- `fix/async-sentinel-pool`
- `docs/index-migrator-benchmarking`
- `codex/feat/index-migrator`

Commit messages:
- Use Conventional Commits: `<type>(optional-scope): <summary>`
- Preferred commit types: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`, `build`, `ci`
- Examples:
- `feat(migrate): add drop recreate planning docs`
- `docs(index-migrator): add benchmarking guidance`
- `fix(cli): validate migrate plan inputs`

### Code Quality
**IMPORTANT**: Always run `make format` before committing code to ensure proper formatting and linting compliance.

### README.md Maintenance
**IMPORTANT**: DO NOT modify README.md unless explicitly requested.

**If you need to document something, use these alternatives:**
- Development info → CONTRIBUTING.md
- API details → docs/ directory
- Examples → docs/examples/
- Project memory (explicit preferences, directives, etc.) → AGENTS.md

## Code Style Preferences

### Import Organization
- **Prefer module-level imports** by default for clarity and standard Python conventions
- **Use local/inline imports only when necessary** for specific reasons:
- Avoiding circular import dependencies
- Improving startup time for heavy/optional dependencies
- Lazy loading for performance-critical paths
- When using local imports, add a brief comment explaining why (e.g., `# Local import to avoid circular dependency`)

### Comments and Output
- **No emojis in code comments or print statements**
- Keep comments professional and focused on technical clarity
- Use emojis sparingly only in user-facing documentation (markdown files), not in Python code

### General Guidelines
- Follow existing patterns in the RedisVL codebase
- Maintain consistency with the project's established conventions
- Run `make format` before committing to ensure code quality standards

## Testing Notes
RedisVL uses `pytest` with `testcontainers` for testing.

- `make test` - unit tests only (no external APIs)
- `make test-all` - run the full suite, including tests that call external APIs
- `pytest --run-api-tests` - explicitly run API-dependent tests (e.g., LangCache,
external vectorizer/reranker providers). These require the appropriate API
keys and environment variables to be set.

## Project Structure

```
redisvl/
├── cli/ # Command-line interface (rvl command)
├── extensions/ # AI extensions (cache, memory, routing)
│ ├── cache/ # Semantic caching for LLMs
│ ├── llmcache/ # LLM-specific caching
│ ├── message_history/ # Chat history management
│ ├── router/ # Semantic routing
│ └── session_manager/ # Session management
├── index/ # SearchIndex classes (sync/async)
├── query/ # Query builders (Vector, Range, Filter, Count)
├── redis/ # Redis client utilities
├── schema/ # Index schema definitions
└── utils/ # Utilities (vectorizers, rerankers, optimization)
├── rerank/ # Result reranking
└── vectorize/ # Embedding providers integration
```

## Core Components

### 1. Index Management
- `SearchIndex` / `AsyncSearchIndex` - Main interface for Redis vector indices
- `IndexSchema` - Define index structure with fields (text, tags, vectors, etc.)
- Support for JSON and Hash storage types

### 2. Query System
- `VectorQuery` - Semantic similarity search
- `RangeQuery` - Vector search within distance range
- `FilterQuery` - Metadata filtering and full-text search
- `CountQuery` - Count matching records
- Etc.

### 3. AI Extensions
- `SemanticCache` - LLM response caching with semantic similarity
- `EmbeddingsCache` - Cache for vector embeddings
- `MessageHistory` - Chat history with recency/relevancy retrieval
- `SemanticRouter` - Route queries to topics/intents

### 4. Vectorizers (Optional Dependencies)
- OpenAI, Azure OpenAI, Cohere, HuggingFace, Mistral, VoyageAI
- Custom vectorizer support
- Batch processing capabilities

## Documentation
- Main docs: https://docs.redisvl.com
- Built with Sphinx from `docs/` directory
- Includes API reference and user guides
- Example notebooks in documentation `docs/user_guide/...`
23 changes: 22 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,12 +251,33 @@ Before suggesting a new feature:

## Pull Request Process

1. **Fork and create a branch**: Create a descriptive branch name (e.g., `fix-search-bug` or `add-vector-similarity`)
1. **Fork and create a branch**: Use a conventional branch name such as `feat/index-migrator`, `fix/search-bug`, or `docs/vectorizer-guide`
2. **Make your changes**: Follow our coding standards and include tests
3. **Test thoroughly**: Ensure your changes work and don't break existing functionality
4. **Update documentation**: Add or update documentation as needed
5. **Submit your PR**: Include a clear description of what your changes do

### Branch Naming and Commit Messages

We use conventional branch names and Conventional Commits to keep history easy to scan and automate.

Branch naming:

- Use `<type>/<short-kebab-description>`
- Recommended types: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`, `build`, `ci`
- Examples:
- `feat/index-migrator`
- `fix/async-sentinel-pool`
- `docs/migration-benchmarking`

Commit messages:

- Use `<type>(optional-scope): <summary>`
- Examples:
- `feat(migrate): add drop recreate plan generation`
- `docs(index-migrator): add benchmark guidance`
- `fix(cli): reject unsupported migration diffs`

### Review Process

- The core team reviews Pull Requests regularly
Expand Down
Loading
Loading