oai.openai_utils
获取密钥
def get_key(config: Dict[str, Any]) -> str
获取配置的唯一标识符。
参数:
config
字典或列表 - 一个配置。
返回:
tuple
- 可以用作字典键的唯一标识符。
获取配置列表
def get_config_list(api_keys: List[str],
base_urls: Optional[List[str]] = None,
api_type: Optional[str] = None,
api_version: Optional[str] = None) -> List[Dict[str, Any]]
获取OpenAI API客户端的配置列表。
参数:
api_keys
list - 用于调用openai api的api密钥。base_urls
列表, 可选 - 用于openai api调用的api基地址。如果提供,应与api_keys的长度匹配。api_type
str, 可选 - 用于openai API调用的API类型。api_version
str, 可选 - 用于调用openai API的API版本。
返回:
list
- OepnAI API 调用的配置列表。
示例:
# Define a list of API keys
api_keys = ['key1', 'key2', 'key3']
# Optionally, define a list of base URLs corresponding to each API key
base_urls = ['https://api.service1.com', 'https://api.service2.com', 'https://api.service3.com']
# Optionally, define the API type and version if they are common for all keys
api_type = 'azure'
api_version = '2024-02-01'
# Call the get_config_list function to get a list of configuration dictionaries
config_list = get_config_list(api_keys, base_urls, api_type, api_version)
config_list_openai_aoai
def config_list_openai_aoai(
key_file_path: Optional[str] = ".",
openai_api_key_file: Optional[str] = "key_openai.txt",
aoai_api_key_file: Optional[str] = "key_aoai.txt",
openai_api_base_file: Optional[str] = "base_openai.txt",
aoai_api_base_file: Optional[str] = "base_aoai.txt",
exclude: Optional[str] = None) -> List[Dict[str, Any]]
获取OpenAI API客户端的配置列表(包括支持OpenAI聊天完成API的Azure或本地模型部署)。
该函数通过从环境变量或文本文件中读取API密钥和基础URL来构建配置。它支持配置OpenAI和Azure OpenAI服务,允许排除其中一个。当使用文本文件时,环境变量将被覆盖。为了防止使用文本文件,将相应的文件名设置为None。或者将key_file_path设置为None以禁止从文本文件中读取。
参数:
key_file_path
str, 可选项 - API密钥文件所在的目录路径。默认为当前目录。openai_api_key_file
str, 可选 - 包含OpenAI API密钥的文件名。默认为'key_openai.txt'。aoai_api_key_file
str, 可选 - 包含 Azure OpenAI API 密钥的文件名。默认为 'key_aoai.txt'。openai_api_base_file
str, 可选 - 包含OpenAI API基础URL的文件名。默认为'base_openai.txt'。aoai_api_base_file
str, 可选 - 包含 Azure OpenAI API 基础 URL 的文件名。默认为 'base_aoai.txt'。exclude
str, 可选 - 从配置列表中排除的API类型。可以是'openai'或'aoai'。默认为None。
返回:
List[Dict]
- 一个配置字典的列表。每个字典包含 'api_key' 的键,以及可选的 'base_url'、'api_type' 和 'api_version'。
引发:
FileNotFoundError
- 如果未找到指定的密钥文件且未在环境变量中设置相应的API密钥。
示例:
生成不含 Azure OpenAI 的配置:
configs = config_list_openai_aoai(exclude='aoai')
文件示例:
-
key_aoai.txt
aoai-12345abcdef67890ghijklmnopqr
aoai-09876zyxwvuts54321fedcba -
base_aoai.txt
https://api.azure.com/v1
https://api.azure2.com/v1
注意:
- 该函数检查以下环境变量中的API密钥和基本URL:'OPENAI_API_KEY', 'AZURE_OPENAI_API_KEY', 'OPENAI_API_BASE' 和 'AZURE_OPENAI_API_BASE'. 如果没有找到这些变量,它会尝试从'key_file_path'目录中指定的文件读取。
- Azure配置的API版本默认设置为DEFAULT_AZURE_API_VERSION。
- 如果 'exclude' 设置为 'openai',则只返回 Azure OpenAI 配置,反之亦然。
- 该函数假设环境变量中的API密钥和基础URL(如果有多个条目)通过换行符分隔。
config_list_from_models
def config_list_from_models(
key_file_path: Optional[str] = ".",
openai_api_key_file: Optional[str] = "key_openai.txt",
aoai_api_key_file: Optional[str] = "key_aoai.txt",
aoai_api_base_file: Optional[str] = "base_aoai.txt",
exclude: Optional[str] = None,
model_list: Optional[List[str]] = None) -> List[Dict[str, Any]]
获取在模型列表中指定的模型的API调用配置列表。
该功能通过允许为每个提供的模型克隆其输出来扩展config_list_openai_aoai
。
每个配置将有一个'model'键,其值为模型名称。这在所有端点具有相同模型集时特别有用。
参数:
key_file_path
str, 可选 - 密钥文件的路径。openai_api_key_file
str, optional - OpenAI API密钥的文件名。aoai_api_key_file
str, 可选 - Azure OpenAI API 密钥的文件名。aoai_api_base_file
str, 可选 - Azure OpenAI API 基础的文件名。exclude
str, 可选 - 要排除的API类型,"openai"或"aoai"。model_list
列表, 可选 - 包含在配置中的模型名称列表。
返回:
list
- 用于OpenAI API调用的配置列表,每个配置包括模型信息。
示例:
# Define the path where the API key files are located
key_file_path = '/path/to/key/files'
# Define the file names for the OpenAI and Azure OpenAI API keys and bases
openai_api_key_file = 'key_openai.txt'
aoai_api_key_file = 'key_aoai.txt'
aoai_api_base_file = 'base_aoai.txt'
# Define the list of models for which to create configurations
model_list = ['gpt-4', 'gpt-3.5-turbo']
# Call the function to get a list of configuration dictionaries
config_list = config_list_from_models(
key_file_path=key_file_path,
openai_api_key_file=openai_api_key_file,
aoai_api_key_file=aoai_api_key_file,
aoai_api_base_file=aoai_api_base_file,
model_list=model_list
)
# The `config_list` will contain configurations for the specified models, for example:
# [
# {'api_key': '...', 'base_url': 'https://api.openai.com', 'model': 'gpt-4'},
# {'api_key': '...', 'base_url': 'https://api.openai.com', 'model': 'gpt-3.5-turbo'}
# ]
config_list_gpt4_gpt35
def config_list_gpt4_gpt35(
key_file_path: Optional[str] = ".",
openai_api_key_file: Optional[str] = "key_openai.txt",
aoai_api_key_file: Optional[str] = "key_aoai.txt",
aoai_api_base_file: Optional[str] = "base_aoai.txt",
exclude: Optional[str] = None) -> List[Dict[str, Any]]
获取 'gpt-4' 后跟 'gpt-3.5-turbo' API 调用的配置列表。
参数:
key_file_path
str, 可选 - 密钥文件的路径。openai_api_key_file
str, 可选 - OpenAI API 密钥的文件名。aoai_api_key_file
str, 可选 - azure openai api key的文件名。aoai_api_base_file
str, 可选的 - azure openai api 基础的文件名。exclude
str, 可选 - 要排除的api类型,"openai" 或 "aoai"。
返回:
list
- 用于openai api调用的配置列表。
filter_config
def filter_config(config_list: List[Dict[str, Any]],
filter_dict: Optional[Dict[str, Union[List[Union[str, None]],
Set[Union[str,
None]]]]],
exclude: bool = False) -> List[Dict[str, Any]]
该函数通过检查每个配置字典是否符合在 filter_dict
中指定的条件来过滤 config_list
。如果对于 filter_dict
中的每个键,配置字典都符合条件,则保留该配置字典,见下面的示例。
参数:
config_list
字典列表 - 一个需要过滤的配置字典列表。filter_dict
dict - 一个表示筛选条件的字典,其中每个键是配置字典中要检查的字段名称,对应的值是该字段的可接受值列表。如果配置字段的值不是列表,则当它在可接受值列表中找到时,匹配就发生。如果配置字段的值是列表,则当它与可接受值有非空交集时,匹配就发生。exclude
bool - 如果为False(默认值),匹配过滤器的配置将包含在返回的列表中。如果为True,匹配过滤器的配置将从返回的列表中排除。
返回:
字典列表:符合filter_dict
中指定所有条件的配置字典列表。
示例:
```python
# Example configuration list with various models and API types
configs = [
{'model': 'gpt-3.5-turbo'},
{'model': 'gpt-4'},
{'model': 'gpt-3.5-turbo', 'api_type': 'azure'},
{'model': 'gpt-3.5-turbo', 'tags': ['gpt35_turbo', 'gpt-35-turbo']},
]
# Define filter criteria to select configurations for the 'gpt-3.5-turbo' model
# that are also using the 'azure' API type
filter_criteria = {
'model': ['gpt-3.5-turbo'], # Only accept configurations for 'gpt-3.5-turbo'
'api_type': ['azure'] # Only accept configurations for 'azure' API type
}
# Apply the filter to the configuration list
filtered_configs = filter_config(configs, filter_criteria)
# The resulting `filtered_configs` will be:
# [{'model': 'gpt-3.5-turbo', 'api_type': 'azure', ...}]
# Define a filter to select a given tag
filter_criteria = {
'tags': ['gpt35_turbo'],
}
# Apply the filter to the configuration list
filtered_configs = filter_config(configs, filter_criteria)
# The resulting `filtered_configs` will be:
# [{'model': 'gpt-3.5-turbo', 'tags': ['gpt35_turbo', 'gpt-35-turbo']}]
```
注意:
- 如果
filter_dict
为空或为None,则不应用过滤,config_list
将原样返回。 - 如果
config_list
中的配置字典不包含在filter_dict
中指定的键,则被视为不匹配,并从结果中排除。 - 如果
filter_dict
中某个键的可接受值列表包括None,那么没有该键的配置字典也会被视为匹配。
config_list_from_json
def config_list_from_json(
env_or_file: str,
file_location: Optional[str] = "",
filter_dict: Optional[Dict[str, Union[List[Union[str, None]],
Set[Union[str, None]]]]] = None
) -> List[Dict[str, Any]]
从存储在环境变量或文件中的JSON中检索API配置列表。
该函数尝试从给定的env_or_file
参数中解析JSON数据。如果env_or_file
是一个包含JSON数据的环境变量,它将直接使用。否则,它将被假定为一个文件名,函数将尝试从指定的file_location
读取该文件。
filter_dict
参数允许根据指定的条件过滤配置。filter_dict
中的每个键对应于配置字典中的一个字段,关联的值是该字段可接受值的列表或集合。如果配置中缺少某个字段,并且该字段的可接受值列表中包含 None
,则该配置仍将被视为匹配。
参数:
env_or_file
str - 环境变量名称、文件名或包含JSON数据的文件名的环境变量。file_location
str, 可选 - 文件所在的目录路径,如果env_or_file
是一个文件名。filter_dict
字典,可选 - 一个字典,用于指定配置的过滤条件,其中键表示字段名称,值为这些字段的可接受值的列表或集合。
示例:
# Suppose we have an environment variable 'CONFIG_JSON' with the following content:
# '[{"model": "gpt-3.5-turbo", "api_type": "azure"}, {"model": "gpt-4"}]'
# We can retrieve a filtered list of configurations like this:
filter_criteria = {"model": ["gpt-3.5-turbo"]}
configs = config_list_from_json('CONFIG_JSON', filter_dict=filter_criteria)
# The 'configs' variable will now contain only the configurations that match the filter criteria.
返回:
List[Dict]
- 与filter_dict
中指定的过滤条件匹配的配置字典列表。
引发:
FileNotFoundError
- 如果 env_or_file 既没有作为环境变量找到,也没有作为文件找到
get_config
def get_config(api_key: Optional[str],
base_url: Optional[str] = None,
api_type: Optional[str] = None,
api_version: Optional[str] = None) -> Dict[str, Any]
为单个模型构建配置字典,并提供API配置。
示例:
config = get_config(
api_key="sk-abcdef1234567890",
base_url="https://api.openai.com",
api_version="v1"
)
# The 'config' variable will now contain:
# {
# "api_key": "sk-abcdef1234567890",
# "base_url": "https://api.openai.com",
# "api_version": "v1"
# }
参数:
api_key
str - 用于验证API请求的API密钥。base_url
Optional[str] - API的基准URL。如果未提供,默认为None。api_type
Optional[str] - API的类型。如果未提供,默认为None。api_version
Optional[str] - API的版本。如果未提供,默认为 None。
返回:
Dict
- 包含提供的API配置的字典。
config_list_from_dotenv
def config_list_from_dotenv(
dotenv_file_path: Optional[str] = None,
model_api_key_map: Optional[Dict[str, Any]] = None,
filter_dict: Optional[Dict[str, Union[List[Union[str, None]],
Set[Union[str, None]]]]] = None
) -> List[Dict[str, Union[str, Set[str]]]]
从指定的.env文件或环境变量加载API配置,并构建一个配置列表。
这个函数将:
- 从提供的 .env 文件或现有环境变量中加载 API 密钥。
- 使用API密钥和其他配置为每个模型创建配置字典。
- 根据提供的过滤器筛选并返回配置。
model_api_key_map 将默认为 {"gpt-4": "OPENAI_API_KEY", "gpt-3.5-turbo": "OPENAI_API_KEY"}
如果没有指定
参数:
dotenv_file_path
字符串, 可选 - .env文件的路径。默认为None。model_api_key_map
str/dict, optional - 一个将模型映射到其API键配置的字典。 如果提供字符串作为配置,则将其视为存储API键的环境变量名称。 如果提供字典,则应至少包含 'api_key_env_var' 键,并可选择其他API配置,如 'base_url'、'api_type' 和 'api_version'。 默认情况下,使用基本映射,将 'gpt-4' 和 'gpt-3.5-turbo' 映射到 'OPENAI_API_KEY'。filter_dict
dict, optional - 包含要加载模型的字典。 包含一个“model”键,映射到要加载的模型名称集合。 默认值为None,加载所有找到的配置。
返回:
List[Dict[str, Union[str, Set[str]]]]: 每个模型的配置字典列表。
引发:
FileNotFoundError
- 如果指定的 .env 文件不存在。TypeError
- 如果在 model_api_key_map 中提供了不支持类型的配置。
retrieve_assistants_by_name
def retrieve_assistants_by_name(client: OpenAI, name: str) -> List[Assistant]
从OAI助手API返回具有给定名称的助手
detect_gpt_assistant_api_version
def detect_gpt_assistant_api_version() -> str
检测 openai 助手 API 版本
create_gpt_vector_store
def create_gpt_vector_store(client: OpenAI, name: str,
fild_ids: List[str]) -> Any
为gpt助手创建一个openai向量存储
create_gpt_assistant
def create_gpt_assistant(client: OpenAI, name: str, instructions: str,
model: str, assistant_config: Dict[str,
Any]) -> Assistant
创建一个openai gpt助手
update_gpt_assistant
def update_gpt_assistant(client: OpenAI, assistant_id: str,
assistant_config: Dict[str, Any]) -> Assistant
更新openai gpt助手