Skip to content

Commit 8419ecc

Browse files
committed
fix: address PR review comments
- Add missing query prefix implementation in OpenAI embedder - Add token limit validation when adding query prefixes to all embedders - Fix translation error in Spanish locale (Russian text replaced with Spanish) - Ensure double-prefix prevention in all embedders - Maintain consistent error handling across embedders
1 parent a9dfaea commit 8419ecc

File tree

4 files changed

+68
-4
lines changed

4 files changed

+68
-4
lines changed

src/services/code-index/embedders/ollama.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ApiHandlerOptions } from "../../../shared/api"
22
import { EmbedderInfo, EmbeddingResponse, IEmbedder } from "../interfaces"
33
import { getModelQueryPrefix } from "../../../shared/embeddingModels"
4+
import { MAX_ITEM_TOKENS } from "../constants"
45
import { t } from "../../../i18n"
56

67
/**
@@ -29,7 +30,26 @@ export class CodeIndexOllamaEmbedder implements IEmbedder {
2930
// Apply model-specific query prefix if required
3031
const queryPrefix = getModelQueryPrefix("ollama", modelToUse)
3132
const processedTexts = queryPrefix
32-
? texts.map((text) => (text.startsWith(queryPrefix) ? text : `${queryPrefix}${text}`))
33+
? texts.map((text, index) => {
34+
// Prevent double-prefixing
35+
if (text.startsWith(queryPrefix)) {
36+
return text
37+
}
38+
const prefixedText = `${queryPrefix}${text}`
39+
const estimatedTokens = Math.ceil(prefixedText.length / 4)
40+
if (estimatedTokens > MAX_ITEM_TOKENS) {
41+
console.warn(
42+
t("embeddings:textWithPrefixExceedsTokenLimit", {
43+
index,
44+
estimatedTokens,
45+
maxTokens: MAX_ITEM_TOKENS,
46+
}),
47+
)
48+
// Return original text if adding prefix would exceed limit
49+
return text
50+
}
51+
return prefixedText
52+
})
3353
: texts
3454

3555
try {

src/services/code-index/embedders/openai-compatible.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,28 @@ export class OpenAICompatibleEmbedder implements IEmbedder {
6262

6363
// Apply model-specific query prefix if required
6464
const queryPrefix = getModelQueryPrefix("openai-compatible", modelToUse)
65-
const processedTexts = queryPrefix ? texts.map((text) => `${queryPrefix}${text}`) : texts
65+
const processedTexts = queryPrefix
66+
? texts.map((text, index) => {
67+
// Prevent double-prefixing
68+
if (text.startsWith(queryPrefix)) {
69+
return text
70+
}
71+
const prefixedText = `${queryPrefix}${text}`
72+
const estimatedTokens = Math.ceil(prefixedText.length / 4)
73+
if (estimatedTokens > MAX_ITEM_TOKENS) {
74+
console.warn(
75+
t("embeddings:textWithPrefixExceedsTokenLimit", {
76+
index,
77+
estimatedTokens,
78+
maxTokens: MAX_ITEM_TOKENS,
79+
}),
80+
)
81+
// Return original text if adding prefix would exceed limit
82+
return text
83+
}
84+
return prefixedText
85+
})
86+
: texts
6687

6788
const allEmbeddings: number[][] = []
6889
const usage = { promptTokens: 0, totalTokens: 0 }

src/services/code-index/embedders/openai.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
MAX_BATCH_RETRIES as MAX_RETRIES,
99
INITIAL_RETRY_DELAY_MS as INITIAL_DELAY_MS,
1010
} from "../constants"
11+
import { getModelQueryPrefix } from "../../../shared/embeddingModels"
1112
import { t } from "../../../i18n"
1213

1314
/**
@@ -36,9 +37,31 @@ export class OpenAiEmbedder extends OpenAiNativeHandler implements IEmbedder {
3637
*/
3738
async createEmbeddings(texts: string[], model?: string): Promise<EmbeddingResponse> {
3839
const modelToUse = model || this.defaultModelId
40+
41+
// Apply model-specific query prefix if required
42+
const queryPrefix = getModelQueryPrefix("openai", modelToUse)
43+
const processedTexts = queryPrefix
44+
? texts.map((text, index) => {
45+
const prefixedText = `${queryPrefix}${text}`
46+
const estimatedTokens = Math.ceil(prefixedText.length / 4)
47+
if (estimatedTokens > MAX_ITEM_TOKENS) {
48+
console.warn(
49+
t("embeddings:textWithPrefixExceedsTokenLimit", {
50+
index,
51+
estimatedTokens,
52+
maxTokens: MAX_ITEM_TOKENS,
53+
}),
54+
)
55+
// Return original text if adding prefix would exceed limit
56+
return text
57+
}
58+
return prefixedText
59+
})
60+
: texts
61+
3962
const allEmbeddings: number[][] = []
4063
const usage = { promptTokens: 0, totalTokens: 0 }
41-
const remainingTexts = [...texts]
64+
const remainingTexts = [...processedTexts]
4265

4366
while (remainingTexts.length > 0) {
4467
const currentBatch: string[] = []

webview-ui/src/i18n/locales/es/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
"qdrantKeyLabel": "Clave de Qdrant:",
5959
"advancedConfigLabel": "Configuración avanzada",
6060
"searchMinScoreLabel": "Umbral de puntuación de búsqueda",
61-
"searchMinScoreDescription": "Puntuación mínima de similitud (0.0-1.0) requerida para los resultados de búsqueda. Valores más bajos devuelven más resultados pero могут ser menos relevantes. Valores más altos devuelven menos resultados pero más relevantes.",
61+
"searchMinScoreDescription": "Puntuación mínima de similitud (0.0-1.0) requerida para los resultados de búsqueda. Valores más bajos devuelven más resultados pero pueden ser menos relevantes. Valores más altos devuelven menos resultados pero más relevantes.",
6262
"searchMinScoreResetTooltip": "Restablecer al valor predeterminado (0.4)",
6363
"startIndexingButton": "Iniciar indexación",
6464
"clearIndexDataButton": "Borrar datos de índice",

0 commit comments

Comments
 (0)