ai-narrator / generate_description.py
Mr-Geo's picture
Update generate_description.py
c298e60 verified
import os
import asyncio
from anthropic import AsyncAnthropic
ANTHROPIC_API_KEY = os.getenv('ANTHROPIC_API_KEY')
def get_politeness_prompt(politeness_level):
prompts = {
1: "Be extremely formal and sophisticated, using the most refined and elegant language possible.",
2: "Be very proper and courteous, offering sincere compliments with graceful language.",
3: "Be warmly professional, using polite and encouraging words.",
4: "Be friendly and positive, maintaining an upbeat and welcoming tone.",
5: "Be conversational and natural, like chatting with a friend.",
6: "Be casual and laid-back, using everyday language.",
7: "Be playful and fun, adding light jokes to the description.",
8: "Be mildly sarcastic, with gentle teasing and witty observations.",
9: "Be cheekily critical, using clever wordplay and humorous jabs.",
10: "Be hilariously snarky, with maximum sass but keeping it playful.",
11: "Ho ho ho! Be jolly and merry like Santa Claus, using festive language and Christmas spirit!"
}
return prompts.get(politeness_level, "Be casual and straightforward, with a balanced tone.")
async def generate_description(image_data, selected_voice_name, description_history, politeness_level=5):
client = AsyncAnthropic(api_key=ANTHROPIC_API_KEY)
try:
politeness_instruction = get_politeness_prompt(politeness_level)
system_prompt = f"""You are {selected_voice_name} and you must describe the image you are given in 15 words or less. {politeness_instruction}
Please use only raw text without any special formatting characters like asterisks."""
print("System prompt:", system_prompt)
async with client.messages.stream(
model="claude-3-haiku-20240307",
max_tokens=100,
temperature=1,
system=system_prompt,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": image_data
}
},
{
"type": "text",
"text": f"As {selected_voice_name}, describe this image in your assigned tone in 15 words or less"
}
]
}
]
) as stream:
description = ""
async for event in stream.text_stream:
print(event)
description += event
yield event
except Exception as e:
print(f"Error generating description: {e}")
yield "Error generating description."