Source code for langchain_core.outputs.llm_result

from __future__ import annotations

from copy import deepcopy
from typing import List, Optional

from langchain_core.outputs.generation import Generation
from langchain_core.outputs.run_info import RunInfo
from langchain_core.pydantic_v1 import BaseModel


[docs]class LLMResult(BaseModel): """包含批量LLM调用所有结果的类。""" generations: List[List[Generation]] """生成的输出列表。这是一个List[List[]],因为每个输入可能有多个候选生成。""" llm_output: Optional[dict] = None """LLM提供程序特定的任意输出。""" run: Optional[List[RunInfo]] = None """每个输入的模型调用的元数据信息列表。"""
[docs] def flatten(self) -> List[LLMResult]: """将多代展平为一个列表。 解包List[List[Generation]] -> List[LLMResult],其中每个返回的LLMResult 仅包含单个Generation。如果有可用的令牌使用信息, 仅保留用于顶选Generation对应的LLMResult, 以避免在下游过多计算令牌使用情况。 返回: 包含单个Generation的LLMResult列表。 """ llm_results = [] for i, gen_list in enumerate(self.generations): # Avoid double counting tokens in OpenAICallback if i == 0: llm_results.append( LLMResult( generations=[gen_list], llm_output=self.llm_output, ) ) else: if self.llm_output is not None: llm_output = deepcopy(self.llm_output) llm_output["token_usage"] = dict() else: llm_output = None llm_results.append( LLMResult( generations=[gen_list], llm_output=llm_output, ) ) return llm_results
def __eq__(self, other: object) -> bool: """通过忽略与运行相关的任何元数据来检查LLMResult的相等性。""" if not isinstance(other, LLMResult): return NotImplemented return ( self.generations == other.generations and self.llm_output == other.llm_output )