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')}