File size: 2,529 Bytes
d5e59b9
d061bf7
d5e59b9
867d897
771138c
867d897
 
d5e59b9
867d897
 
 
 
771138c
 
f4e6ad7
867d897
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
771138c
867d897
 
771138c
37f9ca4
 
771138c
4705296
a864674
d061bf7
37f9ca4
867d897
 
d061bf7
867d897
 
 
 
d061bf7
867d897
 
 
d061bf7
867d897
d5e59b9
867d897
 
d5e59b9
867d897
d5e59b9
867d897
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
import os
import json
import pandas as pd
from docx import Document
from PyPDF2 import PdfReader
from huggingface_hub import InferenceClient
import gradio as gr

# Retrieve Hugging Face API key from environment variable (secret)
API_KEY = os.getenv("APIHUGGING")
if not API_KEY:
    raise ValueError("Hugging Face API key not found. Please set the 'APIHUGGING' secret.")

# Initialize Hugging Face Inference Client
client = InferenceClient(api_key=API_KEY, model="Qwen/Qwen2.5-Coder-32B-Instruct")

# Function to extract text from various file types
def extract_file_content(file_path):
    _, file_extension = os.path.splitext(file_path.name)
    if file_extension.lower() in [".txt"]:
        return file_path.read().decode("utf-8")
    elif file_extension.lower() in [".csv"]:
        df = pd.read_csv(file_path)
        return df.to_string(index=False)
    elif file_extension.lower() in [".json"]:
        data = json.load(file_path)
        return json.dumps(data, indent=4)
    elif file_extension.lower() in [".pdf"]:
        reader = PdfReader(file_path)
        text = ""
        for page in reader.pages:
            text += page.extract_text()
        return text
    elif file_extension.lower() in [".docx"]:
        doc = Document(file_path)
        return "\n".join([para.text for para in doc.paragraphs])
    else:
        return "Unsupported file type."

# Function to interact with the Hugging Face model
def get_bot_response(file, prompt):
    try:
        # Extract content from the uploaded file
        file_content = extract_file_content(file)

        # Prepare input for the model
        input_text = f"{prompt}\n\nFile Content:\n{file_content}"

        # Call Hugging Face API for text generation
        response = client.text_generation(prompt=input_text, max_new_tokens=10000)

        return response
    except Exception as e:
        return f"Error: {str(e)}"

# Gradio Interface
with gr.Blocks() as app:
    gr.Markdown("# πŸ“ AI File Chat with Hugging Face πŸš€")
    gr.Markdown("Upload any file and ask the AI a question based on the file's content!")

    with gr.Row():
        file_input = gr.File(label="Upload File")
        prompt_input = gr.Textbox(label="Enter your question", placeholder="Ask something about the uploaded file...")

    output = gr.Textbox(label="AI Response")

    submit_button = gr.Button("Submit")
    submit_button.click(get_bot_response, inputs=[file_input, prompt_input], outputs=output)

# Launch the Gradio app
if __name__ == "__main__":
    app.launch()