Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 8 additions & 0 deletions openrag/api/routers/admin/presets.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
"""Admin routes for the Phase 14 pipeline preset registry."""

from typing import get_args

from api.dependencies.auth import require_admin
from api.schemas.admin.preset_schemas import (
CreatePresetRequest,
Expand All @@ -9,6 +11,7 @@
UpdatePresetRequest,
)
from core.chunking import chunking_registry
from core.config.indexation_pipeline import IndexationPipelineConfig
from core.rerankers.registry import reranker_registry
from core.retrieval import retriever_registry
from di.providers import get_preset_service
Expand All @@ -18,6 +21,10 @@

_DEFAULT_RERANKER_PROVIDERS = ["infinity", "openai"]

# Derived from the validated Literal so the exposed options can never drift from
# what IndexationPipelineConfig actually accepts.
_PARSING_STRATEGIES = list(get_args(IndexationPipelineConfig.model_fields["parsing_strategy"].annotation))


def _registered_or_default(registered: list[str], defaults: list[str]) -> list[str]:
"""Return registry values, falling back to known defaults before DI imports providers."""
Expand All @@ -29,6 +36,7 @@ async def get_preset_options():
"""Return available preset strategy choices."""
return PresetOptionsResponse(
chunking_strategies=chunking_registry.list_registered(),
parsing_strategies=_PARSING_STRATEGIES,
retrieval_types=retriever_registry.list_registered(),
reranker_providers=_registered_or_default(
reranker_registry.list_registered(),
Expand Down
1 change: 1 addition & 0 deletions openrag/api/schemas/admin/preset_schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ class PresetOptionsResponse(BaseModel):
"""Response body listing allowed preset option values."""

chunking_strategies: list[str]
parsing_strategies: list[str]
retrieval_types: list[str]
reranker_providers: list[str]

Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api/test_presets.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ def test_preset_options_crud_and_rename(api_client):
option_data = options.json()
assert "recursive_splitter" in option_data["chunking_strategies"]
assert "single" in option_data["retrieval_types"]
# Parsing strategies are derived from IndexationPipelineConfig's Literal.
assert set(option_data["parsing_strategies"]) == {"pymupdf", "marker", "docling"}

create_indexation = api_client.post(
"/presets/",
Expand Down
Loading