mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-23 05:12:39 +00:00

* perf: redirect request and err log replace perf: dataset openapi feat: session fix: retry input error feat: 468 doc sub page feat: standard sub perf: rerank tip perf: rerank tip perf: api sdk perf: openapi sub plan perf: sub ui fix: ts * perf: init log * fix: variable select * sub page * icon * perf: llm model config * perf: menu ux * perf: system store * perf: publish app name * fix: init data * perf: flow edit ux * fix: value type format and ux * fix prompt editor default value (#13) * fix prompt editor default value * fix prompt editor update when not focus * add key with variable --------- Co-authored-by: Archer <545436317@qq.com> * fix: value type * doc * i18n * import path * home page * perf: mongo session running * fix: ts * perf: use toast * perf: flow edit * perf: sse response * slider ui * fetch error * fix prompt editor rerender when not focus by key defaultvalue (#14) * perf: prompt editor * feat: dataset search concat * perf: doc * fix:ts * perf: doc * fix json editor onblur value (#15) * faq * vector model default config * ipv6 --------- Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
import { VectorModelItemType } from '@fastgpt/global/core/ai/model.d';
|
|
import { getAIApi } from '../config';
|
|
|
|
type GetVectorProps = {
|
|
model: VectorModelItemType;
|
|
input: string;
|
|
};
|
|
|
|
// text to vector
|
|
export async function getVectorsByText({ model, 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.defaultConfig,
|
|
model: model.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);
|
|
}
|