File size: 2,617 Bytes
6a0ec6a
dbbcf50
91561ce
dbbcf50
6d4e0a3
e1e2089
6d4e0a3
 
 
bb29d2e
 
 
e3ecb0f
a808dce
bb29d2e
 
 
e3ecb0f
a6f506b
 
bb29d2e
e3ecb0f
a6f506b
bb29d2e
 
 
a6f506b
 
 
bb29d2e
a808dce
bb29d2e
 
 
 
 
a6f506b
bb29d2e
a6f506b
 
bb29d2e
a6f506b
f3a5662
6d4e0a3
bb29d2e
a808dce
 
bb29d2e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237bccb
bb29d2e
3df9eeb
bb29d2e
811c7ec
bb29d2e
 
 
 
 
 
 
 
 
 
 
 
 
6a0ec6a
 
dbbcf50
 
 
a6f506b
dbbcf50
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
import gradio as gr
from smolagents import CodeAgent, HfApiModel

# Initialize the AI agent
agent = CodeAgent(
    tools=[],
    model=HfApiModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct"),
)

def analyze_content(file_paths, progress=gr.Progress()):
    """Process files and generate comprehensive report with progress tracking"""
    progress(0, desc="Starting analysis...")
    full_content = []
    
    # Read files with progress
    for i, path in enumerate(file_paths):
        progress(i/len(file_paths), f"Reading {path.split('/')[-1]}...")
        try:
            with open(path, 'r', encoding='utf-8') as f:
                content = f.read()
                full_content.append(f"## {path.split('/')[-1]}\n{content}\n")
        except Exception as e:
            return f"Error processing {path}: {str(e)}"

    # Generate report with progress
    progress(0.8, "Analyzing content with AI...")
    report = agent.run(f"""
    Analyze these documents and create a detailed report:
    
    {"".join(full_content)[:10000]}
    
    Report structure:
    1. Executive Summary
    2. Key Findings
    3. Important Patterns
    4. Recommendations
    
    Use professional markdown formatting with headings and bullet points.
    """)
    
    progress(1.0, "Analysis complete!")
    return report

with gr.Blocks() as demo:
    gr.Markdown("# Professional Document Analyzer")
    
    with gr.Row():
        with gr.Column(scale=1):
            file_input = gr.File(
                file_count="multiple",
                file_types=[".txt"],
                label="Upload Documents"
            )
            process_btn = gr.Button("Generate Report", variant="primary")
            status = gr.Textbox(label="Processing Status", interactive=False)
        
        with gr.Column(scale=2, variant="panel"):
            gr.Markdown("## Analysis Report")
            report_output = gr.Markdown(
                elem_classes="report-box",
                label="",
                show_label=False
            )

    @process_btn.click(
        inputs=file_input,
        outputs=[status, report_output]
    )
    def process_files(files):
        if not files:
            return "No files uploaded", ""
        
        file_paths = [f.name for f in files]
        
        def update_progress(progress):
            return lambda p: progress(p)
        
        return (
            gr.Progress().track() |  # Progress indicator
            analyze_content(file_paths)
        )

if __name__ == "__main__":
    demo.launch(
        server_name="0.0.0.0",
        server_port=7860,
        share=True
    )