Spaces:
Paused
Paused
UX-agent / backend /node_modules /@google /generative-ai /test-integration /node /start-chat.test.ts
| /** | |
| * @license | |
| * Copyright 2024 Google LLC | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| import { expect, use } from "chai"; | |
| import * as chaiAsPromised from "chai-as-promised"; | |
| import { GoogleGenerativeAI, HarmBlockThreshold, HarmCategory } from "../.."; | |
| use(chaiAsPromised); | |
| /** | |
| * Integration tests against live backend. | |
| */ | |
| describe("startChat", function () { | |
| this.timeout(60e3); | |
| this.slow(10e3); | |
| it("stream false", async () => { | |
| const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY || ""); | |
| const model = genAI.getGenerativeModel({ | |
| model: "gemini-1.5-flash-latest", | |
| safetySettings: [ | |
| { | |
| category: HarmCategory.HARM_CATEGORY_HARASSMENT, | |
| threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH, | |
| }, | |
| ], | |
| }); | |
| const question1 = "What is the capital of Oregon?"; | |
| const question2 = "How many people live in that city?"; | |
| const chat = model.startChat(); | |
| const result1 = await chat.sendMessage(question1); | |
| expect(result1.response.text()).to.not.be.empty; | |
| const result2 = await chat.sendMessage(question2); | |
| expect(result2.response.text()).to.not.be.empty; | |
| const history = await chat.getHistory(); | |
| expect(history[0].parts[0].text).to.equal(question1); | |
| expect(history[2].parts[0].text).to.equal(question2); | |
| expect(history.length).to.equal(4); | |
| }); | |
| it("stream true", async () => { | |
| const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY || ""); | |
| const model = genAI.getGenerativeModel({ | |
| model: "gemini-1.5-flash-latest", | |
| safetySettings: [ | |
| { | |
| category: HarmCategory.HARM_CATEGORY_HARASSMENT, | |
| threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH, | |
| }, | |
| ], | |
| }); | |
| const question1 = "What is the capital of Oregon?"; | |
| const question2 = "How many people live in that city?"; | |
| const question3 = "What is the closest river?"; | |
| const chat = model.startChat(); | |
| const result1 = await chat.sendMessageStream(question1); | |
| const response1 = await result1.response; | |
| expect(response1.text()).to.not.be.empty; | |
| const result2 = await chat.sendMessageStream(question2); | |
| for await (const response of result2.stream) { | |
| expect(response.text()).to.not.be.empty; | |
| } | |
| const response2 = await result2.response; | |
| expect(response2.text()).to.not.be.empty; | |
| const result3 = await chat.sendMessageStream(question3); | |
| for await (const response of result3.stream) { | |
| expect(response.text()).to.not.be.empty; | |
| } | |
| const response3 = await result3.response; | |
| expect(response3.text()).to.not.be.empty; | |
| const history = await chat.getHistory(); | |
| expect(history[0].parts[0].text).to.equal(question1); | |
| expect(history[2].parts[0].text).to.equal(question2); | |
| expect(history[4].parts[0].text).to.equal(question3); | |
| expect(history.length).to.equal(6); | |
| }); | |
| it("stream true, try to send message before previous stream is done", async () => { | |
| const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY || ""); | |
| const model = genAI.getGenerativeModel({ | |
| model: "gemini-1.5-flash-latest", | |
| safetySettings: [ | |
| { | |
| category: HarmCategory.HARM_CATEGORY_HARASSMENT, | |
| threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH, | |
| }, | |
| ], | |
| }); | |
| const question1 = "What are the most interesting cities in Oregon?"; | |
| const question2 = "How many people live in that city?"; | |
| const question3 = "What is the closest river?"; | |
| const chat = model.startChat(); | |
| const promise1 = chat.sendMessageStream(question1).then(async (result1) => { | |
| for await (const response of result1.stream) { | |
| expect(response.text()).to.not.be.empty; | |
| } | |
| const response1 = await result1.response; | |
| expect(response1.text()).to.not.be.empty; | |
| }); | |
| const promise2 = chat.sendMessageStream(question2).then(async (result2) => { | |
| for await (const response of result2.stream) { | |
| expect(response.text()).to.not.be.empty; | |
| } | |
| const response2 = await result2.response; | |
| expect(response2.text()).to.not.be.empty; | |
| }); | |
| const promise3 = chat | |
| .sendMessage(question3) | |
| .then(async (result3) => { | |
| const response3 = result3.response; | |
| expect(response3.text()).to.not.be.empty; | |
| }) | |
| .catch((e) => console.error(e)); | |
| await Promise.all([promise1, promise2, promise3]); | |
| const history = await chat.getHistory(); | |
| expect(history[0].parts[0].text).to.equal(question1); | |
| expect(history[2].parts[0].text).to.equal(question2); | |
| expect(history[4].parts[0].text).to.equal(question3); | |
| expect(history.length).to.equal(6); | |
| }); | |
| }); | |