from pydantic_ai.models.openai import OpenAIModel from core.azure import azure_provider from pydantic_ai import Agent from pydantic_ai.settings import ModelSettings async def StructuredOutputAgent(model_name, raw_response, response_format): completion = Agent( model=OpenAIModel(model_name, provider=azure_provider), output_type=response_format ) task_description = f"given the content: {raw_response}, rewrite exactly the structured output writen in content" result = await completion.run(task_description, model_settings=ModelSettings(temperature=0.0, seed=100)) if result is None: raise Exception("No result from get_agent_graph_entities") return result.output async def run_agent(model_name, system_prompt, task_description, response_format): agent = Agent( model=OpenAIModel(model_name, provider=azure_provider), system_prompt=system_prompt, ) result = await agent.run(task_description, model_settings=ModelSettings(temperature=0.5, seed=100)) raw_response = result.output if response_format: return await StructuredOutputAgent(model_name, raw_response, response_format) else: return raw_response def create_system_prompt(role, backstory, goal): return f"""You are {role}. {backstory} \n Your goal is {goal}""" def create_task_prompt(task_description, task_expected_output, response_format, previous_step_output=None): return f"""Let's think step by step to ensure logical and evidence-based reasoning. ## Task: {task_description} ## Context from previous task: {previous_step_output if previous_step_output else "None provided."} Follow this step-by-step plan of action: 1. Understand the problem: Summarize the main context and identify key elements. 2. Break it down: Divide the task into logical sub-steps or components. 3. Gather information: List relevant facts, data, or assumptions (if applicable, search or analyze inputs). 4. Generate options: Explore multiple ideas or paths (e.g., 3-5 alternatives, considering branching paths like in Tree-of-Thoughts). 5. Evaluate: Analyze pros, cons, and feasibility of each option, using self-consistency (generate 2-3 variants if uncertain). 6. Decide and act: Choose the best option and detail an action plan with timelines or responsibilities. 7. Reflect: Evaluate confidence in the response (High/Medium/Low) and explain why; suggest improvements if needed. Output in this structured format: - **Step 1: [Step Title]** [Detailed content]. - **Step 2: [Step Title]** [Detailed content]. ... - **Final Plan of Action:** [Summary of the plan, e.g., in bullets or numbered list]. - **Reflection:** [Evaluation]. Keep the response concise, under 500 tokens. Use evidence-based reasoning and cite sources if available. Expected output: {task_expected_output} Finally, after thinking step by step, answer in this format: {response_format} """