|
|
import gradio as gr |
|
|
import os |
|
|
from huggingface_hub import InferenceClient |
|
|
from langchain_community.document_loaders import PyMuPDFLoader |
|
|
from langchain_text_splitters import RecursiveCharacterTextSplitter |
|
|
from langchain_huggingface import HuggingFaceEmbeddings |
|
|
from langchain_community.vectorstores import FAISS |
|
|
|
|
|
|
|
|
hf_token = os.getenv("HUGGINGFACEHUB_API_TOKEN") |
|
|
client = InferenceClient("google/gemma-2-9b-it", token=hf_token) |
|
|
|
|
|
|
|
|
def initialize_hemdem(): |
|
|
if not os.path.exists("kulliyat.pdf"): |
|
|
return None |
|
|
try: |
|
|
loader = PyMuPDFLoader("kulliyat.pdf") |
|
|
docs = loader.load() |
|
|
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) |
|
|
split_docs = text_splitter.split_documents(docs) |
|
|
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") |
|
|
vector_db = FAISS.from_documents(split_docs, embeddings) |
|
|
return vector_db |
|
|
except Exception as e: |
|
|
print(f"Hata: {e}") |
|
|
return None |
|
|
|
|
|
vector_db = initialize_hemdem() |
|
|
|
|
|
|
|
|
def chat(message, history): |
|
|
if vector_db is None: |
|
|
return "Sistem hatası: 'kulliyat.pdf' bulunamadı." |
|
|
|
|
|
|
|
|
related_docs = vector_db.similarity_search(message, k=3) |
|
|
context = "\n".join([doc.page_content for doc in related_docs]) |
|
|
|
|
|
|
|
|
messages = [ |
|
|
{"role": "system", "content": f"Sen Hemdem-i Gemini-yi Emre'sin. Emre'nin külliyatına dayanarak cevap ver. Dökümanlar: {context}"}, |
|
|
{"role": "user", "content": message} |
|
|
] |
|
|
|
|
|
try: |
|
|
response = "" |
|
|
|
|
|
for message in client.chat_completion( |
|
|
messages, |
|
|
max_tokens=1024, |
|
|
stream=True, |
|
|
): |
|
|
token = message.choices[0].delta.content |
|
|
response += token |
|
|
return response |
|
|
except Exception as e: |
|
|
return f"Bağlantı Hatası: {str(e)}" |
|
|
|
|
|
|
|
|
demo = gr.ChatInterface( |
|
|
fn=chat, |
|
|
title="💜 Hemdem-i Şir", |
|
|
description="Gemma 2 destekli Emre Külliyat Rehberi", |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |