@ancatag/n-r 0.2.18 → 0.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/chat.d.ts +5 -5
  2. package/dist/chat.d.ts.map +1 -1
  3. package/dist/chat.js +19 -9
  4. package/dist/chat.js.map +1 -1
  5. package/dist/client.d.ts +0 -1
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +2 -7
  8. package/dist/client.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +0 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/models.d.ts +5 -5
  14. package/dist/models.d.ts.map +1 -1
  15. package/dist/models.js +16 -7
  16. package/dist/models.js.map +1 -1
  17. package/dist/proto/engine.proto +431 -0
  18. package/dist/proto/generated/engine.d.ts +440 -0
  19. package/dist/proto/generated/engine.d.ts.map +1 -0
  20. package/dist/proto/generated/engine.js +39 -0
  21. package/dist/proto/generated/engine.js.map +1 -0
  22. package/dist/proto/generated/google/protobuf/duration.d.ts +80 -0
  23. package/dist/proto/generated/google/protobuf/duration.d.ts.map +1 -0
  24. package/dist/proto/generated/google/protobuf/duration.js +9 -0
  25. package/dist/proto/generated/google/protobuf/duration.js.map +1 -0
  26. package/dist/proto/generated/google/protobuf/timestamp.d.ts +110 -0
  27. package/dist/proto/generated/google/protobuf/timestamp.d.ts.map +1 -0
  28. package/dist/proto/generated/google/protobuf/timestamp.js +9 -0
  29. package/dist/proto/generated/google/protobuf/timestamp.js.map +1 -0
  30. package/dist/proto/generated/nova-service.d.ts +478 -0
  31. package/dist/proto/generated/nova-service.d.ts.map +1 -0
  32. package/dist/proto/generated/nova-service.js +122 -0
  33. package/dist/proto/generated/nova-service.js.map +1 -0
  34. package/dist/proto/nova-service.proto +472 -0
  35. package/package.json +17 -7
