@elizaos/adapter-supabase
Advanced tools
Comparing version 0.1.7 to 0.1.8
import { SupabaseClient } from '@supabase/supabase-js'; | ||
import { DatabaseAdapter, UUID, Participant, Memory, Account, Actor, GoalStatus, Goal, Relationship } from '@elizaos/core'; | ||
import { DatabaseAdapter, UUID, Participant, Memory, Account, Actor, GoalStatus, Goal, Relationship, RAGKnowledgeItem } from '@elizaos/core'; | ||
@@ -104,4 +104,33 @@ declare class SupabaseDatabaseAdapter extends DatabaseAdapter { | ||
}): Promise<Relationship[]>; | ||
getCache(params: { | ||
key: string; | ||
agentId: UUID; | ||
}): Promise<string | undefined>; | ||
setCache(params: { | ||
key: string; | ||
agentId: UUID; | ||
value: string; | ||
}): Promise<boolean>; | ||
deleteCache(params: { | ||
key: string; | ||
agentId: UUID; | ||
}): Promise<boolean>; | ||
getKnowledge(params: { | ||
id?: UUID; | ||
agentId: UUID; | ||
limit?: number; | ||
query?: string; | ||
}): Promise<RAGKnowledgeItem[]>; | ||
searchKnowledge(params: { | ||
agentId: UUID; | ||
embedding: Float32Array; | ||
match_threshold: number; | ||
match_count: number; | ||
searchText?: string; | ||
}): Promise<RAGKnowledgeItem[]>; | ||
createKnowledge(knowledge: RAGKnowledgeItem): Promise<void>; | ||
removeKnowledge(id: UUID): Promise<void>; | ||
clearKnowledge(agentId: UUID, shared?: boolean): Promise<void>; | ||
} | ||
export { SupabaseDatabaseAdapter }; |
// src/index.ts | ||
import { createClient } from "@supabase/supabase-js"; | ||
import { | ||
elizaLogger | ||
} from "@elizaos/core"; | ||
import { DatabaseAdapter } from "@elizaos/core"; | ||
@@ -7,5 +10,6 @@ import { v4 as uuid } from "uuid"; | ||
async getRoom(roomId) { | ||
const { data, error } = await this.supabase.from("rooms").select("id").eq("id", roomId).single(); | ||
const { data, error } = await this.supabase.from("rooms").select("id").eq("id", roomId).maybeSingle(); | ||
if (error) { | ||
throw new Error(`Error getting room: ${error.message}`); | ||
elizaLogger.error(`Error getting room: ${error.message}`); | ||
return null; | ||
} | ||
@@ -26,3 +30,3 @@ return data ? data.id : null; | ||
if (error) { | ||
console.error("Error getting participant user state:", error); | ||
elizaLogger.error("Error getting participant user state:", error); | ||
return null; | ||
@@ -35,3 +39,3 @@ } | ||
if (error) { | ||
console.error("Error setting participant user state:", error); | ||
elizaLogger.error("Error setting participant user state:", error); | ||
throw new Error("Failed to set participant user state"); | ||
@@ -65,3 +69,3 @@ } | ||
if (error) { | ||
console.error("Error retrieving memories by room IDs:", error); | ||
elizaLogger.error("Error retrieving memories by room IDs:", error); | ||
return []; | ||
@@ -84,3 +88,3 @@ } | ||
if (error) { | ||
console.error(error.message); | ||
elizaLogger.error(error.message); | ||
return false; | ||
@@ -100,3 +104,3 @@ } | ||
if (response.error) { | ||
console.error("Error!" + response.error); | ||
elizaLogger.error("Error!" + response.error); | ||
return []; | ||
@@ -117,3 +121,3 @@ } | ||
} catch (error) { | ||
console.error("error", error); | ||
elizaLogger.error("error", error); | ||
throw error; | ||
@@ -156,3 +160,3 @@ } | ||
if (error) { | ||
console.error("Error inserting log:", error); | ||
elizaLogger.error("Error inserting log:", error); | ||
throw new Error(error.message); | ||
@@ -208,3 +212,3 @@ } | ||
if (error) { | ||
console.error("Error retrieving memory by ID:", error); | ||
elizaLogger.error("Error retrieving memory by ID:", error); | ||
return null; | ||
@@ -353,3 +357,3 @@ } | ||
if (error) { | ||
console.error(`Error adding participant: ${error.message}`); | ||
elizaLogger.error(`Error adding participant: ${error.message}`); | ||
return false; | ||
@@ -362,3 +366,3 @@ } | ||
if (error) { | ||
console.error(`Error removing participant: ${error.message}`); | ||
elizaLogger.error(`Error removing participant: ${error.message}`); | ||
return false; | ||
@@ -422,2 +426,149 @@ } | ||
} | ||
async getCache(params) { | ||
const { data, error } = await this.supabase.from("cache").select("value").eq("key", params.key).eq("agentId", params.agentId).single(); | ||
if (error) { | ||
elizaLogger.error("Error fetching cache:", error); | ||
return void 0; | ||
} | ||
return data?.value; | ||
} | ||
async setCache(params) { | ||
const { error } = await this.supabase.from("cache").upsert({ | ||
key: params.key, | ||
agentId: params.agentId, | ||
value: params.value, | ||
createdAt: /* @__PURE__ */ new Date() | ||
}); | ||
if (error) { | ||
elizaLogger.error("Error setting cache:", error); | ||
return false; | ||
} | ||
return true; | ||
} | ||
async deleteCache(params) { | ||
try { | ||
const { error } = await this.supabase.from("cache").delete().eq("key", params.key).eq("agentId", params.agentId); | ||
if (error) { | ||
elizaLogger.error("Error deleting cache", { | ||
error: error.message, | ||
key: params.key, | ||
agentId: params.agentId | ||
}); | ||
return false; | ||
} | ||
return true; | ||
} catch (error) { | ||
elizaLogger.error( | ||
"Database connection error in deleteCache", | ||
error instanceof Error ? error.message : String(error) | ||
); | ||
return false; | ||
} | ||
} | ||
async getKnowledge(params) { | ||
let query = this.supabase.from("knowledge").select("*").or(`agentId.eq.${params.agentId},isShared.eq.true`); | ||
if (params.id) { | ||
query = query.eq("id", params.id); | ||
} | ||
if (params.limit) { | ||
query = query.limit(params.limit); | ||
} | ||
const { data, error } = await query; | ||
if (error) { | ||
throw new Error(`Error getting knowledge: ${error.message}`); | ||
} | ||
return data.map((row) => ({ | ||
id: row.id, | ||
agentId: row.agentId, | ||
content: typeof row.content === "string" ? JSON.parse(row.content) : row.content, | ||
embedding: row.embedding ? new Float32Array(row.embedding) : void 0, | ||
createdAt: new Date(row.createdAt).getTime() | ||
})); | ||
} | ||
async searchKnowledge(params) { | ||
const cacheKey = `embedding_${params.agentId}_${params.searchText}`; | ||
const cachedResult = await this.getCache({ | ||
key: cacheKey, | ||
agentId: params.agentId | ||
}); | ||
if (cachedResult) { | ||
return JSON.parse(cachedResult); | ||
} | ||
const embedding = Array.from(params.embedding); | ||
const { data, error } = await this.supabase.rpc("search_knowledge", { | ||
query_embedding: embedding, | ||
query_agent_id: params.agentId, | ||
match_threshold: params.match_threshold, | ||
match_count: params.match_count, | ||
search_text: params.searchText || "" | ||
}); | ||
if (error) { | ||
throw new Error(`Error searching knowledge: ${error.message}`); | ||
} | ||
const results = data.map((row) => ({ | ||
id: row.id, | ||
agentId: row.agentId, | ||
content: typeof row.content === "string" ? JSON.parse(row.content) : row.content, | ||
embedding: row.embedding ? new Float32Array(row.embedding) : void 0, | ||
createdAt: new Date(row.createdAt).getTime(), | ||
similarity: row.similarity | ||
})); | ||
await this.setCache({ | ||
key: cacheKey, | ||
agentId: params.agentId, | ||
value: JSON.stringify(results) | ||
}); | ||
return results; | ||
} | ||
async createKnowledge(knowledge) { | ||
try { | ||
const metadata = knowledge.content.metadata || {}; | ||
const { error } = await this.supabase.from("knowledge").insert({ | ||
id: knowledge.id, | ||
agentId: metadata.isShared ? null : knowledge.agentId, | ||
content: knowledge.content, | ||
embedding: knowledge.embedding ? Array.from(knowledge.embedding) : null, | ||
createdAt: knowledge.createdAt || /* @__PURE__ */ new Date(), | ||
isMain: metadata.isMain || false, | ||
originalId: metadata.originalId || null, | ||
chunkIndex: metadata.chunkIndex || null, | ||
isShared: metadata.isShared || false | ||
}); | ||
if (error) { | ||
if (metadata.isShared && error.code === "23505") { | ||
elizaLogger.info(`Shared knowledge ${knowledge.id} already exists, skipping`); | ||
return; | ||
} | ||
throw error; | ||
} | ||
} catch (error) { | ||
elizaLogger.error(`Error creating knowledge ${knowledge.id}:`, { | ||
error, | ||
embeddingLength: knowledge.embedding?.length, | ||
content: knowledge.content | ||
}); | ||
throw error; | ||
} | ||
} | ||
async removeKnowledge(id) { | ||
const { error } = await this.supabase.from("knowledge").delete().eq("id", id); | ||
if (error) { | ||
throw new Error(`Error removing knowledge: ${error.message}`); | ||
} | ||
} | ||
async clearKnowledge(agentId, shared) { | ||
if (shared) { | ||
const { error } = await this.supabase.from("knowledge").delete().filter("agentId", "eq", agentId).filter("isShared", "eq", true); | ||
if (error) { | ||
elizaLogger.error(`Error clearing shared knowledge for agent ${agentId}:`, error); | ||
throw error; | ||
} | ||
} else { | ||
const { error } = await this.supabase.from("knowledge").delete().eq("agentId", agentId); | ||
if (error) { | ||
elizaLogger.error(`Error clearing knowledge for agent ${agentId}:`, error); | ||
throw error; | ||
} | ||
} | ||
} | ||
}; | ||
@@ -424,0 +575,0 @@ export { |
{ | ||
"name": "@elizaos/adapter-supabase", | ||
"version": "0.1.7", | ||
"version": "0.1.8+build.1", | ||
"type": "module", | ||
@@ -22,3 +22,3 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"@elizaos/core": "0.1.7", | ||
"@elizaos/core": "0.1.8+build.1", | ||
"@supabase/supabase-js": "2.46.2" | ||
@@ -37,3 +37,3 @@ }, | ||
}, | ||
"gitHead": "e15421524dde4f2778b529effb212eebea8c98b6" | ||
"gitHead": "d55c86c961960b4b34528c358eb34b2ff4b34d87" | ||
} |
Sorry, the diff of this file is not supported yet
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
66474
698
1
+ Added@types/node@22.13.1(transitive)
+ Addedundici-types@6.20.0(transitive)
- Removed@ai-sdk/anthropic@0.0.56(transitive)
- Removed@ai-sdk/google@0.0.55(transitive)
- Removed@ai-sdk/google-vertex@0.0.43(transitive)
- Removed@ai-sdk/groq@0.0.3(transitive)
- Removed@ai-sdk/openai@1.0.5(transitive)
- Removed@ai-sdk/provider@0.0.240.0.261.0.1(transitive)
- Removed@ai-sdk/provider-utils@1.0.201.0.222.0.2(transitive)
- Removed@ai-sdk/react@0.0.70(transitive)
- Removed@ai-sdk/solid@0.0.54(transitive)
- Removed@ai-sdk/svelte@0.0.57(transitive)
- Removed@ai-sdk/ui-utils@0.0.50(transitive)
- Removed@ai-sdk/vue@0.0.59(transitive)
- Removed@ampproject/remapping@2.3.0(transitive)
- Removed@anthropic-ai/sdk@0.30.1(transitive)
- Removed@anush008/tokenizers@0.0.0(transitive)
- Removed@anush008/tokenizers-darwin-universal@0.0.0(transitive)
- Removed@anush008/tokenizers-linux-x64-gnu@0.0.0(transitive)
- Removed@anush008/tokenizers-win32-x64-msvc@0.0.0(transitive)
- Removed@babel/helper-string-parser@7.25.9(transitive)
- Removed@babel/helper-validator-identifier@7.25.9(transitive)
- Removed@babel/parser@7.26.8(transitive)
- Removed@babel/types@7.26.8(transitive)
- Removed@cfworker/json-schema@4.1.1(transitive)
- Removed@elizaos/core@0.1.7(transitive)
- Removed@fal-ai/client@1.2.0(transitive)
- Removed@google-cloud/vertexai@1.9.3(transitive)
- Removed@isaacs/cliui@8.0.2(transitive)
- Removed@jridgewell/gen-mapping@0.3.8(transitive)
- Removed@jridgewell/resolve-uri@3.1.2(transitive)
- Removed@jridgewell/set-array@1.2.1(transitive)
- Removed@jridgewell/sourcemap-codec@1.5.0(transitive)
- Removed@jridgewell/trace-mapping@0.3.25(transitive)
- Removed@langchain/core@0.3.39(transitive)
- Removed@langchain/openai@0.3.17(transitive)
- Removed@langchain/textsplitters@0.1.0(transitive)
- Removed@msgpack/msgpack@3.0.0(transitive)
- Removed@opentelemetry/api@1.9.0(transitive)
- Removed@types/diff-match-patch@1.0.36(transitive)
- Removed@types/estree@1.0.6(transitive)
- Removed@types/node@18.19.75(transitive)
- Removed@types/node-fetch@2.6.12(transitive)
- Removed@types/retry@0.12.0(transitive)
- Removed@types/uuid@10.0.0(transitive)
- Removed@vue/compiler-core@3.5.13(transitive)
- Removed@vue/compiler-dom@3.5.13(transitive)
- Removed@vue/compiler-sfc@3.5.13(transitive)
- Removed@vue/compiler-ssr@3.5.13(transitive)
- Removed@vue/reactivity@3.5.13(transitive)
- Removed@vue/runtime-core@3.5.13(transitive)
- Removed@vue/runtime-dom@3.5.13(transitive)
- Removed@vue/server-renderer@3.5.13(transitive)
- Removed@vue/shared@3.5.13(transitive)
- Removedabort-controller@3.0.0(transitive)
- Removedacorn@8.14.0(transitive)
- Removedacorn-typescript@1.4.13(transitive)
- Removedagent-base@7.1.3(transitive)
- Removedagentkeepalive@4.6.0(transitive)
- Removedai@3.4.33(transitive)
- Removedansi-regex@5.0.16.1.0(transitive)
- Removedansi-styles@4.3.05.2.06.2.1(transitive)
- Removedanthropic-vertex-ai@1.0.2(transitive)
- Removedargparse@2.0.1(transitive)
- Removedaria-query@5.3.2(transitive)
- Removedasynckit@0.4.0(transitive)
- Removedaxobject-query@4.1.0(transitive)
- Removedbalanced-match@1.0.2(transitive)
- Removedbase64-js@1.5.1(transitive)
- Removedbignumber.js@9.1.2(transitive)
- Removedbrace-expansion@2.0.1(transitive)
- Removedbuffer-equal-constant-time@1.0.1(transitive)
- Removedcamelcase@6.3.0(transitive)
- Removedchalk@5.4.1(transitive)
- Removedchownr@2.0.0(transitive)
- Removedclsx@2.1.1(transitive)
- Removedcolor-convert@2.0.1(transitive)
- Removedcolor-name@1.1.4(transitive)
- Removedcombined-stream@1.0.8(transitive)
- Removedcommander@10.0.1(transitive)
- Removedcross-spawn@7.0.6(transitive)
- Removedcsstype@3.1.3(transitive)
- Removeddebug@4.4.0(transitive)
- Removeddecamelize@1.2.0(transitive)
- Removeddelayed-stream@1.0.0(transitive)
- Removeddequal@2.0.3(transitive)
- Removeddiff-match-patch@1.0.5(transitive)
- Removedeastasianwidth@0.2.0(transitive)
- Removedecdsa-sig-formatter@1.0.11(transitive)
- Removedemoji-regex@8.0.09.2.2(transitive)
- Removedentities@4.5.0(transitive)
- Removedesm-env@1.2.2(transitive)
- Removedesrap@1.4.3(transitive)
- Removedestree-walker@2.0.2(transitive)
- Removedevent-target-shim@5.0.1(transitive)
- Removedeventemitter3@4.0.7(transitive)
- Removedeventsource-parser@1.1.23.0.0(transitive)
- Removedextend@3.0.2(transitive)
- Removedfastembed@1.14.1(transitive)
- Removedfastestsmallesttextencoderdecoder@1.0.22(transitive)
- Removedforeground-child@3.3.0(transitive)
- Removedform-data@4.0.1(transitive)
- Removedform-data-encoder@1.7.2(transitive)
- Removedformdata-node@4.4.1(transitive)
- Removedfs-minipass@2.1.0(transitive)
- Removedgaxios@6.7.1(transitive)
- Removedgcp-metadata@6.1.1(transitive)
- Removedglob@11.0.0(transitive)
- Removedgoogle-auth-library@9.15.1(transitive)
- Removedgoogle-logging-utils@0.0.2(transitive)
- Removedgtoken@7.1.0(transitive)
- Removedhandlebars@4.7.8(transitive)
- Removedhttps-proxy-agent@7.0.6(transitive)
- Removedhumanize-ms@1.2.1(transitive)
- Removedis-fullwidth-code-point@3.0.0(transitive)
- Removedis-reference@3.0.3(transitive)
- Removedis-stream@2.0.1(transitive)
- Removedisexe@2.0.0(transitive)
- Removedjackspeak@4.0.2(transitive)
- Removedjs-sha1@0.7.0(transitive)
- Removedjs-tiktoken@1.0.15(transitive)
- Removedjs-yaml@4.1.0(transitive)
- Removedjson-bigint@1.0.0(transitive)
- Removedjson-schema@0.4.0(transitive)
- Removedjsondiffpatch@0.6.0(transitive)
- Removedjsonpointer@5.0.1(transitive)
- Removedjwa@2.0.0(transitive)
- Removedjws@4.0.0(transitive)
- Removedlangchain@0.3.6(transitive)
- Removedlangsmith@0.2.15(transitive)
- Removedlocate-character@3.0.0(transitive)
- Removedlru-cache@11.0.2(transitive)
- Removedmagic-string@0.30.17(transitive)
- Removedmime-db@1.52.0(transitive)
- Removedmime-types@2.1.35(transitive)
- Removedminimatch@10.0.1(transitive)
- Removedminimist@1.2.8(transitive)
- Removedminipass@3.3.65.0.07.1.2(transitive)
- Removedminizlib@2.1.2(transitive)
- Removedmkdirp@1.0.4(transitive)
- Removedms@2.1.3(transitive)
- Removedmustache@4.2.0(transitive)
- Removednanoid@3.3.63.3.8(transitive)
- Removedneo-async@2.6.2(transitive)
- Removednode-domexception@1.0.0(transitive)
- Removednode-fetch@2.7.0(transitive)
- Removedollama-ai-provider@0.16.1(transitive)
- Removedonnxruntime-common@1.15.1(transitive)
- Removedonnxruntime-node@1.15.1(transitive)
- Removedopenai@4.73.04.83.0(transitive)
- Removedopenapi-types@12.1.3(transitive)
- Removedp-finally@1.0.0(transitive)
- Removedp-queue@6.6.2(transitive)
- Removedp-retry@4.6.2(transitive)
- Removedp-timeout@3.2.0(transitive)
- Removedpackage-json-from-dist@1.0.1(transitive)
- Removedpartial-json@0.1.7(transitive)
- Removedpath-key@3.1.1(transitive)
- Removedpath-scurry@2.0.0(transitive)
- Removedpicocolors@1.1.1(transitive)
- Removedpostcss@8.5.1(transitive)
- Removedprogress@2.0.3(transitive)
- Removedreact@19.0.0(transitive)
- Removedretry@0.13.1(transitive)
- Removedrobot3@0.4.1(transitive)
- Removedsafe-buffer@5.2.1(transitive)
- Removedsecure-json-parse@2.7.0(transitive)
- Removedsemver@7.7.1(transitive)
- Removedshebang-command@2.0.0(transitive)
- Removedshebang-regex@3.0.0(transitive)
- Removedsignal-exit@4.1.0(transitive)
- Removedsource-map@0.6.1(transitive)
- Removedsource-map-js@1.2.1(transitive)
- Removedsswr@2.1.0(transitive)
- Removedstring-width@4.2.35.1.2(transitive)
- Removedstrip-ansi@6.0.17.1.0(transitive)
- Removedsvelte@5.19.9(transitive)
- Removedswr@2.3.2(transitive)
- Removedswrev@4.0.0(transitive)
- Removedswrv@1.1.0(transitive)
- Removedtar@6.2.1(transitive)
- Removedthrottleit@2.1.0(transitive)
- Removedtinyld@1.3.4(transitive)
- Removedtogether-ai@0.7.0(transitive)
- Removeduglify-js@3.19.3(transitive)
- Removedundici-types@5.26.5(transitive)
- Removedunique-names-generator@4.7.1(transitive)
- Removeduse-sync-external-store@1.4.0(transitive)
- Removeduuid@10.0.011.0.39.0.1(transitive)
- Removedvue@3.5.13(transitive)
- Removedweb-streams-polyfill@4.0.0-beta.3(transitive)
- Removedwhich@2.0.2(transitive)
- Removedwordwrap@1.0.0(transitive)
- Removedwrap-ansi@7.0.08.1.0(transitive)
- Removedyallist@4.0.0(transitive)
- Removedyaml@2.7.0(transitive)
- Removedzimmerframe@1.1.2(transitive)
- Removedzod@3.23.83.24.1(transitive)
- Removedzod-to-json-schema@3.24.1(transitive)
Updated@elizaos/core@0.1.8+build.1