kork 包#

子模块#

kork.ast 模块#

该语言的 AST。

就语句与表达式的区别而言,AST 现在有点混乱,在不久的将来可能需要清理一下。

class kork.ast.Assign(name: str, value: kork.ast.Expr)[source]#

基类: kork.ast.Expr

变量的赋值语句。

name: str#
value: kork.ast.Expr#
class kork.ast.Binary(left: kork.ast.Expr, operator: str, right: kork.ast.Expr)[source]#

基类: kork.ast.Expr

一个二元表达式。

left: kork.ast.Expr#
operator: str#
right: kork.ast.Expr#
class kork.ast.Expr[source]#

基类: abc.ABC

抽象表达式。

accept(visitor: kork.ast.Visitor, **kwargs: Any) Any[source]#

访问者的 Accept 实现。

class kork.ast.ExternFunctionDef(name: str, params: kork.ast.ParamList, return_type: str, implementation: Optional[Callable] = None, doc_string: str = '')[source]#

基类: kork.ast.Stmt

外部函数定义。

add_implementation(implementation: Callable) kork.ast.ExternFunctionDef[source]#

向外部函数定义添加实现。

doc_string: str = ''#
implementation: Optional[Callable] = None#
name: str#
params: kork.ast.ParamList#
return_type: str#
class kork.ast.FunctionCall(name: str, args: Sequence[kork.ast.Expr])[source]#

基类: kork.ast.Expr

表示函数调用。

args: Sequence[kork.ast.Expr]#
name: str#
class kork.ast.FunctionDef(name: str, params: kork.ast.ParamList, body: Sequence[Union[kork.ast.Stmt, kork.ast.Expr]], return_type: str)[source]#

基类: kork.ast.Stmt

表示带有实现的函数定义。

body: Sequence[Union[kork.ast.Stmt, kork.ast.Expr]]#
name: str#
params: kork.ast.ParamList#
return_type: str#
class kork.ast.Grouping(expr: kork.ast.Expr)[source]#

基类: kork.ast.Expr

一个分组表达式。

expr: kork.ast.Expr#
class kork.ast.List_(elements: Sequence[kork.ast.Expr])[source]#

基类: kork.ast.Expr

列表字面量。

elements: Sequence[kork.ast.Expr]#
class kork.ast.Literal(value: Union[float, int, bool, None, str])[source]#

基类: kork.ast.Expr

一个字面量表达式。

value: Union[float, int, bool, None, str]#
class kork.ast.Param(name: str, type_: str)[source]#

基类: kork.ast.Stmt

表示函数参数。

name: str#
type_: str#
class kork.ast.ParamList(params: Sequence[kork.ast.Param])[source]#

基类: kork.ast.Stmt

表示函数参数列表。

params: Sequence[kork.ast.Param]#
class kork.ast.Program(stmts: Sequence[Union[kork.ast.Stmt, kork.ast.Expr]])[source]#

基类: kork.ast.Stmt

表示一个程序。

stmts: Sequence[Union[kork.ast.Stmt, kork.ast.Expr]]#
class kork.ast.Stmt[source]#

基类: abc.ABC

抽象语句。

accept(visitor: kork.ast.Visitor, **kwargs: Any) Any[source]#

访问者的 Accept 实现。

class kork.ast.Unary(operator: str, right: kork.ast.Expr)[source]#

基类: kork.ast.Expr

一个一元表达式。

operator: str#
right: kork.ast.Expr#
class kork.ast.VarDecl(name: str, value: kork.ast.Expr)[source]#

基类: kork.ast.Stmt

表示变量声明。

name: str#
value: kork.ast.Expr#
class kork.ast.Variable(name: str)[source]#

基类: kork.ast.Expr

变量引用。

name: str#
class kork.ast.Visitor[source]#

基类: abc.ABC

抽象访问者接口。

kork.ast_printer 模块#

class kork.ast_printer.AbstractAstPrinter[source]#

基类: kork.ast.Visitor, abc.ABC

abstract visit(element: Union[kork.ast.Stmt, kork.ast.Expr], pretty_print: bool = False) str[source]#

打印 AST 的入口点。

class kork.ast_printer.AstPrinter[source]#

基类: kork.ast_printer.AbstractAstPrinter

默认 AST 打印器实现。

visit(element: Union[kork.ast.Stmt, kork.ast.Expr], pretty_print: bool = False) str[source]#

打印 AST 的入口点。

visit_assign(assign: kork.ast.Assign, **data: Any) str[source]#

打印赋值。

visit_binary(binary: kork.ast.Binary, **data: Any) str[source]#

打印二元表达式。

visit_extern_function_def(extern_function_def: kork.ast.ExternFunctionDef, **data: Any) str[source]#

打印外部函数定义。

visit_function_call(call: kork.ast.FunctionCall, **data: Any) str[source]#

