Skip to main content

GenAITypes.h File

Shared public vocabulary for NEAT GenAI APIs. More...

Included Headers​

#include "pipeline/Tensor.h" #include <nlohmann/json.hpp> #include <cstddef> #include <cstdint> #include <exception> #include <filesystem> #include <functional> #include <initializer_list> #include <iterator> #include <memory> #include <optional> #include <string> #include <vector>

Namespaces Index​

namespacesimaai
namespaceneat
namespacegenai

Classes Index​

classImageList

Ordered image inputs for GenAI requests and chat messages. More...

structChatMessage
structGenerationMetrics
structGenerationRequest
structGenerationResult
structTokenSample
classGenerationStream
classiterator
classProducer

Description​

Shared public vocabulary for NEAT GenAI APIs.

File Listing​

The file content with the documentation metadata removed is:

1
5#pragma once
6
7#include "pipeline/Tensor.h"
8
9#include <nlohmann/json.hpp>
10
11#include <cstddef>
12#include <cstdint>
13#include <exception>
14#include <filesystem>
15#include <functional>
16#include <initializer_list>
17#include <iterator>
18#include <memory>
19#include <optional>
20#include <string>
21#include <vector>
22
23#if defined(SIMA_WITH_OPENCV)
24#include <opencv2/core/mat.hpp>
25#endif
26
27namespace simaai::neat::genai {
28
29using Json = nlohmann::ordered_json;
30
31class ASRModel;
32class GenAIModel;
33class OpenAIServer;
35
42enum class GenAITask {
44 ASR,
45};
46
55class ImageList {
56public:
57 ImageList() = default;
58 ImageList(std::initializer_list<Tensor> images);
59 explicit ImageList(std::vector<Tensor> images);
60
61 ImageList& operator=(std::initializer_list<Tensor> images);
62 ImageList& operator=(std::vector<Tensor> images);
63
64#if defined(SIMA_WITH_OPENCV)
65 ImageList(std::initializer_list<cv::Mat> images);
66 explicit ImageList(const std::vector<cv::Mat>& images);
67
68 ImageList& operator=(std::initializer_list<cv::Mat> images);
69 ImageList& operator=(const std::vector<cv::Mat>& images);
70#endif
71
72 bool empty() const;
73 std::size_t size() const;
74 const std::vector<Tensor>& tensors() const;
75 std::vector<Tensor>& tensors();
76
77private:
78 std::vector<Tensor> images_;
79};
80
81struct ChatMessage {
82 std::string role;
83 std::string content;
85 bool use_cached_images = false;
86 Json tool_calls = Json::array();
87 std::optional<std::string> tool_call_id;
88 std::optional<std::string> name;
89};
90
92 std::uint32_t generated_tokens = 0;
94 double tokens_per_second = 0.0;
95};
96
98 std::optional<std::string> prompt;
99 std::optional<std::string> system_prompt;
100 std::vector<ChatMessage> messages;
102 bool use_cached_images = false;
103 std::optional<Tensor> audio;
104 std::optional<std::filesystem::path> audio_file;
105 std::string language = "en";
106 std::uint32_t max_new_tokens = 0;
107 Json tools = Json::array();
108 Json tool_choice = nullptr;
109};
110
112 std::string text;
114 std::string finish_reason;
115 Json tool_calls = Json::array();
116};
117
119 std::string text;
121 bool is_final = false;
122 std::string finish_reason;
123 Json tool_calls = Json::array();
124};
125
127public:
128 class iterator {
129 public:
130 using iterator_category = std::input_iterator_tag;
132 using difference_type = std::ptrdiff_t;
133 using pointer = const TokenSample*;
134 using reference = const TokenSample&;
135
136 iterator() = default;
137
141 void operator++(int);
142
143 friend bool operator==(const iterator& lhs, const iterator& rhs);
144 friend bool operator!=(const iterator& lhs, const iterator& rhs) {
145 return !(lhs == rhs);
146 }
147
148 private:
150 void advance();
151
152 GenerationStream* stream_ = nullptr;
153 std::optional<TokenSample> current_;
154
155 friend class GenerationStream;
156 };
157
159
161 GenerationStream& operator=(GenerationStream&&) noexcept;
162
164 GenerationStream& operator=(const GenerationStream&) = delete;
165
166 std::optional<TokenSample> next();
167 void cancel();
170
171private:
172 struct Impl;
173 class Producer {
174 public:
175 void record_metric(const std::string& metric, double value);
176 void record_text(const std::string& text, bool stream_end);
177 void push(TokenSample sample);
178 void finish(std::string finish_reason, std::optional<std::uint32_t> generated_tokens);
179 bool cancelled() const;
180 GenerationMetrics current_metrics() const;
181
182 private:
183 explicit Producer(Impl& impl);
184
185 Impl& impl_;
186
187 friend struct Impl;
188 };
189 using ProducerFn = std::function<void(Producer&)>;
190 using CancelFn = std::function<void()>;
191
192 explicit GenerationStream(std::unique_ptr<Impl> impl);
193 GenerationStream(ProducerFn producer, CancelFn cancel);
194
195 std::unique_ptr<Impl> impl_;
196
197 friend class ASRModel;
198 friend class VisionLanguageModel;
199};
200
201} // namespace simaai::neat::genai

Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.1.