Skip to content

1.15.0

Choose a tag to compare

@leoveanv leoveanv released this 02 May 08:49
· 1528 commits to main since this release

2026-05-02

BREAKING CHANGES

  • RAG API now enforces X-Tenant-Id header for multitenancy; requests without it return HTTP 400.
  • tenant_id in request bodies is rejected via strict model validation (extra='forbid).
  • SYMAI_UPLOAD_DIR environment variable replaced with explicit upload_dir parameter in Qdrant engine.
  • Document downloads are sandboxed to the upload directory with secure filename validation.

Added

  • Experimental vLLM backend support (engine_vllm.py) for local LLM serving.
  • client_timeout and client_max_retries kwargs to all neurosymbolic engines (OpenAI, Anthropic, Gemini, Groq, DeepSeek, OpenRouter, Cerebras, Llama.cpp).
  • _build_client_kwargs() helper on Engine base class to centralize client configuration.
  • Multitenancy support in Qdrant engine and RAG API with automatic tenant_id payload injection.
  • POST /delete-by-tenant-file and POST /delete-by-tenant RAG API endpoints with scope-based authorization.
  • Payload keyword indexes on tenant_id, source_type, and file_id for efficient scoped queries.
  • Configurable embedding batch size via RAG_EMBED_BATCH_SIZE environment variable.
  • SSRF protection for URL downloads with IP pinning and private-range blocking.
  • Thread-safety lock to FileEngine markdown converter.
  • Comprehensive unit and integration tests for new endpoints, multitenancy, and client kwargs.

Changed

  • Replaced stdlib logging with loguru in qdrant_rag_api.py for structured log output.
  • Wrapped synchronous Qdrant I/O operations in asyncio.to_thread for event-loop safety.
  • Synchronized docs/source/INSTALLATION.md with current README instructions.

Fixed

  • Cerebras engine re-initialization path that stored duplicate client attributes.

Security

  • SSRF protection blocking private IP ranges and resolving hostnames before download.
  • Path sandboxing restricting document access to configured upload directory only.

Performance

  • Async wrapping of blocking Qdrant operations to prevent event-loop starvation.

Maintenance

  • Eliminated ~60 lines of duplicated timeout/retry boilerplate across 10 neurosymbolic engines.
  • Removed redundant local type annotations and dead-code casts.
  • Added tests/engines/neurosymbolic/test_client_kwargs.py and expanded Qdrant RAG API test coverage.

Full Changelog: 1.14.0...1.15.0