Spaces:
Sleeping
Sleeping
import warnings | |
warnings.filterwarnings('ignore') | |
import os | |
import json | |
import requests | |
from IPython.display import Markdown, display | |
import gradio as gr | |
# Attempt to read the OpenAI API key | |
try: | |
with open('mykey.txt', 'r') as file: | |
openai_key = file.read().strip() | |
except FileNotFoundError: | |
raise FileNotFoundError("The file 'mykey.txt' was not found. Please ensure the file exists and contains your OpenAI key.") | |
if not openai_key: | |
raise ValueError("OpenAI API key is empty. Please provide a valid API key in 'mykey.txt'.") | |
# Set environment variables | |
os.environ['OPENAI_API_KEY'] = openai_key | |
os.environ["OPENAI_MODEL_NAME"] = 'gpt-4' | |
from crewai import Agent, Task, Crew | |
import gradio as gr | |
# Define the Agent with improved documentation | |
readability_editor = Agent( | |
role="Blog language expert", | |
goal="Edit a given blog post from the field of AI to improve the readability of the blog.", | |
backstory=( | |
""" | |
You check and edit blog posts which are published on WordPress to improve their readability. | |
While editing, do not change quotes by people. | |
After editing, ensure that the word count is not less than 80% of the original content. | |
The blog post content is provided as: {blog} | |
""" | |
), | |
allow_delegation=False, | |
verbose=True | |
) | |
# Define the Task with clearer instructions | |
read = Task( | |
description=( | |
""" | |
1. Retain at least 80% of the blog's original content while removing unnecessary repetition. | |
2. Ensure over 90% of the article is written in active voice. | |
3. Ensure at least 15% of the sentences contain transition words (e.g., but, also, because, however, furthermore, therefore, meanwhile). | |
4. Correct language, word usage, and grammar. | |
5. If three consecutive sentences start with the same word, revise at least one so they do not all start identically. | |
6. Break long sentences so that no sentence is longer than 20 words. | |
7. Split long paragraphs so that no paragraph is longer than 80 words. | |
8. Adjust headings so no section is longer than 300 words or shorter than 100 words. Add or remove headings if needed. | |
9. Each section should have an appropriate heading (without numbers). | |
""" | |
), | |
expected_output="A well-written blog post in markdown format, ready for publication.", | |
agent=readability_editor, | |
) | |
crew = Crew( | |
agents=[readability_editor], | |
tasks=[read], | |
verbose=True | |
) | |
def improve_blog_post(blog_content: str) -> str: | |
# Validate the input | |
if not blog_content or len(blog_content.strip()) == 0: | |
return "Please provide some blog content to process." | |
# Run the pipeline | |
result = crew.kickoff(inputs={"blog": blog_content}) | |
markdown_content = result.raw.strip("```markdown").strip("```").strip() | |
return markdown_content | |
# Create a Gradio Interface | |
# Input: Text area for the blog post | |
# Output: Markdown display of the improved blog | |
iface = gr.Interface( | |
fn=improve_blog_post, | |
inputs=gr.Textbox(lines=20, placeholder="Paste your blog content here..."), | |
outputs=gr.Markdown(), | |
title="AI Blog Readability Improver", | |
description=( | |
"Paste your blog content into the text box below and click 'Submit'. " | |
"The agent will improve the readability following Yoast-like guidelines, ensuring active voice, proper headings, and more." | |
), | |
allow_flagging="never" | |
) | |
# Launch the interface (this will be used in Hugging Face Spaces) | |
if __name__ == "__main__": | |
iface.launch(server_name="0.0.0.0", server_port=7860) | |