import { LiteralClient, Thread } from "@literalai/client";
const client = new LiteralClient(process.env["LITERAL_API_KEY"]);
// The Assistant could have intermediary steps
async function myAssistant(thread: Thread, query: string) {
const run = thread.step({
type: "run",
name: "My Assistant Run",
input: { content: query },
});
// Implement your assistant logic here
await new Promise((r) => setTimeout(r, 1000));
const response = { content: "My assistant response" };
run.output = response;
await run.send();
return response;
}
async function main() {
const participantId = await client.api.getOrCreateUser("John Doe");
// You can also continue a thread by passing the thread id
const thread = await client
.thread({ name: "Thread Example", participantId: participantId })
.upsert();
console.log(thread.id);
const userQuery = "Hello World";
await thread
.step({
type: "user_message",
name: "User",
output: { content: userQuery },
})
.send();
const assistantResponse = await myAssistant(thread, userQuery);
await thread
.step({
type: "assistant_message",
name: "Assistant",
output: assistantResponse,
})
.send();
const followUpQuery = "Follow up!";
await thread
.step({
type: "user_message",
name: "User",
output: { content: followUpQuery },
})
.send();
const followUpResponse = await myAssistant(thread, followUpQuery);
await thread
.step({
type: "assistant_message",
name: "Assistant",
output: followUpResponse,
})
.send();
}
main()
.then(() => process.exit(0))
.catch((error) => console.error(error));