mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 13:27:08 +00:00
fix: one more attempt by codex
This commit is contained in:
parent
e8d655d87b
commit
b8f3563b84
3 changed files with 48 additions and 13 deletions
|
|
@ -45,10 +45,11 @@ export function createChaiteVectorizer (model, dimensions) {
|
||||||
return {
|
return {
|
||||||
async textToVector (text) {
|
async textToVector (text) {
|
||||||
const { client } = await getClientForModel(model)
|
const { client } = await getClientForModel(model)
|
||||||
const result = await client.getEmbedding(text, {
|
const options = { model }
|
||||||
model,
|
if (Number.isFinite(dimensions) && dimensions > 0) {
|
||||||
dimensions
|
options.dimensions = dimensions
|
||||||
})
|
}
|
||||||
|
const result = await client.getEmbedding(text, options)
|
||||||
return result.embeddings[0]
|
return result.embeddings[0]
|
||||||
},
|
},
|
||||||
async batchTextToVector (texts) {
|
async batchTextToVector (texts) {
|
||||||
|
|
@ -63,10 +64,11 @@ export function createChaiteVectorizer (model, dimensions) {
|
||||||
for (let i = 0; i < channels.length; i++) {
|
for (let i = 0; i < channels.length; i++) {
|
||||||
const { quantity } = channels[i]
|
const { quantity } = channels[i]
|
||||||
const slice = texts.slice(startIndex, startIndex + quantity)
|
const slice = texts.slice(startIndex, startIndex + quantity)
|
||||||
const embeddings = await clients[i].getEmbedding(slice, {
|
const options = { model }
|
||||||
model,
|
if (Number.isFinite(dimensions) && dimensions > 0) {
|
||||||
dimensions
|
options.dimensions = dimensions
|
||||||
})
|
}
|
||||||
|
const embeddings = await clients[i].getEmbedding(slice, options)
|
||||||
results.push(...embeddings.embeddings)
|
results.push(...embeddings.embeddings)
|
||||||
startIndex += quantity
|
startIndex += quantity
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -617,6 +617,12 @@ function ensureVectorTable (db) {
|
||||||
dimension = parseDimension(preferredDimension)
|
dimension = parseDimension(preferredDimension)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!needsTableReset && preferredDimension > 0 && dimension > 0 && dimension !== preferredDimension) {
|
||||||
|
logger?.info?.('[Memory] vector dimension change detected (stored=%s, preferred=%s), rebuilding vec_group_facts', dimension, preferredDimension)
|
||||||
|
needsTableReset = true
|
||||||
|
dimension = preferredDimension
|
||||||
|
}
|
||||||
|
|
||||||
if (dimension <= 0 && preferredDimension > 0) {
|
if (dimension <= 0 && preferredDimension > 0) {
|
||||||
dimension = preferredDimension
|
dimension = preferredDimension
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -307,16 +307,43 @@ export class GroupMemoryStore {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const dimension = getVectorDimension()
|
let tableDimension = getVectorDimension() || 0
|
||||||
if (!dimension || dimension <= 0) {
|
if (!tableDimension || tableDimension <= 0) {
|
||||||
logger.debug('[Memory] vector search skipped: vector dimension unavailable')
|
logger.debug('[Memory] vector table dimension unavailable, attempting to infer from embedding')
|
||||||
return []
|
|
||||||
}
|
}
|
||||||
const [embedding] = await embedTexts([queryText], this.embeddingModel, dimension)
|
const requestedDimension = tableDimension > 0 ? tableDimension : undefined
|
||||||
|
const [embedding] = await embedTexts([queryText], this.embeddingModel, requestedDimension)
|
||||||
if (!embedding) {
|
if (!embedding) {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
const embeddingVector = ArrayBuffer.isView(embedding) ? embedding : Float32Array.from(embedding)
|
const embeddingVector = ArrayBuffer.isView(embedding) ? embedding : Float32Array.from(embedding)
|
||||||
|
const actualDimension = embeddingVector.length
|
||||||
|
if (!actualDimension) {
|
||||||
|
logger.debug('[Memory] vector search skipped: empty embedding returned')
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
if (tableDimension > 0 && actualDimension !== tableDimension) {
|
||||||
|
logger.warn(`[Memory] vector dimension mismatch detected during search, table=${tableDimension}, embedding=${actualDimension}. Rebuilding vector table.`)
|
||||||
|
try {
|
||||||
|
resetVectorTableDimension(actualDimension)
|
||||||
|
this.prepareVectorStatements()
|
||||||
|
tableDimension = actualDimension
|
||||||
|
} catch (resetErr) {
|
||||||
|
logger.error('Failed to reset vector table dimension during search:', resetErr)
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
logger.info('[Memory] vector table rebuilt; old vectors must be regenerated before vector search can return results')
|
||||||
|
return []
|
||||||
|
} else if (tableDimension <= 0 && actualDimension > 0) {
|
||||||
|
try {
|
||||||
|
resetVectorTableDimension(actualDimension)
|
||||||
|
this.prepareVectorStatements()
|
||||||
|
tableDimension = actualDimension
|
||||||
|
} catch (resetErr) {
|
||||||
|
logger.error('Failed to initialise vector table dimension during search:', resetErr)
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
||||||
const rows = this.db.prepare(`
|
const rows = this.db.prepare(`
|
||||||
SELECT gf.*, vec_group_facts.distance AS distance
|
SELECT gf.*, vec_group_facts.distance AS distance
|
||||||
FROM vec_group_facts
|
FROM vec_group_facts
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue