NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
artifact_provider.h
Go to the documentation of this file.
1
11#pragma once
12
13#include <neograph/api.h>
15#include <neograph/json.h>
16
17#include <asio/awaitable.hpp>
18
19#include <chrono>
20#include <cstdint>
21#include <functional>
22#include <memory>
23#include <optional>
24#include <string>
25#include <string_view>
26#include <vector>
27
28namespace neograph {
29
31enum class ArtifactExecutionMode : std::uint8_t {
32 OneShot,
33 Stream,
34 LongRunning,
35};
36
37NEOGRAPH_API std::string_view to_string(ArtifactExecutionMode mode) noexcept;
38
40enum class ArtifactOperationStatus : std::uint8_t {
41 Queued,
42 Running,
43 Succeeded,
44 Failed,
45 Cancelled,
46 TimedOut,
47};
48
49NEOGRAPH_API std::string_view to_string(ArtifactOperationStatus status) noexcept;
50
52struct NEOGRAPH_API Artifact {
53 std::string identity;
54 std::string uri;
55 std::string media_type;
56 std::uint64_t size_bytes = 0;
57 json metadata = json::object();
58
59 bool operator==(const Artifact&) const = default;
60};
61
63enum class ArtifactEventKind : std::uint8_t {
64 Progress,
66 State,
67};
68
69NEOGRAPH_API std::string_view to_string(ArtifactEventKind kind) noexcept;
70
71struct NEOGRAPH_API ArtifactEvent {
72 ArtifactEventKind kind = ArtifactEventKind::Progress;
73 std::string operation_id;
74 std::uint64_t sequence = 0;
75 std::optional<Artifact> artifact;
76 json data = json::object();
77
78 bool operator==(const ArtifactEvent&) const = default;
79};
80
82struct NEOGRAPH_API ArtifactPollPolicy {
83 std::uint32_t max_attempts = 60;
84 std::chrono::milliseconds interval{1000};
85
86 bool operator==(const ArtifactPollPolicy&) const = default;
87};
88
97struct NEOGRAPH_API ArtifactRequest {
98 std::string operation;
99 json input = json::object();
100 std::string idempotency_key;
101 ArtifactExecutionMode mode = ArtifactExecutionMode::OneShot;
103 std::shared_ptr<graph::CancelToken> cancel_token;
104};
105
107struct NEOGRAPH_API ArtifactOperation {
108 std::string id;
109 ArtifactOperationStatus status = ArtifactOperationStatus::Queued;
110 std::vector<Artifact> artifacts;
111 json output = json::object();
112 std::string error_code;
113 std::string error_message;
114
115 [[nodiscard]] bool terminal() const noexcept;
116 [[nodiscard]] bool succeeded() const noexcept;
117 [[nodiscard]] bool failed() const noexcept;
118};
119
120using ArtifactEventCallback = std::function<void(const ArtifactEvent&)>;
121
123NEOGRAPH_API void to_json(json& value, const Artifact& artifact);
124NEOGRAPH_API void from_json(const json& value, Artifact& artifact);
125
139class NEOGRAPH_API ArtifactProvider {
140 public:
141 virtual ~ArtifactProvider();
142
143 ArtifactProvider(const ArtifactProvider&) = delete;
144 ArtifactProvider& operator=(const ArtifactProvider&) = delete;
146 ArtifactProvider& operator=(ArtifactProvider&&) = delete;
147
148 ArtifactOperation execute(ArtifactRequest request,
149 ArtifactEventCallback on_event = {});
150
151 asio::awaitable<ArtifactOperation>
152 execute_async(ArtifactRequest request,
153 ArtifactEventCallback on_event = {});
154
156 virtual std::string get_name() const = 0;
157
158 protected:
159 ArtifactProvider() = default;
160
161 virtual asio::awaitable<ArtifactOperation>
162 do_start(ArtifactRequest request, ArtifactEventCallback on_event) = 0;
163
164 virtual asio::awaitable<ArtifactOperation>
165 do_poll(ArtifactOperation operation) = 0;
166
167 private:
168 asio::awaitable<ArtifactOperation>
169 execute_unbound(ArtifactRequest request, ArtifactEventCallback on_event);
170};
171
172} // namespace neograph
NEOGRAPH_API export/import macro for shared-library builds.
ArtifactOperationStatus
Provider-neutral lifecycle state of one generated-artifact operation.
ArtifactEventKind
Incremental provider notification for ArtifactExecutionMode::Stream.
ArtifactExecutionMode
How a provider delivers an artifact operation's result.
Cooperative cancellation primitive for graph runs.
One explicit asynchronous artifact-provider contract.
virtual std::string get_name() const =0
Opaque diagnostic identifier.
Thin C++ RAII wrapper around yyjson with nlohmann-compatible API.
Final or latest observed state of an artifact operation.
Polling bound for one long-running operation.
Immutable-by-convention input owned by ArtifactProvider::execute_async.
A durable reference to generated content.