From 665984954725d5b66443a6453496aad4ab4c40b9 Mon Sep 17 00:00:00 2001 From: Iyadh Faleh Date: Sat, 29 Mar 2025 11:55:09 +0100 Subject: [PATCH 1/2] fix: typo --- README.md | 8 +++---- examples/store-mongodb-similarity-search.php | 6 ++--- examples/store-pinecone-similarity-search.php | 6 ++--- src/{Embedder.php => EmbeddingProvider.php} | 2 +- ...dderTest.php => EmbeddingProviderTest.php} | 22 +++++++++---------- 5 files changed, 22 insertions(+), 22 deletions(-) rename src/{Embedder.php => EmbeddingProvider.php} (98%) rename tests/{EmbedderTest.php => EmbeddingProviderTest.php} (88%) diff --git a/README.md b/README.md index 042b3a66..6da46b68 100644 --- a/README.md +++ b/README.md @@ -350,23 +350,23 @@ $eventDispatcher->addListener(ToolCallsExecuted::class, function (ToolCallsExecu LLM Chain supports document embedding and similarity search using vector stores like ChromaDB, Azure AI Search, MongoDB Atlas Search, or Pinecone. -For populating a vector store, LLM Chain provides the service `DocumentEmbedder`, which requires an instance of an +For populating a vector store, LLM Chain provides the service `EmbeddingProvider`, which requires an instance of an `EmbeddingsModel` and one of `StoreInterface`, and works with a collection of `Document` objects as input: ```php -use PhpLlm\LlmChain\Embedder; +use PhpLlm\LlmChain\EmbeddingProvider; use PhpLlm\LlmChain\Bridge\OpenAI\Embeddings; use PhpLlm\LlmChain\Bridge\OpenAI\PlatformFactory; use PhpLlm\LlmChain\Bridge\Pinecone\Store; use Probots\Pinecone\Pinecone; use Symfony\Component\HttpClient\HttpClient; -$embedder = new Embedder( +$embeddingProvider = new EmbeddingProvider( PlatformFactory::create($_ENV['OPENAI_API_KEY']), new Embeddings(), new Store(Pinecone::client($_ENV['PINECONE_API_KEY'], $_ENV['PINECONE_HOST']), ); -$embedder->embed($documents); +$embeddingProvider->embed($documents); ``` The collection of `Document` instances is usually created by text input of your domain entities: diff --git a/examples/store-mongodb-similarity-search.php b/examples/store-mongodb-similarity-search.php index 9957cf41..ca8b89c3 100644 --- a/examples/store-mongodb-similarity-search.php +++ b/examples/store-mongodb-similarity-search.php @@ -11,7 +11,7 @@ use PhpLlm\LlmChain\Chain\Toolbox\Toolbox; use PhpLlm\LlmChain\Document\Metadata; use PhpLlm\LlmChain\Document\TextDocument; -use PhpLlm\LlmChain\Embedder; +use PhpLlm\LlmChain\EmbeddingProvider; use PhpLlm\LlmChain\Model\Message\Message; use PhpLlm\LlmChain\Model\Message\MessageBag; use Symfony\Component\Dotenv\Dotenv; @@ -52,8 +52,8 @@ // create embeddings for documents $platform = PlatformFactory::create($_ENV['OPENAI_API_KEY']); -$embedder = new Embedder($platform, $embeddings = new Embeddings(), $store); -$embedder->embed($documents); +$embeddingProvider = new EmbeddingProvider($platform, $embeddings = new Embeddings(), $store); +$embeddingProvider->embed($documents); // initialize the index $store->initialize(); diff --git a/examples/store-pinecone-similarity-search.php b/examples/store-pinecone-similarity-search.php index 3f28bebd..a2e8a400 100644 --- a/examples/store-pinecone-similarity-search.php +++ b/examples/store-pinecone-similarity-search.php @@ -10,7 +10,7 @@ use PhpLlm\LlmChain\Chain\Toolbox\Toolbox; use PhpLlm\LlmChain\Document\Metadata; use PhpLlm\LlmChain\Document\TextDocument; -use PhpLlm\LlmChain\Embedder; +use PhpLlm\LlmChain\EmbeddingProvider; use PhpLlm\LlmChain\Model\Message\Message; use PhpLlm\LlmChain\Model\Message\MessageBag; use Probots\Pinecone\Pinecone; @@ -46,8 +46,8 @@ // create embeddings for documents $platform = PlatformFactory::create($_ENV['OPENAI_API_KEY']); -$embedder = new Embedder($platform, $embeddings = new Embeddings(), $store); -$embedder->embed($documents); +$embeddingProvider = new EmbeddingProvider($platform, $embeddings = new Embeddings(), $store); +$embeddingProvider->embed($documents); $llm = new GPT(GPT::GPT_4O_MINI); diff --git a/src/Embedder.php b/src/EmbeddingProvider.php similarity index 98% rename from src/Embedder.php rename to src/EmbeddingProvider.php index 6e95fa58..4d9fcda5 100644 --- a/src/Embedder.php +++ b/src/EmbeddingProvider.php @@ -13,7 +13,7 @@ use Symfony\Component\Clock\Clock; use Symfony\Component\Clock\ClockInterface; -final readonly class Embedder +final readonly class EmbeddingProvider { private ClockInterface $clock; diff --git a/tests/EmbedderTest.php b/tests/EmbeddingProviderTest.php similarity index 88% rename from tests/EmbedderTest.php rename to tests/EmbeddingProviderTest.php index aa279ac8..7c5b6098 100644 --- a/tests/EmbedderTest.php +++ b/tests/EmbeddingProviderTest.php @@ -9,7 +9,7 @@ use PhpLlm\LlmChain\Document\TextDocument; use PhpLlm\LlmChain\Document\Vector; use PhpLlm\LlmChain\Document\VectorDocument; -use PhpLlm\LlmChain\Embedder; +use PhpLlm\LlmChain\EmbeddingProvider; use PhpLlm\LlmChain\Model\Message\ToolCallMessage; use PhpLlm\LlmChain\Model\Response\AsyncResponse; use PhpLlm\LlmChain\Model\Response\ToolCall; @@ -26,7 +26,7 @@ use Symfony\Component\Clock\MockClock; use Symfony\Component\Uid\Uuid; -#[CoversClass(Embedder::class)] +#[CoversClass(EmbeddingProvider::class)] #[Medium] #[UsesClass(TextDocument::class)] #[UsesClass(Vector::class)] @@ -37,7 +37,7 @@ #[UsesClass(Platform::class)] #[UsesClass(AsyncResponse::class)] #[UsesClass(VectorResponse::class)] -final class EmbedderTest extends TestCase +final class EmbeddingProviderTest extends TestCase { #[Test] public function embedSingleDocument(): void @@ -45,14 +45,14 @@ public function embedSingleDocument(): void $document = new TextDocument($id = Uuid::v4(), 'Test content'); $vector = new Vector([0.1, 0.2, 0.3]); - $embedder = new Embedder( + $embeddingProvider = new EmbeddingProvider( PlatformTestHandler::createPlatform(new VectorResponse($vector)), new Embeddings(), $store = new TestStore(), new MockClock(), ); - $embedder->embed($document); + $embeddingProvider->embed($document); self::assertCount(1, $store->documents); self::assertInstanceOf(VectorDocument::class, $store->documents[0]); @@ -66,7 +66,7 @@ public function embedEmptyDocumentList(): void $logger = $this->createMock(LoggerInterface::class); $logger->expects($this->once())->method('debug')->with('No documents to embed'); - $embedder = new Embedder( + $embeddingProvider = new EmbeddingProvider( PlatformTestHandler::createPlatform(), new Embeddings(), $store = new TestStore(), @@ -74,7 +74,7 @@ public function embedEmptyDocumentList(): void $logger, ); - $embedder->embed([]); + $embeddingProvider->embed([]); self::assertSame([], $store->documents); } @@ -86,14 +86,14 @@ public function embedDocumentWithMetadata(): void $document = new TextDocument($id = Uuid::v4(), 'Test content', $metadata); $vector = new Vector([0.1, 0.2, 0.3]); - $embedder = new Embedder( + $embeddingProvider = new EmbeddingProvider( PlatformTestHandler::createPlatform(new VectorResponse($vector)), new Embeddings(), $store = new TestStore(), new MockClock(), ); - $embedder->embed($document); + $embeddingProvider->embed($document); self::assertSame(1, $store->addCalls); self::assertCount(1, $store->documents); @@ -112,14 +112,14 @@ public function embedWithSleep(): void $document1 = new TextDocument(Uuid::v4(), 'Test content 1'); $document2 = new TextDocument(Uuid::v4(), 'Test content 2'); - $embedder = new Embedder( + $embeddingProvider = new EmbeddingProvider( PlatformTestHandler::createPlatform(new VectorResponse($vector1, $vector2)), new Embeddings(), $store = new TestStore(), $clock = new MockClock('2024-01-01 00:00:00'), ); - $embedder->embed( + $embeddingProvider->embed( documents: [$document1, $document2], sleep: 3 ); From dc3672a84606fe0c88ce79f433064b70e73c1fec Mon Sep 17 00:00:00 2001 From: Iyadh Faleh Date: Sat, 29 Mar 2025 15:05:28 +0100 Subject: [PATCH 2/2] Fix after review --- README.md | 8 +++---- examples/store-mongodb-similarity-search.php | 6 ++--- examples/store-pinecone-similarity-search.php | 6 ++--- src/{EmbeddingProvider.php => Embedder.php} | 2 +- ...ddingProviderTest.php => EmbedderTest.php} | 22 +++++++++---------- 5 files changed, 22 insertions(+), 22 deletions(-) rename src/{EmbeddingProvider.php => Embedder.php} (98%) rename tests/{EmbeddingProviderTest.php => EmbedderTest.php} (88%) diff --git a/README.md b/README.md index 6da46b68..0e1ab167 100644 --- a/README.md +++ b/README.md @@ -350,23 +350,23 @@ $eventDispatcher->addListener(ToolCallsExecuted::class, function (ToolCallsExecu LLM Chain supports document embedding and similarity search using vector stores like ChromaDB, Azure AI Search, MongoDB Atlas Search, or Pinecone. -For populating a vector store, LLM Chain provides the service `EmbeddingProvider`, which requires an instance of an +For populating a vector store, LLM Chain provides the service `Embedder`, which requires an instance of an `EmbeddingsModel` and one of `StoreInterface`, and works with a collection of `Document` objects as input: ```php -use PhpLlm\LlmChain\EmbeddingProvider; +use PhpLlm\LlmChain\Embedder; use PhpLlm\LlmChain\Bridge\OpenAI\Embeddings; use PhpLlm\LlmChain\Bridge\OpenAI\PlatformFactory; use PhpLlm\LlmChain\Bridge\Pinecone\Store; use Probots\Pinecone\Pinecone; use Symfony\Component\HttpClient\HttpClient; -$embeddingProvider = new EmbeddingProvider( +$embedder = new Embedder( PlatformFactory::create($_ENV['OPENAI_API_KEY']), new Embeddings(), new Store(Pinecone::client($_ENV['PINECONE_API_KEY'], $_ENV['PINECONE_HOST']), ); -$embeddingProvider->embed($documents); +$embedder->embed($documents); ``` The collection of `Document` instances is usually created by text input of your domain entities: diff --git a/examples/store-mongodb-similarity-search.php b/examples/store-mongodb-similarity-search.php index ca8b89c3..9957cf41 100644 --- a/examples/store-mongodb-similarity-search.php +++ b/examples/store-mongodb-similarity-search.php @@ -11,7 +11,7 @@ use PhpLlm\LlmChain\Chain\Toolbox\Toolbox; use PhpLlm\LlmChain\Document\Metadata; use PhpLlm\LlmChain\Document\TextDocument; -use PhpLlm\LlmChain\EmbeddingProvider; +use PhpLlm\LlmChain\Embedder; use PhpLlm\LlmChain\Model\Message\Message; use PhpLlm\LlmChain\Model\Message\MessageBag; use Symfony\Component\Dotenv\Dotenv; @@ -52,8 +52,8 @@ // create embeddings for documents $platform = PlatformFactory::create($_ENV['OPENAI_API_KEY']); -$embeddingProvider = new EmbeddingProvider($platform, $embeddings = new Embeddings(), $store); -$embeddingProvider->embed($documents); +$embedder = new Embedder($platform, $embeddings = new Embeddings(), $store); +$embedder->embed($documents); // initialize the index $store->initialize(); diff --git a/examples/store-pinecone-similarity-search.php b/examples/store-pinecone-similarity-search.php index a2e8a400..3f28bebd 100644 --- a/examples/store-pinecone-similarity-search.php +++ b/examples/store-pinecone-similarity-search.php @@ -10,7 +10,7 @@ use PhpLlm\LlmChain\Chain\Toolbox\Toolbox; use PhpLlm\LlmChain\Document\Metadata; use PhpLlm\LlmChain\Document\TextDocument; -use PhpLlm\LlmChain\EmbeddingProvider; +use PhpLlm\LlmChain\Embedder; use PhpLlm\LlmChain\Model\Message\Message; use PhpLlm\LlmChain\Model\Message\MessageBag; use Probots\Pinecone\Pinecone; @@ -46,8 +46,8 @@ // create embeddings for documents $platform = PlatformFactory::create($_ENV['OPENAI_API_KEY']); -$embeddingProvider = new EmbeddingProvider($platform, $embeddings = new Embeddings(), $store); -$embeddingProvider->embed($documents); +$embedder = new Embedder($platform, $embeddings = new Embeddings(), $store); +$embedder->embed($documents); $llm = new GPT(GPT::GPT_4O_MINI); diff --git a/src/EmbeddingProvider.php b/src/Embedder.php similarity index 98% rename from src/EmbeddingProvider.php rename to src/Embedder.php index 4d9fcda5..6e95fa58 100644 --- a/src/EmbeddingProvider.php +++ b/src/Embedder.php @@ -13,7 +13,7 @@ use Symfony\Component\Clock\Clock; use Symfony\Component\Clock\ClockInterface; -final readonly class EmbeddingProvider +final readonly class Embedder { private ClockInterface $clock; diff --git a/tests/EmbeddingProviderTest.php b/tests/EmbedderTest.php similarity index 88% rename from tests/EmbeddingProviderTest.php rename to tests/EmbedderTest.php index 7c5b6098..aa279ac8 100644 --- a/tests/EmbeddingProviderTest.php +++ b/tests/EmbedderTest.php @@ -9,7 +9,7 @@ use PhpLlm\LlmChain\Document\TextDocument; use PhpLlm\LlmChain\Document\Vector; use PhpLlm\LlmChain\Document\VectorDocument; -use PhpLlm\LlmChain\EmbeddingProvider; +use PhpLlm\LlmChain\Embedder; use PhpLlm\LlmChain\Model\Message\ToolCallMessage; use PhpLlm\LlmChain\Model\Response\AsyncResponse; use PhpLlm\LlmChain\Model\Response\ToolCall; @@ -26,7 +26,7 @@ use Symfony\Component\Clock\MockClock; use Symfony\Component\Uid\Uuid; -#[CoversClass(EmbeddingProvider::class)] +#[CoversClass(Embedder::class)] #[Medium] #[UsesClass(TextDocument::class)] #[UsesClass(Vector::class)] @@ -37,7 +37,7 @@ #[UsesClass(Platform::class)] #[UsesClass(AsyncResponse::class)] #[UsesClass(VectorResponse::class)] -final class EmbeddingProviderTest extends TestCase +final class EmbedderTest extends TestCase { #[Test] public function embedSingleDocument(): void @@ -45,14 +45,14 @@ public function embedSingleDocument(): void $document = new TextDocument($id = Uuid::v4(), 'Test content'); $vector = new Vector([0.1, 0.2, 0.3]); - $embeddingProvider = new EmbeddingProvider( + $embedder = new Embedder( PlatformTestHandler::createPlatform(new VectorResponse($vector)), new Embeddings(), $store = new TestStore(), new MockClock(), ); - $embeddingProvider->embed($document); + $embedder->embed($document); self::assertCount(1, $store->documents); self::assertInstanceOf(VectorDocument::class, $store->documents[0]); @@ -66,7 +66,7 @@ public function embedEmptyDocumentList(): void $logger = $this->createMock(LoggerInterface::class); $logger->expects($this->once())->method('debug')->with('No documents to embed'); - $embeddingProvider = new EmbeddingProvider( + $embedder = new Embedder( PlatformTestHandler::createPlatform(), new Embeddings(), $store = new TestStore(), @@ -74,7 +74,7 @@ public function embedEmptyDocumentList(): void $logger, ); - $embeddingProvider->embed([]); + $embedder->embed([]); self::assertSame([], $store->documents); } @@ -86,14 +86,14 @@ public function embedDocumentWithMetadata(): void $document = new TextDocument($id = Uuid::v4(), 'Test content', $metadata); $vector = new Vector([0.1, 0.2, 0.3]); - $embeddingProvider = new EmbeddingProvider( + $embedder = new Embedder( PlatformTestHandler::createPlatform(new VectorResponse($vector)), new Embeddings(), $store = new TestStore(), new MockClock(), ); - $embeddingProvider->embed($document); + $embedder->embed($document); self::assertSame(1, $store->addCalls); self::assertCount(1, $store->documents); @@ -112,14 +112,14 @@ public function embedWithSleep(): void $document1 = new TextDocument(Uuid::v4(), 'Test content 1'); $document2 = new TextDocument(Uuid::v4(), 'Test content 2'); - $embeddingProvider = new EmbeddingProvider( + $embedder = new Embedder( PlatformTestHandler::createPlatform(new VectorResponse($vector1, $vector2)), new Embeddings(), $store = new TestStore(), $clock = new MockClock('2024-01-01 00:00:00'), ); - $embeddingProvider->embed( + $embedder->embed( documents: [$document1, $document2], sleep: 3 );