import { setRouteCache } from '@/atoms/route-cache'; import AlertInfo from '@/components/alert-info'; import IconFont from '@/components/icon-font'; import routeCachekey from '@/config/route-cachekey'; import { VideoCameraOutlined } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Button, Spin, Tooltip } from 'antd'; import _ from 'lodash'; import 'overlayscrollbars/overlayscrollbars.css'; import React, { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react'; import { CREATE_VIDEO_API } from '../apis'; import MessageInput from '../components/message-input'; import RightContainer from '../components/right-container'; import ViewCommonCode from '../components/view-common-code'; import { videoPromptList } from '../config'; import { useInitVideoMeta } from '../hooks/use-init-video-meta'; import useTextVideo from '../hooks/use-text-video'; import '../style/ground-llm.less'; import '../style/system-message-wrap.less'; import { generateCode } from '../view-code/video'; import DataForm from './forms'; interface MessageProps { modelList: Global.BaseOption[]; loaded?: boolean; ref?: any; } const GroundVideo: React.FC = forwardRef((props, ref) => { const { modelList } = props; const intl = useIntl(); const [show, setShow] = useState(false); const [collapse, setCollapse] = useState(false); const scroller = useRef(null); const inputRef = useRef(null); const { handleOnValuesChange, handleToggleParamsStyle, setParams, form, paramsConfig, initialValues, parameters, isOpenaiCompatible } = useInitVideoMeta(props, { type: 'create' }); const { loading, tokenResult, videoList, currentPrompt, setCurrentPrompt, handleClear, handleStopConversation, submitMessage } = useTextVideo({ scroller, API: CREATE_VIDEO_API }); useImperativeHandle(ref, () => { return { viewCode() { setShow(true); }, setCollapse() { setCollapse(!collapse); }, collapse: collapse }; }); const generateNumber = (min: number, max: number) => { return Math.floor(Math.random() * (max - min + 1) + min); }; const handleRandomPrompt = useCallback(() => { const randomIndex = generateNumber(0, videoPromptList.length - 1); const randomPrompt = videoPromptList[randomIndex]; inputRef.current?.handleInputChange({ target: { value: randomPrompt } }); }, []); const finalParameters = useMemo(() => { if (parameters.size === 'custom') { return { ..._.omit(parameters, ['width', 'height']), size: parameters.width && parameters.height ? `${parameters.width}x${parameters.height}` : '' }; } return { ..._.omit(parameters, ['width', 'height']) }; }, [parameters]); const viewCodeContent = useMemo(() => { return generateCode({ api: CREATE_VIDEO_API, isFormdata: true, parameters: { ...finalParameters, prompt: currentPrompt } }); }, [finalParameters, isOpenaiCompatible, currentPrompt]); const handleInputChange = (e: any) => { setCurrentPrompt(e.target.value); }; const generateParams = () => { const params = { ..._.omitBy(finalParameters, (value: string) => !value), prompt: currentPrompt }; return params; }; const handleSendMessage = async () => { try { await form.current?.form?.validateFields(); if (!parameters.model) return; const params = generateParams(); console.log('generateParams:', params); setParams({ ...parameters }); console.log('params:', params, parameters); setRouteCache(routeCachekey['/playground/video'], true); await submitMessage(params); } catch (error) { // console.log('error:', error); } finally { console.log('finally---------'); setRouteCache(routeCachekey['/playground/video'], false); } }; const handleCloseViewCode = useCallback(() => { setShow(false); }, []); return (
<>
{videoList.length > 0 && (
)} {!videoList.length && (
{intl.formatMessage({ id: 'playground.video.empty.tips' })}
)}
{tokenResult && (
)}
} />
); }); export default GroundVideo;