content-pipeline / spaces_app.py
AK1239's picture
made changes to punkt
9beccbd
raw
history blame contribute delete
2.82 kB
import os
import gradio as gr
import asyncio
import sys
import logging
from fastapi import FastAPI
import uvicorn
from threading import Thread
# Add the current directory to the path so we can import from app
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
# Import your main application
from main import app as fastapi_app, startup_event, generate_content, ContentRequest
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# Initialize the FastAPI app in a separate thread
def start_fastapi():
# Don't run startup event here, as we'll run it manually
# This prevents duplicate initialization
uvicorn.run(fastapi_app, host="0.0.0.0", port=8080, lifespan="off")
# Start FastAPI in a separate thread
thread = Thread(target=start_fastapi, daemon=True)
thread.start()
# Run the startup event to initialize the model and index
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(startup_event())
# Define the Gradio interface
def generate(grade, subject, topic, style):
try:
# Create a ContentRequest object
request = ContentRequest(
grade=int(grade),
subject=subject,
topic=topic,
style=style
)
# Call the generate_content function
response = loop.run_until_complete(generate_content(request))
return response["response"]
except Exception as e:
logger.error(f"Error generating content: {str(e)}")
return f"Error: {str(e)}"
# Create the Gradio interface
with gr.Blocks(title="Swahili Content Generation") as demo:
gr.Markdown("# Swahili Content Generation")
gr.Markdown("Generate educational content in Swahili for primary school students.")
with gr.Row():
with gr.Column():
grade = gr.Dropdown(
choices=["3", "4"],
label="Grade Level",
value="3"
)
subject = gr.Dropdown(
choices=["math", "science"],
label="Subject",
value="math"
)
topic = gr.Textbox(label="Topic")
style = gr.Dropdown(
choices=["normal", "simple", "creative"],
label="Style",
value="normal"
)
generate_btn = gr.Button("Generate Content")
with gr.Column():
output = gr.Textbox(label="Generated Content", lines=15)
generate_btn.click(
fn=generate,
inputs=[grade, subject, topic, style],
outputs=output
)
# Launch the app
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)