diff --git a/README.md b/README.md
index 5ee788e692..538a3a6b45 100644
--- a/README.md
+++ b/README.md
@@ -1,149 +1,149 @@
-# Eliza 🤖
-
-
-
-
-
-
-
-📖 [Documentation](https://elizaos.github.io/eliza/) | 🎯 [Examples](https://github.com/thejoven/awesome-eliza)
-
-
-
-## 🌍 README Translations
-
-[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) | [Italiano](./README_IT.md) | [ไทย](./README_TH.md) | [Deutsch](./README_DE.md) | [Tiếng Việt](./README_VI.md) | [עִברִית](https://github.com/elizaos/Elisa/blob/main/README_HE.md) | [Tagalog](./README_TG.md) | [Polski](./README_PL.md) | [Arabic](./README_AR.md) | [Hungarian](./README_HU.md) | [Srpski](./README_RS.md) | [Română](./README_RO.md)
-
-## 🚩 Overview
-
-
-
-
-
-## ✨ Features
-
-- 🛠️ Full-featured Discord, Twitter and Telegram connectors
-- 🔗 Support for every model (Llama, Grok, OpenAI, Anthropic, etc.)
-- 👥 Multi-agent and room support
-- 📚 Easily ingest and interact with your documents
-- 💾 Retrievable memory and document store
-- 🚀 Highly extensible - create your own actions and clients
-- ☁️ Supports many models (local Llama, OpenAI, Anthropic, Groq, etc.)
-- 📦 Just works!
-
-## Video Tutorials
-
-[AI Agent Dev School](https://www.youtube.com/watch?v=ArptLpQiKfI&list=PLx5pnFXdPTRzWla0RaOxALTSTnVq53fKL)
-
-## 🎯 Use Cases
-
-- 🤖 Chatbots
-- 🕵️ Autonomous Agents
-- 📈 Business Process Handling
-- 🎮 Video Game NPCs
-- 🧠 Trading
-
-## 🚀 Quick Start
-
-### Prerequisites
-
-- [Python 2.7+](https://www.python.org/downloads/)
-- [Node.js 23+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
-- [pnpm](https://pnpm.io/installation)
-
-> **Note for Windows Users:** [WSL 2](https://learn.microsoft.com/en-us/windows/wsl/install-manual) is required.
-
-### Use the Starter (Recommended)
-
-```bash
-git clone https://github.com/elizaos/eliza-starter.git
-cd eliza-starter
-cp .env.example .env
-pnpm i && pnpm build && pnpm start
-```
-
-Once the agent is running, you should see the message to run "pnpm start:client" at the end.
-Open another terminal and move to same directory and then run below command and follow the URL to chat to your agent.
-
-```bash
-pnpm start:client
-```
-
-Then read the [Documentation](https://elizaos.github.io/eliza/) to learn how to customize your Eliza.
-
-### Manually Start Eliza (Only recommended if you know what you are doing)
-
-```bash
-# Clone the repository
-git clone https://github.com/elizaos/eliza.git
-
-# Checkout the latest release
-# This project iterates fast, so we recommend checking out the latest release
-git checkout $(git describe --tags --abbrev=0)
-```
-
-### Start Eliza with Gitpod
-
-[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/elizaos/eliza/tree/main)
-
-### Edit the .env file
-
-Copy .env.example to .env and fill in the appropriate values.
-
-```
-cp .env.example .env
-```
-
-Note: .env is optional. If you're planning to run multiple distinct agents, you can pass secrets through the character JSON
-
-### Automatically Start Eliza
-
-This will run everything to set up the project and start the bot with the default character.
-
-```bash
-sh scripts/start.sh
-```
-
-### Edit the character file
-
-1. Open `packages/core/src/defaultCharacter.ts` to modify the default character. Uncomment and edit.
-
-2. To load custom characters:
- - Use `pnpm start --characters="path/to/your/character.json"`
- - Multiple character files can be loaded simultaneously
-3. Connect with X (Twitter)
- - change `"clients": []` to `"clients": ["twitter"]` in the character file to connect with X
-
-### Manually Start Eliza
-
-```bash
-pnpm i
-pnpm build
-pnpm start
-
-# The project iterates fast, sometimes you need to clean the project if you are coming back to the project
-pnpm clean
-```
-
-#### Additional Requirements
-
-You may need to install Sharp. If you see an error when starting up, try installing it with the following command:
-
-```
-pnpm install --include=optional sharp
-```
-
-### Community & contact
-
-- [GitHub Issues](https://github.com/elizaos/eliza/issues). Best for: bugs you encounter using Eliza, and feature proposals.
-- [Discord](https://discord.gg/ai16z). Best for: sharing your applications and hanging out with the community.
-
-## Contributors
-
-
-
-
-
-## Star History
-
-[![Star History Chart](https://api.star-history.com/svg?repos=elizaos/eliza&type=Date)](https://star-history.com/#elizaos/eliza&Date)
+# Eliza 🤖
+
+
+
+
+
+
+
+📖 [Documentation](https://elizaos.github.io/eliza/) | 🎯 [Examples](https://github.com/thejoven/awesome-eliza)
+
+
+
+## 🌍 README Translations
+
+[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) | [Italiano](./README_IT.md) | [ไทย](./README_TH.md) | [Deutsch](./README_DE.md) | [Tiếng Việt](./README_VI.md) | [עִברִית](https://github.com/elizaos/Elisa/blob/main/README_HE.md) | [Tagalog](./README_TG.md) | [Polski](./README_PL.md) | [Arabic](./README_AR.md) | [Hungarian](./README_HU.md) | [Srpski](./README_RS.md) | [Română](./README_RO.md)
+
+## 🚩 Overview
+
+
+
+
+
+## ✨ Features
+
+- 🛠️ Full-featured Discord, Twitter and Telegram connectors
+- 🔗 Support for every model (Llama, Grok, OpenAI, Anthropic, etc.)
+- 👥 Multi-agent and room support
+- 📚 Easily ingest and interact with your documents
+- 💾 Retrievable memory and document store
+- 🚀 Highly extensible - create your own actions and clients
+- ☁️ Supports many models (local Llama, OpenAI, Anthropic, Groq, etc.)
+- 📦 Just works!
+
+## Video Tutorials
+
+[AI Agent Dev School](https://www.youtube.com/watch?v=ArptLpQiKfI&list=PLx5pnFXdPTRzWla0RaOxALTSTnVq53fKL)
+
+## 🎯 Use Cases
+
+- 🤖 Chatbots
+- 🕵️ Autonomous Agents
+- 📈 Business Process Handling
+- 🎮 Video Game NPCs
+- 🧠 Trading
+
+## 🚀 Quick Start
+
+### Prerequisites
+
+- [Python 2.7+](https://www.python.org/downloads/)
+- [Node.js 23+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
+- [pnpm](https://pnpm.io/installation)
+
+> **Note for Windows Users:** [WSL 2](https://learn.microsoft.com/en-us/windows/wsl/install-manual) is required.
+
+### Use the Starter (Recommended)
+
+```bash
+git clone https://github.com/elizaos/eliza-starter.git
+cd eliza-starter
+cp .env.example .env
+pnpm i && pnpm build && pnpm start
+```
+
+Once the agent is running, you should see the message to run "pnpm start:client" at the end.
+Open another terminal and move to same directory and then run below command and follow the URL to chat to your agent.
+
+```bash
+pnpm start:client
+```
+
+Then read the [Documentation](https://elizaos.github.io/eliza/) to learn how to customize your Eliza.
+
+### Manually Start Eliza (Only recommended if you know what you are doing)
+
+```bash
+# Clone the repository
+git clone https://github.com/elizaos/eliza.git
+
+# Checkout the latest release
+# This project iterates fast, so we recommend checking out the latest release
+git checkout $(git describe --tags --abbrev=0)
+```
+
+### Start Eliza with Gitpod
+
+[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/elizaos/eliza/tree/main)
+
+### Edit the .env file
+
+Copy .env.example to .env and fill in the appropriate values.
+
+```
+cp .env.example .env
+```
+
+Note: .env is optional. If you're planning to run multiple distinct agents, you can pass secrets through the character JSON
+
+### Automatically Start Eliza
+
+This will run everything to set up the project and start the bot with the default character.
+
+```bash
+sh scripts/start.sh
+```
+
+### Edit the character file
+
+1. Open `packages/core/src/defaultCharacter.ts` to modify the default character. Uncomment and edit.
+
+2. To load custom characters:
+ - Use `pnpm start --characters="path/to/your/character.json"`
+ - Multiple character files can be loaded simultaneously
+3. Connect with X (Twitter)
+ - change `"clients": []` to `"clients": ["twitter"]` in the character file to connect with X
+
+### Manually Start Eliza
+
+```bash
+pnpm i
+pnpm build
+pnpm start
+
+# The project iterates fast, sometimes you need to clean the project if you are coming back to the project
+pnpm clean
+```
+
+#### Additional Requirements
+
+You may need to install Sharp. If you see an error when starting up, try installing it with the following command:
+
+```
+pnpm install --include=optional sharp
+```
+
+### Community & contact
+
+- [GitHub Issues](https://github.com/elizaos/eliza/issues). Best for: bugs you encounter using Eliza, and feature proposals.
+- [Discord](https://discord.gg/ai16z). Best for: sharing your applications and hanging out with the community.
+
+## Contributors
+
+
+
+
+
+## Star History
+
+[![Star History Chart](https://api.star-history.com/svg?repos=elizaos/eliza&type=Date)](https://star-history.com/#elizaos/eliza&Date)
diff --git a/packages/client-discord/src/actions/chat_with_attachments.ts b/packages/client-discord/src/actions/chat_with_attachments.ts
index 67e0cc682d..8f62a77510 100644
--- a/packages/client-discord/src/actions/chat_with_attachments.ts
+++ b/packages/client-discord/src/actions/chat_with_attachments.ts
@@ -1,6 +1,5 @@
-import { composeContext } from "@elizaos/core";
+import { composeContext, getModelSettings } from "@elizaos/core";
import { generateText, trimTokens } from "@elizaos/core";
-import { models } from "@elizaos/core";
import { parseJSONObjectFromText } from "@elizaos/core";
import {
Action,
@@ -185,8 +184,11 @@ const summarizeAction = {
let currentSummary = "";
- const model = models[runtime.character.modelProvider];
- const chunkSize = model.settings.maxOutputTokens;
+ const modelSettings = getModelSettings(
+ runtime.character.modelProvider,
+ ModelClass.SMALL
+ );
+ const chunkSize = modelSettings.maxOutputTokens;
state.attachmentsWithText = attachmentsWithText;
state.objective = objective;
diff --git a/packages/client-discord/src/actions/summarize_conversation.ts b/packages/client-discord/src/actions/summarize_conversation.ts
index d9c9be6f42..accda5168e 100644
--- a/packages/client-discord/src/actions/summarize_conversation.ts
+++ b/packages/client-discord/src/actions/summarize_conversation.ts
@@ -1,7 +1,6 @@
-import { composeContext } from "@elizaos/core";
+import { composeContext, getModelSettings } from "@elizaos/core";
import { generateText, splitChunks, trimTokens } from "@elizaos/core";
import { getActorDetails } from "@elizaos/core";
-import { models } from "@elizaos/core";
import { parseJSONObjectFromText } from "@elizaos/core";
import {
Action,
@@ -247,8 +246,11 @@ const summarizeAction = {
let currentSummary = "";
- const model = models[runtime.character.settings.model];
- const chunkSize = model.settings.maxContextLength - 1000;
+ const modelSettings = getModelSettings(
+ runtime.character.modelProvider,
+ ModelClass.SMALL
+ );
+ const chunkSize = modelSettings.maxOutputTokens - 1000;
const chunks = await splitChunks(formattedMemories, chunkSize, 0);
diff --git a/packages/client-slack/src/actions/chat_with_attachments.ts b/packages/client-slack/src/actions/chat_with_attachments.ts
index 169add1222..e059cc47b4 100644
--- a/packages/client-slack/src/actions/chat_with_attachments.ts
+++ b/packages/client-slack/src/actions/chat_with_attachments.ts
@@ -3,6 +3,7 @@ import {
generateText,
trimTokens,
parseJSONObjectFromText,
+ getModelSettings,
} from "@elizaos/core";
import { models } from "@elizaos/core";
import {
@@ -194,8 +195,11 @@ const summarizeAction: Action = {
let currentSummary = "";
- const model = models[runtime.character.modelProvider];
- const chunkSize = model.settings.maxOutputTokens;
+ const modelSettings = getModelSettings(
+ runtime.character.modelProvider,
+ ModelClass.SMALL
+ );
+ const chunkSize = modelSettings.maxOutputTokens;
currentState.attachmentsWithText = attachmentsWithText;
currentState.objective = objective;
diff --git a/packages/client-slack/src/actions/summarize_conversation.ts b/packages/client-slack/src/actions/summarize_conversation.ts
index ec98e1f10d..b487757cad 100644
--- a/packages/client-slack/src/actions/summarize_conversation.ts
+++ b/packages/client-slack/src/actions/summarize_conversation.ts
@@ -4,6 +4,7 @@ import {
splitChunks,
trimTokens,
parseJSONObjectFromText,
+ getModelSettings,
} from "@elizaos/core";
import { models } from "@elizaos/core";
import { getActorDetails } from "@elizaos/core";
@@ -265,8 +266,11 @@ const summarizeAction: Action = {
let currentSummary = "";
- const model = models[runtime.character.modelProvider];
- const chunkSize = model.settings.maxOutputTokens;
+ const modelSettings = getModelSettings(
+ runtime.character.modelProvider,
+ ModelClass.SMALL
+ );
+ const chunkSize = modelSettings.maxOutputTokens;
const chunks = await splitChunks(formattedMemories, chunkSize, 0);
diff --git a/packages/core/src/embedding.ts b/packages/core/src/embedding.ts
index 659001b0c2..b1dea7c685 100644
--- a/packages/core/src/embedding.ts
+++ b/packages/core/src/embedding.ts
@@ -1,5 +1,5 @@
import path from "node:path";
-import { models } from "./models.ts";
+import { getEmbeddingModelSettings, getEndpoint } from "./models.ts";
import { IAgentRuntime, ModelProviderName } from "./types.ts";
import settings from "./settings.ts";
import elizaLogger from "./logger.ts";
@@ -33,19 +33,20 @@ export type EmbeddingConfig = {
export const getEmbeddingConfig = (): EmbeddingConfig => ({
dimensions:
settings.USE_OPENAI_EMBEDDING?.toLowerCase() === "true"
- ? 1536 // OpenAI
+ ? getEmbeddingModelSettings(ModelProviderName.OPENAI).dimensions
: settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === "true"
- ? 1024 // Ollama mxbai-embed-large
+ ? getEmbeddingModelSettings(ModelProviderName.OLLAMA).dimensions
: settings.USE_GAIANET_EMBEDDING?.toLowerCase() === "true"
- ? 768 // GaiaNet
+ ? getEmbeddingModelSettings(ModelProviderName.GAIANET)
+ .dimensions
: 384, // BGE
model:
settings.USE_OPENAI_EMBEDDING?.toLowerCase() === "true"
- ? "text-embedding-3-small"
+ ? getEmbeddingModelSettings(ModelProviderName.OPENAI).name
: settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === "true"
- ? settings.OLLAMA_EMBEDDING_MODEL || "mxbai-embed-large"
+ ? getEmbeddingModelSettings(ModelProviderName.OLLAMA).name
: settings.USE_GAIANET_EMBEDDING?.toLowerCase() === "true"
- ? settings.GAIANET_EMBEDDING_MODEL || "nomic-embed"
+ ? getEmbeddingModelSettings(ModelProviderName.GAIANET).name
: "BGE-small-en-v1.5",
provider:
settings.USE_OPENAI_EMBEDDING?.toLowerCase() === "true"
@@ -134,11 +135,17 @@ export function getEmbeddingZeroVector(): number[] {
let embeddingDimension = 384; // Default BGE dimension
if (settings.USE_OPENAI_EMBEDDING?.toLowerCase() === "true") {
- embeddingDimension = 1536; // OpenAI dimension
+ embeddingDimension = getEmbeddingModelSettings(
+ ModelProviderName.OPENAI
+ ).dimensions; // OpenAI dimension
} else if (settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === "true") {
- embeddingDimension = 1024; // Ollama mxbai-embed-large dimension
+ embeddingDimension = getEmbeddingModelSettings(
+ ModelProviderName.OLLAMA
+ ).dimensions; // Ollama mxbai-embed-large dimension
} else if (settings.USE_GAIANET_EMBEDDING?.toLowerCase() === "true") {
- embeddingDimension = 768; // GaiaNet dimension
+ embeddingDimension = getEmbeddingModelSettings(
+ ModelProviderName.GAIANET
+ ).dimensions; // GaiaNet dimension
}
return Array(embeddingDimension).fill(0);
@@ -202,7 +209,7 @@ export async function embed(runtime: IAgentRuntime, input: string) {
model: config.model,
endpoint:
runtime.character.modelEndpointOverride ||
- models[ModelProviderName.OLLAMA].endpoint,
+ getEndpoint(ModelProviderName.OLLAMA),
isOllama: true,
dimensions: config.dimensions,
});
@@ -213,7 +220,7 @@ export async function embed(runtime: IAgentRuntime, input: string) {
model: config.model,
endpoint:
runtime.character.modelEndpointOverride ||
- models[ModelProviderName.GAIANET].endpoint ||
+ getEndpoint(ModelProviderName.GAIANET) ||
settings.SMALL_GAIANET_SERVER_URL ||
settings.MEDIUM_GAIANET_SERVER_URL ||
settings.LARGE_GAIANET_SERVER_URL,
@@ -239,7 +246,7 @@ export async function embed(runtime: IAgentRuntime, input: string) {
model: config.model,
endpoint:
runtime.character.modelEndpointOverride ||
- models[runtime.character.modelProvider].endpoint,
+ getEndpoint(runtime.character.modelProvider),
apiKey: runtime.token,
dimensions: config.dimensions,
});
diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts
index 5db5b8e70a..0f15ff8dbb 100644
--- a/packages/core/src/generation.ts
+++ b/packages/core/src/generation.ts
@@ -18,7 +18,12 @@ import { AutoTokenizer } from "@huggingface/transformers";
import Together from "together-ai";
import { ZodSchema } from "zod";
import { elizaLogger } from "./index.ts";
-import { getModel, models } from "./models.ts";
+import {
+ models,
+ getModelSettings,
+ getImageModelSettings,
+ getEndpoint,
+} from "./models.ts";
import {
parseBooleanFromText,
parseJsonArrayFromText,
@@ -179,7 +184,7 @@ export async function generateText({
}: {
runtime: IAgentRuntime;
context: string;
- modelClass: string;
+ modelClass: ModelClass;
tools?: Record;
onStepFinish?: (event: StepResult) => Promise | void;
maxSteps?: number;
@@ -200,8 +205,9 @@ export async function generateText({
const provider = runtime.modelProvider;
const endpoint =
- runtime.character.modelEndpointOverride || models[provider].endpoint;
- let model = models[provider].model[modelClass];
+ runtime.character.modelEndpointOverride || getEndpoint(provider);
+ const modelSettings = getModelSettings(runtime.modelProvider, modelClass);
+ let model = modelSettings.name;
// allow character.json settings => secrets to override models
// FIXME: add MODEL_MEDIUM support
@@ -273,23 +279,20 @@ export async function generateText({
const modelConfiguration = runtime.character?.settings?.modelConfig;
const temperature =
- modelConfiguration?.temperature ||
- models[provider].settings.temperature;
+ modelConfiguration?.temperature || modelSettings.temperature;
const frequency_penalty =
modelConfiguration?.frequency_penalty ||
- models[provider].settings.frequency_penalty;
+ modelSettings.frequency_penalty;
const presence_penalty =
- modelConfiguration?.presence_penalty ||
- models[provider].settings.presence_penalty;
+ modelConfiguration?.presence_penalty || modelSettings.presence_penalty;
const max_context_length =
- modelConfiguration?.maxInputTokens ||
- models[provider].settings.maxInputTokens;
+ modelConfiguration?.maxInputTokens || modelSettings.maxInputTokens;
const max_response_length =
modelConfiguration?.max_response_length ||
- models[provider].settings.maxOutputTokens;
+ modelSettings.maxOutputTokens;
const experimental_telemetry =
modelConfiguration?.experimental_telemetry ||
- models[provider].settings.experimental_telemetry;
+ modelSettings.experimental_telemetry;
const apiKey = runtime.token;
@@ -302,7 +305,7 @@ export async function generateText({
let response: string;
- const _stop = stop || models[provider].settings.stop;
+ const _stop = stop || modelSettings.stop;
elizaLogger.debug(
`Using provider: ${provider}, model: ${model}, temperature: ${temperature}, max response length: ${max_response_length}`
);
@@ -565,7 +568,7 @@ export async function generateText({
case ModelProviderName.REDPILL: {
elizaLogger.debug("Initializing RedPill model.");
- const serverUrl = models[provider].endpoint;
+ const serverUrl = getEndpoint(provider);
const openai = createOpenAI({
apiKey,
baseURL: serverUrl,
@@ -596,7 +599,7 @@ export async function generateText({
case ModelProviderName.OPENROUTER: {
elizaLogger.debug("Initializing OpenRouter model.");
- const serverUrl = models[provider].endpoint;
+ const serverUrl = getEndpoint(provider);
const openrouter = createOpenAI({
apiKey,
baseURL: serverUrl,
@@ -630,7 +633,7 @@ export async function generateText({
elizaLogger.debug("Initializing Ollama model.");
const ollamaProvider = createOllama({
- baseURL: models[provider].endpoint + "/api",
+ baseURL: getEndpoint(provider) + "/api",
fetch: runtime.fetch,
});
const ollama = ollamaProvider(model);
@@ -688,7 +691,7 @@ export async function generateText({
case ModelProviderName.GAIANET: {
elizaLogger.debug("Initializing GAIANET model.");
- var baseURL = models[provider].endpoint;
+ var baseURL = getEndpoint(provider);
if (!baseURL) {
switch (modelClass) {
case ModelClass.SMALL:
@@ -830,7 +833,7 @@ export async function generateShouldRespond({
}: {
runtime: IAgentRuntime;
context: string;
- modelClass: string;
+ modelClass: ModelClass;
}): Promise<"RESPOND" | "IGNORE" | "STOP" | null> {
let retryDelay = 1000;
while (true) {
@@ -913,15 +916,12 @@ export async function generateTrueOrFalse({
}: {
runtime: IAgentRuntime;
context: string;
- modelClass: string;
+ modelClass: ModelClass;
}): Promise {
let retryDelay = 1000;
-
+ const modelSettings = getModelSettings(runtime.modelProvider, modelClass);
const stop = Array.from(
- new Set([
- ...(models[runtime.modelProvider].settings.stop || []),
- ["\n"],
- ])
+ new Set([...(modelSettings.stop || []), ["\n"]])
) as string[];
while (true) {
@@ -968,7 +968,7 @@ export async function generateTextArray({
}: {
runtime: IAgentRuntime;
context: string;
- modelClass: string;
+ modelClass: ModelClass;
}): Promise {
if (!context) {
elizaLogger.error("generateTextArray context is empty");
@@ -1004,7 +1004,7 @@ export async function generateObjectDeprecated({
}: {
runtime: IAgentRuntime;
context: string;
- modelClass: string;
+ modelClass: ModelClass;
}): Promise {
if (!context) {
elizaLogger.error("generateObjectDeprecated context is empty");
@@ -1040,7 +1040,7 @@ export async function generateObjectArray({
}: {
runtime: IAgentRuntime;
context: string;
- modelClass: string;
+ modelClass: ModelClass;
}): Promise {
if (!context) {
elizaLogger.error("generateObjectArray context is empty");
@@ -1088,10 +1088,10 @@ export async function generateMessageResponse({
}: {
runtime: IAgentRuntime;
context: string;
- modelClass: string;
+ modelClass: ModelClass;
}): Promise {
- const provider = runtime.modelProvider;
- const max_context_length = models[provider].settings.maxInputTokens;
+ const modelSettings = getModelSettings(runtime.modelProvider, modelClass);
+ const max_context_length = modelSettings.maxInputTokens;
context = await trimTokens(context, max_context_length, runtime);
let retryLength = 1000; // exponential backoff
@@ -1144,9 +1144,8 @@ export const generateImage = async (
data?: string[];
error?: any;
}> => {
- const model = getModel(runtime.imageModelProvider, ModelClass.IMAGE);
- const modelSettings = models[runtime.imageModelProvider].imageSettings;
-
+ const modelSettings = getImageModelSettings(runtime.imageModelProvider);
+ const model = modelSettings.name;
elizaLogger.info("Generating image with options:", {
imageModelProvider: model,
});
@@ -1204,7 +1203,7 @@ export const generateImage = async (
seed: data.seed || -1,
},
},
- model_id: data.modelId || "FLUX.1-dev",
+ model_id: model,
deadline: 60,
priority: 1,
}),
@@ -1226,7 +1225,7 @@ export const generateImage = async (
) {
const together = new Together({ apiKey: apiKey as string });
const response = await together.images.create({
- model: "black-forest-labs/FLUX.1-schnell",
+ model: model,
prompt: data.prompt,
width: data.width,
height: data.height,
@@ -1341,7 +1340,7 @@ export const generateImage = async (
"Content-Type": "application/json",
},
body: JSON.stringify({
- model: data.modelId || "fluently-xl",
+ model: model,
prompt: data.prompt,
negative_prompt: data.negativePrompt,
width: data.width,
@@ -1387,8 +1386,7 @@ export const generateImage = async (
"Content-Type": "application/json",
},
body: JSON.stringify({
- model_id:
- data.modelId || "ByteDance/SDXL-Lightning",
+ model_id: model,
prompt: data.prompt,
width: data.width || 1024,
height: data.height || 1024,
@@ -1561,14 +1559,14 @@ export const generateObject = async ({
}
const provider = runtime.modelProvider;
- const model = models[provider].model[modelClass];
- const temperature = models[provider].settings.temperature;
- const frequency_penalty = models[provider].settings.frequency_penalty;
- const presence_penalty = models[provider].settings.presence_penalty;
- const max_context_length = models[provider].settings.maxInputTokens;
- const max_response_length = models[provider].settings.maxOutputTokens;
- const experimental_telemetry =
- models[provider].settings.experimental_telemetry;
+ const modelSettings = getModelSettings(runtime.modelProvider, modelClass);
+ const model = modelSettings.name;
+ const temperature = modelSettings.temperature;
+ const frequency_penalty = modelSettings.frequency_penalty;
+ const presence_penalty = modelSettings.presence_penalty;
+ const max_context_length = modelSettings.maxInputTokens;
+ const max_response_length = modelSettings.maxOutputTokens;
+ const experimental_telemetry = modelSettings.experimental_telemetry;
const apiKey = runtime.token;
try {
@@ -1580,7 +1578,7 @@ export const generateObject = async ({
maxTokens: max_response_length,
frequencyPenalty: frequency_penalty,
presencePenalty: presence_penalty,
- stop: stop || models[provider].settings.stop,
+ stop: stop || modelSettings.stop,
experimental_telemetry: experimental_telemetry,
};
@@ -1619,7 +1617,7 @@ interface ProviderOptions {
mode?: "auto" | "json" | "tool";
experimental_providerMetadata?: Record;
modelOptions: ModelSettings;
- modelClass: string;
+ modelClass: ModelClass;
context: string;
}
@@ -1873,7 +1871,7 @@ async function handleOllama({
provider,
}: ProviderOptions): Promise> {
const ollamaProvider = createOllama({
- baseURL: models[provider].endpoint + "/api",
+ baseURL: getEndpoint(provider) + "/api",
});
const ollama = ollamaProvider(model);
return await aiGenerateObject({
@@ -1902,7 +1900,7 @@ export async function generateTweetActions({
}: {
runtime: IAgentRuntime;
context: string;
- modelClass: string;
+ modelClass: ModelClass;
}): Promise {
let retryDelay = 1000;
while (true) {
diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts
index 235edfc106..4355aee48b 100644
--- a/packages/core/src/models.ts
+++ b/packages/core/src/models.ts
@@ -1,531 +1,892 @@
import settings from "./settings.ts";
-import { Models, ModelProviderName, ModelClass } from "./types.ts";
+import {
+ Models,
+ ModelProviderName,
+ ModelClass,
+ ModelSettings,
+ ImageModelSettings,
+ EmbeddingModelSettings,
+} from "./types.ts";
export const models: Models = {
[ModelProviderName.OPENAI]: {
endpoint: settings.OPENAI_API_URL || "https://api.openai.com/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.0,
- presence_penalty: 0.0,
- temperature: 0.6,
- },
model: {
- [ModelClass.SMALL]: settings.SMALL_OPENAI_MODEL || "gpt-4o-mini",
- [ModelClass.MEDIUM]: settings.MEDIUM_OPENAI_MODEL || "gpt-4o",
- [ModelClass.LARGE]: settings.LARGE_OPENAI_MODEL || "gpt-4o",
- [ModelClass.EMBEDDING]:
- settings.EMBEDDING_OPENAI_MODEL || "text-embedding-3-small",
- [ModelClass.IMAGE]: settings.IMAGE_OPENAI_MODEL || "dall-e-3",
+ [ModelClass.SMALL]: {
+ name: settings.SMALL_OPENAI_MODEL || "gpt-4o-mini",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name: settings.MEDIUM_OPENAI_MODEL || "gpt-4o",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+ [ModelClass.LARGE]: {
+ name: settings.LARGE_OPENAI_MODEL || "gpt-4o",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+ [ModelClass.EMBEDDING]: {
+ name:
+ settings.EMBEDDING_OPENAI_MODEL || "text-embedding-3-small",
+ dimensions: 1536,
+ },
+ [ModelClass.IMAGE]: {
+ name: settings.IMAGE_OPENAI_MODEL || "dall-e-3",
+ },
},
},
[ModelProviderName.ETERNALAI]: {
endpoint: settings.ETERNALAI_URL,
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.0,
- presence_penalty: 0.0,
- temperature: 0.6,
- },
model: {
- [ModelClass.SMALL]:
- settings.ETERNALAI_MODEL ||
- "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16",
- [ModelClass.MEDIUM]:
- settings.ETERNALAI_MODEL ||
- "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16",
- [ModelClass.LARGE]:
- settings.ETERNALAI_MODEL ||
- "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16",
- [ModelClass.EMBEDDING]: "",
- [ModelClass.IMAGE]: "",
+ [ModelClass.SMALL]: {
+ name:
+ settings.ETERNALAI_MODEL ||
+ "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.ETERNALAI_MODEL ||
+ "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.ETERNALAI_MODEL ||
+ "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
},
},
[ModelProviderName.ANTHROPIC]: {
- settings: {
- stop: [],
- maxInputTokens: 200000,
- maxOutputTokens: 4096,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.7,
- },
endpoint: "https://api.anthropic.com/v1",
model: {
- [ModelClass.SMALL]:
- settings.SMALL_ANTHROPIC_MODEL || "claude-3-haiku-20240307",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_ANTHROPIC_MODEL || "claude-3-5-sonnet-20241022",
- [ModelClass.LARGE]:
- settings.LARGE_ANTHROPIC_MODEL || "claude-3-5-sonnet-20241022",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_ANTHROPIC_MODEL || "claude-3-haiku-20240307",
+ stop: [],
+ maxInputTokens: 200000,
+ maxOutputTokens: 4096,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_ANTHROPIC_MODEL ||
+ "claude-3-5-sonnet-20241022",
+ stop: [],
+ maxInputTokens: 200000,
+ maxOutputTokens: 4096,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_ANTHROPIC_MODEL ||
+ "claude-3-5-sonnet-20241022",
+ stop: [],
+ maxInputTokens: 200000,
+ maxOutputTokens: 4096,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
},
},
[ModelProviderName.CLAUDE_VERTEX]: {
- settings: {
- stop: [],
- maxInputTokens: 200000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.7,
- },
endpoint: "https://api.anthropic.com/v1", // TODO: check
model: {
- [ModelClass.SMALL]: "claude-3-5-sonnet-20241022",
- [ModelClass.MEDIUM]: "claude-3-5-sonnet-20241022",
- [ModelClass.LARGE]: "claude-3-opus-20240229",
+ [ModelClass.SMALL]: {
+ name: "claude-3-5-sonnet-20241022",
+ stop: [],
+ maxInputTokens: 200000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name: "claude-3-5-sonnet-20241022",
+ stop: [],
+ maxInputTokens: 200000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name: "claude-3-opus-20240229",
+ stop: [],
+ maxInputTokens: 200000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
},
},
[ModelProviderName.GROK]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.7,
- },
endpoint: "https://api.x.ai/v1",
model: {
- [ModelClass.SMALL]: settings.SMALL_GROK_MODEL || "grok-2-1212",
- [ModelClass.MEDIUM]: settings.MEDIUM_GROK_MODEL || "grok-2-1212",
- [ModelClass.LARGE]: settings.LARGE_GROK_MODEL || "grok-2-1212",
- [ModelClass.EMBEDDING]:
- settings.EMBEDDING_GROK_MODEL || "grok-2-1212", // not sure about this one
+ [ModelClass.SMALL]: {
+ name: settings.SMALL_GROK_MODEL || "grok-2-1212",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name: settings.MEDIUM_GROK_MODEL || "grok-2-1212",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name: settings.LARGE_GROK_MODEL || "grok-2-1212",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: settings.EMBEDDING_GROK_MODEL || "grok-2-1212", // not sure about this one
+ },
},
},
[ModelProviderName.GROQ]: {
endpoint: "https://api.groq.com/openai/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8000,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.7,
- },
model: {
- [ModelClass.SMALL]:
- settings.SMALL_GROQ_MODEL || "llama-3.1-8b-instant",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_GROQ_MODEL || "llama-3.3-70b-versatile",
- [ModelClass.LARGE]:
- settings.LARGE_GROQ_MODEL || "llama-3.2-90b-vision-preview",
- [ModelClass.EMBEDDING]:
- settings.EMBEDDING_GROQ_MODEL || "llama-3.1-8b-instant",
+ [ModelClass.SMALL]: {
+ name: settings.SMALL_GROQ_MODEL || "llama-3.1-8b-instant",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8000,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name: settings.MEDIUM_GROQ_MODEL || "llama-3.3-70b-versatile",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8000,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_GROQ_MODEL || "llama-3.2-90b-vision-preview",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8000,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: settings.EMBEDDING_GROQ_MODEL || "llama-3.1-8b-instant",
+ },
},
},
[ModelProviderName.LLAMACLOUD]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- repetition_penalty: 0.4,
- temperature: 0.7,
- },
- imageSettings: {
- steps: 4,
- },
endpoint: "https://api.llamacloud.com/v1",
model: {
- [ModelClass.SMALL]: "meta-llama/Llama-3.2-3B-Instruct-Turbo",
- [ModelClass.MEDIUM]: "meta-llama-3.1-8b-instruct",
- [ModelClass.LARGE]: "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo",
- [ModelClass.EMBEDDING]:
- "togethercomputer/m2-bert-80M-32k-retrieval",
- [ModelClass.IMAGE]: "black-forest-labs/FLUX.1-schnell",
+ [ModelClass.SMALL]: {
+ name: "meta-llama/Llama-3.2-3B-Instruct-Turbo",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name: "meta-llama-3.1-8b-instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name: "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: "togethercomputer/m2-bert-80M-32k-retrieval",
+ },
+ [ModelClass.IMAGE]: {
+ name: "black-forest-labs/FLUX.1-schnell",
+ steps: 4,
+ },
},
},
[ModelProviderName.TOGETHER]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- repetition_penalty: 0.4,
- temperature: 0.7,
- },
- imageSettings: {
- steps: 4,
- },
endpoint: "https://api.together.ai/v1",
model: {
- [ModelClass.SMALL]: "meta-llama/Llama-3.2-3B-Instruct-Turbo",
- [ModelClass.MEDIUM]: "meta-llama-3.1-8b-instruct",
- [ModelClass.LARGE]: "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo",
- [ModelClass.EMBEDDING]:
- "togethercomputer/m2-bert-80M-32k-retrieval",
- [ModelClass.IMAGE]: "black-forest-labs/FLUX.1-schnell",
+ [ModelClass.SMALL]: {
+ name: "meta-llama/Llama-3.2-3B-Instruct-Turbo",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name: "meta-llama-3.1-8b-instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name: "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: "togethercomputer/m2-bert-80M-32k-retrieval",
+ },
+ [ModelClass.IMAGE]: {
+ name: "black-forest-labs/FLUX.1-schnell",
+ steps: 4,
+ },
},
},
[ModelProviderName.LLAMALOCAL]: {
- settings: {
- stop: ["<|eot_id|>", "<|eom_id|>"],
- maxInputTokens: 32768,
- maxOutputTokens: 8192,
- repetition_penalty: 0.4,
- temperature: 0.7,
- },
model: {
- [ModelClass.SMALL]:
- "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true",
- [ModelClass.MEDIUM]:
- "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true", // TODO: ?download=true
- [ModelClass.LARGE]:
- "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true",
- // "RichardErkhov/NousResearch_-_Meta-Llama-3.1-70B-gguf", // TODO:
- [ModelClass.EMBEDDING]:
- "togethercomputer/m2-bert-80M-32k-retrieval",
+ [ModelClass.SMALL]: {
+ name: "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true",
+ stop: ["<|eot_id|>", "<|eom_id|>"],
+ maxInputTokens: 32768,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name: "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true", // TODO: ?download=true
+ stop: ["<|eot_id|>", "<|eom_id|>"],
+ maxInputTokens: 32768,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name: "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true", // "RichardErkhov/NousResearch_-_Meta-Llama-3.1-70B-gguf", // TODO:
+ stop: ["<|eot_id|>", "<|eom_id|>"],
+ maxInputTokens: 32768,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: "togethercomputer/m2-bert-80M-32k-retrieval",
+ },
},
},
[ModelProviderName.GOOGLE]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.7,
- },
model: {
- [ModelClass.SMALL]:
- settings.SMALL_GOOGLE_MODEL ||
- settings.GOOGLE_MODEL ||
- "gemini-2.0-flash-exp",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_GOOGLE_MODEL ||
- settings.GOOGLE_MODEL ||
- "gemini-2.0-flash-exp",
- [ModelClass.LARGE]:
- settings.LARGE_GOOGLE_MODEL ||
- settings.GOOGLE_MODEL ||
- "gemini-2.0-flash-exp",
- [ModelClass.EMBEDDING]:
- settings.EMBEDDING_GOOGLE_MODEL ||
- settings.GOOGLE_MODEL ||
- "text-embedding-004",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_GOOGLE_MODEL ||
+ settings.GOOGLE_MODEL ||
+ "gemini-2.0-flash-exp",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_GOOGLE_MODEL ||
+ settings.GOOGLE_MODEL ||
+ "gemini-2.0-flash-exp",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_GOOGLE_MODEL ||
+ settings.GOOGLE_MODEL ||
+ "gemini-2.0-flash-exp",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.EMBEDDING]: {
+ name:
+ settings.EMBEDDING_GOOGLE_MODEL ||
+ settings.GOOGLE_MODEL ||
+ "text-embedding-004",
+ },
},
},
[ModelProviderName.REDPILL]: {
endpoint: "https://api.red-pill.ai/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.0,
- presence_penalty: 0.0,
- temperature: 0.6,
- },
// Available models: https://docs.red-pill.ai/get-started/supported-models
// To test other models, change the models below
model: {
- [ModelClass.SMALL]:
- settings.SMALL_REDPILL_MODEL ||
- settings.REDPILL_MODEL ||
- "gpt-4o-mini",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_REDPILL_MODEL ||
- settings.REDPILL_MODEL ||
- "gpt-4o",
- [ModelClass.LARGE]:
- settings.LARGE_REDPILL_MODEL ||
- settings.REDPILL_MODEL ||
- "gpt-4o",
- [ModelClass.EMBEDDING]: "text-embedding-3-small",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_REDPILL_MODEL ||
+ settings.REDPILL_MODEL ||
+ "gpt-4o-mini",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_REDPILL_MODEL ||
+ settings.REDPILL_MODEL ||
+ "gpt-4o",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_REDPILL_MODEL ||
+ settings.REDPILL_MODEL ||
+ "gpt-4o",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+
+ [ModelClass.EMBEDDING]: {
+ name: "text-embedding-3-small",
+ },
},
},
[ModelProviderName.OPENROUTER]: {
endpoint: "https://openrouter.ai/api/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.7,
- },
// Available models: https://openrouter.ai/models
// To test other models, change the models below
model: {
- [ModelClass.SMALL]:
- settings.SMALL_OPENROUTER_MODEL ||
- settings.OPENROUTER_MODEL ||
- "nousresearch/hermes-3-llama-3.1-405b",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_OPENROUTER_MODEL ||
- settings.OPENROUTER_MODEL ||
- "nousresearch/hermes-3-llama-3.1-405b",
- [ModelClass.LARGE]:
- settings.LARGE_OPENROUTER_MODEL ||
- settings.OPENROUTER_MODEL ||
- "nousresearch/hermes-3-llama-3.1-405b",
- [ModelClass.EMBEDDING]: "text-embedding-3-small",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_OPENROUTER_MODEL ||
+ settings.OPENROUTER_MODEL ||
+ "nousresearch/hermes-3-llama-3.1-405b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_OPENROUTER_MODEL ||
+ settings.OPENROUTER_MODEL ||
+ "nousresearch/hermes-3-llama-3.1-405b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_OPENROUTER_MODEL ||
+ settings.OPENROUTER_MODEL ||
+ "nousresearch/hermes-3-llama-3.1-405b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: "text-embedding-3-small",
+ },
},
},
[ModelProviderName.OLLAMA]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.7,
- },
endpoint: settings.OLLAMA_SERVER_URL || "http://localhost:11434",
model: {
- [ModelClass.SMALL]:
- settings.SMALL_OLLAMA_MODEL ||
- settings.OLLAMA_MODEL ||
- "llama3.2",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_OLLAMA_MODEL ||
- settings.OLLAMA_MODEL ||
- "hermes3",
- [ModelClass.LARGE]:
- settings.LARGE_OLLAMA_MODEL ||
- settings.OLLAMA_MODEL ||
- "hermes3:70b",
- [ModelClass.EMBEDDING]:
- settings.OLLAMA_EMBEDDING_MODEL || "mxbai-embed-large",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_OLLAMA_MODEL ||
+ settings.OLLAMA_MODEL ||
+ "llama3.2",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_OLLAMA_MODEL ||
+ settings.OLLAMA_MODEL ||
+ "hermes3",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_OLLAMA_MODEL ||
+ settings.OLLAMA_MODEL ||
+ "hermes3:70b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.7,
+ },
+
+ [ModelClass.EMBEDDING]: {
+ name: settings.OLLAMA_EMBEDDING_MODEL || "mxbai-embed-large",
+ dimensions: 1024,
+ },
},
},
[ModelProviderName.HEURIST]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- repetition_penalty: 0.4,
- temperature: 0.7,
- },
- imageSettings: {
- steps: 20,
- },
endpoint: "https://llm-gateway.heurist.xyz",
model: {
- [ModelClass.SMALL]:
- settings.SMALL_HEURIST_MODEL ||
- "meta-llama/llama-3-70b-instruct",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_HEURIST_MODEL ||
- "meta-llama/llama-3-70b-instruct",
- [ModelClass.LARGE]:
- settings.LARGE_HEURIST_MODEL ||
- "meta-llama/llama-3.1-405b-instruct",
- [ModelClass.EMBEDDING]: "", //Add later,
- [ModelClass.IMAGE]: settings.HEURIST_IMAGE_MODEL || "PepeXL",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_HEURIST_MODEL ||
+ "meta-llama/llama-3-70b-instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_HEURIST_MODEL ||
+ "meta-llama/llama-3-70b-instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_HEURIST_MODEL ||
+ "meta-llama/llama-3.1-405b-instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.IMAGE]: {
+ name: settings.HEURIST_IMAGE_MODEL || "PepeXL",
+ steps: 20,
+ },
},
},
[ModelProviderName.GALADRIEL]: {
endpoint: "https://api.galadriel.com/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.5,
- presence_penalty: 0.5,
- temperature: 0.8,
- },
model: {
- [ModelClass.SMALL]: "llama3.1:70b",
- [ModelClass.MEDIUM]: "llama3.1:70b",
- [ModelClass.LARGE]: "llama3.1:405b",
- [ModelClass.EMBEDDING]: "gte-large-en-v1.5",
- [ModelClass.IMAGE]: "stabilityai/stable-diffusion-xl-base-1.0",
+ [ModelClass.SMALL]: {
+ name: "llama3.1:70b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.5,
+ presence_penalty: 0.5,
+ temperature: 0.8,
+ },
+ [ModelClass.MEDIUM]: {
+ name: "llama3.1:70b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.5,
+ presence_penalty: 0.5,
+ temperature: 0.8,
+ },
+ [ModelClass.LARGE]: {
+ name: "llama3.1:405b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.5,
+ presence_penalty: 0.5,
+ temperature: 0.8,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: "gte-large-en-v1.5",
+ },
+ [ModelClass.IMAGE]: {
+ name: "stabilityai/stable-diffusion-xl-base-1.0",
+ },
},
},
[ModelProviderName.FAL]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- repetition_penalty: 0.4,
- temperature: 0.7,
- },
- imageSettings: {
- steps: 28,
- },
endpoint: "https://api.fal.ai/v1",
model: {
- [ModelClass.SMALL]: "", // FAL doesn't provide text models
- [ModelClass.MEDIUM]: "",
- [ModelClass.LARGE]: "",
- [ModelClass.EMBEDDING]: "",
- [ModelClass.IMAGE]: "fal-ai/flux-lora",
+ [ModelClass.IMAGE]: { name: "fal-ai/flux-lora", steps: 28 },
},
},
[ModelProviderName.GAIANET]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- repetition_penalty: 0.4,
- temperature: 0.7,
- },
endpoint: settings.GAIANET_SERVER_URL,
model: {
- [ModelClass.SMALL]:
- settings.GAIANET_MODEL ||
- settings.SMALL_GAIANET_MODEL ||
- "llama3b",
- [ModelClass.MEDIUM]:
- settings.GAIANET_MODEL ||
- settings.MEDIUM_GAIANET_MODEL ||
- "llama",
- [ModelClass.LARGE]:
- settings.GAIANET_MODEL ||
- settings.LARGE_GAIANET_MODEL ||
- "qwen72b",
- [ModelClass.EMBEDDING]:
- settings.GAIANET_EMBEDDING_MODEL || "nomic-embed",
+ [ModelClass.SMALL]: {
+ name:
+ settings.GAIANET_MODEL ||
+ settings.SMALL_GAIANET_MODEL ||
+ "llama3b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.GAIANET_MODEL ||
+ settings.MEDIUM_GAIANET_MODEL ||
+ "llama",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.GAIANET_MODEL ||
+ settings.LARGE_GAIANET_MODEL ||
+ "qwen72b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ repetition_penalty: 0.4,
+ temperature: 0.7,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: settings.GAIANET_EMBEDDING_MODEL || "nomic-embed",
+ dimensions: 768,
+ },
},
},
[ModelProviderName.ALI_BAILIAN]: {
endpoint: "https://dashscope.aliyuncs.com/compatible-mode/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.6,
- },
model: {
- [ModelClass.SMALL]: "qwen-turbo",
- [ModelClass.MEDIUM]: "qwen-plus",
- [ModelClass.LARGE]: "qwen-max",
- [ModelClass.IMAGE]: "wanx-v1",
+ [ModelClass.SMALL]: {
+ name: "qwen-turbo",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name: "qwen-plus",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.6,
+ },
+ [ModelClass.LARGE]: {
+ name: "qwen-max",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.6,
+ },
+ [ModelClass.IMAGE]: {
+ name: "wanx-v1",
+ },
},
},
[ModelProviderName.VOLENGINE]: {
endpoint:
settings.VOLENGINE_API_URL ||
"https://open.volcengineapi.com/api/v3/",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.4,
- presence_penalty: 0.4,
- temperature: 0.6,
- },
model: {
- [ModelClass.SMALL]:
- settings.SMALL_VOLENGINE_MODEL ||
- settings.VOLENGINE_MODEL ||
- "doubao-lite-128k",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_VOLENGINE_MODEL ||
- settings.VOLENGINE_MODEL ||
- "doubao-pro-128k",
- [ModelClass.LARGE]:
- settings.LARGE_VOLENGINE_MODEL ||
- settings.VOLENGINE_MODEL ||
- "doubao-pro-256k",
- [ModelClass.EMBEDDING]:
- settings.VOLENGINE_EMBEDDING_MODEL || "doubao-embedding",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_VOLENGINE_MODEL ||
+ settings.VOLENGINE_MODEL ||
+ "doubao-lite-128k",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_VOLENGINE_MODEL ||
+ settings.VOLENGINE_MODEL ||
+ "doubao-pro-128k",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.6,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_VOLENGINE_MODEL ||
+ settings.VOLENGINE_MODEL ||
+ "doubao-pro-256k",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.4,
+ presence_penalty: 0.4,
+ temperature: 0.6,
+ },
+ [ModelClass.EMBEDDING]: {
+ name: settings.VOLENGINE_EMBEDDING_MODEL || "doubao-embedding",
+ },
},
},
[ModelProviderName.NANOGPT]: {
endpoint: "https://nano-gpt.com/api/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- frequency_penalty: 0.0,
- presence_penalty: 0.0,
- temperature: 0.6,
- },
model: {
- [ModelClass.SMALL]: settings.SMALL_NANOGPT_MODEL || "gpt-4o-mini",
- [ModelClass.MEDIUM]: settings.MEDIUM_NANOGPT_MODEL || "gpt-4o",
- [ModelClass.LARGE]: settings.LARGE_NANOGPT_MODEL || "gpt-4o",
+ [ModelClass.SMALL]: {
+ name: settings.SMALL_NANOGPT_MODEL || "gpt-4o-mini",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name: settings.MEDIUM_NANOGPT_MODEL || "gpt-4o",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
+ [ModelClass.LARGE]: {
+ name: settings.LARGE_NANOGPT_MODEL || "gpt-4o",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ temperature: 0.6,
+ },
},
},
[ModelProviderName.HYPERBOLIC]: {
endpoint: "https://api.hyperbolic.xyz/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- temperature: 0.6,
- },
model: {
- [ModelClass.SMALL]:
- settings.SMALL_HYPERBOLIC_MODEL ||
- settings.HYPERBOLIC_MODEL ||
- "meta-llama/Llama-3.2-3B-Instruct",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_HYPERBOLIC_MODEL ||
- settings.HYPERBOLIC_MODEL ||
- "meta-llama/Meta-Llama-3.1-70B-Instruct",
- [ModelClass.LARGE]:
- settings.LARGE_HYPERBOLIC_MODEL ||
- settings.HYPERBOLIC_MODEL ||
- "meta-llama/Meta-Llama-3.1-405-Instruct",
- [ModelClass.IMAGE]: settings.IMAGE_HYPERBOLIC_MODEL || "FLUX.1-dev",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_HYPERBOLIC_MODEL ||
+ settings.HYPERBOLIC_MODEL ||
+ "meta-llama/Llama-3.2-3B-Instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_HYPERBOLIC_MODEL ||
+ settings.HYPERBOLIC_MODEL ||
+ "meta-llama/Meta-Llama-3.1-70B-Instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_HYPERBOLIC_MODEL ||
+ settings.HYPERBOLIC_MODEL ||
+ "meta-llama/Meta-Llama-3.1-405-Instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
+ [ModelClass.IMAGE]: {
+ name: settings.IMAGE_HYPERBOLIC_MODEL || "FLUX.1-dev",
+ },
},
},
[ModelProviderName.VENICE]: {
endpoint: "https://api.venice.ai/api/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- temperature: 0.6,
- },
model: {
- [ModelClass.SMALL]: settings.SMALL_VENICE_MODEL || "llama-3.3-70b",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_VENICE_MODEL || "llama-3.3-70b",
- [ModelClass.LARGE]: settings.LARGE_VENICE_MODEL || "llama-3.1-405b",
- [ModelClass.IMAGE]: settings.IMAGE_VENICE_MODEL || "fluently-xl",
+ [ModelClass.SMALL]: {
+ name: settings.SMALL_VENICE_MODEL || "llama-3.3-70b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name: settings.MEDIUM_VENICE_MODEL || "llama-3.3-70b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
+ [ModelClass.LARGE]: {
+ name: settings.LARGE_VENICE_MODEL || "llama-3.1-405b",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
+ [ModelClass.IMAGE]: {
+ name: settings.IMAGE_VENICE_MODEL || "fluently-xl",
+ },
},
},
[ModelProviderName.AKASH_CHAT_API]: {
endpoint: "https://chatapi.akash.network/api/v1",
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- temperature: 0.6,
- },
model: {
- [ModelClass.SMALL]:
- settings.SMALL_AKASH_CHAT_API_MODEL ||
- "Meta-Llama-3-2-3B-Instruct",
- [ModelClass.MEDIUM]:
- settings.MEDIUM_AKASH_CHAT_API_MODEL ||
- "Meta-Llama-3-3-70B-Instruct",
- [ModelClass.LARGE]:
- settings.LARGE_AKASH_CHAT_API_MODEL ||
- "Meta-Llama-3-1-405B-Instruct-FP8",
+ [ModelClass.SMALL]: {
+ name:
+ settings.SMALL_AKASH_CHAT_API_MODEL ||
+ "Meta-Llama-3-2-3B-Instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
+ [ModelClass.MEDIUM]: {
+ name:
+ settings.MEDIUM_AKASH_CHAT_API_MODEL ||
+ "Meta-Llama-3-3-70B-Instruct",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
+ [ModelClass.LARGE]: {
+ name:
+ settings.LARGE_AKASH_CHAT_API_MODEL ||
+ "Meta-Llama-3-1-405B-Instruct-FP8",
+ stop: [],
+ maxInputTokens: 128000,
+ maxOutputTokens: 8192,
+ temperature: 0.6,
+ },
},
},
[ModelProviderName.LIVEPEER]: {
- settings: {
- stop: [],
- maxInputTokens: 128000,
- maxOutputTokens: 8192,
- repetition_penalty: 0.4,
- temperature: 0.7,
- },
// livepeer endpoint is handled from the sdk
model: {
- [ModelClass.SMALL]: "",
- [ModelClass.MEDIUM]: "",
- [ModelClass.LARGE]: "",
- [ModelClass.EMBEDDING]: "",
- [ModelClass.IMAGE]:
- settings.LIVEPEER_IMAGE_MODEL || "ByteDance/SDXL-Lightning",
+ [ModelClass.IMAGE]: {
+ name:
+ settings.LIVEPEER_IMAGE_MODEL || "ByteDance/SDXL-Lightning",
+ },
},
},
};
-export function getModel(provider: ModelProviderName, type: ModelClass) {
- return models[provider].model[type];
+export function getModelSettings(
+ provider: ModelProviderName,
+ type: ModelClass
+): ModelSettings | undefined {
+ return models[provider]?.model[type] as ModelSettings | undefined;
+}
+
+export function getImageModelSettings(
+ provider: ModelProviderName
+): ImageModelSettings | undefined {
+ return models[provider]?.model[ModelClass.IMAGE] as
+ | ImageModelSettings
+ | undefined;
+}
+
+export function getEmbeddingModelSettings(
+ provider: ModelProviderName
+): EmbeddingModelSettings | undefined {
+ return models[provider]?.model[ModelClass.EMBEDDING] as
+ | EmbeddingModelSettings
+ | undefined;
}
export function getEndpoint(provider: ModelProviderName) {
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
index d1dadddaf8..c6d643e962 100644
--- a/packages/core/src/types.ts
+++ b/packages/core/src/types.ts
@@ -137,51 +137,63 @@ export enum ModelClass {
}
/**
- * Configuration for an AI model
+ * Model settings
*/
-export type Model = {
- /** Optional API endpoint */
- endpoint?: string;
+export type ModelSettings = {
+ /** Model name */
+ name: string;
- /** Model settings */
- settings: {
- /** Maximum input tokens */
- maxInputTokens: number;
+ /** Maximum input tokens */
+ maxInputTokens: number;
- /** Maximum output tokens */
- maxOutputTokens: number;
+ /** Maximum output tokens */
+ maxOutputTokens: number;
- /** Optional frequency penalty */
- frequency_penalty?: number;
+ /** Optional frequency penalty */
+ frequency_penalty?: number;
- /** Optional presence penalty */
- presence_penalty?: number;
+ /** Optional presence penalty */
+ presence_penalty?: number;
- /** Optional repetition penalty */
- repetition_penalty?: number;
+ /** Optional repetition penalty */
+ repetition_penalty?: number;
- /** Stop sequences */
- stop: string[];
+ /** Stop sequences */
+ stop: string[];
- /** Temperature setting */
- temperature: number;
+ /** Temperature setting */
+ temperature: number;
- /** Optional telemetry configuration (experimental) */
- experimental_telemetry?: TelemetrySettings;
- };
+ /** Optional telemetry configuration (experimental) */
+ experimental_telemetry?: TelemetrySettings;
+};
- /** Optional image generation settings */
- imageSettings?: {
- steps?: number;
- };
+/** Image model settings */
+export type ImageModelSettings = {
+ name: string;
+ steps?: number;
+};
+
+/** Embedding model settings */
+export type EmbeddingModelSettings = {
+ name: string;
+ dimensions?: number;
+};
+
+/**
+ * Configuration for an AI model
+ */
+export type Model = {
+ /** Optional API endpoint */
+ endpoint?: string;
/** Model names by size class */
model: {
- [ModelClass.SMALL]: string;
- [ModelClass.MEDIUM]: string;
- [ModelClass.LARGE]: string;
- [ModelClass.EMBEDDING]?: string;
- [ModelClass.IMAGE]?: string;
+ [ModelClass.SMALL]?: ModelSettings;
+ [ModelClass.MEDIUM]?: ModelSettings;
+ [ModelClass.LARGE]?: ModelSettings;
+ [ModelClass.EMBEDDING]?: EmbeddingModelSettings;
+ [ModelClass.IMAGE]?: ImageModelSettings;
};
};
diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts
index 3ad31d5271..55c29db6d1 100644
--- a/packages/plugin-node/src/services/image.ts
+++ b/packages/plugin-node/src/services/image.ts
@@ -1,4 +1,4 @@
-import { elizaLogger, models } from "@elizaos/core";
+import { elizaLogger, getEndpoint, models } from "@elizaos/core";
import { Service } from "@elizaos/core";
import {
IAgentRuntime,
@@ -214,7 +214,7 @@ export class ImageDescriptionService
// If model provider is openai, use the endpoint, otherwise use the default openai endpoint.
const endpoint =
this.runtime.imageModelProvider === ModelProviderName.OPENAI
- ? models[this.runtime.imageModelProvider].endpoint
+ ? getEndpoint(this.runtime.imageModelProvider)
: "https://api.openai.com/v1";
const response = await fetch(endpoint + "/chat/completions", {
method: "POST",