From 471a386b60498b73abbd4cf542ccfa056fb8913a Mon Sep 17 00:00:00 2001 From: pavanmantha Date: Sun, 6 Oct 2024 08:33:04 +0530 Subject: [PATCH 1/5] -removed the unwanted testset generation code --- .../simple_rag/test_set_generator.py | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 bootstraprag/templates/llamaindex/simple_rag/test_set_generator.py diff --git a/bootstraprag/templates/llamaindex/simple_rag/test_set_generator.py b/bootstraprag/templates/llamaindex/simple_rag/test_set_generator.py deleted file mode 100644 index d3a7f5a..0000000 --- a/bootstraprag/templates/llamaindex/simple_rag/test_set_generator.py +++ /dev/null @@ -1,48 +0,0 @@ -from llama_index.core import SimpleDirectoryReader -from ragas.testset.generator import TestsetGenerator -from ragas.testset.evolutions import simple, reasoning, multi_context -from llama_index.llms.ollama import Ollama -from llama_index.llms.openai import OpenAI -from llama_index.embeddings.ollama import OllamaEmbedding -from llama_index.embeddings.openai import OpenAIEmbedding -from dotenv import load_dotenv, find_dotenv -import logging -import os - -_ = load_dotenv(find_dotenv()) -logging.basicConfig(level=int(os.environ['INFO'])) -logger = logging.getLogger(__name__) - - -class TestSetGenerator: - def __init__(self): - # generator with ollama models - # generator_llm = Ollama(model=os.environ.get('OLLAMA_LLM_MODEL'), request_timeout=300) - # critic_llm = Ollama(model=os.environ.get('OLLAMA_LLM_MODEL'), request_timeout=300) - # embeddings = OllamaEmbedding(model_name=os.environ.get('OLLAMA_EMBED_MODEL'), request_timeout=300) - - # generator with openai models - generator_llm = OpenAI(model=os.environ.get('OPENAI_MODEL'), timeout=300) - critic_llm = OpenAI(model=os.environ.get('OPENAI_MODEL'), timeout=300) - embeddings = OpenAIEmbedding(model=os.environ.get('OPENAI_EMBED_MODEL'), timeout=300) - - self.generator = TestsetGenerator.from_llama_index( - generator_llm=generator_llm, - critic_llm=critic_llm, - embeddings=embeddings, - ) - - def generate_test_set(self, input_dir, test_size: int = 5, simple_dist: float = 0.5, reasoning_dist: float = 0.25, - multi_context_dist: float = 0.25, show_progress: bool = True): - logger.info('loading docs..') - _docs = SimpleDirectoryReader(input_dir=input_dir).load_data(show_progress=show_progress) - # generate test set - logger.info('test set generation started..') - test_set = self.generator.generate_with_llamaindex_docs( - documents=_docs, - test_size=test_size, - distributions={simple: simple_dist, reasoning: reasoning_dist, multi_context: multi_context_dist}, - ) - logger.info('test set generation ended..filename: testset.csv') - df = test_set.to_pandas() - df.to_csv(filename="testset.csv") From df4a2edd172c37909b58eb7a139ca69d0254b649 Mon Sep 17 00:00:00 2001 From: pavanmantha Date: Sun, 6 Oct 2024 21:46:08 +0530 Subject: [PATCH 2/5] -saved retrieval quality bug --- .../qdrant/retrieval_quality/measure_retrieval_quality.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bootstraprag/templates/qdrant/retrieval_quality/measure_retrieval_quality.py b/bootstraprag/templates/qdrant/retrieval_quality/measure_retrieval_quality.py index 29e8870..2f8dbbb 100644 --- a/bootstraprag/templates/qdrant/retrieval_quality/measure_retrieval_quality.py +++ b/bootstraprag/templates/qdrant/retrieval_quality/measure_retrieval_quality.py @@ -8,6 +8,7 @@ class MeasureRetrievalQuality: def __init__(self, dataset_path: str, collection_name: str, streaming: bool = True): + _ = load_dotenv(find_dotenv()) # path = "Qdrant/arxiv-titles-instructorxl-embeddings" dataset = load_dataset( path=dataset_path, split="train", streaming=True, From d67feca3cd4d97e281a4c206a68eeaa31450b3a2 Mon Sep 17 00:00:00 2001 From: pavanmantha Date: Mon, 7 Oct 2024 12:01:11 +0530 Subject: [PATCH 3/5] -new banner and logo, - improved the parent doc --- README.md | 9 +++++---- assets/bootstrap-rag.png | Bin 0 -> 72914 bytes 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 assets/bootstrap-rag.png diff --git a/README.md b/README.md index 7c74afd..02ee5f0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ +![Banner](https://raw.githubusercontent.com/pavanjava/bootstrap-rag/refs/heads/main/assets/bootstrap-rag.png) # bootstrap-rag this project will bootstrap and scaffold the projects for specific semantic search and RAG applications along with regular boiler plate code. ### Architecture ![Arch](assets/architecture.png) -### prerequisite +### Installing prerequisite #### Option-1 - install ollama following this [guide](https://ollama.com/download) - install qdrant follwing this [guide](https://qdrant.tech/documentation/guides/installation/) @@ -36,8 +37,8 @@ Note: Only `llamaindex` and `Qdrant Search` are functional for now, others frame #### Resources -![Demo GIF](assets/demo.gif) +![Demo GIF](https://raw.githubusercontent.com/pavanjava/bootstrap-rag/refs/heads/main/assets/demo.gif) -![Qdrant](assets/qdrant.png) +![Qdrant](https://raw.githubusercontent.com/pavanjava/bootstrap-rag/refs/heads/main/assets/qdrant.png) -![Arize Phoenix](assets/observability.png) +![Arize Phoenix](https://raw.githubusercontent.com/pavanjava/bootstrap-rag/refs/heads/main/assets/observability.png) diff --git a/assets/bootstrap-rag.png b/assets/bootstrap-rag.png new file mode 100644 index 0000000000000000000000000000000000000000..00213e36a457dea44b363de9051843037f1f067b GIT binary patch literal 72914 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%0DaL|RQDWR1(G?U$ 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 Date: Tue, 8 Oct 2024 14:29:28 +0530 Subject: [PATCH 4/5] -Impreoved parent level docs --- bootstraprag/templates/langchain/readme.md | 7 ++++++- bootstraprag/templates/llamaindex/readme.md | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 bootstraprag/templates/llamaindex/readme.md diff --git a/bootstraprag/templates/langchain/readme.md b/bootstraprag/templates/langchain/readme.md index 6f287d0..5b84c3d 100644 --- a/bootstraprag/templates/langchain/readme.md +++ b/bootstraprag/templates/langchain/readme.md @@ -1 +1,6 @@ -### under development \ No newline at end of file +## LangChain Templates +This section of the project has stable PoC Ready various RAG codes starting from simple to advanced techniques along with the LangGraph and LangSmith. +Every LangChain code base has its own readme.md for more specific guidance. +Go to a specific project and follow the respective readme.md fore more details. +As a backend layer all the LangChain projects uses Qdrant and for LLM the project templates use Ollama. +These can be just replaced by their substitutes to make the code working normally. \ No newline at end of file diff --git a/bootstraprag/templates/llamaindex/readme.md b/bootstraprag/templates/llamaindex/readme.md new file mode 100644 index 0000000..4fbaaf5 --- /dev/null +++ b/bootstraprag/templates/llamaindex/readme.md @@ -0,0 +1,6 @@ +## LlamaIndex Templates +This section of the project has stable PoC Ready various RAG codes starting from simple to advanced techniques along with the LlamaDeploy and llamaAgents. +Every LlamaIndex code base has its own readme.md for more specific guidance. +Go to a specific project and follow the respective readme.md fore more details. +As a backend layer all the LlamaIndex projects uses Qdrant and for LLM the project templates use Ollama. +These can be just replaced by their substitutes to make the code working normally. \ No newline at end of file From cb8d479b31af6ff641bde7f43913d43353756a62 Mon Sep 17 00:00:00 2001 From: pavanmantha Date: Wed, 9 Oct 2024 23:43:44 +0530 Subject: [PATCH 5/5] -First Langchain commit --- .../langchain/simple_rag/__init__.py | 0 .../templates/langchain/simple_rag/main.py | 30 +++++++++++++++++++ .../templates/langchain/simple_rag/readme.md | 0 .../langchain/simple_rag/requirements.txt | 7 +++++ 4 files changed, 37 insertions(+) create mode 100644 bootstraprag/templates/langchain/simple_rag/__init__.py create mode 100644 bootstraprag/templates/langchain/simple_rag/main.py create mode 100644 bootstraprag/templates/langchain/simple_rag/readme.md create mode 100644 bootstraprag/templates/langchain/simple_rag/requirements.txt diff --git a/bootstraprag/templates/langchain/simple_rag/__init__.py b/bootstraprag/templates/langchain/simple_rag/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bootstraprag/templates/langchain/simple_rag/main.py b/bootstraprag/templates/langchain/simple_rag/main.py new file mode 100644 index 0000000..8a1c587 --- /dev/null +++ b/bootstraprag/templates/langchain/simple_rag/main.py @@ -0,0 +1,30 @@ +from langchain_community.embeddings.fastembed import FastEmbedEmbeddings +from langchain_qdrant import QdrantVectorStore +from langchain_community.document_loaders import WebBaseLoader +from langchain.text_splitter import RecursiveCharacterTextSplitter +from qdrant_client import QdrantClient +from qdrant_client.http.models import Distance, VectorParams + +embeddings = FastEmbedEmbeddings() + +client = QdrantClient(url='http://localhost:6333', api_key='th3s3cr3tk3y') + +client.create_collection( + collection_name="demo_collection_1", + vectors_config=VectorParams(size=384, distance=Distance.COSINE), +) + +vector_store = QdrantVectorStore( + client=client, + collection_name="demo_collection_1", + embedding=embeddings +) + +WEBSITE_URL = "https://medium.com/@jaintarun7/multimodal-using-gemini-and-llamaindex-f622a190cc32" +data = WebBaseLoader(WEBSITE_URL) +docs = data.load() + +text_split = RecursiveCharacterTextSplitter(chunk_size=512,chunk_overlap=50) +chunks = text_split.split_documents(docs) + +qdrant = vector_store.from_documents(chunks, embedding=embeddings, api_key='th3s3cr3tk3y') diff --git a/bootstraprag/templates/langchain/simple_rag/readme.md b/bootstraprag/templates/langchain/simple_rag/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/bootstraprag/templates/langchain/simple_rag/requirements.txt b/bootstraprag/templates/langchain/simple_rag/requirements.txt new file mode 100644 index 0000000..938a70b --- /dev/null +++ b/bootstraprag/templates/langchain/simple_rag/requirements.txt @@ -0,0 +1,7 @@ +langchain==0.3.3 +langchain-core==0.3.10 +langchain-qdrant==0.1.4 +langchain-ollama==0.2.0 +langchain-community==0.3.2 +qdrant-client==1.12.0 +fastembed==0.3.6 \ No newline at end of file