@@ -0,0 +1,122 @@
1
+ // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
2
+ // versions:
3
+ // protoc-gen-ts_proto v2.11.2
4
+ // protoc v6.33.4
5
+ // source: nova-service.proto
6
+ import { GrpcMethod, GrpcStreamMethod } from "@nestjs/microservices";
7
+ export const protobufPackage = "nova.service";
8
+ export var GenerationType;
9
+ (function (GenerationType) {
10
+ GenerationType[GenerationType["GENERATION_TYPE_UNSPECIFIED"] = 0] = "GENERATION_TYPE_UNSPECIFIED";
11
+ GenerationType[GenerationType["GENERATION_TYPE_TEXT"] = 1] = "GENERATION_TYPE_TEXT";
12
+ GenerationType[GenerationType["GENERATION_TYPE_IMAGE"] = 2] = "GENERATION_TYPE_IMAGE";
13
+ GenerationType[GenerationType["GENERATION_TYPE_VIDEO"] = 3] = "GENERATION_TYPE_VIDEO";
14
+ GenerationType[GenerationType["GENERATION_TYPE_AUDIO"] = 4] = "GENERATION_TYPE_AUDIO";
15
+ GenerationType[GenerationType["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
16
+ })(GenerationType || (GenerationType = {}));
17
+ export var StreamingMode;
18
+ (function (StreamingMode) {
19
+ StreamingMode[StreamingMode["STREAMING_MODE_NONE"] = 0] = "STREAMING_MODE_NONE";
20
+ /** STREAMING_MODE_TOKEN - Stream token by token */
21
+ StreamingMode[StreamingMode["STREAMING_MODE_TOKEN"] = 1] = "STREAMING_MODE_TOKEN";
22
+ /** STREAMING_MODE_CHUNK - Stream in chunks */
23
+ StreamingMode[StreamingMode["STREAMING_MODE_CHUNK"] = 2] = "STREAMING_MODE_CHUNK";
24
+ StreamingMode[StreamingMode["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
25
+ })(StreamingMode || (StreamingMode = {}));
26
+ export var ErrorCode;
27
+ (function (ErrorCode) {
28
+ ErrorCode[ErrorCode["ERROR_CODE_UNSPECIFIED"] = 0] = "ERROR_CODE_UNSPECIFIED";
29
+ ErrorCode[ErrorCode["ERROR_CODE_SUCCESS"] = 1] = "ERROR_CODE_SUCCESS";
30
+ ErrorCode[ErrorCode["ERROR_CODE_INVALID_REQUEST"] = 2] = "ERROR_CODE_INVALID_REQUEST";
31
+ ErrorCode[ErrorCode["ERROR_CODE_AUTHENTICATION_FAILED"] = 3] = "ERROR_CODE_AUTHENTICATION_FAILED";
32
+ ErrorCode[ErrorCode["ERROR_CODE_ACCESS_DENIED"] = 4] = "ERROR_CODE_ACCESS_DENIED";
33
+ ErrorCode[ErrorCode["ERROR_CODE_MODEL_NOT_FOUND"] = 5] = "ERROR_CODE_MODEL_NOT_FOUND";
34
+ ErrorCode[ErrorCode["ERROR_CODE_PROVIDER_UNAVAILABLE"] = 6] = "ERROR_CODE_PROVIDER_UNAVAILABLE";
35
+ ErrorCode[ErrorCode["ERROR_CODE_RATE_LIMIT_EXCEEDED"] = 7] = "ERROR_CODE_RATE_LIMIT_EXCEEDED";
36
+ ErrorCode[ErrorCode["ERROR_CODE_QUOTA_EXCEEDED"] = 8] = "ERROR_CODE_QUOTA_EXCEEDED";
37
+ ErrorCode[ErrorCode["ERROR_CODE_PROMPT_TOO_LONG"] = 9] = "ERROR_CODE_PROMPT_TOO_LONG";
38
+ ErrorCode[ErrorCode["ERROR_CODE_PARAMETER_ERROR"] = 10] = "ERROR_CODE_PARAMETER_ERROR";
39
+ ErrorCode[ErrorCode["ERROR_CODE_GENERATION_FAILED"] = 11] = "ERROR_CODE_GENERATION_FAILED";
40
+ ErrorCode[ErrorCode["ERROR_CODE_TIMEOUT"] = 12] = "ERROR_CODE_TIMEOUT";
41
+ ErrorCode[ErrorCode["ERROR_CODE_INTERNAL_ERROR"] = 13] = "ERROR_CODE_INTERNAL_ERROR";
42
+ ErrorCode[ErrorCode["ERROR_CODE_SERVICE_UNAVAILABLE"] = 14] = "ERROR_CODE_SERVICE_UNAVAILABLE";
43
+ ErrorCode[ErrorCode["ERROR_CODE_NOT_IMPLEMENTED"] = 15] = "ERROR_CODE_NOT_IMPLEMENTED";
44
+ ErrorCode[ErrorCode["ERROR_CODE_DATABASE_ERROR"] = 16] = "ERROR_CODE_DATABASE_ERROR";
45
+ ErrorCode[ErrorCode["ERROR_CODE_CACHE_ERROR"] = 17] = "ERROR_CODE_CACHE_ERROR";
46
+ ErrorCode[ErrorCode["ERROR_CODE_VECTOR_DB_ERROR"] = 18] = "ERROR_CODE_VECTOR_DB_ERROR";
47
+ ErrorCode[ErrorCode["ERROR_CODE_PROVIDER_TIMEOUT"] = 19] = "ERROR_CODE_PROVIDER_TIMEOUT";
48
+ ErrorCode[ErrorCode["ERROR_CODE_PROVIDER_RATE_LIMIT"] = 20] = "ERROR_CODE_PROVIDER_RATE_LIMIT";
49
+ ErrorCode[ErrorCode["ERROR_CODE_PROVIDER_AUTH_ERROR"] = 21] = "ERROR_CODE_PROVIDER_AUTH_ERROR";
50
+ ErrorCode[ErrorCode["ERROR_CODE_PROVIDER_QUOTA_EXCEEDED"] = 22] = "ERROR_CODE_PROVIDER_QUOTA_EXCEEDED";
51
+ ErrorCode[ErrorCode["ERROR_CODE_PROVIDER_INVALID_REQUEST"] = 23] = "ERROR_CODE_PROVIDER_INVALID_REQUEST";
52
+ ErrorCode[ErrorCode["ERROR_CODE_PROVIDER_GENERATION_FAILED"] = 24] = "ERROR_CODE_PROVIDER_GENERATION_FAILED";
53
+ ErrorCode[ErrorCode["ERROR_CODE_MAINTENANCE_MODE"] = 25] = "ERROR_CODE_MAINTENANCE_MODE";
54
+ ErrorCode[ErrorCode["ERROR_CODE_DEPRECATED_MODEL"] = 26] = "ERROR_CODE_DEPRECATED_MODEL";
55
+ ErrorCode[ErrorCode["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
56
+ })(ErrorCode || (ErrorCode = {}));
57
+ export var ErrorCategory;
58
+ (function (ErrorCategory) {
59
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_UNSPECIFIED"] = 0] = "ERROR_CATEGORY_UNSPECIFIED";
60
+ /** ERROR_CATEGORY_CLIENT - Client error (4xx) */
61
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_CLIENT"] = 1] = "ERROR_CATEGORY_CLIENT";
62
+ /** ERROR_CATEGORY_SERVER - Server error (5xx) */
63
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_SERVER"] = 2] = "ERROR_CATEGORY_SERVER";
64
+ /** ERROR_CATEGORY_PROVIDER - Provider error */
65
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_PROVIDER"] = 3] = "ERROR_CATEGORY_PROVIDER";
66
+ /** ERROR_CATEGORY_RATE_LIMIT - Rate limiting */
67
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_RATE_LIMIT"] = 4] = "ERROR_CATEGORY_RATE_LIMIT";
68
+ /** ERROR_CATEGORY_AUTHENTICATION - Auth related */
69
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_AUTHENTICATION"] = 5] = "ERROR_CATEGORY_AUTHENTICATION";
70
+ /** ERROR_CATEGORY_AUTHORIZATION - Permission related */
71
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_AUTHORIZATION"] = 6] = "ERROR_CATEGORY_AUTHORIZATION";
72
+ /** ERROR_CATEGORY_VALIDATION - Input validation */
73
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_VALIDATION"] = 7] = "ERROR_CATEGORY_VALIDATION";
74
+ /** ERROR_CATEGORY_QUOTA - Quota/limit exceeded */
75
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_QUOTA"] = 8] = "ERROR_CATEGORY_QUOTA";
76
+ /** ERROR_CATEGORY_NOT_FOUND - Resource not found */
77
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_NOT_FOUND"] = 9] = "ERROR_CATEGORY_NOT_FOUND";
78
+ /** ERROR_CATEGORY_NOT_IMPLEMENTED - Feature not implemented */
79
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_NOT_IMPLEMENTED"] = 10] = "ERROR_CATEGORY_NOT_IMPLEMENTED";
80
+ /** ERROR_CATEGORY_MAINTENANCE - Service maintenance */
81
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_MAINTENANCE"] = 11] = "ERROR_CATEGORY_MAINTENANCE";
82
+ /** ERROR_CATEGORY_TEMPORARY - Temporary error, retry later */
83
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_TEMPORARY"] = 12] = "ERROR_CATEGORY_TEMPORARY";
84
+ /** ERROR_CATEGORY_PERMANENT - Permanent error, no retry */
85
+ ErrorCategory[ErrorCategory["ERROR_CATEGORY_PERMANENT"] = 13] = "ERROR_CATEGORY_PERMANENT";
86
+ ErrorCategory[ErrorCategory["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
87
+ })(ErrorCategory || (ErrorCategory = {}));
88
+ export var StatusCode;
89
+ (function (StatusCode) {
90
+ StatusCode[StatusCode["STATUS_CODE_HEALTHY"] = 0] = "STATUS_CODE_HEALTHY";
91
+ StatusCode[StatusCode["STATUS_CODE_DEGRADED"] = 1] = "STATUS_CODE_DEGRADED";
92
+ StatusCode[StatusCode["STATUS_CODE_UNHEALTHY"] = 2] = "STATUS_CODE_UNHEALTHY";
93
+ StatusCode[StatusCode["STATUS_CODE_MAINTENANCE"] = 3] = "STATUS_CODE_MAINTENANCE";
94
+ StatusCode[StatusCode["STATUS_CODE_UNKNOWN"] = 4] = "STATUS_CODE_UNKNOWN";
95
+ StatusCode[StatusCode["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
96
+ })(StatusCode || (StatusCode = {}));
97
+ export const NOVA_SERVICE_PACKAGE_NAME = "nova.service";
98
+ export function NovaServiceControllerMethods() {
99
+ return function (constructor) {
100
+ const grpcMethods = [
101
+ "generateText",
102
+ "streamText",
103
+ "generateImage",
104
+ "generateAudio",
105
+ "generateVideo",
106
+ "healthCheck",
107
+ "listModels",
108
+ "listPresets",
109
+ ];
110
+ for (const method of grpcMethods) {
111
+ const descriptor = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
112
+ GrpcMethod("NovaService", method)(constructor.prototype[method], method, descriptor);
113
+ }
114
+ const grpcStreamMethods = [];
115
+ for (const method of grpcStreamMethods) {
116
+ const descriptor = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
117
+ GrpcStreamMethod("NovaService", method)(constructor.prototype[method], method, descriptor);
118
+ }
119
+ };
120
+ }
121
+ export const NOVA_SERVICE_NAME = "NovaService";
122
+ //# sourceMappingURL=nova-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nova-service.js","sourceRoot":"","sources":["../../../src/proto/generated/nova-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,472 @@
1
+ // ===================================================================
2
+ // NOVA SERVICE gRPC DEFINITION
3
+ // ===================================================================
4
+ // Multi-modal AI generation service with flexible model selection
5
+ // Supports text, image, video, and audio generation
6
+
7
+ syntax = "proto3";
8
+
9
+ package nova.service;
10
+
11
+ import "google/protobuf/timestamp.proto";
12
+ import "google/protobuf/duration.proto";
13
+
14
+ // ===================================================================
15
+ // SERVICE DEFINITION
16
+ // ===================================================================
17
+
18
+ service NovaService {
19
+ // Text Generation (FULLY IMPLEMENTED with Ollama)
20
+ rpc GenerateText(GenerateTextRequest) returns (GenerateTextResponse);
21
+ rpc StreamText(GenerateTextRequest) returns (stream GenerateTextStreamResponse);
22
+
23
+ // Image Generation (NULL IMPLEMENTATION - Coming Soon)
24
+ rpc GenerateImage(GenerateImageRequest) returns (GenerateImageResponse);
25
+
26
+ // Audio Generation (NULL IMPLEMENTATION - Coming Soon)
27
+ rpc GenerateAudio(GenerateAudioRequest) returns (GenerateAudioResponse);
28
+
29
+ // Video Generation (NULL IMPLEMENTATION - Coming Soon)
30
+ rpc GenerateVideo(GenerateVideoRequest) returns (GenerateVideoResponse);
31
+
32
+ // Administrative & Management
33
+ rpc HealthCheck(HealthCheckRequest) returns (HealthCheckResponse);
34
+ rpc ListModels(ListModelsRequest) returns (ListModelsResponse);
35
+ rpc ListPresets(ListPresetsRequest) returns (ListPresetsResponse);
36
+ }
37
+
38
+ // ===================================================================
39
+ // GENERATION TYPE ENUMS
40
+ // ===================================================================
41
+
42
+ enum GenerationType {
43
+ GENERATION_TYPE_UNSPECIFIED = 0;
44
+ GENERATION_TYPE_TEXT = 1;
45
+ GENERATION_TYPE_IMAGE = 2;
46
+ GENERATION_TYPE_VIDEO = 3;
47
+ GENERATION_TYPE_AUDIO = 4;
48
+ }
49
+
50
+ enum StreamingMode {
51
+ STREAMING_MODE_NONE = 0;
52
+ STREAMING_MODE_TOKEN = 1; // Stream token by token
53
+ STREAMING_MODE_CHUNK = 2; // Stream in chunks
54
+ }
55
+
56
+ // ===================================================================
57
+ // MODEL SELECTION STRATEGIES
58
+ // ===================================================================
59
+
60
+ message ModelSelection {
61
+ oneof selection_strategy {
62
+ // Option 1: Use a preset ID (RECOMMENDED)
63
+ string preset_id = 1;
64
+
65
+ // Option 2: Specify exact model UUID
66
+ string model_id = 2;
67
+
68
+ // Option 3: Provider + Generation Type + Parameters
69
+ ProviderSelection provider_selection = 3;
70
+
71
+ // Option 4: Auto-select best model for generation type
72
+ GenerationType auto_select = 4;
73
+ }
74
+ }
75
+
76
+ message ProviderSelection {
77
+ string provider_id = 1; // ProviderIntegration.id
78
+ GenerationType type = 2; // Text, Image, Video, Audio
79
+ map<string, string> parameters = 3; // Provider-specific params
80
+ int32 priority = 4; // Selection priority
81
+ }
82
+
83
+ // ===================================================================
84
+ // REQUEST/RESPONSE MESSAGES
85
+ // ===================================================================
86
+
87
+ // ----- TEXT GENERATION -----
88
+
89
+ message GenerateTextRequest {
90
+ string prompt = 1;
91
+ GenerationContext context = 2;
92
+ ModelSelection model_selection = 3;
93
+
94
+ // Generation parameters
95
+ int32 max_tokens = 4;
96
+ float temperature = 5;
97
+ float top_p = 6;
98
+ float top_k = 7;
99
+ string stop_sequences = 8;
100
+ bool include_context = 9;
101
+
102
+ // Streaming
103
+ StreamingMode streaming_mode = 10;
104
+ bool enable_streaming = 11;
105
+
106
+ // Request metadata
107
+ string request_id = 12;
108
+ string client_id = 13;
109
+ string character_id = 14;
110
+ string user_id = 15;
111
+ google.protobuf.Duration timeout = 16;
112
+
113
+ // Generation options
114
+ bool enable_cache = 17;
115
+ bool enable_semantic_cache = 18;
116
+ bool retry_on_failure = 19;
117
+ int32 max_retries = 20;
118
+ }
119
+
120
+ message GenerateTextResponse {
121
+ GenerationResult result = 1;
122
+ ModelInfo used_model = 2;
123
+ UsageStats usage = 3;
124
+ google.protobuf.Duration processing_time = 4;
125
+ bool cached = 5;
126
+ bool semantic_cache_hit = 6;
127
+ }
128
+
129
+ message GenerateTextStreamResponse {
130
+ string token = 1;
131
+ int32 token_index = 2;
132
+ ModelInfo used_model = 3;
133
+ GenerationError error = 4;
134
+ bool completed = 5;
135
+ UsageStats usage = 6;
136
+ }
137
+
138
+ // ----- IMAGE GENERATION (NULL IMPLEMENTATION) -----
139
+
140
+ message GenerateImageRequest {
141
+ string prompt = 1;
142
+ GenerationContext context = 2;
143
+ ModelSelection model_selection = 3;
144
+
145
+ // Image parameters
146
+ int32 width = 4;
147
+ int32 height = 5;
148
+ string style = 6;
149
+ int32 num_images = 7;
150
+ string negative_prompt = 8;
151
+
152
+ // Request metadata
153
+ string request_id = 9;
154
+ string client_id = 10;
155
+ string character_id = 11;
156
+ string user_id = 12;
157
+ google.protobuf.Duration timeout = 13;
158
+
159
+ // Generation options
160
+ bool enable_cache = 14;
161
+ bool retry_on_failure = 15;
162
+ }
163
+
164
+ message GenerateImageResponse {
165
+ // NULL IMPLEMENTATION - Coming Soon
166
+ GenerationError error = 1; // Returns "NOT_IMPLEMENTED" with message
167
+ string message = 2; // "Image generation coming soon"
168
+ GenerationResult result = 3;
169
+ ModelInfo used_model = 4;
170
+ }
171
+
172
+ // ----- AUDIO GENERATION (NULL IMPLEMENTATION) -----
173
+
174
+ message GenerateAudioRequest {
175
+ string text = 1;
176
+ GenerationContext context = 2;
177
+ ModelSelection model_selection = 3;
178
+
179
+ // Audio parameters
180
+ string voice = 4;
181
+ float speed = 5;
182
+ float pitch = 6;
183
+ string format = 7;
184
+
185
+ // Request metadata
186
+ string request_id = 8;
187
+ string client_id = 9;
188
+ string character_id = 10;
189
+ string user_id = 11;
190
+ google.protobuf.Duration timeout = 12;
191
+
192
+ // Generation options
193
+ bool enable_cache = 13;
194
+ bool retry_on_failure = 14;
195
+ }
196
+
197
+ message GenerateAudioResponse {
198
+ // NULL IMPLEMENTATION - Coming Soon
199
+ GenerationError error = 1; // Returns "NOT_IMPLEMENTED" with message
200
+ string message = 2; // "Audio generation coming soon"
201
+ GenerationResult result = 3;
202
+ ModelInfo used_model = 4;
203
+ }
204
+
205
+ // ----- VIDEO GENERATION (NULL IMPLEMENTATION) -----
206
+
207
+ message GenerateVideoRequest {
208
+ string prompt = 1;
209
+ GenerationContext context = 2;
210
+ ModelSelection model_selection = 3;
211
+
212
+ // Video parameters
213
+ int32 duration = 4;
214
+ int32 width = 5;
215
+ int32 height = 6;
216
+ int32 fps = 7;
217
+ string style = 8;
218
+
219
+ // Request metadata
220
+ string request_id = 9;
221
+ string client_id = 10;
222
+ string character_id = 11;
223
+ string user_id = 12;
224
+ google.protobuf.Duration timeout = 13;
225
+
226
+ // Generation options
227
+ bool enable_cache = 14;
228
+ bool retry_on_failure = 15;
229
+ }
230
+
231
+ message GenerateVideoResponse {
232
+ // NULL IMPLEMENTATION - Coming Soon
233
+ GenerationError error = 1; // Returns "NOT_IMPLEMENTED" with message
234
+ string message = 2; // "Video generation coming soon"
235
+ GenerationResult result = 3;
236
+ ModelInfo used_model = 4;
237
+ }
238
+
239
+ // ===================================================================
240
+ // CONTEXT & SUPPORTING MESSAGES
241
+ // ===================================================================
242
+
243
+ message GenerationContext {
244
+ // Character context
245
+ string character_id = 1;
246
+ CharacterPersonality personality = 2;
247
+
248
+ // Conversation history (for context)
249
+ repeated Message conversation_history = 3;
250
+
251
+ // User preferences
252
+ map<string, string> user_preferences = 4;
253
+
254
+ // Session information
255
+ string session_id = 5;
256
+ google.protobuf.Timestamp session_start = 6;
257
+
258
+ // Custom metadata
259
+ map<string, string> metadata = 7;
260
+ }
261
+
262
+ message CharacterPersonality {
263
+ string name = 1;
264
+ string description = 2;
265
+ repeated string traits = 3;
266
+ string background = 4;
267
+ repeated string interests = 5;
268
+ string speaking_style = 6;
269
+ map<string, string> custom_fields = 7;
270
+ }
271
+
272
+ message Message {
273
+ string role = 1; // "user", "assistant", "system"
274
+ string content = 2;
275
+ google.protobuf.Timestamp timestamp = 3;
276
+ map<string, string> metadata = 4;
277
+ }
278
+
279
+ // ===================================================================
280
+ // RESULT & ERROR MESSAGES
281
+ // ===================================================================
282
+
283
+ message GenerationResult {
284
+ string result = 1; // Main result (text, URL, etc.)
285
+ repeated string additional_data = 2; // Extra information
286
+ map<string, string> metadata = 3; // Generation metadata
287
+ string content_type = 4; // "text", "image_url", "audio_url", etc.
288
+ google.protobuf.Timestamp generated_at = 5;
289
+ }
290
+
291
+ message ModelInfo {
292
+ string model_id = 1;
293
+ string model_name = 2;
294
+ string provider_id = 3;
295
+ string provider_name = 4;
296
+ GenerationType generation_type = 5;
297
+ map<string, string> configuration = 6;
298
+ string version = 7;
299
+ }
300
+
301
+ message UsageStats {
302
+ int32 input_tokens = 1;
303
+ int32 output_tokens = 2;
304
+ int32 total_tokens = 3;
305
+ double cost_estimate = 4;
306
+ int32 requests_made = 5;
307
+ int32 cache_hits = 6;
308
+ int32 semantic_cache_hits = 7;
309
+ }
310
+
311
+ message GenerationError {
312
+ ErrorCode error_code = 1;
313
+ string error_message = 2;
314
+ string error_details = 3;
315
+ bool retryable = 4;
316
+ int32 retry_after_seconds = 5;
317
+ ErrorCategory category = 6;
318
+
319
+ // Context about the error
320
+ string provider_id = 7;
321
+ string model_id = 8;
322
+ string request_id = 9;
323
+
324
+ // Debug information
325
+ map<string, string> debug_info = 10;
326
+ }
327
+
328
+ enum ErrorCode {
329
+ ERROR_CODE_UNSPECIFIED = 0;
330
+ ERROR_CODE_SUCCESS = 1;
331
+ ERROR_CODE_INVALID_REQUEST = 2;
332
+ ERROR_CODE_AUTHENTICATION_FAILED = 3;
333
+ ERROR_CODE_ACCESS_DENIED = 4;
334
+ ERROR_CODE_MODEL_NOT_FOUND = 5;
335
+ ERROR_CODE_PROVIDER_UNAVAILABLE = 6;
336
+ ERROR_CODE_RATE_LIMIT_EXCEEDED = 7;
337
+ ERROR_CODE_QUOTA_EXCEEDED = 8;
338
+ ERROR_CODE_PROMPT_TOO_LONG = 9;
339
+ ERROR_CODE_PARAMETER_ERROR = 10;
340
+ ERROR_CODE_GENERATION_FAILED = 11;
341
+ ERROR_CODE_TIMEOUT = 12;
342
+ ERROR_CODE_INTERNAL_ERROR = 13;
343
+ ERROR_CODE_SERVICE_UNAVAILABLE = 14;
344
+ ERROR_CODE_NOT_IMPLEMENTED = 15;
345
+ ERROR_CODE_DATABASE_ERROR = 16;
346
+ ERROR_CODE_CACHE_ERROR = 17;
347
+ ERROR_CODE_VECTOR_DB_ERROR = 18;
348
+ ERROR_CODE_PROVIDER_TIMEOUT = 19;
349
+ ERROR_CODE_PROVIDER_RATE_LIMIT = 20;
350
+ ERROR_CODE_PROVIDER_AUTH_ERROR = 21;
351
+ ERROR_CODE_PROVIDER_QUOTA_EXCEEDED = 22;
352
+ ERROR_CODE_PROVIDER_INVALID_REQUEST = 23;
353
+ ERROR_CODE_PROVIDER_GENERATION_FAILED = 24;
354
+ ERROR_CODE_MAINTENANCE_MODE = 25;
355
+ ERROR_CODE_DEPRECATED_MODEL = 26;
356
+ }
357
+
358
+ enum ErrorCategory {
359
+ ERROR_CATEGORY_UNSPECIFIED = 0;
360
+ ERROR_CATEGORY_CLIENT = 1; // Client error (4xx)
361
+ ERROR_CATEGORY_SERVER = 2; // Server error (5xx)
362
+ ERROR_CATEGORY_PROVIDER = 3; // Provider error
363
+ ERROR_CATEGORY_RATE_LIMIT = 4; // Rate limiting
364
+ ERROR_CATEGORY_AUTHENTICATION = 5; // Auth related
365
+ ERROR_CATEGORY_AUTHORIZATION = 6; // Permission related
366
+ ERROR_CATEGORY_VALIDATION = 7; // Input validation
367
+ ERROR_CATEGORY_QUOTA = 8; // Quota/limit exceeded
368
+ ERROR_CATEGORY_NOT_FOUND = 9; // Resource not found
369
+ ERROR_CATEGORY_NOT_IMPLEMENTED = 10; // Feature not implemented
370
+ ERROR_CATEGORY_MAINTENANCE = 11; // Service maintenance
371
+ ERROR_CATEGORY_TEMPORARY = 12; // Temporary error, retry later
372
+ ERROR_CATEGORY_PERMANENT = 13; // Permanent error, no retry
373
+ }
374
+
375
+ // ===================================================================
376
+ // ADMINISTRATIVE MESSAGES
377
+ // ===================================================================
378
+
379
+ message HealthCheckRequest {
380
+ bool include_details = 1;
381
+ bool check_providers = 2;
382
+ bool check_cache = 3;
383
+ bool check_database = 4;
384
+ }
385
+
386
+ message HealthCheckResponse {
387
+ ServiceStatus status = 1;
388
+ string message = 2;
389
+ google.protobuf.Timestamp timestamp = 3;
390
+ repeated ProviderHealth provider_health = 4;
391
+ SystemMetrics metrics = 5;
392
+ }
393
+
394
+ message ServiceStatus {
395
+ StatusCode status = 1;
396
+ int32 uptime_seconds = 2;
397
+ int32 total_requests = 3;
398
+ int32 active_requests = 4;
399
+ double cpu_usage = 5;
400
+ double memory_usage = 6;
401
+ int32 cache_hit_rate = 7;
402
+ int32 semantic_cache_hit_rate = 8;
403
+ }
404
+
405
+ enum StatusCode {
406
+ STATUS_CODE_HEALTHY = 0;
407
+ STATUS_CODE_DEGRADED = 1;
408
+ STATUS_CODE_UNHEALTHY = 2;
409
+ STATUS_CODE_MAINTENANCE = 3;
410
+ STATUS_CODE_UNKNOWN = 4;
411
+ }
412
+
413
+ message ProviderHealth {
414
+ string provider_id = 1;
415
+ string provider_name = 2;
416
+ bool is_healthy = 3;
417
+ int32 response_time_ms = 4;
418
+ repeated GenerationType supported_types = 5;
419
+ string error_message = 6;
420
+ google.protobuf.Timestamp last_check = 7;
421
+ }
422
+
423
+ message SystemMetrics {
424
+ int32 total_providers = 1;
425
+ int32 active_providers = 2;
426
+ int32 total_models = 3;
427
+ int32 active_models = 4;
428
+ int32 total_presets = 5;
429
+ int32 active_clients = 6;
430
+ int32 cache_size = 7;
431
+ int32 vector_cache_size = 8;
432
+ }
433
+
434
+ message ListModelsRequest {
435
+ GenerationType type = 1;
436
+ bool active_only = 2;
437
+ string provider_id = 3;
438
+ bool include_inactive = 4;
439
+ }
440
+
441
+ message ListModelsResponse {
442
+ repeated ModelInfo models = 1;
443
+ int32 total_count = 2;
444
+ int32 active_count = 3;
445
+ }
446
+
447
+ message ListPresetsRequest {
448
+ GenerationType type = 1;
449
+ string tier = 2; // "free", "basic", "premium", "unlimited"
450
+ bool active_only = 3;
451
+ }
452
+
453
+ message ModelPreset {
454
+ string preset_id = 1;
455
+ string name = 2;
456
+ string description = 3;
457
+ string tier = 4;
458
+ GenerationType type = 5;
459
+ string model_id = 6;
460
+ ModelInfo model_info = 7;
461
+ map<string, string> parameters = 8;
462
+ bool is_default = 9;
463
+ bool is_active = 10;
464
+ map<string, string> features = 11;
465
+ }
466
+
467
+ message ListPresetsResponse {
468
+ repeated ModelPreset presets = 1;
469
+ int32 total_count = 2;
470
+ int32 active_count = 3;
471
+ }
472
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ancatag/n-r",
3
- "version": "0.2.18",
3
+ "version": "0.2.19",
4
4
  "description": "Official Node.js/TypeScript SDK for Nova AI API with route-config-based orchestration",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -41,7 +41,21 @@
41
41
  "engines": {
42
42
  "node": ">=18.0.0"
43
43
  },
44
+ "peerDependencies": {
45
+ "@grpc/grpc-js": "^1.14.3",
46
+ "@grpc/proto-loader": "^0.8.0"
47
+ },
48
+ "peerDependenciesMeta": {
49
+ "@grpc/grpc-js": {
50
+ "optional": true
51
+ },
52
+ "@grpc/proto-loader": {
53
+ "optional": true
54
+ }
55
+ },
44
56
  "devDependencies": {
57
+ "@grpc/grpc-js": "^1.14.3",
58
+ "@grpc/proto-loader": "^0.8.0",
45
59
  "@types/node": "^25.3.0",
46
60
  "@vitest/coverage-v8": "^4.0.18",
47
61
  "ts-node": "^10.9.2",
@@ -51,14 +65,10 @@
51
65
  "vitest": "^4.0.18"
52
66
  },
53
67
  "type": "module",
54
- "dependencies": {
55
- "@grpc/grpc-js": "^1.14.3",
56
- "@grpc/proto-loader": "^0.8.0"
57
- },
58
68
  "scripts": {
59
- "build": "tsc",
69
+ "build": "tsc && mkdir -p dist/proto && cp src/proto/*.proto dist/proto/",
60
70
  "generate": "tsx ./scripts/generate.ts",
61
- "dev": "tsc --watch",
71
+ "dev": "npm run build && tsc --watch",
62
72
  "clean": "rm -rf dist",
63
73
  "type-check": "tsc --noEmit",
64
74
  "test": "vitest run",