@cravery/core 0.0.2 → 0.0.4

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 (188) hide show
  1. package/dist/config/ai.d.ts +3 -0
  2. package/dist/config/ai.d.ts.map +1 -0
  3. package/dist/config/ai.js +36 -0
  4. package/dist/config/ai.js.map +1 -0
  5. package/dist/config/collections.d.ts +1 -0
  6. package/dist/config/collections.d.ts.map +1 -1
  7. package/dist/config/collections.js +1 -0
  8. package/dist/config/collections.js.map +1 -1
  9. package/dist/config/index.d.ts +1 -0
  10. package/dist/config/index.d.ts.map +1 -1
  11. package/dist/config/index.js +1 -0
  12. package/dist/config/index.js.map +1 -1
  13. package/dist/enums/cuisine.d.ts +1 -1
  14. package/dist/enums/difficulty.d.ts +1 -1
  15. package/dist/enums/moderation_status.d.ts +1 -1
  16. package/dist/enums/priority.d.ts +1 -1
  17. package/dist/enums/profile_status.d.ts +2 -2
  18. package/dist/enums/recipe_source.d.ts +2 -2
  19. package/dist/enums/recipe_status.d.ts +2 -2
  20. package/dist/enums/role.d.ts +1 -1
  21. package/dist/enums/severity.d.ts +1 -1
  22. package/dist/enums/spiciness.d.ts +1 -1
  23. package/dist/enums/status.d.ts +2 -2
  24. package/dist/enums/unit.d.ts +5 -5
  25. package/dist/enums/user_status.d.ts +2 -2
  26. package/dist/lib/ai/cost.d.ts +22 -0
  27. package/dist/lib/ai/cost.d.ts.map +1 -0
  28. package/dist/lib/ai/cost.js +45 -0
  29. package/dist/lib/ai/cost.js.map +1 -0
  30. package/dist/lib/ai/embedding.d.ts +4 -0
  31. package/dist/lib/ai/embedding.d.ts.map +1 -0
  32. package/dist/lib/ai/embedding.js +48 -0
  33. package/dist/lib/ai/embedding.js.map +1 -0
  34. package/dist/lib/ai/errors.d.ts +14 -0
  35. package/dist/lib/ai/errors.d.ts.map +1 -0
  36. package/dist/lib/ai/errors.js +40 -0
  37. package/dist/lib/ai/errors.js.map +1 -0
  38. package/dist/lib/ai/flow.d.ts +53 -0
  39. package/dist/lib/ai/flow.d.ts.map +1 -0
  40. package/dist/lib/ai/flow.js +60 -0
  41. package/dist/lib/ai/flow.js.map +1 -0
  42. package/dist/lib/ai/genkit.d.ts +4 -0
  43. package/dist/lib/ai/genkit.d.ts.map +1 -0
  44. package/dist/lib/ai/genkit.js +16 -0
  45. package/dist/lib/ai/genkit.js.map +1 -0
  46. package/dist/lib/ai/image.d.ts +7 -0
  47. package/dist/lib/ai/image.d.ts.map +1 -0
  48. package/dist/lib/ai/image.js +23 -0
  49. package/dist/lib/ai/image.js.map +1 -0
  50. package/dist/lib/ai/index.d.ts +7 -0
  51. package/dist/lib/ai/index.d.ts.map +1 -0
  52. package/dist/lib/ai/index.js +23 -0
  53. package/dist/lib/ai/index.js.map +1 -0
  54. package/dist/lib/api.d.ts +18 -0
  55. package/dist/lib/api.d.ts.map +1 -0
  56. package/dist/lib/api.js +69 -0
  57. package/dist/lib/api.js.map +1 -0
  58. package/dist/lib/cost.d.ts +22 -0
  59. package/dist/lib/cost.d.ts.map +1 -0
  60. package/dist/lib/cost.js +45 -0
  61. package/dist/lib/cost.js.map +1 -0
  62. package/dist/lib/embedding.d.ts +4 -0
  63. package/dist/lib/embedding.d.ts.map +1 -0
  64. package/dist/lib/embedding.js +48 -0
  65. package/dist/lib/embedding.js.map +1 -0
  66. package/dist/lib/firebase.d.ts +3 -0
  67. package/dist/lib/firebase.d.ts.map +1 -0
  68. package/dist/lib/firebase.js +8 -0
  69. package/dist/lib/firebase.js.map +1 -0
  70. package/dist/lib/flow.d.ts +53 -0
  71. package/dist/lib/flow.d.ts.map +1 -0
  72. package/dist/lib/flow.js +60 -0
  73. package/dist/lib/flow.js.map +1 -0
  74. package/dist/lib/genkit.d.ts +4 -0
  75. package/dist/lib/genkit.d.ts.map +1 -0
  76. package/dist/lib/genkit.js +16 -0
  77. package/dist/lib/genkit.js.map +1 -0
  78. package/dist/lib/iam.d.ts +3 -0
  79. package/dist/lib/iam.d.ts.map +1 -0
  80. package/dist/lib/iam.js +57 -0
  81. package/dist/lib/iam.js.map +1 -0
  82. package/dist/lib/image.d.ts +7 -0
  83. package/dist/lib/image.d.ts.map +1 -0
  84. package/dist/lib/image.js +24 -0
  85. package/dist/lib/image.js.map +1 -0
  86. package/dist/lib/index.d.ts +6 -1
  87. package/dist/lib/index.d.ts.map +1 -1
  88. package/dist/lib/index.js +20 -0
  89. package/dist/lib/index.js.map +1 -1
  90. package/dist/lib/repository/errors.d.ts +20 -0
  91. package/dist/lib/repository/errors.d.ts.map +1 -0
  92. package/dist/lib/repository/errors.js +33 -0
  93. package/dist/lib/repository/errors.js.map +1 -0
  94. package/dist/lib/repository/firestore.repository.d.ts +50 -0
  95. package/dist/lib/repository/firestore.repository.d.ts.map +1 -0
  96. package/dist/lib/repository/firestore.repository.js +407 -0
  97. package/dist/lib/repository/firestore.repository.js.map +1 -0
  98. package/dist/lib/repository/index.d.ts +7 -0
  99. package/dist/lib/repository/index.d.ts.map +1 -0
  100. package/dist/lib/repository/index.js +23 -0
  101. package/dist/lib/repository/index.js.map +1 -0
  102. package/dist/lib/repository/profile.repository.d.ts +12 -0
  103. package/dist/lib/repository/profile.repository.d.ts.map +1 -0
  104. package/dist/lib/repository/profile.repository.js +39 -0
  105. package/dist/lib/repository/profile.repository.js.map +1 -0
  106. package/dist/lib/repository/rtdb.repository.d.ts +21 -0
  107. package/dist/lib/repository/rtdb.repository.d.ts.map +1 -0
  108. package/dist/lib/repository/rtdb.repository.js +55 -0
  109. package/dist/lib/repository/rtdb.repository.js.map +1 -0
  110. package/dist/lib/repository/settings.repository.d.ts +10 -0
  111. package/dist/lib/repository/settings.repository.d.ts.map +1 -0
  112. package/dist/lib/repository/settings.repository.js +30 -0
  113. package/dist/lib/repository/settings.repository.js.map +1 -0
  114. package/dist/lib/repository/user.repository.d.ts +11 -0
  115. package/dist/lib/repository/user.repository.d.ts.map +1 -0
  116. package/dist/lib/repository/user.repository.js +36 -0
  117. package/dist/lib/repository/user.repository.js.map +1 -0
  118. package/dist/lib/storage.d.ts +6 -0
  119. package/dist/lib/storage.d.ts.map +1 -0
  120. package/dist/lib/storage.js +34 -0
  121. package/dist/lib/storage.js.map +1 -0
  122. package/dist/types/ai/config.d.ts +2 -2
  123. package/dist/types/ai/config.d.ts.map +1 -1
  124. package/dist/types/ai/filters.d.ts +3 -3
  125. package/dist/types/ai/recipe.d.ts +10 -10
  126. package/dist/types/equipment.d.ts +2 -2
  127. package/dist/types/equipment.js +1 -1
  128. package/dist/types/error.d.ts +14 -0
  129. package/dist/types/error.d.ts.map +1 -0
  130. package/dist/types/error.js +40 -0
  131. package/dist/types/error.js.map +1 -0
  132. package/dist/types/index.d.ts +2 -0
  133. package/dist/types/index.d.ts.map +1 -1
  134. package/dist/types/index.js +2 -0
  135. package/dist/types/index.js.map +1 -1
  136. package/dist/types/ingredient.d.ts +24 -24
  137. package/dist/types/ingredient.js +1 -1
  138. package/dist/types/ingredient.js.map +1 -1
  139. package/dist/types/moderation.d.ts +5 -6
  140. package/dist/types/moderation.d.ts.map +1 -1
  141. package/dist/types/profile.d.ts +3 -3
  142. package/dist/types/profile.d.ts.map +1 -1
  143. package/dist/types/profile.js.map +1 -1
  144. package/dist/types/recipe.d.ts +28 -29
  145. package/dist/types/recipe.d.ts.map +1 -1
  146. package/dist/types/repository.d.ts +83 -0
  147. package/dist/types/repository.d.ts.map +1 -0
  148. package/dist/types/repository.js +6 -0
  149. package/dist/types/repository.js.map +1 -0
  150. package/dist/types/settings.d.ts +141 -0
  151. package/dist/types/settings.d.ts.map +1 -0
  152. package/dist/types/settings.js +70 -0
  153. package/dist/types/settings.js.map +1 -0
  154. package/dist/types/subscription.d.ts +0 -1
  155. package/dist/types/subscription.d.ts.map +1 -1
  156. package/dist/types/user.d.ts +4 -4
  157. package/dist/types/user.d.ts.map +1 -1
  158. package/package.json +2 -2
  159. package/src/config/ai.ts +34 -0
  160. package/src/config/collections.ts +1 -0
  161. package/src/config/index.ts +1 -0
  162. package/src/lib/ai/cost.ts +72 -0
  163. package/src/lib/ai/embedding.ts +53 -0
  164. package/src/lib/ai/errors.ts +43 -0
  165. package/src/lib/ai/flow.ts +88 -0
  166. package/src/lib/ai/genkit.ts +18 -0
  167. package/src/lib/ai/image.ts +27 -0
  168. package/src/lib/ai/index.ts +6 -0
  169. package/src/lib/api.ts +90 -0
  170. package/src/lib/firebase.ts +5 -0
  171. package/src/lib/iam.ts +22 -0
  172. package/src/lib/index.ts +6 -0
  173. package/src/lib/repository/errors.ts +37 -0
  174. package/src/lib/repository/firestore.repository.ts +607 -0
  175. package/src/lib/repository/index.ts +6 -0
  176. package/src/lib/repository/profile.repository.ts +51 -0
  177. package/src/lib/repository/rtdb.repository.ts +68 -0
  178. package/src/lib/repository/settings.repository.ts +38 -0
  179. package/src/lib/repository/user.repository.ts +44 -0
  180. package/src/lib/storage.ts +42 -0
  181. package/src/types/ai/config.ts +3 -2
  182. package/src/types/equipment.ts +1 -1
  183. package/src/types/index.ts +2 -0
  184. package/src/types/ingredient.ts +1 -1
  185. package/src/types/profile.ts +2 -0
  186. package/src/types/repository.ts +115 -0
  187. package/src/types/settings.ts +85 -0
  188. package/src/types/user.ts +2 -0
