Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import json | |
| from llama_cpp import Llama | |
| import os | |
| from huggingface_hub import hf_hub_download | |
| # Global variable to store the model | |
| llm = None | |
| def load_model(): | |
| """Load the llama.cpp model""" | |
| global llm | |
| try: | |
| # You can replace this with any GGUF model from Hugging Face | |
| # For example, using a small model for demonstration | |
| model_name = "microsoft/DialoGPT-medium" | |
| # For now, we'll use a local model path or download one | |
| # This is a placeholder - you'll need to specify the actual model | |
| print("Loading llama.cpp model...") | |
| # Initialize with basic settings | |
| # Note: You'll need to provide an actual GGUF model file | |
| # llm = Llama( | |
| # model_path="path/to/your/model.gguf", | |
| # n_ctx=2048, | |
| # n_threads=2, | |
| # verbose=False | |
| # ) | |
| print("Model loaded successfully!") | |
| return "Model loaded successfully!" | |
| except Exception as e: | |
| print(f"Error loading model: {e}") | |
| return f"Error loading model: {e}" | |
| def text_to_json(input_text, max_tokens=512, temperature=0.7): | |
| """Convert plain text to structured JSON using llama.cpp""" | |
| global llm | |
| if llm is None: | |
| return {"error": "Model not loaded. Please load the model first."} | |
| try: | |
| # Create a prompt for JSON generation | |
| prompt = f"""Convert the following text into a structured JSON format. Extract key information and organize it logically: | |
| Text: {input_text} | |
| JSON:""" | |
| # Generate response using llama.cpp | |
| response = llm( | |
| prompt, | |
| max_tokens=max_tokens, | |
| temperature=temperature, | |
| stop=["```", "\n\n\n"], | |
| echo=False | |
| ) | |
| generated_text = response['choices'][0]['text'].strip() | |
| # Try to parse as JSON to validate | |
| try: | |
| parsed_json = json.loads(generated_text) | |
| return json.dumps(parsed_json, indent=2) | |
| except json.JSONDecodeError: | |
| # If not valid JSON, return as a structured attempt | |
| return generated_text | |
| except Exception as e: | |
| return f"Error generating JSON: {str(e)}" | |
| def demo_without_model(input_text): | |
| """Demo function that works without loading a model""" | |
| try: | |
| # Simple rule-based JSON conversion for demonstration | |
| words = input_text.strip().split() | |
| # Create a basic JSON structure | |
| result = { | |
| "input_text": input_text, | |
| "word_count": len(words), | |
| "words": words, | |
| "character_count": len(input_text), | |
| "sentences": input_text.split('.'), | |
| "metadata": { | |
| "processed_by": "llama.cpp demo", | |
| "timestamp": "demo_mode" | |
| } | |
| } | |
| return json.dumps(result, indent=2) | |
| except Exception as e: | |
| return f"Error processing text: {str(e)}" | |
| # Create Gradio interface | |
| with gr.Blocks(title="Plain Text to JSON with llama.cpp") as demo: | |
| gr.Markdown("# Plain Text to JSON Converter") | |
| gr.Markdown("Convert plain text into structured JSON format using llama.cpp") | |
| with gr.Tab("Text to JSON"): | |
| with gr.Row(): | |
| with gr.Column(): | |
| input_text = gr.Textbox( | |
| label="Input Text", | |
| placeholder="Enter your text here...", | |
| lines=5 | |
| ) | |
| with gr.Row(): | |
| max_tokens = gr.Slider( | |
| minimum=50, | |
| maximum=1000, | |
| value=512, | |
| label="Max Tokens" | |
| ) | |
| temperature = gr.Slider( | |
| minimum=0.1, | |
| maximum=1.0, | |
| value=0.7, | |
| label="Temperature" | |
| ) | |
| convert_btn = gr.Button("Convert to JSON", variant="primary") | |
| demo_btn = gr.Button("Demo (No Model)", variant="secondary") | |
| with gr.Column(): | |
| output_json = gr.Textbox( | |
| label="Generated JSON", | |
| lines=10, | |
| interactive=False | |
| ) | |
| with gr.Tab("Model Management"): | |
| load_btn = gr.Button("Load Model", variant="primary") | |
| model_status = gr.Textbox( | |
| label="Model Status", | |
| value="Model not loaded", | |
| interactive=False | |
| ) | |
| gr.Markdown(""" | |
| ### Instructions: | |
| 1. Click "Load Model" to initialize llama.cpp (requires a GGUF model file) | |
| 2. Use "Demo (No Model)" for basic functionality without loading a model | |
| 3. For full functionality, you need to provide a GGUF model file | |
| ### Notes: | |
| - This space uses llama.cpp for efficient CPU inference | |
| - Models should be in GGUF format | |
| - Adjust max_tokens and temperature for different outputs | |
| """) | |
| # Event handlers | |
| convert_btn.click( | |
| fn=text_to_json, | |
| inputs=[input_text, max_tokens, temperature], | |
| outputs=output_json | |
| ) | |
| demo_btn.click( | |
| fn=demo_without_model, | |
| inputs=input_text, | |
| outputs=output_json | |
| ) | |
| load_btn.click( | |
| fn=load_model, | |
| outputs=model_status | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |