diff --git a/packages/backend/src/utils/playground.ts b/packages/backend/src/utils/playground.ts
index 11c5ada5..17b39f7c 100644
--- a/packages/backend/src/utils/playground.ts
+++ b/packages/backend/src/utils/playground.ts
@@ -109,6 +109,7 @@ export async function handleStream(
res = {
choices,
+ citations: part.citations, // perplexity models return an array of citations links
usage: {
completion_tokens: tokens,
},
@@ -421,7 +422,7 @@ export async function runAImodel(
let res = await openai.chat.completions.create({
model,
messages,
- stream: stream,
+ stream,
temperature: extra?.temperature,
max_tokens: extra?.max_tokens,
top_p: extra?.top_p,
diff --git a/packages/frontend/components/SmartViewer/Message.tsx b/packages/frontend/components/SmartViewer/Message.tsx
index 0148aefc..18c05205 100644
--- a/packages/frontend/components/SmartViewer/Message.tsx
+++ b/packages/frontend/components/SmartViewer/Message.tsx
@@ -224,10 +224,10 @@ function TextMessage({
}) {
const text = data.content || data.text;
- return (
-
-
- {editable ? (
+ if (editable) {
+ return (
+
+
+
+ );
+ } else if (data.citations) {
+ const textWithLinks = text.replace(/\[(\d+)\]/g, (match, numberStr) => {
+ const idx = parseInt(numberStr, 10) - 1;
+ if (data.citations[idx]) {
+ return `[${numberStr}]`;
+ }
+ return match;
+ });
+ return (
+
+
+
+ );
+ } else {
+ return (
+
+
- )}
-
-
- );
+
+
+ );
+ }
}
function ResponsiveImage({ src }) {
diff --git a/packages/frontend/components/SmartViewer/index.module.css b/packages/frontend/components/SmartViewer/index.module.css
index a0e65904..ae8a0d0c 100644
--- a/packages/frontend/components/SmartViewer/index.module.css
+++ b/packages/frontend/components/SmartViewer/index.module.css
@@ -156,3 +156,8 @@
border-radius: var(--mantine-radius-sm);
width: 100%;
}
+
+
+.citationLink {
+ text-decoration: none;;
+}
\ No newline at end of file
diff --git a/packages/frontend/components/checks/ChecksModal.tsx b/packages/frontend/components/checks/ChecksModal.tsx
index 2c418e36..d7c13835 100644
--- a/packages/frontend/components/checks/ChecksModal.tsx
+++ b/packages/frontend/components/checks/ChecksModal.tsx
@@ -182,7 +182,7 @@ export default function ChecksModal({
{
- $crisp.push(["do", "chat:open"]);
+ $crisp?.push(["do", "chat:open"]);
}}
variant="transparent"
>
diff --git a/packages/frontend/components/layout/Empty.tsx b/packages/frontend/components/layout/Empty.tsx
index 9c578512..ded9d04a 100644
--- a/packages/frontend/components/layout/Empty.tsx
+++ b/packages/frontend/components/layout/Empty.tsx
@@ -343,7 +343,7 @@ const IntegrationStepper = ({ integration }: { integration: string }) => {