#1942·outlines

DSL 容器类型将 bool 表示为 Python True/False,生成无效的 JSON 并偏离 JSON 方案路径

作者: ErenAta16创建于 2026年7月20日更新于 2026年8月31日

怎样?

在DSL所建造的集装箱类型(list[bool]',dit [str, bull]',tul [bool,.]')内,布林使Python型成为True'/False'型,而同一集装箱中的其他一切为JSON-形状:弦为JSON-引号('.),阵列/对象括号为JSON。 结果是JSON既无效,也不符合JSON-schema路径的字符串,而JSON-schema路径为同一种类型出出小写real'/false'.

前面要清楚一点:独立的 " types.boolean " 是Python式是故意的。 试验/类型/test custom types.py'明确宣称True'/''''''假'''匹配'和''真'没有',所以我并不建议自己改变这种类型。 这具体涉及当`bool'被嵌入DSL容器时会发生什么,否则周围的输出就是JSON.

  • 复制
2zz
导入再
从打入导入列表
从 pydantic 导入基底模
从大纲.type.dsl 导入 python types to terms, to regex, JsonSchema

# DSL 容器路径
dsl pattern = 为 regex(python types to terms(列表[bool])).
print ("DSL 列表[bool]:"), dsl pattern (中文(简体) ).
打印 (" 匹配 [ true] :" ), re. full match( dsl  pattern, "[ true]" 不是无) # False
打印 ("匹配 [True] :"), re. full match (dsl pattern, "[True]") 不是无) # True

JSON-schema 路径,用于同一类型
M 类( BaseModel ) :
物项: 清单[

js pattern = 为 regex(JsonSchema(M))
print ("JSON- schema {"items" ): [正 ) : “, re. fullmatch(js  pattern, “{” items" : [正 }") 不是无) # True
print("JSON-schema {"items"): [True]}:', re. fullmatch(js pattern,"{"items": [True]}")不是无)#虚假

输出 :

DSL列表[bool]:\ [(((True|False)))(,\ (True|False) *)?\]
匹配 [真 : 假
匹配 [True] : true
JSON-schema {"项目": [真]: 对
JSON-schema {"项目": [真]: 虚假

为什么这前后不一致?

在一个DSL容器内,字符串值出出JSON-引出(X ensure json 引出'包裹'Literal ['"cat"]'作为'""cat""),括号为JSON阵列/对象,但布林出Python-tyle. 因此,列表[bool]'产生[真 ',而json.loads'拒绝。 同一逻辑类型通过一个活字段(List[bool]')生成[真',这是有效的JSON。 因此,选择入门点会默默地改变生成的输出是否像 JSON, 与 #1938 (数据类可选性) 和 #1940 (空取集合) 的同类相差, 但用于布尔字节.

可能的方向

集装箱内的 " bool " 可以小写为 " true " / " falsse " ,在同一地点,已经为集装箱引用了JSON语(X ensure-json-quoted " ,或handle list'/X handle-dit'/handle-tuple'元素处理),留下独立的 " 类型 " 。

这是一个设计调用,而不是一个明显的固定,因为它取决于DSL容器输出是否意味着严格的JSON. 把它当作一个问题,而不是为此发出公关 . . . . . . .

内容来源: dottxt-ai/outlines