From 1c3c6890398efa6eabfab7e0fb1744494cb26fec Mon Sep 17 00:00:00 2001 From: Ying-Shan Lin Date: Fri, 13 Dec 2024 17:24:15 +0800 Subject: [PATCH 01/17] feat(anthropic): update chat models to include Claude 3.5 Haiku and new version for Sonnet --- src/lib/providers/anthropic.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lib/providers/anthropic.ts b/src/lib/providers/anthropic.ts index 90460c6..642a6cb 100644 --- a/src/lib/providers/anthropic.ts +++ b/src/lib/providers/anthropic.ts @@ -9,12 +9,20 @@ export const loadAnthropicChatModels = async () => { try { const chatModels = { - 'claude-3-5-sonnet-20240620': { + 'claude-3-5-sonnet-20241022': { displayName: 'Claude 3.5 Sonnet', model: new ChatAnthropic({ temperature: 0.7, anthropicApiKey: anthropicApiKey, - model: 'claude-3-5-sonnet-20240620', + model: 'claude-3-5-sonnet-20241022', + }), + }, + 'claude-3-5-haiku-20241022': { + displayName: 'Claude 3.5 Haiku', + model: new ChatAnthropic({ + temperature: 0.7, + anthropicApiKey: anthropicApiKey, + model: 'claude-3-5-haiku-20241022', }), }, 'claude-3-opus-20240229': { From f30a61c4aa9c0c1289b39aca6d9ac158fdee7efa Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Mon, 16 Dec 2024 18:24:01 +0530 Subject: [PATCH 02/17] feat(metaSearchAgent): handle `undefined` content for YT. search --- src/search/metaSearchAgent.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/search/metaSearchAgent.ts b/src/search/metaSearchAgent.ts index b1d8114..1e85cf6 100644 --- a/src/search/metaSearchAgent.ts +++ b/src/search/metaSearchAgent.ts @@ -211,7 +211,11 @@ class MetaSearchAgent implements MetaSearchAgentType { const documents = res.results.map( (result) => new Document({ - pageContent: result.content, + pageContent: + result.content || + this.config.activeEngines.includes('youtube') + ? result.title + : '' /* Todo: Implement transcript grabbing using Youtubei (source: https://www.npmjs.com/package/youtubei) */, metadata: { title: result.title, url: result.url, @@ -414,7 +418,10 @@ class MetaSearchAgent implements MetaSearchAgentType { private processDocs(docs: Document[]) { return docs - .map((_, index) => `${index + 1}. ${docs[index].pageContent}`) + .map( + (_, index) => + `${index + 1}. ${docs[index].metadata.title} ${docs[index].pageContent}`, + ) .join('\n'); } From c3a231a528d969e72cd5d83a83ca4e3ddb9ee849 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Mon, 16 Dec 2024 20:59:21 +0530 Subject: [PATCH 03/17] feat(readme): add discord server --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 721d41c..cf9e459 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # 🚀 Perplexica - An AI-powered search engine 🔎 +[![Discord](https://dcbadge.vercel.app/api/server/26aArMy8tT?style=flat&compact=true)](https://discord.gg/26aArMy8tT) + + ![preview](.assets/perplexica-screenshot.png?) ## Table of Contents From 4cb38148b31eb53db37a9447450847f6d0c8ac96 Mon Sep 17 00:00:00 2001 From: Bart Jaskulski Date: Thu, 19 Dec 2024 08:07:14 +0100 Subject: [PATCH 04/17] Remove deprecated Groq models Signed-off-by: Bart Jaskulski --- src/lib/providers/groq.ts | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src/lib/providers/groq.ts b/src/lib/providers/groq.ts index 62ca2d7..16f251b 100644 --- a/src/lib/providers/groq.ts +++ b/src/lib/providers/groq.ts @@ -48,19 +48,6 @@ export const loadGroqChatModels = async () => { }, ), }, - 'llama-3.1-70b-versatile': { - displayName: 'Llama 3.1 70B', - model: new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'llama-3.1-70b-versatile', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - }, 'llama-3.1-8b-instant': { displayName: 'Llama 3.1 8B', model: new ChatOpenAI( @@ -113,19 +100,6 @@ export const loadGroqChatModels = async () => { }, ), }, - 'gemma-7b-it': { - displayName: 'Gemma 7B', - model: new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'gemma-7b-it', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - }, 'gemma2-9b-it': { displayName: 'Gemma2 9B', model: new ChatOpenAI( From 960e34aa3df48ea85777796f2aa5aa08812f79fb Mon Sep 17 00:00:00 2001 From: Bart Jaskulski Date: Thu, 19 Dec 2024 08:07:36 +0100 Subject: [PATCH 05/17] Add Llama 3.3 model from Groq Signed-off-by: Bart Jaskulski --- src/lib/providers/groq.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/lib/providers/groq.ts b/src/lib/providers/groq.ts index 16f251b..41004ec 100644 --- a/src/lib/providers/groq.ts +++ b/src/lib/providers/groq.ts @@ -9,6 +9,19 @@ export const loadGroqChatModels = async () => { try { const chatModels = { + 'llama-3.3-70b-versatile': { + displayName: 'Llama 3.3 70B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama-3.3-70b-versatile', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, 'llama-3.2-3b-preview': { displayName: 'Llama 3.2 3B', model: new ChatOpenAI( From d30f714930e39ddd6192317902b1134899de5dc3 Mon Sep 17 00:00:00 2001 From: hacking-racoon Date: Wed, 25 Dec 2024 15:19:23 +0900 Subject: [PATCH 06/17] feat(SearchVideos): Modify Lightbox to pause the prev video when moving to next one, preventing interference with new video. --- ui/components/SearchVideos.tsx | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/ui/components/SearchVideos.tsx b/ui/components/SearchVideos.tsx index 2d820ef..170df61 100644 --- a/ui/components/SearchVideos.tsx +++ b/ui/components/SearchVideos.tsx @@ -1,6 +1,6 @@ /* eslint-disable @next/next/no-img-element */ import { PlayCircle, PlayIcon, PlusIcon, VideoIcon } from 'lucide-react'; -import { useState } from 'react'; +import { useRef, useState } from 'react'; import Lightbox, { GenericSlide, VideoSlide } from 'yet-another-react-lightbox'; import 'yet-another-react-lightbox/styles.css'; import { Message } from './ChatWindow'; @@ -35,6 +35,8 @@ const Searchvideos = ({ const [loading, setLoading] = useState(false); const [open, setOpen] = useState(false); const [slides, setSlides] = useState([]); + const [currentIndex, setCurrentIndex] = useState(0); + const videoRefs = useRef<(HTMLIFrameElement | null)[]>([]); return ( <> @@ -182,18 +184,39 @@ const Searchvideos = ({ open={open} close={() => setOpen(false)} slides={slides} + index={currentIndex} + on={{ + view: ({ index }) => { + const previousIframe = videoRefs.current[currentIndex]; + if (previousIframe?.contentWindow) { + previousIframe.contentWindow.postMessage( + '{"event":"command","func":"pauseVideo","args":""}', + '*', + ); + } + + setCurrentIndex(index); + }, + }} render={{ - slide: ({ slide }) => - slide.type === 'video-slide' ? ( + slide: ({ slide }) => { + const index = slides.findIndex((s) => s === slide); + return slide.type === 'video-slide' ? (