Spaces:
Build error
Build error
| import os | |
| import gradio as gr | |
| from huggingface_hub import InferenceClient | |
| import requests | |
| import json | |
| import pytesseract | |
| from PIL import Image | |
| import PyPDF2 | |
| from io import BytesIO | |
| import docx | |
| import ntpath | |
| # Initialize clients | |
| API_KEY = os.environ.get("HF_API_KEY") | |
| client = InferenceClient(token=API_KEY) | |
| def process_file(filepath): | |
| # Handle different file types and extract text. | |
| if not filepath: | |
| return "" | |
| ext = os.path.splitext(filepath)[1].lower() | |
| try: | |
| if ext in ['.png', '.jpg', '.jpeg']: | |
| image = Image.open(filepath) | |
| text = pytesseract.image_to_string(image) | |
| return f"IMAGE CONTENT:\n{text}" | |
| elif ext == '.pdf': | |
| pdf_reader = PyPDF2.PdfReader(filepath) | |
| text = "\n".join(page.extract_text() for page in pdf_reader.pages) | |
| return f"PDF CONTENT:\n{text}" | |
| elif ext == '.docx': | |
| doc = docx.Document(filepath) | |
| text = "\n".join(para.text for para in doc.paragraphs) | |
| return f"DOCUMENT CONTENT:\n{text}" | |
| else: | |
| return "Unsupported file type" | |
| except Exception as e: | |
| print(f"File processing error: {e}") | |
| return "Error reading file" | |
| def chat(message, history, filepath): | |
| file_content = process_file(filepath) if filepath else "" | |
| full_prompt = f""" | |
| {file_content} | |
| User Message: {message} | |
| Please respond considering both the message and any attached documents: | |
| """ | |
| generate_kwargs = dict( | |
| temperature=0.7, | |
| max_new_tokens=2000, | |
| top_p=0.95, | |
| repetition_penalty=1.2, | |
| ) | |
| # Generate response | |
| stream = client.text_generation( | |
| full_prompt, | |
| stream=True, | |
| details=True, | |
| **generate_kwargs | |
| ) | |
| partial_message = "" | |
| for response in stream: | |
| if response.token.special: | |
| continue | |
| partial_message += response.token.text | |
| yield partial_message | |
| with gr.Blocks(theme="soft") as demo: | |
| gr.Markdown("# DeepSeek-R1 Assistant with File Support") | |
| gr.Markdown("Upload images, PDFs, or docs and chat about them!") | |
| with gr.Row(): | |
| file_input = gr.File(label="Upload File (PDF/Image/Doc)", type="filepath") | |
| chatbot = gr.ChatInterface( | |
| fn=chat, | |
| additional_inputs=[file_input], | |
| type="messages", | |
| examples=[] | |
| ) | |
| demo.launch() | |