56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package entityreconcile
|
|
|
|
import (
|
|
"fmt"
|
|
"io/fs"
|
|
|
|
rootassets "gitea.maximumdirect.net/eric/notarius/assets"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
|
)
|
|
|
|
const (
|
|
ResponseSchemaKey = llm.ResponseSchemaKey("dnd_entity_reconcile_llm")
|
|
ResponseSchemaID = "notarius.dnd.entity_reconcile.llm"
|
|
ResponseSchemaName = "notarius_dnd_entity_reconcile_llm_v1"
|
|
SchemaVersion = "v1"
|
|
SchemaAssetPath = "schemas/dnd_entity_reconcile_llm.v1.json"
|
|
)
|
|
|
|
func schemaAssetFS() (fs.FS, error) {
|
|
assets, err := fs.Sub(rootassets.FS(), "dnd/entity-reconciliation")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("scope entity reconciliation assets: %w", err)
|
|
}
|
|
return assets, nil
|
|
}
|
|
|
|
// LoadResponseSchema returns the shared private duplicate-group response
|
|
// contract. It is intentionally separate from durable artifact schemas.
|
|
func LoadResponseSchema() (llm.ResponseSchema, error) {
|
|
assets, err := schemaAssetFS()
|
|
if err != nil {
|
|
return llm.ResponseSchema{}, err
|
|
}
|
|
return llm.LoadResponseSchema(assets, llm.ResponseSchemaDefinition{
|
|
Key: ResponseSchemaKey,
|
|
ID: ResponseSchemaID,
|
|
Version: SchemaVersion,
|
|
Name: ResponseSchemaName,
|
|
AssetPath: SchemaAssetPath,
|
|
})
|
|
}
|
|
|
|
// RegisterSchemaAssets makes the shared private response schema available to
|
|
// prompt preparation. A family registrar can register it once for all consumers.
|
|
func RegisterSchemaAssets(registry *llm.AssetRegistry) error {
|
|
assets, err := schemaAssetFS()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
schemas, err := fs.Sub(assets, "schemas")
|
|
if err != nil {
|
|
return fmt.Errorf("scope entity reconciliation schemas: %w", err)
|
|
}
|
|
return registry.RegisterSchemaFS(schemas, ".")
|
|
}
|