diff --git a/src/renderer/src/components/Ellipsis/EllipsisMiddle.tsx b/src/renderer/src/components/Ellipsis/EllipsisMiddle.tsx new file mode 100644 index 0000000000..9102afd234 --- /dev/null +++ b/src/renderer/src/components/Ellipsis/EllipsisMiddle.tsx @@ -0,0 +1,18 @@ +import { Typography } from 'antd' +import { CSSProperties } from 'react' + +const { Text } = Typography + +export const EllipsisMiddle: React.FC<{ suffixCount: number; children: string; style: CSSProperties }> = ({ + suffixCount, + children, + style +}) => { + const start = children.slice(0, children.length - suffixCount) + const suffix = children.slice(-suffixCount).trim() + return ( + + {start} + + ) +} diff --git a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx index 76f8958f34..18b66af615 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx @@ -1,4 +1,5 @@ import OpenAIAlert from '@renderer/components/Alert/OpenAIAlert' +import { EllipsisMiddle } from '@renderer/components/Ellipsis/EllipsisMiddle' import { LoadingIcon } from '@renderer/components/Icons' import { HStack } from '@renderer/components/Layout' import { ApiKeyListPopup } from '@renderer/components/Popups/ApiKeyListPopup' @@ -17,7 +18,7 @@ import { Button, Divider, Flex, Input, Space, Switch, Tooltip, Typography } from import Link from 'antd/es/typography/Link' import { debounce, isEmpty } from 'lodash' import { Check, Settings2, SquareArrowOutUpRight, TriangleAlert } from 'lucide-react' -import { FC, useCallback, useEffect, useMemo, useState } from 'react' +import { CSSProperties, FC, useCallback, useEffect, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -192,18 +193,22 @@ const ProviderSetting: FC = ({ providerId }) => { updateProvider({ apiHost: configedApiHost }) } - const hostPreview = () => { + const HostPreview = ({ style }: { style: CSSProperties }) => { + let text: string if (apiHost.endsWith('#')) { - return apiHost.replace('#', '') + text = apiHost.replace('#', '') + } else if (provider.type === 'openai') { + text = formatApiHost(apiHost) + 'chat/completions' + } else if (provider.type === 'azure-openai') { + text = formatApiHost(apiHost) + 'openai/v1' + } else { + text = formatApiHost(apiHost) + 'responses' } - if (provider.type === 'openai') { - return formatApiHost(apiHost) + 'chat/completions' - } - - if (provider.type === 'azure-openai') { - return formatApiHost(apiHost) + 'openai/v1' - } - return formatApiHost(apiHost) + 'responses' + return ( + + {text} + + ) } // API key 连通性检查状态指示器,目前仅在失败时显示 @@ -330,9 +335,16 @@ const ProviderSetting: FC = ({ providerId }) => { {isOpenAIProvider(provider) && ( - - {hostPreview()} + + {t('settings.provider.api.url.tip')}