|
|
| |
| |
| |
|
|
| |
| |
| import gradio as gr |
|
|
| |
| import os |
| import sys |
|
|
| |
| from gradio.themes.base import Base |
|
|
| |
| from huggingface_hub import InferenceClient |
|
|
| |
| from langchain.document_loaders import TextLoader |
| from langchain.prompts import PromptTemplate |
| from langchain.schema.runnable import RunnablePassthrough, RunnableLambda |
| from langchain.text_splitter import RecursiveCharacterTextSplitter |
| from langchain_community.vectorstores import MongoDBAtlasVectorSearch |
| from langchain_community.embeddings import HuggingFaceInferenceAPIEmbeddings |
|
|
| |
| from pymongo import MongoClient |
|
|
| |
| from typing import Dict, Any |
|
|
| |
| from kaggle_secrets import UserSecretsClient |
|
|
| directory_path = "/kaggle/input/rag-dataset/RAG" |
| sys.path.append(directory_path) |
| print("sys.path =", sys.path) |
|
|
| my_txts = os.listdir(directory_path) |
| my_txts |
|
|
| loaders = [] |
| for my_txt in my_txts: |
| my_txt_path = os.path.join(directory_path, my_txt) |
| text_loader = TextLoader(my_txt_path) |
| loaders.append(text_loader) |
|
|
| print("len(loaders) =", len(loaders)) |
|
|
| loaders |
|
|
| |
|
|
| data = [] |
| for loader in loaders: |
| loaded_text = loader.load() |
| data.append(loaded_text) |
|
|
| print("len(data) =", len(data), "\n") |
|
|
| |
| data[0] |
|
|
| text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) |
|
|
| docs = [] |
| for doc in data: |
| chunk = text_splitter.split_documents(doc) |
| docs.append(chunk) |
|
|
| merged_documents = [] |
|
|
| for doc in docs: |
| merged_documents.extend(doc) |
|
|
| |
| print("len(merged_documents) =", len(merged_documents)) |
| print(merged_documents) |
|
|
| |
| from kaggle_secrets import UserSecretsClient |
| user_secrets = UserSecretsClient() |
| |
| MONGO_URI = user_secrets.get_secret("MONGO_URI") |
| cluster = MongoClient(MONGO_URI) |
|
|
| |
| DB_NAME = "files" |
| COLLECTION_NAME = "files_collection" |
|
|
| |
| MONGODB_COLLECTION = cluster[DB_NAME][COLLECTION_NAME] |
| vector_search_index = "vector_index" |
|
|
| from kaggle_secrets import UserSecretsClient |
| user_secrets = UserSecretsClient() |
| HF_TOKEN = user_secrets.get_secret("hugging_face") |
| embedding_model = HuggingFaceInferenceAPIEmbeddings( |
| api_key=HF_TOKEN, model_name="sentence-transformers/all-mpnet-base-v2" |
| ) |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| vector_search = MongoDBAtlasVectorSearch.from_connection_string( |
| connection_string=MONGO_URI, |
| namespace=f"{DB_NAME}.{COLLECTION_NAME}", |
| embedding=embedding_model, |
| index_name=vector_search_index, |
| ) |
|
|
| query = "why EfficientNetB0?" |
| results = vector_search.similarity_search(query=query, k=25) |
|
|
| print("\n") |
| print(results) |
|
|
| |
| k = 10 |
|
|
| |
| score_threshold = 0.80 |
|
|
| |
| retriever_1 = vector_search.as_retriever( |
| search_type = "similarity", |
| search_kwargs = {"k": k, "score_threshold": score_threshold} |
| ) |
|
|
|
|
|
|
| |
| hf_client = InferenceClient(api_key=HF_TOKEN) |
|
|
| |
| prompt = PromptTemplate.from_template( |
| """Use the following pieces of context to answer the question at the end. |
| |
| START OF CONTEXT: |
| {context} |
| END OF CONTEXT: |
| |
| START OF QUESTION: |
| {question} |
| END OF QUESTION: |
| |
| If you do not know the answer, just say that you do not know. |
| NEVER assume things. |
| """ |
| ) |
|
|
| def format_docs(docs): |
| return "\n\n".join(doc.page_content for doc in docs) |
|
|
|
|
| def generate_response(input_dict: Dict[str, Any]) -> str: |
| formatted_prompt = prompt.format(**input_dict) |
| |
|
|
| |
| response = hf_client.chat.completions.create( |
| model="Qwen/Qwen2.5-1.5B-Instruct", |
| messages=[{ |
| "role": "system", |
| "content": formatted_prompt |
| },{ |
| "role": "user", |
| "content": input_dict["question"] |
| }], |
| max_tokens=1000, |
| temperature=0.2, |
| ) |
|
|
| return response.choices[0].message.content |
|
|
| rag_chain = ( |
| { |
| "context": retriever_1 | RunnableLambda(format_docs), |
| "question": RunnablePassthrough() |
| } |
| | RunnableLambda(generate_response) |
| ) |
|
|
|
|
| query = "what is scaling?" |
| answer = rag_chain.invoke(query) |
|
|
| print("\nQuestion:", query) |
| print("Answer:", answer) |
|
|
| |
| documents = retriever_1.invoke(query) |
|
|
| |
| |
| |
|
|
|
|
|
|
| query = "How the GUI was implemented?" |
| answer = rag_chain.invoke(query) |
|
|
| print("\nQuestion:", query) |
| print("Answer:", answer) |
|
|
| |
| documents = retriever_1.invoke(query) |
|
|
| print("\nSource documents:") |
| from pprint import pprint |
| pprint(results) |
|
|
| query = "How the GUI was implemented?" |
| answer = rag_chain.invoke(query) |
|
|
| print("\nQuestion:", query) |
| print("Answer:", answer) |
|
|
| |
| documents = retriever_1.invoke(query) |
| formatted_docs = format_docs(documents) |
| print("\nSource Documents:\n", formatted_docs) |