diff --git a/src/app/api/images/route.ts b/src/app/api/images/route.ts index db39d9f..83af845 100644 --- a/src/app/api/images/route.ts +++ b/src/app/api/images/route.ts @@ -7,11 +7,13 @@ import { import { getAvailableChatModelProviders } from '@/lib/providers'; import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages'; +import { ChatOllama } from '@langchain/ollama'; import { ChatOpenAI } from '@langchain/openai'; interface ChatModel { provider: string; model: string; + ollamaContextWindow?: number; } interface ImageSearchBody { @@ -58,6 +60,10 @@ export const POST = async (req: Request) => { }) as unknown as BaseChatModel; } else if (chatModelProvider && chatModel) { llm = chatModel.model; + // Set context window size for Ollama models + if (llm instanceof ChatOllama && body.chatModel?.provider === 'ollama') { + llm.numCtx = body.chatModel.ollamaContextWindow || 2048; + } } if (!llm) { diff --git a/src/app/api/videos/route.ts b/src/app/api/videos/route.ts index 34ae7fd..64c6b7c 100644 --- a/src/app/api/videos/route.ts +++ b/src/app/api/videos/route.ts @@ -7,11 +7,13 @@ import { import { getAvailableChatModelProviders } from '@/lib/providers'; import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages'; +import { ChatOllama } from '@langchain/ollama'; import { ChatOpenAI } from '@langchain/openai'; interface ChatModel { provider: string; model: string; + ollamaContextWindow?: number; } interface VideoSearchBody { @@ -58,6 +60,10 @@ export const POST = async (req: Request) => { }) as unknown as BaseChatModel; } else if (chatModelProvider && chatModel) { llm = chatModel.model; + // Set context window size for Ollama models + if (llm instanceof ChatOllama && body.chatModel?.provider === 'ollama') { + llm.numCtx = body.chatModel.ollamaContextWindow || 2048; + } } if (!llm) { diff --git a/src/components/Chat.tsx b/src/components/Chat.tsx index 906da56..bee90b5 100644 --- a/src/components/Chat.tsx +++ b/src/components/Chat.tsx @@ -20,10 +20,7 @@ const Chat = ({ setOptimizationMode, }: { messages: Message[]; - sendMessage: ( - message: string, - messageId?: string, - ) => void; + sendMessage: (message: string) => void; loading: boolean; messageAppeared: boolean; rewrite: (messageId: string) => void; @@ -96,7 +93,7 @@ const Chat = ({
{dividerWidth > 0 && (
[ ...prevMessages, @@ -563,7 +549,7 @@ const sendMessage = async ( useEffect(() => { if (isReady && initialMessage && isConfigReady) { - sendMessage(initialMessage, undefined, { }); + sendMessage(initialMessage); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isConfigReady, isReady, initialMessage]); diff --git a/src/components/EmptyChatMessageInput.tsx b/src/components/EmptyChatMessageInput.tsx index 25784f7..43d1e28 100644 --- a/src/components/EmptyChatMessageInput.tsx +++ b/src/components/EmptyChatMessageInput.tsx @@ -18,10 +18,7 @@ const EmptyChatMessageInput = ({ files, setFiles, }: { - sendMessage: ( - message: string, - messageId?: string, - ) => void; + sendMessage: (message: string) => void; focusMode: string; setFocusMode: (mode: string) => void; optimizationMode: string; @@ -64,13 +61,13 @@ const EmptyChatMessageInput = ({
{ e.preventDefault(); - sendMessage(message, undefined); + sendMessage(message); setMessage(''); }} onKeyDown={(e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); - sendMessage(message, undefined); + sendMessage(message); setMessage(''); } }} diff --git a/src/components/MessageBox.tsx b/src/components/MessageBox.tsx index 169cd07..a7c46ec 100644 --- a/src/components/MessageBox.tsx +++ b/src/components/MessageBox.tsx @@ -42,10 +42,7 @@ const MessageBox = ({ dividerRef?: MutableRefObject; isLast: boolean; rewrite: (messageId: string) => void; - sendMessage: ( - message: string, - messageId?: string - ) => void; + sendMessage: (message: string) => void; }) => { const [parsedMessage, setParsedMessage] = useState(message.content); const [speechMessage, setSpeechMessage] = useState(message.content); @@ -110,10 +107,6 @@ const MessageBox = ({ const { speechStatus, start, stop } = useSpeech({ text: speechMessage }); - const handleSuggestionClick = (suggestion: string) => { - sendMessage(suggestion, undefined); - }; - const markdownOverrides: MarkdownToJSX.Options = { overrides: { think: { @@ -228,7 +221,7 @@ const MessageBox = ({
{ - handleSuggestionClick(suggestion); + sendMessage(suggestion); }} className="cursor-pointer flex flex-row justify-between font-medium space-x-2 items-center" > diff --git a/src/components/MessageInput.tsx b/src/components/MessageInput.tsx index 6c15814..4b0d31f 100644 --- a/src/components/MessageInput.tsx +++ b/src/components/MessageInput.tsx @@ -18,10 +18,7 @@ const MessageInput = ({ optimizationMode, setOptimizationMode, }: { - sendMessage: ( - message: string, - messageId?: string - ) => void; + sendMessage: (message: string) => void; loading: boolean; fileIds: string[]; setFileIds: (fileIds: string[]) => void; @@ -68,13 +65,13 @@ const MessageInput = ({ onSubmit={(e) => { if (loading) return; e.preventDefault(); - sendMessage(message, undefined); + sendMessage(message); setMessage(''); }} onKeyDown={(e) => { if (e.key === 'Enter' && !e.shiftKey && !loading) { e.preventDefault(); - sendMessage(message, undefined); + sendMessage(message); setMessage(''); } }} diff --git a/src/components/MessageInputActions/Optimization.tsx b/src/components/MessageInputActions/Optimization.tsx index b56e815..9ea4896 100644 --- a/src/components/MessageInputActions/Optimization.tsx +++ b/src/components/MessageInputActions/Optimization.tsx @@ -47,7 +47,7 @@ const Optimization = ({ }; return ( - + - -
+ +
{OptimizationModes.map((mode, i) => ( handleOptimizationChange(mode.key)} diff --git a/src/lib/prompts/index.ts b/src/lib/prompts/index.ts index 78192fc..f479185 100644 --- a/src/lib/prompts/index.ts +++ b/src/lib/prompts/index.ts @@ -6,10 +6,7 @@ import { redditSearchResponsePrompt, redditSearchRetrieverPrompt, } from './redditSearch'; -import { - webSearchResponsePrompt, - webSearchRetrieverPrompt -} from './webSearch'; +import { webSearchResponsePrompt, webSearchRetrieverPrompt } from './webSearch'; import { wolframAlphaSearchResponsePrompt, wolframAlphaSearchRetrieverPrompt, diff --git a/src/lib/prompts/webSearch.ts b/src/lib/prompts/webSearch.ts index 2ac2c0e..1a431ea 100644 --- a/src/lib/prompts/webSearch.ts +++ b/src/lib/prompts/webSearch.ts @@ -107,4 +107,4 @@ export const webSearchResponsePrompt = ` Current date & time in ISO format (UTC timezone) is: {date}. -`; \ No newline at end of file +`; diff --git a/src/lib/search/metaSearchAgent.ts b/src/lib/search/metaSearchAgent.ts index d71ed8d..67b7c58 100644 --- a/src/lib/search/metaSearchAgent.ts +++ b/src/lib/search/metaSearchAgent.ts @@ -282,10 +282,7 @@ class MetaSearchAgent implements MetaSearchAgentType { .pipe(this.processDocs), }), ChatPromptTemplate.fromMessages([ - [ - 'system', - this.config.responsePrompt - ], + ['system', this.config.responsePrompt], new MessagesPlaceholder('chat_history'), ['user', '{query}'], ]), @@ -483,7 +480,7 @@ class MetaSearchAgent implements MetaSearchAgentType { fileIds, embeddings, optimizationMode, - systemInstructions + systemInstructions, ); const stream = answeringChain.streamEvents(