import gradio as gr from groq import Groq # Function to validate the API key entered by the user def validate_api_key(api_key): try: # Initialize the Groq client with the provided API key client = Groq(api_key=api_key) # Perform a minimal valid API call response = client.chat.completions.create( model="llama-3.1-70b-versatile", messages=[ {"role": "system", "content": "Validation test for API key."}, {"role": "user", "content": "Hello, world!"} ], temperature=0.1, max_tokens=5, ) if response and response.choices: return True, "API key is valid!" else: return False, "API key validation failed: Empty response." except Exception as e: return False, f"Invalid API key. Error: {str(e)}" # Blog content generation function def generate_blog_content(topic, api_key): client = Groq(api_key=api_key) prompt = f"""Generate a blog post on '{topic}' with the following structure: 1. Create 20 sections, with a FAQs section as the last one. 2. Use
tags for sections, with

for headings and

for content. 3. If there are sub-headings under an

tag, use

for those sub-headings (e.g., in FAQs or where additional structure is needed). 4. Highlight key terms or keywords with tags or tag for clarity and easy to read. 5. Each section should be 150-200 words and directly relate to the topic, with no unnecessary unasked responses. 6. Write in a formal tone suitable for a professional medical audience. 7. Avoid single-word or two word headings (H2 TAG) , make every h2 tag should contain keywords and ensure every paragraph adds informative value. 8. FAQs should address potential reader questions based on the main content. Example:

Overview of [Medical Condition]

Explanation with key terms highlighted...

FAQs

What causes [Medical Condition]?

A clear, accurate answer with relevant terms highlighted. And Keywords should also be highlited to Optime page SEO but dont make it too dense.

How is [Medical Condition] treated?

Explanation of treatment options, with important terms highlighted...

""" try: completion = client.chat.completions.create( model="llama-3.1-70b-versatile", # Groq's Mixtral model messages=[ {"role": "system", "content": "You are a medical content specialist experienced in healthcare writing for patients and medical professionals in India. Your writing should be clear, accurate, and suitable for both educated laypersons and healthcare practitioners."}, {"role": "user", "content": prompt} ], temperature=0.5, max_tokens=8000, ) return completion.choices[0].message.content except Exception as e: return f"Error generating content: {str(e)}" # Callback function for login def on_login(api_key): is_valid, message = validate_api_key(api_key) if is_valid: return api_key, gr.update(visible=False), gr.update(visible=True), gr.Markdown(f"**Success!** {message}") else: return "", gr.update(visible=True), gr.update(visible=False), gr.Markdown(f"**Error!** {message}", visible=True) # Callback function for generating content def on_generate_click(topic, api_key): if not api_key: return "Error: API key not provided.", "" if not topic: return "Please enter a blog topic.", "" content = generate_blog_content(topic, api_key) return content, content # Gradio app with gr.Blocks(title="ArogyaJivan") as demo: # Login Section with gr.Column(visible=True) as login_section: gr.Markdown("## Login to Access the Blog Generator") api_key_input = gr.Textbox(label="Enter your API Key:", type="password") login_button = gr.Button("Login") login_feedback = gr.Markdown(visible=False) gr.Markdown(""" ### How to Get an API Key - Visit [Groq API Key Portal](https://console.groq.com/keys) - Sign up or log in to your account. - Navigate to the **API Keys** section and generate a new key. - Copy the API key and paste it Above. """) # Blog Content Generator Section with gr.Column(visible=False) as blog_section: gr.Markdown("# Arogya Blog Generator") with gr.Column(): topic_input = gr.Textbox(label="Enter your blog topic:") generate_button = gr.Button("Generate Blog Content") with gr.Row(): output_html = gr.Code(label="Generated HTML Content:", language='html') output_preview = gr.HTML(label="Preview:") state = gr.State() # Manage API key state login_button.click( on_login, inputs=api_key_input, outputs=[state, login_section, blog_section, login_feedback] ) generate_button.click( on_generate_click, inputs=[topic_input, state], outputs=[output_html, output_preview] ) demo.launch()