mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-23 21:13:50 +00:00

Co-authored-by: Archer <545436317@qq.com> Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
67 lines
1.5 KiB
TypeScript
67 lines
1.5 KiB
TypeScript
import { getAIApi } from '../config';
|
|
|
|
export type GetVectorProps = {
|
|
model: string;
|
|
input: string;
|
|
};
|
|
|
|
// text to vector
|
|
export async function getVectorsByText({
|
|
model = 'text-embedding-ada-002',
|
|
input
|
|
}: GetVectorProps) {
|
|
if (!input) {
|
|
return Promise.reject({
|
|
code: 500,
|
|
message: 'input is empty'
|
|
});
|
|
}
|
|
|
|
try {
|
|
const ai = getAIApi();
|
|
|
|
// input text to vector
|
|
const result = await ai.embeddings
|
|
.create({
|
|
model,
|
|
input: [input]
|
|
})
|
|
.then(async (res) => {
|
|
if (!res.data) {
|
|
return Promise.reject('Embedding API 404');
|
|
}
|
|
if (!res?.data?.[0]?.embedding) {
|
|
console.log(res);
|
|
// @ts-ignore
|
|
return Promise.reject(res.data?.err?.message || 'Embedding API Error');
|
|
}
|
|
|
|
return {
|
|
charsLength: input.length,
|
|
vectors: await Promise.all(res.data.map((item) => unityDimensional(item.embedding)))
|
|
};
|
|
});
|
|
|
|
return result;
|
|
} catch (error) {
|
|
console.log(`Embedding Error`, error);
|
|
|
|
return Promise.reject(error);
|
|
}
|
|
}
|
|
|
|
function unityDimensional(vector: number[]) {
|
|
if (vector.length > 1536) {
|
|
console.log(
|
|
`The current vector dimension is ${vector.length}, and the vector dimension cannot exceed 1536. The first 1536 dimensions are automatically captured`
|
|
);
|
|
return vector.slice(0, 1536);
|
|
}
|
|
let resultVector = vector;
|
|
const vectorLen = vector.length;
|
|
|
|
const zeroVector = new Array(1536 - vectorLen).fill(0);
|
|
|
|
return resultVector.concat(zeroVector);
|
|
}
|