Skip to content

Commit

Permalink
v2.14.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Dooy committed Jan 15, 2024
1 parent c66a53b commit cb81930
Show file tree
Hide file tree
Showing 20 changed files with 400 additions and 95 deletions.
6 changes: 6 additions & 0 deletions changlog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# 功能升级日志

# 2.14.2
- 🐞 修复: gpt-4-1106-preview 模型 128000 #66
- 😄 新增: 录音whisper转文本对话ChatGPT
- 😄 新增: 对话内容tts转语音
- 😄 新增: 文件上传支持 `cloudflare r2 存储` 感谢 @xuzhenjun130 PR

# 2.14.1
- 🐞 修复: gpt-4-1106-preview 模型 128k #66
- 🐞 修复: 余额显示方式 #61
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"gpt-tokenizer": "^2.1.2",
"highlight.js": "^11.7.0",
"html2canvas": "^1.4.1",
"js-audio-recorder": "^1.0.7",
"katex": "^0.16.4",
"localforage": "^1.10.0",
"markdown-it": "^13.0.1",
Expand Down
7 changes: 7 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,6 @@ export * from "./mjapi"
export * from "./mjsave"
export * from "./openapi"
export * from "./units"
export * from "./mic"
export * from "./sse/fetchsse"

5 changes: 5 additions & 0 deletions src/api/mic.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@


export const tts=(index:Number)=>{

}
12 changes: 12 additions & 0 deletions src/api/openapi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,18 @@ export const GptUploader = ( url:string, FormData:FormData )=>{

}

export const whisperUpload = ( FormData:FormData )=>{
const url = gptGetUrl('/v1/audio/transcriptions');
let headers= {'Content-Type': 'multipart/form-data' }
headers={...headers,...getHeaderAuthorization()}
return new Promise<any>((resolve, reject) => {
axios.post( url , FormData, {
headers
}).then(response => resolve(response.data )
).catch(error =>reject(error) );
})
}

export const subGPT= async (data:any, chat:Chat.Chat )=>{
let d:any;
let action= data.action;
Expand Down
20 changes: 19 additions & 1 deletion src/locales/en-US.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,25 @@ export default {

"totalUsage": "Total subscription amount",
"disableGpt4": "GPT4 disabled",
"setTextInfo": "OpenAI API Key error, click here to retry"
"setTextInfo": "OpenAI API Key error, click here to retry",

"attr1": "Attr",
"ulink": "Image Link",
"copyFail": "Copy Failed",
"tts": "Text to Speech",
"fail": "Error",
"noSupperChrom": "Browser not supported!",
"lang": "Voice",
"ttsLoading": "Converting to Speech...",
"ttsSuccess": "Conversion successful",
"micIng": "Recording, say something...",
"mStart": "Start",
"mPause": "Pause",
"mGoon": "Continue",
"mRecord": "Re-record",
"mPlay": "Play",
"mCanel": "Cancel",
"mSent": "Send"
},
"mjset": {
"server": "Server",
Expand Down
21 changes: 20 additions & 1 deletion src/locales/ko-KR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,26 @@ export default {

"totalUsage": "총 구독 금액",
"disableGpt4": "GPT4 비활성화됨",
"setTextInfo": "OpenAI API 키 오류, 여기를 클릭하여 다시 시도"
"setTextInfo": "OpenAI API 키 오류, 여기를 클릭하여 다시 시도",

"attr1": "첨부",
"ulink": "원본 이미지 링크",
"copyFail": "복사 실패",
"tts": "텍스트 음성 변환 (TTS)",
"fail": "오류가 발생했습니다",
"noSupperChrom": "브라우저가 지원되지 않습니다!",
"lang": "음성",
"ttsLoading": "음성으로 변환 중...",
"ttsSuccess": "변환 성공",
"micIng": "녹음 중, 무엇인가 말해보세요...",
"mStart": "시작",
"mPause": "일시 정지",
"mGoon": "계속",
"mRecord": "다시 녹음",
"mPlay": "재생",
"mCanel": "취소",
"mSent": "전송"

},
"mjset": {
"server": "서버"
Expand Down
20 changes: 19 additions & 1 deletion src/locales/ru-RU.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,25 @@ export default {

"totalUsage": "Общая сумма подписки",
"disableGpt4": "GPT4 отключен",
"setTextInfo": "Ошибка ключа OpenAI API, нажмите здесь, чтобы повторить попытку"
"setTextInfo": "Ошибка ключа OpenAI API, нажмите здесь, чтобы повторить попытку",

"attr1": "Вложение",
"ulink": "Ссылка на оригинальное изображение",
"copyFail": "Не удалось скопировать",
"tts": "Текст в речь",
"fail": "Произошла ошибка",
"noSupperChrom": "Браузер не поддерживается!",
"lang": "Голос",
"ttsLoading": "Преобразование в речь...",
"ttsSuccess": "Преобразование успешно",
"micIng": "Идет запись, скажите что-нибудь...",
"mStart": "Начать",
"mPause": "Пауза",
"mGoon": "Продолжить",
"mRecord": "Перезаписать",
"mPlay": "Воспроизвести",
"mCanel": "Отмена",
"mSent": "Отправить"

},
"mjset": {
Expand Down
20 changes: 19 additions & 1 deletion src/locales/vi-VN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,25 @@ export default {

"totalUsage": "Tổng số tiền đăng ký",
"disableGpt4": "GPT4 đã tắt",
"setTextInfo": "Lỗi Khóa API OpenAI, nhấp vào đây để thử lại"
"setTextInfo": "Lỗi Khóa API OpenAI, nhấp vào đây để thử lại" ,

"attr1": "Đính",
"ulink": "Liên kết Ảnh gốc",
"copyFail": "Sao chép thất bại",
"tts": "Văn bản thành Tiếng nói (TTS)",
"fail": "Đã xảy ra lỗi",
"noSupperChrom": "Trình duyệt không được hỗ trợ!",
"lang": "Âm thanh",
"ttsLoading": "Đang chuyển đổi thành tiếng nói...",
"ttsSuccess": "Chuyển đổi thành công",
"micIng": "Đang ghi âm, nói điều gì đó...",
"mStart": "Bắt đầu",
"mPause": "Tạm dừng",
"mGoon": "Tiếp tục",
"mRecord": "Ghi lại",
"mPlay": "Phát",
"mCanel": "Hủy",
"mSent": "Gửi"

},
"mjset": {
Expand Down
19 changes: 19 additions & 0 deletions src/locales/zh-CN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,5 +239,24 @@ export default {
,totalUsage:'订阅总额'
,disableGpt4:'已禁用GPT4'
,setTextInfo:'OpenAi Api Key 错误,点击这里重新'

,attr1:'附'
,ulink:'原图链接'
,copyFail:'复制失败'
,tts:'TTS 文本转语音'
,fail:'发生错误'
,noSupperChrom:'浏览器不支持!'
,lang:'语音'
,ttsLoading:'语音转化...'
,ttsSuccess:'转化成功'
,micIng:'正在录音,说点什么...'
,mStart:'开始'
,mPause:'暂停'
,mGoon:'继续'
,mRecord:'重录'
,mPlay:'播放'
,mCanel:'取消'
,mSent:'发送'

}
}
21 changes: 20 additions & 1 deletion src/locales/zh-TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,26 @@ export default {

"totalUsage": "訂閱總額",
"disableGpt4": "已禁用GPT4",
"setTextInfo": "OpenAI API Key 錯誤,點擊這裡重新"
"setTextInfo": "OpenAI API Key 錯誤,點擊這裡重新",

"attr1": "附",
"ulink": "原圖鏈接",
"copyFail": "複製失敗",
"tts": "文字轉語音",
"fail": "發生錯誤",
"noSupperChrom": "瀏覽器不支援!",
"lang": "語音",
"ttsLoading": "轉換中...",
"ttsSuccess": "轉換成功",
"micIng": "錄音中,請說些什麼...",
"mStart": "開始",
"mPause": "暫停",
"mGoon": "繼續",
"mRecord": "重新錄製",
"mPlay": "播放",
"mCanel": "取消",
"mSent": "發送"

},
"mjset": {
"server": "服務端",
Expand Down
3 changes: 3 additions & 0 deletions src/views/chat/components/Message/Text.vue
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,9 @@ onUnmounted(() => {
<whisperText v-else-if="text=='whisper' && chat.opt?.lkey " :chat="chat" />
<div v-else class="whitespace-pre-wrap" v-text="text" />
<MjTextAttr :image="chat.opt?.images[0]" v-if="chat.opt?.images"></MjTextAttr>
<whisperText v-if="chat.model && chat.model.indexOf('whisper')>-1 && chat.opt?.lkey " :isW="true" :chat="chat" class="w-full" />
<ttsText v-if="!inversion && chat.opt?.duration && chat.opt?.duration>0 && chat.opt?.lkey " :isW="true" :chat="chat" class="w-full" />
</div>
Expand Down
52 changes: 15 additions & 37 deletions src/views/chat/components/Message/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,22 @@ const options = computed(() => {
label: asRawText.value ? t('chat.preview') : t('chat.showRawText'),
key: 'toggleRenderType',
icon: iconRender({ icon: asRawText.value ? 'ic:outline-code-off' : 'ic:outline-code' }),
});
common.unshift({
label: t('mj.tts'),
key: 'tts',
icon: iconRender({ icon:'mdi:tts' }),
})
}
return common
})
function handleSelect(key: 'copyText' | 'delete' | 'toggleRenderType') {
function handleSelect(key: 'copyText' | 'delete' | 'toggleRenderType' |'tts') {
switch (key) {
case 'tts':
homeStore.setMyData({act:'gpt.ttsv2', actData:{ index:props.index , uuid:props.chat.uuid, text:props.text } });
return;
case 'copyText':
handleCopy()
return
Expand All @@ -89,44 +97,17 @@ function handleRegenerate() {
async function handleCopy(txt?:string) {
try {
await copyToClip( txt|| props.text || '')
message.success('复制成功')
message.success( t('chat.copied'))
}
catch {
message.error('复制失败')
message.error( t('mj.copyFail') )
}
}
const sendReload = () => {
homeStore.setMyData({act:'mjReload', actData:{mjID:props.chat.mjID} })
}
// const getSeed = async ()=>{
// let cchat = props.chat;
// if(!cchat.mjID ) return ;
// let seed=0 ;
// if(props.chat.opt?.seed) seed = props.chat.opt?.seed;
// else{
// try{
// message.info('获取中...');
// const res:any = await mjSeed( cchat.mjID);
// seed= res.result;
// if(seed>0 ) {
// if ( cchat.opt ){
// cchat.opt.seed = seed;
// homeStore.setMyData({act:'updateChat', actData:cchat });
// }
// message.success('获取成功');
// }
// } catch(e){
// message.error('获取失败')
// }
// }
// mlog('getSeed',seed);
// if(seed>0 ) await handleCopy(`${seed}`);
// }
function handleRegenerate2() {
messageRef.value?.scrollIntoView()
//emit('regenerate')
Expand Down Expand Up @@ -160,15 +141,12 @@ function handleRegenerate2() {
<span v-if="chat.opt?.seed">Seed:{{ chat.opt?.seed }}</span>
<span v-else>Seed</span>
</div>
<a :href="chat.opt?.imageUrl" class="hidden group-hover:block active cursor-pointer underline " target="_blank">原图链接</a>
<a :href="chat.opt?.imageUrl" class="hidden group-hover:block active cursor-pointer underline " target="_blank">{{ $t('mj.ulink') }}</a>
</template>
</p>
<div
class="flex items-end gap-1 mt-2"
:class="[inversion ? 'flex-row-reverse' : 'flex-row']"
>
<div class="flex items-end gap-1 mt-2"
:class="[inversion ? 'flex-row-reverse' : 'flex-row']" >
<TextComponent
ref="textRef"
:inversion="inversion"
Expand Down
Loading

0 comments on commit cb81930

Please sign in to comment.