Open
Conversation
Move the ollama service behind `profiles: ["ollama"]` so it only starts when explicitly requested. This avoids unnecessary startup time and resource usage when using remote embedding providers (OpenAI/OpenRouter). The app service's ollama dependency is now `required: false` (Compose v2.20+), so `--profile app` works without `--profile ollama`. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Support remote embedding providers alongside the default Ollama backend. Provider selection via COCOSEARCH_EMBEDDING_PROVIDER env var or the embedding.provider config field. Each provider has sensible model defaults (ollama→nomic-embed-text, openai→text-embedding-3-small, openrouter→openai/text-embedding-3-small). Key changes: - EmbeddingSection schema gains provider field with validation - PROVIDER_MAP in embedder.py maps provider names to CocoIndex API types - Preflight checks API key for remote providers instead of Ollama - Index metadata tracks embedding_provider and embedding_model - Mismatch detection warns when reindexing with different provider/model Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Propagate embedding_provider and embedding_model from index metadata through IndexStats to the /api/stats response and web dashboard. Displayed in the terminal status line next to STATUS and UPTIME. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CocoIndex doesn't recognize OpenRouter-prefixed model names (e.g. openai/text-embedding-3-small), causing "unknown model" errors. Add a known-dimensions map and resolve output_dimension from env var or map before passing to EmbedText. Also add outputDimension config field for user override with custom models. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
cocosearch.yaml embedding.provider and embedding.model values were silently ignored during indexing because runtime code read os.environ directly. Add bridge_embedding_config() to ConfigResolver that resolves through the full precedence chain (env > config > default) and writes into env vars for downstream code. Also update config check command to use resolver for accurate source display. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use status-ok class to match the ONLINE highlight style. Provider is uppercased for consistency; model retains original case for readability. Values are HTML-escaped for defense-in-depth. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace "no external APIs — everything runs locally" with "local by default, remote optional" framing across README, CLAUDE.md, and docs. Ollama remains the default; OpenAI/OpenRouter are opt-in. Clarifies that even with remote providers, only chunk text leaves the machine. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When switching embedding providers (e.g. Ollama→OpenAI), the dimension change could cause the data table to be dropped during migration while CocoIndex metadata still referenced it. flow.setup() would then skip table creation and flow.update() would silently fail per-row in the Rust engine without raising a Python exception, preventing stale-state recovery from triggering. - Add table existence check after flow.setup() to detect metadata/table mismatch and trigger automatic recovery - Make --fresh use _clean_stale_flow_state() for robust cleanup even when flow.drop() fails - Always close in-memory flow registration before opening (proactive, not reactive to KeyError) - Include tracking table in _clean_stale_flow_state() cleanup - Make clear_index() fully clean CocoIndex metadata, deps, and tracking tables so re-index starts fresh Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…panel Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix TestCsLogFallback test isolation: add autouse fixture to reset global _log_buffer so fallback-to-Python-logging path is exercised even when earlier tests leave the singleton set - Fix TestHybridSearchGracefulDegradation: update 3 tests to mock _get_cs_log() instead of logger.warning, matching the structured logging migration (cs_log.infra replaces logger.warning) - Fix RichLogHandler deadlock: accept optional file parameter so setup_log_capture() can pass the original stderr (before StderrCapture wrapping), preventing re-entrant LogBuffer._lock acquisition - Add test_custom_file_bypasses_stderr test for RichLogHandler file param - Apply ruff formatting to 11 files Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…eaders Browser-cached JS modules caused the log panel to show entries without category badges and structured fields. Fix with three layers: - Cache-Control: no-cache on /dashboard HTML and /static/* responses - Version query params (?v=x.y.z) on CSS/JS entry point URLs - Import map injection to cache-bust all ES module sub-imports Also includes: thread-safe LogBuffer subscriber fan-out, RichLogHandler Rich markup escaping fix, and removal of premature filter UI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Plugin users need to know that the MCP server inherits env vars from their shell, so COCOSEARCH_EMBEDDING_PROVIDER and API key must be exported in their shell profile for remote embeddings to work. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
get_flow_full_name() triggers a cocoindex DB connection via setting.get_app_namespace(). When COCOINDEX_DATABASE_URL is set (side effect of get_database_url()) but the database is unreachable (CI), this hangs for ~34s causing 5 test timeouts. Use the flow name directly since the cocoindex namespace is always empty for cocosearch. Also clean up the leaked env var between tests in conftest. 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
var or embedding.provider config field
time and resources
Details
Multi-provider embeddings:
Docker Compose profiles:
Metadata tracking: