File size: 2,299 Bytes
770735d
0fc59f9
5b1a9aa
2c00ea8
bf75aa7
de36cdc
6655689
 
770735d
f58e466
0fc59f9
6655689
de36cdc
6655689
 
 
 
 
 
 
 
 
 
 
 
 
de36cdc
6655689
 
1c78f33
6655689
 
 
 
 
 
 
 
 
0fc59f9
 
43606a3
0fc59f9
 
5b1a9aa
43606a3
 
 
 
 
 
 
 
59118b8
43606a3
 
 
0fc59f9
bf75aa7
 
 
1c78f33
bf75aa7
 
 
 
 
6d7dd9c
3f26498
770735d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import type { Message } from "$lib/types/Message";
import { format } from "date-fns";
import type { EndpointMessage } from "../../endpoints/endpoints";
import { generateFromDefaultEndpoint } from "../../generateFromDefaultEndpoint";
import { getReturnFromGenerator } from "$lib/utils/getReturnFromGenerator";
import { taskModel } from "$lib/server/models";
import type { Tool } from "$lib/types/Tool";
import { getToolOutput } from "$lib/server/tools/getToolOutput";

export async function generateQuery(messages: Message[]) {
	const currentDate = format(new Date(), "MMMM d, yyyy");

	if (taskModel.tools) {
		const webSearchTool = {
			name: "web_search",
			description: "Search the web for information",
			inputs: [
				{
					name: "query",
					type: "str",
					description: "The query to search the web for",
					paramType: "required",
				},
			],
		} as unknown as Tool;

		const endpoint = await taskModel.getEndpoint();
		const query = await getToolOutput({
			messages,
			preprompt: `The user wants you to search the web for information. Give a relevant google search query to answer the question. Answer with only the query. Dont include any other description, comments, or anything else. Today is ${currentDate}`,
			tool: webSearchTool,
			endpoint,
		});

		if (query) {
			return query;
		}
	}

	const userMessages = messages.filter(({ from }) => from === "user");
	const previousUserMessages = userMessages.slice(0, -1);

	const lastMessage = userMessages.slice(-1)[0];

	const convQuery: Array<EndpointMessage> = [
		{
			from: "user",
			content:
				(previousUserMessages.length > 0
					? `Previous questions: \n${previousUserMessages
							.map(({ content }) => `- ${content}`)
							.join("\n")}`
					: "") +
				"\n\nCurrent Question: " +
				lastMessage.content,
		},
	];

	const webQuery = await getReturnFromGenerator(
		generateFromDefaultEndpoint({
			messages: convQuery,
			preprompt: `The user wants you to search the web for information. Give a relevant google search query to answer the question. Answer with only the query. Dont include any other description, comments, or anything else. Today is ${currentDate}. The conversation follows: \n`,
			generateSettings: {
				max_new_tokens: 30,
			},
		})
	);

	return webQuery.trim().replace(/^"|"$/g, "");
}