diff --git a/apps/server/agents/handle_agent_errors.py b/apps/server/agents/handle_agent_errors.py
index 00761a9b4..b314c5cf9 100644
--- a/apps/server/agents/handle_agent_errors.py
+++ b/apps/server/agents/handle_agent_errors.py
@@ -12,9 +12,7 @@ def handle_agent_error(err: Exception) -> str:
if isinstance(err, RateLimitError):
return "OpenAI reached it's rate limit, please check billing on OpenAI"
elif isinstance(err, AuthenticationError):
- return (
- "Your OpenAI API key is invalid. Please recheck it in [Settings](/settings)"
- )
+ return "Your OpenAI API key is invalid. Please recheck it in [Settings](/integrations?setting=openai)"
elif isinstance(err, TimeoutError):
return "OpenAI timed out, please try again later"
elif isinstance(err, ServiceUnavailableError):
diff --git a/apps/server/utils/model.py b/apps/server/utils/model.py
index 35bc3055f..4acc4a40f 100644
--- a/apps/server/utils/model.py
+++ b/apps/server/utils/model.py
@@ -123,7 +123,7 @@ def get_llm(
if provider == ModelProviders.OPEN_AI:
if not settings.openai_api_key:
raise InvalidLLMApiKeyException(
- "Please set OpenAI API Key in [Settings](/settings)"
+ "Please set OpenAI API Key in [Settings](/integrations?setting=openai)"
)
return ChatOpenAI(
@@ -134,7 +134,7 @@ def get_llm(
elif provider == ModelProviders.HUGGING_FACE:
if not settings.hugging_face_access_token:
raise InvalidLLMApiKeyException(
- "Please set Hugging Face Access Token in [Settings](/settings)"
+ "Please set Hugging Face Access Token in [Settings](/integrations?setting=huggingface)"
)
return HuggingFaceHub(
@@ -147,7 +147,7 @@ def get_llm(
elif provider == ModelProviders.REPLICATE:
if not settings.replicate_api_token:
raise InvalidLLMApiKeyException(
- "Please set Replicate API Token in [Settings](/settings)"
+ "Please set Replicate API Token in [Settings](/integrations?setting=replicate)"
)
os.environ["REPLICATE_API_TOKEN"] = settings.replicate_api_token
diff --git a/apps/ui/src/Route.tsx b/apps/ui/src/Route.tsx
index 3b648a6ce..51f62bcff 100644
--- a/apps/ui/src/Route.tsx
+++ b/apps/ui/src/Route.tsx
@@ -107,6 +107,7 @@ import EditCampaignModal from 'modals/EditCampaignModal'
import CreateScheduleModal from 'modals/CreateScheduleModal'
import EditScheduleModal from 'modals/EditScheduleModal'
import VoiceOptionsModal from 'modals/VoiceOptionsModal'
+import LlmSettingsModal from 'modals/LlmSettingsModal'
const Route = () => {
const { loading } = useContext(AuthContext)
@@ -432,6 +433,7 @@ const Route = () => {
+
diff --git a/apps/ui/src/assets/settings/hf-logo.png b/apps/ui/src/assets/settings/hf-logo.png
new file mode 100644
index 000000000..49e2841dd
Binary files /dev/null and b/apps/ui/src/assets/settings/hf-logo.png differ
diff --git a/apps/ui/src/assets/settings/openAi-logo.png b/apps/ui/src/assets/settings/openAi-logo.png
new file mode 100644
index 000000000..fc71f647c
Binary files /dev/null and b/apps/ui/src/assets/settings/openAi-logo.png differ
diff --git a/apps/ui/src/assets/settings/pinecone-logo.png b/apps/ui/src/assets/settings/pinecone-logo.png
new file mode 100644
index 000000000..ac397b4aa
Binary files /dev/null and b/apps/ui/src/assets/settings/pinecone-logo.png differ
diff --git a/apps/ui/src/assets/settings/replicate-logo.png b/apps/ui/src/assets/settings/replicate-logo.png
new file mode 100644
index 000000000..9fa534b32
Binary files /dev/null and b/apps/ui/src/assets/settings/replicate-logo.png differ
diff --git a/apps/ui/src/assets/settings/weaviate-logo.jpg b/apps/ui/src/assets/settings/weaviate-logo.jpg
new file mode 100644
index 000000000..2316ea9e1
Binary files /dev/null and b/apps/ui/src/assets/settings/weaviate-logo.jpg differ
diff --git a/apps/ui/src/components/HeaderButtons/HeaderButtons.tsx b/apps/ui/src/components/HeaderButtons/HeaderButtons.tsx
index 8a1496620..56d114726 100644
--- a/apps/ui/src/components/HeaderButtons/HeaderButtons.tsx
+++ b/apps/ui/src/components/HeaderButtons/HeaderButtons.tsx
@@ -49,7 +49,7 @@ const HeaderButtons = () => {
)}
- {t('docs')}}
position={Tooltip.positions.BOTTOM}
tooltipSize={Tooltip.tooltipSize.Small}
@@ -66,7 +66,7 @@ const HeaderButtons = () => {
/>
-
+ */}
{/* Twitter}
@@ -101,7 +101,7 @@ const HeaderButtons = () => {
*/}
- {isLinkModule && (
+ {/* {isLinkModule && (
{t('github')}}
position={Tooltip.positions.BOTTOM}
@@ -125,7 +125,7 @@ const HeaderButtons = () => {
- )}
+ )} */}
)
}
@@ -135,6 +135,7 @@ export default HeaderButtons
const StyledButtonsWrapper = styled.div`
display: flex;
align-items: center;
+
gap: 5px;
`
export const StyledImg = styled.img<{ customScale?: number }>`
diff --git a/apps/ui/src/modals/AIChatModal/components/ChatMessageList/components/AiMessageMarkdown.tsx b/apps/ui/src/modals/AIChatModal/components/ChatMessageList/components/AiMessageMarkdown.tsx
index 10f521337..6b7ee1de2 100644
--- a/apps/ui/src/modals/AIChatModal/components/ChatMessageList/components/AiMessageMarkdown.tsx
+++ b/apps/ui/src/modals/AIChatModal/components/ChatMessageList/components/AiMessageMarkdown.tsx
@@ -5,12 +5,14 @@ import { atomDark } from 'react-syntax-highlighter/dist/esm/styles/prism'
import remarkGfm from 'remark-gfm'
import { useModal } from 'hooks'
import { memo } from 'react'
+import { t } from 'i18next'
const YOUTUBE_REGEX = /^https:\/\/www\.youtube\.com\/watch\?v=([a-zA-Z0-9_-]+)&/
const IMAGE_REGEX = /\.(gif|jpe?g|tiff?|png|webp|bmp)$/i
-const SETTINGS_REGEX = /\/setting/
+// const SETTINGS_REGEX = /\/setting/
const TOOLKIT_REGEX = /\/toolkits\/[^/]+/
const VOICE_REGEX = /\/integrations\/voice\/[^/]+/
+const SETTINGS_REGEX = /\/integrations\?setting=([^/]+)/
// const SETTINGS_REGEX = /\[Settings\]\(\/settings\)/
const AiMessageMarkdown = ({ isReply = false, children }: { isReply?: boolean; children: any }) => {
@@ -52,9 +54,17 @@ const AiMessageMarkdown = ({ isReply = false, children }: { isReply?: boolean; c
}
if (SETTINGS_REGEX.test(href as string)) {
+ const regex = /\/integrations\?setting=([^/]+)/
+ const match: any = regex.exec(href || '')
+ const slug = match[1]
+
return (
-