打印函数调用。

visit_function_def(function_def: kork.ast.FunctionDef, **data: Any) str[source]#

打印函数定义。

visit_grouping(grouping: kork.ast.Grouping, **data: Any) str[source]#
visit_list_(list_: kork.ast.List_, **data: Any) str[source]#

打印列表。

visit_literal(literal: kork.ast.Literal, **data: Any) str[source]#

打印字面量。

visit_param(param: kork.ast.Param, **data: Any) str[source]#

打印参数。

visit_param_list(param_list: kork.ast.ParamList, **data: Any) str[source]#

打印参数列表。

visit_program(program: kork.ast.Program, **data: Any) str[source]#

打印程序。

visit_unary(unary: kork.ast.Unary, **data: Any) str[source]#

访问一元表达式。

visit_var_decl(var_decl: kork.ast.VarDecl, **data: Any) str[source]#

打印变量声明。

visit_variable(variable: kork.ast.Variable, **data: Any) str[source]#

打印变量。

kork.chain 模块#

编程链的实现。

class kork.chain.CodeChain(*, memory: Optional[langchain.schema.BaseMemory] = None, callback_manager: langchain.callbacks.base.BaseCallbackManager = None, verbose: bool = None, llm: langchain.schema.BaseLanguageModel, interpreter: Callable[[str, kork.environment.Environment], kork.interpreter.InterpreterResult], ast_printer: kork.ast_printer.AbstractAstPrinter, context_retriever: Optional[kork.retrieval.AbstractContextRetriever] = None, example_retriever: Optional[kork.examples.AbstractExampleRetriever] = None, instruction_template: langchain.prompts.prompt.PromptTemplate = PromptTemplate(input_variables=['language_name', 'external_functions_block'], output_parser=None, partial_variables={}, template='You are programming in a language called "{language_name}".\n\nYou are an expert programmer and must follow the instructions below exactly.\n\nYour goal is to translate a user query into a corresponding and valid {language_name}\nprogram.\n\n{external_functions_block}\n\nDo not assume that any other functions except for the ones listed above exist.\n\nWrap the program in <code> and </code> tags.\n\nStore the solution to the query in a variable called "result".\n\nHere is a sample valid program:\n\n<code>\nvar x = 1 # Assign 1 to the variable x\nvar result = 1 + 2 # Calculate the sum of 1 + 2 and assign to result\nvar result = x # Assign the value of x to result\n</code>\n\nGuidelines:\n- Do not use operators, instead invoke appropriate external functions.\n- Do not declare functions, do not use loops, do not use conditionals.\n- Solve the problem only using variable declarations and function invocations.\n\nBegin!\n', template_format='f-string', validate_template=True), input_key: str = 'query', language_name: str = '😼', input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = 'triple_quotes', **extra_data: Any)[source]#

Bases: langchain.chains.base.Chain

一个编码链。

class Config[source]#

Bases: object

此 pydantic 对象的配置。

arbitrary_types_allowed = True#
extra = 'allow'#
ast_printer: AbstractAstPrinter#

用于编码链的 AST 打印器。

context_retriever: Optional[AbstractContextRetriever]#

要注入到环境和提示中的上下文。

目前,此上下文仅限于外部函数。

example_retriever: Optional[AbstractExampleRetriever]#

应添加到提示中的示例。

classmethod from_defaults(*, llm: langchain.schema.BaseLanguageModel, interpreter: typing.Callable[[str, kork.environment.Environment], kork.interpreter.InterpreterResult] = <function run_interpreter>, ast_printer: kork.ast_printer.AbstractAstPrinter = <kork.ast_printer.AstPrinter object>, context: typing.Optional[typing.Union[kork.retrieval.AbstractContextRetriever, typing.Sequence[typing.Union[kork.ast.ExternFunctionDef, typing.Callable]]]] = None, examples: typing.Optional[typing.Union[kork.examples.AbstractExampleRetriever, typing.Sequence[typing.Tuple[str, kork.ast.Program]]]] = None, instruction_template: langchain.prompts.prompt.PromptTemplate = PromptTemplate(input_variables=['language_name', 'external_functions_block'], output_parser=None, partial_variables={}, template='You are programming in a language called "{language_name}".\n\nYou are an expert programmer and must follow the instructions below exactly.\n\nYour goal is to translate a user query into a corresponding and valid {language_name}\nprogram.\n\n{external_functions_block}\n\nDo not assume that any other functions except for the ones listed above exist.\n\nWrap the program in <code> and </code> tags.\n\nStore the solution to the query in a variable called "result".\n\nHere is a sample valid program:\n\n<code>\nvar x = 1 # Assign 1 to the variable x\nvar result = 1 + 2 # Calculate the sum of 1 + 2 and assign to result\nvar result = x # Assign the value of x to result\n</code>\n\nGuidelines:\n- Do not use operators, instead invoke appropriate external functions.\n- Do not declare functions, do not use loops, do not use conditionals.\n- Solve the problem only using variable declarations and function invocations.\n\nBegin!\n', template_format='f-string', validate_template=True), input_key: str = 'query', language_name: str = '😼', input_formatter: typing.Union[typing.Literal['text_prefix'], typing.Literal['triple_quotes'], typing.Literal['markdown_text'], None, typing.Callable[[str], str]] = 'markdown_text') kork.chain.CodeChain[source]#

