feat(search): Implement OpenSearch support

feat(search): Add searchUrl to message
feat(parsers): Enhance parsers to deal with some thinking models better.
This commit is contained in:
Willie Zutz
2025-05-08 00:21:31 -06:00
parent f65b168388
commit ddfe8c607d
12 changed files with 115 additions and 17 deletions

View File

@@ -7,7 +7,7 @@ import db from '@/lib/db';
import { chats, messages as messagesSchema } from '@/lib/db/schema';
import {
getAvailableChatModelProviders,
getAvailableEmbeddingModelProviders
getAvailableEmbeddingModelProviders,
} from '@/lib/providers';
import { searchHandlers } from '@/lib/search';
import { getFileDetails } from '@/lib/utils/files';
@@ -66,6 +66,7 @@ const handleEmitterEvents = async (
let recievedMessage = '';
let sources: any[] = [];
let searchQuery: string | undefined;
let searchUrl: string | undefined;
stream.on('data', (data) => {
const parsedData = JSON.parse(data);
@@ -86,6 +87,9 @@ const handleEmitterEvents = async (
if (parsedData.searchQuery) {
searchQuery = parsedData.searchQuery;
}
if (parsedData.searchUrl) {
searchUrl = parsedData.searchUrl;
}
writer.write(
encoder.encode(
@@ -94,6 +98,7 @@ const handleEmitterEvents = async (
data: parsedData.data,
searchQuery: parsedData.searchQuery,
messageId: aiMessageId,
searchUrl: searchUrl,
}) + '\n',
),
);
@@ -128,6 +133,7 @@ const handleEmitterEvents = async (
messageId: aiMessageId,
modelStats: modelStats,
searchQuery: searchQuery,
searchUrl: searchUrl,
}) + '\n',
),
);
@@ -144,6 +150,7 @@ const handleEmitterEvents = async (
...(sources && sources.length > 0 && { sources }),
...(searchQuery && { searchQuery }),
modelStats: modelStats,
...(searchUrl && { searchUrl }),
}),
})
.execute();

View File

@@ -26,6 +26,14 @@ export default function RootLayout({
}>) {
return (
<html className="h-full" lang="en" suppressHydrationWarning>
<head>
<link
rel="search"
type="application/opensearchdescription+xml"
title="Perplexica Search"
href="/opensearch.xml"
/>
</head>
<body className={cn('h-full', montserrat.className)}>
<ThemeProvider>
<Sidebar>{children}</Sidebar>