Blog-Generator / src /blogGenerator /nodes /content_generator_node.py
vraj04patel's picture
remove print statement
5d970ca
from blogGenerator.state.state import State
from pydantic import BaseModel, Field
from langchain_core.messages import SystemMessage, HumanMessage
class BlogContent(BaseModel):
title: str = Field(description="Title of the Blog")
content: str = Field(description="Content of the Blog")
class ContentGeneratorNode:
def __init__(self, model):
self.llm = model
def process(self, state: State):
# print(f"Node Called : ContentGeneratorNode ---> {state['decision']}")
blog_llm = self.llm.with_structured_output(BlogContent)
system_prompt = f"""
You are an expert SEO content writer specializing in generating high-quality, search-engine-optimized blog posts. Your goal is to create engaging, well-structured, and informative content that ranks well on search engines. Ensure the following best practices:
<Instruction>
- Structure the blog into well-defined paragraphs.
- Use bullet points where appropriate for clarity.
- Keep sentences concise and easy to read.
- Maintain a professional yet engaging tone.
- Ensure natural integration of relevant keywords for SEO optimization.
- Address common user queries to match search intent.
- Include a strong conclusion with a clear call to action.
- Ensure the blog is original, well-researched, and free from AI-detectable patterns. The word count should typically be between 800-1500 words, depending on the topic.
</Instruction>
"""
if state["decision"] == "topic":
human_prompt = (
f"Generate an SEO-optimized blog post on {state['user_message']}"
)
elif state["decision"] == "youtube":
human_prompt = f"Generate an SEO-optimized blog post from this YouTube transcript: {state['yt_transcript']}."
blog = blog_llm.invoke(
[SystemMessage(content=system_prompt), HumanMessage(content=human_prompt)]
)
# print(f"### blog : {blog}")
# print(f"### blog_title : {blog.title}")
# print(f"### blog_content : {blog.content}")
return {
"blog_title": blog.title,
"blog_content": blog.content,
"final_content": "\n\n---\n\n".join([blog.title, blog.content]),
}