mirror of
https://github.com/kolbytn/mindcraft.git
synced 2025-07-18 22:15:17 +02:00
73 lines
No EOL
2 KiB
JavaScript
73 lines
No EOL
2 KiB
JavaScript
import { Mistral as MistralClient } from '@mistralai/mistralai';
|
|
import { getKey } from '../utils/keys.js';
|
|
import { strictFormat } from '../utils/text.js';
|
|
|
|
export class Mistral {
|
|
#client;
|
|
|
|
constructor(model_name, url, params) {
|
|
this.model_name = model_name;
|
|
this.params = params;
|
|
|
|
if (typeof url === "string") {
|
|
console.warn("Mistral does not support custom URL's, ignoring!");
|
|
|
|
}
|
|
|
|
if (!getKey("MISTRAL_API_KEY")) {
|
|
throw new Error("Mistral API Key missing, make sure to set MISTRAL_API_KEY in settings.json")
|
|
}
|
|
|
|
this.#client = new MistralClient(
|
|
{
|
|
apiKey: getKey("MISTRAL_API_KEY")
|
|
}
|
|
);
|
|
|
|
|
|
// Prevents the following code from running when model not specified
|
|
if (typeof this.model_name === "undefined") return;
|
|
|
|
// get the model name without the "mistral" or "mistralai" prefix
|
|
// e.g "mistral/mistral-large-latest" -> "mistral-large-latest"
|
|
if (typeof model_name.split("/")[1] !== "undefined") {
|
|
this.model_name = model_name.split("/")[1];
|
|
}
|
|
}
|
|
|
|
async sendRequest(turns, systemMessage) {
|
|
|
|
let result;
|
|
|
|
try {
|
|
const model = this.model_name || "mistral-large-latest";
|
|
|
|
const messages = [
|
|
{ role: "system", content: systemMessage }
|
|
];
|
|
messages.push(...strictFormat(turns));
|
|
|
|
const response = await this.#client.chat.complete({
|
|
model,
|
|
messages,
|
|
...(this.params || {})
|
|
});
|
|
|
|
result = response.choices[0].message.content;
|
|
} catch (err) {
|
|
console.log(err)
|
|
|
|
result = "My brain disconnected, try again.";
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
async embed(text) {
|
|
const embedding = await this.#client.embeddings.create({
|
|
model: "mistral-embed",
|
|
inputs: text
|
|
});
|
|
return embedding.data[0].embedding;
|
|
}
|
|
} |