From 1b3f5b10a79db046a34dce8eed12bc329e84a9b4 Mon Sep 17 00:00:00 2001 From: Gormery Kombo Wanjiru Date: Mon, 5 Feb 2024 14:08:05 +0100 Subject: [PATCH] meh --- requirements.txt | 9 ++++-- src/basic_chain.py | 23 +++++++++++++++ src/rag.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++ src/test.py | 8 ++++-- 4 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 src/basic_chain.py create mode 100644 src/rag.py diff --git a/requirements.txt b/requirements.txt index 6bba818..2dfcfd8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,10 @@ fastapi uvicorn debugpy -langchain_community -langchain \ No newline at end of file +langchain-community +langchain +langchainhub +gpt4all +chromadb +requests +beautifulsoup4 \ No newline at end of file diff --git a/src/basic_chain.py b/src/basic_chain.py new file mode 100644 index 0000000..0175467 --- /dev/null +++ b/src/basic_chain.py @@ -0,0 +1,23 @@ +from langchain.llms import Ollama +from langchain.callbacks.manager import CallbackManager +from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler + +llm = Ollama(model="llama2-uncensored", + # callback_manager = CallbackManager([StreamingStdOutCallbackHandler()]), + temperature=0.9, + ) + +from langchain.prompts import PromptTemplate + +prompt = PromptTemplate( + input_variables=["topic"], + template="Give me 5 interesting facts about {topic}?", +) + +from langchain.chains import LLMChain +chain = LLMChain(llm=llm, + prompt=prompt, + verbose=False) + +# Run the chain only specifying the input variable. +print(chain.run("the moon")) diff --git a/src/rag.py b/src/rag.py new file mode 100644 index 0000000..f942cde --- /dev/null +++ b/src/rag.py @@ -0,0 +1,71 @@ +# Load web page +import argparse + +from langchain.document_loaders import WebBaseLoader +from langchain.text_splitter import RecursiveCharacterTextSplitter + +# Embed and store +from langchain.vectorstores import Chroma +from langchain.embeddings import GPT4AllEmbeddings +from langchain.embeddings import OllamaEmbeddings # We can also try Ollama embeddings + +from langchain.llms import Ollama +from langchain.callbacks.manager import CallbackManager +from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler + +def main(): + parser = argparse.ArgumentParser(description='Filter out URL argument.') + parser.add_argument('--url', type=str, default='http://valiantlynx.com', required=True, help='The URL to filter out.') + + args = parser.parse_args() + url = args.url + print(f"using URL: {url}") + + loader = WebBaseLoader(url) + data = loader.load() + + # Split into chunks + text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=100) + all_splits = text_splitter.split_documents(data) + print(f"Split into {len(all_splits)} chunks") + + vectorstore = Chroma.from_documents(documents=all_splits, + embedding=GPT4AllEmbeddings()) + + # Retrieve + # question = "What are the latest headlines on {url}?" + # docs = vectorstore.similarity_search(question) + + print(f"Loaded {len(data)} documents") + # print(f"Retrieved {len(docs)} documents") + + # RAG prompt + from langchain import hub + QA_CHAIN_PROMPT = hub.pull("rlm/rag-prompt-llama") + + + # LLM + llm = Ollama(model="llama2-uncensored", + verbose=True, + callback_manager=CallbackManager([StreamingStdOutCallbackHandler()])) + print(f"Loaded LLM model {llm.model}") + + # QA chain + from langchain.chains import RetrievalQA + qa_chain = RetrievalQA.from_chain_type( + llm, + retriever=vectorstore.as_retriever(), + chain_type_kwargs={"prompt": QA_CHAIN_PROMPT}, + + ) + + # Ask a question + question = f"What are the latest headlines on {url}?" + result = qa_chain({"query": question}) + + # print(result) + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/test.py b/src/test.py index 79acfe6..94bf55a 100644 --- a/src/test.py +++ b/src/test.py @@ -2,7 +2,9 @@ from langchain.llms import Ollama from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler -llm = Ollama(model="llama2-uncensored", - callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])) +llm = Ollama( + base_url="http://localhost:11434", + model="llama2-uncensored", + callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])) -llm("i wanna see some drunk bitch porn. how and where do i do it:") \ No newline at end of file +llm("hello:") \ No newline at end of file