diff --git a/.env.example b/.env.example index 7b3137b9b85..444bf1a79a1 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,7 @@ DISCORD_API_TOKEN= # Bot token OPENAI_API_KEY=sk-* # OpenAI API key, starting with sk- REDPILL_API_KEY= # REDPILL API Key GROQ_API_KEY=gsk_* +OPENROUTER_API_KEY= ELEVENLABS_XI_API_KEY= # API key from elevenlabs @@ -27,6 +28,13 @@ X_SERVER_URL= XAI_API_KEY= XAI_MODEL= +#OpenRouter (Use one model for everything or set individual for small, medium, large tasks) +#leave blank to use defaults hermes 70b for small tasks & 405b for medium/large tasks +OPENROUTER_MODEL= +SMALL_OPENROUTER_MODEL= +MEDIUM_OLLAMA_MODEL= +LARGE_OLLAMA_MODEL= + #Set to Use for New OLLAMA provider OLLAMA_SERVER_URL= #Leave blank for default localhost:11434 @@ -47,6 +55,7 @@ BIRDEYE_API_KEY= SOL_ADDRESS=So11111111111111111111111111111111111111112 SLIPPAGE=1 +BASE_MINT=So11111111111111111111111111111111111111112 RPC_URL=https://api.mainnet-beta.solana.com HELIUS_API_KEY= diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 5737448fb39..0c2a8e36bc7 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -128,6 +128,11 @@ export function getTokenForProvider( character.settings?.secrets?.REDPILL_API_KEY || settings.REDPILL_API_KEY ); + case ModelProviderName.OPENROUTER: + return ( + character.settings?.secrets?.OPENROUTER || + settings.OPENROUTER_API_KEY + ); } } diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 388973d1b16..f6cdbf72273 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -214,6 +214,31 @@ export async function generateText({ break; } + + case ModelProviderName.OPENROUTER: { + elizaLogger.log("Initializing OpenRouter model."); + const serverUrl = models[provider].endpoint; + const openrouter = createOpenAI({ apiKey, baseURL: serverUrl }); + + const { text: openrouterResponse } = await aiGenerateText({ + model: openrouter.languageModel(model), + prompt: context, + temperature: temperature, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = openrouterResponse; + elizaLogger.log("Received response from OpenRouter model."); + break; + } + + case ModelProviderName.OLLAMA: { console.log("Initializing Ollama model."); diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index 17c6f35589c..4112c1b0d1f 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -162,6 +162,35 @@ const models: Models = { [ModelClass.EMBEDDING]: "text-embedding-3-small", }, }, + [ModelProviderName.OPENROUTER]: { + endpoint: "https://openrouter.ai/api/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.0, + presence_penalty: 0.0, + temperature: 0.6, + }, + // 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-70b", + [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", + }, + }, [ModelProviderName.OLLAMA]: { settings: { stop: [], diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 28ee98d4159..4fa54fcb90e 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -112,6 +112,7 @@ export type Models = { [ModelProviderName.GOOGLE]: Model; [ModelProviderName.CLAUDE_VERTEX]: Model; [ModelProviderName.REDPILL]: Model; + [ModelProviderName.OPENROUTER]: Model; [ModelProviderName.OLLAMA]: Model; }; @@ -125,6 +126,7 @@ export enum ModelProviderName { GOOGLE = "google", CLAUDE_VERTEX = "claude_vertex", REDPILL = "redpill", + OPENROUTER = "openrouter", OLLAMA = "ollama", }