| """Utility to load and parse agent definitions and process specifications from markdown files.""" |
|
|
| import re |
| from pathlib import Path |
| from typing import Dict, Any, Optional, Tuple |
|
|
|
|
| def load_process_specifications(docs_dir: Path) -> Tuple[str, str]: |
| """ |
| Load process description and constraints from markdown files. |
| |
| Args: |
| docs_dir: Directory containing the process specification files |
| |
| Returns: |
| Tuple of (process_description, process_constraints) as strings |
| """ |
| process_desc_path = docs_dir / "process-description.md" |
| process_constraints_path = docs_dir / "process-constraints.md" |
| |
| process_description = "" |
| if process_desc_path.exists(): |
| process_description = process_desc_path.read_text(encoding="utf-8") |
| |
| process_constraints = "" |
| if process_constraints_path.exists(): |
| process_constraints = process_constraints_path.read_text(encoding="utf-8") |
| |
| return process_description, process_constraints |
|
|
|
|
| def load_agent_definition(markdown_path: Path) -> Dict[str, Any]: |
| """ |
| Load agent definition from a markdown file. |
| |
| Args: |
| markdown_path: Path to the markdown file containing agent definition |
| |
| Returns: |
| Dictionary containing parsed agent configuration |
| """ |
| if not markdown_path.exists(): |
| raise FileNotFoundError(f"Agent definition file not found: {markdown_path}") |
| |
| content = markdown_path.read_text(encoding="utf-8") |
| |
| |
| agent_def = { |
| "name": _extract_section(content, "Agent Name"), |
| "role": _extract_section(content, "Role"), |
| "capabilities": _extract_section(content, "Capabilities"), |
| "system_prompt": _extract_section(content, "System Prompt"), |
| "tools": _extract_section(content, "Tools"), |
| "behavior_guidelines": _extract_section(content, "Behavior Guidelines"), |
| "examples": _extract_section(content, "Example Interactions"), |
| "configuration": _extract_section(content, "Configuration"), |
| } |
| |
| return agent_def |
|
|
|
|
| def _extract_section(content: str, section_name: str) -> Optional[str]: |
| """ |
| Extract a section from markdown content. |
| |
| Args: |
| content: Full markdown content |
| section_name: Name of the section to extract |
| |
| Returns: |
| Section content or None if not found |
| """ |
| |
| pattern = rf"##\s+{re.escape(section_name)}\s*\n(.*?)(?=\n##|\Z)" |
| match = re.search(pattern, content, re.DOTALL | re.IGNORECASE) |
| |
| if match: |
| section_content = match.group(1).strip() |
| return section_content |
| |
| return None |
|
|
|
|
| def get_system_prompt(agent_def: Dict[str, Any], process_description: str = "", |
| process_constraints: str = "") -> str: |
| """ |
| Extract and format the system prompt from agent definition with process context. |
| |
| Args: |
| agent_def: Agent definition dictionary |
| process_description: Imperative process description |
| process_constraints: Normative process constraints |
| |
| Returns: |
| Formatted system prompt string with process context |
| """ |
| system_prompt = agent_def.get("system_prompt", "") |
| |
| |
| if agent_def.get("role"): |
| system_prompt = f"Role: {agent_def['role']}\n\n{system_prompt}" |
| |
| |
| if agent_def.get("behavior_guidelines"): |
| system_prompt += f"\n\nBehavior Guidelines:\n{agent_def['behavior_guidelines']}" |
| |
| |
| if process_description: |
| system_prompt += f"\n\n## Process Description (Imperative)\n{process_description}" |
| |
| if process_constraints: |
| system_prompt += f"\n\n## Process Constraints (Normative - STRICT)\n{process_constraints}" |
| system_prompt += "\n\nREMEMBER: The process constraints are MANDATORY and must NEVER be violated." |
| |
| return system_prompt |
|
|
| |
|
|