@@ -1,15 +0,0 @@ -import { Template } from '@/src/domains/copywrite/proxy/types/template' - -export const emptyTemplate: Template = { - id: 1000, - title: 'Пустой шаблон', - content: '', - keywords: [], - tov: '', - language: '', - theme: '', - resources_urls: [], - picture: '123', - target_audience: '', - description: '', -} @@ -1,6 +0,0 @@ -import { ContentState, EditorState } from 'draft-js' - -export const toEditorState = (text: string) => { - const newContentState = ContentState.createFromText(text) - return EditorState.createWithContent(newContentState) -} @@ -1,13 +0,0 @@ -export interface Template { - id: number - title: string - description: string - picture: string - theme: string - content: string - target_audience: string - resources_urls: string[] - keywords: string[] - tov: string - language: string -} @@ -1,34 +0,0 @@ -import axios from 'axios' - -import { Template } from '@/src/domains/copywrite/proxy/types/template' -import { API_URL } from '@/src/shared/lib/constants' -import { Message } from '@/src/shared/lib/types/model' - -export class CopywriteProxy { - token?: string - - constructor(token: string | undefined) { - this.token = token - } - - static async getGeneration(token?: string): Promise { - const { data } = await axios.get(API_URL + '/copywrite/', { - headers: { Authorization: `Bearer ${token}` }, - }) - return data - } - - static async getTemplates(token?: string): Promise { - const { data } = await axios.get(API_URL + '/copywrite/templates/', { - headers: { Authorization: `Bearer ${token}` }, - }) - return data - } - - static async createTemplates(token?: string): Promise { - const { data } = await axios.post(API_URL + '/copywrite/templates/', { - headers: { Authorization: `Bearer ${token}` }, - }) - return data - } -} @@ -1,30 +0,0 @@ -import React from 'react' -import { Typography } from '@mui/material' - -import { Input, Slider } from '@/src/shared' - -import { FiltersProps } from './types' - -export function Filters({ - strength, - setStrength, - upscale, - setUpscale, - negative_prompt, - num_inference_steps, - guidance_scale, - setGuidanceScale, - setNegative_prompt, - setSteps, -}: FiltersProps) { - return ( - <> - - - - - Запрос для исключения из генерации - - - ) -} @@ -1,17 +0,0 @@ -import { ChangeEvent } from 'react' - -export interface Setting { - strength: number - upscale: number - negative_prompt: string - num_inference_steps: number - guidance_scale: number -} - -export interface FiltersProps extends Setting { - setStrength: (e: Event, cur: number | number[]) => void - setUpscale: (e: Event, cur: number | number[]) => void - setGuidanceScale: (e: Event, cur: number | number[]) => void - setNegative_prompt: (e: ChangeEvent) => void - setSteps: (e: Event, cur: number | number[]) => void -} @@ -1,36 +0,0 @@ -import React from 'react' -import { Stack, Typography } from '@mui/material' - -import { Input, Slider } from '@/src/shared' -import { SelectUI } from '@/src/shared/ui/select' - -import { Filters } from './types' - -const sizes = [128, 256, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024] - -export function EpicPhotoFilters({ - guidance_scale, - height, - negative_prompt, - num_inference_steps, - num_outputs, - setGuidance_scale, - setHeight, - setNegative_prompt, - setNum_inference_steps, - setNum_outputs, - setWidth, - width, -}: Filters) { - return ( - <> - - - - - - Запрос для исключения из генерации - - - ) -} @@ -1,2 +0,0 @@ -export * from './epic-photo-filters' -export * from './types' @@ -1,20 +0,0 @@ -import { ChangeEvent, ChangeEventHandler } from 'react' -import { SelectChangeEvent } from '@mui/material' - -export interface Setting { - num_outputs: number - negative_prompt: string - width: number - height: number - num_inference_steps: number - guidance_scale: number -} - -export interface Filters extends Setting { - setWidth: (e: SelectChangeEvent) => void - setHeight: (e: SelectChangeEvent) => void - setNum_outputs: (e: Event, cur: number | number[]) => void - setNum_inference_steps: (e: Event, cur: number | number[]) => void - setGuidance_scale: (e: Event, cur: number | number[]) => void - setNegative_prompt: (e: ChangeEvent) => void -} @@ -1,2 +0,0 @@ -export * from './kandinsky-filters' -export * from './types' @@ -1,76 +0,0 @@ -import React from 'react' -import { Box, Typography } from '@mui/material' - -import { Input, Slider, SwitchCustom } from '@/src/shared' -import { SelectUI } from '@/src/shared/ui/select' - -import { Filters } from './types' - -export function KandinskyFilters({ - height, - isTranslate, - negativePrompt, - num_outputs, - setHeight, - setNegative_prompt, - setNumber, - setSteps, - setWidth, - steps, - width, - setIsTranslate, -}: Filters) { - return ( - <> - Настройки - - - - - - - - - - - - - - - - Переводить запрос - - - - - - - Запрос для исключения из генерации - - - - - ) -} @@ -1,20 +0,0 @@ -import { ChangeEvent } from 'react' -import { SelectChangeEvent } from '@mui/material' - -export interface Setting { - steps: number - num_outputs: number - width: number - height: number - isTranslate: boolean - negativePrompt: string -} - -export interface Filters extends Setting { - setWidth: (e: SelectChangeEvent) => void - setHeight: (e: SelectChangeEvent) => void - setSteps: (e: Event, cur: number | number[]) => void - setNumber: (e: Event, cur: number | number[]) => void - setNegative_prompt: (e: ChangeEvent) => void - setIsTranslate: () => void -} @@ -1,33 +0,0 @@ -import React from 'react' -import { Typography } from '@mui/material' - -import { Input, Slider } from '@/src/shared' -import { SelectUI } from '@/src/shared/ui/select' - -import { FiltersProps } from './types' - -const sizes = [384, 512, 576, 640, 704, 768] - -export function Filters({ - height, - negative_prompt, - num_inference_steps, - num_outputs, - setHeight, - setNegative_prompt, - setNumOutputs, - setSteps, - setWidth, - width, -}: FiltersProps) { - return ( - <> - - - - - Запрос для исключения из генерации - - - ) -} @@ -1,2 +0,0 @@ -export * from './filters' -export * from './types' @@ -1,18 +0,0 @@ -import { ChangeEvent } from 'react' -import { SelectChangeEvent } from '@mui/material' - -export interface Setting { - width: number - height: number - num_outputs: number - negative_prompt: string - num_inference_steps: number -} - -export interface FiltersProps extends Setting { - setWidth: (e: SelectChangeEvent) => void - setHeight: (e: SelectChangeEvent) => void - setNumOutputs: (e: Event, cur: number | number[]) => void - setSteps: (e: Event, cur: number | number[]) => void - setNegative_prompt: (e: ChangeEvent) => void -} @@ -1,12 +0,0 @@ -export const costModel: any = { - 'gpt-3.5-turbo': 0.0017, - 'gpt-3.5-turbo-16k': 0.00255, - 'text-davinci-003': 0.017, - 'text-curie-001': 0.0017, - 'text-babbage-001': 0.000425, - 'text-ada-001': 0.000034, - 'gpt-4': 0.01785, - 'gpt-4-32k': 0.0255, -} - -export const textTooltipCalculating = 'Столько токенов спишется за ваш текущий запрос.' @@ -1,8 +0,0 @@ -const price = { - '1024x1024': 8.5, - '512x512': 7.65, - '256x256': 6.8, -} -export const calculatingDalle = (count: number, quality: '1024x1024' | '512x512' | '256x256') => { - return price[quality] * count -} @@ -1,59 +0,0 @@ -import React from 'react' -import { encoding_for_model } from '@dqbd/tiktoken' - -import { costModel } from '@/src/features/calculation-tokens-gpt/lib/constants' -import { calculatingDalle } from '@/src/features/calculation-tokens-gpt/model/calculating-dalle' -import { ImessageContext } from '@/src/shared/lib/types/types-gpt' -import { TypeModelGPT, typeModels } from '@/src/widgets/filters-gpt/lib/constants' - -const getFullModelTypeName = (name: string): TypeModelGPT => { - return typeModels.filter((el) => el.key === name)[0].value as TypeModelGPT -} - -const getTransformPrice = (price: number, isGpt: boolean = false) => { - if (price === 0) { - return '0' - } - - return price < 1 ? ' < 1' : `${isGpt ? '≈' : ''} ${price.toFixed(2).replace('.', ',')}` -} - -const checkIsAdditional = (model: string, isAdditional?: boolean): any => { - if (model === 'gpt-3.5-turbo') { - return isAdditional ? 'gpt-3.5-turbo-16k' : model - } - - if (model === 'gpt-4') { - return isAdditional ? 'gpt-4-32k' : model - } - - return model -} -export const useCalculating = ( - model: 'gpt' | 'dalle' | 'sd', - count?: number, - quality?: any, - prompt?: string, - gptType?: TypeModelGPT, - isAdditionalCtx?: boolean, - context?: { message: string; uid: string }[] -): string => { - if (model === 'dalle') { - return getTransformPrice(calculatingDalle(count as number, quality)) - } - - // eslint-disable-next-line react-hooks/rules-of-hooks - const modelFullName = React.useMemo(() => getFullModelTypeName(gptType as TypeModelGPT), [gptType]) - - // eslint-disable-next-line react-hooks/rules-of-hooks - const encoding = React.useMemo(() => encoding_for_model(modelFullName), [gptType]) - - const tokens = - context?.length === 0 - ? encoding.encode(prompt as string).length - : encoding.encode((prompt as string) + context?.map((el) => el.message).toString()).length - - const price = prompt ? costModel[checkIsAdditional(modelFullName, isAdditionalCtx)] * tokens + 0.1 : 0 - - return getTransformPrice(price, true) -} @@ -1,89 +0,0 @@ -import React, { memo } from 'react' -import { Box, Tooltip } from '@mui/material' -import Typography from '@mui/material/Typography' -import Image from 'next/image' - -import { useCalculating } from '@/src/features/calculation-tokens-gpt/model/use-calculating' -import TooltipCalculating from '@/src/features/calculation-tokens-gpt/ui/tooltip-calculating' -import { useAppSelector } from '@/src/main/store/store' -import { baseColor } from '@/src/shared/lib/constants/colors' -import { ImessageContext } from '@/src/shared/lib/types/types-gpt' -import { TypeModelGPT } from '@/src/widgets/filters-gpt/lib/constants' - -interface ICalculationTokenProps { - model: 'gpt' | 'sd' | 'dalle' - quality?: string - count?: number - prompt?: string - isAdditional?: boolean - gptType?: TypeModelGPT - context?: { message: string; uid: string }[] -} - -export const Calculation: React.FC = memo(({ prompt, gptType, context, isAdditional, count, quality, model }) => { - const price = useCalculating(model, count, quality, prompt, gptType, isAdditional, context) - - const theme = useAppSelector((state) => state.theme.theme) - - return ( - } - componentsProps={{ - tooltip: { - sx: { - '&.MuiTooltip-tooltip': { - '&.MuiTooltip-tooltipPlacementBottom': { - marginTop: '2px', - }, - '&.MuiTooltip-tooltipPlacementTop': { - marginBottom: '7px', - }, - '&.MuiTooltip-tooltipPlacementLeft': { - marginRight: '24px', - }, - }, - bgcolor: theme === 'light' ? 'white' : '#4B4B4B', - borderRadius: '10px', - '& .MuiTooltip-arrow': { - color: theme === 'light' ? 'white' : '#4B4B4B', - }, - boxShadow: '0px 0px 4px rgba(0, 0, 0, 0.04), 0px 4px 32px rgba(0, 0, 0, 0.16)', - }, - }, - }} - arrow - > - - {''} - - {price} - - - - ) -}) - -Calculation.displayName = 'Calculation' @@ -1,39 +0,0 @@ -import React from 'react' -import { Box } from '@mui/material' -import Typography from '@mui/material/Typography' - -import { textTooltipCalculating } from '@/src/features/calculation-tokens-gpt/lib/constants' -import { useAppSelector } from '@/src/main/store/store' - -const TooltipCalculating = ({ model = 'dalle' }: { model?: 'gpt' | 'dalle' | 'sd' }) => { - const theme = useAppSelector((state) => state.theme.theme) - - return ( - - - {textTooltipCalculating} - - - {model === 'gpt' && ( - - Фактическое значение может немного отличаться - - )} - - ) -} - -export default TooltipCalculating @@ -1 +0,0 @@ -export { Calculation } from './ui/calculation' @@ -56,10 +56,3 @@ export const options: Options = { doneLabel: 'Готово', disableInteraction: true, } - -export const responseGPT = - 'Для нахождения минимального элемента в массиве предлагаю написать собственную функцию с использованием функции высшего порядка reduce и стандартного метода Math.min():\n' + - '\n' + - 'const numbers = [-94, 87, 12, 0, -67, 32];\n' + - 'const min = (values) => values.reduce((x, y) => Math.min(x, y));\n' + - 'console.log(min(numbers)); // => -94\n' @@ -4,7 +4,7 @@ import Switch from '@mui/material/Switch' import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { name: string @@ -8,7 +8,7 @@ import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' import { InputStyleDark, InputStyleLight } from '@/src/shared' import { useThemeAndDevice } from '@/src/shared/lib/hooks' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { title: string @@ -5,7 +5,7 @@ import { MenuItem, Select, SelectChangeEvent, Stack, Typography } from '@mui/mat import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch, useAppSelector } from '@/src/main/store/store' import { baseColor } from '@/src/shared/lib/constants/colors' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { selects: { availables: string[]; default: any; end: number; start: number; step: number } @@ -3,7 +3,7 @@ import * as React from 'react' import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' import { Slider as Sl } from '@/src/shared' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { title: string @@ -15,10 +15,6 @@ export type CardProps = { } const ChatCard = ({ text, icon, title, uid, slug, accessed_models }: CardProps) => { - useEffect(() => { - console.log(accessed_models) - }, [accessed_models]) - return ( @@ -5,7 +5,7 @@ import { MenuItem, Select, SelectChangeEvent, Stack, Typography } from '@mui/mat import { useAppSelector } from '@/src/main/store/store' import { IModelVersions } from '@/src/shared/api/models/models' import { baseColor } from '@/src/shared/lib/constants/colors' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface ISelect { value: string @@ -454,7 +454,8 @@ textarea { .smallScroll::-webkit-scrollbar-track { background: initial; - margin: 21px 0; + /*margin: 21px 0;*/ + margin: 5px 0; } .smallScroll::-webkit-scrollbar-thumb { @@ -34,22 +34,18 @@ export async function getServerSideProps(context: any): Promise<{ export default function Index({ device, deviceOs, uuid }: IParams) { const desktop = device === 'desktop' + const [templateType, setTemplateType] = useState('template') + const [editor, setEditor] = useState(null) + const [copywrite, setCopywrite] = useState(null) const [tab, setTab] = useState<'query' | 'resp' | null>(null) - const { push, query } = useRouter() const [isSettings, setIsSettings] = useState(false) - const { data } = useSession() - const [copywrite, setCopywrite] = useState(null) - const [editor, setEditor] = useState(null) - const [templateType, setTemplateType] = useState('template') const dispatch = useAppDispatch() + const { push, query } = useRouter() const { error, showError } = useShowData() + const { data } = useSession() useEffect(() => { - const socket = new WebSocket(editorEndpoints.webSocket.url + uuid + '/') - - socket.onopen = function () { - console.log('Соединение установлено') - } + const socket = new WebSocket(`${editorEndpoints.webSocket.url}/copywrite/copywrites/${uuid}/`) socket.onmessage = function (event) { const event_data = JSON.parse(event.data).event_data @@ -60,10 +56,6 @@ export default function Index({ device, deviceOs, uuid }: IParams) { } } - socket.onclose = function (event) { - console.log('Соединение закрыто') - } - socket.onerror = function (error) { showError('Произошла ошибка генерации, перезагрузите страницу') } @@ -8,7 +8,6 @@ import { useRouter } from 'next/router' import { useSession } from 'next-auth/react' import { serverSideTranslations } from 'next-i18next/serverSideTranslations' -import { Setting } from '@/src/domains/images-bots/babes/types' import BotParamsMap from '@/src/features/bot-params/bot-params-map' import Title from '@/src/features/title/title' import { ChatSelect } from '@/src/main/components/chat_select' @@ -24,6 +23,7 @@ import { IModel } from '@/src/shared/api/models/models' import { getTypeDevice } from '@/src/shared/lib/helpers' import { getDeviceOs } from '@/src/shared/lib/helpers/get-type-device' import { useShowData } from '@/src/shared/lib/hooks' +import { Setting } from '@/src/widgets/images/api/types' import { ImageMessagesList } from '@/src/widgets/messages/image-messages-list' export async function getServerSideProps(context: any): Promise<{ props: any }> { @@ -1,32 +1,6 @@ -export const subMenuTitle = { - color: '#5A5A5A', - fontSize: '19px', - fontWeight: '600px', - lineHeight: '28.5px', -} - export const username = { color: '#7F7DF3', fontSize: '19px', fontWeight: '600px', lineHeight: '28.5px', } -export const subscriptionColumn = { - color: '#868686', - fontSize: '15px', - fontWeight: '600px', - lineHeight: '17.61px', -} -export const subMenuTitleNight = { - color: '#E1E1E1', - fontSize: '19px', - fontWeight: '600px', - lineHeight: '28.5px', -} - -export const subscriptionColumnNight = { - color: '#A6A5A5', - fontSize: '15px', - fontWeight: '600px', - lineHeight: '17.61px', -} @@ -8,7 +8,7 @@ import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' import { InputStyleDark, InputStyleLight } from '@/src/shared' import { useThemeAndDevice } from '@/src/shared/lib/hooks' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { title: string @@ -3,7 +3,7 @@ import * as React from 'react' import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' import { Slider as Sl } from '@/src/shared' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { title: string @@ -4,7 +4,7 @@ import Switch from '@mui/material/Switch' import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { title: string @@ -0,0 +1,50 @@ +import { Slider, styled } from '@mui/material' + +export const PrettoSlider = styled(Slider)({ + width: '90%', + color: '#EFF0F2', + height: 5, + '& .MuiSlider-track': { + border: 'none', + backgroundColor: '#EFF0F', + }, + '.MuiSlider-rail': { + border: 'none', + backgroundColor: '#EFF0F', + }, + '& .MuiSlider-thumb': { + height: 17, + width: 17, + backgroundColor: '#fff', + border: '2px solid #7F7DF3', + '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': { + boxShadow: 'inherit', + }, + '&:before': { + display: 'none', + }, + }, +}) +export const PrettoSliderDark = styled(Slider)({ + width: '90%', + + height: 5, + '& .MuiSlider-track': { + border: 'none', + backgroundColor: '#40404E', + }, + '.MuiSlider-rail': { + border: 'none', + backgroundColor: '#40404E', + }, + '& .MuiSlider-thumb': { + height: 17, + width: 17, + backgroundColor: '#373737', + border: '2px solid #7F7DF3', + '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': {}, + '&:before': { + display: 'none', + }, + }, +}) @@ -3,7 +3,7 @@ import { Typography } from '@mui/material' import Box from '@mui/material/Box' import { useAppSelector } from '@/src/main/store/store' -import { PrettoSlider, PrettoSliderDark } from '@/src/widgets/filters-gpt/ui/filters' +import { PrettoSlider, PrettoSliderDark } from '@/src/shared/ui/slider/slider-styles' export const Slider = ({ value, @@ -1,10 +1,11 @@ import axios from 'axios' +import process from 'process' import { API_URL } from '@/src/shared/lib/constants' export const editorEndpoints = { webSocket: { - url: 'ws://devapi.air.fail:8000/rtc/copywrite/copywrites/', + url: process.env.NEXT_PUBLIC_WS_API_URL, }, UpdateCopywriteContent: async (id: string | string[], req_body: { input_content: string }, token?: string) => { @@ -4,7 +4,6 @@ import draftToHtml from 'draftjs-to-html' const getTextFromEditor = (editorState: EditorState) => { const contentState = editorState.getCurrentContent() const plainText = contentState.getPlainText() - console.log('Editor Content:', plainText) return plainText } @@ -12,6 +11,5 @@ export const getHtmlText = (editorState: EditorState) => { const contentState = editorState.getCurrentContent() const rawContent = convertToRaw(contentState) const htmlContent = draftToHtml(rawContent) - console.log('HTML Content:', htmlContent) return htmlContent } @@ -91,6 +91,10 @@ justify-content: start; gap: 20px; align-items: start; + padding-right: 10px; + + overflow-y: scroll; + max-height: 55vh; .generateWrap{ display: flex; @@ -163,4 +167,4 @@ justify-content: center; gap: 5px; width: 100%; -} +} \ No newline at end of file @@ -15,7 +15,7 @@ export const MyCopywrite = ({ desktop, copywritesList, changeFavouriteHandler }: return ( <> ГЕНЕРАЦИИ - + {copywritesList?.map((el) => { let href = '' @@ -1,84 +0,0 @@ -const descriptionChatGPT = - 'Модели GPT-3.5 могут понимать и генерировать естественный язык или код. Наша самая мощная и экономичная модель серии GPT-3.5 - gpt-3.5-turbo, которая была оптимизирована для чата, но также хорошо работает и для традиционных операций по выполнению заданий.' -const descriptionChatGPT4 = - 'GPT-4 более творческий и совместный, чем когда-либо прежде. Он может генерировать, редактировать и повторять с пользователями творческие и технические задачи письма, такие как сочинение песен, написание сценариев или изучение стиля письма пользователя.\n' + - 'GPT-4 может принимать изображения в качестве входных данных и генерировать подписи, классификации и анализы.\n' + - 'GPT-4 способен обрабатывать более 25 000 слов текста, что позволяет использовать такие варианты использования, как создание длинного контента, расширенные беседы, а также поиск и анализ документов.' - -const advantagesChatGPT = '' - -const descriptionDaVinci = - 'Самая мощная модель в серии GPT-3. Может выполнять любую задачу эффективнее своих предшественников и демонстрировать результат, часто более высокого качества, более развернутый и гораздо более точный. Обрабатывает до 4000 токенов за запрос.' -const advantagesDaVinci = - 'Обрабатывает максимально сложные запросы, выводит причину и следствие в любом виде контента, способен работать с нестандартным подходом, ищет, анализирует и обобщает информацию по запросу, тратит в 10 раз больше токенов, чем модели ChaGPT-35 и Curie.' -const warningDaVinci = 'Тратит в 10 раз больше токенов, чем модели ChatGPT и Curie.' - -const descriptionCurie = 'Очень мощный, при этом быстрее и дешевле, чем text-DaVinci-003.' -const advantagesCurie = 'Способен выполнять языковой перевод, классифицировать и обобщать информацию, соблюдать заданный эмоциональный тон.' - -const descriptionBabbage = 'Способен выполнять простые задачи, очень быстрый и недорогой.' -const advantagesBabbage = 'Способен классифицировать информацию по заданным параметрам и осуществлять семантический поиск.' - -const descriptionAda = 'Способен выполнять простые задачи. В серии GPT-3 является самой быстрой моделью по самой низкой цене.' -const advantagesAda = 'Способен синтаксически анализировать текст, выполнять базовую классификацию, подбирать ключевые слова.' - -export const ParameterTopP = - 'Тор_p - альтернатива температуре. Не\n' + - 'советуем менять top_p и температуру\n' + - 'одновременно. Меняется в интервале от 0\n' + - 'до 1. Более высокие значения дают более\n' + - 'креативные ответы.\n' - -export const ParameterTemperature = - 'Температура влияет на вероятность\n' + - 'случайного ответа: чем выше температура,\n' + - 'тем больше вероятность получить\n' + - 'креативный ответ. Наоборот, при низкой\n' + - 'температуре ответ будет более точным и\n' + - 'предсказуемым. Меняется в интервале от\n' + - '0 до 1. Значение по-умолчанию 0.5.\n' - -export const ParameterPresencePenalty = - 'Максимальное количество токенов для\n' + - 'генерации ответа ботом. Токен это часть\n' + - 'слова или слово целиком. Бот оперирует\n' + - 'токенами, разбивая весь текст на токены.\n' + - '750 слов это в среднем 1000 токенов.' - -export interface ITypeModels { - key: string - value: string - description: string - advantages?: string - warning?: string -} - -export const typeModels: ITypeModels[] = [ - { - key: 'GPT-4o', - value: 'gpt-4o', - description: '', - }, - { - key: 'GPT-4 Turbo Preview', - value: 'gpt-4-turbo-preview', - description: '', - }, - { - key: 'GPT-4 Turbo', - value: 'gpt-4-turbo', - description: '', - }, - { - key: 'GPT-4', - value: 'gpt-4', - description: descriptionChatGPT4, - }, - { - key: 'GPT-3.5', - value: 'gpt-3.5-turbo', - description: descriptionChatGPT, - }, -] - -export type TypeModelGPT = 'gpt-3.5-turbo' | 'text-davinci-003' | 'text-curie-001' | 'text-babbage-001' | 'text-ada-001' @@ -1,48 +0,0 @@ -import React from 'react' -import { Drawer, MenuItem, Slider, Typography } from '@mui/material' -import Stack from '@mui/material/Stack' - -import { useAppSelector } from '@/src/main/store/store' -import { Select } from '@/src/shared' -import { IFiltersChatGPT } from '@/src/widgets/filters-gpt/ui/filters' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' - -const FiltersMobile: React.FC = ({ - open, - handleCloseFilters, - parameterTopP, - temperatureModel, - typeModels, - typeModel, - handleChangeTypeModel, - changeTemperature, - changeTopP, - changePresence, - parameterPresence, - resetSettings, -}) => { - const theme = useAppSelector((state) => state.theme.theme) - - return ( - - ) -} - -export default FiltersMobile @@ -1,291 +0,0 @@ -import React, { memo, useMemo } from 'react' -import SettingsSuggestIcon from '@mui/icons-material/SettingsSuggest' -import { Box, Button, MenuItem, Slider, Tooltip, Typography } from '@mui/material' -import { SelectChangeEvent } from '@mui/material/Select' -import Stack from '@mui/material/Stack' -import { styled } from '@mui/material/styles' - -import { TutorialContext } from '@/src/features/tutorial-context/tutorial-context' -import { useAppSelector } from '@/src/main/store/store' -import { Select, Slider as Sl, SwitchCustom, TooltipCustom } from '@/src/shared' -import { ITypeModels, ParameterPresencePenalty, ParameterTemperature, ParameterTopP } from '@/src/widgets/filters-gpt/lib/constants' -import FiltersMobile from '@/src/widgets/filters-gpt/ui/filters-mobile' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' - -import 'intro.js/introjs.css' - -interface IFiltersChatGPTMobile { - open?: boolean - handleOpenFilters?: () => void - handleCloseFilters?: () => void -} - -export interface IFiltersChatGPT extends IFiltersChatGPTMobile { - device: 'mobile' | 'desktop' - typeModel: string - typeModels: ITypeModels[] - temperatureModel: number | number[] - parameterTopP: number | number[] - parameterPresence: number | number[] - isAdditional?: boolean - handleChangeTypeModel: (e: SelectChangeEvent) => void - changeTemperature: (e: Event, current: number | number[]) => void - changeTopP: (e: Event, current: number | number[]) => void - changePresence: (e: Event, current: number | number[]) => void - resetSettings: () => void - changeAdditionalCtx?: () => void -} - -export const PrettoSlider = styled(Slider)({ - width: '90%', - color: '#EFF0F2', - height: 5, - '& .MuiSlider-track': { - border: 'none', - backgroundColor: '#EFF0F', - }, - '.MuiSlider-rail': { - border: 'none', - backgroundColor: '#EFF0F', - }, - '& .MuiSlider-thumb': { - height: 17, - width: 17, - backgroundColor: '#fff', - border: '2px solid #7F7DF3', - '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': { - boxShadow: 'inherit', - }, - '&:before': { - display: 'none', - }, - }, -}) -export const PrettoSliderDark = styled(Slider)({ - width: '90%', - - height: 5, - '& .MuiSlider-track': { - border: 'none', - backgroundColor: '#40404E', - }, - '.MuiSlider-rail': { - border: 'none', - backgroundColor: '#40404E', - }, - '& .MuiSlider-thumb': { - height: 17, - width: 17, - backgroundColor: '#373737', - border: '2px solid #7F7DF3', - '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': {}, - '&:before': { - display: 'none', - }, - }, -}) - -export const Filters: React.FC = memo( - ({ - device, - parameterPresence, - parameterTopP, - temperatureModel, - typeModels, - typeModel, - handleChangeTypeModel, - changeTemperature, - changeTopP, - changePresence, - resetSettings, - handleCloseFilters, - open, - isAdditional, - changeAdditionalCtx, - }) => { - const desktop = device === 'desktop' - - const theme = useAppSelector((state) => state.theme.theme) - - const [showConfigure, setShowConfigure] = React.useState(false) - - const contextTutorial = React.useContext(TutorialContext) - - typeModels.find((el) => el.key === typeModel)!.value - - const isAdditionalCtx = useMemo(() => { - const value = typeModels.find((el) => el.key === typeModel)!.value - - return value === 'gpt-3.5-turbo' || value === 'gpt-4' ? true : false - }, [typeModel]) - - React.useEffect(() => { - if (contextTutorial?.step === 3) { - setTimeout(() => setShowConfigure(true), 500) - return - } - - setShowConfigure(false) - }, [contextTutorial?.step]) - return ( - <> - {desktop ? ( - - - Настройки - - - - Тип модели - - - - - {isAdditionalCtx && ( - - - Увеличенный контекст - - changeAdditionalCtx!()} /> - - )} - - changeTemperature(e, current)} - max={1} - min={0} - step={0.1} - aria-label='pretto slider' - /> - - - - {showConfigure && ( - <> - - changeTopP(e, current)} - max={1} - min={0} - step={0.1} - aria-label='pretto slider' - /> - - - changePresence(e, current)} - max={2} - min={-2} - step={0.1} - aria-label='pretto slider' - /> - - - )} - - Сбросить настройки - - - - ) : ( - - )} - - ) - } -) - -Filters.displayName = 'Filters' @@ -1 +0,0 @@ -export { Filters } from './ui/filters' @@ -0,0 +1,7 @@ +export interface Setting { + strength: number + upscale: number + negative_prompt: string + num_inference_steps: number + guidance_scale: number +} @@ -1,104 +0,0 @@ -import React, { memo } from 'react' -import { Box, Typography } from '@mui/material' -import Image from 'next/image' - -import { useAppSelector } from '@/src/main/store/store' -import { useAutoScroll } from '@/src/shared/lib/hooks' -import { IResponseSD } from '@/src/shared/lib/types/types-sd' - -interface ISDMessagesList { - messages: IResponseSD[] - device: 'mobile' | 'desktop' -} -export const SdMessagesList: React.FC = memo(({ messages, device }) => { - const theme = useAppSelector((state) => state.theme.theme) - - const refScroll = useAutoScroll(messages) - - const desktop = device === 'desktop' - - return ( - - {messages?.map((img) => { - return ( - - {desktop && {''}} - - - - {'Скачать'} - - {'np'} - - - - - Запрос:{' '} - - {img.question} - - - {img.created_at.slice(10, 16).replace('T', ' ')} - - - - - ) - })} - - ) -}) - -SdMessagesList.displayName = 'SdMessagesList' @@ -1 +0,0 @@ -export { SdMessagesList } from './ui/sd-messages-list' @@ -26,4 +26,10 @@ NEXT_PUBLIC_DJANGO_VK_APP_CLIENT_ID=seSpVo2gyb085UwxM9mnVuOyPvCcTuVC1BRQoEpx NEXT_PUBLIC_DJANGO_VK_APP_CLIENT_SECRET=YWv1YXdE69FKN5NZpf583qvU0mq7wbsdrLShBLxn2FsQ7miJxsHlAHwyT9ZD76LzqVcEVctkhWdB54d56FU7Zz3QtBAFP3XnQP2HaVK7e8paxGHfzFCNgyGnavZAXI9p NEXT_PUBLIC_SESSION_TIME=1800 -SESSION_TIME=1800 \ No newline at end of file +SESSION_TIME=1800 + +NEXT_PUBLIC_SENTRY_DSN=https://8ba86ce968074387878775e88a223c0e@sentry.syntex.digital/4 +NEXT_PUBLIC_SENTRY_ORGANIZATION=Syntex +NEXT_PUBLIC_SENTRY_DOMAIN=https://sentry.syntex.digital + +NEXT_PUBLIC_WS_API_URL=ws://devapi.air.fail:8000/rtc