@@ -0,0 +1,3 @@
1
+ import { AIConfig } from "../types";
2
+ export declare const AI_MODELS: AIConfig;
3
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/config/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,eAAO,MAAM,SAAS,EAAE,QA+BvB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AI_MODELS = void 0;
4
+ exports.AI_MODELS = {
5
+ Gemini25Flash: {
6
+ id: "vertexai/gemini-2.5-flash",
7
+ name: "Gemini 2.5 Flash",
8
+ type: "multimodal",
9
+ cost: { input: 0.3, output: 2.5 },
10
+ },
11
+ Gemini25Pro: {
12
+ id: "vertexai/gemini-2.5-pro",
13
+ name: "Gemini 2.5 Pro",
14
+ type: "multimodal",
15
+ cost: { input: 1.25, output: 10.0 },
16
+ },
17
+ Gemini3Flash: {
18
+ id: "vertexai/gemini-3.0-flash",
19
+ name: "Gemini 3 Flash",
20
+ type: "multimodal",
21
+ cost: { input: 0.5, output: 3.0 },
22
+ },
23
+ Imagen4Fast: {
24
+ id: "vertexai/imagen-4.0-fast-generate-001",
25
+ name: "Imagen 4 Fast",
26
+ type: "image",
27
+ cost: { input: 0, output: 0.02 },
28
+ },
29
+ GeminiEmbedding001: {
30
+ id: "vertexai/gemini-embedding-001",
31
+ name: "Gemini Embedding 001",
32
+ type: "embedding",
33
+ cost: { input: 0.00015, output: 0 },
34
+ },
35
+ };
36
+ //# sourceMappingURL=ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/config/ai.ts"],"names":[],"mappings":";;;AAEa,QAAA,SAAS,GAAa;IACjC,aAAa,EAAE;QACb,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;KAClC;IACD,WAAW,EAAE;QACX,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;KACpC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;KAClC;IACD,WAAW,EAAE;QACX,EAAE,EAAE,uCAAuC;QAC3C,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;KACjC;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;KACpC;CACF,CAAC"}
@@ -2,6 +2,7 @@ export declare const Collections: {
2
2
  Moderations: string;
3
3
  Profiles: string;
4
4
  Recipes: string;
5
+ Settings: string;
5
6
  Subscriptions: string;
6
7
  Users: string;
7
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/config/collections.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;CAMvB,CAAC"}
1
+ {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/config/collections.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC"}
@@ -5,6 +5,7 @@ exports.Collections = {
5
5
  Moderations: "moderations",
6
6
  Profiles: "profiles",
7
7
  Recipes: "recipes",
8
+ Settings: "settings",
8
9
  Subscriptions: "subscriptions",
9
10
  Users: "users",
10
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/config/collections.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACzB,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;IAC9B,KAAK,EAAE,OAAO;CACf,CAAC"}
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/config/collections.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACzB,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,KAAK,EAAE,OAAO;CACf,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from "./ai";
1
2
  export * from "./collections";
2
3
  export * from "./common";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ai"), exports);
17
18
  __exportStar(require("./collections"), exports);
18
19
  __exportStar(require("./common"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAqB;AACrB,gDAA8B;AAC9B,2CAAyB"}
@@ -1,7 +1,6 @@
1
1
  import { z } from "zod";
2
2
  export declare const CUISINE_VALUES: readonly ["african", "american", "brazilian", "british", "caribbean", "chinese", "egyptian", "emirati", "ethiopian", "filipino", "french", "fusion", "german", "greek", "indian", "indonesian", "italian", "japanese", "korean", "lebanese", "malaysian", "mexican", "moroccan", "pakistani", "persian", "russian", "saudi", "spanish", "sudanese", "thai", "turkish", "vietnamese", "other"];
3
3
  export declare const CuisineSchema: z.ZodEnum<{
4
- other: "other";
5
4
  african: "african";
6
5
  american: "american";
7
6
  brazilian: "brazilian";
@@ -34,6 +33,7 @@ export declare const CuisineSchema: z.ZodEnum<{
34
33
  thai: "thai";
35
34
  turkish: "turkish";
36
35
  vietnamese: "vietnamese";
36
+ other: "other";
37
37
  }>;
38
38
  export type Cuisine = (typeof CUISINE_VALUES)[number];
39
39
  //# sourceMappingURL=cuisine.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const DIFFICULTY_VALUES: readonly ["beginner", "intermediate", "advanced", "expert"];
3
3
  export declare const DifficultySchema: z.ZodEnum<{
4
- advanced: "advanced";
5
4
  beginner: "beginner";
6
5
  intermediate: "intermediate";
6
+ advanced: "advanced";
7
7
  expert: "expert";
8
8
  }>;
9
9
  export type Difficulty = (typeof DIFFICULTY_VALUES)[number];
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const MODERATION_STATUS_VALUES: readonly ["approved", "pending", "rejected"];
3
3
  export declare const ModerationStatusSchema: z.ZodEnum<{
4
+ approved: "approved";
4
5
  pending: "pending";
5
6
  rejected: "rejected";
6
- approved: "approved";
7
7
  }>;
8
8
  export type ModerationStatus = (typeof MODERATION_STATUS_VALUES)[number];
9
9
  //# sourceMappingURL=moderation_status.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const PRIORITY_VALUES: readonly ["low", "medium", "high"];
3
3
  export declare const PrioritySchema: z.ZodEnum<{
4
- high: "high";
5
4
  low: "low";
6
5
  medium: "medium";
6
+ high: "high";
7
7
  }>;
8
8
  export type Priority = (typeof PRIORITY_VALUES)[number];
9
9
  //# sourceMappingURL=priority.d.ts.map
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const PROFILE_STATUS_VALUES: readonly ["active", "deleted", "pending", "suspended"];
3
3
  export declare const ProfileStatusSchema: z.ZodEnum<{
4
- deleted: "deleted";
4
+ pending: "pending";
5
5
  active: "active";
6
+ deleted: "deleted";
6
7
  suspended: "suspended";
7
- pending: "pending";
8
8
  }>;
9
9
  export type ProfileStatus = (typeof PROFILE_STATUS_VALUES)[number];
10
10
  //# sourceMappingURL=profile_status.d.ts.map
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const RECIPE_SOURCE_VALUES: readonly ["image", "text", "url", "video"];
3
3
  export declare const RecipeSourceSchema: z.ZodEnum<{
4
- url: "url";
5
- video: "video";
6
4
  image: "image";
7
5
  text: "text";
6
+ url: "url";
7
+ video: "video";
8
8
  }>;
9
9
  export type RecipeSource = (typeof RECIPE_SOURCE_VALUES)[number];
10
10
  //# sourceMappingURL=recipe_source.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const RECIPE_STATUS_VALUES: readonly ["active", "archived", "deleted", "pending"];
3
3
  export declare const RecipeStatusSchema: z.ZodEnum<{
4
- deleted: "deleted";
5
- active: "active";
6
4
  pending: "pending";
5
+ active: "active";
6
+ deleted: "deleted";
7
7
  archived: "archived";
8
8
  }>;
9
9
  export type RecipeStatus = (typeof RECIPE_STATUS_VALUES)[number];
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const ROLE_VALUES: readonly ["admin", "moderator", "translator", "user", "guest"];
3
3
  export declare const RoleSchema: z.ZodEnum<{
4
- user: "user";
5
4
  admin: "admin";
6
5
  moderator: "moderator";
7
6
  translator: "translator";
7
+ user: "user";
8
8
  guest: "guest";
9
9
  }>;
10
10
  export type Role = (typeof ROLE_VALUES)[number];
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const SEVERITY_VALUES: readonly ["low", "medium", "high"];
3
3
  export declare const SeveritySchema: z.ZodEnum<{
4
- high: "high";
5
4
  low: "low";
6
5
  medium: "medium";
6
+ high: "high";
7
7
  }>;
8
8
  export type Severity = (typeof SEVERITY_VALUES)[number];
9
9
  //# sourceMappingURL=severity.d.ts.map
@@ -1,8 +1,8 @@
1
1
  import { z } from "zod";
2
2
  export declare const SPICINESS_VALUES: readonly ["none", "mild", "medium", "hot"];
3
3
  export declare const SpicinessSchema: z.ZodEnum<{
4
- none: "none";
5
4
  medium: "medium";
5
+ none: "none";
6
6
  mild: "mild";
7
7
  hot: "hot";
8
8
  }>;
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const STATUS_VALUES: readonly ["active", "archived", "cancelled", "deleted", "pending"];
3
3
  export declare const StatusSchema: z.ZodEnum<{
4
- deleted: "deleted";
5
- active: "active";
6
4
  pending: "pending";
5
+ active: "active";
6
+ deleted: "deleted";
7
7
  archived: "archived";
8
8
  cancelled: "cancelled";
9
9
  }>;
@@ -1,11 +1,6 @@
1
1
  import { z } from "zod";
2
2
  export declare const UNIT_VALUES: readonly ["ml", "l", "tsp", "tbsp", "fl_oz", "cup", "pint", "quart", "gallon", "mg", "g", "kg", "oz", "lb", "piece", "whole", "half", "quarter", "slice", "serving", "clove", "stalk", "sprig", "leaf", "bunch", "head", "fillet", "stick", "sheet", "can", "package", "bottle", "jar", "handful", "pinch", "dash", "drop"];
3
3
  export declare const UnitSchema: z.ZodEnum<{
4
- slice: "slice";
5
- head: "head";
6
- g: "g";
7
- drop: "drop";
8
- quarter: "quarter";
9
4
  ml: "ml";
10
5
  l: "l";
11
6
  tsp: "tsp";
@@ -16,18 +11,22 @@ export declare const UnitSchema: z.ZodEnum<{
16
11
  quart: "quart";
17
12
  gallon: "gallon";
18
13
  mg: "mg";
14
+ g: "g";
19
15
  kg: "kg";
20
16
  oz: "oz";
21
17
  lb: "lb";
22
18
  piece: "piece";
23
19
  whole: "whole";
24
20
  half: "half";
21
+ quarter: "quarter";
22
+ slice: "slice";
25
23
  serving: "serving";
26
24
  clove: "clove";
27
25
  stalk: "stalk";
28
26
  sprig: "sprig";
29
27
  leaf: "leaf";
30
28
  bunch: "bunch";
29
+ head: "head";
31
30
  fillet: "fillet";
32
31
  stick: "stick";
33
32
  sheet: "sheet";
@@ -38,6 +37,7 @@ export declare const UnitSchema: z.ZodEnum<{
38
37
  handful: "handful";
39
38
  pinch: "pinch";
40
39
  dash: "dash";
40
+ drop: "drop";
41
41
  }>;
42
42
  export type Unit = (typeof UNIT_VALUES)[number];
43
43
  //# sourceMappingURL=unit.d.ts.map
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const USER_STATUS_VALUES: readonly ["active", "deleted", "pending", "suspended"];
3
3
  export declare const UserStatusSchema: z.ZodEnum<{
4
- deleted: "deleted";
4
+ pending: "pending";
5
5
  active: "active";
6
+ deleted: "deleted";
6
7
  suspended: "suspended";
7
- pending: "pending";
8
8
  }>;
9
9
  export type UserStatus = (typeof USER_STATUS_VALUES)[number];
10
10
  //# sourceMappingURL=user_status.d.ts.map
@@ -0,0 +1,22 @@
1
+ import { AIModelConfig } from "../../types";
2
+ interface BaseUsage {
3
+ flowName: string;
4
+ model: AIModelConfig;
5
+ }
6
+ interface MultimodalUsage extends BaseUsage {
7
+ type: "multimodal";
8
+ inputTokens: number;
9
+ outputTokens: number;
10
+ }
11
+ interface ImageUsage extends BaseUsage {
12
+ type: "image";
13
+ imageCount: number;
14
+ }
15
+ interface EmbeddingUsage extends BaseUsage {
16
+ type: "embedding";
17
+ tokenCount: number;
18
+ }
19
+ export type AIUsage = MultimodalUsage | ImageUsage | EmbeddingUsage;
20
+ export declare const logAIUsage: (usage: AIUsage) => number;
21
+ export {};
22
+ //# sourceMappingURL=cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/cost.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,UAAU,eAAgB,SAAQ,SAAS;IACzC,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,UAAW,SAAQ,SAAS;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAe,SAAQ,SAAS;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,UAAU,GAAG,cAAc,CAAC;AAEpE,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,MA6C3C,CAAC"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logAIUsage = void 0;
4
+ const database_1 = require("firebase-admin/database");
5
+ const logAIUsage = (usage) => {
6
+ const { flowName, model } = usage;
7
+ let cost;
8
+ let metrics;
9
+ switch (usage.type) {
10
+ case "multimodal":
11
+ cost =
12
+ (usage.inputTokens / 1000000) * model.cost.input +
13
+ (usage.outputTokens / 1000000) * model.cost.output;
14
+ metrics = {
15
+ inputTokens: usage.inputTokens,
16
+ outputTokens: usage.outputTokens,
17
+ };
18
+ break;
19
+ case "image":
20
+ cost = usage.imageCount * model.cost.output;
21
+ metrics = { images: usage.imageCount };
22
+ break;
23
+ case "embedding":
24
+ cost = (usage.tokenCount / 1000) * model.cost.input;
25
+ metrics = { tokens: usage.tokenCount };
26
+ break;
27
+ }
28
+ const db = (0, database_1.getDatabase)();
29
+ const date = new Date().toISOString().split("T")[0];
30
+ const base = `ai_usage/live/${date}`;
31
+ const updates = {
32
+ [`${base}/total`]: database_1.ServerValue.increment(cost),
33
+ [`${base}/count`]: database_1.ServerValue.increment(1),
34
+ [`${base}/flows/${flowName}/cost`]: database_1.ServerValue.increment(cost),
35
+ [`${base}/flows/${flowName}/count`]: database_1.ServerValue.increment(1),
36
+ [`${base}/models/${model.id}/cost`]: database_1.ServerValue.increment(cost),
37
+ };
38
+ for (const [key, value] of Object.entries(metrics)) {
39
+ updates[`${base}/models/${model.id}/${key}`] = database_1.ServerValue.increment(value);
40
+ }
41
+ db.ref().update(updates).catch(console.error);
42
+ return cost;
43
+ };
44
+ exports.logAIUsage = logAIUsage;
45
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../../src/lib/ai/cost.ts"],"names":[],"mappings":";;;AAAA,sDAAmE;AA0B5D,MAAM,UAAU,GAAG,CAAC,KAAc,EAAU,EAAE;IACnD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAElC,IAAI,IAAY,CAAC;IACjB,IAAI,OAA+B,CAAC;IAEpC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,IAAI;gBACF,CAAC,KAAK,CAAC,WAAW,GAAG,OAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK;oBAClD,CAAC,KAAK,CAAC,YAAY,GAAG,OAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YACvD,OAAO,GAAG;gBACR,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;aACjC,CAAC;YACF,MAAM;QACR,KAAK,OAAO;YACV,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5C,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM;QACR,KAAK,WAAW;YACd,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,IAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACrD,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM;IACV,CAAC;IAED,MAAM,EAAE,GAAG,IAAA,sBAAW,GAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,iBAAiB,IAAI,EAAE,CAAC;IAErC,MAAM,OAAO,GAA4B;QACvC,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,IAAI,CAAC;QAC9C,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,CAAC,GAAG,IAAI,UAAU,QAAQ,OAAO,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/D,CAAC,GAAG,IAAI,UAAU,QAAQ,QAAQ,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC,GAAG,IAAI,WAAW,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,IAAI,CAAC;KACjE,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,IAAI,WAAW,KAAK,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,sBAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IAED,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA7CW,QAAA,UAAU,cA6CrB"}
@@ -0,0 +1,4 @@
1
+ export declare const generateEmbedding: (text: string, flowName: string) => Promise<number[]>;
2
+ export declare const storeEmbedding: (collection: string, docId: string, text: string, flowName?: string, vectorField?: string) => Promise<void>;
3
+ export declare const recipesRetriever: import("genkit").RetrieverAction;
4
+ //# sourceMappingURL=embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,EAAE,UAAU,MAAM,sBAerE,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,YAAY,MAAM,EAClB,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EACjB,cAAa,MAAoB,kBAYlC,CAAC;AAEF,eAAO,MAAM,gBAAgB,kCAS3B,CAAC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recipesRetriever = exports.storeEmbedding = exports.generateEmbedding = void 0;
4
+ const firestore_1 = require("firebase-admin/firestore");
5
+ const firebase_1 = require("@genkit-ai/firebase");
6
+ const firebase_2 = require("../firebase");
7
+ const genkit_1 = require("./genkit");
8
+ const cost_1 = require("./cost");
9
+ const ai_1 = require("../../config/ai");
10
+ const generateEmbedding = async (text, flowName) => {
11
+ var _a;
12
+ if (text.length < 1 || text.length > 7500) {
13
+ throw new Error("Validation error: Text out of range");
14
+ }
15
+ const response = await genkit_1.ai.embed({
16
+ embedder: genkit_1.geminiEmbedding001,
17
+ content: text,
18
+ });
19
+ (0, cost_1.logAIUsage)({
20
+ type: "embedding",
21
+ flowName,
22
+ model: ai_1.AI_MODELS.GeminiEmbedding001,
23
+ tokenCount: text.length,
24
+ });
25
+ return (_a = response[0]) === null || _a === void 0 ? void 0 : _a.embedding;
26
+ };
27
+ exports.generateEmbedding = generateEmbedding;
28
+ const storeEmbedding = async (collection, docId, text, flowName, vectorField = "embedding") => {
29
+ const embedding = await (0, exports.generateEmbedding)(text, flowName || `${collection}:embedding`);
30
+ await firebase_2.firestore
31
+ .collection(collection)
32
+ .doc(docId)
33
+ .update({
34
+ [vectorField]: firestore_1.FieldValue.vector(embedding),
35
+ });
36
+ };
37
+ exports.storeEmbedding = storeEmbedding;
38
+ exports.recipesRetriever = (0, firebase_1.defineFirestoreRetriever)(genkit_1.ai, {
39
+ name: "recipesRetriever",
40
+ firestore: firebase_2.firestore,
41
+ collection: "recipes",
42
+ contentField: "searchTerms",
43
+ vectorField: "titleEmbedding",
44
+ embedder: genkit_1.geminiEmbedding001,
45
+ distanceMeasure: "COSINE",
46
+ distanceResultField: "distance",
47
+ });
48
+ //# sourceMappingURL=embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":";;;AAAA,wDAAsD;AACtD,kDAA+D;AAC/D,0CAAwC;AACxC,qCAAkD;AAClD,iCAAoC;AACpC,wCAA4C;AAErC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAY,EAAE,QAAgB,EAAE,EAAE;;IACxE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,WAAE,CAAC,KAAK,CAAC;QAC9B,QAAQ,EAAE,2BAAkB;QAC5B,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IACH,IAAA,iBAAU,EAAC;QACT,IAAI,EAAE,WAAW;QACjB,QAAQ;QACR,KAAK,EAAE,cAAS,CAAC,kBAAkB;QACnC,UAAU,EAAE,IAAI,CAAC,MAAM;KACxB,CAAC,CAAC;IACH,OAAO,MAAA,QAAQ,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAC;AAChC,CAAC,CAAC;AAfW,QAAA,iBAAiB,qBAe5B;AAEK,MAAM,cAAc,GAAG,KAAK,EACjC,UAAkB,EAClB,KAAa,EACb,IAAY,EACZ,QAAiB,EACjB,cAAsB,WAAW,EACjC,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,IAAA,yBAAiB,EACvC,IAAI,EACJ,QAAQ,IAAI,GAAG,UAAU,YAAY,CACtC,CAAC;IACF,MAAM,oBAAS;SACZ,UAAU,CAAC,UAAU,CAAC;SACtB,GAAG,CAAC,KAAK,CAAC;SACV,MAAM,CAAC;QACN,CAAC,WAAW,CAAC,EAAE,sBAAU,CAAC,MAAM,CAAC,SAAS,CAAC;KAC5C,CAAC,CAAC;AACP,CAAC,CAAC;AAjBW,QAAA,cAAc,kBAiBzB;AAEW,QAAA,gBAAgB,GAAG,IAAA,mCAAwB,EAAC,WAAE,EAAE;IAC3D,IAAI,EAAE,kBAAkB;IACxB,SAAS,EAAT,oBAAS;IACT,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,aAAa;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,QAAQ,EAAE,2BAAkB;IAC5B,eAAe,EAAE,QAAQ;IACzB,mBAAmB,EAAE,UAAU;CAChC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const AI_ERROR_CODE_VALUES: readonly ["hallucination_detected", "image_unclear", "impossible_constraint", "invalid_input", "invalid_url", "low_confidence", "model_error", "no_recipe_found", "nonsense_input", "rate_limit", "timeout", "translation_failed", "unsafe_input", "url_not_accessible"];
2
+ export type AIErrorCode = (typeof AI_ERROR_CODE_VALUES)[number];
3
+ export declare class AIFlowError extends Error {
4
+ readonly code: AIErrorCode;
5
+ readonly suggestions?: string[];
6
+ constructor(code: AIErrorCode, message: string, suggestions?: string[]);
7
+ toJSON(): {
8
+ name: string;
9
+ code: "hallucination_detected" | "image_unclear" | "impossible_constraint" | "invalid_input" | "invalid_url" | "low_confidence" | "model_error" | "no_recipe_found" | "nonsense_input" | "rate_limit" | "timeout" | "translation_failed" | "unsafe_input" | "url_not_accessible";
10
+ message: string;
11
+ suggestions: string[] | undefined;
12
+ };
13
+ }
14
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,0QAevB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAgB,IAAI,EAAE,WAAW,CAAC;IAClC,SAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;gBAE3B,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE;IAWtE,MAAM;;;;;;CAQP"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AIFlowError = exports.AI_ERROR_CODE_VALUES = void 0;
4
+ exports.AI_ERROR_CODE_VALUES = [
5
+ "hallucination_detected",
6
+ "image_unclear",
7
+ "impossible_constraint",
8
+ "invalid_input",
9
+ "invalid_url",
10
+ "low_confidence",
11
+ "model_error",
12
+ "no_recipe_found",
13
+ "nonsense_input",
14
+ "rate_limit",
15
+ "timeout",
16
+ "translation_failed",
17
+ "unsafe_input",
18
+ "url_not_accessible",
19
+ ];
20
+ class AIFlowError extends Error {
21
+ constructor(code, message, suggestions) {
22
+ super(message);
23
+ this.name = "AIFlowError";
24
+ this.code = code;
25
+ this.suggestions = suggestions;
26
+ if (Error.captureStackTrace) {
27
+ Error.captureStackTrace(this, AIFlowError);
28
+ }
29
+ }
30
+ toJSON() {
31
+ return {
32
+ name: this.name,
33
+ code: this.code,
34
+ message: this.message,
35
+ suggestions: this.suggestions,
36
+ };
37
+ }
38
+ }
39
+ exports.AIFlowError = AIFlowError;
40
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/lib/ai/errors.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG;IAClC,wBAAwB;IACxB,eAAe;IACf,uBAAuB;IACvB,eAAe;IACf,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,SAAS;IACT,oBAAoB;IACpB,cAAc;IACd,oBAAoB;CACZ,CAAC;AAIX,MAAa,WAAY,SAAQ,KAAK;IAIpC,YAAY,IAAiB,EAAE,OAAe,EAAE,WAAsB;QACpE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;CACF;AAvBD,kCAuBC"}
@@ -0,0 +1,53 @@
1
+ import { z } from "genkit";
2
+ import { AIModelConfig } from "../../types";
3
+ export declare const ImagenOutputSchema: z.ZodObject<{
4
+ images: z.ZodArray<z.ZodObject<{
5
+ url: z.ZodString;
6
+ path: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ url: string;
9
+ path: string;
10
+ }, {
11
+ url: string;
12
+ path: string;
13
+ }>, "many">;
14
+ }, "strip", z.ZodTypeAny, {
15
+ images: {
16
+ url: string;
17
+ path: string;
18
+ }[];
19
+ }, {
20
+ images: {
21
+ url: string;
22
+ path: string;
23
+ }[];
24
+ }>;
25
+ export type FlowHandler<T, R> = (input: T, output: R | null) => Promise<R>;
26
+ export type ImageFlowHandler<T> = (input: T, prompt: string) => Promise<{
27
+ base64Data: string;
28
+ storagePath: string;
29
+ }[]>;
30
+ export declare const createGeminiFlow: <T, R>(name: string, inputSchema: z.ZodSchema<T>, outputSchema: z.ZodSchema<R>, handler: FlowHandler<T, R>, model?: AIModelConfig) => import("genkit").Action<z.ZodType<T, z.ZodTypeDef, T>, z.ZodType<R, z.ZodTypeDef, R>, z.ZodTypeAny>;
31
+ export declare const createImagenFlow: <T>(name: string, inputSchema: z.ZodSchema<T>, handler: ImageFlowHandler<T>, model?: AIModelConfig) => import("genkit").Action<z.ZodType<T, z.ZodTypeDef, T>, z.ZodObject<{
32
+ images: z.ZodArray<z.ZodObject<{
33
+ url: z.ZodString;
34
+ path: z.ZodString;
35
+ }, "strip", z.ZodTypeAny, {
36
+ url: string;
37
+ path: string;
38
+ }, {
39
+ url: string;
40
+ path: string;
41
+ }>, "many">;
42
+ }, "strip", z.ZodTypeAny, {
43
+ images: {
44
+ url: string;
45
+ path: string;
46
+ }[];
47
+ }, {
48
+ images: {
49
+ url: string;
50
+ path: string;
51
+ }[];
52
+ }>, z.ZodTypeAny>;
53
+ //# sourceMappingURL=flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAK3B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAO7B,CAAC;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAChC,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,MAAM,KACX,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAAC;AAE5D,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,EACnC,MAAM,MAAM,EACZ,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC3B,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC5B,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,QAAO,aAAuC,wGA4B/C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,MAAM,MAAM,EACZ,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC3B,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAC5B,QAAO,aAAqC;;;;;;;;;;;;;;;;;;;;;iBA2B7C,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createImagenFlow = exports.createGeminiFlow = exports.ImagenOutputSchema = void 0;
4
+ const genkit_1 = require("genkit");
5
+ const ai_1 = require("../../config/ai");
6
+ const cost_1 = require("./cost");
7
+ const genkit_2 = require("./genkit");
8
+ const storage_1 = require("../storage");
9
+ exports.ImagenOutputSchema = genkit_1.z.object({
10
+ images: genkit_1.z.array(genkit_1.z.object({
11
+ url: genkit_1.z.string(),
12
+ path: genkit_1.z.string(),
13
+ })),
14
+ });
15
+ const createGeminiFlow = (name, inputSchema, outputSchema, handler, model = ai_1.AI_MODELS.Gemini25Flash) => {
16
+ const FlowInputSchema = genkit_2.ai.defineSchema(`${name}InputSchema`, inputSchema);
17
+ const FlowOutputSchema = genkit_2.ai.defineSchema(`${name}OutputSchema`, outputSchema);
18
+ const prompt = genkit_2.ai.prompt(name);
19
+ return genkit_2.ai.defineFlow({
20
+ name: name,
21
+ inputSchema: inputSchema,
22
+ outputSchema: outputSchema,
23
+ }, async (input) => {
24
+ var _a, _b;
25
+ const response = await prompt(input);
26
+ (0, cost_1.logAIUsage)({
27
+ type: "multimodal",
28
+ flowName: name,
29
+ model,
30
+ inputTokens: ((_a = response.usage) === null || _a === void 0 ? void 0 : _a.inputTokens) || 0,
31
+ outputTokens: ((_b = response.usage) === null || _b === void 0 ? void 0 : _b.outputTokens) || 0,
32
+ });
33
+ return handler(input, response.output);
34
+ });
35
+ };
36
+ exports.createGeminiFlow = createGeminiFlow;
37
+ const createImagenFlow = (name, inputSchema, handler, model = ai_1.AI_MODELS.Imagen4Fast) => {
38
+ return genkit_2.ai.defineFlow({
39
+ name: name,
40
+ inputSchema: inputSchema,
41
+ outputSchema: exports.ImagenOutputSchema,
42
+ }, async (input) => {
43
+ const imageData = await handler(input, name);
44
+ const uploadPromises = imageData.map(({ base64Data, storagePath }) => (0, storage_1.uploadImageToStorage)(base64Data, storagePath).catch((err) => {
45
+ throw err;
46
+ }));
47
+ const uploadedImages = await Promise.all(uploadPromises);
48
+ (0, cost_1.logAIUsage)({
49
+ type: "image",
50
+ flowName: name,
51
+ model,
52
+ imageCount: imageData.length,
53
+ });
54
+ return {
55
+ images: uploadedImages,
56
+ };
57
+ });
58
+ };
59
+ exports.createImagenFlow = createImagenFlow;
60
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../src/lib/ai/flow.ts"],"names":[],"mappings":";;;AAAA,mCAA2B;AAC3B,wCAA4C;AAC5C,iCAAoC;AACpC,qCAA8B;AAC9B,wCAAkD;AAGrC,QAAA,kBAAkB,GAAG,UAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,UAAC,CAAC,KAAK,CACb,UAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,UAAC,CAAC,MAAM,EAAE;QACf,IAAI,EAAE,UAAC,CAAC,MAAM,EAAE;KACjB,CAAC,CACH;CACF,CAAC,CAAC;AAOI,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,WAA2B,EAC3B,YAA4B,EAC5B,OAA0B,EAC1B,QAAuB,cAAS,CAAC,aAAa,EAC9C,EAAE;IACF,MAAM,eAAe,GAAG,WAAE,CAAC,YAAY,CAAC,GAAG,IAAI,aAAa,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,WAAE,CAAC,YAAY,CAAC,GAAG,IAAI,cAAc,EAAE,YAAY,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,WAAE,CAAC,MAAM,CAItB,IAAI,CAAC,CAAC;IAER,OAAO,WAAE,CAAC,UAAU,CAClB;QACE,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE,YAAY;KAC3B,EACD,KAAK,EAAE,KAAQ,EAAE,EAAE;;QACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAA,iBAAU,EAAC;YACT,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK;YACL,WAAW,EAAE,CAAA,MAAA,QAAQ,CAAC,KAAK,0CAAE,WAAW,KAAI,CAAC;YAC7C,YAAY,EAAE,CAAA,MAAA,QAAQ,CAAC,KAAK,0CAAE,YAAY,KAAI,CAAC;SAChD,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAjCW,QAAA,gBAAgB,oBAiC3B;AAEK,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,WAA2B,EAC3B,OAA4B,EAC5B,QAAuB,cAAS,CAAC,WAAW,EAC5C,EAAE;IACF,OAAO,WAAE,CAAC,UAAU,CAClB;QACE,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE,0BAAkB;KACjC,EACD,KAAK,EAAE,KAAQ,EAAE,EAAE;QACjB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,CACnE,IAAA,8BAAoB,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC1D,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CACH,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzD,IAAA,iBAAU,EAAC;YACT,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI;YACd,KAAK;YACL,UAAU,EAAE,SAAS,CAAC,MAAM;SAC7B,CAAC,CAAC;QACH,OAAO;YACL,MAAM,EAAE,cAAc;SACvB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AA/BW,QAAA,gBAAgB,oBA+B3B"}