mirror of
https://github.com/logancyang/obsidian-copilot.git
synced 2026-07-22 07:50:24 +00:00
Add metadata context (#946)
* Do not throw errors and allow partial features * Add created and modified time to chunk
This commit is contained in:
parent
ec91c59729
commit
eb47b7bcd9
4 changed files with 22 additions and 12 deletions
|
|
@ -294,7 +294,6 @@ export default class CopilotPlugin extends Plugin {
|
|||
name: "Force re-index vault for QA",
|
||||
callback: async () => {
|
||||
try {
|
||||
await this.vectorStoreManager.clearIndex();
|
||||
const indexedFileCount = await this.vectorStoreManager.indexVaultToVectorStore(true);
|
||||
|
||||
new Notice(`${indexedFileCount} vault files re-indexed to Copilot index.`);
|
||||
|
|
|
|||
|
|
@ -104,10 +104,8 @@ export class DBOperations {
|
|||
return newDb;
|
||||
} catch (error) {
|
||||
console.error(`Error initializing Orama database:`, error);
|
||||
if (error instanceof CustomError) {
|
||||
throw error;
|
||||
}
|
||||
throw new CustomError(`Failed to initialize database: ${error.message}`);
|
||||
new Notice("Failed to initialize Copilot database. Some features may be limited.");
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -181,6 +179,9 @@ export class DBOperations {
|
|||
}
|
||||
|
||||
public getDb(): Orama<any> | undefined {
|
||||
if (!this.oramaDb) {
|
||||
console.warn("Database not initialized. Some features may be limited.");
|
||||
}
|
||||
return this.oramaDb;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { CustomError } from "@/error";
|
|||
import EmbeddingsManager from "@/LLMProviders/embeddingManager";
|
||||
import { RateLimiter } from "@/rateLimiter";
|
||||
import { getSettings, subscribeToSettingsChange } from "@/settings/model";
|
||||
import { formatDateTime } from "@/utils";
|
||||
import { Embeddings } from "@langchain/core/embeddings";
|
||||
import { MD5 } from "crypto-js";
|
||||
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";
|
||||
|
|
@ -62,7 +63,11 @@ export class IndexOperations {
|
|||
mtime: file.stat.mtime,
|
||||
tags: fileCache?.tags?.map((tag) => tag.tag) ?? [],
|
||||
extension: file.extension,
|
||||
metadata: fileCache?.frontmatter ?? {},
|
||||
metadata: {
|
||||
...(fileCache?.frontmatter ?? {}),
|
||||
created: formatDateTime(new Date(file.stat.ctime)).display,
|
||||
modified: formatDateTime(new Date(file.stat.mtime)).display,
|
||||
},
|
||||
};
|
||||
|
||||
await this.indexDocument(embeddingInstance, fileToSave);
|
||||
|
|
@ -79,7 +84,9 @@ export class IndexOperations {
|
|||
// Add note title as contextual chunk headers
|
||||
// https://js.langchain.com/docs/modules/data_connection/document_transformers/contextual_chunk_headers
|
||||
const chunks = await textSplitter.createDocuments([fileToSave.content], [], {
|
||||
chunkHeader: `\n\nNOTE TITLE: [[${fileToSave.title}]]\n\nNOTE BLOCK CONTENT:\n\n`,
|
||||
chunkHeader: `\n\nNOTE TITLE: [[${fileToSave.title}]]\n\nMETADATA:${JSON.stringify(
|
||||
fileToSave.metadata
|
||||
)}\n\nNOTE BLOCK CONTENT:\n\n`,
|
||||
appendChunkOverlapHeader: true,
|
||||
});
|
||||
|
||||
|
|
@ -401,7 +408,11 @@ export class IndexOperations {
|
|||
mtime: file.stat.mtime,
|
||||
tags: fileCache?.tags?.map((tag) => tag.tag) ?? [],
|
||||
extension: file.extension,
|
||||
metadata: fileCache?.frontmatter ?? {},
|
||||
metadata: {
|
||||
...(fileCache?.frontmatter ?? {}),
|
||||
created: file.stat.ctime,
|
||||
modified: file.stat.mtime,
|
||||
},
|
||||
};
|
||||
|
||||
await this.indexDocument(embeddingInstance, fileToSave);
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ export default class VectorStoreManager {
|
|||
|
||||
private async initialize(): Promise<void> {
|
||||
try {
|
||||
// Add retry logic for initialization
|
||||
let retries = 3;
|
||||
while (retries > 0) {
|
||||
try {
|
||||
|
|
@ -70,17 +69,17 @@ export default class VectorStoreManager {
|
|||
) {
|
||||
retries--;
|
||||
if (retries > 0) {
|
||||
await new Promise((resolve) => setTimeout(resolve, 100)); // Wait 0.1 second before retry
|
||||
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
throw error;
|
||||
console.error("Failed to initialize vector store:", error);
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.eventHandler.initializeEventListeners();
|
||||
} catch (error) {
|
||||
console.error("Failed to initialize vector store:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue