fix(server): set empty embedding on empty doc (#12857)
#### PR Dependency Tree * **PR #12857** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved error handling in document embedding jobs to log and skip errors instead of interrupting the process. - Enhanced logging with clearer messages about embedding outcomes and skipped operations. - Added warnings when documents or summaries are missing during embedding. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -6,7 +6,6 @@ import {
|
|||||||
BlobNotFound,
|
BlobNotFound,
|
||||||
CallMetric,
|
CallMetric,
|
||||||
CopilotContextFileNotSupported,
|
CopilotContextFileNotSupported,
|
||||||
DocNotFound,
|
|
||||||
EventBus,
|
EventBus,
|
||||||
JobQueue,
|
JobQueue,
|
||||||
mapAnyError,
|
mapAnyError,
|
||||||
@@ -138,7 +137,7 @@ export class CopilotEmbeddingJob {
|
|||||||
if (enableDocEmbedding) {
|
if (enableDocEmbedding) {
|
||||||
const toBeEmbedDocIds =
|
const toBeEmbedDocIds =
|
||||||
await this.models.copilotWorkspace.findDocsToEmbed(workspaceId);
|
await this.models.copilotWorkspace.findDocsToEmbed(workspaceId);
|
||||||
this.logger.debug(
|
this.logger.log(
|
||||||
`Trigger embedding for ${toBeEmbedDocIds.length} docs in workspace ${workspaceId}`
|
`Trigger embedding for ${toBeEmbedDocIds.length} docs in workspace ${workspaceId}`
|
||||||
);
|
);
|
||||||
for (const docId of toBeEmbedDocIds) {
|
for (const docId of toBeEmbedDocIds) {
|
||||||
@@ -342,11 +341,16 @@ export class CopilotEmbeddingJob {
|
|||||||
workspaceId,
|
workspaceId,
|
||||||
docId
|
docId
|
||||||
);
|
);
|
||||||
this.logger.verbose(
|
this.logger.log(
|
||||||
`Check if doc ${docId} in workspace ${workspaceId} needs embedding: ${needEmbedding}`
|
`Check if doc ${docId} in workspace ${workspaceId} needs embedding: ${needEmbedding}`
|
||||||
);
|
);
|
||||||
if (needEmbedding) {
|
if (needEmbedding) {
|
||||||
if (signal.aborted) return;
|
if (signal.aborted) {
|
||||||
|
this.logger.log(
|
||||||
|
`Doc ${docId} in workspace ${workspaceId} is aborted, skipping embedding.`
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
const fragment = await this.getDocFragment(workspaceId, docId);
|
const fragment = await this.getDocFragment(workspaceId, docId);
|
||||||
if (fragment) {
|
if (fragment) {
|
||||||
// fast fall for empty doc, journal is easily to create a empty doc
|
// fast fall for empty doc, journal is easily to create a empty doc
|
||||||
@@ -367,12 +371,21 @@ export class CopilotEmbeddingJob {
|
|||||||
chunks
|
chunks
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
this.logger.log(
|
||||||
|
`Doc ${docId} in workspace ${workspaceId} has summary, embedding done.`
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
// for empty doc, insert empty embedding
|
// for empty doc, insert empty embedding
|
||||||
|
this.logger.warn(
|
||||||
|
`Doc ${docId} in workspace ${workspaceId} has no summary, fulfilling empty embedding.`
|
||||||
|
);
|
||||||
await this.fulfillEmptyEmbedding(workspaceId, docId);
|
await this.fulfillEmptyEmbedding(workspaceId, docId);
|
||||||
}
|
}
|
||||||
} else if (contextId) {
|
} else if (contextId) {
|
||||||
throw new DocNotFound({ spaceId: workspaceId, docId });
|
this.logger.warn(
|
||||||
|
`Doc ${docId} in workspace ${workspaceId} has no fragment, fulfilling empty embedding.`
|
||||||
|
);
|
||||||
|
await this.fulfillEmptyEmbedding(workspaceId, docId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
@@ -394,8 +407,11 @@ export class CopilotEmbeddingJob {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// passthrough error to job queue
|
// log error and skip the job
|
||||||
throw error;
|
this.logger.error(
|
||||||
|
`Error embedding doc ${docId} in workspace ${workspaceId}`,
|
||||||
|
error
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user