anything-llm/server/utils/agents/aibitat/providers/ai-provider.js
Timothy Carambat 81fd82e133
model specific summarization (#1119)
* model specific summarization

* update guard functions

* patch model picker and key inputs
2024-04-17 14:04:51 -07:00

54 lines
1.2 KiB
JavaScript

/**
* A service that provides an AI client to create a completion.
*/
const { ChatOpenAI } = require("langchain/chat_models/openai");
const { ChatAnthropic } = require("langchain/chat_models/anthropic");
class Provider {
_client;
constructor(client) {
if (this.constructor == Provider) {
throw new Error("Class is of abstract type and can't be instantiated");
}
this._client = client;
}
get client() {
return this._client;
}
static LangChainChatModel(provider = "openai", config = {}) {
switch (provider) {
case "openai":
return new ChatOpenAI({
openAIApiKey: process.env.OPEN_AI_KEY,
...config,
});
case "anthropic":
return new ChatAnthropic({
anthropicApiKey: process.env.ANTHROPIC_API_KEY,
...config,
});
default:
return new ChatOpenAI({
openAIApiKey: process.env.OPEN_AI_KEY,
...config,
});
}
}
static contextLimit(provider = "openai") {
switch (provider) {
case "openai":
return 8_000;
case "anthropic":
return 100_000;
default:
return 8_000;
}
}
}
module.exports = Provider;