Skip to content

Commit

Permalink
finish multi stream with initial input
Browse files Browse the repository at this point in the history
  • Loading branch information
dokmy committed Jan 10, 2024
1 parent 4cf65f7 commit 68125b3
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 57 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import React from "react";
import ResultCard from "@/components/result-card";
import ChatMessages from "@/components/chat-messages";
import { useChat } from "ai/react";
import { Message } from "ai";
import { useEffect } from "react";

interface ChatComponentReadyProps {
data: {
id: string;
caseName: string;
caseNeutralCit: string;
caseActionNo: string;
caseDate: Date;
caseUrl: string;
createdAt: Date;
searchId: string;
userId: string;
};
query: string;
chatArgs: chatArgs;
}

interface chatArgs {
initialInput?: string;
initialMessages?: Message[];
}

const ChatComponentReady: React.FC<ChatComponentReadyProps> = (props) => {
const { data, query, chatArgs } = props;
console.log("CCR is here. Here is the real chatArgs: ", chatArgs);

const { messages, input, handleInputChange, handleSubmit } = useChat({
...chatArgs,
body: { filter: data.caseNeutralCit, searchResultId: data.id },
});

useEffect(() => {
const mockEvent = {
preventDefault: () => {},
} as unknown as React.FormEvent<HTMLFormElement>;
handleSubmit(mockEvent);
}, [query]);

return (
<div className="flex flex-col w-full h-full">
<ResultCard data={data} />
<ChatMessages key={data.id} messages={messages} />
<div>
<form
onSubmit={handleSubmit}
className="mt-1 mb-1 relative p-3 border-t"
>
<div className="flex-row space-x-2">
<input
className="resize-none overflow-auto max-h-24 border rounded w-full p-3 pl-3 pr-20 text-gray-200 leading-tight bg-black border-gray-700 duration-200 h-20"
value={input}
onChange={handleInputChange}
></input>

<span className="absolute inset-y-0 right-5 flex items-center pr-3 pointer-events-none text-gray-400">
<div className="h-3 w-3"></div>
</span>
</div>
</form>
</div>
</div>
);
};

export default ChatComponentReady;
71 changes: 20 additions & 51 deletions src/app/(root)/(routes)/results/components/chat-component.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
"use client";
import React from "react";
import ResultCard from "@/components/result-card";
import ChatMessages from "@/components/chat-messages";
import axios from "axios";
import { useEffect, useState } from "react";
import { useChat } from "ai/react";
import ChatComponentReady from "./chat-component-ready";
import { Message } from "ai";

interface ChatComponentProps {
data: {
Expand All @@ -21,9 +20,14 @@ interface ChatComponentProps {
query: string;
}

interface chatArgs {
initialInput?: string;
initialMessages?: Message[];
}

const ChatComponent: React.FC<ChatComponentProps> = ({ data, query }) => {
const [dbMessages, setDbMessages] = useState([]);
const [chatArgs, setChatArgs] = useState({});
const [dbMessages, setDbMessages] = useState<null | []>(null);
const [chatArgs, setChatArgs] = useState<null | chatArgs>(null);

useEffect(() => {
const fetchDbMessages = async () => {
Expand All @@ -41,6 +45,9 @@ const ChatComponent: React.FC<ChatComponentProps> = ({ data, query }) => {
}, [data.id]);

useEffect(() => {
if (dbMessages == null) {
return;
}
if (dbMessages.length === 0) {
console.log("no messages. Adding initial input.");
setChatArgs({
Expand All @@ -50,60 +57,22 @@ const ChatComponent: React.FC<ChatComponentProps> = ({ data, query }) => {
});
} else {
console.log("Have messages. Adding initial messages.");
const simplifiedMessages = dbMessages.map(({ role, content }) => ({
const simplifiedMessages = dbMessages.map(({ id, role, content }) => ({
id,
role,
content,
}));
console.log("DBMESSAGES ARE HERE: ", dbMessages);
setChatArgs({ initialMessages: simplifiedMessages });
// setInitialInput("");
}
}, [dbMessages, query]);

useEffect(() => {
const mockEvent = {
preventDefault: () => {},
// Add other minimal properties and methods if needed
} as unknown as React.FormEvent<HTMLFormElement>;
handleSubmit(mockEvent);
console.log("haha");
}, [query]);

useEffect(() => {
console.log("chatArgs updated:", chatArgs);
}, [chatArgs]);

console.log(chatArgs);

const { messages, input, handleInputChange, handleSubmit } = useChat({
...chatArgs,
body: { filter: data.caseNeutralCit, searchResultId: data.id },
});

if (Object.keys(chatArgs).length == 0) return <div>Loading...</div>;

return (
<div className="flex flex-col w-full h-full">
<ResultCard data={data} />
<ChatMessages key={data.id} messages={messages} />
<div>
<form
onSubmit={handleSubmit}
className="mt-1 mb-1 relative p-3 border-t"
>
<div className="flex-row space-x-2">
<textarea
className="resize-none overflow-auto max-h-24 border rounded w-full p-3 pl-3 pr-20 text-gray-200 leading-tight bg-black border-gray-700 duration-200 h-20"
value={input}
onChange={handleInputChange}
></textarea>
if (chatArgs == null) {
return <div>Loading...</div>;
}

<span className="absolute inset-y-0 right-5 flex items-center pr-3 pointer-events-none text-gray-400">
<div className="h-3 w-3"></div>
</span>
</div>
</form>
</div>
</div>
);
return <ChatComponentReady data={data} query={query} chatArgs={chatArgs} />;
};

export default ChatComponent;
6 changes: 3 additions & 3 deletions src/app/(root)/(routes)/search/components/search-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,10 @@ const SearchForm = () => {
selectedMinDate,
selectedMaxDate,
sortOption,
}).then(({ apiResults, searchId }) => {
router.refresh();
router.push(`/results/${searchId}`);
});

router.refresh();
router.push("/");
}
};

Expand Down
2 changes: 1 addition & 1 deletion src/app/api/search/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ export async function POST(req: Request) {
})
})

return new Response(JSON.stringify({filteredResults}), {
return new Response(JSON.stringify({filteredResults, searchId: searchRecord.id}), {
headers: { 'Content-Type': 'application/json'}
})

Expand Down
4 changes: 2 additions & 2 deletions src/app/components/Chat/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,11 @@ const Chat: React.FC<Chat> = ({
className="mt-1 mb-1 relative p-3 border-t"
>
<div className="flex-row space-x-2">
<textarea
<input
className="resize-none overflow-auto max-h-24 border rounded w-full py-2 pl-3 pr-20 text-gray-200 leading-tight bg-black border-gray-700 duration-200 h-24"
value={input}
onChange={handleInputChange}
></textarea>
></input>

<span className="absolute inset-y-0 right-5 flex items-center pr-3 pointer-events-none text-gray-400">
<div className="h-3 w-3"></div>
Expand Down
2 changes: 2 additions & 0 deletions src/app/lib/performSearch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ export async function performSearch({ filters, searchQuery, selectedMinDate, sel
const data = await response.json();

const apiResults = data.filteredResults
const searchId = data.searchId

return {apiResults, searchId}


} catch (error) {
Expand Down

0 comments on commit 68125b3

Please sign in to comment.