12345678910111213141516171819202122232425262728293031323334353637 |
- import re
- from typing import Any
- from langchain import PromptTemplate
- from langchain.formatting import StrictFormatter
- class OutLinePromptTemplate(PromptTemplate):
- @classmethod
- def from_template(cls, template: str, **kwargs: Any) -> PromptTemplate:
- """Load a prompt template from a template."""
- input_variables = {
- v for _, v, _, _ in OneLineFormatter().parse(template) if v is not None
- }
- return cls(
- input_variables=list(sorted(input_variables)), template=template, **kwargs
- )
- class OneLineFormatter(StrictFormatter):
- def parse(self, format_string):
- last_end = 0
- results = []
- for match in re.finditer(r"{([a-zA-Z_]\w*)}", format_string):
- field_name = match.group(1)
- start, end = match.span()
- literal_text = format_string[last_end:start]
- last_end = end
- results.append((literal_text, field_name, '', None))
- remaining_literal_text = format_string[last_end:]
- if remaining_literal_text:
- results.append((remaining_literal_text, None, None, None))
- return results
|