From 967c9270ce40da947270d57b6343ccbcba794d5f Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 14:45:44 +0200 Subject: [PATCH 01/12] feat: ability to use local embeddings model (sBERT) --- requirements.txt | 2 +- scripts/config.py | 1 + scripts/memory/base.py | 24 ++++++++++++++++++------ scripts/memory/local.py | 10 ++++++---- scripts/memory/pinecone.py | 9 ++++----- scripts/memory/redismem.py | 13 ++++++++----- 6 files changed, 38 insertions(+), 21 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3f7fd228..88278435 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,4 +17,4 @@ orjson Pillow coverage flake8 -numpy +sentence_transformers diff --git a/scripts/config.py b/scripts/config.py index 37be1b21..38cbd142 100644 --- a/scripts/config.py +++ b/scripts/config.py @@ -82,6 +82,7 @@ class Config(metaclass=Singleton): # Note that indexes must be created on db 0 in redis, this is not configurable. self.memory_backend = os.getenv("MEMORY_BACKEND", 'local') + self.memory_embeder = os.getenv("MEMORY_EMBEDER", 'ada') # Initialize the OpenAI API client openai.api_key = self.openai_api_key diff --git a/scripts/memory/base.py b/scripts/memory/base.py index 4dbf6791..e3924d7e 100644 --- a/scripts/memory/base.py +++ b/scripts/memory/base.py @@ -3,16 +3,28 @@ import abc from config import AbstractSingleton, Config import openai +try: + from sentence_transformers import SentenceTransformer +except ImportError: + SentenceTransformer = None + if cfg.memory_embeder == "sbert": + print("Error: Sentence Transformers is not installed. Please install sentence_transformers" + " to use BERT as an embeder. Defaulting to Ada.") + cfg.memory_embeder = "ada" + + cfg = Config() - -def get_ada_embedding(text): +def get_embedding(text): text = text.replace("\n", " ") - if cfg.use_azure: - return openai.Embedding.create(input=[text], engine=cfg.get_azure_deployment_id_for_model("text-embedding-ada-002"))["data"][0]["embedding"] - else: - return openai.Embedding.create(input=[text], model="text-embedding-ada-002")["data"][0]["embedding"] + if cfg.memory_embeder == "sbert": + embedding = SentenceTransformer("sentence-transformers/all-mpnet-base-v2", device="cpu").encode(text, show_progress_bar=False) + else: + embedding = openai.Embedding.create(input=[text], model="text-embedding-ada-002")["data"][0]["embedding"] + + return embedding + class MemoryProviderSingleton(AbstractSingleton): @abc.abstractmethod diff --git a/scripts/memory/local.py b/scripts/memory/local.py index b0afacf6..40a08f66 100644 --- a/scripts/memory/local.py +++ b/scripts/memory/local.py @@ -3,10 +3,12 @@ import orjson from typing import Any, List, Optional import numpy as np import os -from memory.base import MemoryProviderSingleton, get_ada_embedding +from memory.base import MemoryProviderSingleton, get_embedding +from config import Config +cfg = Config() -EMBED_DIM = 1536 +EMBED_DIM = 1536 if cfg.memory_embeder == "ada" else 768 SAVE_OPTIONS = orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_SERIALIZE_DATACLASS @@ -58,7 +60,7 @@ class LocalCache(MemoryProviderSingleton): return "" self.data.texts.append(text) - embedding = get_ada_embedding(text) + embedding = get_embedding(text) vector = np.array(embedding).astype(np.float32) vector = vector[np.newaxis, :] @@ -109,7 +111,7 @@ class LocalCache(MemoryProviderSingleton): Returns: List[str] """ - embedding = get_ada_embedding(text) + embedding = get_embedding(text) scores = np.dot(self.data.embeddings, embedding) diff --git a/scripts/memory/pinecone.py b/scripts/memory/pinecone.py index 20a905b3..b3aab33a 100644 --- a/scripts/memory/pinecone.py +++ b/scripts/memory/pinecone.py @@ -1,17 +1,16 @@ import pinecone -from memory.base import MemoryProviderSingleton, get_ada_embedding +from memory.base import MemoryProviderSingleton, get_embedding from logger import logger from colorama import Fore, Style - class PineconeMemory(MemoryProviderSingleton): def __init__(self, cfg): pinecone_api_key = cfg.pinecone_api_key pinecone_region = cfg.pinecone_region pinecone.init(api_key=pinecone_api_key, environment=pinecone_region) - dimension = 1536 + dimension = 1536 if cfg.memory_embeder == "ada" else 768 metric = "cosine" pod_type = "p1" table_name = "auto-gpt" @@ -33,7 +32,7 @@ class PineconeMemory(MemoryProviderSingleton): self.index = pinecone.Index(table_name) def add(self, data): - vector = get_ada_embedding(data) + vector = get_embedding(data) # no metadata here. We may wish to change that long term. resp = self.index.upsert([(str(self.vec_num), vector, {"raw_text": data})]) _text = f"Inserting data into memory at index: {self.vec_num}:\n data: {data}" @@ -53,7 +52,7 @@ class PineconeMemory(MemoryProviderSingleton): :param data: The data to compare to. :param num_relevant: The number of relevant data to return. Defaults to 5 """ - query_embedding = get_ada_embedding(data) + query_embedding = get_embedding(data) results = self.index.query(query_embedding, top_k=num_relevant, include_metadata=True) sorted_results = sorted(results.matches, key=lambda x: x.score) return [str(item['metadata']["raw_text"]) for item in sorted_results] diff --git a/scripts/memory/redismem.py b/scripts/memory/redismem.py index 49045dd8..8f325835 100644 --- a/scripts/memory/redismem.py +++ b/scripts/memory/redismem.py @@ -6,10 +6,14 @@ from redis.commands.search.query import Query from redis.commands.search.indexDefinition import IndexDefinition, IndexType import numpy as np -from memory.base import MemoryProviderSingleton, get_ada_embedding +from memory.base import MemoryProviderSingleton, get_embedding from logger import logger from colorama import Fore, Style +from config import Config +cfg = Config() + +EMBED_DIM = 1536 if cfg.memory_embeder == "ada" else 768 SCHEMA = [ TextField("data"), @@ -18,7 +22,7 @@ SCHEMA = [ "HNSW", { "TYPE": "FLOAT32", - "DIM": 1536, + "DIM": EMBED_DIM, "DISTANCE_METRIC": "COSINE" } ), @@ -38,7 +42,6 @@ class RedisMemory(MemoryProviderSingleton): redis_host = cfg.redis_host redis_port = cfg.redis_port redis_password = cfg.redis_password - self.dimension = 1536 self.redis = redis.Redis( host=redis_host, port=redis_port, @@ -83,7 +86,7 @@ class RedisMemory(MemoryProviderSingleton): """ if 'Command Error:' in data: return "" - vector = get_ada_embedding(data) + vector = get_embedding(data) vector = np.array(vector).astype(np.float32).tobytes() data_dict = { b"data": data, @@ -131,7 +134,7 @@ class RedisMemory(MemoryProviderSingleton): Returns: A list of the most relevant data. """ - query_embedding = get_ada_embedding(data) + query_embedding = get_embedding(data) base_query = f"*=>[KNN {num_relevant} @embedding $vector AS vector_score]" query = Query(base_query).return_fields( "data", From 64db4eef395364def9d5fdac5dce8d9fe60507f6 Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 14:47:13 +0200 Subject: [PATCH 02/12] fix: added back numpy to requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 88278435..47534828 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,3 +18,4 @@ Pillow coverage flake8 sentence_transformers +numpy \ No newline at end of file From b042376db419da8158a0d16e90471c38b58ac2df Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 14:53:18 +0200 Subject: [PATCH 03/12] docs: added comments --- scripts/memory/base.py | 2 ++ scripts/memory/local.py | 2 ++ scripts/memory/pinecone.py | 1 + scripts/memory/redismem.py | 2 ++ 4 files changed, 7 insertions(+) diff --git a/scripts/memory/base.py b/scripts/memory/base.py index e3924d7e..a0b3f25f 100644 --- a/scripts/memory/base.py +++ b/scripts/memory/base.py @@ -3,6 +3,7 @@ import abc from config import AbstractSingleton, Config import openai +# try to import sentence transformers, if it fails, default to ada try: from sentence_transformers import SentenceTransformer except ImportError: @@ -18,6 +19,7 @@ cfg = Config() def get_embedding(text): text = text.replace("\n", " ") + # use the embeder specified in the config if cfg.memory_embeder == "sbert": embedding = SentenceTransformer("sentence-transformers/all-mpnet-base-v2", device="cpu").encode(text, show_progress_bar=False) else: diff --git a/scripts/memory/local.py b/scripts/memory/local.py index 40a08f66..728723cb 100644 --- a/scripts/memory/local.py +++ b/scripts/memory/local.py @@ -6,8 +6,10 @@ import os from memory.base import MemoryProviderSingleton, get_embedding from config import Config +# TODO: get the embeddings dimension without importing config cfg = Config() +# set the embedding dimension based on the embeder EMBED_DIM = 1536 if cfg.memory_embeder == "ada" else 768 SAVE_OPTIONS = orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_SERIALIZE_DATACLASS diff --git a/scripts/memory/pinecone.py b/scripts/memory/pinecone.py index b3aab33a..e8a71316 100644 --- a/scripts/memory/pinecone.py +++ b/scripts/memory/pinecone.py @@ -10,6 +10,7 @@ class PineconeMemory(MemoryProviderSingleton): pinecone_api_key = cfg.pinecone_api_key pinecone_region = cfg.pinecone_region pinecone.init(api_key=pinecone_api_key, environment=pinecone_region) + # set the embedding dimension based on the embeder dimension = 1536 if cfg.memory_embeder == "ada" else 768 metric = "cosine" pod_type = "p1" diff --git a/scripts/memory/redismem.py b/scripts/memory/redismem.py index 8f325835..3da52827 100644 --- a/scripts/memory/redismem.py +++ b/scripts/memory/redismem.py @@ -11,8 +11,10 @@ from logger import logger from colorama import Fore, Style from config import Config +# TODO: get the embeddings dimension without importing config cfg = Config() +# set the embedding dimension based on the embeder EMBED_DIM = 1536 if cfg.memory_embeder == "ada" else 768 SCHEMA = [ From fb6684450c2dedba12c598642def45e4df006b62 Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 14:56:58 +0200 Subject: [PATCH 04/12] test: added tests for memory embeder --- tests/embeder_test.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tests/embeder_test.py diff --git a/tests/embeder_test.py b/tests/embeder_test.py new file mode 100644 index 00000000..214b9110 --- /dev/null +++ b/tests/embeder_test.py @@ -0,0 +1,33 @@ +import os +import sys +# Probably a better way: +sys.path.append(os.path.abspath('../scripts')) +from memory.base import get_embedding + +def MockConfig(): + return type('MockConfig', (object,), { + 'debug_mode': False, + 'continuous_mode': False, + 'speak_mode': False, + 'memory_embeder': 'sbert' + }) + +class TestMemoryEmbeder(unittest.TestCase): + def setUp(self): + self.cfg = MockConfig() + + def test_ada(self): + self.cfg.memory_embeder = "ada" + text = "Sample text" + result = get_embedding(text) + self.assertEqual(result.shape, (1536,)) + + def test_sbert(self): + self.cfg.memory_embeder = "sbert" + text = "Sample text" + result = get_embedding(text) + self.assertEqual(result.shape, (768,)) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file From 653904a3591cc47a099249203c088926ef66cf40 Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 15:07:13 +0200 Subject: [PATCH 05/12] chore: added memory embeder option to dotenv template --- .env.template | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.env.template b/.env.template index 474b2727..3ddb6660 100644 --- a/.env.template +++ b/.env.template @@ -50,6 +50,8 @@ SMART_TOKEN_LIMIT=8000 # MEMORY_BACKEND - Memory backend type (Default: local) MEMORY_BACKEND=local +# MEMORY_EMBEDER - Embeddings model to use (Default: ada) +MEMORY_EMBEDER=ada ### PINECONE # PINECONE_API_KEY - Pinecone API Key (Example: my-pinecone-api-key) From 121f4e606c5080b87fec384d07e1b104f00456a4 Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 17:17:10 +0200 Subject: [PATCH 06/12] fix: more modular approach for embedding dimension --- scripts/memory/base.py | 6 ++++++ scripts/memory/local.py | 7 +------ scripts/memory/pinecone.py | 6 ++---- scripts/memory/redismem.py | 9 +-------- 4 files changed, 10 insertions(+), 18 deletions(-) diff --git a/scripts/memory/base.py b/scripts/memory/base.py index a0b3f25f..c3fec628 100644 --- a/scripts/memory/base.py +++ b/scripts/memory/base.py @@ -15,6 +15,12 @@ except ImportError: cfg = Config() +# Dimension of embeddings encoded by models +EMBED_DIM = { + "ada": 1536, + "sbert": 768 +}.get(cfg.memory_embeder, default=1536) + def get_embedding(text): text = text.replace("\n", " ") diff --git a/scripts/memory/local.py b/scripts/memory/local.py index 728723cb..e699a891 100644 --- a/scripts/memory/local.py +++ b/scripts/memory/local.py @@ -3,14 +3,9 @@ import orjson from typing import Any, List, Optional import numpy as np import os -from memory.base import MemoryProviderSingleton, get_embedding -from config import Config +from memory.base import MemoryProviderSingleton, get_embedding, EMBED_DIM -# TODO: get the embeddings dimension without importing config -cfg = Config() -# set the embedding dimension based on the embeder -EMBED_DIM = 1536 if cfg.memory_embeder == "ada" else 768 SAVE_OPTIONS = orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_SERIALIZE_DATACLASS diff --git a/scripts/memory/pinecone.py b/scripts/memory/pinecone.py index e8a71316..1f95bb23 100644 --- a/scripts/memory/pinecone.py +++ b/scripts/memory/pinecone.py @@ -1,7 +1,7 @@ import pinecone -from memory.base import MemoryProviderSingleton, get_embedding +from memory.base import MemoryProviderSingleton, get_embedding, EMBED_DIM from logger import logger from colorama import Fore, Style @@ -10,8 +10,6 @@ class PineconeMemory(MemoryProviderSingleton): pinecone_api_key = cfg.pinecone_api_key pinecone_region = cfg.pinecone_region pinecone.init(api_key=pinecone_api_key, environment=pinecone_region) - # set the embedding dimension based on the embeder - dimension = 1536 if cfg.memory_embeder == "ada" else 768 metric = "cosine" pod_type = "p1" table_name = "auto-gpt" @@ -29,7 +27,7 @@ class PineconeMemory(MemoryProviderSingleton): exit(1) if table_name not in pinecone.list_indexes(): - pinecone.create_index(table_name, dimension=dimension, metric=metric, pod_type=pod_type) + pinecone.create_index(table_name, dimension=EMBED_DIM, metric=metric, pod_type=pod_type) self.index = pinecone.Index(table_name) def add(self, data): diff --git a/scripts/memory/redismem.py b/scripts/memory/redismem.py index 3da52827..43e8a33b 100644 --- a/scripts/memory/redismem.py +++ b/scripts/memory/redismem.py @@ -6,16 +6,9 @@ from redis.commands.search.query import Query from redis.commands.search.indexDefinition import IndexDefinition, IndexType import numpy as np -from memory.base import MemoryProviderSingleton, get_embedding +from memory.base import MemoryProviderSingleton, get_embedding, EMBED_DIM from logger import logger from colorama import Fore, Style -from config import Config - -# TODO: get the embeddings dimension without importing config -cfg = Config() - -# set the embedding dimension based on the embeder -EMBED_DIM = 1536 if cfg.memory_embeder == "ada" else 768 SCHEMA = [ TextField("data"), From 2a147acd3f32882b0069e72df7730abb3f7282f8 Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 17:58:29 +0200 Subject: [PATCH 07/12] refactor: fix typo Changed all occurrences of "embeder" to "embedder". --- .env.template | 4 ++-- scripts/config.py | 2 +- scripts/memory/base.py | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.env.template b/.env.template index 3ddb6660..f8e46894 100644 --- a/.env.template +++ b/.env.template @@ -50,8 +50,8 @@ SMART_TOKEN_LIMIT=8000 # MEMORY_BACKEND - Memory backend type (Default: local) MEMORY_BACKEND=local -# MEMORY_EMBEDER - Embeddings model to use (Default: ada) -MEMORY_EMBEDER=ada +# MEMORY_EMBEDDER - Embeddings model to use (Default: ada) +MEMORY_EMBEDDER=ada ### PINECONE # PINECONE_API_KEY - Pinecone API Key (Example: my-pinecone-api-key) diff --git a/scripts/config.py b/scripts/config.py index 38cbd142..fbba5a75 100644 --- a/scripts/config.py +++ b/scripts/config.py @@ -82,7 +82,7 @@ class Config(metaclass=Singleton): # Note that indexes must be created on db 0 in redis, this is not configurable. self.memory_backend = os.getenv("MEMORY_BACKEND", 'local') - self.memory_embeder = os.getenv("MEMORY_EMBEDER", 'ada') + self.memory_embedder = os.getenv("MEMORY_EMBEDDER", 'ada') # Initialize the OpenAI API client openai.api_key = self.openai_api_key diff --git a/scripts/memory/base.py b/scripts/memory/base.py index c3fec628..c1b48d3e 100644 --- a/scripts/memory/base.py +++ b/scripts/memory/base.py @@ -8,25 +8,25 @@ try: from sentence_transformers import SentenceTransformer except ImportError: SentenceTransformer = None - if cfg.memory_embeder == "sbert": + if cfg.memory_embedder == "sbert": print("Error: Sentence Transformers is not installed. Please install sentence_transformers" - " to use BERT as an embeder. Defaulting to Ada.") - cfg.memory_embeder = "ada" + " to use sBERT as an embedder. Defaulting to Ada.") + cfg.memory_embedder = "ada" cfg = Config() -# Dimension of embeddings encoded by models +# Dimension of embeddings encoded by embedders EMBED_DIM = { "ada": 1536, "sbert": 768 -}.get(cfg.memory_embeder, default=1536) +}.get(cfg.memory_embedder, default=1536) def get_embedding(text): text = text.replace("\n", " ") - # use the embeder specified in the config - if cfg.memory_embeder == "sbert": + # use the embedder specified in the config + if cfg.memory_embedder == "sbert": embedding = SentenceTransformer("sentence-transformers/all-mpnet-base-v2", device="cpu").encode(text, show_progress_bar=False) else: embedding = openai.Embedding.create(input=[text], model="text-embedding-ada-002")["data"][0]["embedding"] From 34eac5754c2d9dfba18b9b89407400ce2da19e71 Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 18:06:47 +0200 Subject: [PATCH 08/12] test: fix typo and add newline at the end - Fixed "embeder" typo to "embedder" - Added newline at the end of test unit --- tests/{embeder_test.py => embedder_test.py} | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) rename tests/{embeder_test.py => embedder_test.py} (75%) diff --git a/tests/embeder_test.py b/tests/embedder_test.py similarity index 75% rename from tests/embeder_test.py rename to tests/embedder_test.py index 214b9110..d64dae11 100644 --- a/tests/embeder_test.py +++ b/tests/embedder_test.py @@ -9,25 +9,26 @@ def MockConfig(): 'debug_mode': False, 'continuous_mode': False, 'speak_mode': False, - 'memory_embeder': 'sbert' + 'memory_embedder': 'sbert' }) -class TestMemoryEmbeder(unittest.TestCase): - def setUp(self): +class TestMemoryEmbedder(unittest.TestCase): + def setUp(self): self.cfg = MockConfig() def test_ada(self): - self.cfg.memory_embeder = "ada" + self.cfg.memory_embedder = "ada" text = "Sample text" result = get_embedding(text) self.assertEqual(result.shape, (1536,)) def test_sbert(self): - self.cfg.memory_embeder = "sbert" + self.cfg.memory_embedder = "sbert" text = "Sample text" result = get_embedding(text) self.assertEqual(result.shape, (768,)) if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main() + \ No newline at end of file From 091457a24f7c85a8c961420f1b8fa1b80fd724c1 Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 22:48:25 +0200 Subject: [PATCH 09/12] fix: removed keyword default from dict.get arguments --- scripts/memory/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/memory/base.py b/scripts/memory/base.py index c1b48d3e..1f13f38b 100644 --- a/scripts/memory/base.py +++ b/scripts/memory/base.py @@ -19,7 +19,7 @@ cfg = Config() EMBED_DIM = { "ada": 1536, "sbert": 768 -}.get(cfg.memory_embedder, default=1536) +}.get(cfg.memory_embedder, 1536) def get_embedding(text): From 062176d3f5ac57c83148fe5595b72c93a4a4d95c Mon Sep 17 00:00:00 2001 From: Tymec Date: Fri, 14 Apr 2023 22:49:13 +0200 Subject: [PATCH 10/12] test: replaced MockConfig with real config get_embedding function uses config --- tests/embedder_test.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/tests/embedder_test.py b/tests/embedder_test.py index d64dae11..fddcf225 100644 --- a/tests/embedder_test.py +++ b/tests/embedder_test.py @@ -3,32 +3,27 @@ import sys # Probably a better way: sys.path.append(os.path.abspath('../scripts')) from memory.base import get_embedding +from config import Config +import unittest + + +# Required, because the get_embedding function uses it +cfg = Config() -def MockConfig(): - return type('MockConfig', (object,), { - 'debug_mode': False, - 'continuous_mode': False, - 'speak_mode': False, - 'memory_embedder': 'sbert' - }) class TestMemoryEmbedder(unittest.TestCase): - def setUp(self): - self.cfg = MockConfig() - def test_ada(self): - self.cfg.memory_embedder = "ada" + cfg.memory_embedder = "ada" text = "Sample text" result = get_embedding(text) - self.assertEqual(result.shape, (1536,)) + self.assertEqual(len(result), 1536) def test_sbert(self): - self.cfg.memory_embedder = "sbert" + cfg.memory_embedder = "sbert" text = "Sample text" result = get_embedding(text) - self.assertEqual(result.shape, (768,)) + self.assertEqual(len(result), 768) if __name__ == '__main__': unittest.main() - \ No newline at end of file From 6c9ec3219530997610fecaf77ebc7b6733cc16ea Mon Sep 17 00:00:00 2001 From: Tymec Date: Sat, 15 Apr 2023 01:34:51 +0200 Subject: [PATCH 11/12] test: fixed imports --- tests/embedder_test.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/embedder_test.py b/tests/embedder_test.py index fddcf225..5b9ca798 100644 --- a/tests/embedder_test.py +++ b/tests/embedder_test.py @@ -1,11 +1,8 @@ import os import sys -# Probably a better way: -sys.path.append(os.path.abspath('../scripts')) -from memory.base import get_embedding -from config import Config -import unittest +from autogpt.config import Config +from autogpt.memory.base import get_embedding # Required, because the get_embedding function uses it cfg = Config() From e0af761c35f0bbc41649873c48e0cfc1afed57bf Mon Sep 17 00:00:00 2001 From: Tymec Date: Sat, 15 Apr 2023 17:26:58 +0200 Subject: [PATCH 12/12] chore: flake8 formatting --- autogpt/config/config.py | 2 +- autogpt/memory/base.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/autogpt/config/config.py b/autogpt/config/config.py index 687283c2..7ea0fd23 100644 --- a/autogpt/config/config.py +++ b/autogpt/config/config.py @@ -82,7 +82,7 @@ class Config(metaclass=Singleton): self.memory_backend = os.getenv("MEMORY_BACKEND", 'local') self.memory_embedder = os.getenv("MEMORY_EMBEDDER", 'ada') - + # Initialize the OpenAI API client openai.api_key = self.openai_api_key diff --git a/autogpt/memory/base.py b/autogpt/memory/base.py index d2bbeabd..bf703660 100644 --- a/autogpt/memory/base.py +++ b/autogpt/memory/base.py @@ -43,9 +43,9 @@ def get_embedding(text): model=model, engine=engine, )["data"][0]["embedding"] - + return embedding - + class MemoryProviderSingleton(AbstractSingleton): @abc.abstractmethod