Conversation
The haystack service used VLLM_BASE_URL and VLLM_API_KEY internally, even though it just needs any OpenAI-compatible embeddings API. The docker-compose files were renaming RAG_HAYSTACK_EMBEDDINGS_* to VLLM_*, making it impossible to trace what config was actually being used. Now the same RAG_HAYSTACK_EMBEDDINGS_API_BASE_URL and RAG_HAYSTACK_EMBEDDINGS_API_KEY names flow straight through from .env to docker-compose to the python service with no renaming. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instead of hardcoding claude-opus-4-6/anthropic as the default model, show the AdvancedModelPicker dialog when clicking "New Agent" so users can select any available provider+model. This fixes setups where Anthropic isn't configured and the server rejects the request. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When the crawler is enabled but a URL points to a document (PDF, DOCX, etc.), extract it directly via Unstructured instead of sending it through the HTML crawler which silently fails on non-HTML content. Detection uses two strategies: file extension check (fast path) then a HEAD request to inspect Content-Type for ambiguous URLs like arxiv.org/pdf/2602.23242 that have no extension. Also fixes unsafe mutation of Knowledge.Source.Web.URLs by cloning the struct before passing to the crawler. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The enabled and disabled model rendering paths were near-identical (~150 lines each). Collapse into a single listItemContent, conditionally wrapped in a Tooltip for disabled items. Pricing is hidden for disabled models via a guard in the unified path. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The vchord_bm25-postgres image ships vchord, vchord_bm25, and vector extensions but they must be loaded via shared_preload_libraries. Without this, the haystack service fails at startup with "vchord must be loaded via shared_preload_libraries". Applied to both docker-compose.dev.yaml and docker-compose.yaml. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
URLs like arxiv.org/pdf/2602.23242 produce filename "2602.23242" with no valid extension. Haystack uses the extension to determine the file converter, so it fails with "Unable to get page count" when saving a PDF with a .23242 suffix. Detect file type from content magic bytes (e.g. %PDF header) and append the correct extension before sending. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Prefer RAG_HAYSTACK_EMBEDDINGS_API_BASE_URL over HELIX_EMBEDDINGS_SOCKET when both are configured, fixing text-embedding-3-small not found error - Preserve source metadata in process_and_index() instead of overwriting with filename, fixing 404s on web page knowledge source references - Fail fast if neither embeddings backend is configured Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reverts the API-over-socket priority change per feedback that all embedding calls should go through helix for accounting. Socket is the primary path; API URL is only a fallback when no socket is set. Keeps the fail-fast ValueError when neither backend is configured. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a new "RAG Embedding Model" setting in Dashboard > System Settings, following the same placeholder model substitution pattern as Kodit. Haystack sends "rag-embedding" as the model name via the Unix socket. The Go embeddings handler looks up SystemSettings for the configured provider + model and substitutes them before forwarding to the backend. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All embedding requests must go through the Helix Unix socket for accounting. Removes EMBEDDINGS_API_BASE_URL/EMBEDDINGS_API_KEY config, the OpenAI embedder fallback path, and corresponding docker-compose env vars. Socket is now validated once in __init__. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…model filter Three pre-existing bugs exposed when haystack embedding requests were routed through Helix middleware (after removing direct API fallback): 1. URL path was /v1/embeddings but baseURL already includes /v1, producing /v1/v1/embeddings (404 from OpenAI). Fixed to /embeddings. 2. OpenAI Python SDK (used by haystack) sends encoding_format: "base64" by default. Our response struct expects []float32, not base64 strings. Force encoding_format: "float" in the rag-embedding handler and as a client default. 3. OpenAI model list filter dropped text-embedding-* models. Added them to the allowed prefix list with type "embed" so AdvancedModelPicker can show them. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
rag-embeddingplaceholder via socket; Go handler substitutes with admin-configured provider/modelshared_preload_librariesto pgvector service for vchord extensionsTest plan
cd api && go build ./...compilescd frontend && yarn buildcompilesgo test -run TestOpenAIEmbeddingsSuite ./pkg/server/— 4 tests pass (including 2 new placeholder substitution tests)openai/text-embedding-3-small) — saves and displays correctly🤖 Generated with Claude Code