Source code for langchain_community.llms.konko

"""封装了Konko AI的完成API。"""
import logging
import warnings
from typing import Any, Dict, List, Optional

from langchain_core.callbacks import (
    AsyncCallbackManagerForLLMRun,
    CallbackManagerForLLMRun,
)
from langchain_core.language_models.llms import LLM
from langchain_core.pydantic_v1 import Extra, SecretStr, root_validator

from langchain_community.utils.openai import is_openai_v1

logger = logging.getLogger(__name__)


[docs]class Konko(LLM): """Konko AI模型。 要使用,您需要一个API密钥。这可以作为init参数传递,``konko_api_key``或设置为环境变量``KONKO_API_KEY``。 Konko AI API参考文档: https://docs.konko.ai/reference/""" base_url: str = "https://api.konko.ai/v1/completions" """基础推断API URL。""" konko_api_key: SecretStr """Konko AI API密钥。""" model: str """模型名称。可用模型列在这里:https://docs.konko.ai/reference/get_models""" temperature: Optional[float] = None """模型温度。""" top_p: Optional[float] = None """用于根据累积概率动态调整每个预测标记的选择数量。 值为1将始终产生相同的输出。 小于1的温度更有利于更多的正确性,并适用于问答或摘要。 大于1的值会在输出中引入更多的随机性。""" top_k: Optional[int] = None """用于限制下一个预测单词或标记的选择数量。它指定在每一步考虑的最大标记数量,基于它们出现的概率。这种技术有助于加快生成过程,并通过专注于最有可能的选项来提高生成文本的质量。""" max_tokens: Optional[int] = None """生成的最大令牌数量。""" repetition_penalty: Optional[float] = None """控制生成文本多样性的数字,通过减少重复序列的可能性。较高的值会减少重复。""" logprobs: Optional[int] = None """一个整数,指定在每个令牌生成步骤中包含多少个顶部令牌对数概率在响应中。""" class Config: """此pydantic对象的配置。""" extra = Extra.forbid @root_validator(pre=True) def validate_environment(cls, values: Dict[str, Any]) -> Dict[str, Any]: """验证Python包是否存在于环境中。""" try: import konko except ImportError: raise ImportError( "Could not import konko python package. " "Please install it with `pip install konko`." ) if not hasattr(konko, "_is_legacy_openai"): warnings.warn( "You are using an older version of the 'konko' package. " "Please consider upgrading to access new features" "including the completion endpoint." ) return values
[docs] def construct_payload( self, prompt: str, stop: Optional[List[str]] = None, **kwargs: Any, ) -> Dict[str, Any]: stop_to_use = stop[0] if stop and len(stop) == 1 else stop payload: Dict[str, Any] = { **self.default_params, "prompt": prompt, "stop": stop_to_use, **kwargs, } return {k: v for k, v in payload.items() if v is not None}
@property def _llm_type(self) -> str: """模型的返回类型。""" return "konko"
[docs] @staticmethod def get_user_agent() -> str: from langchain_community import __version__ return f"langchain/{__version__}"
@property def default_params(self) -> Dict[str, Any]: return { "model": self.model, "temperature": self.temperature, "top_p": self.top_p, "top_k": self.top_k, "max_tokens": self.max_tokens, "repetition_penalty": self.repetition_penalty, } def _call( self, prompt: str, stop: Optional[List[str]] = None, run_manager: Optional[CallbackManagerForLLMRun] = None, **kwargs: Any, ) -> str: """调用Konko的文本生成端点。 参数: prompt: 传递给模型的提示。 返回: 模型生成的字符串。 """ import konko payload = self.construct_payload(prompt, stop, **kwargs) try: if is_openai_v1(): response = konko.completions.create(**payload) else: response = konko.Completion.create(**payload) except AttributeError: raise ValueError( "`konko` has no `Completion` attribute, this is likely " "due to an old version of the konko package. Try upgrading it " "with `pip install --upgrade konko`." ) if is_openai_v1(): output = response.choices[0].text else: output = response["choices"][0]["text"] return output async def _acall( self, prompt: str, stop: Optional[List[str]] = None, run_manager: Optional[AsyncCallbackManagerForLLMRun] = None, **kwargs: Any, ) -> str: """异步调用Konko的文本生成端点。 参数: prompt: 传递给模型的提示。 返回: 模型生成的字符串。 """ import konko payload = self.construct_payload(prompt, stop, **kwargs) try: if is_openai_v1(): client = konko.AsyncKonko() response = await client.completions.create(**payload) else: response = await konko.Completion.acreate(**payload) except AttributeError: raise ValueError( "`konko` has no `Completion` attribute, this is likely " "due to an old version of the konko package. Try upgrading it " "with `pip install --upgrade konko`." ) if is_openai_v1(): output = response.choices[0].text else: output = response["choices"][0]["text"] return output