从预配置的默认值创建代码链。

参数
  • llm – 用于编码的语言模型

  • interpreter – 将用于执行程序的解释器

  • ast_printer – 可以将 AST 打印为文本字符串的 ast 打印器

  • context – 函数列表或上下文检索器。函数列表可以是 python 可调用对象和 Kork 外部函数的混合。所有 python 函数都将转换为 Kork 外部函数,所有内容都将传递到默认上下文检索器。

  • examples – 示例检索器或示例列表。如果是示例列表,将创建一个简单的示例检索器。

  • instruction_template – 用于自定义提示的指令组件。

  • language_name – 用于提示的语言名称。

  • input_formatter – 一种格式,如果传入示例列表,将应用于每个示例元组的输入部分。

  • input_key – 要使用的输入键。

返回

代码链

input_formatter: InputFormatter#

微笑猫编程语言;又名 Kork;又名 😼

input_key: str#
instruction_template: PromptTemplate#

指令提示的模板。

interpreter: Callable[[str, Environment], InterpreterResult]#

用于编码链的解释器。

language_name: str#
llm: BaseLanguageModel#

用于编码链的语言模型。

prepare_context(query: str, variables: Optional[Mapping[str, Any]] = None) Tuple[kork.environment.Environment, kork.prompt_adapter.FewShotTemplate][source]#

获取预填充的环境和少量镜头模板。

参数
  • query – 准备上下文的查询。

  • variables – 应添加到上下文的任何变量。

返回

预填充的环境和预格式化的小样本模板。

class kork.chain.CodeResult[source]#

Bases: TypedDict

代码链的结果。

code: str#
environment: Optional[kork.environment.Environment]#
errors: Sequence[Exception]#
raw: str#

kork.display 模块#

用于在笔记本中显示链结果的实用程序。

class kork.display.HtmlResult[source]#

Bases: TypedDict

可以在笔记本中显示的结果。

