diff --git a/src/assets/styles/common.less b/src/assets/styles/common.less index 5076c00c..fac3c66d 100644 --- a/src/assets/styles/common.less +++ b/src/assets/styles/common.less @@ -132,6 +132,10 @@ gap: 8px; } +.gap-20 { + gap: 20px; +} + .line-24 { line-height: 24px; } @@ -160,6 +164,10 @@ font-size: 20px; } +.m-b-0 { + margin-bottom: 0; +} + .font-400 { font-weight: var(--font-weight-normal); } diff --git a/src/components/seal-form/styles/row-textarea.less b/src/components/seal-form/styles/row-textarea.less index 77c70e32..bc080cf0 100644 --- a/src/components/seal-form/styles/row-textarea.less +++ b/src/components/seal-form/styles/row-textarea.less @@ -34,8 +34,7 @@ .textarea-label { position: relative; - top: 1px; - font-weight: var(--font-weight-bold); + top: 4px; padding-left: 14px; } diff --git a/src/layouts/index.tsx b/src/layouts/index.tsx index 674d9f31..889c8c04 100644 --- a/src/layouts/index.tsx +++ b/src/layouts/index.tsx @@ -294,7 +294,9 @@ export default (props: any) => { } }} formatMessage={formatMessage} - menu={{ locale: true }} + menu={{ + locale: true + }} logo={collapsed ? SLogoIcon : LogoIcon} menuItemRender={(menuItemProps, defaultDom) => { if (menuItemProps.isUrl || menuItemProps.children) { diff --git a/src/layouts/rightRender.tsx b/src/layouts/rightRender.tsx index 7f396cd9..8637f8f2 100644 --- a/src/layouts/rightRender.tsx +++ b/src/layouts/rightRender.tsx @@ -108,7 +108,10 @@ export const getRightRenderContent = (opts: { : 'user-menu-container', mode: 'vertical', expandIcon: false, +<<<<<<< HEAD // inlineCollapsed: collapsed, +======= +>>>>>>> 7174170 (refactor: playground rerank layout) triggerSubMenuAction: 'hover', items: [ { diff --git a/src/pages/playground/components/ground-reranker.tsx b/src/pages/playground/components/ground-reranker.tsx index 595a95b6..eebdb934 100644 --- a/src/pages/playground/components/ground-reranker.tsx +++ b/src/pages/playground/components/ground-reranker.tsx @@ -1,14 +1,10 @@ import useOverlayScroller from '@/hooks/use-overlay-scroller'; import useRequestToken from '@/hooks/use-request-token'; -import { - ClearOutlined, - PlusOutlined, - SearchOutlined, - UploadOutlined -} from '@ant-design/icons'; +import { ClearOutlined, PlusOutlined, SearchOutlined } from '@ant-design/icons'; import { useIntl, useSearchParams } from '@umijs/max'; -import { Button, Divider, Spin, Tooltip } from 'antd'; +import { Button, Spin } from 'antd'; import classNames from 'classnames'; +import _ from 'lodash'; import 'overlayscrollbars/overlayscrollbars.css'; import { forwardRef, @@ -23,13 +19,11 @@ import { MessageItem } from '../config/types'; import '../style/ground-left.less'; import '../style/rerank.less'; import '../style/system-message-wrap.less'; -import FileList from './file-list'; import InputList from './input-list'; import MessageInput from './message-input'; import ReferenceParams from './reference-params'; import RerankMessage from './rerank-message'; import RerankerParams from './reranker-params'; -import UploadFile from './upload-file'; import ViewRerankCode from './view-rerank-code'; interface MessageProps { @@ -68,7 +62,18 @@ const GroundReranker: React.FC = forwardRef((props, ref) => { const [textList, setTextList] = useState< { text: string; uid: number | string; name: string }[] - >([]); + >([ + { + text: '', + uid: -1, + name: '' + }, + { + text: '', + uid: -2, + name: '' + } + ]); const { initialize, updateScrollerPosition } = useOverlayScroller(); const { @@ -128,6 +133,11 @@ const GroundReranker: React.FC = forwardRef((props, ref) => { setMessageId(); setTokenResult(result.usage); + const maxItem = _.maxBy(result.results || [], (item: any) => + Math.abs(item.relevance_score) + ); + const maxValue = _.ceil(maxItem?.relevance_score, 2); + setMessageList([ { title: 'Results', @@ -135,10 +145,12 @@ const GroundReranker: React.FC = forwardRef((props, ref) => { content: result.results?.map((item: any) => { return { uid: item.index, - text: `${item.document?.text?.slice(0, 500) || ''}`, + text: `${item.document?.slice(0, 500) || ''}`, docIndex: item.index, title: documentList[item.index]?.name || '', - score: item.relevance_score + score: item.relevance_score, + normalizValue: + _.round(_.round(item.relevance_score, 2) / maxValue, 2) * 100 }; }), uid: messageId.current @@ -195,7 +207,18 @@ const GroundReranker: React.FC = forwardRef((props, ref) => { }; const handleClearDocuments = () => { - setTextList([]); + setTextList([ + { + text: '', + uid: -1, + name: '' + }, + { + text: '', + uid: -2, + name: '' + } + ]); setFileList([]); }; @@ -231,86 +254,6 @@ const GroundReranker: React.FC = forwardRef((props, ref) => { return (
-
-
-

- Documents -

-
-
- - Support: {acceptType}}> - - - - -
- -
-
- -
- -
-
-
- -
- <> -
- - Results - -
- } - /> - {loading && ( - -
-
- )} -
- -
-
-
= forwardRef((props, ref) => { placeholer={intl.formatMessage({ id: 'playground.input.keyword.holder' })} - tools={Query} + tools={Query} + style={{ + borderTop: 'none', + width: 'unset', + marginInline: 32, + marginTop: 16, + border: '1px solid var(--ant-color-border)', + borderRadius: 'var(--border-radius-base)', + paddingInline: 10 + }} />
+
+
+
+

+ Documents +

+
+ {/* + Support: {acceptType}}> + + + */} + + +
+
+
+ + {/*
+ +
*/} +
+
+
+ {messageList.length ? ( +
+

Results

+ +
+ ) : null} +
+
+ <> +
+ + {loading && ( + +
+
+ )} +
+ +
+
= forwardRef((props, ref) => { })} ref={paramsRef} > -
+
= forwardRef( return (
- {/* {textList.length === 0 && ( - - )} */} {textList.map((text, index) => { return (
@@ -92,18 +81,6 @@ const InputList: React.FC = forwardRef( onClick={() => handleDelete(text)} > - {/* {index === textList.length - 1 && ( - - - - )} */}
); diff --git a/src/pages/playground/components/message-input.tsx b/src/pages/playground/components/message-input.tsx index cf99ebaf..6426fea4 100644 --- a/src/pages/playground/components/message-input.tsx +++ b/src/pages/playground/components/message-input.tsx @@ -76,6 +76,7 @@ interface MessageInputProps { scope: string; placeholer?: string; shouldResetMessage?: boolean; + style?: React.CSSProperties; } const MessageInput: React.FC = ({ @@ -95,7 +96,7 @@ const MessageInput: React.FC = ({ submitIcon, placeholer, tools, - + style, shouldResetMessage = true }) => { const { TextArea } = Input; @@ -347,7 +348,7 @@ const MessageInput: React.FC = ({ ); return ( -
+
{tools} diff --git a/src/pages/playground/components/rerank-message.tsx b/src/pages/playground/components/rerank-message.tsx index 18422ed6..2035edf5 100644 --- a/src/pages/playground/components/rerank-message.tsx +++ b/src/pages/playground/components/rerank-message.tsx @@ -1,4 +1,4 @@ -import { Tooltip } from 'antd'; +import { Progress, Tooltip } from 'antd'; import _ from 'lodash'; import React from 'react'; import '../style/content-item.less'; @@ -18,9 +18,6 @@ const RerankMessage: React.FC = ({ header, dataList }) => { {dataList.map((item) => { return (
- {/*
- {item.title} -
*/}
{Array.isArray(item.content) ? (
@@ -37,6 +34,33 @@ const RerankMessage: React.FC = ({ header, dataList }) => { >
{sItem.text}
+ ( + + {_.round(sItem.score, 2)} + + )} + size={{ + height: 4 + }} + type="line" + status="normal" + percentPosition={{ align: 'end', type: 'outer' }} + strokeColor="rgb(22 119 255 / 27%)" + trailColor="transparent" + percent={sItem.normalizValue} + style={{ + position: 'absolute', + left: 0, + bottom: 0, + lineHeight: '12px' + }} + > ); })} diff --git a/src/pages/playground/components/view-rerank-code.tsx b/src/pages/playground/components/view-rerank-code.tsx index 3bd329b6..ce8eb37d 100644 --- a/src/pages/playground/components/view-rerank-code.tsx +++ b/src/pages/playground/components/view-rerank-code.tsx @@ -43,7 +43,7 @@ const ViewCodeModal: React.FC = (props) => { const generateCode = () => { if (lang === langMap.shell) { - const code = `curl ${window.location.origin}/v1-openai \\\n-H "Content-Type: application/json" \\\n-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\\n-d '${JSON.stringify( + const code = `curl ${window.location.origin}/v1/rerank \\\n-H "Content-Type: application/json" \\\n-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\\n-d '${JSON.stringify( { ...parameters, documents: documentList diff --git a/src/pages/playground/style/input-list.less b/src/pages/playground/style/input-list.less index 38f3c8e2..3f401265 100644 --- a/src/pages/playground/style/input-list.less +++ b/src/pages/playground/style/input-list.less @@ -1,7 +1,7 @@ .input-list { display: flex; flex-direction: column; - gap: 8px; + gap: 12px; .input-item { display: flex; @@ -11,7 +11,14 @@ padding-right: 6px; cursor: pointer; transition: background-color 0.3s ease; - border-bottom: 1px solid var(--ant-color-split); + border-radius: var(--border-radius-base); + border: 1px solid var(--ant-color-border); + // &:focus-within { + // border-color: var(--ant-input-active-border-color); + // box-shadow: var(--ant-input-active-shadow); + // outline: 0; + // background-color: var(--ant-input-active-bg); + // } .btn-group { display: none; diff --git a/src/pages/playground/style/rerank-message.less b/src/pages/playground/style/rerank-message.less index 2b106aa1..f779fe95 100644 --- a/src/pages/playground/style/rerank-message.less +++ b/src/pages/playground/style/rerank-message.less @@ -53,8 +53,11 @@ } .content-item-content { + position: relative; padding: 14px; + padding-left: 8px; border-radius: 0 0 var(--border-radius-base) var(--border-radius-base); + background-color: transparent; } .result-header { @@ -62,9 +65,14 @@ align-items: center; justify-content: space-between; border-radius: 4px 4px 0 0; - background: var(--ant-color-fill-tertiary); - padding: 0 14px; + min-height: 41px; + padding: 0 10px; border-bottom: 1px solid var(--ant-color-split); + padding-left: 10px; + position: sticky; + top: 0; + background: #fff; + z-index: 100; .title { font-weight: var(--font-weight-medium); diff --git a/src/pages/playground/style/rerank.less b/src/pages/playground/style/rerank.less index 7c5d2af9..af426f85 100644 --- a/src/pages/playground/style/rerank.less +++ b/src/pages/playground/style/rerank.less @@ -1,16 +1,44 @@ .ground-left-wrapper.rerank { .center { display: flex; + flex-direction: column; height: 100%; + padding-inline: 32px; + padding-bottom: 16px; .documents { - width: 390px; - padding: 16px; - padding-left: 32px; + width: 100%; + + .doc-header { + margin-bottom: 16px; + padding-top: 16px; + position: sticky; + top: 0; + background: var(--color-white-1); + z-index: 100; + } } .message-list-wrap { flex: 1; } + + .result-header { + display: flex; + align-items: center; + justify-content: space-between; + border-radius: 4px 4px 0 0; + min-height: 41px; + padding: 0 10px; + margin-top: 16px; + position: sticky; + top: 0; + background: var(--color-white-1); + z-index: 100; + + .title { + font-weight: var(--font-weight-medium); + } + } } }