Compare commits
16 Commits
3f8a11e1e0
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| e647d1791d | |||
| a7c76596de | |||
| ef4dbda961 | |||
| 3b0fcbfb64 | |||
| c8f13dff8c | |||
| 7e3254bc81 | |||
| adf6af0824 | |||
| ede810f51b | |||
| df8d2bb3d0 | |||
| b844f82c50 | |||
| a494c0ed16 | |||
| 337a3f2d6e | |||
| 589cd6c49c | |||
| fe55fae1f7 | |||
| 44409b2bba | |||
| a2c90214ad |
@@ -14,5 +14,7 @@ import Conversation from './main/Conversation'
|
|||||||
<Conversation client:only />
|
<Conversation client:only />
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<Send client:load />
|
<div id='infoSend'>
|
||||||
|
<Send client:load />
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -6,12 +6,13 @@ import ConversationSidebarItem from './ConversationSidebarItem'
|
|||||||
import ConversationSidebarAdd from './ConversationSidebarAdd'
|
import ConversationSidebarAdd from './ConversationSidebarAdd'
|
||||||
import { addConversation } from '@/stores/conversation'
|
import { addConversation } from '@/stores/conversation'
|
||||||
import { showConversationEditModal } from '@/stores/ui'
|
import { showConversationEditModal } from '@/stores/ui'
|
||||||
|
import ChatList from '../../pages/chat/datalist'
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const $conversationMapSortList = useStore(conversationMapSortList)
|
const $conversationMapSortList = useStore(conversationMapSortList)
|
||||||
|
|
||||||
//设置副标题数字
|
//设置副标题数字
|
||||||
const setNameNum = (setName: string, numList: any) => {
|
const setNameNum = (setName: string, numList: any) => {
|
||||||
let list = conversationMapSortList.get()
|
let list = conversationMapSortList.get()
|
||||||
let title = ''
|
let title = ''
|
||||||
@@ -24,7 +25,7 @@ export default () => {
|
|||||||
count = Math.max(count, Number(num[0].replace('(', '').replace(')', '')))
|
count = Math.max(count, Number(num[0].replace('(', '').replace(')', '')))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
title =count?`${setName}(${count + 1})`:`${setName}${numList.length>0?'(1)':''}`
|
title = count ? `${setName}(${count + 1})` : `${setName}${numList.length > 0 ? '(1)' : ''}`
|
||||||
return title
|
return title
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,46 +37,50 @@ export default () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMount(() => {
|
// onMount(() => {
|
||||||
setTimeout(() => {
|
// return
|
||||||
let itemList = conversationMapSortList.get()
|
// setTimeout(() => {
|
||||||
let setName = JSON.parse(sessionStorage.getItem('dialogueName') as any)||'未命名对话'
|
// let itemList = conversationMapSortList.get()
|
||||||
let numList: number[] = []
|
// let setName = JSON.parse(sessionStorage.getItem('dialogueName') as any) || '未命名对话'
|
||||||
itemList.map((res, i) => {
|
// let numList: number[] = []
|
||||||
if (checkName(res.name, setName.name)) numList.push(i)
|
// itemList.map((res, i) => {
|
||||||
})
|
// if (checkName(res.name, setName.name)) numList.push(i)
|
||||||
|
// })
|
||||||
|
|
||||||
if(setName.switch){
|
// if (setName.switch) {
|
||||||
addConversation({name:setNameNum(setName.name, numList),systemInfo:setName.systemInfo})
|
// addConversation({ name: setNameNum(setName.name, numList), systemInfo: setName.systemInfo })
|
||||||
showConversationEditModal.set(true)
|
// showConversationEditModal.set(true)
|
||||||
setName.switch=false
|
// setName.switch = false
|
||||||
sessionStorage.setItem('dialogueName',JSON.stringify({name:setName.name,switch:false}))
|
// sessionStorage.setItem('dialogueName', JSON.stringify({ name: setName.name, switch: false }))
|
||||||
}
|
// }
|
||||||
}, 1000)
|
// }, 1000)
|
||||||
})
|
// })
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="h-full flex flex-col bg-sidebar">
|
<div style={{height:'100vh'}}>
|
||||||
<header class="h-14 fi justify-between px-4 text-xs uppercase">
|
<div class="h-full flex flex-col bg-sidebar" style={{height:'50%',overflow:'auto'}}>
|
||||||
<p class="px-2">{t('conversations.title')}</p>
|
<header class="h-14 fi justify-between px-4 text-xs uppercase">
|
||||||
<div class="fi gap-1">
|
<p class="px-2">{t('conversations.title')}</p>
|
||||||
{/* <Button
|
<div class="fi gap-1">
|
||||||
|
{/* <Button
|
||||||
icon="i-carbon-search"
|
icon="i-carbon-search"
|
||||||
onClick={() => {}}
|
onClick={() => {}}
|
||||||
size="sm"
|
size="sm"
|
||||||
/> */}
|
/> */}
|
||||||
<ConversationSidebarAdd />
|
<ConversationSidebarAdd />
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div class="flex-1 overflow-auto">
|
<div class="flex-1 overflow-auto">
|
||||||
<div class="px-2">
|
<div class="px-2">
|
||||||
<For each={$conversationMapSortList()}>
|
<For each={$conversationMapSortList()}>
|
||||||
{instance => (
|
{instance => (
|
||||||
<ConversationSidebarItem instance={instance} />
|
<ConversationSidebarItem instance={instance} />
|
||||||
)}
|
)}
|
||||||
</For>
|
</For>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<ChatList></ChatList>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { currentConversationId, deleteConversationById } from '@/stores/conversa
|
|||||||
import { showConversationSidebar } from '@/stores/ui'
|
import { showConversationSidebar } from '@/stores/ui'
|
||||||
import { useI18n } from '@/hooks'
|
import { useI18n } from '@/hooks'
|
||||||
import type { Conversation } from '@/types/conversation'
|
import type { Conversation } from '@/types/conversation'
|
||||||
|
import { chatShow } from '@/pages/chat/ts/store'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
instance: Omit<Conversation, 'messages'> & {
|
instance: Omit<Conversation, 'messages'> & {
|
||||||
@@ -16,6 +17,15 @@ export default ({ instance }: Props) => {
|
|||||||
const isTouchDevice = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
|
const isTouchDevice = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
|
||||||
|
|
||||||
const handleClick = () => {
|
const handleClick = () => {
|
||||||
|
chatShow.set(false)
|
||||||
|
let infoHeader = document.getElementById("infoHeader");
|
||||||
|
let infoSend = document.getElementById("infoSend");
|
||||||
|
let mtBox = document.getElementsByClassName('flex-1 mt-14 flex flex-col overflow-hidden')[0]
|
||||||
|
if (!chatShow.get()) {
|
||||||
|
infoHeader.style.display = "flex";
|
||||||
|
infoSend.style.display = "block";
|
||||||
|
mtBox.style.marginTop = '3.5rem';
|
||||||
|
}
|
||||||
currentConversationId.set(instance.id)
|
currentConversationId.set(instance.id)
|
||||||
showConversationSidebar.set(false)
|
showConversationSidebar.set(false)
|
||||||
}
|
}
|
||||||
@@ -36,7 +46,7 @@ export default ({ instance }: Props) => {
|
|||||||
<div class="fcc w-8 h-8 rounded-full text-xl shrink-0">
|
<div class="fcc w-8 h-8 rounded-full text-xl shrink-0">
|
||||||
{instance.icon ? instance.icon : <div class="text-base i-carbon-chat" />}
|
{instance.icon ? instance.icon : <div class="text-base i-carbon-chat" />}
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-1 truncate text-sm">{ instance.name || t('conversations.untitled') }</div>
|
<div class="flex-1 truncate text-sm">{instance.name || t('conversations.untitled')}</div>
|
||||||
<div class={isTouchDevice ? '' : 'hidden group-hover:block'}>
|
<div class={isTouchDevice ? '' : 'hidden group-hover:block'}>
|
||||||
<div
|
<div
|
||||||
class="inline-flex p-2 items-center gap-1 rounded-md hv-base"
|
class="inline-flex p-2 items-center gap-1 rounded-md hv-base"
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ export default () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
return (
|
return (
|
||||||
<header onDblClick={scrollController().scrollToTop} class="shrink-0 absolute top-0 left-0 right-0 fi justify-between border-b border-base h-14 px-4">
|
<header onDblClick={scrollController().scrollToTop}
|
||||||
|
id='infoHeader'
|
||||||
|
class="shrink-0 absolute top-0 left-0 right-0 fi justify-between border-b border-base h-14 px-4">
|
||||||
<div class="fi overflow-hidden">
|
<div class="fi overflow-hidden">
|
||||||
<div
|
<div
|
||||||
class="fcc p-2 rounded-md text-xl hv-foreground md:hidden"
|
class="fcc p-2 rounded-md text-xl hv-foreground md:hidden"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Match, Switch, createEffect,onMount } from 'solid-js'
|
import { Match, Switch, createEffect, Show } from 'solid-js'
|
||||||
import { useStore } from '@nanostores/solid'
|
import { useStore } from '@nanostores/solid'
|
||||||
import { conversationMap, currentConversationId } from '@/stores/conversation'
|
import { conversationMap, currentConversationId } from '@/stores/conversation'
|
||||||
import { conversationMessagesMap } from '@/stores/messages'
|
import { conversationMessagesMap } from '@/stores/messages'
|
||||||
@@ -10,6 +10,8 @@ import Welcome from './Welcome'
|
|||||||
import Continuous from './Continuous'
|
import Continuous from './Continuous'
|
||||||
import Single from './Single'
|
import Single from './Single'
|
||||||
import Image from './Image'
|
import Image from './Image'
|
||||||
|
import { chatShow } from '@/pages/chat/ts/store'
|
||||||
|
import Iframe from '@/pages/chat/components/iframe'
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
@@ -33,7 +35,7 @@ export default () => {
|
|||||||
createEffect(() => {
|
createEffect(() => {
|
||||||
const conversation = currentConversation()
|
const conversation = currentConversation()
|
||||||
const currentDomain = window.location.hostname;
|
const currentDomain = window.location.hostname;
|
||||||
const contentDomain = currentDomain=='gtering.com'?'Gtering.com':'Ansnid.Com';
|
const contentDomain = currentDomain == 'gtering.com' ? 'Gtering.com' : 'Ansnid.Com';
|
||||||
|
|
||||||
document.title = conversation ? `${(conversation.name || t('conversations.untitled'))} - ` + contentDomain : contentDomain
|
document.title = conversation ? `${(conversation.name || t('conversations.untitled'))} - ` + contentDomain : contentDomain
|
||||||
const link = document.querySelector("link[rel~='icon']") as HTMLLinkElement
|
const link = document.querySelector("link[rel~='icon']") as HTMLLinkElement
|
||||||
@@ -43,34 +45,45 @@ export default () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
let chat: any = null
|
||||||
|
chat = useStore(chatShow)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Switch
|
<>
|
||||||
fallback={(
|
<Show when={!chat()}>
|
||||||
<Welcome />
|
<Switch
|
||||||
)}
|
fallback={(
|
||||||
>
|
<Welcome />
|
||||||
<Match when={$currentConversationId() && !currentConversationMessages().length}>
|
)}
|
||||||
<ConversationEmpty conversation={currentConversation()} />
|
>
|
||||||
</Match>
|
<Match when={$currentConversationId() && !currentConversationMessages().length}>
|
||||||
<Match when={currentBot()?.type === 'chat_continuous'}>
|
<ConversationEmpty conversation={currentConversation()} />
|
||||||
<Continuous
|
</Match>
|
||||||
conversationId={$currentConversationId()}
|
<Match when={currentBot()?.type === 'chat_continuous'}>
|
||||||
messages={currentConversationMessages}
|
<Continuous
|
||||||
/>
|
conversationId={$currentConversationId()}
|
||||||
</Match>
|
messages={currentConversationMessages}
|
||||||
<Match when={currentBot()?.type === 'chat_single'}>
|
/>
|
||||||
<Single
|
</Match>
|
||||||
conversationId={$currentConversationId()}
|
<Match when={currentBot()?.type === 'chat_single'}>
|
||||||
messages={currentConversationMessages}
|
<Single
|
||||||
/>
|
conversationId={$currentConversationId()}
|
||||||
</Match>
|
messages={currentConversationMessages}
|
||||||
<Match when={currentBot()?.type === 'image_generation'}>
|
/>
|
||||||
<Image
|
</Match>
|
||||||
// conversationId={$currentConversationId()}
|
<Match when={currentBot()?.type === 'image_generation'}>
|
||||||
messages={currentConversationMessages}
|
<Image
|
||||||
// fetching={isLoading() || !isStreaming()}
|
// conversationId={$currentConversationId()}
|
||||||
/>
|
messages={currentConversationMessages}
|
||||||
</Match>
|
// fetching={isLoading() || !isStreaming()}
|
||||||
</Switch>
|
/>
|
||||||
|
</Match>
|
||||||
|
</Switch>
|
||||||
|
</Show>
|
||||||
|
<Show when={chat()}>
|
||||||
|
<Iframe></Iframe>
|
||||||
|
</Show>
|
||||||
|
</>
|
||||||
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,28 +3,24 @@ import { For } from 'solid-js'
|
|||||||
import MessageItem from './../main/MessageItem'
|
import MessageItem from './../main/MessageItem'
|
||||||
import Banner from './banner'
|
import Banner from './banner'
|
||||||
import './style.css'
|
import './style.css'
|
||||||
import { createEffect, createSignal, useEffect,onMount } from 'solid-js'
|
import { createEffect, createSignal, useEffect, onMount,sg } from 'solid-js'
|
||||||
import { fetchData } from '../../http/api'
|
import { fetchData } from '../../http/api'
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
|
|
||||||
const currentDomain = window.location.hostname;
|
const currentDomain = window.location.hostname;
|
||||||
const contentDomain = currentDomain=='gtering.com'?'Gtering.com':'Ansnid.Com';
|
const contentDomain = currentDomain == 'gtering.com' ? 'Gtering.com' : 'Ansnid.Com';
|
||||||
|
|
||||||
const [views, setViews] = createSignal(0)
|
const [views, setViews] = createSignal(0)
|
||||||
const [url, setUrl] = createSignal('')
|
const [url, setUrl] = createSignal('')
|
||||||
const [title, setTitle] = createSignal(contentDomain)
|
const [title, setTitle] = createSignal(contentDomain)
|
||||||
const [items, setItems] = createSignal([])
|
const [items, setItems] = createSignal([])
|
||||||
|
|
||||||
// localStorage.setItem('theme', 'light');
|
// localStorage.setItem('theme', 'light');
|
||||||
document.documentElement.classList.toggle('dark', false)
|
document.documentElement.classList.toggle('dark', false)
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
|
fetchData(null, function (data) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fetchData(null, function(data){
|
|
||||||
|
|
||||||
setViews(data.data.views);
|
setViews(data.data.views);
|
||||||
setUrl(data.data.url);
|
setUrl(data.data.url);
|
||||||
@@ -32,14 +28,16 @@ export default () => {
|
|||||||
setTitle(data.data.title);
|
setTitle(data.data.title);
|
||||||
document.title = data.data.title ? `${(data.data.title || t('conversations.untitled'))} - ` + contentDomain : contentDomain
|
document.title = data.data.title ? `${(data.data.title || t('conversations.untitled'))} - ` + contentDomain : contentDomain
|
||||||
|
|
||||||
}, "/chatgptApi/conversations?url="+encodeURIComponent(window.location.href))
|
}, "/chatgptApi/conversations?url=" + encodeURIComponent(window.location.href))
|
||||||
|
|
||||||
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
let [moreBox,setMoreBox]= createSignal(false)
|
||||||
return (
|
return (
|
||||||
<div class="flex flex-col h-full">
|
<div class="flex flex-col h-full">
|
||||||
<div style="text-align: center; padding: 0.75rem;">
|
<div style="text-align: center; padding: 0.75rem;">
|
||||||
{title}
|
{title}
|
||||||
</div>
|
</div>
|
||||||
<div class="scroll-list relative flex flex-col h-full overflow-y-scroll">
|
<div class="scroll-list relative flex flex-col h-full overflow-y-scroll">
|
||||||
<For each={items()}>
|
<For each={items()}>
|
||||||
@@ -53,7 +51,16 @@ export default () => {
|
|||||||
)}
|
)}
|
||||||
</For>
|
</For>
|
||||||
</div>
|
</div>
|
||||||
<Banner views={views} url={url} />
|
<div class={[moreBox()?'more-show-box more-hid-box flex-end':'more-hid-box flex-end'].join()} onClick={()=>setMoreBox(!moreBox())}>
|
||||||
|
<div class='more-btn'>
|
||||||
|
<Banner views={views} url={url} title={title}/>
|
||||||
|
<div class='icon'>
|
||||||
|
<div class='icon-r'></div>
|
||||||
|
<div class='icon-r mg-l-3'></div>
|
||||||
|
<div class='icon-r mg-l-3'></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
export default function Banner({ views, url }: { views: number }) {
|
import './style.css'
|
||||||
|
export default function Banner({ views, url ,title}: { views: number }) {
|
||||||
|
|
||||||
const copyToClipboard = (text) => {
|
const copyToClipboard = (text) => {
|
||||||
var tempInput = document.createElement("input");
|
var tempInput = document.createElement("input");
|
||||||
@@ -17,7 +18,7 @@ export default function Banner({ views, url }: { views: number }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className="z-10 fixed bottom-10 inset-x-0 mx-auto max-w-fit rounded-lg px-3 py-2 bg-white border border-gray-100 shadow-md flex justify-between space-x-2 items-center"
|
className="z-10 pos-a more-box mx-auto max-w-fit rounded-lg px-3 py-2 bg-white border border-gray-100 shadow-md flex justify-between space-x-2 items-center"
|
||||||
initial={{ opacity: 0, y: 100 }}
|
initial={{ opacity: 0, y: 100 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
exit={{ opacity: 0, y: 100 }}
|
exit={{ opacity: 0, y: 100 }}
|
||||||
@@ -43,7 +44,7 @@ export default function Banner({ views, url }: { views: number }) {
|
|||||||
|
|
||||||
<button
|
<button
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
copyToClipboard(url())
|
copyToClipboard(`${title()} ${url()}`)
|
||||||
}
|
}
|
||||||
className="p-2 flex flex-col space-y-1 items-center rounded-md w-12 hover:bg-gray-100 active:bg-gray-200 transition-all"
|
className="p-2 flex flex-col space-y-1 items-center rounded-md w-12 hover:bg-gray-100 active:bg-gray-200 transition-all"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -15,3 +15,61 @@
|
|||||||
.ansnidshare .ansnid_copy{
|
.ansnidshare .ansnid_copy{
|
||||||
/* margin: 0px !important;*/
|
/* margin: 0px !important;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.more-btn{
|
||||||
|
--un-shadow: var(--un-shadow-inset) 0 4px 6px -1px var(--un-shadow-color, rgba(0,0,0,0.1)),var(--un-shadow-inset) 0 2px 4px -2px var(--un-shadow-color, rgba(0,0,0,0.1));
|
||||||
|
box-shadow: var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);
|
||||||
|
width:2.5rem;
|
||||||
|
height:2.5rem;
|
||||||
|
border-radius:50%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background:#fff;
|
||||||
|
border:1px solid rgba(0,0,0,0.1);
|
||||||
|
margin-right:0.3125rem;
|
||||||
|
}
|
||||||
|
.more-btn .icon{
|
||||||
|
width:1.5rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.more-btn .icon .icon-r{
|
||||||
|
width:5px;
|
||||||
|
height:5px;
|
||||||
|
border-radius:50%;
|
||||||
|
background: rgba(0,0,0,0.5);
|
||||||
|
}
|
||||||
|
.mg-l-3{
|
||||||
|
margin-left:3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pos-a{
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.more-box{
|
||||||
|
right:3.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.more-hid-box{
|
||||||
|
position: fixed;
|
||||||
|
bottom:2rem;
|
||||||
|
right:0.05rem;
|
||||||
|
z-index:66;
|
||||||
|
overflow: hidden;
|
||||||
|
width:3.1rem;
|
||||||
|
height:5.1rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
transition: width linear 0.2s;
|
||||||
|
}
|
||||||
|
.more-show-box{
|
||||||
|
width:24.1rem;
|
||||||
|
}
|
||||||
|
.flex-end{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-direction:row-reverse;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import type { JSXElement } from 'solid-js'
|
import type { JSXElement } from 'solid-js'
|
||||||
|
import '../../pages/chat/css/list.css'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
direction: 'left' | 'right'
|
direction: 'left' | 'right' | 'none'
|
||||||
class?: string
|
class?: string
|
||||||
children: JSXElement
|
children: JSXElement
|
||||||
}
|
}
|
||||||
@@ -10,6 +11,7 @@ export default (props: Props) => {
|
|||||||
const containerBaseClass = {
|
const containerBaseClass = {
|
||||||
left: 'w-[260px] h-100dvh border-r',
|
left: 'w-[260px] h-100dvh border-r',
|
||||||
right: 'w-[300px] h-100dvh border-l',
|
right: 'w-[300px] h-100dvh border-l',
|
||||||
|
none:'w-100'
|
||||||
}[props.direction]
|
}[props.direction]
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ export function generateSessionId() {
|
|||||||
|
|
||||||
|
|
||||||
export function baseUrl(){
|
export function baseUrl(){
|
||||||
return 'https://ansnid.com';
|
// return 'https://ansnid.com';
|
||||||
// return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getToken(){
|
export function getToken(){
|
||||||
|
|||||||
@@ -3,12 +3,17 @@ import ConversationSidebarItem from './listItem'
|
|||||||
import { createStore } from "solid-js/store";
|
import { createStore } from "solid-js/store";
|
||||||
import '../css/list.css'
|
import '../css/list.css'
|
||||||
import { fetchData } from '../../../http/api'
|
import { fetchData } from '../../../http/api'
|
||||||
|
import { addConversation } from '@/stores/conversation'
|
||||||
|
import { showConversationEditModal } from '@/stores/ui'
|
||||||
|
import { conversationMapSortList } from '@/stores/conversation'
|
||||||
|
import { chatShow, uniqid } from '../ts/store';
|
||||||
|
import { showConversationSidebar } from '@/stores/ui'
|
||||||
|
import { useStore } from '@nanostores/solid'
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
// dataItemLists.set([{id:'1'},{id:'2'},{id:'3'},{id:'4'},{id:'5'},{id:'6'}])
|
// dataItemLists.set([{id:'1'},{id:'2'},{id:'3'},{id:'4'},{id:'5'},{id:'6'}])
|
||||||
const [list, setList] = createStore({
|
const [list, setList] = createStore({
|
||||||
data: [{title:''}]
|
data: [{ title: '' }]
|
||||||
})
|
})
|
||||||
|
|
||||||
type errorObj = {
|
type errorObj = {
|
||||||
@@ -26,21 +31,21 @@ export default () => {
|
|||||||
if (data.code === 200) {
|
if (data.code === 200) {
|
||||||
setList('data', () => [...data.data])
|
setList('data', () => [...data.data])
|
||||||
} else {
|
} else {
|
||||||
setErrorFun(data.message)
|
// setErrorFun(data.message)
|
||||||
}
|
}
|
||||||
}, '/chat/api', 'GET');
|
}, '/chat/api', 'GET');
|
||||||
}
|
}
|
||||||
|
|
||||||
//标题
|
//标题
|
||||||
let dialogue = {
|
let dialogue = {
|
||||||
systemmessage:'',
|
systemmessage: '',
|
||||||
title:''
|
title: ''
|
||||||
}
|
}
|
||||||
|
|
||||||
//新建对话框
|
// //新建对话框
|
||||||
const newlyAdded = () => {
|
// const newlyAdded = () => {
|
||||||
window.open(`${location.protocol}//${location.host}`)
|
// window.open(`${location.protocol}//${location.host}`)
|
||||||
}
|
// }
|
||||||
|
|
||||||
//删除记录
|
//删除记录
|
||||||
let deleteItem = { key: null, e: null }
|
let deleteItem = { key: null, e: null }
|
||||||
@@ -79,16 +84,55 @@ export default () => {
|
|||||||
setPop(!pop())
|
setPop(!pop())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//设置副标题数字
|
||||||
|
const setNameNum = (setName: string, numList: any) => {
|
||||||
|
let list = conversationMapSortList.get()
|
||||||
|
let title = ''
|
||||||
|
let count = 0
|
||||||
|
numList.map((res: number) => {
|
||||||
|
let regex1 = new RegExp("" + setName + '\\(\\d+\\)', 'g')
|
||||||
|
let seachText = list[res].name.match(regex1) || 'null'
|
||||||
|
let num = seachText[0].match(/\(\d+\)/g) || 'null'
|
||||||
|
if (num !== 'null') {
|
||||||
|
count = Math.max(count, Number(num[0].replace('(', '').replace(')', '')))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
title = count ? `${setName}(${count + 1})` : `${setName}${numList.length > 0 ? '(1)' : ''}`
|
||||||
|
return title
|
||||||
|
}
|
||||||
|
|
||||||
|
//查重
|
||||||
|
const checkName = (name: string, setName: string) => {
|
||||||
|
let setNameReg = new RegExp(setName, 'g')
|
||||||
|
if (setNameReg.test(name) && name.replace(/\(\d+\)/g, '') === setName) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//确认按钮
|
//确认按钮
|
||||||
const determineBtn = () => {
|
const determineBtn = () => {
|
||||||
if (popType() === 'open') {
|
if (popType() === 'open') {
|
||||||
console.log(dialogue)
|
sessionStorage.setItem('dialogueName', JSON.stringify({ name: dialogue.title, switch: true, systemInfo: dialogue.systemmessage }))
|
||||||
sessionStorage.setItem('dialogueName', JSON.stringify({ name: dialogue.title, switch: true,systemInfo:dialogue.systemmessage }))
|
// if (isMobile()) {
|
||||||
if (isMobile()) {
|
// location.pathname = '/'
|
||||||
location.pathname = '/'
|
// } else {
|
||||||
} else {
|
// newlyAdded()
|
||||||
newlyAdded()
|
let itemList = conversationMapSortList.get()
|
||||||
|
let setName = JSON.parse(sessionStorage.getItem('dialogueName') as any) || '未命名对话'
|
||||||
|
let numList: number[] = []
|
||||||
|
itemList.map((res, i) => {
|
||||||
|
if (checkName(res.name, setName.name)) numList.push(i)
|
||||||
|
})
|
||||||
|
|
||||||
|
if (setName.switch) {
|
||||||
|
addConversation({ name: setNameNum(setName.name, numList), systemInfo: setName.systemInfo })
|
||||||
|
showConversationEditModal.set(true)
|
||||||
|
setName.switch = false
|
||||||
|
sessionStorage.setItem('dialogueName', JSON.stringify({ name: setName.name, switch: false }))
|
||||||
}
|
}
|
||||||
|
chatShow.set(false)
|
||||||
|
setDataInfo()
|
||||||
|
// }
|
||||||
} else if (popType() === 'delete') {
|
} else if (popType() === 'delete') {
|
||||||
handleDelete(deleteItem['e'] as any, deleteItem['key'] as any)
|
handleDelete(deleteItem['e'] as any, deleteItem['key'] as any)
|
||||||
}
|
}
|
||||||
@@ -96,37 +140,66 @@ export default () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//显示错误提示
|
//显示错误提示
|
||||||
const setErrorFun = (message: string) => {
|
// const setErrorFun = (message: string) => {
|
||||||
// console.log(message)
|
// // console.log(message)
|
||||||
setErrorShow({
|
// setErrorShow({
|
||||||
message,
|
// message,
|
||||||
show: true
|
// show: true
|
||||||
})
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
//查看记录内容
|
||||||
|
const chatWatch = (id: string = '') => {
|
||||||
|
chatShow.set(true)
|
||||||
|
showConversationSidebar.set(false)
|
||||||
|
uniqid.set(id)
|
||||||
|
setDataInfo()
|
||||||
|
}
|
||||||
|
const unId = useStore(uniqid)
|
||||||
|
|
||||||
|
//设置切换显示内容
|
||||||
|
const setDataInfo = () => {
|
||||||
|
let infoSend = document.getElementById("infoSend");
|
||||||
|
let infoHeader = document.getElementById("infoHeader");
|
||||||
|
let mtBox = document.getElementsByClassName('flex-1 mt-14 flex flex-col overflow-hidden')[0]
|
||||||
|
if (chatShow.get()) {
|
||||||
|
infoSend.style.display = "none";
|
||||||
|
if (!isMobile()) {
|
||||||
|
infoHeader.style.display = "none";
|
||||||
|
mtBox.style.marginTop = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
infoSend.style.display = "flex";
|
||||||
|
if (!isMobile()) {
|
||||||
|
infoHeader.style.display = "flex";
|
||||||
|
mtBox.style.marginTop = '3.5rem';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//提示弹窗
|
//提示弹窗
|
||||||
const ErrorState = () => (
|
// const ErrorState = () => (
|
||||||
<div class='tps-error-box'>
|
// <div class='tps-error-box'>
|
||||||
<div class="max-w-base h-full flex items-end flex-col justify-between gap-8 sm:(flex-row items-center) py-4 text-error text-sm" style="padding: 1rem;">
|
// <div class="max-w-base h-full flex items-end flex-col justify-between gap-8 sm:(flex-row items-center) py-4 text-error text-sm" style="padding: 1rem;">
|
||||||
<div class="flex-1 w-full">
|
// <div class="flex-1 w-full">
|
||||||
<div class="fi gap-0.5 mb-1">
|
// <div class="fi gap-0.5 mb-1">
|
||||||
<span i-carbon-warning />
|
// <span i-carbon-warning />
|
||||||
<span class="font-semibold">{errorShow().message}</span>
|
// <span class="font-semibold">{errorShow().message}</span>
|
||||||
</div>
|
// </div>
|
||||||
</div>
|
// </div>
|
||||||
<div class="border border-error px-2 py-1 rounded-md hv-base hover:bg-white" onClick={() => { setErrorShow({ show: false, message: errorShow().message }) }} >
|
// <div class="border border-error px-2 py-1 rounded-md hv-base hover:bg-white" onClick={() => { setErrorShow({ show: false, message: errorShow().message }) }} >
|
||||||
Dismiss
|
// Dismiss
|
||||||
</div>
|
// </div>
|
||||||
</div>
|
// </div>
|
||||||
</div>
|
// </div>
|
||||||
)
|
// )
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
getList()
|
getList()
|
||||||
})
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="h-full flex flex-col bg-sidebar max-w-350 min-w-260">
|
<div class="h-full flex flex-col bg-sidebar">
|
||||||
<Show when={pop()}>
|
<Show when={pop()}>
|
||||||
<div class='pop center-f'>
|
<div class='pop center-f'>
|
||||||
<div class='center-f text-box'>
|
<div class='center-f text-box'>
|
||||||
@@ -147,15 +220,19 @@ export default () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Show>
|
</Show>
|
||||||
<Show when={errorShow().show}>
|
{/* <Show when={errorShow().show}>
|
||||||
<ErrorState />
|
<ErrorState />
|
||||||
</Show>
|
</Show> */}
|
||||||
<div class="flex-1 overflow-auto">
|
<div class="overflow-auto px-2">
|
||||||
<div class="px-2">
|
<div style={{ width: '100%' }}>
|
||||||
<For each={list.data}>
|
<For each={list.data}>
|
||||||
{(instance, i) => (
|
{(instance, i) => (
|
||||||
<Show when={instance.title}>
|
<Show when={instance.title}>
|
||||||
<ConversationSidebarItem popShow={popShow} setErrorFun={setErrorFun} instanceData={{ ...instance }} infoList={list.data} key={i as any} setList={setList} />
|
<div class={[instance.uniqid == unId()?'click-bg':''].join()}>
|
||||||
|
<ConversationSidebarItem
|
||||||
|
clickInfo={instance.uniqid == unId()}
|
||||||
|
chatWatch={chatWatch} popShow={popShow} instanceData={{ ...instance }} infoList={list.data} key={i as any} setList={setList} />
|
||||||
|
</div>
|
||||||
</Show>
|
</Show>
|
||||||
)}
|
)}
|
||||||
</For>
|
</For>
|
||||||
|
|||||||
26
src/pages/chat/components/iframe.tsx
Normal file
26
src/pages/chat/components/iframe.tsx
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { keys } from 'idb-keyval'
|
||||||
|
import '../css/list.css'
|
||||||
|
import { createSignal, Switch, Match } from 'solid-js'
|
||||||
|
import { uniqid } from '@/pages/chat/ts/store'
|
||||||
|
import { useStore } from '@nanostores/solid'
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
let id: any = ''
|
||||||
|
id = useStore(uniqid) as any
|
||||||
|
return (
|
||||||
|
<Switch>
|
||||||
|
<Match when={id()}>
|
||||||
|
<div style={{ width: '100%', height: '100%' }} id='iframe'>
|
||||||
|
<iframe src={`/share/?id=${id()}`} style={{ width: '100%', height: '100%' }}></iframe>
|
||||||
|
</div>
|
||||||
|
</Match>
|
||||||
|
<Match when={!id()}>
|
||||||
|
<div></div>
|
||||||
|
</Match>
|
||||||
|
</Switch>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { keys } from 'idb-keyval'
|
import { keys } from 'idb-keyval'
|
||||||
import '../css/list.css'
|
import '../css/list.css'
|
||||||
import { createSignal } from 'solid-js'
|
import { createSignal,splitProps } from 'solid-js'
|
||||||
import { fetchData } from '../../../http/api'
|
import { fetchData } from '../../../http/api'
|
||||||
|
|
||||||
type dataList = {
|
type dataList = {
|
||||||
@@ -17,17 +17,18 @@ interface Props {
|
|||||||
setList: Function,
|
setList: Function,
|
||||||
infoList: any,
|
infoList: any,
|
||||||
popShow: Function,
|
popShow: Function,
|
||||||
setErrorFun:Function
|
chatWatch:Function,
|
||||||
|
clickInfo:any
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ({ instanceData, key, setList, infoList, popShow,setErrorFun }: Props) => {
|
export default ({ instanceData, key, setList, infoList, popShow,chatWatch,clickInfo }: Props,props:any) => {
|
||||||
|
|
||||||
//设置数据
|
//设置数据
|
||||||
const instanceItem = instanceData
|
const instanceItem = instanceData
|
||||||
let instance = instanceItem || { id: '', name: '',uniqid:'' }
|
let instance = instanceItem || { id: '', name: '',uniqid:'' }
|
||||||
const isTouchDevice = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
|
const isTouchDevice = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
|
||||||
|
|
||||||
//置顶数据排序
|
//置顶数据排序
|
||||||
const getToppingItem = (arr: any) => {
|
const getToppingItem = (arr: any) => {
|
||||||
let toppingArr: { id: string, istop: boolean }[] = []
|
let toppingArr: { id: string, istop: boolean }[] = []
|
||||||
let copyArr: any[]=[]
|
let copyArr: any[]=[]
|
||||||
@@ -49,7 +50,7 @@ export default ({ instanceData, key, setList, infoList, popShow,setErrorFun }: P
|
|||||||
if (data.code === 200) {
|
if (data.code === 200) {
|
||||||
item.istop = item.istop ? 0 : 1
|
item.istop = item.istop ? 0 : 1
|
||||||
} else {
|
} else {
|
||||||
setErrorFun(data.message)
|
// setErrorFun(data.message)
|
||||||
}
|
}
|
||||||
res(null)
|
res(null)
|
||||||
}, !item.istop?'/chat/top':'/chat/cancelTop', 'POST');
|
}, !item.istop?'/chat/top':'/chat/cancelTop', 'POST');
|
||||||
@@ -70,9 +71,11 @@ export default ({ instanceData, key, setList, infoList, popShow,setErrorFun }: P
|
|||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
class={[
|
class={[
|
||||||
|
clickInfo?
|
||||||
|
'group fi h-10 my-0.5 px-2 gap-2 hv-base rounded-md click-bg' :
|
||||||
'group fi h-10 my-0.5 px-2 gap-2 hv-base rounded-md'
|
'group fi h-10 my-0.5 px-2 gap-2 hv-base rounded-md'
|
||||||
].join(' ')}
|
].join(' ')}
|
||||||
onClick={()=>window.open(`${location.protocol}//${window.location.host}/share/?id=${ instance.uniqid }`)}
|
onClick={()=>chatWatch(instance.uniqid)}
|
||||||
>
|
>
|
||||||
<div class="fcc w-8 h-8 rounded-full text-xl shrink-0">
|
<div class="fcc w-8 h-8 rounded-full text-xl shrink-0">
|
||||||
<div class="text-base i-carbon-chat" />
|
<div class="text-base i-carbon-chat" />
|
||||||
|
|||||||
@@ -97,4 +97,22 @@
|
|||||||
height:10rem;
|
height:10rem;
|
||||||
background:rgba(246, 246, 246, 1);
|
background:rgba(246, 246, 246, 1);
|
||||||
width:100%;
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chat-list-title{
|
||||||
|
font-size:0.75rem;
|
||||||
|
line-height:1rem;
|
||||||
|
height:3.5rem;
|
||||||
|
text-transform:uppercase;
|
||||||
|
padding:0 1rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.top-bor{
|
||||||
|
border-top:1px solid #e9ecef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.click-bg{
|
||||||
|
background: rgba(243, 243, 243, 1) !important;
|
||||||
|
border-radius: 0.375rem;
|
||||||
}
|
}
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
---
|
|
||||||
import Layout from '@/layouts/Layout.astro'
|
|
||||||
import Main from '@/components/Main.astro'
|
|
||||||
import ConversationSidebar from './components/dataList'
|
|
||||||
import ModalsLayer from '@/components/ModalsLayer'
|
|
||||||
import Sidebar from '@/components/ui/Sidebar'
|
|
||||||
import BuildStores from '@/components/client-only/BuildStores'
|
|
||||||
import './css/list.css'
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<Layout title="Ansnid">
|
|
||||||
<div class="h-100vh w-screen flex">
|
|
||||||
<Sidebar direction="left" class='w-100'>
|
|
||||||
<ConversationSidebar client:only="solid-js" />
|
|
||||||
</Sidebar>
|
|
||||||
<!-- <Main /> -->
|
|
||||||
</div>
|
|
||||||
<!-- <ModalsLayer client:only />
|
|
||||||
<BuildStores client:only /> -->
|
|
||||||
</Layout>
|
|
||||||
23
src/pages/chat/datalist.tsx
Normal file
23
src/pages/chat/datalist.tsx
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import ConversationSidebar from './components/dataList'
|
||||||
|
import Sidebar from '@/components/ui/Sidebar'
|
||||||
|
import './css/list.css'
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div class='top-bor' style={{height:'50%',overflow:'auto'}}>
|
||||||
|
<div class='chat-list-title'>
|
||||||
|
分享历史记录
|
||||||
|
</div>
|
||||||
|
<div class="flex">
|
||||||
|
<Sidebar direction="none" class=''>
|
||||||
|
<ConversationSidebar />
|
||||||
|
</Sidebar>
|
||||||
|
</div>
|
||||||
|
{/* <ModalsLayer />
|
||||||
|
<BuildStores/> */}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
1
src/pages/chat/img/moreIcon.svg
Normal file
1
src/pages/chat/img/moreIcon.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1692866656055" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3806" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M221 592c-44.183 0-80-35.817-80-80s35.817-80 80-80 80 35.817 80 80-35.817 80-80 80z m291 0c-44.183 0-80-35.817-80-80s35.817-80 80-80 80 35.817 80 80-35.817 80-80 80z m291 0c-44.183 0-80-35.817-80-80s35.817-80 80-80 80 35.817 80 80-35.817 80-80 80z" fill="#000000" p-id="3807"></path></svg>
|
||||||
|
After Width: | Height: | Size: 622 B |
3
src/pages/chat/ts/store.ts
Normal file
3
src/pages/chat/ts/store.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { atom } from 'nanostores';
|
||||||
|
export const chatShow=atom(false)
|
||||||
|
export const uniqid=atom('')
|
||||||
@@ -6,6 +6,7 @@ import Settings from '@/components/settings/SettingsSidebar'
|
|||||||
import ModalsLayer from '@/components/ModalsLayer'
|
import ModalsLayer from '@/components/ModalsLayer'
|
||||||
import Sidebar from '@/components/ui/Sidebar'
|
import Sidebar from '@/components/ui/Sidebar'
|
||||||
import BuildStores from '@/components/client-only/BuildStores'
|
import BuildStores from '@/components/client-only/BuildStores'
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Ansnid">
|
<Layout title="Ansnid">
|
||||||
|
|||||||
@@ -42,12 +42,18 @@ const providerOpenAI = () => {
|
|||||||
type: 'select',
|
type: 'select',
|
||||||
options: [
|
options: [
|
||||||
{ value: 'gpt-3.5-turbo', label: 'gpt-3.5-turbo' },
|
{ value: 'gpt-3.5-turbo', label: 'gpt-3.5-turbo' },
|
||||||
{ value: 'gpt-3.5-turbo-16k', label: 'gpt-3.5-turbo-16k' },
|
|
||||||
{ value: 'gpt-4', label: 'gpt-4' },
|
{ value: 'gpt-4', label: 'gpt-4' },
|
||||||
{ value: 'gpt-4-0314', label: 'gpt-4-0314' },
|
{ value: 'gpt-4-0314', label: 'gpt-4-0314' },
|
||||||
|
{ value: 'gpt-4-0613', label: 'gpt-4-0613' },
|
||||||
|
{ value: 'gpt-4-1106-preview', label: 'gpt-4-1106-preview' },
|
||||||
{ value: 'gpt-4-32k', label: 'gpt-4-32k' },
|
{ value: 'gpt-4-32k', label: 'gpt-4-32k' },
|
||||||
{ value: 'gpt-4-32k-0314', label: 'gpt-4-32k-0314' },
|
{ value: 'gpt-4-32k-0314', label: 'gpt-4-32k-0314' },
|
||||||
|
{ value: 'gpt-4-32k-0613', label: 'gpt-4-32k-0613' },
|
||||||
{ value: 'gpt-3.5-turbo-0301', label: 'gpt-3.5-turbo-0301' },
|
{ value: 'gpt-3.5-turbo-0301', label: 'gpt-3.5-turbo-0301' },
|
||||||
|
{ value: 'gpt-3.5-turbo-0613', label: 'gpt-3.5-turbo-0613' },
|
||||||
|
{ value: 'gpt-3.5-turbo-1106', label: 'gpt-3.5-turbo-1106' },
|
||||||
|
{ value: 'gpt-3.5-turbo-16k', label: 'gpt-3.5-turbo-16k' },
|
||||||
|
{ value: 'gpt-3.5-turbo-16k-0613', label: 'gpt-3.5-turbo-16k-0613' },
|
||||||
],
|
],
|
||||||
default: 'gpt-3.5-turbo',
|
default: 'gpt-3.5-turbo',
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user