lc-cli 0.1.3

LLM Client - A fast Rust-based LLM CLI tool with provider management and chat sessions
Documentation
---
id: embeddings
title: Embeddings
sidebar_position: 2
---

# Embeddings

Generate and store text embeddings for semantic search and RAG applications.

## Overview

Embeddings are numerical representations of text that capture semantic meaning. LLM Client can:

- Generate embeddings using any compatible model
- Store embeddings in vector databases
- Process files with intelligent chunking
- Enable semantic search and RAG

## Quick Start

```bash
# Generate embeddings (output to console)
lc embed -m text-embedding-3-small "Your text here"

# Store in vector database
lc embed -m text-embedding-3-small -v knowledge "Important information"

# Embed a file
lc embed -m text-embedding-3-small -v docs -f README.md
```

## Command: `lc embed` (alias: `lc e`)

### Options

- `-m, --model <MODEL>` - Embedding model to use (required)
- `-v, --vector-db <NAME>` - Vector database to store in (optional)
- `-f, --file <PATH>` - File(s) to embed (optional)
- `-p, --provider <NAME>` - Provider to use (optional)

### Embedding Models

List available embedding models:

```bash
lc models embed
lc m e
```

Common models:

- `text-embedding-3-small` (OpenAI) - Fast, efficient
- `text-embedding-3-large` (OpenAI) - Higher quality
- `embed-english-v3.0` (Cohere) - English-optimized
- `embed-multilingual-v3.0` (Cohere) - Multi-language

## Text Embedding

### Direct Text

Embed a single piece of text:

```bash
# Output embeddings to console
lc embed -m text-embedding-3-small "Machine learning is fascinating"

# Store in database
lc embed -m text-embedding-3-small -v ml-knowledge "Neural networks use layers"
```

### Multiple Texts

Store multiple embeddings in a database:

```bash
# Build a knowledge base
lc embed -m text-embedding-3-small -v knowledge "Fact 1: Python is popular for ML"
lc embed -m text-embedding-3-small -v knowledge "Fact 2: TensorFlow is a framework"
lc embed -m text-embedding-3-small -v knowledge "Fact 3: GPUs accelerate training"
```

## File Embedding

### Single File

Embed an entire file with automatic chunking:

```bash
lc embed -m text-embedding-3-small -v docs -f README.md
```

### Multiple Files

Use glob patterns or comma-separated lists:

```bash
# Glob pattern
lc embed -m text-embedding-3-small -v docs -f "*.md"
lc embed -m text-embedding-3-small -v docs -f "docs/**/*.txt"

# Multiple specific files
lc embed -m text-embedding-3-small -v docs -f "file1.md,file2.txt,file3.py"
```

### How File Chunking Works

1. **Chunk Size**: ~1200 characters per chunk
2. **Overlap**: 200 characters between chunks
3. **Boundaries**: Respects sentences and paragraphs
4. **Metadata**: Stores file path and chunk info

Example output:

```
Processing file: README.md
  ✓ Chunk 1/5 embedded
  ✓ Chunk 2/5 embedded
  ✓ Chunk 3/5 embedded
  ✓ Chunk 4/5 embedded
  ✓ Chunk 5/5 embedded
Successfully embedded 5 chunks from README.md
```

## Supported File Types

### Text Documents

- `.txt`, `.md`, `.markdown`
- `.rst`, `.org`, `.tex`
- `.rtf`

### Code Files

- `.py`, `.js`, `.ts`, `.java`
- `.cpp`, `.c`, `.h`, `.hpp`
- `.go`, `.rs`, `.rb`, `.php`
- `.swift`, `.kt`, `.scala`

### Web Files

- `.html`, `.css`, `.scss`
- `.xml`, `.json`, `.yaml`, `.yml`

### Configuration

- `.toml`, `.ini`, `.cfg`, `.conf`
- `.env`, `.properties`

### Other

- `.sql`, `.graphql`
- `.dockerfile`, `.makefile`
- `.sh`, `.bash`, `.zsh`

Binary files are automatically filtered out.

## Provider Selection

### Default Provider

Uses the embedding model's default provider:

```bash
# Uses OpenAI for text-embedding-3-small
lc embed -m text-embedding-3-small -v docs "content"
```

### Specific Provider

Override with a different provider:

```bash
# Use Cohere
lc embed -p cohere -m embed-english-v3.0 -v docs "content"

# Use local provider
lc embed -p ollama -m nomic-embed-text -v local "content"
```

## Best Practices

### 1. Model Selection

Choose based on your needs:

- **Speed**: `text-embedding-3-small`
- **Quality**: `text-embedding-3-large`
- **Multilingual**: `embed-multilingual-v3.0`
- **Local/Private**: Ollama models

### 2. Chunk Size Optimization

Default chunking works well, but consider:

- **Technical docs**: Smaller chunks (better precision)
- **Narrative text**: Larger chunks (better context)
- **Code**: Respect function boundaries

### 3. Database Organization

Create purpose-specific databases:

```bash
# Separate databases by content type
lc embed -v technical-docs -f "docs/api/*.md"
lc embed -v tutorials -f "docs/tutorials/*.md"
lc embed -v code-examples -f "examples/**/*.py"
```

### 4. Regular Updates

Keep embeddings current:

```bash
# Re-embed changed files
lc embed -v docs -f "updated-doc.md"

# Process new files
lc embed -v docs -f "new-docs/*.md"
```

## Viewing Embeddings

### Check Database Content

```bash
lc vectors info docs
```

Shows:

- Total entries
- Model used
- Recent additions
- File metadata

### Search Similar Content

```bash
lc similar -v docs "search query"
```

## Performance Tips

### Batch Processing

Process multiple files efficiently:

```bash
# Good: Single command
lc embed -m text-embedding-3-small -v docs -f "*.md"

# Less efficient: Multiple commands
lc embed -m text-embedding-3-small -v docs -f "file1.md"
lc embed -m text-embedding-3-small -v docs -f "file2.md"
```

### Large Files

For very large files:

1. Consider splitting beforehand
2. Monitor memory usage
3. Use streaming processing (automatic)

### API Rate Limits

- Respect provider rate limits
- Use smaller models for bulk processing
- Consider local models for large volumes

## Troubleshooting

### "Model not found"

```bash
# List available embedding models
lc models embed

# Use exact model name
lc embed -m text-embedding-3-small "text"
```

### "File not found"

- Check file path relative to current directory
- Use quotes for paths with spaces
- Verify glob patterns with `ls`

### "Binary file skipped"

This is normal - binary files are automatically filtered. Only text files are processed.

### "Chunk too large"

Rare, but can happen with files containing very long lines. The system will automatically handle this.

## Next Steps

- [Vector Database Guide]/advanced/vector-database - Managing embeddings
- [Similarity Search]/commands/similar - Finding related content
- [RAG Guide]/advanced/rag - Using embeddings for enhanced chat