Spaces:
Running
Running
import gradio as gr | |
import os | |
import requests | |
from langchain_community.document_loaders import WebBaseLoader | |
from langchain_text_splitters import RecursiveCharacterTextSplitter | |
from langchain_community.embeddings import HuggingFaceEmbeddings | |
from langchain_community.vectorstores import FAISS | |
from langchain.chains import RetrievalQA | |
from langchain.chat_models import ChatOpenAI | |
# β Read OpenRouter API key from HF secret | |
OPENROUTER_API_KEY = os.environ.get("ArjunHF") | |
class OpenRouterChatModel(ChatOpenAI): | |
def __init__(self, **kwargs): | |
super().__init__( | |
openai_api_base="https://openrouter.ai/api/v1", | |
openai_api_key=OPENROUTER_API_KEY, | |
model_name="mistralai/mistral-small-3.2-24b-instruct:free", # mistralai/mistral-small-3.2-24b-instruct:free # deepseek/deepseek-r1-0528:free | |
**kwargs | |
) | |
def qa_on_url(url, question): | |
try: | |
loader = WebBaseLoader(url) | |
docs = loader.load() | |
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100) | |
split_docs = splitter.split_documents(docs) | |
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") | |
vectordb = FAISS.from_documents(split_docs, embeddings) | |
retriever = vectordb.as_retriever() | |
llm = OpenRouterChatModel(temperature=0.2) | |
qa_chain = RetrievalQA.from_chain_type(llm, retriever=retriever) | |
return qa_chain.run(question) | |
except Exception as e: | |
return f"β Error: {e}" | |
iface = gr.Interface( | |
fn=qa_on_url, | |
inputs=[gr.Textbox(label="Enter Web URL"), gr.Textbox(label="Your Question")], | |
outputs="text", | |
title="π Ask Questions About Any Webpage (Mistral 3.2 via OpenRouter + LangChain)", | |
description="β οΈ This may take 10β20 seconds depending on the page length and LLM response time. Please be patient!" | |
) | |
if __name__ == "__main__": | |
iface.launch() |