From d7854265af40d63322b19c8dc9c88f6b984e5d18 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 9 Jan 2025 22:16:55 +0000 Subject: [PATCH 01/21] feat: added atoma-sdk dependency --- packages/core/package.json | 1 + pnpm-lock.yaml | 97 ++++++++++---------------------------- 2 files changed, 25 insertions(+), 73 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 3a1b74388fe..136bb1912e1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -75,6 +75,7 @@ "@types/uuid": "10.0.0", "ai": "3.4.33", "anthropic-vertex-ai": "1.0.2", + "atoma-sdk": "github:atoma-network/atoma-sdk-typescript", "fastembed": "1.14.1", "fastestsmallesttextencoderdecoder": "1.0.22", "gaxios": "6.7.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 90f147c715c..4a5bc83a33d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -368,6 +368,9 @@ importers: '@docusaurus/preset-classic': specifier: 3.6.3 version: 3.6.3(@algolia/client-search@5.18.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@swc/core@1.10.4(@swc/helpers@0.5.15))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.16.0(jiti@2.4.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': + specifier: 3.6.3 + version: 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@swc/core@1.10.4(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.16.0(jiti@2.4.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.10.4(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/theme-mermaid': specifier: 3.6.3 version: 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@swc/core@1.10.4(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.16.0(jiti@2.4.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@swc/core@1.10.4(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.16.0(jiti@2.4.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10) @@ -383,6 +386,9 @@ importers: dotenv: specifier: ^16.4.7 version: 16.4.7 + lunr: + specifier: 2.3.9 + version: 2.3.9 prism-react-renderer: specifier: 2.3.1 version: 2.3.1(react@18.3.1) @@ -809,6 +815,9 @@ importers: anthropic-vertex-ai: specifier: 1.0.2 version: 1.0.2(encoding@0.1.13)(zod@3.23.8) + atoma-sdk: + specifier: github:atoma-network/atoma-sdk-typescript + version: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/1420a609da09a15eaa2b173a830049aef4060b9c(zod@3.23.8) fastembed: specifier: 1.14.1 version: 1.14.1 @@ -1156,25 +1165,6 @@ importers: specifier: 7.1.0 version: 7.1.0 - packages/plugin-ferePro: - dependencies: - '@elizaos/core': - specifier: ^0.1.7-alpha.1 - version: 0.1.7-alpha.2(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(@langchain/core@0.3.27(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.16.1))(svelte@5.16.1) - tsup: - specifier: ^8.3.5 - version: 8.3.5(@swc/core@1.10.4(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.7.0) - ws: - specifier: ^8.18.0 - version: 8.18.0(bufferutil@4.0.9)(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 - packages/plugin-flow: dependencies: '@elizaos/core': @@ -3871,9 +3861,6 @@ packages: peerDependencies: onnxruntime-node: 1.20.1 - '@elizaos/core@0.1.7-alpha.2': - resolution: {integrity: sha512-gNvFw/Xnv4dlcfmmKxRa+baKq6en4TitAjUGvo8LgAUkSk156A0fffJ0lAsc1rX8zMB5NsIqdvMCbwKxDd54OQ==} - '@emnapi/core@1.3.1': resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} @@ -8994,6 +8981,12 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/1420a609da09a15eaa2b173a830049aef4060b9c: + resolution: {tarball: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/1420a609da09a15eaa2b173a830049aef4060b9c} + version: 0.1.1 + peerDependencies: + zod: '>= 3' + atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -23022,56 +23015,6 @@ snapshots: '@huggingface/jinja': 0.2.2 onnxruntime-node: 1.20.1 - '@elizaos/core@0.1.7-alpha.2(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(@langchain/core@0.3.27(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.16.1))(svelte@5.16.1)': - 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.16.1))(svelte@5.16.1)(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.27(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 @@ -30028,6 +29971,10 @@ snapshots: at-least-node@1.0.0: {} + atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/1420a609da09a15eaa2b173a830049aef4060b9c(zod@3.23.8): + dependencies: + zod: 3.23.8 + atomic-sleep@1.0.0: {} autocomplete.js@0.37.1: @@ -32900,6 +32847,7 @@ snapshots: '@esbuild/win32-arm64': 0.23.1 '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + optional: true esbuild@0.24.2: optionalDependencies: @@ -33979,6 +33927,7 @@ snapshots: get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 + optional: true get-uri@6.0.4: dependencies: @@ -40553,7 +40502,8 @@ snapshots: resolve-pathname@3.0.0: {} - resolve-pkg-maps@1.0.0: {} + resolve-pkg-maps@1.0.0: + optional: true resolve.exports@2.0.3: {} @@ -42176,6 +42126,7 @@ snapshots: get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 + optional: true tty-browserify@0.0.1: {} From 2c908d126437408c7ab28daab3b14f6f5ceb0e9d Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 9 Jan 2025 22:19:53 +0000 Subject: [PATCH 02/21] feat: atoma-sdk integrated --- packages/core/src/generation.ts | 152 ++++++++++++++++++++++++++------ packages/core/src/models.ts | 45 +++++++--- packages/core/src/types.ts | 2 + 3 files changed, 160 insertions(+), 39 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 5db5b8e70a5..4c25854cad3 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -42,6 +42,7 @@ import { } from "./types.ts"; import { fal } from "@fal-ai/client"; import { tavily } from "@tavily/core"; +import { AtomaSDK } from "atoma-sdk"; type Tool = CoreTool; type StepResult = AIStepResult; @@ -1632,45 +1633,32 @@ interface ProviderOptions { export async function handleProvider( options: ProviderOptions ): Promise> { - const { provider, runtime, context, modelClass } = options; + const { provider } = options; + switch (provider) { case ModelProviderName.OPENAI: - case ModelProviderName.ETERNALAI: - case ModelProviderName.ALI_BAILIAN: - case ModelProviderName.VOLENGINE: - case ModelProviderName.LLAMACLOUD: - case ModelProviderName.TOGETHER: - case ModelProviderName.NANOGPT: - case ModelProviderName.AKASH_CHAT_API: - return await handleOpenAI(options); + return handleOpenAI(options); case ModelProviderName.ANTHROPIC: - case ModelProviderName.CLAUDE_VERTEX: - return await handleAnthropic(options); + return handleAnthropic(options); case ModelProviderName.GROK: - return await handleGrok(options); + return handleGrok(options); case ModelProviderName.GROQ: - return await handleGroq(options); - case ModelProviderName.LLAMALOCAL: - return await generateObjectDeprecated({ - runtime, - context, - modelClass, - }); + return handleGroq(options); case ModelProviderName.GOOGLE: - return await handleGoogle(options); + return handleGoogle(options); case ModelProviderName.REDPILL: - return await handleRedPill(options); + return handleRedPill(options); case ModelProviderName.OPENROUTER: - return await handleOpenRouter(options); + return handleOpenRouter(options); case ModelProviderName.OLLAMA: - return await handleOllama(options); - default: { - const errorMessage = `Unsupported provider: ${provider}`; - elizaLogger.error(errorMessage); - throw new Error(errorMessage); - } + return handleOllama(options); + case ModelProviderName.ATOMA: + return handleAtoma(options); + default: + throw new Error(`Unsupported provider: ${provider}`); } } + /** * Handles object generation for OpenAI. * @@ -1886,6 +1874,114 @@ async function handleOllama({ }); } +/** + * Handles object generation for Atoma models. + * + * @param {ProviderOptions} options - Options specific to Atoma. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleAtoma({ + model, + apiKey, + schema, + schemaName: _schemaName, + schemaDescription: _schemaDescription, + mode: _mode, + modelOptions: _modelOptions, + context, + runtime: _runtime, + provider: _provider, + modelClass: _modelClass, +}: ProviderOptions): Promise> { + const atomaSDK = new AtomaSDK({ + bearerAuth: apiKey, + }); + + try { + const result = await atomaSDK.chat.create({ + messages: [ + { + content: context, + role: "user", + }, + ], + model: model, + }); + + const completion = result.choices[0].message.content; + + if (schema) { + // For schema-based generation, we'll parse the completion as JSON + // and validate it against the schema + const parsedCompletion = JSON.parse(completion); + const validatedObject = schema.parse(parsedCompletion); + + return { + object: validatedObject, + finishReason: "stop", + usage: { + promptTokens: 0, + completionTokens: 0, + totalTokens: 0, + }, + warnings: undefined, + request: {}, + response: { + id: result.id, + timestamp: new Date(), + modelId: model, + }, + logprobs: undefined, + experimental_providerMetadata: undefined, + toJsonResponse(init?: ResponseInit) { + return new Response( + JSON.stringify({ object: validatedObject }), + { + ...init, + headers: { + ...init?.headers, + "content-type": + "application/json; charset=utf-8", + }, + } + ); + }, + }; + } + + return { + object: completion, + finishReason: "stop", + usage: { + promptTokens: 0, + completionTokens: 0, + totalTokens: 0, + }, + warnings: undefined, + request: {}, + response: { + id: result.id, + timestamp: new Date(), + modelId: model, + }, + logprobs: undefined, + experimental_providerMetadata: undefined, + toJsonResponse(init?: ResponseInit) { + return new Response(JSON.stringify({ object: completion }), { + ...init, + headers: { + ...init?.headers, + "content-type": "application/json; charset=utf-8", + }, + }); + }, + }; + } catch (error) { + console.error("Error in Atoma handler:", error); + throw error; + } +} + // Add type definition for Together AI response interface TogetherAIImageResponse { data: Array<{ diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index 99e8507821a..768ec2faab2 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -16,7 +16,8 @@ export const models: Models = { [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.EMBEDDING]: + settings.EMBEDDING_OPENAI_MODEL || "text-embedding-3-small", [ModelClass.IMAGE]: settings.IMAGE_OPENAI_MODEL || "dall-e-3", }, }, @@ -55,9 +56,12 @@ export const models: Models = { }, 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]: + 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", }, }, [ModelProviderName.CLAUDE_VERTEX]: { @@ -90,7 +94,8 @@ export const models: Models = { [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.EMBEDDING]: + settings.EMBEDDING_GROK_MODEL || "grok-2-1212", // not sure about this one }, }, [ModelProviderName.GROQ]: { @@ -395,7 +400,9 @@ export const models: Models = { }, }, [ModelProviderName.VOLENGINE]: { - endpoint: settings.VOLENGINE_API_URL || "https://open.volcengineapi.com/api/v3/", + endpoint: + settings.VOLENGINE_API_URL || + "https://open.volcengineapi.com/api/v3/", settings: { stop: [], maxInputTokens: 128000, @@ -418,8 +425,7 @@ export const models: Models = { settings.VOLENGINE_MODEL || "doubao-pro-256k", [ModelClass.EMBEDDING]: - settings.VOLENGINE_EMBEDDING_MODEL || - "doubao-embedding", + settings.VOLENGINE_EMBEDDING_MODEL || "doubao-embedding", }, }, [ModelProviderName.NANOGPT]: { @@ -436,7 +442,7 @@ export const models: Models = { [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", - } + }, }, [ModelProviderName.HYPERBOLIC]: { endpoint: "https://api.hyperbolic.xyz/v1", @@ -472,7 +478,8 @@ export const models: Models = { }, model: { [ModelClass.SMALL]: settings.SMALL_VENICE_MODEL || "llama-3.3-70b", - [ModelClass.MEDIUM]: settings.MEDIUM_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", }, @@ -511,7 +518,23 @@ export const models: Models = { [ModelClass.MEDIUM]: "", [ModelClass.LARGE]: "", [ModelClass.EMBEDDING]: "", - [ModelClass.IMAGE]: settings.LIVEPEER_IMAGE_MODEL || "ByteDance/SDXL-Lightning", + [ModelClass.IMAGE]: + settings.LIVEPEER_IMAGE_MODEL || "ByteDance/SDXL-Lightning", + }, + }, + [ModelProviderName.ATOMA]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.0, + presence_penalty: 0.0, + temperature: 0.7, + }, + model: { + [ModelClass.SMALL]: "meta-llama/Llama-3.3-70B-Instruct", + [ModelClass.MEDIUM]: "meta-llama/Llama-3.3-70B-Instruct", + [ModelClass.LARGE]: "meta-llama/Llama-3.3-70B-Instruct", }, }, }; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 3687ded5e01..9a6576f0ceb 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -213,6 +213,7 @@ export type Models = { [ModelProviderName.VENICE]: Model; [ModelProviderName.AKASH_CHAT_API]: Model; [ModelProviderName.LIVEPEER]: Model; + [ModelProviderName.ATOMA]: Model; }; /** @@ -243,6 +244,7 @@ export enum ModelProviderName { VENICE = "venice", AKASH_CHAT_API = "akash_chat_api", LIVEPEER = "livepeer", + ATOMA = "atoma", } /** From 36ab70d59cf3cd899635dcf88ba19d4445cf4e9c Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 9 Jan 2025 22:35:52 +0000 Subject: [PATCH 03/21] fix: update handleAtoma response structure to include dynamic finishReason, usage metrics, and timestamp conversion --- packages/core/src/generation.ts | 44 ++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 4c25854cad3..f72186ca338 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -1918,21 +1918,31 @@ async function handleAtoma({ return { object: validatedObject, - finishReason: "stop", + finishReason: (result.choices[0].finishReason ?? "stop") as + | "stop" + | "length" + | "error" + | "tool-calls", usage: { - promptTokens: 0, - completionTokens: 0, - totalTokens: 0, + promptTokens: result.usage?.promptTokens ?? 0, + completionTokens: result.usage?.completionTokens ?? 0, + totalTokens: result.usage?.totalTokens ?? 0, }, warnings: undefined, request: {}, response: { id: result.id, - timestamp: new Date(), - modelId: model, + timestamp: new Date(result.created * 1000), // Convert Unix timestamp to Date + modelId: result.model, }, logprobs: undefined, - experimental_providerMetadata: undefined, + experimental_providerMetadata: result.systemFingerprint + ? { + metadata: { + systemFingerprint: result.systemFingerprint, + }, + } + : undefined, toJsonResponse(init?: ResponseInit) { return new Response( JSON.stringify({ object: validatedObject }), @@ -1951,21 +1961,27 @@ async function handleAtoma({ return { object: completion, - finishReason: "stop", + finishReason: (result.choices[0].finishReason ?? "stop") as + | "stop" + | "length" + | "error" + | "tool-calls", usage: { - promptTokens: 0, - completionTokens: 0, - totalTokens: 0, + promptTokens: result.usage?.promptTokens ?? 0, + completionTokens: result.usage?.completionTokens ?? 0, + totalTokens: result.usage?.totalTokens ?? 0, }, warnings: undefined, request: {}, response: { id: result.id, - timestamp: new Date(), - modelId: model, + timestamp: new Date(result.created * 1000), // Convert Unix timestamp to Date + modelId: result.model, }, logprobs: undefined, - experimental_providerMetadata: undefined, + experimental_providerMetadata: result.systemFingerprint + ? { metadata: { systemFingerprint: result.systemFingerprint } } + : undefined, toJsonResponse(init?: ResponseInit) { return new Response(JSON.stringify({ object: completion }), { ...init, From 88cd7bee81c44cfa37705252147ceaba5d5fa4c5 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Tue, 14 Jan 2025 20:03:06 +0000 Subject: [PATCH 04/21] feat: add new model classes for embedding and image processing --- packages/core/src/models.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index 768ec2faab2..8ce77635576 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -535,6 +535,8 @@ export const models: Models = { [ModelClass.SMALL]: "meta-llama/Llama-3.3-70B-Instruct", [ModelClass.MEDIUM]: "meta-llama/Llama-3.3-70B-Instruct", [ModelClass.LARGE]: "meta-llama/Llama-3.3-70B-Instruct", + [ModelClass.EMBEDDING]: "intfloat/multilingual-e5-large-instruct", + [ModelClass.IMAGE]: "black-forest-labs/FLUX.1-schnell", }, }, }; From 2a88cdb4da4df3cdd578ab6635bec074ad58cfff Mon Sep 17 00:00:00 2001 From: francis2tm Date: Tue, 14 Jan 2025 20:04:04 +0000 Subject: [PATCH 05/21] feat: extend handleProvider function to include runtime, context, and modelClass options --- packages/core/src/generation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index f72186ca338..f3fb3d7a963 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -1633,7 +1633,7 @@ interface ProviderOptions { export async function handleProvider( options: ProviderOptions ): Promise> { - const { provider } = options; + const { provider, runtime, context, modelClass } = options; switch (provider) { case ModelProviderName.OPENAI: From 1d8bf8660389c3137e013de04d73011cea1b276c Mon Sep 17 00:00:00 2001 From: francis2tm Date: Wed, 15 Jan 2025 10:05:58 +0000 Subject: [PATCH 06/21] feat: add Atoma SDK configuration to .env.example for Bearer Auth token --- .env.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.env.example b/.env.example index 2c0bdbe3bd5..fdbf4e5f188 100644 --- a/.env.example +++ b/.env.example @@ -16,6 +16,9 @@ LARGE_OPENAI_MODEL= # Default: gpt-4o EMBEDDING_OPENAI_MODEL= # Default: text-embedding-3-small IMAGE_OPENAI_MODEL= # Default: dall-e-3 +# Atoma SDK Configuration +ATOMASDK_BEARER_AUTH= # Atoma SDK Bearer Auth token + # Eternal AI's Decentralized Inference API ETERNALAI_URL= ETERNALAI_MODEL= # Default: "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16" From 0480f65d7b69b2a6cdbe0176cb5111bee4144e61 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Wed, 15 Jan 2025 20:46:17 +0000 Subject: [PATCH 07/21] feat: integrate Atoma model support with configuration updates and SDK version change - Added Atoma API URL and model configurations to .env.example. - Updated pnpm-lock.yaml to reference the latest Atoma SDK version. - Enhanced index.ts to include Atoma as a model provider for token retrieval. - Implemented Atoma model initialization and response handling in generation.ts. - Updated models.ts to utilize dynamic settings for Atoma model classes. --- .env.example | 6 ++++++ agent/src/index.ts | 5 +++++ packages/core/src/generation.ts | 30 ++++++++++++++++++++++++++++++ packages/core/src/models.ts | 23 ++++++++++++++++------- pnpm-lock.yaml | 10 +++++----- 5 files changed, 62 insertions(+), 12 deletions(-) diff --git a/.env.example b/.env.example index fdbf4e5f188..04ab7e16e8a 100644 --- a/.env.example +++ b/.env.example @@ -18,6 +18,12 @@ IMAGE_OPENAI_MODEL= # Default: dall-e-3 # Atoma SDK Configuration ATOMASDK_BEARER_AUTH= # Atoma SDK Bearer Auth token +ATOMA_API_URL= # Default: https://api.atoma.network/v1 +SMALL_ATOMA_MODEL= # Default: meta-llama/Llama-3.3-70B-Instruct +MEDIUM_ATOMA_MODEL= # Default: meta-llama/Llama-3.3-70B-Instruct +LARGE_ATOMA_MODEL= # Default: meta-llama/Llama-3.3-70B-Instruct +EMBEDDING_ATOMA_MODEL= # Default: intfloat/multilingual-e5-large-instruct +IMAGE_ATOMA_MODEL= # Default: black-forest-labs/FLUX.1-schnell # Eternal AI's Decentralized Inference API ETERNALAI_URL= diff --git a/agent/src/index.ts b/agent/src/index.ts index 53058cf4ece..375f881a953 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -339,6 +339,11 @@ export function getTokenForProvider( character.settings?.secrets?.VENICE_API_KEY || settings.VENICE_API_KEY ); + case ModelProviderName.ATOMA: + return ( + character.settings?.secrets?.ATOMASDK_BEARER_AUTH || + settings.ATOMASDK_BEARER_AUTH + ); case ModelProviderName.AKASH_CHAT_API: return ( character.settings?.secrets?.AKASH_CHAT_API_KEY || diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index f3fb3d7a963..56d89acabda 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -740,6 +740,36 @@ export async function generateText({ break; } + case ModelProviderName.ATOMA: { + elizaLogger.debug("Initializing Atoma model."); + const atoma = createOpenAI({ + apiKey, + baseURL: endpoint, + fetch: runtime.fetch, + }); + + const { text: atomaResponse } = await aiGenerateText({ + model: atoma.languageModel(model), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + tools: tools, + onStepFinish: onStepFinish, + maxSteps: maxSteps, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + experimental_telemetry: experimental_telemetry, + }); + + response = atomaResponse; + elizaLogger.debug("Received response from Atoma model."); + break; + } + case ModelProviderName.GALADRIEL: { elizaLogger.debug("Initializing Galadriel model."); const galadriel = createOpenAI({ diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index 8ce77635576..9a643391a7d 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -523,20 +523,29 @@ export const models: Models = { }, }, [ModelProviderName.ATOMA]: { + endpoint: settings.ATOMA_API_URL || "https://api.atoma.network/v1", settings: { stop: [], maxInputTokens: 128000, maxOutputTokens: 8192, - frequency_penalty: 0.0, - presence_penalty: 0.0, temperature: 0.7, }, model: { - [ModelClass.SMALL]: "meta-llama/Llama-3.3-70B-Instruct", - [ModelClass.MEDIUM]: "meta-llama/Llama-3.3-70B-Instruct", - [ModelClass.LARGE]: "meta-llama/Llama-3.3-70B-Instruct", - [ModelClass.EMBEDDING]: "intfloat/multilingual-e5-large-instruct", - [ModelClass.IMAGE]: "black-forest-labs/FLUX.1-schnell", + [ModelClass.SMALL]: + settings.SMALL_ATOMA_MODEL || + "meta-llama/Llama-3.3-70B-Instruct", + [ModelClass.MEDIUM]: + settings.MEDIUM_ATOMA_MODEL || + "meta-llama/Llama-3.3-70B-Instruct", + [ModelClass.LARGE]: + settings.LARGE_ATOMA_MODEL || + "meta-llama/Llama-3.3-70B-Instruct", + [ModelClass.EMBEDDING]: + settings.EMBEDDING_ATOMA_MODEL || + "intfloat/multilingual-e5-large-instruct", + [ModelClass.IMAGE]: + settings.IMAGE_ATOMA_MODEL || + "black-forest-labs/FLUX.1-schnell", }, }, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a5bc83a33d..40889a0413a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -817,7 +817,7 @@ importers: version: 1.0.2(encoding@0.1.13)(zod@3.23.8) atoma-sdk: specifier: github:atoma-network/atoma-sdk-typescript - version: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/1420a609da09a15eaa2b173a830049aef4060b9c(zod@3.23.8) + version: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1(zod@3.23.8) fastembed: specifier: 1.14.1 version: 1.14.1 @@ -8981,9 +8981,9 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/1420a609da09a15eaa2b173a830049aef4060b9c: - resolution: {tarball: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/1420a609da09a15eaa2b173a830049aef4060b9c} - version: 0.1.1 + atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1: + resolution: {tarball: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1} + version: 0.1.0 peerDependencies: zod: '>= 3' @@ -29971,7 +29971,7 @@ snapshots: at-least-node@1.0.0: {} - atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/1420a609da09a15eaa2b173a830049aef4060b9c(zod@3.23.8): + atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1(zod@3.23.8): dependencies: zod: 3.23.8 From f490729ab5524349b24f1ddb1099739c4aeb577a Mon Sep 17 00:00:00 2001 From: francis2tm Date: Wed, 15 Jan 2025 20:47:19 +0000 Subject: [PATCH 08/21] refactor: remove unused model configurations from .env.example and models.ts - Deleted EMBEDDING_ATOMA_MODEL and IMAGE_ATOMA_MODEL from .env.example. - Removed corresponding model class settings from models.ts to streamline configuration. --- .env.example | 2 -- packages/core/src/models.ts | 6 ------ 2 files changed, 8 deletions(-) diff --git a/.env.example b/.env.example index 04ab7e16e8a..7758f9a6e99 100644 --- a/.env.example +++ b/.env.example @@ -22,8 +22,6 @@ ATOMA_API_URL= # Default: https://api.atoma.network/v1 SMALL_ATOMA_MODEL= # Default: meta-llama/Llama-3.3-70B-Instruct MEDIUM_ATOMA_MODEL= # Default: meta-llama/Llama-3.3-70B-Instruct LARGE_ATOMA_MODEL= # Default: meta-llama/Llama-3.3-70B-Instruct -EMBEDDING_ATOMA_MODEL= # Default: intfloat/multilingual-e5-large-instruct -IMAGE_ATOMA_MODEL= # Default: black-forest-labs/FLUX.1-schnell # Eternal AI's Decentralized Inference API ETERNALAI_URL= diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index 9a643391a7d..47e46cd9c6d 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -540,12 +540,6 @@ export const models: Models = { [ModelClass.LARGE]: settings.LARGE_ATOMA_MODEL || "meta-llama/Llama-3.3-70B-Instruct", - [ModelClass.EMBEDDING]: - settings.EMBEDDING_ATOMA_MODEL || - "intfloat/multilingual-e5-large-instruct", - [ModelClass.IMAGE]: - settings.IMAGE_ATOMA_MODEL || - "black-forest-labs/FLUX.1-schnell", }, }, }; From 10d8144b9edcc56b13e97ac98f1526fa5a70bb4d Mon Sep 17 00:00:00 2001 From: francis2tm Date: Wed, 15 Jan 2025 23:17:50 +0000 Subject: [PATCH 09/21] chore: update lockfile --- pnpm-lock.yaml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41833b0407a..9985611362d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11051,6 +11051,12 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true + atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1: + resolution: {tarball: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1} + version: 0.1.0 + peerDependencies: + zod: '>= 3' + atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -35862,6 +35868,10 @@ snapshots: atob@2.1.2: {} + atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1(zod@3.23.8): + dependencies: + zod: 3.23.8 + atomic-sleep@1.0.0: {} autocomplete.js@0.37.1: @@ -38866,7 +38876,6 @@ snapshots: '@esbuild/win32-arm64': 0.23.1 '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - optional: true esbuild@0.24.2: optionalDependencies: @@ -40218,7 +40227,6 @@ snapshots: get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 - optional: true get-uri@6.0.4: dependencies: @@ -49093,7 +49101,6 @@ snapshots: get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 - optional: true tty-browserify@0.0.1: {} From f19eade36a560856c288e2e8a0682ebb96f1d581 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Wed, 15 Jan 2025 23:19:05 +0000 Subject: [PATCH 10/21] chore: update lockfile --- pnpm-lock.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9985611362d..2a6b8b921c5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47169,7 +47169,6 @@ snapshots: resolve-pathname@3.0.0: {} resolve-pkg-maps@1.0.0: - optional: true resolve.exports@2.0.3: {} From 28358b6329bc05d65c46352b42abc0921d3fc4d8 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Wed, 15 Jan 2025 23:19:49 +0000 Subject: [PATCH 11/21] chore: update lockfile --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2a6b8b921c5..d02564fc876 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47168,7 +47168,7 @@ snapshots: resolve-pathname@3.0.0: {} - resolve-pkg-maps@1.0.0: + resolve-pkg-maps@1.0.0: {} resolve.exports@2.0.3: {} From bfef39b9e29160dc75b7138912c0dccbb33fa777 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:00:45 +0000 Subject: [PATCH 12/21] refactor: restructure Atoma model configuration for improved clarity and consistency - Updated Atoma model settings in models.ts to encapsulate parameters (stop, maxInputTokens, maxOutputTokens, temperature) within each model class. - Reformatted code for better readability and maintainability. - Minor formatting adjustments in types.ts for consistency in enum declaration and interface method signatures. --- packages/core/src/models.ts | 42 ++++++++++++++++++++++++------------- packages/core/src/types.ts | 34 ++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 21 deletions(-) diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index e4d1a1eead2..2c6046d9c5f 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -1000,22 +1000,34 @@ export const models: Models = { }, [ModelProviderName.ATOMA]: { endpoint: settings.ATOMA_API_URL || "https://api.atoma.network/v1", - settings: { - stop: [], - maxInputTokens: 128000, - maxOutputTokens: 8192, - temperature: 0.7, - }, model: { - [ModelClass.SMALL]: - settings.SMALL_ATOMA_MODEL || - "meta-llama/Llama-3.3-70B-Instruct", - [ModelClass.MEDIUM]: - settings.MEDIUM_ATOMA_MODEL || - "meta-llama/Llama-3.3-70B-Instruct", - [ModelClass.LARGE]: - settings.LARGE_ATOMA_MODEL || - "meta-llama/Llama-3.3-70B-Instruct", + [ModelClass.SMALL]: { + name: + settings.SMALL_ATOMA_MODEL || + "meta-llama/Llama-3.3-70B-Instruct", + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + temperature: 0.7, + }, + [ModelClass.MEDIUM]: { + name: + settings.MEDIUM_ATOMA_MODEL || + "meta-llama/Llama-3.3-70B-Instruct", + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + temperature: 0.7, + }, + [ModelClass.LARGE]: { + name: + settings.LARGE_ATOMA_MODEL || + "meta-llama/Llama-3.3-70B-Instruct", + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + temperature: 0.7, + }, }, }, }; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index fdc84350237..ab173f65021 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -263,8 +263,8 @@ export enum ModelProviderName { AKASH_CHAT_API = "akash_chat_api", LIVEPEER = "livepeer", LETZAI = "letzai", - DEEPSEEK="deepseek", - INFERA="infera" + DEEPSEEK = "deepseek", + INFERA = "infera", ATOMA = "atoma", } @@ -1089,7 +1089,10 @@ export interface IMemoryManager { ): Promise<{ embedding: number[]; levenshtein_score: number }[]>; getMemoryById(id: UUID): Promise; - getMemoriesByRoomIds(params: { roomIds: UUID[], limit?: number }): Promise; + getMemoriesByRoomIds(params: { + roomIds: UUID[]; + limit?: number; + }): Promise; searchMemoriesByEmbedding( embedding: number[], opts: { @@ -1380,9 +1383,28 @@ export interface IrysTimestamp { } export interface IIrysService extends Service { - getDataFromAnAgent(agentsWalletPublicKeys: string[], tags: GraphQLTag[], timestamp: IrysTimestamp): Promise; - workerUploadDataOnIrys(data: any, dataType: IrysDataType, messageType: IrysMessageType, serviceCategory: string[], protocol: string[], validationThreshold: number[], minimumProviders: number[], testProvider: boolean[], reputation: number[]): Promise; - providerUploadDataOnIrys(data: any, dataType: IrysDataType, serviceCategory: string[], protocol: string[]): Promise; + getDataFromAnAgent( + agentsWalletPublicKeys: string[], + tags: GraphQLTag[], + timestamp: IrysTimestamp + ): Promise; + workerUploadDataOnIrys( + data: any, + dataType: IrysDataType, + messageType: IrysMessageType, + serviceCategory: string[], + protocol: string[], + validationThreshold: number[], + minimumProviders: number[], + testProvider: boolean[], + reputation: number[] + ): Promise; + providerUploadDataOnIrys( + data: any, + dataType: IrysDataType, + serviceCategory: string[], + protocol: string[] + ): Promise; } export interface ITeeLogService extends Service { From ef2f9a147b85cd987aba34c6ed855eeb732e1961 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:22:51 +0000 Subject: [PATCH 13/21] chore: restore original formatting --- packages/core/src/generation.ts | 37 +++++++++------------------------ 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index d5088693374..b9c1054ae1e 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -193,16 +193,12 @@ function getCloudflareGatewayBaseURL( } if (!cloudflareAccountId) { - elizaLogger.warn( - "Cloudflare Gateway is enabled but CLOUDFLARE_AI_ACCOUNT_ID is not set" - ); + elizaLogger.warn("Cloudflare Gateway is enabled but CLOUDFLARE_AI_ACCOUNT_ID is not set"); return undefined; } if (!cloudflareGatewayId) { - elizaLogger.warn( - "Cloudflare Gateway is enabled but CLOUDFLARE_AI_GATEWAY_ID is not set" - ); + elizaLogger.warn("Cloudflare Gateway is enabled but CLOUDFLARE_AI_GATEWAY_ID is not set"); return undefined; } @@ -211,7 +207,7 @@ function getCloudflareGatewayBaseURL( provider, baseURL, accountId: cloudflareAccountId, - gatewayId: cloudflareGatewayId, + gatewayId: cloudflareGatewayId }); return baseURL; @@ -301,12 +297,8 @@ export async function generateText({ hasRuntime: !!runtime, runtimeSettings: { CLOUDFLARE_GW_ENABLED: runtime.getSetting("CLOUDFLARE_GW_ENABLED"), - CLOUDFLARE_AI_ACCOUNT_ID: runtime.getSetting( - "CLOUDFLARE_AI_ACCOUNT_ID" - ), - CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting( - "CLOUDFLARE_AI_GATEWAY_ID" - ), + CLOUDFLARE_AI_ACCOUNT_ID: runtime.getSetting("CLOUDFLARE_AI_ACCOUNT_ID"), + CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting("CLOUDFLARE_AI_GATEWAY_ID"), }, }); @@ -427,11 +419,8 @@ export async function generateText({ case ModelProviderName.TOGETHER: case ModelProviderName.NINETEEN_AI: case ModelProviderName.AKASH_CHAT_API: { - elizaLogger.debug( - "Initializing OpenAI model with Cloudflare check" - ); - const baseURL = - getCloudflareGatewayBaseURL(runtime, "openai") || endpoint; + elizaLogger.debug("Initializing OpenAI model with Cloudflare check"); + const baseURL = getCloudflareGatewayBaseURL(runtime, "openai") || endpoint; //elizaLogger.debug("OpenAI baseURL result:", { baseURL }); const openai = createOpenAI({ @@ -505,9 +494,7 @@ export async function generateText({ model: openai.languageModel(model), prompt: context, system: - runtime.character.system ?? - settings.SYSTEM_PROMPT ?? - undefined, + runtime.character.system ?? settings.SYSTEM_PROMPT ?? undefined, temperature: temperature, maxTokens: max_response_length, frequencyPenalty: frequency_penalty, @@ -569,12 +556,8 @@ export async function generateText({ } case ModelProviderName.ANTHROPIC: { - elizaLogger.debug( - "Initializing Anthropic model with Cloudflare check" - ); - const baseURL = - getCloudflareGatewayBaseURL(runtime, "anthropic") || - "https://api.anthropic.com/v1"; + elizaLogger.debug("Initializing Anthropic model with Cloudflare check"); + const baseURL = getCloudflareGatewayBaseURL(runtime, "anthropic") || "https://api.anthropic.com/v1"; elizaLogger.debug("Anthropic baseURL result:", { baseURL }); const anthropic = createAnthropic({ From 6c8475c5a7215f8687ea118759e3af271d0d28b4 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:26:55 +0000 Subject: [PATCH 14/21] chore: restore original formatting --- packages/core/src/generation.ts | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index b9c1054ae1e..688a0e984fe 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -171,12 +171,8 @@ async function truncateTiktoken( * @param provider The model provider name * @returns The Cloudflare Gateway base URL if enabled, undefined otherwise */ -function getCloudflareGatewayBaseURL( - runtime: IAgentRuntime, - provider: string -): string | undefined { - const isCloudflareEnabled = - runtime.getSetting("CLOUDFLARE_GW_ENABLED") === "true"; +function getCloudflareGatewayBaseURL(runtime: IAgentRuntime, provider: string): string | undefined { + const isCloudflareEnabled = runtime.getSetting("CLOUDFLARE_GW_ENABLED") === "true"; const cloudflareAccountId = runtime.getSetting("CLOUDFLARE_AI_ACCOUNT_ID"); const cloudflareGatewayId = runtime.getSetting("CLOUDFLARE_AI_GATEWAY_ID"); @@ -184,7 +180,7 @@ function getCloudflareGatewayBaseURL( isEnabled: isCloudflareEnabled, hasAccountId: !!cloudflareAccountId, hasGatewayId: !!cloudflareGatewayId, - provider: provider, + provider: provider }); if (!isCloudflareEnabled) { @@ -298,7 +294,7 @@ export async function generateText({ runtimeSettings: { CLOUDFLARE_GW_ENABLED: runtime.getSetting("CLOUDFLARE_GW_ENABLED"), CLOUDFLARE_AI_ACCOUNT_ID: runtime.getSetting("CLOUDFLARE_AI_ACCOUNT_ID"), - CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting("CLOUDFLARE_AI_GATEWAY_ID"), + CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting("CLOUDFLARE_AI_GATEWAY_ID") }, }); @@ -420,7 +416,7 @@ export async function generateText({ case ModelProviderName.NINETEEN_AI: case ModelProviderName.AKASH_CHAT_API: { elizaLogger.debug("Initializing OpenAI model with Cloudflare check"); - const baseURL = getCloudflareGatewayBaseURL(runtime, "openai") || endpoint; + const baseURL = getCloudflareGatewayBaseURL(runtime, 'openai') || endpoint; //elizaLogger.debug("OpenAI baseURL result:", { baseURL }); const openai = createOpenAI({ @@ -493,8 +489,7 @@ export async function generateText({ const { text: openaiResponse } = await aiGenerateText({ model: openai.languageModel(model), prompt: context, - system: - runtime.character.system ?? settings.SYSTEM_PROMPT ?? undefined, + system: runtime.character.system ?? settings.SYSTEM_PROMPT ?? undefined, temperature: temperature, maxTokens: max_response_length, frequencyPenalty: frequency_penalty, @@ -557,14 +552,10 @@ export async function generateText({ case ModelProviderName.ANTHROPIC: { elizaLogger.debug("Initializing Anthropic model with Cloudflare check"); - const baseURL = getCloudflareGatewayBaseURL(runtime, "anthropic") || "https://api.anthropic.com/v1"; + const baseURL = getCloudflareGatewayBaseURL(runtime, 'anthropic') || "https://api.anthropic.com/v1"; elizaLogger.debug("Anthropic baseURL result:", { baseURL }); - const anthropic = createAnthropic({ - apiKey, - baseURL, - fetch: runtime.fetch, - }); + const anthropic = createAnthropic({apiKey, baseURL, fetch: runtime.fetch}); const { text: anthropicResponse } = await aiGenerateText({ model: anthropic.languageModel(model), prompt: context, From ed17dd25581cc4a6e1e226ee518634e8b4b8170a Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:34:32 +0000 Subject: [PATCH 15/21] chore: restore original formatting --- packages/core/src/generation.ts | 59 ++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 688a0e984fe..7c28cb25185 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -295,7 +295,7 @@ export async function generateText({ CLOUDFLARE_GW_ENABLED: runtime.getSetting("CLOUDFLARE_GW_ENABLED"), CLOUDFLARE_AI_ACCOUNT_ID: runtime.getSetting("CLOUDFLARE_AI_ACCOUNT_ID"), CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting("CLOUDFLARE_AI_GATEWAY_ID") - }, + } }); const endpoint = @@ -555,7 +555,7 @@ export async function generateText({ const baseURL = getCloudflareGatewayBaseURL(runtime, 'anthropic') || "https://api.anthropic.com/v1"; elizaLogger.debug("Anthropic baseURL result:", { baseURL }); - const anthropic = createAnthropic({apiKey, baseURL, fetch: runtime.fetch}); + const anthropic = createAnthropic({ apiKey, baseURL, fetch: runtime.fetch }); const { text: anthropicResponse } = await aiGenerateText({ model: anthropic.languageModel(model), prompt: context, @@ -643,16 +643,10 @@ export async function generateText({ } case ModelProviderName.GROQ: { - elizaLogger.debug( - "Initializing Groq model with Cloudflare check" - ); + elizaLogger.debug("Initializing Groq model with Cloudflare check"); const baseURL = getCloudflareGatewayBaseURL(runtime, "groq"); elizaLogger.debug("Groq baseURL result:", { baseURL }); - const groq = createGroq({ - apiKey, - fetch: runtime.fetch, - baseURL, - }); + const groq = createGroq({ apiKey, fetch: runtime.fetch, baseURL }); const { text: groqResponse } = await aiGenerateText({ model: groq.languageModel(model), @@ -1929,29 +1923,44 @@ export async function handleProvider( } = options; switch (provider) { case ModelProviderName.OPENAI: - return handleOpenAI(options); + case ModelProviderName.ETERNALAI: + case ModelProviderName.ALI_BAILIAN: + case ModelProviderName.VOLENGINE: + case ModelProviderName.LLAMACLOUD: + case ModelProviderName.TOGETHER: + case ModelProviderName.NANOGPT: + case ModelProviderName.AKASH_CHAT_API: + return await handleOpenAI(options); case ModelProviderName.ANTHROPIC: - return handleAnthropic(options); + case ModelProviderName.CLAUDE_VERTEX: + return await handleAnthropic(options); case ModelProviderName.GROK: - return handleGrok(options); + return await handleGrok(options); case ModelProviderName.GROQ: - return handleGroq(options); + return await handleGroq(options); + case ModelProviderName.LLAMALOCAL: + return await generateObjectDeprecated({ + runtime, + context, + modelClass, + }); case ModelProviderName.GOOGLE: return await handleGoogle(options); case ModelProviderName.MISTRAL: return await handleMistral(options); case ModelProviderName.REDPILL: - return handleRedPill(options); + return await handleRedPill(options); case ModelProviderName.OPENROUTER: - return handleOpenRouter(options); + return await handleOpenRouter(options); case ModelProviderName.OLLAMA: - return handleOllama(options); + return await handleOllama(options); case ModelProviderName.DEEPSEEK: return await handleDeepSeek(options); - case ModelProviderName.ATOMA: - return handleAtoma(options); - default: - throw new Error(`Unsupported provider: ${provider}`); + default: { + const errorMessage = `Unsupported provider: ${provider}`; + elizaLogger.error(errorMessage); + throw new Error(errorMessage); + } } } @@ -1972,9 +1981,7 @@ async function handleOpenAI({ provider: _provider, runtime, }: ProviderOptions): Promise> { - const baseURL = - getCloudflareGatewayBaseURL(runtime, "openai") || - models.openai.endpoint; + const baseURL = getCloudflareGatewayBaseURL(runtime, 'openai') || models.openai.endpoint; const openai = createOpenAI({ apiKey, baseURL }); return await aiGenerateObject({ model: openai.languageModel(model), @@ -2003,7 +2010,7 @@ async function handleAnthropic({ runtime, }: ProviderOptions): Promise> { elizaLogger.debug("Handling Anthropic request with Cloudflare check"); - const baseURL = getCloudflareGatewayBaseURL(runtime, "anthropic"); + const baseURL = getCloudflareGatewayBaseURL(runtime, 'anthropic'); elizaLogger.debug("Anthropic handleAnthropic baseURL:", { baseURL }); const anthropic = createAnthropic({ apiKey, baseURL }); @@ -2060,7 +2067,7 @@ async function handleGroq({ runtime, }: ProviderOptions): Promise> { elizaLogger.debug("Handling Groq request with Cloudflare check"); - const baseURL = getCloudflareGatewayBaseURL(runtime, "groq"); + const baseURL = getCloudflareGatewayBaseURL(runtime, 'groq'); elizaLogger.debug("Groq handleGroq baseURL:", { baseURL }); const groq = createGroq({ apiKey, baseURL }); From cb20d0e03682f43d6d0a169ebaf4d61419e45ff6 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:35:28 +0000 Subject: [PATCH 16/21] chore: restore original formatting --- packages/core/src/generation.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 7c28cb25185..8a3110b6b89 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -644,7 +644,7 @@ export async function generateText({ case ModelProviderName.GROQ: { elizaLogger.debug("Initializing Groq model with Cloudflare check"); - const baseURL = getCloudflareGatewayBaseURL(runtime, "groq"); + const baseURL = getCloudflareGatewayBaseURL(runtime, 'groq'); elizaLogger.debug("Groq baseURL result:", { baseURL }); const groq = createGroq({ apiKey, fetch: runtime.fetch, baseURL }); @@ -1963,7 +1963,6 @@ export async function handleProvider( } } } - /** * Handles object generation for OpenAI. * From 58e66e350490ca189a5dafa949d4a96236c87c0f Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:38:14 +0000 Subject: [PATCH 17/21] chore: revert types.ts --- packages/core/src/types.ts | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index ab173f65021..520f446712c 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -911,6 +911,8 @@ export interface IDatabaseAdapter { getMemoryById(id: UUID): Promise; + getMemoriesByIds(ids: UUID[], tableName?: string): Promise; + getMemoriesByRoomIds(params: { tableName: string; agentId: UUID; @@ -1418,28 +1420,6 @@ export interface ITeeLogService extends Service { ): Promise; } -export type SearchImage = { - url: string; - description?: string; -}; - -export type SearchResult = { - title: string; - url: string; - content: string; - rawContent?: string; - score: number; - publishedDate?: string; -}; - -export type SearchResponse = { - answer?: string; - query: string; - responseTime: number; - images: SearchImage[]; - results: SearchResult[]; -}; - export enum ServiceType { IMAGE_DESCRIPTION = "image_description", TRANSCRIPTION = "transcription", @@ -1452,9 +1432,11 @@ export enum ServiceType { AWS_S3 = "aws_s3", BUTTPLUG = "buttplug", SLACK = "slack", + VERIFIABLE_LOGGING = "verifiable_logging", IRYS = "irys", TEE_LOG = "tee_log", GOPLUS_SECURITY = "goplus_security", + WEB_SEARCH = "web_search", } export enum LoggingLevel { @@ -1578,4 +1560,4 @@ export enum TranscriptionProvider { export enum ActionTimelineType { ForYou = "foryou", Following = "following", -} +} \ No newline at end of file From be5aa19483765067d2d33f182cbe108601004ad3 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:48:29 +0000 Subject: [PATCH 18/21] refactor: improve code formatting and readability in generation.ts - Standardized import statements and removed unnecessary line breaks. - Simplified function definitions and improved inline comments for clarity. - Enhanced logging messages for better debugging and error tracking. - Ensured consistent use of single quotes for strings throughout the file. --- packages/core/src/generation.ts | 167 ++++++++++---------------------- 1 file changed, 49 insertions(+), 118 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 2f656d76cef..e4d1fb6577f 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -52,7 +52,7 @@ import { import { fal } from "@fal-ai/client"; import BigNumber from "bignumber.js"; -import { createPublicClient, http } from "viem"; +import {createPublicClient, http} from "viem"; import { AtomaSDK } from "atoma-sdk"; type Tool = CoreTool; @@ -170,41 +170,20 @@ async function truncateTiktoken( * Get OnChain EternalAI System Prompt * @returns System Prompt */ -async function getOnChainEternalAISystemPrompt( - runtime: IAgentRuntime -): Promise | undefined { - const agentId = runtime.getSetting("ETERNALAI_AGENT_ID"); +async function getOnChainEternalAISystemPrompt(runtime: IAgentRuntime): Promise | undefined { + const agentId = runtime.getSetting("ETERNALAI_AGENT_ID") const providerUrl = runtime.getSetting("ETERNALAI_RPC_URL"); - const contractAddress = runtime.getSetting( - "ETERNALAI_AGENT_CONTRACT_ADDRESS" - ); + const contractAddress = runtime.getSetting("ETERNALAI_AGENT_CONTRACT_ADDRESS"); if (agentId && providerUrl && contractAddress) { // get on-chain system-prompt - const contractABI = [ - { - inputs: [ - { - internalType: "uint256", - name: "_agentId", - type: "uint256", - }, - ], - name: "getAgentSystemPrompt", - outputs: [ - { internalType: "bytes[]", name: "", type: "bytes[]" }, - ], - stateMutability: "view", - type: "function", - }, - ]; + const contractABI = [{"inputs": [{"internalType": "uint256", "name": "_agentId", "type": "uint256"}], "name": "getAgentSystemPrompt", "outputs": [{"internalType": "bytes[]", "name": "","type": "bytes[]"}], "stateMutability": "view", "type": "function"}]; const publicClient = createPublicClient({ transport: http(providerUrl), }); try { - const validAddress: `0x${string}` = - contractAddress as `0x${string}`; + const validAddress: `0x${string}` = contractAddress as `0x${string}`; const result = await publicClient.readContract({ address: validAddress, abi: contractABI, @@ -212,17 +191,17 @@ async function getOnChainEternalAISystemPrompt( args: [new BigNumber(agentId)], }); if (result) { - elizaLogger.info("on-chain system-prompt response", result[0]); + elizaLogger.info('on-chain system-prompt response', result[0]); const value = result[0].toString().replace("0x", ""); - const content = Buffer.from(value, "hex").toString("utf-8"); - elizaLogger.info("on-chain system-prompt", content); - return await fetchEternalAISystemPrompt(runtime, content); + let content = Buffer.from(value, 'hex').toString('utf-8'); + elizaLogger.info('on-chain system-prompt', content); + return await fetchEternalAISystemPrompt(runtime, content) } else { return undefined; } } catch (error) { elizaLogger.error(error); - elizaLogger.error("err", error); + elizaLogger.error('err', error); } } return undefined; @@ -232,42 +211,34 @@ async function getOnChainEternalAISystemPrompt( * Fetch EternalAI System Prompt * @returns System Prompt */ -async function fetchEternalAISystemPrompt( - runtime: IAgentRuntime, - content: string -): Promise | undefined { - const IPFS = "ipfs://"; +async function fetchEternalAISystemPrompt(runtime: IAgentRuntime, content: string): Promise | undefined { + const IPFS = "ipfs://" const containsSubstring: boolean = content.includes(IPFS); if (containsSubstring) { - const lightHouse = content.replace( - IPFS, - "https://gateway.lighthouse.storage/ipfs/" - ); - elizaLogger.info("fetch lightHouse", lightHouse); + + const lightHouse = content.replace(IPFS, "https://gateway.lighthouse.storage/ipfs/"); + elizaLogger.info("fetch lightHouse", lightHouse) const responseLH = await fetch(lightHouse, { method: "GET", }); - elizaLogger.info("fetch lightHouse resp", responseLH); + elizaLogger.info("fetch lightHouse resp", responseLH) if (responseLH.ok) { const data = await responseLH.text(); return data; } else { - const gcs = content.replace( - IPFS, - "https://cdn.eternalai.org/upload/" - ); - elizaLogger.info("fetch gcs", gcs); + const gcs = content.replace(IPFS, "https://cdn.eternalai.org/upload/") + elizaLogger.info("fetch gcs", gcs) const responseGCS = await fetch(gcs, { method: "GET", }); - elizaLogger.info("fetch lightHouse gcs", responseGCS); + elizaLogger.info("fetch lightHouse gcs", responseGCS) if (responseGCS.ok) { const data = await responseGCS.text(); return data; } else { - throw new Error("invalid on-chain system prompt"); + throw new Error("invalid on-chain system prompt") } - return undefined; + return undefined } } else { return content; @@ -280,12 +251,8 @@ async function fetchEternalAISystemPrompt( * @param provider The model provider name * @returns The Cloudflare Gateway base URL if enabled, undefined otherwise */ -function getCloudflareGatewayBaseURL( - runtime: IAgentRuntime, - provider: string -): string | undefined { - const isCloudflareEnabled = - runtime.getSetting("CLOUDFLARE_GW_ENABLED") === "true"; +function getCloudflareGatewayBaseURL(runtime: IAgentRuntime, provider: string): string | undefined { + const isCloudflareEnabled = runtime.getSetting("CLOUDFLARE_GW_ENABLED") === "true"; const cloudflareAccountId = runtime.getSetting("CLOUDFLARE_AI_ACCOUNT_ID"); const cloudflareGatewayId = runtime.getSetting("CLOUDFLARE_AI_GATEWAY_ID"); @@ -293,7 +260,7 @@ function getCloudflareGatewayBaseURL( isEnabled: isCloudflareEnabled, hasAccountId: !!cloudflareAccountId, hasGatewayId: !!cloudflareGatewayId, - provider: provider, + provider: provider }); if (!isCloudflareEnabled) { @@ -302,16 +269,12 @@ function getCloudflareGatewayBaseURL( } if (!cloudflareAccountId) { - elizaLogger.warn( - "Cloudflare Gateway is enabled but CLOUDFLARE_AI_ACCOUNT_ID is not set" - ); + elizaLogger.warn("Cloudflare Gateway is enabled but CLOUDFLARE_AI_ACCOUNT_ID is not set"); return undefined; } if (!cloudflareGatewayId) { - elizaLogger.warn( - "Cloudflare Gateway is enabled but CLOUDFLARE_AI_GATEWAY_ID is not set" - ); + elizaLogger.warn("Cloudflare Gateway is enabled but CLOUDFLARE_AI_GATEWAY_ID is not set"); return undefined; } @@ -320,7 +283,7 @@ function getCloudflareGatewayBaseURL( provider, baseURL, accountId: cloudflareAccountId, - gatewayId: cloudflareGatewayId, + gatewayId: cloudflareGatewayId }); return baseURL; @@ -410,13 +373,9 @@ export async function generateText({ hasRuntime: !!runtime, runtimeSettings: { CLOUDFLARE_GW_ENABLED: runtime.getSetting("CLOUDFLARE_GW_ENABLED"), - CLOUDFLARE_AI_ACCOUNT_ID: runtime.getSetting( - "CLOUDFLARE_AI_ACCOUNT_ID" - ), - CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting( - "CLOUDFLARE_AI_GATEWAY_ID" - ), - }, + CLOUDFLARE_AI_ACCOUNT_ID: runtime.getSetting("CLOUDFLARE_AI_ACCOUNT_ID"), + CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting("CLOUDFLARE_AI_GATEWAY_ID") + } }); const endpoint = @@ -536,11 +495,8 @@ export async function generateText({ case ModelProviderName.TOGETHER: case ModelProviderName.NINETEEN_AI: case ModelProviderName.AKASH_CHAT_API: { - elizaLogger.debug( - "Initializing OpenAI model with Cloudflare check" - ); - const baseURL = - getCloudflareGatewayBaseURL(runtime, "openai") || endpoint; + elizaLogger.debug("Initializing OpenAI model with Cloudflare check"); + const baseURL = getCloudflareGatewayBaseURL(runtime, 'openai') || endpoint; //elizaLogger.debug("OpenAI baseURL result:", { baseURL }); const openai = createOpenAI({ @@ -610,26 +566,17 @@ export async function generateText({ }, }); - let system_prompt = - runtime.character.system ?? - settings.SYSTEM_PROMPT ?? - undefined; + let system_prompt = runtime.character.system ?? settings.SYSTEM_PROMPT ?? undefined; try { - const on_chain_system_prompt = - await getOnChainEternalAISystemPrompt(runtime); + const on_chain_system_prompt = await getOnChainEternalAISystemPrompt(runtime); if (!on_chain_system_prompt) { - elizaLogger.error( - new Error("invalid on_chain_system_prompt") - ); + elizaLogger.error(new Error("invalid on_chain_system_prompt")) } else { - system_prompt = on_chain_system_prompt; - elizaLogger.info( - "new on-chain system prompt", - system_prompt - ); + system_prompt = on_chain_system_prompt + elizaLogger.info("new on-chain system prompt", system_prompt) } } catch (e) { - elizaLogger.error(e); + elizaLogger.error(e) } const { text: openaiResponse } = await aiGenerateText({ @@ -697,19 +644,11 @@ export async function generateText({ } case ModelProviderName.ANTHROPIC: { - elizaLogger.debug( - "Initializing Anthropic model with Cloudflare check" - ); - const baseURL = - getCloudflareGatewayBaseURL(runtime, "anthropic") || - "https://api.anthropic.com/v1"; + elizaLogger.debug("Initializing Anthropic model with Cloudflare check"); + const baseURL = getCloudflareGatewayBaseURL(runtime, 'anthropic') || "https://api.anthropic.com/v1"; elizaLogger.debug("Anthropic baseURL result:", { baseURL }); - const anthropic = createAnthropic({ - apiKey, - baseURL, - fetch: runtime.fetch, - }); + const anthropic = createAnthropic({ apiKey, baseURL, fetch: runtime.fetch }); const { text: anthropicResponse } = await aiGenerateText({ model: anthropic.languageModel(model), prompt: context, @@ -797,16 +736,10 @@ export async function generateText({ } case ModelProviderName.GROQ: { - elizaLogger.debug( - "Initializing Groq model with Cloudflare check" - ); - const baseURL = getCloudflareGatewayBaseURL(runtime, "groq"); + elizaLogger.debug("Initializing Groq model with Cloudflare check"); + const baseURL = getCloudflareGatewayBaseURL(runtime, 'groq'); elizaLogger.debug("Groq baseURL result:", { baseURL }); - const groq = createGroq({ - apiKey, - fetch: runtime.fetch, - baseURL, - }); + const groq = createGroq({ apiKey, fetch: runtime.fetch, baseURL }); const { text: groqResponse } = await aiGenerateText({ model: groq.languageModel(model), @@ -2118,9 +2051,7 @@ async function handleOpenAI({ provider: _provider, runtime, }: ProviderOptions): Promise> { - const baseURL = - getCloudflareGatewayBaseURL(runtime, "openai") || - models.openai.endpoint; + const baseURL = getCloudflareGatewayBaseURL(runtime, 'openai') || models.openai.endpoint; const openai = createOpenAI({ apiKey, baseURL }); return await aiGenerateObject({ model: openai.languageModel(model), @@ -2149,7 +2080,7 @@ async function handleAnthropic({ runtime, }: ProviderOptions): Promise> { elizaLogger.debug("Handling Anthropic request with Cloudflare check"); - const baseURL = getCloudflareGatewayBaseURL(runtime, "anthropic"); + const baseURL = getCloudflareGatewayBaseURL(runtime, 'anthropic'); elizaLogger.debug("Anthropic handleAnthropic baseURL:", { baseURL }); const anthropic = createAnthropic({ apiKey, baseURL }); @@ -2206,7 +2137,7 @@ async function handleGroq({ runtime, }: ProviderOptions): Promise> { elizaLogger.debug("Handling Groq request with Cloudflare check"); - const baseURL = getCloudflareGatewayBaseURL(runtime, "groq"); + const baseURL = getCloudflareGatewayBaseURL(runtime, 'groq'); elizaLogger.debug("Groq handleGroq baseURL:", { baseURL }); const groq = createGroq({ apiKey, baseURL }); @@ -2557,4 +2488,4 @@ export async function generateTweetActions({ await new Promise((resolve) => setTimeout(resolve, retryDelay)); retryDelay *= 2; } -} +} \ No newline at end of file From 3c04b92cb2f4ffaf540c07ef324146222055aa62 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:50:03 +0000 Subject: [PATCH 19/21] refactor: remove Atoma model generation function from generation.ts - Deleted the handleAtoma function, which was responsible for generating objects for Atoma models. - This change simplifies the codebase by removing unused functionality, improving maintainability. --- packages/core/src/generation.ts | 124 -------------------------------- 1 file changed, 124 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index e4d1fb6577f..84d5651a38c 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -2286,130 +2286,6 @@ async function handleOllama({ }); } -/** - * Handles object generation for Atoma models. - * - * @param {ProviderOptions} options - Options specific to Atoma. - * @returns {Promise>} - A promise that resolves to generated objects. - */ -async function handleAtoma({ - model, - apiKey, - schema, - schemaName: _schemaName, - schemaDescription: _schemaDescription, - mode: _mode, - modelOptions: _modelOptions, - context, - runtime: _runtime, - provider: _provider, - modelClass: _modelClass, -}: ProviderOptions): Promise> { - const atomaSDK = new AtomaSDK({ - bearerAuth: apiKey, - }); - - try { - const result = await atomaSDK.chat.create({ - messages: [ - { - content: context, - role: "user", - }, - ], - model: model, - }); - - const completion = result.choices[0].message.content; - - if (schema) { - // For schema-based generation, we'll parse the completion as JSON - // and validate it against the schema - const parsedCompletion = JSON.parse(completion); - const validatedObject = schema.parse(parsedCompletion); - - return { - object: validatedObject, - finishReason: (result.choices[0].finishReason ?? "stop") as - | "stop" - | "length" - | "error" - | "tool-calls", - usage: { - promptTokens: result.usage?.promptTokens ?? 0, - completionTokens: result.usage?.completionTokens ?? 0, - totalTokens: result.usage?.totalTokens ?? 0, - }, - warnings: undefined, - request: {}, - response: { - id: result.id, - timestamp: new Date(result.created * 1000), // Convert Unix timestamp to Date - modelId: result.model, - }, - logprobs: undefined, - experimental_providerMetadata: result.systemFingerprint - ? { - metadata: { - systemFingerprint: result.systemFingerprint, - }, - } - : undefined, - toJsonResponse(init?: ResponseInit) { - return new Response( - JSON.stringify({ object: validatedObject }), - { - ...init, - headers: { - ...init?.headers, - "content-type": - "application/json; charset=utf-8", - }, - } - ); - }, - }; - } - - return { - object: completion, - finishReason: (result.choices[0].finishReason ?? "stop") as - | "stop" - | "length" - | "error" - | "tool-calls", - usage: { - promptTokens: result.usage?.promptTokens ?? 0, - completionTokens: result.usage?.completionTokens ?? 0, - totalTokens: result.usage?.totalTokens ?? 0, - }, - warnings: undefined, - request: {}, - response: { - id: result.id, - timestamp: new Date(result.created * 1000), // Convert Unix timestamp to Date - modelId: result.model, - }, - logprobs: undefined, - experimental_providerMetadata: result.systemFingerprint - ? { metadata: { systemFingerprint: result.systemFingerprint } } - : undefined, - toJsonResponse(init?: ResponseInit) { - return new Response(JSON.stringify({ object: completion }), { - ...init, - headers: { - ...init?.headers, - "content-type": "application/json; charset=utf-8", - }, - }); - }, - }; - } catch (error) { - console.error("Error in Atoma handler:", error); - throw error; - } -} - /** * Handles object generation for DeepSeek models. * From 169727006419d65fb03f92ee5df7c6edd7cc4ed6 Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 00:52:27 +0000 Subject: [PATCH 20/21] chore: revert deps --- packages/core/package.json | 1 - pnpm-lock.yaml | 15 +-------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 3cb99a2070d..1598b4a6487 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -75,7 +75,6 @@ "@types/uuid": "10.0.0", "ai": "3.4.33", "anthropic-vertex-ai": "1.0.2", - "atoma-sdk": "github:atoma-network/atoma-sdk-typescript", "fastembed": "1.14.1", "fastestsmallesttextencoderdecoder": "1.0.22", "gaxios": "6.7.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6cfe465ab6e..3a00dcdda3d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1045,9 +1045,6 @@ importers: anthropic-vertex-ai: specifier: 1.0.2 version: 1.0.2(encoding@0.1.13)(zod@3.23.8) - atoma-sdk: - specifier: github:atoma-network/atoma-sdk-typescript - version: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1(zod@3.23.8) fastembed: specifier: 1.14.1 version: 1.14.1 @@ -11304,12 +11301,6 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true - atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1: - resolution: {tarball: https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1} - version: 0.1.0 - peerDependencies: - zod: '>= 3' - atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -36255,10 +36246,6 @@ snapshots: atob@2.1.2: {} - atoma-sdk@https://codeload.github.com/atoma-network/atoma-sdk-typescript/tar.gz/328fef6da9d297a013d0fd641355d19e0f9babd1(zod@3.23.8): - dependencies: - zod: 3.23.8 - atomic-sleep@1.0.0: {} autocomplete.js@0.37.1: @@ -51859,4 +51846,4 @@ snapshots: zwitch@1.0.5: {} - zwitch@2.0.4: {} + zwitch@2.0.4: {} \ No newline at end of file From c3f861765ad28cc5db5d6c1854b03b6be043dcec Mon Sep 17 00:00:00 2001 From: francis2tm Date: Thu, 16 Jan 2025 01:01:25 +0000 Subject: [PATCH 21/21] chore: remove atoma-sdk --- packages/core/src/generation.ts | 1 - pnpm-lock.yaml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 84d5651a38c..75fd9729359 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -53,7 +53,6 @@ import { fal } from "@fal-ai/client"; import BigNumber from "bignumber.js"; import {createPublicClient, http} from "viem"; -import { AtomaSDK } from "atoma-sdk"; type Tool = CoreTool; type StepResult = AIStepResult; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a00dcdda3d..0cd62964e02 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51846,4 +51846,4 @@ snapshots: zwitch@1.0.5: {} - zwitch@2.0.4: {} \ No newline at end of file + zwitch@2.0.4: {}