Spaces:
Sleeping
Sleeping
File size: 5,255 Bytes
59b4d60 1ba80b7 bc0779e 1ba80b7 bc0779e 62b8fca 1a8c15c bc0779e 1ba80b7 dd7662a 1ba80b7 82a712d 1ba80b7 0388a2a 3243e28 1ba80b7 1a8c15c c56570d 1ba80b7 c56570d 1ba80b7 1a8c15c bc0779e 1ba80b7 bc0779e 1ba80b7 bc0779e 1ba80b7 |
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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
import os
import subprocess
import sys
# Function to install missing dependencies
def install_dependencies():
try:
# Check if langchain is installed
import langchain
except ImportError:
# Install langchain if not found
print("Installing langchain...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "langchain"])
try:
# Check if other dependencies are installed
import streamlit
import fastapi
import requests
import datasets
import pinecone
import sentence_transformers
import dotenv
import PIL
except ImportError as e:
# Install missing dependencies
print(f"Installing missing dependency: {e.name}")
subprocess.check_call([sys.executable, "-m", "pip", "install", e.name])
# Install dependencies before proceeding
install_dependencies()
import os
import requests
import streamlit as st
from fastapi import FastAPI, HTTPException
from langchain.chains import ConversationalRetrievalChain
from langchain.chat_models import ChatAnthropic
from langchain.vectorstores import Pinecone
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
from langchain.memory import ConversationBufferMemory
from datasets import load_dataset
from dotenv import load_dotenv
from pinecone import Pinecone
from PIL import Image
from langchain_community.vectorstores import Pinecone
from pinecone import Pinecone as PineconeClient
from anthropic import Anthropic
# Load environment variables
load_dotenv()
# Initialize FastAPI
app = FastAPI()
# API Keys
import os
from dotenv import load_dotenv
PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")
PINECONE_ENV = os.getenv("PINECONE_ENV")
INDEX_NAME = "agenticrag"
if not PINECONE_API_KEY:
raise ValueError("Pinecone API Key is missing. Please set it in environment variables.")
#Initialize Hugging Face Embeddings
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vector_store = Pinecone.from_existing_index(index_name=INDEX_NAME, embedding=embeddings)
# Load LLM & Memory
class ChatAnthropicWithTokenCount(ChatAnthropic):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.anthropic_client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
def count_tokens(self, text: str) -> int:
return self.anthropic_client.count_tokens(text)
llm = ChatAnthropicWithTokenCount(
model="claude-2",
temperature=0,
ANTHROPIC_API_KEY=os.getenv("ANTHROPIC_API_KEY")
)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# Build RAG Chain
qa_chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=vector_store.as_retriever(),
memory=memory,
return_source_documents=True
)
@app.post("/query/")
async def query_agent(query: str):
try:
response = qa_chain.run(query)
return {"response": response}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/")
def read_root():
return {"message": "Welcome to the Agentic RAG Legal Assistant!"}
# Load dataset
dataset = load_dataset("c4lliope/us-congress")
chunks = [str(text) for text in dataset['train']['text']]
embedding_vectors = embeddings.embed_documents(chunks)
pinecone_data = [(str(i), embedding_vectors[i], {"text": chunks[i]}) for i in range(len(chunks))]
vector_store.upsert(vectors=pinecone_data)
# Streamlit UI
st.set_page_config(page_title="LegalAI Assistant", layout="wide")
bg_image = "https://source.unsplash.com/1600x900/?law,court"
sidebar_image = "https://source.unsplash.com/400x600/?law,justice"
st.markdown(
f"""
<style>
.stApp {{
background: url({bg_image}) no-repeat center center fixed;
background-size: cover;
}}
.sidebar .sidebar-content {{
background: url({sidebar_image}) no-repeat center center;
background-size: cover;
}}
</style>
""",
unsafe_allow_html=True,
)
st.sidebar.title("βοΈ Legal AI Assistant")
st.sidebar.markdown("Your AI-powered legal research assistant.")
st.markdown("# ποΈ Agentic RAG Legal Assistant")
st.markdown("### Your AI-powered assistant for legal research and case analysis.")
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
user_query = st.text_input("π Enter your legal question:", "")
API_URL = "http://127.0.0.1:8000/query/"
if st.button("Ask AI") and user_query:
with st.spinner("Fetching response..."):
try:
response = requests.post(API_URL, json={"query": user_query})
response_json = response.json()
ai_response = response_json.get("response", "Error: No response received.")
except Exception as e:
ai_response = f"Error: {e}"
st.session_state.chat_history.append((user_query, ai_response))
st.markdown("---")
st.markdown("### π Chat History")
for user_q, ai_r in st.session_state.chat_history:
st.markdown(f"**π§ββοΈ You:** {user_q}")
st.markdown(f"**π€ AI:** {ai_r}")
st.markdown("---")
st.markdown("---")
st.markdown("π Powered by Anthropic Claude, Pinecone, and LangChain.")
|