Source code for api_gateway.routers.embedding

"""Embedding preset metadata and deprecated switch endpoint."""

from typing import Dict

from api_gateway.auth import require_admin
from fastapi import APIRouter, Depends, HTTPException
from lalandre_core.embedding_presets import (
    get_default_embedding_preset_id,
    list_embedding_presets,
)
from pydantic import BaseModel

router = APIRouter(tags=["embedding"])


[docs] class EmbeddingPresetItem(BaseModel): """Description of one configured embedding preset.""" preset_id: str provider: str model_name: str device: str label: str enabled: bool indexing_enabled: bool queue_name: str vector_size: int
[docs] class EmbeddingPresetsResponse(BaseModel): """List of query-enabled embedding presets and the default selection.""" presets: Dict[str, EmbeddingPresetItem] default_preset: str
[docs] class EmbeddingSwitchRequest(BaseModel): """Request payload selecting a new active embedding preset.""" preset: str
[docs] @router.get("/embedding/presets", response_model=EmbeddingPresetsResponse) async def list_presets() -> EmbeddingPresetsResponse: """Return query-enabled embedding presets from the central application config.""" presets = { preset.preset_id: EmbeddingPresetItem( preset_id=preset.preset_id, provider=preset.provider, model_name=preset.model_name, device=preset.device, label=preset.label, enabled=preset.enabled, indexing_enabled=preset.indexing_enabled, queue_name=preset.resolved_queue_name(), vector_size=preset.vector_size, ) for preset in list_embedding_presets(enabled_only=True) } return EmbeddingPresetsResponse( presets=presets, default_preset=get_default_embedding_preset_id(), )
[docs] @router.post("/embedding/switch", dependencies=[Depends(require_admin)]) async def switch_embedding(_: EmbeddingSwitchRequest | None = None) -> None: """The global embedding switch has been removed in favor of per-preset routing.""" raise HTTPException( status_code=410, detail=( "Embedding switching is deprecated. Vectorization now runs independently " "per preset via dedicated workers. Use 'embedding_preset' on /query or /search " "to choose which collections are queried." ), )