Claude Code Plugins

Community-maintained marketplace

Feedback

koan-vector-migration

@sylin-org/koan-framework
2
0

Vector export/import, embedding caching, provider migration

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name koan-vector-migration
description Vector export/import, embedding caching, provider migration

Koan Vector Migration

Core Principle

Export vectors without regenerating via AI. Cache embeddings to enable zero-cost vector database migration.

Vector Export (DATA-0078)

Export Vectors

var vectorRepo = serviceProvider.GetRequiredService<IVectorSearchRepository<Media, string>>();

await foreach (var batch in vectorRepo.ExportAllAsync(batchSize: 100, ct))
{
    // batch.Id: Entity identifier
    // batch.Embedding: float[] vector
    // batch.Metadata: Optional metadata

    // Cache the embedding
    var contentHash = EmbeddingCache.ComputeContentHash(embeddingText);
    await cache.SetAsync(contentHash, modelId, batch.Embedding, ct);
}

Provider Support

  • ElasticSearch: Scroll API (default batch: 1000)
  • Weaviate: GraphQL pagination (default batch: 100)
  • Qdrant: Planned
  • Milvus: Planned
  • Pinecone: Not supported (throws NotSupportedException)

Migration Pattern

1. Export vectors from Provider A → Cache
2. Switch configuration to Provider B
3. Import vectors from Cache → Provider B

Result: Zero AI API calls for migration

Example: Weaviate → ElasticSearch

// Step 1: Export from Weaviate
using (EntityContext.Adapter("weaviate"))
{
    var vectorRepo = sp.GetRequiredService<IVectorSearchRepository<Media, string>>();

    await foreach (var batch in vectorRepo.ExportAllAsync(batchSize: 100, ct))
    {
        await cache.SetAsync(batch.Id, "ada-002", batch.Embedding, ct);
    }
}

// Step 2: Switch to ElasticSearch in appsettings.json
{
  "Koan": {
    "Data": {
      "Sources": {
        "Vectors": {
          "Adapter": "elasticsearch",
          "ConnectionString": "http://localhost:9200"
        }
      }
    }
  }
}

// Step 3: Import to ElasticSearch
foreach (var mediaId in allMediaIds)
{
    var embedding = await cache.GetAsync(mediaId, "ada-002", ct);
    if (embedding != null)
    {
        var media = new Media { Id = mediaId, Embedding = embedding };
        await media.Save();
    }
}

When This Skill Applies

  • ✅ Migrating vector databases
  • ✅ Caching embeddings
  • ✅ AI provider switches
  • ✅ Cost optimization
  • ✅ Vector backup/restore

Reference Documentation

  • CLAUDE.md: Lines 96-123 (Vector Export for Migration)
  • ADR: DATA-0078 (Vector export specification)
  • Guide: docs/guides/ai-vector-howto.md