smgp / src /main.py
muhammadmaazuddin's picture
feat: working
ed02112
import asyncio
from agents import Runner, SQLiteSession, Agent, RunContextWrapper
from _agents import content_agent, WebInspectorAgent, media_agent
from pydantic import BaseModel, Field, ConfigDict
from model import get_model
from typing import Optional
import nest_asyncio
import logfire
from langfuse import get_client
import shutil
from typing import Any
import logging
logging.basicConfig(level=logging.INFO)
# set_tracing_disabled(disabled=True)
# set_tracing_disabled(disabled=True)
nest_asyncio.apply()
logfire.configure(
service_name='smpg_agent',
send_to_logfire=False,
)
logfire.instrument_openai_agents()
langfuse = get_client()
# Verify connection
if langfuse.auth_check():
print("Langfuse client is authenticated and ready!")
else:
print("Authentication failed. Please check your credentials and host.")
class AgentContext(BaseModel):
user_input: Optional[str] = Field(default=None,description="The input provided by the user to the agent.")
post_content: Optional[str] = Field(default=None,description="The generated content for the post.")
raw_text: Optional[str] = Field(default=None,description="Raw text extracted from web pages.")
model_config= ConfigDict(extra='forbid')
def media_post_prompt(context: RunContextWrapper, agent: Agent):
return """You are the Post Generation Agent for Social Media.
Your task is to coordinate multiple agents to produce a complete social media post.
You can execute the following tasks:
- Content Generation
- Media Generation
Steps for Generating Content:
1. Extract website text using the Web Inspector Tool.
2. Provide the extracted text along with the user's brief to the Content Tool to generate engaging, platform-specific post text.
Steps for Generating Media:
1. Extract key text and theme colors from the website.
2. Provide the generated post content (do not update use same as generated), the theme colors, user's brief, and the design brief to the Media Tool.
Final Step:
- Combine all outputs into a coherent, platform-ready social media post.
- Return a full report to the user, including the generated content, images, and any design details.
Rules:
- Do not generate text or media yourself.
- Always follow the steps in order.
- Validate each agent's output before proceeding to the next step.
- Ask the user for clarification only if the input is missing or ambiguous.
"""
async def main():
print("Hello from smpg!")
session = SQLiteSession("conversation_123")
agent_context = AgentContext( user_input="Write a LinkedIn post about the importance of AI in modern business strategies." )
social_media_post_gen_agent = Agent(
name="social_media_post_gen_agent",
instructions=media_post_prompt,
tools=[
content_agent.as_tool(
tool_name="content_agent",
tool_description="""Generates engaging social media post content based on user input."""
),
WebInspectorAgent.as_tool(
tool_name="WebInspectorAgent",
tool_description="""Extracts details from a website using given URL, such as visible text content, theme colors etc."""
),
media_agent.as_tool(
tool_name="media_agent",
tool_description="""Generates high-quality, brand-aligned social media images based on the user's brief,
design specifications, and extracted website content (text, colors, and theme).
Follows design guidelines for style, composition, typography, colors, dark/light theme and platform-specific requirements.
"""
)
],
model=get_model('gemini-2.0-flash'),
)
result = await Runner.run(social_media_post_gen_agent,
input="""Create a LinkedIn post for website https://panaversity.org/, tell what they offer in service, can you give the stunning bento grids in middle with logos""" ,
session=session,
context=agent_context,
)
print('-----------------------------session--------------------------')
# print(await session.get_items())
# print(result)
if __name__ == "__main__":
if not shutil.which("npx"):
raise RuntimeError("npx is not installed. Please install it with `npm install -g npx`.")
asyncio.run(main())