4.7-production (#1053)

* 4.7-alpha3 (#62)

* doc

* Optimize possible null Pointers and parts of Ux

* fix: mulity index training error

* feat: doc and rename question guide

* fix ios speech input (#59)

* fix: prompt editor variables nowrap (#61)

* change openapi import in http module with curl import (#60)

* chore(ui): dataset import modal ui (#58)

* chore(ui): dataset import modal ui

* use component

* fix height

* 4.7 (#63)

* fix: claude3 image type verification failed (#1038) (#1040)

* perf: curl import modal

* doc img

* perf: adapt cohere rerank

* perf: code

* perf: input style

* doc

---------

Co-authored-by: xiaotian <dimsky@163.com>

* fix: ts

* docker deploy

* perf: prompt call

* doc

* ts

* finish ui

* perf: outlink detail ux

* perf: user schema

* fix: plugin update

* feat: get current time plugin

* fix: ts

* perf: fetch anamation

* perf: mark ux

* doc

* perf: select app ux

* fix: split text custom string conflict

* peref: inform readed

* doc

* memo flow component

* perf: version

* faq

* feat: flow max runtimes

* feat: similarity tip

* feat: auto detect file encoding

* Supports asymmetric vector model

* fix: ts

* perf: max w

* move code

* perf: hide whisper

* fix: ts

* feat: system msg modal

* perf: catch error

* perf: inform tip

* fix: inform

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
Co-authored-by: xiaotian <dimsky@163.com>
This commit is contained in:
Archer
2024-03-26 12:09:31 +08:00
committed by GitHub
parent ef15ca894e
commit 911512b36d
180 changed files with 2179 additions and 1361 deletions

View File

@@ -2,9 +2,9 @@ import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@fastgpt/service/common/response';
import { connectToDatabase } from '@/service/mongo';
import { authFileToken } from '@fastgpt/service/support/permission/controller';
import { detect } from 'jschardet';
import { getDownloadStream, getFileById } from '@fastgpt/service/common/file/gridfs/controller';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { detectFileEncoding } from '@fastgpt/global/common/file/tools';
export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
try {
@@ -37,7 +37,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
}
}
const encoding = detect(buffers)?.encoding || 'utf-8';
const encoding = detectFileEncoding(buffers);
res.setHeader('Content-Type', `${file.contentType}; charset=${encoding}`);
res.setHeader('Cache-Control', 'public, max-age=3600');

View File

@@ -25,8 +25,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
reRankModels:
global.reRankModels?.map((item) => ({
...item,
requestUrl: undefined,
requestAuth: undefined
requestUrl: '',
requestAuth: ''
})) || [],
whisperModel: global.whisperModel,
audioSpeechModels: global.audioSpeechModels,
@@ -42,7 +42,7 @@ const defaultFeConfigs: FastGPTFeConfigsType = {
openAPIDocUrl: 'https://doc.fastgpt.in/docs/development/openapi',
systemTitle: 'FastGPT',
concatMd:
'* 项目开源地址: [FastGPT GitHub](https://github.com/labring/FastGPT)\n* 交流群: ![](https://oss.laf.run/htr4n1-images/fastgpt-qr-code.jpg)',
'项目开源地址: [FastGPT GitHub](https://github.com/labring/FastGPT)\n交流群: ![](https://oss.laf.run/htr4n1-images/fastgpt-qr-code.jpg)',
limit: {
exportDatasetLimitMinutes: 0,
websiteSyncLimitMinuted: 0
@@ -150,7 +150,7 @@ function getSystemPlugin() {
const filterFiles = files.filter((item) => item.endsWith('.json'));
// read json file
const fileTemplates: PluginTemplateType[] = filterFiles.map((filename) => {
const fileTemplates: (PluginTemplateType & { weight: number })[] = filterFiles.map((filename) => {
const content = readFileSync(`${basePath}/${filename}`, 'utf-8');
return {
...JSON.parse(content),
@@ -159,5 +159,7 @@ function getSystemPlugin() {
};
});
fileTemplates.sort((a, b) => b.weight - a.weight);
global.communityPlugins = fileTemplates;
}

View File

@@ -72,7 +72,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
userChatInput: text
},
stream: true,
detail: true
detail: true,
maxRunTimes: 200
});
responseWrite({

View File

@@ -1,12 +1,12 @@
import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@fastgpt/service/common/response';
import * as SwaggerParser from '@apidevtools/swagger-parser';
import SwaggerParser from '@apidevtools/swagger-parser';
export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
try {
const apiURL = req.body.url as string;
const api = await (SwaggerParser as any).validate(apiURL);
const api = await SwaggerParser.validate(apiURL);
return jsonRes(res, {
data: api

View File

@@ -17,6 +17,18 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
const { teamId, tmbId } = await authPluginCrud({ req, authToken: true, id, per: 'owner' });
const updateData = {
name: props.name,
intro: props.intro,
avatar: props.avatar,
parentId: props.parentId,
...(props.modules &&
props.modules.length > 0 && {
modules: props.modules
}),
metadata: props.metadata
};
if (props.metadata?.apiSchemaStr) {
await mongoSessionRun(async (session) => {
// update children
@@ -26,13 +38,13 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
parent: body,
session
});
await MongoPlugin.findByIdAndUpdate(id, props, { session });
await MongoPlugin.findByIdAndUpdate(id, updateData, { session });
});
jsonRes(res, {});
} else {
jsonRes(res, {
data: await MongoPlugin.findByIdAndUpdate(id, props)
data: await MongoPlugin.findByIdAndUpdate(id, updateData)
});
}
} catch (err) {

View File

@@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@fastgpt/service/common/response';
import { connectToDatabase } from '@/service/mongo';
import { readMongoImg } from '@fastgpt/service/common/file/image/controller';
import { guessImageTypeFromBase64 } from '@fastgpt/service/common/file/utils';
import { guessBase64ImageType } from '@fastgpt/service/common/file/utils';
// get the models available to the system
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
@@ -11,8 +11,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
const { id } = req.query as { id: string };
const binary = await readMongoImg({ id });
const imageType = guessImageTypeFromBase64(binary.toString('base64'));
res.setHeader('Content-Type', imageType);
res.setHeader('Content-Type', guessBase64ImageType(binary.toString('base64')));
res.send(binary);
} catch (error) {
jsonRes(res, {

View File

@@ -184,7 +184,8 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex
userChatInput: text
},
stream,
detail
detail,
maxRunTimes: 200
});
// save chat

View File

@@ -9,17 +9,19 @@ import { updateApiKeyUsage } from '@fastgpt/service/support/openapi/tools';
import { getUsageSourceByAuthType } from '@fastgpt/global/support/wallet/usage/tools';
import { getVectorModel } from '@fastgpt/service/core/ai/model';
import { checkTeamAIPoints } from '@fastgpt/service/support/permission/teamLimit';
import { EmbeddingTypeEnm } from '@fastgpt/global/core/ai/constants';
type Props = {
input: string | string[];
model: string;
dimensions?: number;
billId?: string;
type: `${EmbeddingTypeEnm}`;
};
export default withNextCors(async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
try {
let { input, model, billId } = req.body as Props;
let { input, model, billId, type } = req.body as Props;
await connectToDatabase();
if (!Array.isArray(input) && typeof input !== 'string') {
@@ -38,7 +40,8 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex
const { tokens, vectors } = await getVectorsByText({
input: query,
model: getVectorModel(model)
model: getVectorModel(model),
type
});
res.json({