kotaemon/tests/test_tools.py
Tuan Anh Nguyen Dang (Tadashi_Cin) f9fc02a32a [AUR-363, AUR-433, AUR-434] Add Base Tool interface with Wikipedia/Google tools (#30)
* add base Tool

* minor update test_tool

* update test dependency

* update test dependency

* Fix namespace conflict

* update test

---------

Co-authored-by: trducng <trungduc1992@gmail.com>
2023-09-29 10:18:49 +07:00

71 lines
2.2 KiB
Python

import json
from pathlib import Path
import pytest
from openai.api_resources.embedding import Embedding
from kotaemon.docstores import InMemoryDocumentStore
from kotaemon.documents.base import Document
from kotaemon.embeddings.openai import AzureOpenAIEmbeddings
from kotaemon.pipelines.indexing import IndexVectorStoreFromDocumentPipeline
from kotaemon.pipelines.retrieving import RetrieveDocumentFromVectorStorePipeline
from kotaemon.pipelines.tools import ComponentTool, GoogleSearchTool, WikipediaTool
from kotaemon.vectorstores import ChromaVectorStore
with open(Path(__file__).parent / "resources" / "embedding_openai.json") as f:
openai_embedding = json.load(f)
@pytest.fixture(scope="function")
def mock_openai_embedding(monkeypatch):
monkeypatch.setattr(Embedding, "create", lambda *args, **kwargs: openai_embedding)
def test_google_tool():
tool = GoogleSearchTool()
assert tool.name
assert tool.description
output = tool("What is Cinnamon AI")
assert output
def test_wikipedia_tool():
tool = WikipediaTool()
assert tool.name
assert tool.description
output = tool("Cinnamon")
assert output
def test_pipeline_tool(mock_openai_embedding, tmp_path):
db = ChromaVectorStore(path=str(tmp_path))
doc_store = InMemoryDocumentStore()
embedding = AzureOpenAIEmbeddings(
model="text-embedding-ada-002",
deployment="embedding-deployment",
openai_api_base="https://test.openai.azure.com/",
openai_api_key="some-key",
)
index_pipeline = IndexVectorStoreFromDocumentPipeline(
vector_store=db, embedding=embedding, doc_store=doc_store
)
retrieval_pipeline = RetrieveDocumentFromVectorStorePipeline(
vector_store=db, doc_store=doc_store, embedding=embedding
)
index_tool = ComponentTool(
name="index_document",
description="A tool to use to index a document to be searched later",
component=index_pipeline,
)
output = index_tool({"text": Document(text="Cinnamon AI")})
retrieval_tool = ComponentTool(
name="search_document",
description="A tool to use to search a document in a vectorstore",
component=retrieval_pipeline,
)
output = retrieval_tool("Cinnamon AI")
assert output