Skip to content

Commit c5664c7

Browse files
authored
feat: vision model (#489)
* mongo init * perf: mongo connect * perf: tts perf: whisper and tts peref: tts whisper permission log reabase (#488) * perf: modal * i18n * perf: schema lean * feat: vision model format * perf: tts loading * perf: static data * perf: tts * feat: image * perf: image * perf: upload image and title * perf: image size * doc * perf: color * doc * speaking can not select file * doc
1 parent 70f3373 commit c5664c7

File tree

58 files changed

+648
-252
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+648
-252
lines changed

docSite/content/docs/development/configuration.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ weight: 520
3636
"quoteMaxToken": 2000, // 最大引用内容长度
3737
"maxTemperature": 1.2, // 最大温度值
3838
"censor": false, // 是否开启敏感词过滤(商业版)
39+
"vision": false, // 支持图片输入
3940
"defaultSystemChatPrompt": ""
4041
},
4142
{
@@ -47,6 +48,7 @@ weight: 520
4748
"quoteMaxToken": 8000,
4849
"maxTemperature": 1.2,
4950
"censor": false,
51+
"vision": false,
5052
"defaultSystemChatPrompt": ""
5153
},
5254
{
@@ -58,6 +60,19 @@ weight: 520
5860
"quoteMaxToken": 4000,
5961
"maxTemperature": 1.2,
6062
"censor": false,
63+
"vision": false,
64+
"defaultSystemChatPrompt": ""
65+
},
66+
{
67+
"model": "gpt-4-vision-preview",
68+
"name": "GPT4-Vision",
69+
"maxContext": 128000,
70+
"maxResponse": 4000,
71+
"price": 0,
72+
"quoteMaxToken": 100000,
73+
"maxTemperature": 1.2,
74+
"censor": false,
75+
"vision": true,
6176
"defaultSystemChatPrompt": ""
6277
}
6378
],
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
title: 'V4.6.1'
3+
description: 'FastGPT V4.6 .1'
4+
icon: 'upgrade'
5+
draft: false
6+
toc: true
7+
weight: 835
8+
---
9+
10+
11+
## V4.6.1 功能介绍
12+
13+
1. 新增 - GPT4-v 模型支持
14+
2. 新增 - whisper 语音输入
15+
3. 优化 - TTS 流传输
16+
4. 优化 - TTS 缓存

packages/global/common/string/tools.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const simpleText = (text: string) => {
2424
};
2525

2626
/*
27-
replace {{variable}} to value
27+
replace {{variable}} to value
2828
*/
2929
export function replaceVariable(text: string, obj: Record<string, string | number>) {
3030
for (const key in obj) {

packages/global/core/ai/model.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export type ChatModelItemType = LLMModelItemType & {
99
quoteMaxToken: number;
1010
maxTemperature: number;
1111
censor?: boolean;
12+
vision?: boolean;
1213
defaultSystemChatPrompt?: string;
1314
};
1415

packages/global/core/ai/model.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const defaultChatModels: ChatModelItemType[] = [
1717
quoteMaxToken: 2000,
1818
maxTemperature: 1.2,
1919
censor: false,
20+
vision: false,
2021
defaultSystemChatPrompt: ''
2122
},
2223
{
@@ -28,6 +29,7 @@ export const defaultChatModels: ChatModelItemType[] = [
2829
quoteMaxToken: 8000,
2930
maxTemperature: 1.2,
3031
censor: false,
32+
vision: false,
3133
defaultSystemChatPrompt: ''
3234
},
3335
{
@@ -39,6 +41,19 @@ export const defaultChatModels: ChatModelItemType[] = [
3941
quoteMaxToken: 4000,
4042
maxTemperature: 1.2,
4143
censor: false,
44+
vision: false,
45+
defaultSystemChatPrompt: ''
46+
},
47+
{
48+
model: 'gpt-4-vision-preview',
49+
name: 'GPT4-Vision',
50+
maxContext: 128000,
51+
maxResponse: 4000,
52+
price: 0,
53+
quoteMaxToken: 100000,
54+
maxTemperature: 1.2,
55+
censor: false,
56+
vision: true,
4257
defaultSystemChatPrompt: ''
4358
}
4459
];

packages/global/core/ai/type.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import type {
55
ChatCompletionMessageParam,
66
ChatCompletionContentPart
77
} from 'openai/resources';
8+
89
export type ChatCompletionContentPart = ChatCompletionContentPart;
910
export type ChatCompletionCreateParams = ChatCompletionCreateParams;
10-
export type ChatMessageItemType = Omit<ChatCompletionMessageParam> & {
11+
export type ChatMessageItemType = Omit<ChatCompletionMessageParam, 'name'> & {
12+
name?: any;
1113
dataId?: string;
1214
content: any;
13-
};
15+
} & any;
1416

1517
export type ChatCompletion = ChatCompletion;
1618
export type StreamChatType = Stream<ChatCompletionChunk>;

packages/global/core/chat/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,6 @@ export const ChatSourceMap = {
5454

5555
export const HUMAN_ICON = `/icon/human.svg`;
5656
export const LOGO_ICON = `/icon/logo.svg`;
57+
58+
export const IMG_BLOCK_KEY = 'img-block';
59+
export const FILE_BLOCK_KEY = 'file-block';

packages/global/core/chat/utils.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { IMG_BLOCK_KEY, FILE_BLOCK_KEY } from './constants';
2+
3+
export function chatContentReplaceBlock(content: string = '') {
4+
const regex = new RegExp(`\`\`\`(${IMG_BLOCK_KEY})\\n([\\s\\S]*?)\`\`\``, 'g');
5+
return content.replace(regex, '').trim();
6+
}

packages/service/common/buffer/tts/schema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,4 @@ try {
3333

3434
export const MongoTTSBuffer: Model<TTSBufferSchemaType> =
3535
models[collectionName] || model(collectionName, TTSBufferSchema);
36+
MongoTTSBuffer.syncIndexes();

packages/service/common/file/image/controller.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,26 @@ export function getMongoImgUrl(id: string) {
55
return `${imageBaseUrl}${id}`;
66
}
77

8-
export async function uploadMongoImg({ base64Img, userId }: { base64Img: string; userId: string }) {
8+
export const maxImgSize = 1024 * 1024 * 12;
9+
export async function uploadMongoImg({
10+
base64Img,
11+
teamId,
12+
expiredTime
13+
}: {
14+
base64Img: string;
15+
teamId: string;
16+
expiredTime?: Date;
17+
}) {
18+
if (base64Img.length > maxImgSize) {
19+
return Promise.reject('Image too large');
20+
}
21+
922
const base64Data = base64Img.split(',')[1];
1023

1124
const { _id } = await MongoImage.create({
12-
userId,
13-
binary: Buffer.from(base64Data, 'base64')
25+
teamId,
26+
binary: Buffer.from(base64Data, 'base64'),
27+
expiredTime
1428
});
1529

1630
return getMongoImgUrl(String(_id));

0 commit comments

Comments
 (0)