NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
registry.h
1#pragma once
2
3#include <neograph/api.h>
5#include <memory>
6#include <mutex>
7#include <optional>
8#include <string>
9#include <unordered_map>
10
11namespace neograph::graph {
12
21class NEOGRAPH_API GraphRegistry {
22public:
23 enum class Fallback { BuiltinsOnly, GlobalFallback };
24 explicit GraphRegistry(Fallback fallback = Fallback::BuiltinsOnly);
26 GraphRegistry& operator=(GraphRegistry&& other);
27 GraphRegistry(const GraphRegistry& other);
28 GraphRegistry& operator=(const GraphRegistry& other);
29 std::shared_ptr<const GraphRegistry> snapshot() const;
30
31 static const GraphRegistry& global();
32
33 void register_reducer(const std::string& name, ReducerFn fn);
34 void register_condition(const std::string& name, ConditionFn fn);
35 void register_condition(const std::string& name, ConditionFn fn, ConditionSpec spec);
36 void register_type(const std::string& type, NodeFactoryFn fn);
37 void register_type(const std::string& type, NodeFactoryFn fn, json config_schema);
38 void register_type(const std::string& type, NodeFactoryFn fn, json config_schema, json effects);
39
40 ReducerFn reducer(const std::string& name) const;
41 ConditionFn condition(const std::string& name) const;
42 std::optional<ConditionSpec> condition_spec(const std::string& name) const;
43 std::unique_ptr<GraphNode> create(const std::string& type,
44 const std::string& name,
45 const json& config,
46 const NodeContext& ctx) const;
47 json config_schema(const std::string& type) const;
48 json node_effects(const std::string& type) const;
49
51 ReducerFn local_reducer(const std::string& name) const;
52 ConditionFn local_condition(const std::string& name) const;
53 std::optional<ConditionSpec> local_condition_spec(const std::string& name) const;
54 std::unique_ptr<GraphNode> create_local(const std::string& type,
55 const std::string& name,
56 const json& config,
57 const NodeContext& ctx) const;
58 json local_config_schema(const std::string& type) const;
59 json local_node_effects(const std::string& type) const;
60
62 bool contains_reducer(const std::string& name) const;
63 bool contains_condition(const std::string& name) const;
64 bool contains_type(const std::string& type) const;
65
72 json export_schema() const;
75
76
77private:
78 explicit GraphRegistry(bool builtins);
79 static const GraphRegistry& builtins();
80 mutable std::mutex mutex_;
81 Fallback fallback_ = Fallback::BuiltinsOnly;
82
83 std::unordered_map<std::string, ReducerFn> reducers_;
84 std::unordered_map<std::string, ConditionFn> conditions_;
85 std::unordered_map<std::string, ConditionSpec> condition_specs_;
86 std::unordered_map<std::string, NodeFactoryFn> node_factories_;
87 std::unordered_map<std::string, json> node_schemas_;
88 std::unordered_map<std::string, json> node_effects_;
89};
90
91} // namespace neograph::graph
NEOGRAPH_API export/import macro for shared-library builds.
Engine-owned registry of custom graph callables.
Definition registry.h:21
json export_schema() const
Export only entries owned by this registry.
json export_effective_schema() const
Export exactly the names resolvable by this registry (including defaults).
bool contains_reducer(const std::string &name) const
Local-only membership used by sealed admission profiles.
ReducerFn local_reducer(const std::string &name) const
Exact local-only resolvers; never consult process-global registries.
std::function< json(const json &current, const json &incoming)> ReducerFn
Custom reducer function signature.
Definition types.h:103
std::function< std::string(const GraphState &)> ConditionFn
Condition function signature for conditional edge routing.
Definition types.h:919
Legacy process-global registries for graph executables.
std::function< std::unique_ptr< GraphNode >(const std::string &name, const json &config, const NodeContext &ctx)> NodeFactoryFn
Factory function signature for creating graph nodes.
Definition loader.h:175
Singleton registry for conditional edge routing functions.
Definition loader.h:102
Dependency injection context passed to nodes during construction.
Definition types.h:753