code: str#
correct: str#
errors: str#
expected: str#
query: str#
raw: str#
result: str#
kork.display.as_html_dict(code_result: kork.chain.CodeResult, query: Optional[str] = None, expected_answer: Optional[Any] = None, result_key">: str = 'result', pretty_print: bool = True) kork.display.HtmlResult[source]#

用于生成一个字典,可以轻松地在 IPython notebook 中显示。

kork.display.as_img_tag(image: None) str[source]#

获取图像的 HTML 表示形式。

kork.display.display_code_result(code_result: kork.chain.CodeResult, query: typing.Optional[str] = None, expected_answer: typing.Optional[typing.Any] = <kork.display._NoExpectedAnswer object>, columns: typing.Optional[typing.Sequence[str]] = None, result_key: str = 'result') Any[source]#

将代码结果显示为表格。

kork.display.display_html_results(html_results: Union[Sequence[kork.display.HtmlResult], kork.display.HtmlResult], columns: Optional[Sequence[str]] = None) Any[source]#

将 HTML 结果序列显示为表格。

kork.display.image_base64(image: None) str[source]#

获取图像的 base64 表示形式。

kork.environment 模块#

class kork.environment.Environment(parent: typing.Optional[kork.environment.Environment] = None, variables: typing.Dict[str, typing.Any] = <factory>)[source]#

Bases: object

用于存储变量和函数定义的环境。

clone() kork.environment.Environment[source]#

克隆根级别环境,对变量进行深拷贝。

提供克隆功能是因为环境是可变变量。

最大的危险是改变变量字典,调用者可能会保留对该字典的引用。

TODO(Eugene): 重构以降低这种危险。

get_symbol(name: str) Any[source]#

从环境中获取符号。

参数

name – 要查找的符号名称

返回

给定符号的 SymbolValue(如果存在),否则引发错误

list_external_functions() List[kork.ast.ExternFunctionDef][source]#

获取外部定义的外部函数列表。

parent: Optional[kork.environment.Environment] = None#
set_symbol(name: str, value: Any) Any[source]#

在环境中设置符号。

variables: Dict[str, Any]#
kork.environment.create_environment(extern_function_defs: Sequence[kork.ast.ExternFunctionDef], external_variables: Optional[Mapping[str, Any]] = None) kork.environment.Environment[source]#

创建一个预填充状态的新环境。

kork.examples 模块#

轻松指定 kork 示例的接口。

class kork.examples.AbstractExampleRetriever[source]#

基类: abc.ABC

示例检索器的抽象接口。

示例接口必须实现 retrieve 方法,该方法根据给定的查询返回相关示例列表。

abstract retrieve(query: str) List[Tuple[str, str]][source]#

检索示例。

class kork.examples.SimpleExampleRetriever(examples: Sequence[Tuple[str, str]])[source]#

基类:kork.examples.AbstractExampleRetriever

简单示例检索器。

简单的示例检索器,返回初始化时提供的示例。

支持从程序列表初始化。

示例

from kork import SimpleExampleRetriever, AstPrinter, c_, r_

simple_example_retriever = SimpleExampleRetriever.from_programs(
    language_name="kork",
    examples=[
        ("add 1 2", r_(c_(add, 1, 2))),
        ("add 1 2 3", r_(c_(add, 1, 2, 3))),
        ],
    ast_printer=AstPrinter(),
)

examples = simple_example_retriever.retrieve("add 1 2")
classmethod from_programs(language_name: str, examples: Sequence[Tuple[str, kork.ast.Program]], ast_printer: kork.ast_printer.AbstractAstPrinter) kork.examples.SimpleExampleRetriever[source]#

从程序创建简单示例检索器。

参数
  • language_name – 用于 markdown 代码块的语言名称。

  • examples – (查询,所需程序) 形式的元组序列。

  • ast_printer – 用于格式化所需输出的 ast 打印机。

返回

一个简单的示例检索器。

retrieve(query: str) List[Tuple[str, str]][source]#

检索与给定查询最匹配的示例。

kork.examples.c_(name: Callable, *args: Any) kork.ast.FunctionCall[source]#

创建 kork 函数调用。

kork.examples.format_examples(language_name: str, examples: Sequence[Tuple[str, kork.ast.Program]], ast_printer: kork.ast_printer.AbstractAstPrinter, input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = None) List[Tuple[str, str]][source]#

格式化示例。

kork.examples.format_text(text: str, input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = None) str[source]#

输入文本的编码器。

参数
  • text – 要编码的文本

  • input_formatter – 用于输入的格式化程序 * None: 用于单个句子或单个段落,无格式 * triple_quotes: 用 “”” 包围输入,用于长文本 * text_prefix: 与 triple_quote 相同,但带有 `TEXT: ` 前缀 * Callable: 用户提供的函数

返回

如果已编码,则为编码后的文本

kork.examples.r_(expr: kork.ast.Expr) kork.ast.Program[source]#

将最后一个程序表达式分配给结果变量。

kork.exceptions 模块#

自定义 Kork 异常的定义。

exception kork.exceptions.KorkException[source]#

基类:Exception

通用 Kork 异常。

exception kork.exceptions.KorkInterpreterException[source]#

基类:kork.exceptions.KorkException

解释期间引发的异常。

exception kork.exceptions.KorkRunTimeException[source]#

基类:kork.exceptions.KorkInterpreterException

在 Kork 解释器运行时期间引发的异常。

exception kork.exceptions.KorkSyntaxException[source]#

基类:kork.exceptions.KorkException

在语法解析期间引发的异常。

exception kork.exceptions.LLMParseException[source]#

基类:kork.exceptions.KorkException

无法解析 LLM 输出。

kork.foreign_funcs 模块#

导入外部函数的 API。

class kork.foreign_funcs.FunctionInfo[source]#

Bases: TypedDict

有关函数的信息。

args: List[Tuple[str, Any, Any]]#
docstring: str#
name: str#
return_type: Any#
kork.foreign_funcs.to_extern_func_def(func: Callable) kork.ast.ExternFunctionDef[source]#

将 python 函数转换为 kork 外部函数定义。

kork.foreign_funcs.to_kork_function_call(func: Callable, *args: Any) kork.ast.FunctionCall[source]#

将 python 函数调用转换为 kork 函数调用。

kork.interpreter 模块#

class kork.interpreter.Interpreter(program: kork.ast.Program, environment: kork.environment.Environment)[source]#

基类:kork.ast.Visitor

Kork 的默认解释器。

intepret() None[source]#

解释程序。

visit_assign(assign: kork.ast.Assign) None[source]#

访问赋值。

visit_binary(binary: kork.ast.Binary) Any[source]#

访问二元表达式。

visit_extern_function_def(extern_function_def: kork.ast.ExternFunctionDef) None[source]#

访问外部函数定义。

visit_function_call(call: kork.ast.FunctionCall) Any[source]#

访问函数调用。

visit_function_def(function_def: kork.ast.FunctionDef) None[source]#

访问函数定义。

visit_grouping(grouping: kork.ast.Grouping) Any[source]#

访问分组。

visit_list_(list_: kork.ast.List_) list[source]#

访问列表。

visit_literal(literal: kork.ast.Literal) Optional[Union[int, float, bool, str]][source]#

访问数字字面量。

visit_program(program: kork.ast.Program) None[source]#

访问程序。

visit_unary(unary: kork.ast.Unary) Any[source]#

访问一元表达式。

visit_var_decl(var_decl: kork.ast.VarDecl) None[source]#

访问变量声明。

visit_variable(variable: kork.ast.Variable) Any[source]#

访问变量。

class kork.interpreter.InterpreterResult[source]#

Bases: TypedDict

使用此项返回解释器的结果。

environment: kork.environment.Environment#
errors: Sequence[Exception]#
kork.interpreter.run_interpreter(code: str, environment: Optional[kork.environment.Environment] = None) kork.interpreter.InterpreterResult[source]#

使用给定的代码运行解释器。

参数
  • code – 要运行的代码

  • environment – 运行代码的环境

返回

代码运行后的最终环境 (这可能会更改)

kork.parser 模块#

Kork 的默认 AST 解析器。

Kork 使用 Lark 来解析 AST。此语法紧密遵循《Crafting Interpreters》中用于 Lox 编程语言的语法。

https://craftinginterpreters.fullstack.org.cn/appendix-i.html#expressions

此语法和解析器是在几个小时的工作中仓促完成的。

如果您非常在意语言设计,请原谅任何违规行为,并随时帮助改进语法/解析器/解释器。

class kork.parser.AstParser(visit_tokens: bool = True)[source]#

基类: lark.visitors.Transformer

给定语言的 AST 解析器。

args(*items)[source]#

从给定的项创建函数的参数列表。

binary(left, operator, right) kork.ast.Binary[source]#

从给定的左操作数、运算符和右操作数创建二元表达式。

block(*statements)[source]#

从给定的语句创建代码块。

expr(item) kork.ast.Expr[source]#

从给定的项创建表达式。

extern_function_decl(name, params, return_type) kork.ast.ExternFunctionDef[source]#

从给定的名称、参数和返回类型声明外部函数。

false() kork.ast.Literal[source]#

创建 false 字面量。

function_call(name, args) kork.ast.FunctionCall[source]#

从给定的名称和参数创建函数调用。

function_decl(name, params, return_type, block) kork.ast.FunctionDef[source]#

从给定的名称、参数、返回类型和代码块声明函数。

group(expr) kork.ast.Grouping[source]#

从给定的表达式创建分组。

identifier(name) kork.ast.Variable[source]#

从给定的名称创建变量引用。

list(items) kork.ast.List_[source]#

从给定的项创建列表字面量。

null() kork.ast.Literal[source]#

创建 null 字面量。

number(item) kork.ast.Literal[source]#
param(name, type_) kork.ast.Param[source]#

从给定的名称和类型创建参数。

params(*items) kork.ast.ParamList[source]#

从给定的项创建参数列表。

program(*items) kork.ast.Program[source]#

从给定的语句创建程序。

scientific(coefficient, exponent) kork.ast.Literal[source]#
statement(item) kork.ast.Stmt[source]#

从给定的项创建语句。

string(item) kork.ast.Literal[source]#
true() kork.ast.Literal[source]#

创建 true 字面量。

type(name)[source]#

从给定的名称创建类型。

unary_r(operator, right) kork.ast.Unary[source]#

从给定的运算符和左操作数创建一元表达式。

var_decl(name, value) kork.ast.VarDecl[source]#

从给定的名称和值声明变量。

variable_assign(name, value) kork.ast.Assign[source]#

从给定的名称和值创建变量赋值。

kork.parser.parse(source: str) kork.ast.Program[source]#

将给定的源代码解析为 AST。

kork.prompt_adapter 模块#

一个提示适配器,允许与常规 LLM 和 Chat LLM 一起工作。

此提示适配器支持将提示分解为以下部分:

  1. 指令部分

  2. (可选) 示例部分

class kork.prompt_adapter.FewShotPromptValue(*, string: Callable[[], str], messages: Callable[[], List[langchain.schema.BaseMessage]])[source]#

基类: langchain.schema.PromptValue

与 langchain 提示格式集成。

class Config[source]#

Bases: object

此 pydantic 对象的配置。

arbitrary_types_allowed = True#
extra = 'forbid'#
messages: Callable[[], List[langchain.schema.BaseMessage]]#
string: Callable[[], str]#
to_messages() List[langchain.schema.BaseMessage][source]#

获取具体化的消息。

to_string() str[source]#

将提示格式化为字符串。

class kork.prompt_adapter.FewShotTemplate(*, input_variables: List[str], output_parser: Optional[langchain.schema.BaseOutputParser] = None, partial_variables: Mapping[str, Union[str, Callable[[], str]]] = None, instruction_template: langchain.prompts.prompt.PromptTemplate, examples: Sequence[Tuple[str, str]] = ())[source]#

基类: langchain.prompts.base.BasePromptTemplate

代码提示模板。

examples: Sequence[Tuple[str, str]]#
format(**kwargs: Any) str[source]#

已弃用的 format 方法。

format_prompt(**kwargs: Any) langchain.schema.PromptValue[source]#

格式化提示。

instruction_template: langchain.prompts.prompt.PromptTemplate#
to_messages(query: str) List[langchain.schema.BaseMessage][source]#

获取具体化的消息。

to_string(query: str) str[source]#

将提示格式化为字符串。

kork.retrieval 模块#

尝试找出最相关的代码编写信息的逻辑。

class kork.retrieval.AbstractContextRetriever[source]#

基类: abc.ABC

用于检索编程上下文的抽象接口。

abstract retrieve(query: str) Sequence[kork.ast.ExternFunctionDef][source]#

检索外部函数定义。

class kork.retrieval.SimpleContextRetriever(external_functions: Sequence[kork.ast.ExternFunctionDef] = ())[source]#

基类: kork.retrieval.AbstractContextRetriever

检索提供的信息,不进行任何过滤或重新排序。

external_functions: Sequence[kork.ast.ExternFunctionDef] = ()#
classmethod from_functions(mixed_funcs: Sequence[Union[kork.ast.ExternFunctionDef, Callable]]) kork.retrieval.SimpleContextRetriever[source]#

从函数序列创建简单的检索器。

参数

mixed_funcs – 函数或外部函数定义的序列。

返回

一个简单的检索器。

retrieve(query: str) Sequence[kork.ast.ExternFunctionDef][source]#

检索外部函数定义。

kork.utils 模块#

kork.utils.unwrap_code(language_name: str, text: str) Optional[str][source]#

提取位于代码标签内的代码。

kork.utils.unwrap_tag(tag_name: str, text: str) Optional[str][source]#

提取位于标签内的内容。

kork.utils.wrap_in_tag(tag_name: str, content: str) str[source]#

将内容包装在 HTML 样式标签中。

kork.version 模块#

获取软件包的版本。

模块内容#

class kork.AbstractContextRetriever[source]#

基类: abc.ABC

用于检索编程上下文的抽象接口。

abstract retrieve(query: str) Sequence[kork.ast.ExternFunctionDef][source]#

检索外部函数定义。

class kork.AbstractExampleRetriever[source]#

基类: abc.ABC

示例检索器的抽象接口。

示例接口必须实现 retrieve 方法,该方法根据给定的查询返回相关示例列表。

abstract retrieve(query: str) List[Tuple[str, str]][source]#

检索示例。

class kork.AstPrinter[source]#

基类: kork.ast_printer.AbstractAstPrinter

默认 AST 打印器实现。

visit(element: Union[kork.ast.Stmt, kork.ast.Expr], pretty_print: bool = False) str[source]#

打印 AST 的入口点。

visit_assign(assign: kork.ast.Assign, **data: Any) str[source]#

打印赋值。

visit_binary(binary: kork.ast.Binary, **data: Any) str[source]#

打印二元表达式。

visit_extern_function_def(extern_function_def: kork.ast.ExternFunctionDef, **data: Any) str[source]#

打印外部函数定义。

visit_function_call(call: kork.ast.FunctionCall, **data: Any) str[source]#

打印函数调用。

visit_function_def(function_def: kork.ast.FunctionDef, **data: Any) str[source]#

打印函数定义。

visit_grouping(grouping: kork.ast.Grouping, **data: Any) str[source]#
visit_list_(list_: kork.ast.List_, **data: Any) str[source]#

打印列表。

visit_literal(literal: kork.ast.Literal, **data: Any) str[source]#

打印字面量。

visit_param(param: kork.ast.Param, **data: Any) str[source]#

打印参数。

visit_param_list(param_list: kork.ast.ParamList, **data: Any) str[source]#

打印参数列表。

visit_program(program: kork.ast.Program, **data: Any) str[source]#

打印程序。

visit_unary(unary: kork.ast.Unary, **data: Any) str[source]#

访问一元表达式。

visit_var_decl(var_decl: kork.ast.VarDecl, **data: Any) str[source]#

打印变量声明。

visit_variable(variable: kork.ast.Variable, **data: Any) str[source]#

打印变量。

kork.CodeChain(*, memory: Optional[langchain.schema.BaseMemory] = None, callback_manager: langchain.callbacks.base.BaseCallbackManager = None, verbose: bool = None, llm: langchain.schema.BaseLanguageModel, interpreter: Callable[[str, kork.environment.Environment], kork.interpreter.InterpreterResult], ast_printer: kork.ast_printer.AbstractAstPrinter, context_retriever: Optional[kork.retrieval.AbstractContextRetriever] = None, example_retriever: Optional[kork.examples.AbstractExampleRetriever] = None, instruction_template: langchain.prompts.prompt.PromptTemplate = PromptTemplate(input_variables=['language_name', 'external_functions_block'], output_parser=None, partial_variables={}, template='You are programming in a language called "{language_name}".\n\nYou are an expert programmer and must follow the instructions below exactly.\n\nYour goal is to translate a user query into a corresponding and valid {language_name}\nprogram.\n\n{external_functions_block}\n\nDo not assume that any other functions except for the ones listed above exist.\n\nWrap the program in <code> and </code> tags.\n\nStore the solution to the query in a variable called "result".\n\nHere is a sample valid program:\n\n<code>\nvar x = 1 # Assign 1 to the variable x\nvar result = 1 + 2 # Calculate the sum of 1 + 2 and assign to result\nvar result = x # Assign the value of x to result\n</code>\n\nGuidelines:\n- Do not use operators, instead invoke appropriate external functions.\n- Do not declare functions, do not use loops, do not use conditionals.\n- Solve the problem only using variable declarations and function invocations.\n\nBegin!\n', template_format='f-string', validate_template=True), input_key: str = 'query', language_name: str = '😼', input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = 'triple_quotes', **extra_data: Any)[source]#

Bases: langchain.chains.base.Chain

一个编码链。

Config[source]#

Bases: object

此 pydantic 对象的配置。

arbitrary_types_allowed = True#
extra = 'allow'#
ast_printer: AbstractAstPrinter#

用于编码链的 AST 打印器。

callback_manager: BaseCallbackManager#
context_retriever: Optional[AbstractContextRetriever]#

要注入到环境和提示中的上下文。

目前,此上下文仅限于外部函数。

example_retriever: Optional[AbstractExampleRetriever]#

应添加到提示中的示例。

classmethod from_defaults(*, llm: langchain.schema.BaseLanguageModel, interpreter: typing.Callable[[str, kork.environment.Environment], kork.interpreter.InterpreterResult] = <function run_interpreter>, ast_printer: kork.ast_printer.AbstractAstPrinter = <kork.ast_printer.AstPrinter object>, context: typing.Optional[typing.Union[kork.retrieval.AbstractContextRetriever, typing.Sequence[typing.Union[kork.ast.ExternFunctionDef, typing.Callable]]]] = None, examples: typing.Optional[typing.Union[kork.examples.AbstractExampleRetriever, typing.Sequence[typing.Tuple[str, kork.ast.Program]]]] = None, instruction_template: langchain.prompts.prompt.PromptTemplate = PromptTemplate(input_variables=['language_name', 'external_functions_block'], output_parser=None, partial_variables={}, template='You are programming in a language called "{language_name}".\n\nYou are an expert programmer and must follow the instructions below exactly.\n\nYour goal is to translate a user query into a corresponding and valid {language_name}\nprogram.\n\n{external_functions_block}\n\nDo not assume that any other functions except for the ones listed above exist.\n\nWrap the program in <code> and </code> tags.\n\nStore the solution to the query in a variable called "result".\n\nHere is a sample valid program:\n\n<code>\nvar x = 1 # Assign 1 to the variable x\nvar result = 1 + 2 # Calculate the sum of 1 + 2 and assign to result\nvar result = x # Assign the value of x to result\n</code>\n\nGuidelines:\n- Do not use operators, instead invoke appropriate external functions.\n- Do not declare functions, do not use loops, do not use conditionals.\n- Solve the problem only using variable declarations and function invocations.\n\nBegin!\n', template_format='f-string', validate_template=True), input_key: str = 'query', language_name: str = '😼', input_formatter: typing.Union[typing.Literal['text_prefix'], typing.Literal['triple_quotes'], typing.Literal['markdown_text'], None, typing.Callable[[str], str]] = 'markdown_text') kork.chain.CodeChain[source]#

从预配置的默认值创建代码链。

参数
  • llm – 用于编码的语言模型

  • interpreter – 将用于执行程序的解释器

  • ast_printer – 可以将 AST 打印为文本字符串的 ast 打印器

  • context – 函数列表或上下文检索器。函数列表可以是 python 可调用对象和 Kork 外部函数的混合。所有 python 函数都将转换为 Kork 外部函数,所有内容都将传递到默认上下文检索器。

  • examples – 示例检索器或示例列表。如果是示例列表,将创建一个简单的示例检索器。

  • instruction_template – 用于自定义提示的指令组件。

  • language_name – 用于提示的语言名称。

  • input_formatter – 一种格式,如果传入示例列表,将应用于每个示例元组的输入部分。

  • input_key – 要使用的输入键。

返回

代码链

input_formatter: InputFormatter#

微笑猫编程语言;又名 Kork;又名 😼

input_key: str#
instruction_template: PromptTemplate#

指令提示的模板。

interpreter: Callable[[str, Environment], InterpreterResult]#

用于编码链的解释器。

language_name: str#
llm: BaseLanguageModel#

用于编码链的语言模型。

memory: Optional[BaseMemory]#
prepare_context(query: str, variables: Optional[Mapping[str, Any]] = None) Tuple[kork.environment.Environment, kork.prompt_adapter.FewShotTemplate][source]#

获取预填充的环境和少量镜头模板。

参数
  • query – 准备上下文的查询。

  • variables – 应添加到上下文的任何变量。

返回

预填充的环境和预格式化的小样本模板。

verbose: bool#
kork.Environment(parent: typing.Optional[kork.environment.Environment] = None, variables: typing.Dict[str, typing.Any] = <factory>)[source]#

Bases: object

用于存储变量和函数定义的环境。

clone() kork.environment.Environment[source]#

克隆根级别环境,对变量进行深拷贝。

提供克隆功能是因为环境是可变变量。

最大的危险是改变变量字典,调用者可能会保留对该字典的引用。

TODO(Eugene): 重构以降低这种危险。

get_symbol(name: str) Any[source]#

从环境中获取符号。

参数

name – 要查找的符号名称

返回

给定符号的 SymbolValue(如果存在),否则引发错误

list_external_functions() List[kork.ast.ExternFunctionDef][source]#

获取外部定义的外部函数列表。

parent: Optional[kork.environment.Environment] = None#
set_symbol(name: str, value: Any) Any[source]#

在环境中设置符号。

variables: Dict[str, Any]#
kork.InterpreterResult[source]#

Bases: TypedDict

使用此项返回解释器的结果。

environment: kork.environment.Environment#
errors: Sequence[Exception]#
exception kork.KorkException[source]#

基类:Exception

通用 Kork 异常。

kork.SimpleContextRetriever(external_functions: Sequence[kork.ast.ExternFunctionDef] = ())[source]#

基类: kork.retrieval.AbstractContextRetriever

检索提供的信息,不进行任何过滤或重新排序。

external_functions: Sequence[kork.ast.ExternFunctionDef] = ()#
classmethod from_functions(mixed_funcs: Sequence[Union[kork.ast.ExternFunctionDef, Callable]]) kork.retrieval.SimpleContextRetriever[source]#

从函数序列创建简单的检索器。

参数

mixed_funcs – 函数或外部函数定义的序列。

返回

一个简单的检索器。

retrieve(query: str) Sequence[kork.ast.ExternFunctionDef][source]#

检索外部函数定义。

kork.SimpleExampleRetriever(examples: Sequence[Tuple[str, str]])[source]#

基类:kork.examples.AbstractExampleRetriever

简单示例检索器。

简单的示例检索器,返回初始化时提供的示例。

支持从程序列表初始化。

示例

from kork import SimpleExampleRetriever, AstPrinter, c_, r_

simple_example_retriever = SimpleExampleRetriever.from_programs(
    language_name="kork",
    examples=[
        ("add 1 2", r_(c_(add, 1, 2))),
        ("add 1 2 3", r_(c_(add, 1, 2, 3))),
        ],
    ast_printer=AstPrinter(),
)

examples = simple_example_retriever.retrieve("add 1 2")
classmethod from_programs(language_name: str, examples: Sequence[Tuple[str, kork.ast.Program]], ast_printer: kork.ast_printer.AbstractAstPrinter) kork.examples.SimpleExampleRetriever[source]#

从程序创建简单示例检索器。

参数
  • language_name – 用于 markdown 代码块的语言名称。

  • examples – (查询,所需程序) 形式的元组序列。

  • ast_printer – 用于格式化所需输出的 ast 打印机。

返回

一个简单的示例检索器。

retrieve(query: str) List[Tuple[str, str]][source]#

检索与给定查询最匹配的示例。

kork.c_(name: Callable, *args: Any) kork.ast.FunctionCall[source]#

创建 kork 函数调用。

kork.format_examples(language_name: str, examples: Sequence[Tuple[str, kork.ast.Program]], ast_printer: kork.ast_printer.AbstractAstPrinter, input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = None) List[Tuple[str, str]][source]#

格式化示例。

kork.r_(expr: kork.ast.Expr) kork.ast.Program[source]#

将最后一个程序表达式分配给结果变量。

kork.run_interpreter(code: str, environment: Optional[kork.environment.Environment] = None) kork.interpreter.InterpreterResult[source]#

使用给定的代码运行解释器。

参数
  • code – 要运行的代码

  • environment – 运行代码的环境

返回

代码运行后的最终环境 (这可能会更改)