feat: plan deterministic generated conversations

This commit is contained in:
Rijad Zuzo
2026-08-12 20:32:53 +02:00
parent 4b58c534d0
commit 41b37a4962
28 changed files with 1694 additions and 0 deletions
@@ -0,0 +1,44 @@
class_name ConversationTemplateCatalog
extends Resource
@export var line_templates: Dictionary = {}
@export var option_templates: Dictionary = {}
func validate(intent_ids: Array[StringName] = ConversationIntentIds.ALL) -> Array[String]:
var errors: Array[String] = []
_validate_templates(line_templates, "line", intent_ids, errors)
_validate_templates(option_templates, "option", intent_ids, errors)
errors.sort()
return errors
func get_line_templates(intent_id: StringName) -> Array[String]:
return _get_templates(line_templates, intent_id)
func get_option_templates(intent_id: StringName) -> Array[String]:
return _get_templates(option_templates, intent_id)
func _get_templates(source: Dictionary, intent_id: StringName) -> Array[String]:
var result: Array[String] = []
var values: Variant = source.get(String(intent_id), [])
if values is Array or values is PackedStringArray:
for value in values:
if value is String:
result.append(value)
return result
func _validate_templates(
source: Dictionary, kind: String, intent_ids: Array[StringName], errors: Array[String]
) -> void:
for intent_id in intent_ids:
var templates := _get_templates(source, intent_id)
if templates.is_empty():
errors.append("Missing %s templates for '%s'" % [kind, intent_id])
continue
for template in templates:
if template.strip_edges().is_empty():
errors.append("Empty %s template for '%s'" % [kind, intent_id])