code_utils
content_str
def content_str(
content: Union[str, List[Union[UserMessageTextContentPart,
UserMessageImageContentPart]], None]
) -> str
将 OpenAI 消息的 content
字段转换为字符串格式。
该函数处理可能是字符串、混合文本和图像 URL 列表或 None 的内容,并将其转换为字符串。文本直接附加到结果字符串,而图像 URL 则由占位符图像令牌表示。如果内容为 None,则返回空字符串。
参数:
- content (Union[str, List, None]): 要处理的内容。可以是字符串、表示文本和图像 URL 的字典列表或 None。
返回值:
str
- 输入内容的字符串表示。图像 URL 被替换为图像令牌。
注意:
- 函数期望列表中的每个字典都有一个 "type" 键,其值为 "text" 或 "image_url"。对于 "text" 类型,将 "text" 键的值附加到结果中。对于 "image_url",将附加一个图像令牌。
- 此函数适用于处理可能包含文本和图像引用的内容,特别是在需要将图像表示为占位符的上下文中。
infer_lang
def infer_lang(code: str) -> str
推断代码的语言。 TODO:使其更健壮。
extract_code
def extract_code(
text: Union[str, List],
pattern: str = CODE_BLOCK_PATTERN,
detect_single_line_code: bool = False) -> List[Tuple[str, str]]
从文本中提取代码。
参数:
text
str or List - 要从中提取代码的内容。内容可以是字符串或列表,与标准 GPT 或多模态 GPT 返回的内容相同。pattern
str, optional - 用于查找代码块的正则表达式模式。默认为 CODE_BLOCK_PATTERN。detect_single_line_code
bool, optional - 启用提取单行代码的新功能。默认为 False。
返回值:
list
- 包含语言和代码的元组列表。如果输入文本中没有代码块,则语言为 "unknown"。如果有代码块但未指定语言,则语言为空字符串。
generate_code
def generate_code(pattern: str = CODE_BLOCK_PATTERN,
**config) -> Tuple[str, float]
(openai<1) 生成代码。
参数:
pattern
Optional, str - 用于查找代码块的正则表达式模式。默认模式用于在 markdown 文件中查找代码块。config
Optional, dict - API 调用的配置。
返回值:
str
- 生成的代码。float
- 生成的成本。
improve_function
def improve_function(file_name, func_name, objective, **config)
(openai<1) 改进函数以实现目标。
improve_code
def improve_code(files, objective, suggest_only=True, **config)
(openai<1) 改进代码以实现给定的目标。
参数:
files
list - 包含源代码的文件名列表。objective
str - 要实现的目标。suggest_only
bool - 是否仅返回建议或改进后的代码。config
可选, dict - API 调用的配置。
返回值:
str
- 如果 suggest_only=False,则为改进后的代码;如 果 suggest_only=True(默认值),则为建议列表。float
- 生成的成本。
is_docker_running
def is_docker_running() -> bool
检查 Docker 是否正在运行。
返回值:
bool
- 如果 Docker 正在运行,则为 True;否则为 False。
in_docker_container
def in_docker_container() -> bool
检查代码是否在 Docker 容器中运行。
返回值:
bool
- 如果代码在 Docker 容器中运行,则为 True;否则为 False。
execute_code
def execute_code(
code: Optional[str] = None,
timeout: Optional[int] = None,
filename: Optional[str] = None,
work_dir: Optional[str] = None,
use_docker: Union[List[str], str, bool] = SENTINEL,
lang: Optional[str] = "python") -> Tuple[int, str, Optional[str]]
在 Docker 容器中执行代码。 此函数在 MacOS 上未经过测试。
参数:
code
可选, str - 要执行的代码。 如果为 None,则将执行由 filename 指定的文件中的代码。 必须提供 code 或 filename 中的一个。timeout
可选, int - 最大执行时间(以秒为单位)。 如果为 None,则使用默认超时时间。默认超时时间为 600 秒。在 Windows 上,当 use_docker=False 时,不会强制执行超时。filename
可选, str - 保存代码的文件名或当code
为 None 时存储代码的位置。 如果为 None,则将创建一个随机生成的文件。 随机生成的文件将在执行后被删除。 文件名必须是相对路径。相对路径是相对于工作目录的。work_dir
可选, str - 代码执行的工作目录。 如果为 None,则使用默认工作目录。 默认工作目录是 "path_to_autogen" 下的 "extensions" 目录。use_docker
list, str 或 bool - 用于代码执行的 Docker 镜像。 默认值为 True,表示代码将在 Docker 容器中执行。将使用默认的镜像列表。 如果提供了镜像名称的列表或字符串,则代码将在成功拉取的第一个镜像的 Docker 容器中执行。 如果为 False,则代码将在当前环境中执行。 预期行为:- 如果未设置
use_docker
(即默认为 True)或显式设置为 True,并且 Docker 包可用,则代码将在 Docker 容器中运行。
- 如果未设置
- 如果
use_docker
没有设置(即默认为 True)或者明确设置为 True 但是缺少 Docker 包或者 Docker 没有运行,将会引发错误。 - 如果
use_docker
明确设置为 False,代码将在本地运行。 如果代码在当前环境中执行,代码必须是可信的。 lang
可选, str - 代码的语言。默认为 "python"。
返回值:
int
- 如果代码成功执行,返回 0。str
- 如果代码执行失败,返回错误消息;否则返回标准输出。image
- 当使用 Docker 时,容器运行后的 Docker 镜像名称。
generate_assertions
def generate_assertions(definition: str, **config) -> Tuple[str, float]
(openai<1) 为一个函数生成断言。
参数:
definition
str - 函数定义,包括函数签名和文档字符串。config
可选, dict - API 调用的配置。
返回值:
str
- 生成的断言。float
- 生成的成本。
eval_function_completions
def eval_function_completions(responses: List[str],
definition: str,
test: Optional[str] = None,
entry_point: Optional[str] = None,
assertions: Optional[Union[str, Callable[
[str], Tuple[str, float]]]] = None,
timeout: Optional[float] = 3,
use_docker: Optional[bool] = True) -> Dict
(openai<1) 从响应列表中选择一个响应,用于函数补全任务(使用生成的断言),并/或者使用黄金测试评估任务是否成功。
参数:
responses
list - 响应列表。definition
str - 输入的定义。test
可选, str - 测试代码。entry_point
可选, str - 函数的名称。assertions
可选, str 或 Callable - 断言代码,用作响应的过滤器,或者断言生成器。 当提供时,只有通过断言的响应才会被考虑用于实际测试(如果提供)。timeout
可选, float - 代码执行的超时时间。
返回值:
dict
- 成功的指标。
PassAssertionFilter
class PassAssertionFilter()
pass_assertions
def pass_assertions(context, response, **_)
(openai<1) 检查响应是否通过断言。
implement
def implement(
definition: str,
configs: Optional[List[Dict]] = None,
assertions: Optional[Union[str,
Callable[[str],
Tuple[str,
float]]]] = generate_assertions
) -> Tuple[str, float]
(openai<1) 从定义中实现一个函数。
参数:
create_virtual_env
def create_virtual_env(dir_path: str, **env_args) -> SimpleNamespace
创建一个 Python 虚拟环境并返回上下文。
参数:
dir_path
str - 虚拟环境将被创建的目录路径。**env_args
- 传递给EnvBuilder
的额外参数。
返回值:
SimpleNamespace
- 虚拟环境上下文对象。