diff --git a/README.md b/README.md index d38c103..a482814 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,15 @@ In kongruity, the artifacts become "sticky notes." A board full of them looks ch With a click, they are semantically evaluated, grouped into thematic clusters with descriptive headers, rankable and exportable to project planning and execution tools. +## Voyage AI voyage-3.5 + +![Embedding model benchmarking.](Voyage.jpg) + ## Clustering and evaluation: methodology Two models run in parallel, and neither sees the other's work. Anthropic's `claude-sonnet-5` (`backend/services/clustering.service.js`) reads the raw text of every note and groups them into labeled thematic clusters. -At the same time, Voyage AI's voyage-3 model (`backend/services/embedding.service.js`) converts each note's text into a numeric representation of its semantic meaning aka vector. +At the same time, Voyage AI's voyage-3.5 model (`backend/services/embedding.service.js`) converts each note's text into a numeric representation of its semantic meaning aka vector. Once the LLM returns, kongruity scores that grouping (`backend/services/validation.service.js`) using an established silhouette coefficient, with cosine distance rather than Euclidean as the proximity metric. diff --git a/Voyage.jpg b/Voyage.jpg new file mode 100644 index 0000000..6b85176 Binary files /dev/null and b/Voyage.jpg differ diff --git a/backend/services/embedding.service.js b/backend/services/embedding.service.js index e41cb36..51a7bba 100644 --- a/backend/services/embedding.service.js +++ b/backend/services/embedding.service.js @@ -27,7 +27,7 @@ export const embedNotes = async (notes) => { for await (const chunk of batches) { const response = await client.embed({ input: chunk.map((n) => n.text), - model: "voyage-3", + model: "voyage-3.5", }); response.data.forEach((item, i) => {