# Module `atomic_agents.lib.components.system_prompt_generator`

## Classes

`class SystemPromptContextProviderBase (title: str)`

  Helper class that provides a standard way to create an ABC using inheritance.

  Expand source code

      class SystemPromptContextProviderBase(ABC):
          def __init__(self, title: str):
              self.title = title

          @abstractmethod
          def get_info(self) -> str:
              pass

          def __repr__(self) -> str:
              return self.get_info()

  ### Ancestors

  - abc.ABC

  ### Methods

  `def get_info(self) ‑> str`
`class SystemPromptGenerator (background: Optional[List[str]] = None, steps: Optional[List[str]] = None, output_instructions: Optional[List[str]] = None, context_providers: Optional[Dict[str, SystemPromptContextProviderBase]] = None)`
  Expand source code

      class SystemPromptGenerator:
          def __init__(
              self,
              background: Optional[List[str]] = None,
              steps: Optional[List[str]] = None,
              output_instructions: Optional[List[str]] = None,
              context_providers: Optional[Dict[str, SystemPromptContextProviderBase]] = None,
          ):
              self.background = background or ["This is a conversation with a helpful and friendly AI assistant."]
              self.steps = steps or []
              self.output_instructions = output_instructions or []
              self.context_providers = context_providers or {}

              self.output_instructions.extend(
                  [
                      "Always respond using the proper JSON schema.",
                      "Always use the available additional information and context to enhance the response.",
                  ]
              )

          def generate_prompt(self) -> str:
              sections = [
                  ("IDENTITY and PURPOSE", self.background),
                  ("INTERNAL ASSISTANT STEPS", self.steps),
                  ("OUTPUT INSTRUCTIONS", self.output_instructions),
              ]

              prompt_parts = []

              for title, content in sections:
                  if content:
                      prompt_parts.append(f"# {title}")
                      prompt_parts.extend(f"- {item}" for item in content)
                      prompt_parts.append("")

              if self.context_providers:
                  prompt_parts.append("# EXTRA INFORMATION AND CONTEXT")
                  for provider in self.context_providers.values():
                      info = provider.get_info()
                      if info:
                          prompt_parts.append(f"## {provider.title}")
                          prompt_parts.append(info)
                          prompt_parts.append("")

              return "\n".join(prompt_parts).strip()

  ### Methods

  `def generate_prompt(self) ‑> str`