Spaces:
Runtime error
Runtime error
File size: 3,629 Bytes
91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 91d06ee 3dd6e28 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
#!/usr/bin/env python
# coding: utf-8
# # DeepSeek R1 locally with Ollama and RAG application
#
# Install, set up, and run DeepSeek-R1 locally with Ollama and build a simple RAG application.
import subprocess
# ## Step 1: Install dependencies
subprocess.run(["pip", "install", "ollama", "langchain", "chromadb", "gradio", "-U", "langchain-community", "pymupdf", "nbconvert", "jupyter"])
# ## Step 2: Test the response with DeepSeek-R1
import ollama
response = ollama.chat(
model="deepseek-r1",
messages=[
{"role": "user", "content": "Explain Newton's second law of motion"},
],
)
print(response["message"]["content"])
# ## Step 3: RAG Pipeline with DeepSeek-R1
import gradio as gr
from langchain_community.document_loaders import PyMuPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
import re
# Function to process PDFs
def process_pdf(pdf_file):
if pdf_file is None:
return None, None, None
loader = PyMuPDFLoader(pdf_file.name)
data = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
chunks = text_splitter.split_documents(data)
embeddings = OllamaEmbeddings(model="deepseek-r1")
vectorstore = Chroma.from_documents(
documents=chunks, embedding=embeddings, persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever()
return text_splitter, vectorstore, retriever
# Function to process text
def process_text(text_data):
if not text_data:
return None, None, None
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
chunks = text_splitter.create_documents([text_data])
embeddings = OllamaEmbeddings(model="deepseek-r1")
vectorstore = Chroma.from_documents(
documents=chunks, embedding=embeddings, persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever()
return text_splitter, vectorstore, retriever
# Combining retrieved document chunks
def combine_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
# LLM function
def ollama_llm(question, context):
formatted_prompt = f"Question: {question}\n\nContext: {context}"
response = ollama.chat(
model="deepseek-r1",
messages=[{"role": "user", "content": formatted_prompt}],
)
response_content = response["message"]["content"]
# Remove <think> tags
cleaned_response = re.sub(r"<think>.*?</think>", "", response_content, flags=re.DOTALL).strip()
return cleaned_response # Returning cleaned response
# RAG Chain
def rag_chain(question, retriever):
retrieved_docs = retriever.invoke(question)
formatted_content = combine_docs(retrieved_docs)
return ollama_llm(question, formatted_content)
# Gradio function
def ask_question(pdf_file, question):
if pdf_file is None:
return "Please upload a document."
text_splitter, vectorstore, retriever = process_pdf(pdf_file)
if retriever is None:
return "Failed to process document."
result = rag_chain(question, retriever)
return result
# Gradio Interface
interface = gr.Interface(
fn=ask_question,
inputs=[
gr.File(label="Upload document (PDF)"),
gr.Textbox(label="Ask a question"),
],
outputs=gr.Textbox(label="Answer"),
title="DeepSeek-R1 RAG App",
description="Upload a document and ask questions about its content.",
)
# Launch the Gradio app
if __name__ == "__main__":
interface.launch(share=True)
|