Files
patchy631--ai-engineering-hub/motia-content-creation/steps/generate-twitter.step.py
T
2026-07-13 12:37:47 +08:00

68 lines
2.1 KiB
Python

import os
import json
from pydantic import BaseModel, HttpUrl
from datetime import datetime
from dotenv import load_dotenv
from openai import AsyncOpenAI
load_dotenv()
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
openai_client = AsyncOpenAI(api_key=OPENAI_API_KEY)
class GenerateInput(BaseModel):
requestId: str
url: HttpUrl
title: str
content: str
timestamp: int
config = {
'type': 'event',
'name': 'TwitterGenerate',
'description': 'Generates Twitter content',
'subscribes': ['generate-content'],
'emits': ['twitter-schedule'],
'input': GenerateInput.model_json_schema(),
'flows': ['content-generation']
}
async def handler(input, context):
try:
with open("prompts/twitter-prompt.txt", "r", encoding='utf-8') as f:
twitterPromptTemplate = f.read()
twitterPrompt = twitterPromptTemplate.replace('{{title}}', input['title']).replace('{{content}}', input['content'])
context.logger.info("🔄 Twitter content generation started...")
twitter_content = await openai_client.chat.completions.create(
model="gpt-4o",
messages=[{'role': 'user', 'content': twitterPrompt}],
temperature=0.7,
max_tokens=2000,
response_format={'type': 'json_object'}
)
try:
twitter_content = json.loads(twitter_content.choices[0].message.content)
except Exception:
twitter_content = {'text': twitter_content.choices[0].message.content}
context.logger.info(f"🎉 Twitter content generated successfully!")
await context.emit({
'topic': 'twitter-schedule',
'data': {
'requestId': input['requestId'],
'url': input['url'],
'title': input['title'],
'content': twitter_content,
'generatedAt': datetime.now().isoformat(),
'originalUrl': input['url']
}
})
except Exception as e:
context.logger.error(f"❌ Content generation failed: {e}")
raise e