mindcraft/src/models/gemini.js

36 lines
1.4 KiB
JavaScript
Raw Normal View History

2024-02-18 22:56:38 -06:00
import { GoogleGenerativeAI } from '@google/generative-ai';
export class Gemini {
constructor(model_name) {
2024-02-18 22:56:38 -06:00
if (!process.env.GEMINI_API_KEY) {
2024-03-23 11:15:53 -05:00
throw new Error('Gemini API key missing! Make sure you set your GEMINI_API_KEY environment variable.');
2024-02-18 22:56:38 -06:00
}
this.genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
2024-02-18 22:56:38 -06:00
this.llmModel = this.genAI.getGenerativeModel({ model: model_name });
this.embedModel = this.genAI.getGenerativeModel({ model: "embedding-001"});
2024-02-18 22:56:38 -06:00
}
async sendRequest(turns, systemMessage) {
const messages = [{'role': 'system', 'content': systemMessage}].concat(turns);
let prompt = "";
let role = "";
messages.forEach((message) => {
role = message.role;
if (role === 'assistant') role = 'model';
prompt += `${role}: ${message.content}\n`;
});
if (role !== "model") // if the last message was from the user/system, add a prompt for the model. otherwise, pretend we are extending the model's own message
prompt += "model: ";
console.log(prompt)
const result = await this.llmModel.generateContent(prompt);
2024-02-18 22:56:38 -06:00
const response = await result.response;
return response.text();
}
async embed(text) {
const result = await this.embedModel.embedContent(text);
2024-02-18 22:56:38 -06:00
return result.embedding;
}
}