feat: playground embedding

main
jialin 1 year ago
parent 01214077d3
commit 16e2ac5b6c

2
.gitignore vendored

@ -12,4 +12,4 @@
/.mfsu
.swc
.DS_Store
.idea
.idea

@ -25,6 +25,14 @@ export default [
icon: 'Comment',
component: './playground/index'
},
{
name: 'embedding',
title: 'embedding',
path: '/playground/embedding',
key: 'embedding',
icon: 'Comment',
component: './playground/embedding'
},
{
name: 'rerank',
title: 'Rerank',

@ -56,6 +56,7 @@
"react-dom": "^18.2.0",
"react-hotkeys-hook": "^4.5.0",
"simplebar-react": "^3.2.6",
"umap-js": "^1.4.0",
"umi-presets-pro": "^2.0.3",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
},

@ -131,6 +131,9 @@ dependencies:
simplebar-react:
specifier: ^3.2.6
version: 3.2.6(react@18.2.0)
umap-js:
specifier: ^1.4.0
version: 1.4.0
umi-presets-pro:
specifier: ^2.0.3
version: 2.0.3(@babel/core@7.25.7)(@types/react-dom@18.3.0)(@types/react@18.3.1)(antd@5.20.6)(dva@2.5.0-beta.2)(rc-field-form@2.4.0)(react-dom@18.2.0)(react@18.2.0)(umi@4.3.24)
@ -11614,6 +11617,14 @@ packages:
is-decimal: 1.0.4
dev: false
/is-any-array@0.1.1:
resolution: {integrity: sha512-qTiELO+kpTKqPgxPYbshMERlzaFu29JDnpB8s3bjg+JkxBpw29/qqSaOdKv2pCdaG92rLGeG/zG2GauX58hfoA==, tarball: https://registry.npmjs.org/is-any-array/-/is-any-array-0.1.1.tgz}
dev: false
/is-any-array@2.0.1:
resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==, tarball: https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz}
dev: false
/is-arguments@1.1.1:
resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, tarball: https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz}
engines: {node: '>= 0.4'}
@ -12922,6 +12933,40 @@ packages:
dev: false
optional: true
/ml-array-max@1.2.4:
resolution: {integrity: sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==, tarball: https://registry.npmjs.org/ml-array-max/-/ml-array-max-1.2.4.tgz}
dependencies:
is-any-array: 2.0.1
dev: false
/ml-array-min@1.2.3:
resolution: {integrity: sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==, tarball: https://registry.npmjs.org/ml-array-min/-/ml-array-min-1.2.3.tgz}
dependencies:
is-any-array: 2.0.1
dev: false
/ml-array-rescale@1.3.7:
resolution: {integrity: sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==, tarball: https://registry.npmjs.org/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz}
dependencies:
is-any-array: 2.0.1
ml-array-max: 1.2.4
ml-array-min: 1.2.3
dev: false
/ml-levenberg-marquardt@2.1.1:
resolution: {integrity: sha512-2+HwUqew4qFFFYujYlQtmFUrxCB4iJAPqnUYro3P831wj70eJZcANwcRaIMGUVaH9NDKzfYuA4N5u67KExmaRA==, tarball: https://registry.npmjs.org/ml-levenberg-marquardt/-/ml-levenberg-marquardt-2.1.1.tgz}
dependencies:
is-any-array: 0.1.1
ml-matrix: 6.12.0
dev: false
/ml-matrix@6.12.0:
resolution: {integrity: sha512-AGfR+pWaC0GmzjUnB6BfwhndPEUGz0i7QUYdqNuw1zhTov/vSRJ9pP2hs6BoGpaSbtXgrKjZz2zjD1M0xuur6A==, tarball: https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.12.0.tgz}
dependencies:
is-any-array: 2.0.1
ml-array-rescale: 1.3.7
dev: false
/mock.js@0.2.0:
resolution: {integrity: sha512-DKI8Rh/h7Mma+fg+6aD0uUvwn0QXAjKG6q3s+lTaCboCQ/kvQMBN9IXRBzgEaz4aPiYoRnKU9jVsfZp0mHpWrQ==, tarball: https://registry.npmjs.org/mock.js/-/mock.js-0.2.0.tgz}
dev: false
@ -18350,6 +18395,12 @@ packages:
resolution: {integrity: sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==, tarball: https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz}
dev: false
/umap-js@1.4.0:
resolution: {integrity: sha512-xxpviF9wUO6Nxrx+C58SoDgea+h2PnVaRPKDelWv0HotmY6BeWeh0kAPJoumfqUkzUvowGsYfMbnsWI0b9do+A==, tarball: https://registry.npmjs.org/umap-js/-/umap-js-1.4.0.tgz}
dependencies:
ml-levenberg-marquardt: 2.1.1
dev: false
/umi-presets-pro@2.0.3(@babel/core@7.25.7)(@types/react-dom@18.3.0)(@types/react@18.3.1)(antd@5.20.6)(dva@2.5.0-beta.2)(rc-field-form@2.4.0)(react-dom@18.2.0)(react@18.2.0)(umi@4.3.24):
resolution: {integrity: sha512-sHKynw/fi7UeUftzTRPRsrV5GHV4BWvWYhyvwkg8s+shmt0ROPW/52y4gxBziEvetxl8yWMKUCWk50OUDOcrww==, tarball: https://registry.npmjs.org/umi-presets-pro/-/umi-presets-pro-2.0.3.tgz}
dependencies:

@ -77,6 +77,7 @@
.flex {
display: flex;
}
// space-between
.flex-between {
display: flex;
@ -87,6 +88,7 @@
display: flex;
justify-content: center;
}
// align-items: center
.flex-center {
display: flex;
@ -168,6 +170,10 @@
margin-bottom: 0;
}
.m-b-16 {
margin-bottom: 16px;
}
.font-400 {
font-weight: var(--font-weight-normal);
}

@ -10,7 +10,7 @@ import {
} from '@/components/echarts/config';
import EmptyData from '@/components/empty-data';
import _ from 'lodash';
import { memo } from 'react';
import { memo, useMemo } from 'react';
import { ChartProps } from './types';
const BarChart: React.FC<ChartProps> = (props) => {
@ -24,10 +24,6 @@ const BarChart: React.FC<ChartProps> = (props) => {
title
} = props;
if (!seriesData.length) {
return <EmptyData height={height} title={title}></EmptyData>;
}
const options = {
title: {
text: ''
@ -55,7 +51,7 @@ const BarChart: React.FC<ChartProps> = (props) => {
series: []
};
const setDataOptions = () => {
const dataOptions = useMemo((): any => {
const data = _.map(seriesData, (item: any) => {
return {
...item,
@ -82,16 +78,20 @@ const BarChart: React.FC<ChartProps> = (props) => {
},
series: data
};
};
const dataOptions: any = setDataOptions();
}, [seriesData, xAxisData, title]);
return (
<Chart
height={height}
options={dataOptions}
width={width || '100%'}
></Chart>
<>
{!seriesData.length ? (
<EmptyData height={height} title={title}></EmptyData>
) : (
<Chart
height={height}
options={dataOptions}
width={width || '100%'}
></Chart>
)}
</>
);
};

@ -1,17 +1,30 @@
import { throttle } from 'lodash';
import { useCallback, useEffect, useRef } from 'react';
import {
forwardRef,
useCallback,
useEffect,
useImperativeHandle,
useRef
} from 'react';
import echarts, { ECOption } from '.';
const Chart: React.FC<{
options: ECOption;
height: number | string;
width: number | string;
}> = ({ options, width, height }) => {
ref?: any;
}> = forwardRef(({ options, width, height }, ref) => {
const container = useRef<HTMLDivElement>(null);
const chart = useRef<echarts.EChartsType>();
const resizeable = useRef(false);
const resizeObserver = useRef<ResizeObserver>();
useImperativeHandle(ref, () => {
return {
chart: chart.current
};
});
const init = useCallback(() => {
if (container.current) {
chart.current?.clear();
@ -44,18 +57,9 @@ const Chart: React.FC<{
resizeable.current = false;
resize();
setOption(options);
resizeable.current = true;
}, [options]);
useEffect(() => {
let timer: any = null;
timer = setTimeout(() => {
resizeable.current = true;
}, 300);
return () => {
clearTimeout(timer);
};
}, []);
useEffect(() => {
const handleResize = throttle(() => {
if (resizeable.current) {
@ -75,7 +79,22 @@ const Chart: React.FC<{
};
}, []);
return <div ref={container} style={{ width: width, height }}></div>;
};
// resize on window resize
// useEffect(() => {
// const handleResize = throttle(() => {
// chart.current?.resize();
// }, 100);
// window.addEventListener('resize', handleResize);
// return () => {
// window.removeEventListener('resize', handleResize);
// };
// }, []);
return (
<div className="chart-wrapper" style={{ width: width, height }}>
<div ref={container} style={{ width: width, height }}></div>
</div>
);
});
export default Chart;

@ -9,7 +9,7 @@ import {
} from '@/components/echarts/config';
import EmptyData from '@/components/empty-data';
import _ from 'lodash';
import { memo } from 'react';
import { memo, useMemo } from 'react';
import { ChartProps } from './types';
const BarChart: React.FC<ChartProps> = (props) => {
@ -22,12 +22,12 @@ const BarChart: React.FC<ChartProps> = (props) => {
legendData,
title
} = props;
if (!seriesData.length) {
return <EmptyData height={height} title={title}></EmptyData>;
}
const options = {
title: titleConfig,
title: {
...titleConfig,
left: 'start'
},
grid,
tooltip: {
...tooltip
@ -48,7 +48,7 @@ const BarChart: React.FC<ChartProps> = (props) => {
series: []
};
const setDataOptions = () => {
const dataOptions = useMemo((): any => {
const data = _.map(seriesData, (item: any) => {
return {
...item,
@ -69,7 +69,6 @@ const BarChart: React.FC<ChartProps> = (props) => {
animation: false,
title: {
...options.title,
left: 'start',
text: title
},
yAxis: {
@ -103,16 +102,20 @@ const BarChart: React.FC<ChartProps> = (props) => {
},
series: data
};
};
const dataOptions: any = setDataOptions();
}, [seriesData, xAxisData, title]);
return (
<Chart
height={height}
options={dataOptions}
width={width || '100%'}
></Chart>
<>
{!seriesData.length ? (
<EmptyData height={height} title={title}></EmptyData>
) : (
<Chart
height={height}
options={dataOptions}
width={width || '100%'}
></Chart>
)}
</>
);
};

@ -1,9 +1,10 @@
import type {
BarSeriesOption,
GaugeSeriesOption,
LineSeriesOption
LineSeriesOption,
ScatterSeriesOption
} from 'echarts/charts';
import { BarChart, GaugeChart, LineChart } from 'echarts/charts';
import { BarChart, GaugeChart, LineChart, ScatterChart } from 'echarts/charts';
import type {
DatasetComponentOption,
GridComponentOption,
@ -32,6 +33,7 @@ type ECOption = ComposeOption<
| GridComponentOption
| DatasetComponentOption
| GaugeSeriesOption
| ScatterSeriesOption
>;
// register components and charts
@ -44,6 +46,7 @@ echarts.use([
TransformComponent,
BarChart,
LineChart,
ScatterChart,
GaugeChart,
LabelLayout,
UniversalTransition,

@ -10,7 +10,7 @@ import {
} from '@/components/echarts/config';
import EmptyData from '@/components/empty-data';
import _ from 'lodash';
import { memo } from 'react';
import { memo, useMemo } from 'react';
import { ChartProps } from './types';
const LineChart: React.FC<ChartProps> = (props) => {
@ -26,9 +26,6 @@ const LineChart: React.FC<ChartProps> = (props) => {
smooth,
title
} = props;
if (!seriesData.length) {
return <EmptyData height={height} title={title}></EmptyData>;
}
const options = {
title: {
@ -59,7 +56,7 @@ const LineChart: React.FC<ChartProps> = (props) => {
series: []
};
const generateOptions = (): any => {
const dataOptions = useMemo((): any => {
const data = _.map(seriesData, (item: any) => {
return {
...item,
@ -75,7 +72,7 @@ const LineChart: React.FC<ChartProps> = (props) => {
}
};
});
const optionsConfig = {
return {
...options,
animation: false,
title: {
@ -92,15 +89,20 @@ const LineChart: React.FC<ChartProps> = (props) => {
},
series: data
};
return optionsConfig;
};
const dataOptions = generateOptions();
}, [seriesData, xAxisData, yAxisName, title, smooth, legendData]);
return (
<Chart
height={height}
options={dataOptions}
width={width || '100%'}
></Chart>
<>
{!seriesData.length ? (
<EmptyData height={height} title={title}></EmptyData>
) : (
<Chart
height={height}
options={dataOptions}
width={width || '100%'}
></Chart>
)}
</>
);
};

@ -0,0 +1,189 @@
import Chart from '@/components/echarts/chart';
import { grid, title as titleConfig } from '@/components/echarts/config';
import EmptyData from '@/components/empty-data';
import _ from 'lodash';
import { memo, useCallback, useMemo, useRef } from 'react';
import { ChartProps } from './types';
const options: any = {
animation: false,
grid: {
...grid,
right: -1,
top: -1,
bottom: -1,
left: -1,
containLabel: true
},
xAxis: {
slient: true,
splitNumber: 15,
splitLine: {
lineStyle: {
color: 'rgba(5,5,5,0.06)'
}
},
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
}
},
yAxis: {
slient: true,
splitNumber: 10,
splitLine: {
lineStyle: {
color: 'rgba(5,5,5,0.06)'
}
},
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
}
},
symbol: 'roundRect',
label: {
show: true,
shadowColor: 'none',
textBorderColor: 'none',
formatter: (params: any) => {
return params.name;
}
},
series: []
};
const Scatter: React.FC<ChartProps> = (props) => {
const {
seriesData,
xAxisData,
height,
width,
showEmpty,
labelFormatter,
legendData,
title
} = props;
const chart = useRef<any>(null);
const findOverlappingPoints = useCallback(
(data: any[], currentPoint: any) => {
const overlappingPoints = [];
const symbolRadius = 16;
const [x1, y1] = chart.current.chart?.convertToPixel(
'grid',
currentPoint.value
);
const pixelPoints = data.map((point) => {
return {
...point,
value: chart.current.chart?.convertToPixel('grid', point.value)
};
});
for (let j = 0; j < pixelPoints.length; j++) {
if (currentPoint.name === pixelPoints[j].name) {
overlappingPoints.push({ ...pixelPoints[j] });
continue;
}
const [x2, y2] = pixelPoints[j].value;
const distance = Math.sqrt(
Math.pow(_.round(x2 - x1, 2), 2) + Math.pow(_.round(y2 - y1, 2), 2)
);
if (distance <= symbolRadius) {
overlappingPoints.push({ ...pixelPoints[j] });
}
}
return overlappingPoints;
},
[]
);
const dataOptions = useMemo((): any => {
if (!seriesData.length) {
options.xAxis.min = 0;
options.xAxis.max = 1;
options.yAxis.min = 0;
options.yAxis.max = 1;
} else {
options.xAxis.min = null;
options.xAxis.max = null;
options.yAxis.min = null;
options.yAxis.max = null;
}
const seriseDataList = seriesData.map((item: any, index: number) => {
return {
...item,
itemStyle: {
color: '#5470c6'
},
symbolSize: 16
};
});
return {
...options,
tooltip: {
trigger: 'item',
borderWidth: 0,
formatter(params: any, callback?: (val: any) => any) {
const dataList = findOverlappingPoints(seriseDataList, params.data);
let result = '';
dataList.forEach((item: any) => {
result += `
<span class="tooltip-item" style="justify-content: flex-start;">
<span class="tooltip-item-name">
<span style="display:flex;justify-content:center;align-items: center;color:#fff;
margin-right:0;border-radius:4px;width:14px;
height:14px;background-color:${item.itemStyle?.color};"
>${item.name}</span>
</span>
<span class="tooltip-value">${item.text}</span>
</span>`;
});
return `<div class="tooltip-wrapper">${result}</div>`;
}
},
title: {
...titleConfig,
text: title
},
series: {
type: 'scatter',
data: seriseDataList
}
};
}, [seriesData, xAxisData, title, findOverlappingPoints]);
return (
<>
{!seriesData.length && showEmpty ? (
<EmptyData height={height} title={title}></EmptyData>
) : (
<Chart
ref={chart}
height={height}
options={dataOptions}
width={width || '100%'}
></Chart>
)}
</>
);
};
export default memo(Scatter);

@ -1,5 +1,6 @@
export interface ChartProps {
seriesData: any[];
showEmpty?: boolean;
xAxisData: string[];
legendData?: string[];
labelFormatter?: (val?: any) => string;

@ -255,6 +255,7 @@ body {
}
}
}
// input
.ant-input-css-var.ant-input {
height: 40px;
@ -278,6 +279,7 @@ body {
border: none;
box-shadow: none;
}
// input number
.ant-input-number-outlined.ant-input-number-status-error:not(
.ant-input-number-disabled
@ -436,6 +438,7 @@ body {
}
}
}
// ======== menu style end ============
.ant-menu-submenu-popup {
.ant-menu-sub {
@ -524,6 +527,7 @@ body {
.ant-menu-submenu-popup > .ant-menu {
border-radius: var(--menu-border-radius-base);
}
// ======== monaco editor style ============
.monaco-editor {
border-radius: 8px;
@ -686,6 +690,7 @@ body {
.ant-segmented .ant-segmented-item::after {
border-radius: var(--border-radius-mini);
}
// =============== segment end ===============
.background {
@ -769,6 +774,7 @@ body {
font-size: 11px;
background-color: rgba(255, 255, 255, 80%);
min-width: 100px;
max-width: 360px;
.tooltip-x-name {
font-size: var(--font-size-base);
@ -788,6 +794,8 @@ body {
.tooltip-value {
margin-left: 10px;
color: var(--ant-color-text);
text-overflow: ellipsis;
overflow: hidden;
}
}
}

@ -3,6 +3,7 @@
* @example Directories like 'en-US' or 'zh-CN' should correspond exactly to the configuration names in lang-config-map.ts.
*/
// @ts-ignore
const requireContext = require.context(`./en-US`, false, /\.ts$/);
let languageConfig: Record<string, string> = {};

@ -3,7 +3,7 @@ import IconFont from '@/components/icon-font';
/**
* Language configuration map
* Warning: The key of the map must be the same as the directory name in the locales directory
* Do not modify the key of the map
* Do not modify the key of the map !!!
*
*/
const langConfigMap = {

@ -3,6 +3,7 @@
* @example Directories like 'en-US' or 'zh-CN' should correspond exactly to the configuration names in lang-config-map.ts.
*/
// @ts-ignore
const requireContext = require.context(`./zh-CN`, false, /\.ts$/);
let languageConfig: Record<string, string> = {};

@ -1,7 +1,8 @@
export default {
'menu.dashboard': '概览',
'menu.playground': '试验场',
'menu.playground.rerank': 'Rerank',
'menu.playground.rerank': '重排',
'menu.playground.embedding': '文本嵌入',
'menu.playground.chat': '对话',
'menu.compare': '多模型对比',
'menu.models': '模型',

@ -2,6 +2,8 @@ import { request } from '@umijs/max';
export const CHAT_API = '/v1-openai/chat/completions';
export const EMBEDDING_API = '/v1-openai/embeddings';
export const OPENAI_MODELS = '/v1-openai/models';
export const RERANKER_API = '/rerank';
@ -35,3 +37,17 @@ export const rerankerQuery = async (
cancelToken: options?.cancelToken
});
};
export const handleEmbedding = async (
params: {
model: string;
input: string[];
},
options?: any
) => {
return request(`${EMBEDDING_API}`, {
method: 'POST',
data: params,
cancelToken: options?.cancelToken
});
};

@ -0,0 +1,442 @@
import ScatterChart from '@/components/echarts/scatter';
import useOverlayScroller from '@/hooks/use-overlay-scroller';
import useRequestToken from '@/hooks/use-request-token';
import {
ClearOutlined,
LoadingOutlined,
PlusOutlined,
ThunderboltOutlined,
UploadOutlined
} from '@ant-design/icons';
import { useIntl, useSearchParams } from '@umijs/max';
import { Button, Tooltip } from 'antd';
import classNames from 'classnames';
import 'overlayscrollbars/overlayscrollbars.css';
import {
forwardRef,
memo,
useEffect,
useImperativeHandle,
useMemo,
useRef,
useState
} from 'react';
import { UMAP } from 'umap-js';
import { handleEmbedding } from '../apis';
import { MessageItem, ParamsSchema } 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 RerankerParams from './reranker-params';
import UploadFile from './upload-file';
import ViewCodeModal from './view-code-modal';
interface MessageProps {
modelList: Global.BaseOption<string>[];
loaded?: boolean;
ref?: any;
}
const paramsConfig: ParamsSchema[] = [
{
type: 'Select',
name: 'truncate',
label: {
text: 'Truncate',
isLocalized: false
},
options: [
{
label: 'None',
value: 'none'
},
{
label: 'Start',
value: 'start'
},
{
label: 'End',
value: 'end'
}
],
rules: [
{
required: true,
message: 'Please select truncate'
}
]
}
];
const initialValues = {
truncate: 'none'
};
const GroundReranker: React.FC<MessageProps> = forwardRef((props, ref) => {
const { modelList } = props;
const acceptType =
'.txt, .doc, .docx, .xls, .xlsx, .csv, .md, .pdf, .eml, .msg, .ppt, .pptx, .xml, .epub, .html';
const messageId = useRef<number>(0);
const [messageList, setMessageList] = useState<MessageItem[]>([]);
const intl = useIntl();
const requestSource = useRequestToken();
const [searchParams] = useSearchParams();
const selectModel = searchParams.get('model') || '';
const [parameters, setParams] = useState<any>({});
const [show, setShow] = useState(false);
const [loading, setLoading] = useState(false);
const [tokenResult, setTokenResult] = useState<any>(null);
const [collapse, setCollapse] = useState(false);
const contentRef = useRef<any>('');
const scroller = useRef<any>(null);
const inputListRef = useRef<any>(null);
const paramsRef = useRef<any>(null);
const messageListLengthCache = useRef<number>(0);
const requestToken = useRef<any>(null);
const [fileList, setFileList] = useState<
{ text: string; name: string; uid: number | string }[]
>([]);
const [textList, setTextList] = useState<
{ text: string; uid: number | string; name: string }[]
>([
{
text: '',
uid: -1,
name: ''
},
{
text: '',
uid: -2,
name: ''
}
]);
const [scatterData, setScatterData] = useState<any[]>([]);
const { initialize, updateScrollerPosition } = useOverlayScroller();
const {
initialize: innitializeParams,
updateScrollerPosition: updateDocumentScrollerPosition
} = useOverlayScroller();
useImperativeHandle(ref, () => {
return {
viewCode() {
setShow(true);
},
setCollapse() {
setCollapse(!collapse);
}
};
});
const inputEmpty = useMemo(() => {
const list = [...textList, ...fileList].filter((item) => item.text);
return list.length < 2;
}, [textList, fileList]);
const generateEmbedding = (embeddings: any[]) => {
try {
const umap = new UMAP({
// random() {
// return 0.1;
// },
// minDist: 0.1,
nComponents: 2,
nNeighbors: 1
});
const dataList = embeddings.map((item) => {
return item.embedding;
});
const embedding = umap.fit([...dataList, ...dataList]);
const list = embedding.map((item: number[], index: number) => {
return {
value: item,
name: index + 1,
text: `test test test test test`
};
});
setScatterData(list);
} catch (e) {
// console.log('error:', e);
}
};
const setMessageId = () => {
messageId.current = messageId.current + 1;
};
const handleStopConversation = () => {
requestToken.current?.cancel?.();
setLoading(false);
};
const submitMessage = async (current?: { role: string; content: string }) => {
if (!parameters.model) return;
try {
setLoading(true);
setMessageId();
setTokenResult(null);
requestToken.current?.cancel?.();
requestToken.current = requestSource();
contentRef.current = current?.content || '';
const result: any = await handleEmbedding(
{
model: parameters.model,
input: [
...textList.map((item) => item.text),
...fileList.map((item) => item.text)
]
},
{
token: requestToken.current.token
}
);
console.log('result:', result);
setTokenResult(result.usage);
const embeddingsList = result.data || [];
console.log('embeddings:', embeddingsList);
generateEmbedding(embeddingsList);
} catch (error: any) {
console.log('error========', error);
setTokenResult({
error: true,
errorMessage: error.response?.data?.error?.message
});
} finally {
setLoading(false);
}
};
const handleClear = () => {
if (!messageList.length) {
return;
}
setMessageId();
setScatterData([]);
setTokenResult(null);
};
const handleSendMessage = () => {
submitMessage();
};
const handleCloseViewCode = () => {
setShow(false);
};
const handleUpdateFileList = (
files: { text: string; name: string; uid: number | string }[]
) => {
console.log('files:', files);
setFileList((preList) => {
return [...preList, ...files];
});
};
const handleDeleteFile = (uid: number | string) => {
setFileList((preList) => {
return preList.filter((item) => item.uid !== uid);
});
};
const handleAddText = () => {
inputListRef.current?.handleAdd();
};
const handleTextListChange = (
list: { text: string; uid: number | string; name: string }[]
) => {
setTextList(list);
};
const handleClearDocuments = () => {
setTextList([
{
text: '',
uid: -1,
name: ''
},
{
text: '',
uid: -2,
name: ''
}
]);
setFileList([]);
setScatterData([]);
};
useEffect(() => {
setMessageId();
setScatterData([]);
setTokenResult(null);
}, [parameters.model]);
useEffect(() => {
if (scroller.current) {
initialize(scroller.current);
}
}, [scroller.current, initialize]);
useEffect(() => {
if (paramsRef.current) {
innitializeParams(paramsRef.current);
}
}, [paramsRef.current, innitializeParams]);
useEffect(() => {
updateScrollerPosition();
}, [messageList]);
useEffect(() => {
if (textList.length + fileList.length > messageListLengthCache.current) {
updateDocumentScrollerPosition();
}
messageListLengthCache.current = textList.length + fileList.length;
}, [textList.length, fileList.length]);
return (
<div className="ground-left-wrapper rerank">
<div className="ground-left" style={{ justifyContent: 'flex-start' }}>
<div
className="center"
ref={scroller}
style={{ height: 'auto', maxHeight: '100%' }}
>
<div className="documents">
<div className="flex-between m-b-8 doc-header">
<h3 className="m-l-10 flex-between flex-center font-size-14 line-24 m-b-0">
<span>Documents</span>
</h3>
<div className="flex gap-10">
<UploadFile
handleUpdateFileList={handleUpdateFileList}
accept={acceptType}
>
<Tooltip title={<span>Support: {acceptType}</span>}>
<Button
size="middle"
icon={<UploadOutlined></UploadOutlined>}
>
Upload File
</Button>
</Tooltip>
</UploadFile>
<Button size="middle" onClick={handleAddText}>
<PlusOutlined />
Add Text
</Button>
<Button
icon={<ClearOutlined />}
size="middle"
onClick={handleClearDocuments}
>
{intl.formatMessage({ id: 'common.button.clear' })}
</Button>
<Button
size="middle"
type="primary"
disabled={inputEmpty}
onClick={handleSendMessage}
>
{loading ? <LoadingOutlined /> : <ThunderboltOutlined />}
{intl.formatMessage({ id: 'common.button.run' })}
</Button>
</div>
</div>
<div className="docs-wrapper">
<InputList
ref={inputListRef}
textList={textList}
onChange={handleTextListChange}
></InputList>
<div style={{ marginTop: 8 }}>
<FileList
fileList={fileList}
textListCount={textList.length || 0}
onDelete={handleDeleteFile}
></FileList>
</div>
</div>
</div>
</div>
<div
className="ground-left-footer"
style={{
width: '100%',
padding: '0 32px 16px'
}}
>
<h3 className="m-l-10 flex-between flex-center font-size-14 line-24 m-b-16">
<span>Output</span>
</h3>
<div
style={{
border: '1px solid var(--ant-color-border)',
borderRadius: 'var(--border-radius-base)',
overflow: 'hidden',
width: '100%'
}}
className="scatter"
>
<ScatterChart
seriesData={scatterData}
height={160}
width="100%"
xAxisData={[]}
></ScatterChart>
</div>
</div>
</div>
<div
className={classNames('params-wrapper', {
collapsed: collapse
})}
ref={paramsRef}
>
<div className="box">
<RerankerParams
setParams={setParams}
paramsConfig={paramsConfig}
initialValues={initialValues}
params={parameters}
selectedModel={selectModel}
modelList={modelList}
/>
</div>
</div>
<ViewCodeModal
open={show}
apiType="embedding"
payLoad={{
input: [
...textList.map((item) => item.text),
...fileList.map((item) => item.text)
].filter((text) => text)
}}
parameters={{
...parameters
}}
onCancel={handleCloseViewCode}
title={intl.formatMessage({ id: 'playground.viewcode' })}
></ViewCodeModal>
</div>
);
});
export default memo(GroundReranker);

@ -330,7 +330,9 @@ const GroundLeft: React.FC<MessageProps> = forwardRef((props, ref) => {
<ViewCodeModal
open={show}
messageList={viewCodeMessage}
payLoad={{
messages: viewCodeMessage
}}
parameters={parameters}
onCancel={handleCloseViewCode}
title={intl.formatMessage({ id: 'playground.viewcode' })}

@ -15,7 +15,7 @@ import {
useState
} from 'react';
import { rerankerQuery } from '../apis';
import { MessageItem } from '../config/types';
import { MessageItem, ParamsSchema } from '../config/types';
import '../style/ground-left.less';
import '../style/rerank.less';
import '../style/system-message-wrap.less';
@ -32,6 +32,30 @@ interface MessageProps {
ref?: any;
}
const paramsConfig: ParamsSchema[] = [
{
type: 'InputNumber',
name: 'top_n',
label: {
text: 'Top N',
isLocalized: false
},
attrs: {
min: 1
},
rules: [
{
required: true,
message: 'Top N is required'
}
]
}
];
const initialValues = {
top_n: 1
};
const GroundReranker: React.FC<MessageProps> = forwardRef((props, ref) => {
const { modelList } = props;
const acceptType =
@ -145,7 +169,7 @@ const GroundReranker: React.FC<MessageProps> = forwardRef((props, ref) => {
content: result.results?.map((item: any) => {
return {
uid: item.index,
text: `${item.document?.slice(0, 500) || ''}`,
text: `${item.document?.text?.slice(0, 500) || ''}`,
docIndex: item.index,
title: documentList[item.index]?.name || '',
score: item.relevance_score,
@ -287,7 +311,7 @@ const GroundReranker: React.FC<MessageProps> = forwardRef((props, ref) => {
<h3 className="m-l-10 flex-between flex-center font-size-14 line-24 m-b-0">
<span>Documents</span>
</h3>
<div className="flex gap-20">
<div className="flex gap-10">
{/* <UploadFile
handleUpdateFileList={handleUpdateFileList}
accept={acceptType}
@ -306,11 +330,12 @@ const GroundReranker: React.FC<MessageProps> = forwardRef((props, ref) => {
Add Text
</Button>
<Button
type="text"
icon={<ClearOutlined />}
size="middle"
onClick={handleClearDocuments}
></Button>
>
{intl.formatMessage({ id: 'common.button.clear' })}
</Button>
</div>
</div>
<div className="docs-wrapper">
@ -366,6 +391,8 @@ const GroundReranker: React.FC<MessageProps> = forwardRef((props, ref) => {
<RerankerParams
setParams={setParams}
params={parameters}
paramsConfig={paramsConfig}
initialValues={initialValues}
selectedModel={selectModel}
modelList={modelList}
/>

@ -466,7 +466,9 @@ const ModelItem: React.FC<ModelItemProps> = forwardRef(
</div>
<ViewCodeModal
open={show}
messageList={viewCodeMessage}
payLoad={{
messages: viewCodeMessage
}}
parameters={params}
onCancel={handleCloseViewCode}
title={intl.formatMessage({ id: 'playground.viewcode' })}

@ -6,6 +6,7 @@ import { useIntl } from '@umijs/max';
import { Form, InputNumber, Tooltip } from 'antd';
import _ from 'lodash';
import { memo, useCallback, useEffect, useId } from 'react';
import { ParamsSchema } from '../config/types';
import CustomLabelStyles from '../style/custom-label.less';
type ParamsSettingsFormProps = {
@ -16,26 +17,27 @@ type ParamsSettingsFormProps = {
type ParamsSettingsProps = {
selectedModel?: string;
showModelSelector?: boolean;
params?: ParamsSettingsFormProps;
params?: Record<string, any>;
model?: string;
modelList: Global.BaseOption<string>[];
onValuesChange?: (changeValues: any, value: Record<string, any>) => void;
setParams: (params: any) => void;
globalParams?: ParamsSettingsFormProps;
globalParams?: Record<string, any>;
paramsConfig?: ParamsSchema[];
initialValues?: Record<string, any>;
};
const ParamsSettings: React.FC<ParamsSettingsProps> = ({
selectedModel,
setParams,
globalParams,
onValuesChange,
selectedModel,
globalParams,
initialValues,
paramsConfig,
modelList,
showModelSelector = true
}) => {
const intl = useIntl();
const initialValues = {
top_n: 1
};
const [form] = Form.useForm();
const formId = useId();
@ -59,7 +61,7 @@ const ParamsSettings: React.FC<ParamsSettingsProps> = ({
...initialValues
});
}
}, [modelList, showModelSelector, selectedModel]);
}, [modelList, showModelSelector, selectedModel, initialValues]);
const handleOnFinish = (values: any) => {
console.log('handleOnFinish', values);
@ -102,6 +104,45 @@ const ParamsSettings: React.FC<ParamsSettingsProps> = ({
form.setFieldsValue(globalParams);
}, [globalParams]);
const renderFields = useCallback(() => {
console.log('paramsConfig:', paramsConfig);
if (!paramsConfig?.length) {
return null;
}
return paramsConfig.map((item: ParamsSchema) => {
if (item.type === 'InputNumber') {
return (
<Form.Item name={item.name} rules={item.rules} key={item.name}>
<SealInput.Number
{...item.attrs}
style={{ width: '100%' }}
label={
item.label.isLocalized
? intl.formatMessage({ id: item.label.text })
: item.label.text
}
></SealInput.Number>
</Form.Item>
);
}
if (item.type === 'Select') {
return (
<Form.Item name={item.name} rules={item.rules} key={item.name}>
<SealSelect
options={item.options}
label={
item.label.isLocalized
? intl.formatMessage({ id: item.label.text })
: item.label.text
}
></SealSelect>
</Form.Item>
);
}
return null;
});
}, [paramsConfig]);
const renderLabel = (args: {
field: string;
label: string;
@ -148,7 +189,9 @@ const ParamsSettings: React.FC<ParamsSettingsProps> = ({
<div>
{
<>
<h3 className="m-b-20 m-l-10 font-size-14 line-24">Parameters</h3>
<h3 className="m-b-20 m-l-10 font-size-14 line-24">
<span>{intl.formatMessage({ id: 'playground.parameters' })}</span>
</h3>
<Form.Item<ParamsSettingsFormProps>
name="model"
rules={[
@ -171,16 +214,7 @@ const ParamsSettings: React.FC<ParamsSettingsProps> = ({
</Form.Item>
</>
}
<Form.Item<ParamsSettingsFormProps>
name="top_n"
rules={[{ required: true }]}
>
<SealInput.Number
style={{ width: '100%' }}
label="Top N"
min={1}
></SealInput.Number>
</Form.Item>
{renderFields()}
</div>
</Form>
);

@ -56,39 +56,19 @@ const UploadImg: React.FC<UploadImgProps> = ({
const newFileList = await Promise.all(
fileList.map(async (item: UploadFile) => {
if (wordReg.test(item.name)) {
const context = await readWordContent(
item.originFileObj as RcFile
);
item.url = context;
item.url = await readWordContent(item.originFileObj as RcFile);
} else if (excelReg.test(item.name)) {
const context = await readExcelContent(
item.originFileObj as RcFile
);
item.url = context;
item.url = await readExcelContent(item.originFileObj as RcFile);
} else if (epubReg.test(item.name)) {
const context = await readEpubContent(
item.originFileObj as RcFile
);
item.url = context;
item.url = await readEpubContent(item.originFileObj as RcFile);
} else if (pdfReg.test(item.name)) {
const context = await readPDFContent(
item.originFileObj as RcFile
);
item.url = context;
item.url = await readPDFContent(item.originFileObj as RcFile);
} else if (pptReg.test(item.name)) {
const context = await readPptxContent(
item.originFileObj as RcFile
);
item.url = context;
item.url = await readPptxContent(item.originFileObj as RcFile);
} else if (htmlReg.test(item.name)) {
const context = await readHtmlContent(
item.originFileObj as RcFile
);
item.url = context;
item.url = await readHtmlContent(item.originFileObj as RcFile);
} else {
const context = await readBlob(item.originFileObj as RcFile);
item.url = context;
item.url = await readBlob(item.originFileObj as RcFile);
}
return item;
})

@ -8,7 +8,8 @@ import React, { useMemo, useState } from 'react';
type ViewModalProps = {
systemMessage?: string;
messageList: any[];
messageList?: any[];
payLoad: Record<string, any>;
parameters: any;
title: string;
open: boolean;
@ -34,6 +35,7 @@ const ViewCodeModal: React.FC<ViewModalProps> = (props) => {
open,
onCancel,
messageList,
payLoad,
parameters = {},
apiType = 'chat'
} = props || {};
@ -47,13 +49,26 @@ const ViewCodeModal: React.FC<ViewModalProps> = (props) => {
const logcommand =
apiType === 'chat' ? 'choices[0].message.content' : 'data[0].embedding';
const formatPyParams = (params: any) => {
return _.keys(params).reduce((acc: string, key: string) => {
if (params[key] === null) {
return acc;
}
const value =
typeof params[key] === 'object'
? JSON.stringify(params[key], null, 2)
: `"${params[key]}"`;
return acc + ` ${key}=${value},\n`;
}, '');
};
const codeValue = useMemo(() => {
if (lang === langMap.shell) {
const messages = messageList;
const code = `curl ${window.location.origin}/v1-openai/${api} \\\n-H "Content-Type: application/json" \\\n-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\\n-d '${JSON.stringify(
{
...parameters,
...(messages.length > 0 ? { messages } : {})
...payLoad
},
null,
2
@ -65,7 +80,7 @@ const ViewCodeModal: React.FC<ViewModalProps> = (props) => {
const code = `const OpenAI = require("openai");\n\nconst openai = new OpenAI({\n "apiKey": "YOUR_GPUSTACK_API_KEY",\n "baseURL": "${BaseURL}"\n});\n\nasync function main(){\n const params = ${JSON.stringify(
{
...parameters,
...(messages.length > 0 ? { messages } : {})
...payLoad
},
null,
4
@ -87,15 +102,12 @@ const ViewCodeModal: React.FC<ViewModalProps> = (props) => {
},
''
);
const messages =
apiType === 'chat'
? `messages=${JSON.stringify(messageList, null, 2)}`
: '';
const code = `from openai import OpenAI\n\nclient = OpenAI(\n base_url="${BaseURL}", \n api_key="YOUR_GPUSTACK_API_KEY"\n)\n\nresponse = client.${ClientType}.create(\n${formattedParams} ${messages})\nprint(response.${logcommand})`;
const params = apiType === 'chat' ? formatPyParams(payLoad) : '';
const code = `from openai import OpenAI\n\nclient = OpenAI(\n base_url="${BaseURL}", \n api_key="YOUR_GPUSTACK_API_KEY"\n)\n\nresponse = client.${ClientType}.create(\n${formattedParams} ${params})\nprint(response.${logcommand})`;
return code;
}
return '';
}, [lang, messageList, parameters]);
}, [lang, payLoad, parameters]);
const handleOnChangeLang = (value: string) => {
setLang(value);

@ -0,0 +1,430 @@
const data = {
id: '6d532ab7-ee33-485a-bda4-cc8bea2c3f3d',
texts: ['rtertertterter', 'rtertertterter'],
embeddings: [
[
0.050720215, -0.025253296, 0.018859863, -0.060180664, -0.008003235,
0.02192688, -0.020126343, 0.0068893433, 0.040252686, 0.08441162,
0.025665283, 0.0036411285, 0.03982544, -0.0021705627, -0.035705566,
0.01020813, 0.025894165, 0.018508911, 0.01966858, -0.026672363,
0.017089844, -0.010887146, 0.0019197464, 0.009437561, -0.015419006,
0.06439209, 0.04019165, -0.015975952, -0.02067566, -0.016555786,
-0.0010957718, -0.01838684, 0.045898438, 0.0023231506, -0.022155762,
0.011688232, -0.020401001, -0.026412964, -0.02255249, 0.0013628006,
-0.026275635, 0.018966675, -0.010017395, -0.049316406, -0.07763672,
0.0066070557, -0.039245605, 0.04776001, 0.039733887, -0.019332886,
0.0005726814, 0.017242432, 0.0050201416, -0.017471313, -0.015403748,
0.02255249, 0.001572609, -0.03491211, 0.02078247, 0.011054993,
0.006095886, 0.0012397766, 0.023040771, 0.025466919, 0.027023315,
0.035583496, 0.08203125, 0.011604309, 0.022216797, -0.026992798,
-0.04067993, -0.0070381165, 0.03677368, -0.02748108, -0.0335083,
0.025543213, 0.005680084, 0.0107803345, 0.035949707, -0.04876709,
0.095825195, 0.0022659302, 0.07824707, 0.012763977, -0.005420685,
0.011138916, 0.029067993, -0.03390503, -0.011413574, -0.013313293,
-0.019592285, 0.042510986, -0.042785645, 0.030960083, -0.016403198,
0.0018463135, 0.022537231, -0.0011920929, -0.044311523, -0.018127441,
0.01953125, -0.029327393, 0.021957397, -0.011230469, 0.0149002075,
0.035949707, -0.012054443, 0.070495605, 0.07702637, 0.020904541,
0.008781433, 0.049804688, -0.027801514, 0.008415222, -0.030349731,
0.02470398, -0.042541504, -0.0023899078, -0.0049552917, -0.0027923584,
-0.02558899, 0.025939941, 0.012519836, -0.090270996, -0.0047836304,
-0.02619934, -0.017822266, -0.016662598, 0.022766113, 0.012741089,
-0.0014429092, 0.040161133, 0.0011053085, -0.019882202, -0.039733887,
0.013244629, 0.022369385, 0.032043457, 0.009048462, 0.046539307,
0.019546509, -0.03488159, 0.022445679, 0.0027885437, 0.002456665,
0.035339355, 0.036834717, -0.018630981, -0.030380249, -0.004989624,
-0.042114258, 0.0056419373, 0.016189575, 0.011451721, -0.034851074,
-0.0005874634, -0.06793213, 0.0044517517, 0.010971069, 0.006412506,
0.014167786, -0.007965088, -0.04449463, -0.029205322, -0.076660156,
0.0044059753, 0.047851562, 0.025344849, 0.00012153387, 0.07354736,
-0.044189453, 0.043395996, 0.025848389, 0.049072266, -0.0019721985,
-0.0046691895, -0.0004079342, 0.006008148, 0.027114868, -0.042541504,
-0.04498291, -0.049926758, 0.020126343, -0.0037727356, -0.025283813,
0.009117126, -0.027618408, 0.0058937073, 0.068847656, -0.006713867,
-0.017364502, -0.026062012, 0.06549072, -0.021942139, 0.0008788109,
-0.057128906, -0.023498535, 0.014709473, -0.02331543, -0.0158844,
0.008895874, 0.040802002, -0.03564453, -0.00333786, -0.038757324,
-0.030136108, -0.0037994385, 0.030578613, -0.012077332, -0.001540184,
0.023529053, -0.034606934, -0.02178955, 0.023590088, -0.017700195,
-0.04168701, 0.0072021484, -0.018508911, -0.0042686462, -0.046661377,
0.03805542, 0.039154053, 0.0031318665, 0.07269287, 0.018325806,
0.021957397, -0.02003479, 0.028549194, 0.04058838, 0.03149414,
-0.012687683, -0.024353027, 0.01612854, 0.02494812, -0.035095215,
0.017822266, 0.021865845, 0.0592041, -0.015838623, -0.0044555664,
0.010139465, 0.0021953583, -0.04309082, 0.021942139, -0.005607605,
-0.056671143, -0.013801575, 0.03338623, -0.00020134449, 0.09112549,
0.022399902, 0.016906738, -0.0017642975, -0.012428284, -0.0362854,
0.022735596, 0.013328552, -0.0066070557, -0.033294678, 0.01398468,
0.0057754517, 0.005077362, -0.037017822, 0.013420105, 0.08148193,
-0.03665161, 0.024368286, -0.0016231537, -0.02973938, 0.0023231506,
0.029296875, -0.035705566, -0.00680542, 0.051330566, 0.019592285,
-0.042633057, -0.030792236, 0.008384705, 0.0121536255, 0.014945984,
-0.009254456, 0.009719849, -0.029510498, -0.02015686, 0.05722046,
0.02319336, -0.021194458, -0.050933838, -0.021987915, 0.026473999,
0.03729248, 0.043640137, 0.022491455, -0.018341064, 0.029937744,
0.004016876, 0.10595703, 0.014282227, 0.0027809143, 0.010871887,
0.022613525, 0.049621582, 0.041229248, -0.029891968, -0.003320694,
-0.011787415, 0.004383087, 0.016998291, -0.010032654, -0.008041382,
-0.03692627, 0.031036377, 0.0129470825, -0.014122009, -0.019683838,
-0.05117798, -0.012664795, -0.020492554, -0.06341553, -0.030059814,
0.050567627, -0.03253174, -0.010299683, 0.035095215, -0.023651123,
-0.011520386, 0.072143555, 0.0026130676, -0.028778076, 0.04336548,
0.06500244, 0.049957275, 0.008773804, -0.010055542, 0.008117676,
0.016036987, 0.013168335, -0.023147583, -0.023757935, -0.0026760101,
0.006137848, -0.05105591, 0.00415802, -0.027130127, -0.027694702,
0.024108887, -0.046569824, 0.009689331, 0.034698486, -0.0017528534,
-0.029556274, -0.018173218, -0.021865845, 0.0023612976, 0.024719238,
-0.026412964, -0.02180481, 0.03765869, 0.026000977, -0.04714966,
-0.016921997, -0.05758667, -0.054748535, 0.024841309, 0.012245178,
0.007209778, -0.011512756, 0.024383545, -0.017684937, 0.03744507,
0.029449463, -0.026687622, -0.0030841827, -0.029632568, -0.04284668,
-0.016342163, -0.014312744, -0.050567627, -0.022583008, -0.02734375,
-0.019989014, -0.035064697, 0.05279541, -0.0027122498, -0.02053833,
0.057525635, 0.007511139, -0.0078125, 0.045898438, -0.0032424927,
0.031051636, 0.035308838, -0.0138549805, -0.0050201416, -0.016052246,
-0.026550293, 0.02520752, 0.036895752, -0.053710938, 0.0058937073,
0.026107788, 0.011451721, -0.017547607, -0.013244629, 0.02998352,
-0.017974854, 0.041381836, -0.030639648, 0.0073928833, -0.047302246,
0.023864746, -0.034423828, -0.003648758, -0.05065918, 0.011138916,
-0.04852295, 0.0055122375, -0.016189575, -0.0057640076, 0.0034179688,
0.03491211, -0.012741089, 0.01234436, 0.023269653, 0.010360718,
0.008384705, -0.021636963, -0.014778137, 0.026123047, 0.040008545,
0.012611389, 0.0022697449, 0.012626648, 0.041900635, -0.051696777,
0.048339844, -0.019607544, -0.026443481, 0.011444092, -0.087524414,
0.03894043, 0.030303955, 0.0050468445, 0.01423645, -0.03149414,
0.027404785, 0.035705566, 0.02192688, -0.033203125, -0.017684937,
-0.020599365, -0.0021133423, 0.024536133, 0.04272461, 0.013031006,
0.06451416, -0.020019531, 0.02520752, 0.04586792, -0.009757996,
0.014183044, -0.001783371, -0.036743164, 0.0028133392, 0.0010175705,
-0.00422287, 0.041503906, -0.005466461, -0.013252258, 0.008262634,
-0.0030021667, -0.0049324036, -0.013511658, -0.03164673, 0.037475586,
0.0029945374, 0.00015115738, -0.010971069, -0.022445679, -0.020614624,
-0.01626587, 0.0262146, -0.0037288666, -0.057128906, -0.06072998,
0.014945984, -0.05984497, -0.0059280396, -0.016662598, 0.019958496,
-0.03164673, 0.021148682, 0.02230835, -0.03527832, -0.014122009,
0.021911621, 0.032958984, -0.088012695, 0.0036849976, -0.011276245,
-0.06100464, 0.031280518, -0.008308411, -0.009002686, 0.033081055,
-0.029373169, 0.040161133, 0.035125732, 0.021850586, 0.04827881,
0.034210205, 0.02708435, 0.018005371, 0.010238647, -0.02041626,
-0.026260376, 0.052246094, -0.014007568, -0.017105103, -0.014526367,
-0.018463135, -0.011711121, -0.026062012, 0.017852783, 0.054138184,
0.012672424, -0.035980225, 0.043273926, -0.024230957, -0.008758545,
-0.018615723, 0.01676941, -0.018859863, -0.0209198, 0.035064697,
-0.014350891, -0.020828247, 0.008285522, -0.003068924, -0.016143799,
-0.032165527, -0.022262573, 0.049102783, 0.00712204, 0.0054626465,
-0.004009247, 0.028030396, -0.003145218, 0.028076172, -0.05593872,
0.01663208, 0.03466797, -0.0049934387, -0.01928711, -0.043029785,
0.0158844, -0.036102295, 0.017303467, 0.021011353, 0.0009908676,
-0.038208008, 0.042633057, -0.07446289, 0.054840088, -0.04711914,
-0.0021762848, 0.049926758, 0.028167725, 0.053741455, -0.023956299,
-0.023895264, -0.05178833, 0.0007777214, -0.03994751, -0.011856079,
-0.016799927, 0.008026123, 0.009979248, 0.01687622, 0.032714844,
-0.03186035, 0.023513794, 0.009979248, 0.029571533, 0.03010559,
-0.02508545, -0.057891846, 0.03842163, -0.015686035, -0.024414062,
0.016281128, -0.027252197, 0.021057129, -0.019195557, -0.006385803,
-0.049987793, -0.019958496, -0.02558899, 0.032287598, -0.013839722,
0.005065918, 0.02394104, 0.01084137, -0.029052734, 0.028717041,
0.0074882507, 0.0003876686, 0.03640747, 0.0023765564, -0.012466431,
0.020553589, -0.014602661, -0.028244019, 0.02458191, -0.032348633,
-0.0647583, -0.014434814, 0.027313232, 0.04977417, -0.026382446,
0.027618408, 0.016967773, 0.004673004, 0.03100586, -0.046295166,
0.0013895035, 0.062805176, -0.014640808, -0.049987793, 0.01701355,
-0.04397583, 0.0052719116, -0.01637268, -0.029434204, 0.031341553,
0.045440674, -0.013305664, 0.021118164, -0.044189453, -0.03878784,
0.024749756, -0.014762878, -0.061187744, -0.006828308, 0.011177063,
0.01235199, -0.002626419, -0.024658203, 0.000019192696, -0.0031490326,
0.050872803, 0.023254395, -0.015792847, -0.0035362244, 0.026229858,
0.0042266846, 0.0102005005, 0.066711426, -0.023757935, 0.012107849,
0.009933472, 0.06274414, -0.013458252, -0.028686523, -0.034606934,
0.0041618347, 0.016479492, 0.053131104, -0.025756836, -0.026611328,
0.012031555, -0.007835388, -0.017440796, -0.055755615, 0.022537231,
0.016082764, 0.0038070679, 0.03378296, 0.0309906, -0.07714844,
-0.011024475, -0.018066406, -0.015197754, 0.045410156, -0.022125244,
0.024719238, -0.008857727, 0.010612488, 0.016296387, -0.022399902,
-0.06121826, -0.074645996, -0.008956909, -0.123046875, 0.010215759,
-0.022476196, -0.09185791, 0.017440796, 0.043121338, 0.010696411,
-0.050598145, -0.0027599335, -0.015457153, -0.014411926, 0.04473877,
0.0181427, -0.015945435, -0.04232788, 0.052734375, -0.0022201538,
-0.019012451, 0.05255127, -0.009086609, 0.0041046143, 0.0020389557,
-0.009750366, 0.015731812, -0.038208008, -0.015701294, 0.051116943,
-0.010101318, -0.09564209, -0.017471313, 0.028518677, -0.00011640787,
-0.051361084, -0.0032081604, 0.008171082, -0.0067749023, -0.045318604,
0.040863037, -0.03488159, -0.036895752, 0.0020503998, 0.0017614365,
-0.0036849976, 0.04119873, 0.016067505, 0.05102539, -0.0491333,
-0.026382446, -0.0073547363, 0.06097412, -0.002023697, 0.0009775162,
0.02268982, 0.013671875, 0.054626465, -0.0003399849, -0.0050315857,
0.019973755, 0.0138549805, -0.005508423, -0.0004553795, 0.05496216,
-0.013442993, -0.031829834, -0.005458832, 0.01272583, 0.0056495667,
-0.029373169, -0.021102905, -0.025268555, 0.04776001, -0.04849243,
0.009857178, 0.012306213, -0.033996582, -0.03717041, -0.010063171,
-0.019165039, 0.07092285, -0.01259613, 0.00023555756, -0.028305054,
-0.038513184, 0.00868988, 0.010032654, -0.009246826, 0.013023376,
-0.008224487, 0.07287598, -0.042419434, 0.00054454803, -0.010986328,
-0.0024337769, 0.03152466, 0.00422287, -0.0021686554, 0.024139404,
0.0060310364, 0.013374329, 0.040039062, 0.013916016, 0.02243042,
-0.018493652, 0.015960693, 0.020614624, 0.013214111, -0.02633667,
-0.03262329, -0.04510498, -0.005256653, 0.021316528, 0.0034618378,
0.053222656, 0.03540039, -0.034118652, -0.000050604343, 0.04309082,
-0.006801605, -0.014389038, -0.053619385, -0.035491943, -0.034820557,
0.00843811, 0.017333984, 0.039489746, -0.06512451, -0.08959961,
0.016235352, 0.039031982, -0.016174316, 0.016616821, -0.026489258,
0.00040388107, 0.009437561, -0.03869629, 0.014427185, 0.008460999,
0.0027809143, -0.012451172, 0.015144348, 0.049926758, 0.030151367,
-0.011665344, -0.030014038, 0.06109619, -0.009292603, 0.00025629997,
0.016540527, 0.027404785, -0.019958496, -0.019210815, 0.049713135,
-0.028930664, 0.01222229, -0.011878967, -0.009170532, 0.006866455,
0.04916382, -0.013084412, 0.025558472, -0.032226562, 0.018692017,
-0.047424316, 0.045074463, -0.046875, -0.01939392, 0.012382507,
-0.0030975342, -0.0060691833, -0.025848389, -0.016235352, -0.0043678284,
-0.040405273, -0.03677368, 0.03475952, -0.045288086, 0.04046631,
0.03353882, -0.038360596, -0.014350891, -0.039489746, -0.029663086,
-0.011779785, 0.012458801, 0.01423645, 0.013343811, 0.011833191,
0.041381836, 0.026473999, 0.11871338, 0.027236938, 0.052856445,
-0.055145264, 0.04748535, 0.018859863, 0.015701294, -0.021453857,
0.00687027, -0.011810303, 0.022766113, 0.026626587, -0.021392822,
-0.011657715, 0.0008201599, 0.011108398, -0.0056877136, -0.012550354,
0.01600647, -0.020309448, 0.007587433, 0.00007736683, 0.026550293,
0.007545471, 0.03955078, -0.05050659, -0.012161255, -0.04019165,
-0.002002716, -0.014381409, -0.0032672882, 0.0619812, -0.01638794,
-0.030532837, -0.025009155, 0.01826477, 0.02192688, -0.049346924,
-0.022613525, 0.036590576, 0.0009851456, -0.03062439, -0.08404541,
-0.018844604, -0.008270264, 0.009033203, -0.028656006, 0.00077199936,
0.010955811, -0.013267517, 0.024795532, 0.006126404, 0.02519226,
-0.0067825317, 0.033050537, 0.040405273, -0.0017957687, 0.019989014,
0.0055160522, -0.0289917, 0.0043029785, -0.038024902, -0.021331787,
0.000076293945, 0.07116699, -0.04071045, -0.0036392212, -0.034301758,
-0.0039024353, -0.027938843, -0.08569336, 0.025802612, -0.025100708,
-0.011383057, -0.014770508, -0.005870819, 0.04083252, 0.031921387,
0.0066452026, 0.0017795563, 0.020889282, 0.008766174, -0.04321289,
-0.0031108856, -0.02772522, 0.0066604614, -0.06689453, -0.033111572,
0.029876709, -0.024414062, 0.0031051636, -0.08502197, 0.0021133423,
0.0027370453, 0.0005173683, -0.0023441315, 0.0076828003, -0.046783447,
-0.018814087, -0.016342163, -0.043304443, -0.047943115, 0.039245605,
0.07208252, -0.053100586, 0.013511658, -0.0033283234, -0.031402588,
0.06463623, -0.030059814, -0.050231934, 0.023971558, -0.014717102,
-0.0073432922, -0.01171875, -0.02760315, -0.00058841705, 0.037109375,
-0.02684021, -0.018463135, -0.0025234222, -0.027053833, 0.050689697,
-0.026046753, -0.0067825317, 0.052337646, -0.04260254, 0.018539429,
-0.03692627, 0.022369385, -0.025039673, 0.01525116, 0.032165527,
-0.00422287, 0.0059661865, -0.0073280334, 0.017303467, -0.012710571,
-0.03338623, -0.03137207, -0.01789856, 0.005458832
],
[
0.050720215, -0.025253296, 0.018859863, -0.060180664, -0.008003235,
0.02192688, -0.020126343, 0.0068893433, 0.040252686, 0.08441162,
0.025665283, 0.0036411285, 0.03982544, -0.0021705627, -0.035705566,
0.01020813, 0.025894165, 0.018508911, 0.01966858, -0.026672363,
0.017089844, -0.010887146, 0.0019197464, 0.009437561, -0.015419006,
0.06439209, 0.04019165, -0.015975952, -0.02067566, -0.016555786,
-0.0010957718, -0.01838684, 0.045898438, 0.0023231506, -0.022155762,
0.011688232, -0.020401001, -0.026412964, -0.02255249, 0.0013628006,
-0.026275635, 0.018966675, -0.010017395, -0.049316406, -0.07763672,
0.0066070557, -0.039245605, 0.04776001, 0.039733887, -0.019332886,
0.0005726814, 0.017242432, 0.0050201416, -0.017471313, -0.015403748,
0.02255249, 0.001572609, -0.03491211, 0.02078247, 0.011054993,
0.006095886, 0.0012397766, 0.023040771, 0.025466919, 0.027023315,
0.035583496, 0.08203125, 0.011604309, 0.022216797, -0.026992798,
-0.04067993, -0.0070381165, 0.03677368, -0.02748108, -0.0335083,
0.025543213, 0.005680084, 0.0107803345, 0.035949707, -0.04876709,
0.095825195, 0.0022659302, 0.07824707, 0.012763977, -0.005420685,
0.011138916, 0.029067993, -0.03390503, -0.011413574, -0.013313293,
-0.019592285, 0.042510986, -0.042785645, 0.030960083, -0.016403198,
0.0018463135, 0.022537231, -0.0011920929, -0.044311523, -0.018127441,
0.01953125, -0.029327393, 0.021957397, -0.011230469, 0.0149002075,
0.035949707, -0.012054443, 0.070495605, 0.07702637, 0.020904541,
0.008781433, 0.049804688, -0.027801514, 0.008415222, -0.030349731,
0.02470398, -0.042541504, -0.0023899078, -0.0049552917, -0.0027923584,
-0.02558899, 0.025939941, 0.012519836, -0.090270996, -0.0047836304,
-0.02619934, -0.017822266, -0.016662598, 0.022766113, 0.012741089,
-0.0014429092, 0.040161133, 0.0011053085, -0.019882202, -0.039733887,
0.013244629, 0.022369385, 0.032043457, 0.009048462, 0.046539307,
0.019546509, -0.03488159, 0.022445679, 0.0027885437, 0.002456665,
0.035339355, 0.036834717, -0.018630981, -0.030380249, -0.004989624,
-0.042114258, 0.0056419373, 0.016189575, 0.011451721, -0.034851074,
-0.0005874634, -0.06793213, 0.0044517517, 0.010971069, 0.006412506,
0.014167786, -0.007965088, -0.04449463, -0.029205322, -0.076660156,
0.0044059753, 0.047851562, 0.025344849, 0.00012153387, 0.07354736,
-0.044189453, 0.043395996, 0.025848389, 0.049072266, -0.0019721985,
-0.0046691895, -0.0004079342, 0.006008148, 0.027114868, -0.042541504,
-0.04498291, -0.049926758, 0.020126343, -0.0037727356, -0.025283813,
0.009117126, -0.027618408, 0.0058937073, 0.068847656, -0.006713867,
-0.017364502, -0.026062012, 0.06549072, -0.021942139, 0.0008788109,
-0.057128906, -0.023498535, 0.014709473, -0.02331543, -0.0158844,
0.008895874, 0.040802002, -0.03564453, -0.00333786, -0.038757324,
-0.030136108, -0.0037994385, 0.030578613, -0.012077332, -0.001540184,
0.023529053, -0.034606934, -0.02178955, 0.023590088, -0.017700195,
-0.04168701, 0.0072021484, -0.018508911, -0.0042686462, -0.046661377,
0.03805542, 0.039154053, 0.0031318665, 0.07269287, 0.018325806,
0.021957397, -0.02003479, 0.028549194, 0.04058838, 0.03149414,
-0.012687683, -0.024353027, 0.01612854, 0.02494812, -0.035095215,
0.017822266, 0.021865845, 0.0592041, -0.015838623, -0.0044555664,
0.010139465, 0.0021953583, -0.04309082, 0.021942139, -0.005607605,
-0.056671143, -0.013801575, 0.03338623, -0.00020134449, 0.09112549,
0.022399902, 0.016906738, -0.0017642975, -0.012428284, -0.0362854,
0.022735596, 0.013328552, -0.0066070557, -0.033294678, 0.01398468,
0.0057754517, 0.005077362, -0.037017822, 0.013420105, 0.08148193,
-0.03665161, 0.024368286, -0.0016231537, -0.02973938, 0.0023231506,
0.029296875, -0.035705566, -0.00680542, 0.051330566, 0.019592285,
-0.042633057, -0.030792236, 0.008384705, 0.0121536255, 0.014945984,
-0.009254456, 0.009719849, -0.029510498, -0.02015686, 0.05722046,
0.02319336, -0.021194458, -0.050933838, -0.021987915, 0.026473999,
0.03729248, 0.043640137, 0.022491455, -0.018341064, 0.029937744,
0.004016876, 0.10595703, 0.014282227, 0.0027809143, 0.010871887,
0.022613525, 0.049621582, 0.041229248, -0.029891968, -0.003320694,
-0.011787415, 0.004383087, 0.016998291, -0.010032654, -0.008041382,
-0.03692627, 0.031036377, 0.0129470825, -0.014122009, -0.019683838,
-0.05117798, -0.012664795, -0.020492554, -0.06341553, -0.030059814,
0.050567627, -0.03253174, -0.010299683, 0.035095215, -0.023651123,
-0.011520386, 0.072143555, 0.0026130676, -0.028778076, 0.04336548,
0.06500244, 0.049957275, 0.008773804, -0.010055542, 0.008117676,
0.016036987, 0.013168335, -0.023147583, -0.023757935, -0.0026760101,
0.006137848, -0.05105591, 0.00415802, -0.027130127, -0.027694702,
0.024108887, -0.046569824, 0.009689331, 0.034698486, -0.0017528534,
-0.029556274, -0.018173218, -0.021865845, 0.0023612976, 0.024719238,
-0.026412964, -0.02180481, 0.03765869, 0.026000977, -0.04714966,
-0.016921997, -0.05758667, -0.054748535, 0.024841309, 0.012245178,
0.007209778, -0.011512756, 0.024383545, -0.017684937, 0.03744507,
0.029449463, -0.026687622, -0.0030841827, -0.029632568, -0.04284668,
-0.016342163, -0.014312744, -0.050567627, -0.022583008, -0.02734375,
-0.019989014, -0.035064697, 0.05279541, -0.0027122498, -0.02053833,
0.057525635, 0.007511139, -0.0078125, 0.045898438, -0.0032424927,
0.031051636, 0.035308838, -0.0138549805, -0.0050201416, -0.016052246,
-0.026550293, 0.02520752, 0.036895752, -0.053710938, 0.0058937073,
0.026107788, 0.011451721, -0.017547607, -0.013244629, 0.02998352,
-0.017974854, 0.041381836, -0.030639648, 0.0073928833, -0.047302246,
0.023864746, -0.034423828, -0.003648758, -0.05065918, 0.011138916,
-0.04852295, 0.0055122375, -0.016189575, -0.0057640076, 0.0034179688,
0.03491211, -0.012741089, 0.01234436, 0.023269653, 0.010360718,
0.008384705, -0.021636963, -0.014778137, 0.026123047, 0.040008545,
0.012611389, 0.0022697449, 0.012626648, 0.041900635, -0.051696777,
0.048339844, -0.019607544, -0.026443481, 0.011444092, -0.087524414,
0.03894043, 0.030303955, 0.0050468445, 0.01423645, -0.03149414,
0.027404785, 0.035705566, 0.02192688, -0.033203125, -0.017684937,
-0.020599365, -0.0021133423, 0.024536133, 0.04272461, 0.013031006,
0.06451416, -0.020019531, 0.02520752, 0.04586792, -0.009757996,
0.014183044, -0.001783371, -0.036743164, 0.0028133392, 0.0010175705,
-0.00422287, 0.041503906, -0.005466461, -0.013252258, 0.008262634,
-0.0030021667, -0.0049324036, -0.013511658, -0.03164673, 0.037475586,
0.0029945374, 0.00015115738, -0.010971069, -0.022445679, -0.020614624,
-0.01626587, 0.0262146, -0.0037288666, -0.057128906, -0.06072998,
0.014945984, -0.05984497, -0.0059280396, -0.016662598, 0.019958496,
-0.03164673, 0.021148682, 0.02230835, -0.03527832, -0.014122009,
0.021911621, 0.032958984, -0.088012695, 0.0036849976, -0.011276245,
-0.06100464, 0.031280518, -0.008308411, -0.009002686, 0.033081055,
-0.029373169, 0.040161133, 0.035125732, 0.021850586, 0.04827881,
0.034210205, 0.02708435, 0.018005371, 0.010238647, -0.02041626,
-0.026260376, 0.052246094, -0.014007568, -0.017105103, -0.014526367,
-0.018463135, -0.011711121, -0.026062012, 0.017852783, 0.054138184,
0.012672424, -0.035980225, 0.043273926, -0.024230957, -0.008758545,
-0.018615723, 0.01676941, -0.018859863, -0.0209198, 0.035064697,
-0.014350891, -0.020828247, 0.008285522, -0.003068924, -0.016143799,
-0.032165527, -0.022262573, 0.049102783, 0.00712204, 0.0054626465,
-0.004009247, 0.028030396, -0.003145218, 0.028076172, -0.05593872,
0.01663208, 0.03466797, -0.0049934387, -0.01928711, -0.043029785,
0.0158844, -0.036102295, 0.017303467, 0.021011353, 0.0009908676,
-0.038208008, 0.042633057, -0.07446289, 0.054840088, -0.04711914,
-0.0021762848, 0.049926758, 0.028167725, 0.053741455, -0.023956299,
-0.023895264, -0.05178833, 0.0007777214, -0.03994751, -0.011856079,
-0.016799927, 0.008026123, 0.009979248, 0.01687622, 0.032714844,
-0.03186035, 0.023513794, 0.009979248, 0.029571533, 0.03010559,
-0.02508545, -0.057891846, 0.03842163, -0.015686035, -0.024414062,
0.016281128, -0.027252197, 0.021057129, -0.019195557, -0.006385803,
-0.049987793, -0.019958496, -0.02558899, 0.032287598, -0.013839722,
0.005065918, 0.02394104, 0.01084137, -0.029052734, 0.028717041,
0.0074882507, 0.0003876686, 0.03640747, 0.0023765564, -0.012466431,
0.020553589, -0.014602661, -0.028244019, 0.02458191, -0.032348633,
-0.0647583, -0.014434814, 0.027313232, 0.04977417, -0.026382446,
0.027618408, 0.016967773, 0.004673004, 0.03100586, -0.046295166,
0.0013895035, 0.062805176, -0.014640808, -0.049987793, 0.01701355,
-0.04397583, 0.0052719116, -0.01637268, -0.029434204, 0.031341553,
0.045440674, -0.013305664, 0.021118164, -0.044189453, -0.03878784,
0.024749756, -0.014762878, -0.061187744, -0.006828308, 0.011177063,
0.01235199, -0.002626419, -0.024658203, 0.000019192696, -0.0031490326,
0.050872803, 0.023254395, -0.015792847, -0.0035362244, 0.026229858,
0.0042266846, 0.0102005005, 0.066711426, -0.023757935, 0.012107849,
0.009933472, 0.06274414, -0.013458252, -0.028686523, -0.034606934,
0.0041618347, 0.016479492, 0.053131104, -0.025756836, -0.026611328,
0.012031555, -0.007835388, -0.017440796, -0.055755615, 0.022537231,
0.016082764, 0.0038070679, 0.03378296, 0.0309906, -0.07714844,
-0.011024475, -0.018066406, -0.015197754, 0.045410156, -0.022125244,
0.024719238, -0.008857727, 0.010612488, 0.016296387, -0.022399902,
-0.06121826, -0.074645996, -0.008956909, -0.123046875, 0.010215759,
-0.022476196, -0.09185791, 0.017440796, 0.043121338, 0.010696411,
-0.050598145, -0.0027599335, -0.015457153, -0.014411926, 0.04473877,
0.0181427, -0.015945435, -0.04232788, 0.052734375, -0.0022201538,
-0.019012451, 0.05255127, -0.009086609, 0.0041046143, 0.0020389557,
-0.009750366, 0.015731812, -0.038208008, -0.015701294, 0.051116943,
-0.010101318, -0.09564209, -0.017471313, 0.028518677, -0.00011640787,
-0.051361084, -0.0032081604, 0.008171082, -0.0067749023, -0.045318604,
0.040863037, -0.03488159, -0.036895752, 0.0020503998, 0.0017614365,
-0.0036849976, 0.04119873, 0.016067505, 0.05102539, -0.0491333,
-0.026382446, -0.0073547363, 0.06097412, -0.002023697, 0.0009775162,
0.02268982, 0.013671875, 0.054626465, -0.0003399849, -0.0050315857,
0.019973755, 0.0138549805, -0.005508423, -0.0004553795, 0.05496216,
-0.013442993, -0.031829834, -0.005458832, 0.01272583, 0.0056495667,
-0.029373169, -0.021102905, -0.025268555, 0.04776001, -0.04849243,
0.009857178, 0.012306213, -0.033996582, -0.03717041, -0.010063171,
-0.019165039, 0.07092285, -0.01259613, 0.00023555756, -0.028305054,
-0.038513184, 0.00868988, 0.010032654, -0.009246826, 0.013023376,
-0.008224487, 0.07287598, -0.042419434, 0.00054454803, -0.010986328,
-0.0024337769, 0.03152466, 0.00422287, -0.0021686554, 0.024139404,
0.0060310364, 0.013374329, 0.040039062, 0.013916016, 0.02243042,
-0.018493652, 0.015960693, 0.020614624, 0.013214111, -0.02633667,
-0.03262329, -0.04510498, -0.005256653, 0.021316528, 0.0034618378,
0.053222656, 0.03540039, -0.034118652, -0.000050604343, 0.04309082,
-0.006801605, -0.014389038, -0.053619385, -0.035491943, -0.034820557,
0.00843811, 0.017333984, 0.039489746, -0.06512451, -0.08959961,
0.016235352, 0.039031982, -0.016174316, 0.016616821, -0.026489258,
0.00040388107, 0.009437561, -0.03869629, 0.014427185, 0.008460999,
0.0027809143, -0.012451172, 0.015144348, 0.049926758, 0.030151367,
-0.011665344, -0.030014038, 0.06109619, -0.009292603, 0.00025629997,
0.016540527, 0.027404785, -0.019958496, -0.019210815, 0.049713135,
-0.028930664, 0.01222229, -0.011878967, -0.009170532, 0.006866455,
0.04916382, -0.013084412, 0.025558472, -0.032226562, 0.018692017,
-0.047424316, 0.045074463, -0.046875, -0.01939392, 0.012382507,
-0.0030975342, -0.0060691833, -0.025848389, -0.016235352, -0.0043678284,
-0.040405273, -0.03677368, 0.03475952, -0.045288086, 0.04046631,
0.03353882, -0.038360596, -0.014350891, -0.039489746, -0.029663086,
-0.011779785, 0.012458801, 0.01423645, 0.013343811, 0.011833191,
0.041381836, 0.026473999, 0.11871338, 0.027236938, 0.052856445,
-0.055145264, 0.04748535, 0.018859863, 0.015701294, -0.021453857,
0.00687027, -0.011810303, 0.022766113, 0.026626587, -0.021392822,
-0.011657715, 0.0008201599, 0.011108398, -0.0056877136, -0.012550354,
0.01600647, -0.020309448, 0.007587433, 0.00007736683, 0.026550293,
0.007545471, 0.03955078, -0.05050659, -0.012161255, -0.04019165,
-0.002002716, -0.014381409, -0.0032672882, 0.0619812, -0.01638794,
-0.030532837, -0.025009155, 0.01826477, 0.02192688, -0.049346924,
-0.022613525, 0.036590576, 0.0009851456, -0.03062439, -0.08404541,
-0.018844604, -0.008270264, 0.009033203, -0.028656006, 0.00077199936,
0.010955811, -0.013267517, 0.024795532, 0.006126404, 0.02519226,
-0.0067825317, 0.033050537, 0.040405273, -0.0017957687, 0.019989014,
0.0055160522, -0.0289917, 0.0043029785, -0.038024902, -0.021331787,
0.000076293945, 0.07116699, -0.04071045, -0.0036392212, -0.034301758,
-0.0039024353, -0.027938843, -0.08569336, 0.025802612, -0.025100708,
-0.011383057, -0.014770508, -0.005870819, 0.04083252, 0.031921387,
0.0066452026, 0.0017795563, 0.020889282, 0.008766174, -0.04321289,
-0.0031108856, -0.02772522, 0.0066604614, -0.06689453, -0.033111572,
0.029876709, -0.024414062, 0.0031051636, -0.08502197, 0.0021133423,
0.0027370453, 0.0005173683, -0.0023441315, 0.0076828003, -0.046783447,
-0.018814087, -0.016342163, -0.043304443, -0.047943115, 0.039245605,
0.07208252, -0.053100586, 0.013511658, -0.0033283234, -0.031402588,
0.06463623, -0.030059814, -0.050231934, 0.023971558, -0.014717102,
-0.0073432922, -0.01171875, -0.02760315, -0.00058841705, 0.037109375,
-0.02684021, -0.018463135, -0.0025234222, -0.027053833, 0.050689697,
-0.026046753, -0.0067825317, 0.052337646, -0.04260254, 0.018539429,
-0.03692627, 0.022369385, -0.025039673, 0.01525116, 0.032165527,
-0.00422287, 0.0059661865, -0.0073280334, 0.017303467, -0.012710571,
-0.03338623, -0.03137207, -0.01789856, 0.005458832
]
],
meta: {
api_version: {
version: '1'
},
billed_units: {
input_tokens: 8
}
},
response_type: 'embeddings_floats'
};
export default data;

@ -5,9 +5,36 @@ export interface ModelSelectionItem extends Global.BaseOption<string> {
}
export interface MessageItem {
role: string;
content: string;
title?: string;
imgs?: { uid: string | number; dataUrl: string }[];
role: string;
title?: string;
uid: number;
}
type SchemaType =
| 'Input'
| 'InputNumber'
| 'Textarea'
| 'Select'
| 'Slider'
| 'Checkbox';
export interface ParamsSchema {
type: SchemaType;
name: string;
label: {
text: string;
isLocalized?: boolean;
};
options?: Global.BaseOption<string>[];
value?: string | number | boolean | string[];
min?: number;
max?: number;
step?: number;
disabled?: boolean;
defaultValue?: string | number | boolean;
rules: { required: boolean; message: string }[];
placeholder?: string;
attrs?: Record<string, any>;
}

@ -0,0 +1,116 @@
import IconFont from '@/components/icon-font';
import HotKeys from '@/config/hotkeys';
import { PageContainer } from '@ant-design/pro-components';
import { useIntl } from '@umijs/max';
import { Button, Space } from 'antd';
import classNames from 'classnames';
import _ from 'lodash';
import { useCallback, useEffect, useRef, useState } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { queryModelsList } from './apis';
import GroundEmbedding from './components/ground-embedding';
import './style/play-ground.less';
const PlaygroundEmbedding: React.FC = () => {
const intl = useIntl();
const groundLeftRef = useRef<any>(null);
const ref = useRef<any>(null);
const [modelList, setModelList] = useState<Global.BaseOption<string>[]>([]);
const [loaded, setLoaded] = useState(false);
const handleViewCode = useCallback(() => {
ref.current?.viewCode?.();
}, [ref.current]);
const handleToggleCollapse = useCallback(() => {
ref.current?.setCollapse?.();
}, [ref.current]);
useEffect(() => {
const getModelListByEmbedding = async () => {
try {
const params = {
embedding_only: true
};
const res = await queryModelsList(params);
const list = _.map(res.data || [], (item: any) => {
return {
value: item.id,
label: item.id
};
}) as Global.BaseOption<string>[];
return list;
} catch (error) {
console.error(error);
return [];
}
};
const fetchData = async () => {
try {
const [dataList] = await Promise.all([getModelListByEmbedding()]);
setModelList(dataList);
} catch (error) {
setLoaded(true);
}
};
fetchData();
}, []);
const renderExtra = () => {
return (
<Space key="buttons">
<Button
size="middle"
onClick={handleViewCode}
icon={<IconFont type="icon-code" className="font-size-16"></IconFont>}
>
{intl.formatMessage({ id: 'playground.viewcode' })}
</Button>
<Button
size="middle"
onClick={handleToggleCollapse}
icon={
<IconFont
type="icon-a-layout6-line"
className="font-size-16"
></IconFont>
}
></Button>
</Space>
);
};
useHotkeys(
HotKeys.RIGHT.join(','),
() => {
groundLeftRef.current?.setCollapse?.();
},
{
preventDefault: true
}
);
return (
<PageContainer
ghost
header={{
title: intl.formatMessage({ id: 'menu.playground.embedding' }),
breadcrumb: {}
}}
extra={renderExtra()}
className={classNames('playground-container chat')}
>
<div className="play-ground">
<div className="chat">
<GroundEmbedding
ref={ref}
modelList={modelList}
loaded={loaded}
></GroundEmbedding>
</div>
</div>
</PageContainer>
);
};
export default PlaygroundEmbedding;

@ -22,9 +22,6 @@ const Playground: React.FC = () => {
const groundLeftRef = useRef<any>(null);
const groundRerankerRef = useRef<any>(null);
const [modelList, setModelList] = useState<Global.BaseOption<string>[]>([]);
const [rerankerModelList, setRerankerModelList] = useState<
Global.BaseOption<string>[]
>([]);
const [loaded, setLoaded] = useState(false);
const optionsList = [
{
@ -37,11 +34,6 @@ const Playground: React.FC = () => {
value: 'compare',
icon: <OneToOneOutlined />
}
// {
// label: 'Rerank',
// value: 'reranker',
// icon: <FileSearchOutlined />
// }
];
const handleViewCode = useCallback(() => {
@ -73,17 +65,6 @@ const Playground: React.FC = () => {
label: 'Compare',
children: <MultipleChat modelList={modelList} loaded={loaded} />
}
// {
// key: 'reranker',
// label: 'Reranker',
// children: (
// <GroundReranker
// ref={groundRerankerRef}
// modelList={rerankerModelList}
// loaded={loaded}
// ></GroundReranker>
// )
// }
];
useEffect(() => {
@ -113,32 +94,11 @@ const Playground: React.FC = () => {
return [];
}
};
const getModelListByReranker = async () => {
try {
const params = {
reranker: true
};
const res = await queryModelsList(params);
const list = _.map(res.data || [], (item: any) => {
return {
value: item.id,
label: item.id
};
}) as Global.BaseOption<string>[];
return list;
} catch (error) {
console.error(error);
return [];
}
};
const fetchData = async () => {
try {
const [modelist, rerankerModelList] = await Promise.all([
getModelList(),
getModelListByReranker()
]);
const modelist = await getModelList();
setModelList(modelist);
setRerankerModelList(rerankerModelList);
} catch (error) {
setLoaded(true);
}

@ -7,9 +7,9 @@
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid var(--ant-color-split);
padding: 8px 14px;
padding-right: 6px;
border: 1px solid var(--ant-color-border);
border-radius: var(--border-radius-base);
padding: 8px 6px 8px 14px;
cursor: pointer;
height: 41px;
transition: background-color 0.3s ease;
@ -33,7 +33,8 @@
.title {
display: flex;
align-items: center;
max-width: 300px;
width: 300px;
flex: 1;
}
}
}

@ -41,6 +41,7 @@
flex-direction: column;
position: relative;
height: calc(100vh - 72px);
width: 100%;
.message-list-wrap {
display: flex;

@ -32,6 +32,7 @@
flex: 1;
display: flex;
flex-direction: column;
width: 100%;
}
.params {

@ -16,6 +16,7 @@
top: 0;
background: var(--color-white-1);
z-index: 100;
align-items: center;
}
}

Loading…
Cancel
Save