import json import gradio as gr from llm_output_parser import parse_json, parse_jsons, parse_xml def parse_single_json(text): """Parse a single JSON object from text.""" try: result = parse_json(text) return json.dumps(result, indent=2) except (ValueError, TypeError) as e: return f"Error parsing JSON: {str(e)}" def parse_multiple_jsons(text): """Parse multiple JSON objects from text.""" try: results = parse_jsons(text) formatted_results = [] for i, result in enumerate(results): formatted_results.append(f"JSON {i+1}:\n{json.dumps(result, indent=2)}") return "\n\n".join(formatted_results) except (ValueError, TypeError) as e: return f"Error parsing JSONs: {str(e)}" def parse_xml_to_json(text): """Parse XML from text and convert to JSON format.""" try: result = parse_xml(text) return json.dumps(result, indent=2) except (ValueError, TypeError) as e: return f"Error parsing XML: {str(e)}" def process_text(text, parser_type): """Process text based on selected parser type.""" if not text.strip(): return "Please enter some text to parse." if parser_type == "Single JSON": return parse_single_json(text) elif parser_type == "Multiple JSONs": return parse_multiple_jsons(text) elif parser_type == "XML": return parse_xml_to_json(text) else: return "Invalid parser type selected." # Example texts for the interface example_json = """ ```json { "name": "John Doe", "age": 30, "isEmployed": true, "address": { "street": "123 Main St", "city": "Anytown" } } ``` """ example_multiple_jsons = """ Here are some JSON objects: ```json {"id": 1, "name": "Product A"} ``` And another one: ```json {"id": 2, "name": "Product B"} ``` """ example_xml = """ ```xml John Doe 30
123 Main St Anytown
``` """ # Create Gradio interface with gr.Blocks(title="LLM Output Parser") as demo: gr.Markdown("# LLM Output Parser") gr.Markdown("Extract structured data from text containing JSON or XML") with gr.Row(): with gr.Column(): input_text = gr.Textbox( label="Input Text", placeholder="Paste text containing JSON or XML here...", lines=15, ) parser_type = gr.Radio( choices=["Single JSON", "Multiple JSONs", "XML"], label="Parser Type", value="Single JSON", ) parse_button = gr.Button("Parse", variant="primary") with gr.Column(): output_text = gr.Textbox(label="Parsed Result", lines=15) # Examples with gr.Accordion("Example Inputs", open=False): gr.Examples( examples=[ [example_json, "Single JSON"], [example_multiple_jsons, "Multiple JSONs"], [example_xml, "XML"], ], inputs=[input_text, parser_type], ) # Set up event handler parse_button.click( fn=process_text, inputs=[input_text, parser_type], outputs=output_text ) gr.Markdown( "## How to use\n" "1. Paste text containing JSON or XML\n" "2. Select the parser type\n" "3. Click 'Parse' to extract structured data" ) if __name__ == "__main__": demo.launch()