feat: plan deterministic generated conversations
This commit is contained in:
@@ -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])
|
||||
Reference in New Issue
Block a user