Source code for langchain.output_parsers.datetime

import random
from datetime import datetime, timedelta
from typing import List

from langchain_core.exceptions import OutputParserException
from langchain_core.output_parsers import BaseOutputParser
from langchain_core.utils import comma_list


def _generate_random_datetime_strings(
    pattern: str,
    n: int = 3,
    start_date: datetime = datetime(1, 1, 1),
    end_date: datetime = datetime.now() + timedelta(days=3650),
) -> List[str]:
    """生成n个符合给定模式的随机日期时间字符串,在指定的日期范围内。

模式应该是一个包含所需格式代码的字符串。
start_date和end_date应该是表示日期范围的datetime对象。
"""
    examples = []
    delta = end_date - start_date
    for i in range(n):
        random_delta = random.uniform(0, delta.total_seconds())
        dt = start_date + timedelta(seconds=random_delta)
        date_string = dt.strftime(pattern)
        examples.append(date_string)
    return examples


[docs]class DatetimeOutputParser(BaseOutputParser[datetime]): """将LLM调用的输出解析为datetime。""" format: str = "%Y-%m-%dT%H:%M:%S.%fZ" """用作日期时间格式的字符串值。"""
[docs] def get_format_instructions(self) -> str: examples = comma_list(_generate_random_datetime_strings(self.format)) return ( f"Write a datetime string that matches the " f"following pattern: '{self.format}'.\n\n" f"Examples: {examples}\n\n" f"Return ONLY this string, no other words!" )
[docs] def parse(self, response: str) -> datetime: try: return datetime.strptime(response.strip(), self.format) except ValueError as e: raise OutputParserException( f"Could not parse datetime string: {response}" ) from e
@property def _type(self) -> str: return "datetime"