Skip to content

Commit eb4bdd4

Browse files
cursoragentenitrat
andcommitted
Refactor: Improve ingester robustness and flexibility
Co-authored-by: msaug <[email protected]>
1 parent f7aea2f commit eb4bdd4

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

CLAUDE.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ uv run pytest -k "test_name" # Run specific test
5252

5353
```bash
5454
docker compose up postgres backend # Start main services
55-
docker compose up ingester # Run documentation ingestion
55+
56+
# Recommended: run ingester so compose exits when done
57+
docker compose up --abort-on-container-exit --exit-code-from ingester ingester
58+
59+
# Alternative: run Postgres in background, then run a one-shot ingester container
60+
docker compose up -d postgres && docker compose run --rm ingester
5661
```
5762

5863
## Architecture Overview

ingesters/src/generateEmbeddings.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,24 @@ async function setupVectorStore(): Promise<VectorStore> {
8585
// Get database configuration
8686
const dbConfig = getVectorDbConfig();
8787

88-
const embeddingModels = await loadGeminiEmbeddingsModels();
89-
const embeddingModel = embeddingModels['Gemini embedding 001'];
88+
// Try Gemini first, then OpenAI as fallback
89+
const geminiModels = await loadGeminiEmbeddingsModels();
90+
const openaiModels = await loadOpenAIEmbeddingsModels();
91+
const embeddingModel: Embeddings | undefined =
92+
(geminiModels['Gemini embedding 001'] as unknown as Embeddings) ||
93+
(openaiModels['Text embedding 3 large'] as unknown as Embeddings) ||
94+
(openaiModels['Text embedding 3 small'] as unknown as Embeddings);
9095

9196
if (!embeddingModel) {
92-
throw new Error('Text embedding 3 large model not found');
97+
throw new Error(
98+
'No embedding model configured. Set GEMINI_API_KEY or OPENAI_API_KEY.',
99+
);
93100
}
94101

95102
// Initialize vector store
96103
vectorStore = await VectorStore.getInstance(
97104
dbConfig,
98-
embeddingModel as unknown as Embeddings,
105+
embeddingModel,
99106
);
100107
logger.info('VectorStore initialized successfully');
101108
return vectorStore;
@@ -184,6 +191,7 @@ async function ingestSource(source: DocumentSource): Promise<void> {
184191
* Main function to run the ingestion process
185192
*/
186193
async function main() {
194+
let exitCode = 0;
187195
try {
188196
// Prompt user for target
189197
const target = await promptForTarget();
@@ -201,12 +209,18 @@ async function main() {
201209

202210
logger.info('All specified ingestion processes completed successfully.');
203211
} catch (error) {
212+
exitCode = 1;
204213
logger.error('An error occurred during the ingestion process:', error);
205214
} finally {
206-
// Clean up resources
207-
if (vectorStore) {
208-
await vectorStore.close();
209-
process.exit(0);
215+
// Clean up resources and exit deterministically
216+
try {
217+
if (vectorStore) {
218+
await vectorStore.close();
219+
}
220+
} catch (cleanupError) {
221+
logger.warn('Error while cleaning up resources:', cleanupError);
222+
} finally {
223+
process.exit(exitCode);
210224
}
211225
}
212226
}

0 commit comments

Comments
 (0)