Compare commits

...

5 Commits

Author SHA1 Message Date
Ryan Chen e0f2114736 Fix Obsidian sync by running sync-setup before sync
The container was failing with "No sync configuration found" because
ob sync was called without first running ob sync-setup. Now startup.sh
configures sync using environment variables before starting continuous
sync, and gracefully skips sync if setup fails.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 09:04:21 -04:00
ryan bac773ae4b Merge pull request 'Enable async_mode on PGVector for async method support' (#30) from refactor/chromadb-to-pgvector into main
Reviewed-on: #30
2026-04-24 08:53:34 -04:00
Ryan Chen 564a9b68a5 Enable async_mode on PGVector for async method support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 08:53:21 -04:00
ryan 7742673cc0 Merge pull request 'Handle missing pgvector tables on first run' (#29) from refactor/chromadb-to-pgvector into main
Reviewed-on: #29
2026-04-24 08:49:38 -04:00
Ryan Chen c157c37cde Handle missing pgvector tables on first run
_get_collection_id now catches the UndefinedTable error that occurs
before the first index operation creates the langchain tables.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 08:49:00 -04:00
2 changed files with 31 additions and 9 deletions
+12 -7
View File
@@ -38,6 +38,7 @@ def _get_vector_store() -> PGVector:
connection=_pgvector_url, connection=_pgvector_url,
use_jsonb=True, use_jsonb=True,
create_extension=False, # created by docker init script create_extension=False, # created by docker init script
async_mode=True,
) )
return _vector_store return _vector_store
@@ -59,13 +60,17 @@ text_splitter = RecursiveCharacterTextSplitter(
def _get_collection_id(): def _get_collection_id():
"""Get the UUID of our collection from the langchain_pg_collection table.""" """Get the UUID of our collection from the langchain_pg_collection table."""
engine = _get_engine() engine = _get_engine()
with engine.connect() as conn: try:
result = conn.execute( with engine.connect() as conn:
text("SELECT uuid FROM langchain_pg_collection WHERE name = :name"), result = conn.execute(
{"name": "simba_docs"}, text("SELECT uuid FROM langchain_pg_collection WHERE name = :name"),
) {"name": "simba_docs"},
row = result.fetchone() )
return row[0] if row else None row = result.fetchone()
return row[0] if row else None
except Exception:
# Table doesn't exist yet (first run before any indexing)
return None
def date_to_epoch(date_str: str) -> float: def date_to_epoch(date_str: str) -> float:
+19 -2
View File
@@ -8,8 +8,25 @@ mkdir -p /app/data/obsidian
# Start continuous Obsidian sync if enabled # Start continuous Obsidian sync if enabled
if [ "${OBSIDIAN_CONTINUOUS_SYNC}" = "true" ]; then if [ "${OBSIDIAN_CONTINUOUS_SYNC}" = "true" ]; then
echo "Starting Obsidian continuous sync in background..." VAULT_PATH="${OBSIDIAN_VAULT_PATH:-/app/data/obsidian}"
ob sync --continuous &
# Setup sync if not already configured
if ! ob sync-status --path "$VAULT_PATH" > /dev/null 2>&1; then
echo "Configuring Obsidian sync..."
ob sync-setup \
--vault "${OBSIDIAN_VAULT_ID}" \
--path "$VAULT_PATH" \
--password "${OBSIDIAN_E2E_PASSWORD}" \
--device-name "${OBSIDIAN_DEVICE_NAME:-simbarag}" || {
echo "Failed to configure Obsidian sync. Skipping."
OBSIDIAN_CONTINUOUS_SYNC=false
}
fi
if [ "${OBSIDIAN_CONTINUOUS_SYNC}" = "true" ]; then
echo "Starting Obsidian continuous sync in background..."
ob sync --path "$VAULT_PATH" --continuous &
fi
fi fi
echo "Starting application..." echo "Starting application..."