diff --git a/.env.example b/.env.example index f54f552f6a..bcc6b31e15 100644 --- a/.env.example +++ b/.env.example @@ -356,3 +356,7 @@ CRONOSZKEVM_PRIVATE_KEY= # Fuel Ecosystem (FuelVM) FUEL_WALLET_PRIVATE_KEY= + +# FereAI Configuration +FEREAI_USER_ID= +FEREAI_API_KEY= diff --git a/agent/package.json b/agent/package.json index a0a5192ec5..42b164f574 100644 --- a/agent/package.json +++ b/agent/package.json @@ -59,6 +59,7 @@ "@elizaos/plugin-3d-generation": "workspace:*", "@elizaos/plugin-fuel": "workspace:*", "@elizaos/plugin-avalanche": "workspace:*", + "@elizaos/plugin-ferepro": "workspace:*", "readline": "1.3.0", "ws": "8.18.0", "yargs": "17.7.2" diff --git a/agent/src/index.ts b/agent/src/index.ts index d6840e7e9f..d426337d20 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -61,6 +61,7 @@ import { zksyncEraPlugin } from "@elizaos/plugin-zksync-era"; import { cronosZkEVMPlugin } from "@elizaos/plugin-cronoszkevm"; import { abstractPlugin } from "@elizaos/plugin-abstract"; import { avalanchePlugin } from "@elizaos/plugin-avalanche"; +import { fereProPlugin } from "@elizaos/plugin-ferepro"; import Database from "better-sqlite3"; import fs from "fs"; import path from "path"; @@ -346,6 +347,13 @@ export function getTokenForProvider( character.settings?.secrets?.GOOGLE_GENERATIVE_AI_API_KEY || settings.GOOGLE_GENERATIVE_AI_API_KEY ); + case ModelProviderName.FEREAI: + return ( + character.settings?.secrets?.FEREAI_API_KEY || + settings.FEREAI_API_KEY && + character.settings?.secrets?.FEREAI_USER_ID || + settings.FEREAI_USER_ID + ); default: const errorMessage = `Failed to get token - unsupported model provider: ${provider}`; elizaLogger.error(errorMessage); @@ -600,6 +608,7 @@ export async function createAgent( getSecret(character, "AVALANCHE_PRIVATE_KEY") ? avalanchePlugin : null, + getSecret(character, "FEREAI_USER_ID") ? fereProPlugin : null, ].filter(Boolean), providers: [], actions: [], diff --git a/package.json b/package.json index 983a479390..d4a794a4d6 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "@vitest/eslint-plugin": "1.0.1", "amqplib": "0.10.5", "csv-parse": "5.6.0", + "fereai-provider": "0.1.2", "ollama-ai-provider": "0.16.1", "optional": "0.1.4", "pnpm": "9.14.4", diff --git a/packages/core/package.json b/packages/core/package.json index e25b865ae1..eb9f5f9aec 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -62,6 +62,7 @@ "anthropic-vertex-ai": "1.0.2", "fastembed": "1.14.1", "fastestsmallesttextencoderdecoder": "1.0.22", + "fereai-provider": "0.1.2", "gaxios": "6.7.1", "glob": "11.0.0", "handlebars": "^4.7.8", diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 67ed1b664a..0d63cb6640 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -10,6 +10,7 @@ import { } from "ai"; import { Buffer } from "buffer"; import { createOllama } from "ollama-ai-provider"; +import { fereai } from "fereai-provider"; import OpenAI from "openai"; import { encodingForModel, TiktokenModel } from "js-tiktoken"; import Together from "together-ai"; @@ -571,6 +572,26 @@ export async function generateText({ break; } + case ModelProviderName.FEREAI: + { + elizaLogger.debug("Initializing FereAI model."); + + elizaLogger.debug("****** MODEL\n", model); + + const { text: fereaiResponse } = await aiGenerateText({ + model: fereai(model), + prompt: context, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = fereaiResponse; + } + elizaLogger.debug("Received response from FereAI model:", model); + break; + default: { const errorMessage = `Unsupported provider: ${provider}`; elizaLogger.error(errorMessage); diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index 7609533425..6e6c5f1740 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -503,6 +503,19 @@ export const models: Models = { [ModelClass.IMAGE]: settings.LIVEPEER_IMAGE_MODEL || "ByteDance/SDXL-Lightning", }, }, + [ModelProviderName.FEREAI]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + temperature: 0.7, + }, + model: { + [ModelClass.SMALL]: "MarketAnalyzerAgent", + [ModelClass.MEDIUM]: "ProAgent", + [ModelClass.LARGE]: "ProAgent" + }, + }, }; export function getModel(provider: ModelProviderName, type: ModelClass) { diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index dfc19c2eb2..358c3e8400 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -210,6 +210,7 @@ export type Models = { [ModelProviderName.VENICE]: Model; [ModelProviderName.AKASH_CHAT_API]: Model; [ModelProviderName.LIVEPEER]: Model; + [ModelProviderName.FEREAI]: Model; }; /** @@ -240,6 +241,7 @@ export enum ModelProviderName { VENICE = "venice", AKASH_CHAT_API = "akash_chat_api", LIVEPEER = "livepeer", + FEREAI = "fereai", } /** diff --git a/packages/plugin-ferePro/src/actions/FereProAction.ts b/packages/plugin-ferePro/src/actions/FereProAction.ts deleted file mode 100644 index 415c8aa0ce..0000000000 --- a/packages/plugin-ferePro/src/actions/FereProAction.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { - elizaLogger, - ActionExample, - Memory, - State, - IAgentRuntime, - type Action, - HandlerCallback, -} from "@elizaos/core"; -import { FereProService } from "../services/FereProService"; - -export interface FereMessageContent { - message: string; - stream?: boolean; - debug?: boolean; -} - -function isValidMessageContent(content: any): content is FereMessageContent { - return typeof content.message === "string"; -} - -const _fereProTemplate = `Extract the core query from user input and respond with the requested data. If the user asks for a comparison or historical data, make sure to reflect that accurately. - -Example: -\`\`\`json -{ - "message": "Compare top 3 coins against Bitcoin in the last 3 months", - "stream": true, - "debug": false -} -\`\`\` - -{{recentMessages}} - -Extract the core request and execute the appropriate action.`; - -export default { - name: "SEND_FEREPRO_MESSAGE", - similes: ["QUERY_MARKET", "ASK_AGENT"], - description: - "Send a message to FerePro API and receive streaming or non-streaming responses.", - - validate: async (runtime: IAgentRuntime, _message: Memory) => { - console.log("Validating environment for FerePro..."); - const user = runtime.getSetting("FERE_USER_ID"); - if (!user) { - throw new Error("FERE_USER_ID not set in runtime."); - } - return true; - }, - - handler: async ( - runtime: IAgentRuntime, - message: Memory, - state: State, - _options: { [key: string]: unknown }, - callback?: HandlerCallback - ) => { - elizaLogger.log("Executing SEND_FEREPRO_MESSAGE..."); - - // Ensure state exists or generate a new one - if (!state) { - state = (await runtime.composeState(message)) as State; - } else { - state = await runtime.updateRecentMessageState(state); - } - - // Compose context for the WebSocket message - const context = { - message: message.content.text, - stream: message.content.stream || false, - debug: message.content.debug || false, - }; - - if (!isValidMessageContent(context)) { - console.error("Invalid content for SEND_FEREPRO_MESSAGE."); - if (callback) { - callback({ - text: "Unable to process request. Invalid message content.", - content: { error: "Invalid message content" }, - }); - } - return false; - } - - // Send the message via WebSocket using FereProService - try { - const service = new FereProService(); - await service.initialize(runtime); - - const response = await service.sendMessage(context); - - if (response.success) { - if (callback) { - callback({ - text: "Response received from FerePro.", - content: response.data, - }); - } - return true; - } else { - throw new Error(response.error || "Unknown WebSocket error."); - } - } catch (error) { - console.error("Error during WebSocket communication:", error); - if (callback) { - callback({ - text: `Error sending message: ${error.message}`, - content: { error: error.message }, - }); - } - return false; - } - }, - - examples: [ - [ - { - user: "{{user1}}", - content: { - text: "What are the top 5 cryptocurrencies?", - action: "SEND_FEREPRO_MESSAGE", - }, - }, - { - user: "{{user2}}", - content: { - text: "Here are the top 5 cryptocurrencies.", - }, - }, - ], - [ - { - user: "{{user1}}", - content: { - text: "Compare Ethereum and Bitcoin for the past 6 months.", - action: "SEND_FEREPRO_MESSAGE", - stream: true, - debug: true, - }, - }, - { - user: "{{user2}}", - content: { - text: "Streaming Ethereum and Bitcoin comparison...", - }, - }, - ], - ] as ActionExample[][], -} as Action; diff --git a/packages/plugin-ferePro/src/index.ts b/packages/plugin-ferePro/src/index.ts deleted file mode 100644 index d4513ef478..0000000000 --- a/packages/plugin-ferePro/src/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Plugin } from "@elizaos/core"; -import sendFereProMessage from "./actions/FereProAction"; -import { FereProService } from "./services/FereProService"; - -export const fereProPlugin: Plugin = { - name: "ferePro", - description: - "FerePro Plugin for Eliza - Enables WebSocket communication for AI-driven market insights", - actions: [sendFereProMessage], - evaluators: [], - providers: [], - services: [new FereProService()], -}; - -export default fereProPlugin; diff --git a/packages/plugin-ferePro/src/services/FereProService.ts b/packages/plugin-ferePro/src/services/FereProService.ts deleted file mode 100644 index 3300bf4d71..0000000000 --- a/packages/plugin-ferePro/src/services/FereProService.ts +++ /dev/null @@ -1,104 +0,0 @@ -import WebSocket from "ws"; -import { IAgentRuntime, Service } from "@elizaos/core"; - -interface ChatResponse { - answer: string; - chat_id: string; - representation?: Record[]; - agent_api_name: string; - query_summary: string; - agent_credits: number; - credits_available: number; -} - -interface FereMessage { - message: string; - stream?: boolean; - debug?: boolean; -} - -interface FereResponse { - success: boolean; - data?: ChatResponse; - error?: string; -} - -export class FereProService extends Service { - private ws: WebSocket | null = null; - private user: string = "1a5b4a29-9d95-44c8-aef3-05a8e515f43e"; - private runtime: IAgentRuntime | null = null; - - async initialize(runtime: IAgentRuntime): Promise { - console.log("Initializing FerePro WebSocket Service"); - this.runtime = runtime; - this.user = runtime.getSetting("FERE_USER_ID") ?? this.user; - } - - /** - * Connect to WebSocket and send a message - */ - async sendMessage(payload: FereMessage): Promise { - return new Promise((resolve, reject) => { - try { - const url = `wss:/api.fereai.xyz/chat/v2/ws/${this.user}`; - this.ws = new WebSocket(url); - - this.ws.on("open", () => { - console.log("Connected to FerePro WebSocket"); - this.ws?.send(JSON.stringify(payload)); - console.log("Message sent:", payload.message); - }); - - this.ws.on("message", (data) => { - try { - const response = JSON.parse(data.toString()); - const chatResponse: ChatResponse = { - answer: response.answer, - chat_id: response.chat_id, - representation: response.representation || null, - agent_api_name: response.agent_api_name, - query_summary: response.query_summary, - agent_credits: response.agent_credits, - credits_available: response.credits_available, - }; - - console.log("Received ChatResponse:", chatResponse); - - resolve({ - success: true, - data: chatResponse, - }); - } catch (err) { - console.error("Error parsing response:", err); - reject({ - success: false, - error: "Invalid response format", - }); - } - }); - - this.ws.on("close", () => { - console.log("Disconnected from FerePro WebSocket"); - }); - - this.ws.on("error", (err) => { - console.error("WebSocket error:", err); - reject({ - success: false, - error: err.message, - }); - }); - } catch (error) { - reject({ - success: false, - error: - error instanceof Error - ? error.message - : "Error Occured", - }); - } - }); - } -} - -export default FereProService; diff --git a/packages/plugin-ferePro/tsconfig.json b/packages/plugin-ferePro/tsconfig.json deleted file mode 100644 index c5870a42ab..0000000000 --- a/packages/plugin-ferePro/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "module": "ESNext", - "target": "ESNext", - "outDir": "dist", - "declaration": true, - "declarationMap": true, - "moduleResolution": "Node", - "esModuleInterop": true, - "skipLibCheck": true - } -} diff --git a/packages/plugin-ferePro/tsup.config.ts b/packages/plugin-ferePro/tsup.config.ts deleted file mode 100644 index c7bf2d61a7..0000000000 --- a/packages/plugin-ferePro/tsup.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - format: ["esm"], - dts: true, - sourcemap: true, - splitting: false, - clean: true, -}); diff --git a/packages/plugin-ferePro/.npmignore b/packages/plugin-ferepro/.npmignore similarity index 100% rename from packages/plugin-ferePro/.npmignore rename to packages/plugin-ferepro/.npmignore diff --git a/packages/plugin-ferePro/eslint.config.mjs b/packages/plugin-ferepro/eslint.config.mjs similarity index 100% rename from packages/plugin-ferePro/eslint.config.mjs rename to packages/plugin-ferepro/eslint.config.mjs diff --git a/packages/plugin-ferePro/package.json b/packages/plugin-ferepro/package.json similarity index 76% rename from packages/plugin-ferePro/package.json rename to packages/plugin-ferepro/package.json index c65e8e429f..86aecb5077 100644 --- a/packages/plugin-ferePro/package.json +++ b/packages/plugin-ferepro/package.json @@ -5,9 +5,8 @@ "type": "module", "types": "dist/index.d.ts", "dependencies": { - "@elizaos/core": "^0.1.7-alpha.1", - "tsup": "^8.3.5", - "ws": "^8.18.0" + "@elizaos/core": "workspace:*", + "tsup": "^8.3.5" }, "scripts": { "build": "tsup --format esm --dts", @@ -15,7 +14,6 @@ "lint": "eslint --fix --cache ." }, "devDependencies": { - "@types/ws": "^8.5.13", "tsx": "^4.19.2" } } diff --git a/packages/plugin-ferepro/src/actions/UseFereProAction.ts b/packages/plugin-ferepro/src/actions/UseFereProAction.ts new file mode 100644 index 0000000000..25938a98a7 --- /dev/null +++ b/packages/plugin-ferepro/src/actions/UseFereProAction.ts @@ -0,0 +1,130 @@ +import { + elizaLogger, + ActionExample, + Memory, + State, + IAgentRuntime, + ModelProviderName, + type Action, + HandlerCallback, +} from "@elizaos/core"; + +export default { + name: "FERE_PRO", + similes: [ + "BLOCKCHAIN_INFO", + "CRYPTO_INFO", + "DEFI_DETAILS", + "NFT_DETAILS", + "WEB3_INSIGHTS", + "BLOCKCHAIN_RESEARCH", + "CRYPTO_RESEARCH", + "FIND_BLOCKCHAIN_INFO", + "GET_CRYPTO_DATA", + ], + description: + "Answer questions related to blockchain technology, cryptocurrencies, DeFi, NFTs, and Web3.", + validate: async (runtime: IAgentRuntime, _message: Memory) => { + if (runtime.modelProvider === 'fereai' as ModelProviderName) { + return true + } else { + return false + } + }, + handler: async ( + _runtime: IAgentRuntime, + _message: Memory, + state: State, + _options: { [key: string]: unknown }, + callback?: HandlerCallback + ) => { + + elizaLogger.log("Fere Pro prompt received:", _message.content.text); + }, + examples: [ + [ + { + user: "{{user1}}", + content: { + text: "Tell me Solana memecoins which are greater than $100 million marketcap", + action: "FERE_PRO", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Tell me Base memecoins which are greater than $100 million marketcap", + action: "FERE_PRO", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Please tell me which ones would be a good buy in the current environment", + action: "FERE_PRO", + stream: true + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Compare the performance and social sentiment of the top 5 memecoins on Solana vs. Base. Highlight any significant differences and potential reasons", + action: "FERE_PRO", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Analyze the risk-adjusted returns of the top 10 trending tokens. Provide insights on which tokens offer the best risk-to-reward ratio", + action: "FERE_PRO", + stream: true, + debug: true, + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Using historical data and current trends, predict the potential performance of the top 5 AI tokens over the next week. Provide the rationale behind each prediction", + action: "FERE_PRO", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Top KOLs for DEGEN on Base", + action: "FERE_PRO", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Give me a detailed analysis of $degen token", + action: "FERE_PRO", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Give me a summary of the latest crypto news today", + action: "FERE_PRO", + }, + }, + ], + ] as ActionExample[][], +} as Action; diff --git a/packages/plugin-ferepro/src/index.ts b/packages/plugin-ferepro/src/index.ts new file mode 100644 index 0000000000..dbaba1fa9e --- /dev/null +++ b/packages/plugin-ferepro/src/index.ts @@ -0,0 +1,13 @@ +import { Plugin } from "@elizaos/core"; +import useFerePro from "./actions/UseFereProAction"; + +export const fereProPlugin: Plugin = { + name: "Fere Pro", + description: "Answer questions about blockchain, cryptocurrencies, and related topics using a dedicated API.", + actions: [useFerePro], + evaluators: [], + providers: [], + services: [], +}; + +export default fereProPlugin; diff --git a/packages/plugin-ferepro/tsconfig.json b/packages/plugin-ferepro/tsconfig.json new file mode 100644 index 0000000000..abd2932121 --- /dev/null +++ b/packages/plugin-ferepro/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../core/tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "types": [ + "node" + ] + }, + "include": [ + "src/**/*.ts" + ] +} diff --git a/packages/plugin-ferepro/tsup.config.ts b/packages/plugin-ferepro/tsup.config.ts new file mode 100644 index 0000000000..1a96f24afa --- /dev/null +++ b/packages/plugin-ferepro/tsup.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + sourcemap: true, + clean: true, + format: ["esm"], // Ensure you're targeting CommonJS + external: [ + "dotenv", // Externalize dotenv to prevent bundling + "fs", // Externalize fs to use Node.js built-in module + "path", // Externalize other built-ins if necessary + "@reflink/reflink", + "@node-llama-cpp", + "https", + "http", + "agentkeepalive", + "safe-buffer", + // Add other modules you want to externalize + ], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24a75803b8..8c79d5042f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: csv-parse: specifier: 5.6.0 version: 5.6.0 + fereai-provider: + specifier: 0.1.2 + version: 0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(zod@3.23.8) ollama-ai-provider: specifier: 0.16.1 version: 0.16.1(zod@3.23.8) @@ -165,6 +168,9 @@ importers: '@elizaos/plugin-evm': specifier: workspace:* version: link:../packages/plugin-evm + '@elizaos/plugin-ferepro': + specifier: workspace:* + version: link:../packages/plugin-ferepro '@elizaos/plugin-flow': specifier: workspace:* version: link:../packages/plugin-flow @@ -809,6 +815,9 @@ importers: fastestsmallesttextencoderdecoder: specifier: 1.0.22 version: 1.0.22 + fereai-provider: + specifier: 0.1.2 + version: 0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(zod@3.23.8) gaxios: specifier: 6.7.1 version: 6.7.1(encoding@0.1.13) @@ -1156,21 +1165,15 @@ importers: specifier: 7.1.0 version: 7.1.0 - packages/plugin-ferePro: + packages/plugin-ferepro: dependencies: '@elizaos/core': - specifier: ^0.1.7-alpha.1 - version: 0.1.7-alpha.1(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(@langchain/core@0.3.26(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.9)(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.15.0))(svelte@5.15.0) + specifier: workspace:* + version: link:../core tsup: specifier: ^8.3.5 version: 8.3.5(@swc/core@1.10.1(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.1) - ws: - specifier: ^8.18.0 - version: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) devDependencies: - '@types/ws': - specifier: ^8.5.13 - version: 8.5.13 tsx: specifier: ^4.19.2 version: 4.19.2 @@ -3867,9 +3870,6 @@ packages: peerDependencies: onnxruntime-node: 1.20.1 - '@elizaos/core@0.1.7-alpha.1': - resolution: {integrity: sha512-7Sq+ta7kKoZLgzx//DXeRK/SLVLdVo6DCRgv16B+i726HBEfh96gTLeB9J0S58tnGzJg2mkouvakwt16ETmAoQ==} - '@emnapi/core@1.3.1': resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} @@ -11555,6 +11555,14 @@ packages: resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} engines: {node: '>=0.4.0'} + fereai-provider@0.1.2: + resolution: {integrity: sha512-bjT3Rawal2E1vXaHuHfUR4mS6TvHDLFLbGRMJYqfrswCeL5Qp7z2jgOSJhsst6Vc4O6x/lZjPAX7PE+TePuhcg==} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -17583,6 +17591,10 @@ packages: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} + string-comparison@1.3.0: + resolution: {integrity: sha512-46aD+slEwybxAMPRII83ATbgMgTiz5P8mVd7Z6VJsCzSHFjdt1hkAVLeFxPIyEb11tc6ihpJTlIqoO0MCF6NPw==} + engines: {node: ^16.0.0 || >=18.0.0} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -22967,56 +22979,6 @@ snapshots: '@huggingface/jinja': 0.2.2 onnxruntime-node: 1.20.1 - '@elizaos/core@0.1.7-alpha.1(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(@langchain/core@0.3.26(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.9)(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.15.0))(svelte@5.15.0)': - dependencies: - '@ai-sdk/anthropic': 0.0.56(zod@3.23.8) - '@ai-sdk/google': 0.0.55(zod@3.23.8) - '@ai-sdk/google-vertex': 0.0.43(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(zod@3.23.8) - '@ai-sdk/groq': 0.0.3(zod@3.23.8) - '@ai-sdk/openai': 1.0.5(zod@3.23.8) - '@anthropic-ai/sdk': 0.30.1(encoding@0.1.13) - '@fal-ai/client': 1.2.0 - '@types/uuid': 10.0.0 - ai: 3.4.33(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.15.0))(svelte@5.15.0)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) - anthropic-vertex-ai: 1.0.2(encoding@0.1.13)(zod@3.23.8) - fastembed: 1.14.1 - fastestsmallesttextencoderdecoder: 1.0.22 - gaxios: 6.7.1(encoding@0.1.13) - glob: 11.0.0 - handlebars: 4.7.8 - js-sha1: 0.7.0 - js-tiktoken: 1.0.15 - langchain: 0.3.6(@langchain/core@0.3.26(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.9)(encoding@0.1.13)(handlebars@4.7.8)(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) - ollama-ai-provider: 0.16.1(zod@3.23.8) - openai: 4.73.0(encoding@0.1.13)(zod@3.23.8) - tinyld: 1.3.4 - together-ai: 0.7.0(encoding@0.1.13) - unique-names-generator: 4.7.1 - uuid: 11.0.3 - zod: 3.23.8 - transitivePeerDependencies: - - '@google-cloud/vertexai' - - '@langchain/anthropic' - - '@langchain/aws' - - '@langchain/cohere' - - '@langchain/core' - - '@langchain/google-genai' - - '@langchain/google-vertexai' - - '@langchain/groq' - - '@langchain/mistralai' - - '@langchain/ollama' - - axios - - cheerio - - encoding - - peggy - - react - - solid-js - - sswr - - supports-color - - svelte - - typeorm - - vue - '@emnapi/core@1.3.1': dependencies: '@emnapi/wasi-threads': 1.0.1 @@ -33356,6 +33318,24 @@ snapshots: dependencies: xml-js: 1.6.11 + fereai-provider@0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(zod@3.23.8): + dependencies: + '@ai-sdk/provider': 1.0.1 + '@ai-sdk/provider-utils': 2.0.2(zod@3.23.8) + axios: 1.7.9(debug@4.4.0) + dayjs: 1.11.13 + dotenv: 16.4.7 + partial-json: 0.1.7 + string-comparison: 1.3.0 + uuid: 9.0.1 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + zod: 3.23.8 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -41288,6 +41268,8 @@ snapshots: string-argv@0.3.2: {} + string-comparison@1.3.0: {} + string-length@4.0.2: dependencies: char-regex: 1.0.2