haystack 创建可变参数贪婪输入类型,并从组件装饰器中移除is_greedy参数,

z9zf31ra  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(60)

在创建新的Component时,我必须用 @component 装饰器来装饰它。
到目前为止,这个装饰器接受一个单一的 bool 参数,如这里定义的。
那个 is_greedy 参数反过来临时设置了这里的内部类dunder字段。注解说这是暂时的,但正如我们在下一段中所看到的,实际上是错误的。当我们开始实现它时,我们假设这会是暂时的,因为Component的“贪婪”程度也取决于它接收的输入类型,而在执行的这一点上,我们还无法可靠地知道Component的输入类型。
然后在这里,在 ComponentMeta 元类中,我们可以实际可靠地检查Component接收的实际输入类型,如果用户将 is_greedy 设置为 True 并且没有具有 Variadic 类型的输入,我们会发出警告。
这是必要的,因为具有 Variadic 输入并且将 is_greedy 作为 True 的Component与具有 Variadic 作为输入并且将 is_greedy 作为 False 的Component在调用 Pipeline.run() 时表现不同。在这里,我们确切地检查Component是否具有 Variadic 作为输入类型并且已将 is_greedy 设置为 True
具有 Variadic 输入和具有 is_greedy 作为 True 的Component与具有 is_greedy 作为 False 的Component之间的核心区别在于,后者将在尽可能长的时间内等待尝试执行具有 is_greedy 作为 False 的Component。而具有 is_greedy 作为 True 的Component将在收到与其连接的所有发送组件的第一个输入时立即添加到准备好运行的Component列表中。
由于这种做法容易出错,且Component的“贪婪”程度与其输入类型有关,因此我们实际上应该删除 is_greedy 参数。而不是依赖于 @component 装饰器参数来设置这些信息,我们应该创建一个 VariadicGreedy 类型,就像我们有一个 Variadic 类型一样。
这将更清楚地表明哪个Component实际上是“贪婪”的,并明确显示“贪婪”与 Variadic 输入类型有关。

zphenhs4

zphenhs41#

这也与 #7873 有关,因为它讨论了将 Variadicis_greedy 设置为 True 的组件的执行。
Pipeline.run() 执行过程中,组件的“贪婪”程度也在其他地方被引用。
在这里我们检查 is_greedy 字段,这实际上可能是一个错误,因为 is_greedy 字段从未被设置,而是使用了 __haystack_is_greedy__
此外,这里、这里和这里还使用了 __haystack_is_greedy__

相关问题