diff --git a/web/app/components/app/text-generate/item/index.tsx b/web/app/components/app/text-generate/item/index.tsx index db4329724a..700df81d23 100644 --- a/web/app/components/app/text-generate/item/index.tsx +++ b/web/app/components/app/text-generate/item/index.tsx @@ -24,6 +24,8 @@ export interface IGenerationItemProps { onFeedback?: (feedback: Feedbacktype) => void onSave?: (messageId: string) => void isMobile?: boolean + isInstalledApp: boolean, + installedAppId?: string, } export const SimpleBtn = ({ className, onClick, children }: { @@ -75,7 +77,9 @@ const GenerationItem: FC = ({ onFeedback, onSave, depth = 1, - isMobile + isMobile, + isInstalledApp, + installedAppId, }) => { const { t } = useTranslation() const isTop = depth === 1 @@ -88,7 +92,7 @@ const GenerationItem: FC = ({ }) const handleFeedback = async (childFeedback: Feedbacktype) => { - await updateFeedback({ url: `/messages/${childMessageId}/feedbacks`, body: { rating: childFeedback.rating } }) + await updateFeedback({ url: `/messages/${childMessageId}/feedbacks`, body: { rating: childFeedback.rating } }, isInstalledApp, installedAppId) setChildFeedback(childFeedback) } @@ -104,7 +108,9 @@ const GenerationItem: FC = ({ isLoading: isQuerying, feedback: childFeedback, onSave, - isMobile + isMobile, + isInstalledApp, + installedAppId, } const handleMoreLikeThis = async () => { @@ -113,7 +119,7 @@ const GenerationItem: FC = ({ return } startQuerying() - const res: any = await fetchMoreLikeThis(messageId as string) + const res: any = await fetchMoreLikeThis(messageId as string, isInstalledApp, installedAppId) setCompletionRes(res.answer) setChildMessageId(res.id) stopQuerying() diff --git a/web/app/components/explore/index.tsx b/web/app/components/explore/index.tsx index 5011d21dcd..54222293db 100644 --- a/web/app/components/explore/index.tsx +++ b/web/app/components/explore/index.tsx @@ -1,9 +1,10 @@ 'use client' -import React, { FC, useEffect } from 'react' +import React, { FC, useEffect, useState } from 'react' import ExploreContext from '@/context/explore-context' import Sidebar from '@/app/components/explore/sidebar' import { useAppContext } from '@/context/app-context' import { fetchMembers } from '@/service/common' +import { InstalledApp } from '@/models/explore' export interface IExploreProps { children: React.ReactNode @@ -12,9 +13,10 @@ export interface IExploreProps { const Explore: FC = ({ children }) => { - const [controlUpdateInstalledApps, setControlUpdateInstalledApps] = React.useState(0) + const [controlUpdateInstalledApps, setControlUpdateInstalledApps] = useState(0) const { userProfile } = useAppContext() - const [hasEditPermission, setHasEditPermission] = React.useState(false) + const [hasEditPermission, setHasEditPermission] = useState(false) + const [installedApps, setInstalledApps] = useState([]) useEffect(() => { (async () => { @@ -32,7 +34,9 @@ const Explore: FC = ({ { controlUpdateInstalledApps, setControlUpdateInstalledApps, - hasEditPermission + hasEditPermission, + installedApps, + setInstalledApps } } > diff --git a/web/app/components/explore/installed-app/index.tsx b/web/app/components/explore/installed-app/index.tsx index a945ceff89..9fbee85f23 100644 --- a/web/app/components/explore/installed-app/index.tsx +++ b/web/app/components/explore/installed-app/index.tsx @@ -1,9 +1,9 @@ 'use client' -import React, { FC, useEffect } from 'react' -import { App } from '@/types/app' +import React, { FC } from 'react' +import { useContext } from 'use-context-selector' +import ExploreContext from '@/context/explore-context' import ChatApp from '@/app/components/share/chat' import TextGenerationApp from '@/app/components/share/text-generation' -import { fetchAppDetail } from '@/service/explore' import Loading from '@/app/components/base/loading' export interface IInstalledAppProps { @@ -13,20 +13,15 @@ export interface IInstalledAppProps { const InstalledApp: FC = ({ id, }) => { - const [app, setApp] = React.useState(null) - const [isLoaded, setIsLoaded] = React.useState(false) - useEffect(() => { - if(id) { - setIsLoaded(false); - (async () => { - const appDetail = await fetchAppDetail(id) - setApp(appDetail) - setIsLoaded(true) - })() - } - }, [id]) + const { installedApps } = useContext(ExploreContext) + const installedApp = installedApps.find(item => item.id === id) + const app = installedApp ? { + id: installedApp.id, + name + } : null + - if(!isLoaded) { + if(!installedApp) { return (
@@ -36,12 +31,11 @@ const InstalledApp: FC = ({ return (
- {app?.mode === 'chat' ? ( - + {installedApp?.app.mode === 'chat' ? ( + ): ( - + )} -
) } diff --git a/web/app/components/explore/sidebar/index.tsx b/web/app/components/explore/sidebar/index.tsx index 546bdcd51c..ab04cb91a3 100644 --- a/web/app/components/explore/sidebar/index.tsx +++ b/web/app/components/explore/sidebar/index.tsx @@ -1,11 +1,12 @@ 'use client' import React, { FC, useEffect } from 'react' import { useTranslation } from 'react-i18next' +import { useContext } from 'use-context-selector' +import ExploreContext from '@/context/explore-context' import cn from 'classnames' import { useSelectedLayoutSegments } from 'next/navigation' import Link from 'next/link' import Item from './app-nav-item' -import { InstalledApp } from '@/models/explore' import { fetchInstalledAppList as doFetchInstalledAppList } from '@/service/explore' const SelectedDiscoveryIcon = () => ( @@ -21,15 +22,15 @@ const DiscoveryIcon = () => ( ) const SideBar: FC<{ - controlUpdateInstalledApps: number + controlUpdateInstalledApps: number, }> = ({ - controlUpdateInstalledApps + controlUpdateInstalledApps, }) => { const { t } = useTranslation() const segments = useSelectedLayoutSegments() const lastSegment = segments.slice(-1)[0] const isDiscoverySelected = lastSegment === 'apps' - const [installedApps, setInstalledApps] = React.useState([]) + const { installedApps, setInstalledApps } = useContext(ExploreContext) const fetchInstalledAppList = async () => { const {installed_apps} : any = await doFetchInstalledAppList() @@ -60,7 +61,7 @@ const SideBar: FC<{
{t('explore.sidebar.workspace')}
- {installedApps.map(({app : {id, name}}) => { + {installedApps.map(({id, app : { name }}) => { return ( ) diff --git a/web/app/components/share/chat/index.tsx b/web/app/components/share/chat/index.tsx index d8c92f4687..9e73003781 100644 --- a/web/app/components/share/chat/index.tsx +++ b/web/app/components/share/chat/index.tsx @@ -23,11 +23,11 @@ import { replaceStringWithValues } from '@/app/components/app/configuration/prom import AppUnavailable from '../../base/app-unavailable' import { userInputsFormToPromptVariables } from '@/utils/model-config' import { SuggestedQuestionsAfterAnswerConfig } from '@/models/debug' -import { App } from '@/types/app' +import { InstalledApp } from '@/models/explore' export type IMainProps = { isInstalledApp?: boolean, - installedAppInfo? : App + installedAppInfo? : InstalledApp } const Main: FC = ({ @@ -227,11 +227,10 @@ const Main: FC = ({ return Promise.all([isInstalledApp ? { app_id: installedAppInfo?.id, site: { - title: installedAppInfo?.name, + title: installedAppInfo?.app.name, prompt_public: false, copyright: '' }, - model_config: installedAppInfo?.app_model_config, plan: 'basic', }: fetchAppInfo(), fetchConversations(isInstalledApp, installedAppInfo?.id), fetchAppParams(isInstalledApp, installedAppInfo?.id)]) } @@ -242,12 +241,12 @@ const Main: FC = ({ (async () => { try { const [appData, conversationData, appParams]: any = await fetchInitData() - const { app_id: appId, site: siteInfo, model_config, plan }: any = appData + const { app_id: appId, site: siteInfo, plan }: any = appData setAppId(appId) setPlan(plan) const tempIsPublicVersion = siteInfo.prompt_public setIsPublicVersion(tempIsPublicVersion) - const prompt_template = tempIsPublicVersion ? model_config.pre_prompt : '' + const prompt_template = '' // handle current conversation id const { data: conversations } = conversationData as { data: ConversationItem[] } const _conversationId = getConversationIdFromStorage(appId) diff --git a/web/app/components/share/text-generation/index.tsx b/web/app/components/share/text-generation/index.tsx index 18942ee9e3..09f5d6f379 100644 --- a/web/app/components/share/text-generation/index.tsx +++ b/web/app/components/share/text-generation/index.tsx @@ -23,10 +23,11 @@ import { XMarkIcon } from '@heroicons/react/24/outline' import s from './style.module.css' import Button from '../../base/button' import { App } from '@/types/app' +import { InstalledApp } from '@/models/explore' export type IMainProps = { isInstalledApp?: boolean, - installedAppInfo? : App + installedAppInfo? : InstalledApp } const TextGeneration: FC = ({ @@ -167,11 +168,10 @@ const TextGeneration: FC = ({ return Promise.all([isInstalledApp ? { app_id: installedAppInfo?.id, site: { - title: installedAppInfo?.name, + title: installedAppInfo?.app.name, prompt_public: false, copyright: '' }, - model_config: installedAppInfo?.app_model_config, plan: 'basic', }: fetchAppInfo(), fetchAppParams(isInstalledApp, installedAppInfo?.id)]) } @@ -249,6 +249,8 @@ const TextGeneration: FC = ({ feedback={feedback} onSave={handleSaveMessage} isMobile={isMoble} + isInstalledApp={isInstalledApp} + installedAppId={installedAppInfo?.id} /> ) } diff --git a/web/context/explore-context.ts b/web/context/explore-context.ts index 2476903c79..211586d7ec 100644 --- a/web/context/explore-context.ts +++ b/web/context/explore-context.ts @@ -1,15 +1,20 @@ import { createContext } from 'use-context-selector' +import { InstalledApp } from '@/models/explore' type IExplore = { controlUpdateInstalledApps: number setControlUpdateInstalledApps: (controlUpdateInstalledApps: number) => void hasEditPermission: boolean + installedApps: InstalledApp[] + setInstalledApps: (installedApps: InstalledApp[]) => void } const ExploreContext = createContext({ controlUpdateInstalledApps: 0, setControlUpdateInstalledApps: () => { }, hasEditPermission: false, + installedApps: [], + setInstalledApps: () => { }, }) export default ExploreContext diff --git a/web/service/share.ts b/web/service/share.ts index adb23caeb5..1e3cbb5b4f 100644 --- a/web/service/share.ts +++ b/web/service/share.ts @@ -31,7 +31,7 @@ export const sendChatMessage = async (body: Record, { onData, onCom ...body, response_mode: 'streaming', }, - }, { onData, onCompleted, isPublicAPI: true, onError, getAbortController }) + }, { onData, onCompleted, isPublicAPI: !isInstalledApp, onError, getAbortController }) } export const sendCompletionMessage = async (body: Record, { onData, onCompleted, onError }: { @@ -44,7 +44,7 @@ export const sendCompletionMessage = async (body: Record, { onData, ...body, response_mode: 'streaming', }, - }, { onData, onCompleted, isPublicAPI: true, onError }) + }, { onData, onCompleted, isPublicAPI: !isInstalledApp, onError }) } export const fetchAppInfo = async () => {