apilux / app.py
prnvtripathi14's picture
Update app.py to add logging
d5f7564 verified
raw
history blame
3.71 kB
import logging
import json
from transformers import pipeline
import gradio as gr
# Configure logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# Load the model with explicit logging
try:
model_name = "google/flan-t5-base"
logger.info(f"Attempting to load model: {model_name}")
generator = pipeline("text2text-generation", model=model_name)
logger.info("Model loaded successfully")
except Exception as model_load_error:
logger.error(f"Failed to load model: {model_load_error}")
generator = None
def generate_test_cases(method, url, headers, payload=""):
try:
# Log input parameters
logger.info(f"Generating test cases for:")
logger.info(f"Method: {method}")
logger.info(f"URL: {url}")
logger.info(f"Headers: {headers}")
logger.info(f"Payload: {payload}")
# Validate inputs
if not method or not url:
logger.warning("Method or URL is missing")
return "Error: Method and URL are required"
# Attempt to parse headers and payload as JSON
try:
headers_dict = json.loads(headers) if headers else {}
payload_dict = json.loads(payload) if payload else {}
except json.JSONDecodeError as json_error:
logger.error(f"JSON parsing error: {json_error}")
return f"JSON Parsing Error: {json_error}"
# Prepare the prompt
prompt = f"""
Generate comprehensive API test cases:
Method: {method}
URL: {url}
Headers: {headers_dict}
Payload: {payload_dict}
Include:
- Happy path scenarios
- Negative test cases
- Performance test considerations
- Boundary condition tests
- Error handling scenarios
"""
# Check if generator is available
if generator is None:
logger.error("Model generator is not initialized")
return "Error: Model generator not initialized"
# Generate test cases
logger.info("Attempting to generate test cases")
try:
response = generator(prompt, max_length=500)
generated_text = response[0]['generated_text']
logger.info("Test cases generated successfully")
logger.debug(f"Generated Text: {generated_text}")
return generated_text
except Exception as generation_error:
logger.error(f"Test case generation error: {generation_error}")
return f"Error generating test cases: {generation_error}"
except Exception as overall_error:
logger.error(f"Unexpected error: {overall_error}")
return f"Unexpected error: {overall_error}"
# Create the Gradio interface
iface = gr.Interface(
fn=generate_test_cases,
inputs=[
gr.Textbox(label="HTTP Method (GET, POST, etc.)", placeholder="e.g., GET, POST"),
gr.Textbox(label="API URL", placeholder="e.g., https://api.example.com/endpoint"),
gr.Textbox(label="Headers (JSON format)", placeholder='e.g., {"Content-Type": "application/json"}'),
gr.Textbox(label="Payload (JSON format)", placeholder='e.g., {"key": "value"}', optional=True),
],
outputs="text",
title="API Test Case Generator",
description="Generate structured test cases for APIs using Hugging Face models."
)
# Main execution
if __name__ == "__main__":
try:
logger.info("Starting Gradio interface")
iface.launch()
except Exception as launch_error:
logger.error(f"Failed to launch Gradio interface: {launch_error}")