File size: 3,926 Bytes
7a58110 31f5d1f 6b3696a 31f5d1f b864045 553dd80 b4b980c 31f5d1f b4b980c 8f528d9 b4b980c f49b96e feb4867 48a98b7 feb4867 f49b96e feb4867 48a98b7 feb4867 b3fb41e f49b96e f4ea50e f49b96e b4b980c b3fb41e b864045 b4b980c 7a58110 8f528d9 7a58110 b864045 b3015a7 b4b980c 6b3696a 7a58110 31f5d1f b3015a7 b864045 b3015a7 b864045 b4b980c b3015a7 28cb864 b4b980c 7a58110 b3015a7 b864045 b3015a7 b4b980c b864045 7a58110 31f5d1f 6b3696a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
import requests
import io
from PIL import Image
import gradio as gr
import os
# Assuming you have your API tokens set in environment variables
ZEPHYR_API_TOKEN = os.getenv("HF_API_TOKEN")
SD_API_TOKEN = os.getenv("HF_API_TOKEN")
if not ZEPHYR_API_TOKEN or not SD_API_TOKEN:
raise ValueError("API tokens not found. Please set the ZEPHYR_API_TOKEN and HF_API_TOKEN environment variables.")
ZEPHYR_API_URL = "https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta"
SD_API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-xl-base-1.0"
def query_zephyr(linkedin_text):
# Constructing a single string prompt that combines the instruction with the LinkedIn post text
prompt = f"Prepare a prompt for Stable Diffusion for the following LinkedIn post:"
headers = {
"Authorization": f"Bearer {ZEPHYR_API_TOKEN}",
"Content-Type": "application/json",
}
# The `inputs` field now directly contains the prompt string
payload = {
"role": "system", "content": prompt,
"role": "user", "content": linkedin_text
}
response = requests.post(ZEPHYR_API_URL, headers=headers, json=payload)
if response.status_code == 200:
return response.json()
else:
print(response.text) # To get more insight into what went wrong
raise Exception(f"Failed to query Zephyr model, status code: {response.status_code}")
def generate_image_from_prompt(prompt, negative_prompt, guidance_scale, width, height, num_inference_steps):
headers = {"Authorization": f"Bearer {SD_API_TOKEN}"}
payload = {
"inputs": prompt,
"parameters": {
"guidance_scale": guidance_scale,
"width": width,
"height": height,
"num_inference_steps": num_inference_steps,
},
}
if negative_prompt: # Add negative prompt if provided
payload["parameters"]["negative_prompt"] = negative_prompt
response = requests.post(SD_API_URL, headers=headers, json=payload)
image_bytes = response.content
image = Image.open(io.BytesIO(image_bytes))
return image
def generate_image_from_linkedin_text(linkedin_text, negative_prompt, guidance_scale, width, height, num_inference_steps):
# Generate a prompt from the LinkedIn text using Zephyr
zephyr_response = query_zephyr(linkedin_text)
if zephyr_response and isinstance(zephyr_response, list):
generated_prompt = zephyr_response[0].get("generated_text", "")
else:
raise ValueError("Unexpected response format from Zephyr model.")
# Use the generated prompt to create an image with Stable Diffusion
if generated_prompt:
image = generate_image_from_prompt(generated_prompt, negative_prompt, guidance_scale, width, height, num_inference_steps)
return image, generated_prompt
else:
raise ValueError("Failed to generate a prompt from the LinkedIn text.")
iface = gr.Interface(
fn=generate_image_from_linkedin_text,
inputs=[
gr.Textbox(label="LinkedIn Message", placeholder="Enter LinkedIn message here..."),
gr.Textbox(label="Negative Prompt", placeholder="Enter a negative prompt here (optional)..."),
gr.Slider(label="Guidance Scale", minimum=1, maximum=20, step=0.1, value=7.5),
gr.Slider(label="Width", minimum=768, maximum=1024, step=1, value=1024),
gr.Slider(label="Height", minimum=768, maximum=1024, step=1, value=768),
gr.Slider(label="Number of Inference Steps", minimum=20, maximum=50, step=1, value=30)
],
outputs=[
gr.Image(type="pil"),
gr.Label(label="Generated Prompt")
],
title="Generate Images from LinkedIn Messages",
description="Enter a LinkedIn message to generate a creative prompt with Zephyr, which is then used to generate an image with Stable Diffusion. Image parameters can be adjusted."
)
iface.launch()
|