@cravery/core 0.0.24 → 0.0.25
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.
- package/dist/lib/ai/embedding.d.ts +2 -1
- package/dist/lib/ai/embedding.d.ts.map +1 -1
- package/dist/lib/ai/embedding.js +4 -17
- package/dist/lib/ai/embedding.js.map +1 -1
- package/dist/lib/ai/genkit.d.ts +1 -0
- package/dist/lib/ai/genkit.d.ts.map +1 -1
- package/dist/lib/ai/genkit.js +14 -1
- package/dist/lib/ai/genkit.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/ai/embedding.ts +4 -19
- package/src/lib/ai/genkit.ts +15 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import { recipesRetriever } from "./genkit";
|
|
2
|
+
export { recipesRetriever };
|
|
1
3
|
export declare const generateEmbedding: (text: string, flowName: string) => Promise<number[]>;
|
|
2
4
|
export declare const storeEmbedding: (collection: string, docId: string, text: string, flowName?: string, vectorField?: string) => Promise<void>;
|
|
3
|
-
export declare let recipesRetriever: any;
|
|
4
5
|
//# sourceMappingURL=embedding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMpE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,EAAE,UAAU,MAAM,sBAmBrE,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,YAAY,MAAM,EAClB,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EACjB,cAAa,MAAoB,kBAYlC,CAAC"}
|
package/dist/lib/ai/embedding.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.storeEmbedding = exports.generateEmbedding = exports.recipesRetriever = void 0;
|
|
4
4
|
const firestore_1 = require("firebase-admin/firestore");
|
|
5
|
-
const firebase_1 = require("
|
|
6
|
-
const core_1 = require("firebase-functions/v2/core");
|
|
7
|
-
const firebase_2 = require("../firebase");
|
|
5
|
+
const firebase_1 = require("../firebase");
|
|
8
6
|
const genkit_1 = require("./genkit");
|
|
7
|
+
Object.defineProperty(exports, "recipesRetriever", { enumerable: true, get: function () { return genkit_1.recipesRetriever; } });
|
|
9
8
|
const cost_1 = require("./cost");
|
|
10
9
|
const ai_1 = require("../../config/ai");
|
|
11
10
|
const types_1 = require("../../types");
|
|
@@ -33,7 +32,7 @@ const generateEmbedding = async (text, flowName) => {
|
|
|
33
32
|
exports.generateEmbedding = generateEmbedding;
|
|
34
33
|
const storeEmbedding = async (collection, docId, text, flowName, vectorField = "embedding") => {
|
|
35
34
|
const embedding = await (0, exports.generateEmbedding)(text, flowName || `${collection}:embedding`);
|
|
36
|
-
await
|
|
35
|
+
await firebase_1.firestore
|
|
37
36
|
.collection(collection)
|
|
38
37
|
.doc(docId)
|
|
39
38
|
.update({
|
|
@@ -41,16 +40,4 @@ const storeEmbedding = async (collection, docId, text, flowName, vectorField = "
|
|
|
41
40
|
});
|
|
42
41
|
};
|
|
43
42
|
exports.storeEmbedding = storeEmbedding;
|
|
44
|
-
(0, core_1.onInit)(() => {
|
|
45
|
-
exports.recipesRetriever = (0, firebase_1.defineFirestoreRetriever)(genkit_1.ai, {
|
|
46
|
-
name: "recipesRetriever",
|
|
47
|
-
firestore: firebase_2.firestore,
|
|
48
|
-
collection: "recipes",
|
|
49
|
-
contentField: "searchTerms",
|
|
50
|
-
vectorField: "titleEmbedding",
|
|
51
|
-
embedder: genkit_1.geminiEmbedding001,
|
|
52
|
-
distanceMeasure: "COSINE",
|
|
53
|
-
distanceResultField: "distance",
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
43
|
//# sourceMappingURL=embedding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":";;;AAAA,wDAAsD;AACtD,
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":";;;AAAA,wDAAsD;AACtD,0CAAwC;AACxC,qCAAoE;AAM3D,iGANwB,yBAAgB,OAMxB;AALzB,iCAAoC;AACpC,wCAA4C;AAC5C,uCAA8C;AAKvC,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,uBAAe,CAAC,4CAA4C,EAAE;YACtE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,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;AAnBW,QAAA,iBAAiB,qBAmB5B;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"}
|
package/dist/lib/ai/genkit.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genkit.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/genkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,iBAAiB,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"genkit.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/genkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,iBAAiB,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAU3D,eAAO,IAAI,EAAE,EAAE,MAAM,CAAC;AACtB,eAAO,IAAI,kBAAkB,EAAE,iBAAiB,CAAC;AACjD,eAAO,IAAI,gBAAgB,EAAE,GAAG,CAAC"}
|
package/dist/lib/ai/genkit.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.geminiEmbedding001 = exports.ai = void 0;
|
|
3
|
+
exports.recipesRetriever = exports.geminiEmbedding001 = exports.ai = void 0;
|
|
4
4
|
const genkit_1 = require("genkit");
|
|
5
5
|
const google_genai_1 = require("@genkit-ai/google-genai");
|
|
6
|
+
const firebase_1 = require("@genkit-ai/firebase");
|
|
6
7
|
const core_1 = require("firebase-functions/v2/core");
|
|
8
|
+
const firebase_2 = require("../firebase");
|
|
7
9
|
const projectId = process.env.GCLOUD_PROJECT || process.env.GCP_PROJECT || "canary-cravery";
|
|
8
10
|
// Initialize during Firebase Functions init phase, not at module load
|
|
9
11
|
(0, core_1.onInit)(() => {
|
|
@@ -16,5 +18,16 @@ const projectId = process.env.GCLOUD_PROJECT || process.env.GCP_PROJECT || "cana
|
|
|
16
18
|
],
|
|
17
19
|
});
|
|
18
20
|
exports.geminiEmbedding001 = google_genai_1.vertexAI.embedder("gemini-embedding-001");
|
|
21
|
+
// Initialize retriever after ai is set up
|
|
22
|
+
exports.recipesRetriever = (0, firebase_1.defineFirestoreRetriever)(exports.ai, {
|
|
23
|
+
name: "recipesRetriever",
|
|
24
|
+
firestore: firebase_2.firestore,
|
|
25
|
+
collection: "recipes",
|
|
26
|
+
contentField: "searchTerms",
|
|
27
|
+
vectorField: "titleEmbedding",
|
|
28
|
+
embedder: exports.geminiEmbedding001,
|
|
29
|
+
distanceMeasure: "COSINE",
|
|
30
|
+
distanceResultField: "distance",
|
|
31
|
+
});
|
|
19
32
|
});
|
|
20
33
|
//# sourceMappingURL=genkit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genkit.js","sourceRoot":"","sources":["../../../src/lib/ai/genkit.ts"],"names":[],"mappings":";;;AAAA,mCAA2D;AAC3D,0DAAmD;AACnD,qDAAoD;
|
|
1
|
+
{"version":3,"file":"genkit.js","sourceRoot":"","sources":["../../../src/lib/ai/genkit.ts"],"names":[],"mappings":";;;AAAA,mCAA2D;AAC3D,0DAAmD;AACnD,kDAA+D;AAC/D,qDAAoD;AACpD,0CAAwC;AAExC,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,gBAAgB,CAAC;AAO5E,sEAAsE;AACtE,IAAA,aAAM,EAAC,GAAG,EAAE;IACV,UAAE,GAAG,IAAA,eAAM,EAAC;QACV,OAAO,EAAE;YACP,IAAA,uBAAQ,EAAC;gBACP,QAAQ,EAAE,aAAa;gBACvB,SAAS;aACV,CAAC;SACH;KACF,CAAC,CAAC;IAEH,0BAAkB,GAAG,uBAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAE/D,0CAA0C;IAC1C,wBAAgB,GAAG,IAAA,mCAAwB,EAAC,UAAE,EAAE;QAC9C,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAT,oBAAS;QACT,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,aAAa;QAC3B,WAAW,EAAE,gBAAgB;QAC7B,QAAQ,EAAE,0BAAkB;QAC5B,eAAe,EAAE,QAAQ;QACzB,mBAAmB,EAAE,UAAU;KAChC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/lib/ai/embedding.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { FieldValue } from "firebase-admin/firestore";
|
|
2
|
-
import { defineFirestoreRetriever } from "@genkit-ai/firebase";
|
|
3
|
-
import { onInit } from "firebase-functions/v2/core";
|
|
4
2
|
import { firestore } from "../firebase";
|
|
5
|
-
import { ai, geminiEmbedding001 } from "./genkit";
|
|
3
|
+
import { ai, geminiEmbedding001, recipesRetriever } from "./genkit";
|
|
6
4
|
import { logAIUsage } from "./cost";
|
|
7
5
|
import { AI_MODELS } from "../../config/ai";
|
|
8
6
|
import { ValidationError } from "../../types";
|
|
9
7
|
|
|
8
|
+
// Re-export retriever from genkit for convenience
|
|
9
|
+
export { recipesRetriever };
|
|
10
|
+
|
|
10
11
|
export const generateEmbedding = async (text: string, flowName: string) => {
|
|
11
12
|
if (text.length < 1 || text.length > 7500) {
|
|
12
13
|
throw new ValidationError("Text must be between 1 and 7500 characters", {
|
|
@@ -46,19 +47,3 @@ export const storeEmbedding = async (
|
|
|
46
47
|
[vectorField]: FieldValue.vector(embedding),
|
|
47
48
|
});
|
|
48
49
|
};
|
|
49
|
-
|
|
50
|
-
// Defer retriever initialization to avoid deployment timeout
|
|
51
|
-
export let recipesRetriever: any;
|
|
52
|
-
|
|
53
|
-
onInit(() => {
|
|
54
|
-
recipesRetriever = defineFirestoreRetriever(ai, {
|
|
55
|
-
name: "recipesRetriever",
|
|
56
|
-
firestore,
|
|
57
|
-
collection: "recipes",
|
|
58
|
-
contentField: "searchTerms",
|
|
59
|
-
vectorField: "titleEmbedding",
|
|
60
|
-
embedder: geminiEmbedding001,
|
|
61
|
-
distanceMeasure: "COSINE",
|
|
62
|
-
distanceResultField: "distance",
|
|
63
|
-
});
|
|
64
|
-
});
|
package/src/lib/ai/genkit.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { genkit, EmbedderReference, Genkit } from "genkit";
|
|
2
2
|
import { vertexAI } from "@genkit-ai/google-genai";
|
|
3
|
+
import { defineFirestoreRetriever } from "@genkit-ai/firebase";
|
|
3
4
|
import { onInit } from "firebase-functions/v2/core";
|
|
5
|
+
import { firestore } from "../firebase";
|
|
4
6
|
|
|
5
7
|
const projectId =
|
|
6
8
|
process.env.GCLOUD_PROJECT || process.env.GCP_PROJECT || "canary-cravery";
|
|
@@ -8,6 +10,7 @@ const projectId =
|
|
|
8
10
|
// Declare but don't initialize yet - will be initialized in onInit
|
|
9
11
|
export let ai: Genkit;
|
|
10
12
|
export let geminiEmbedding001: EmbedderReference;
|
|
13
|
+
export let recipesRetriever: any;
|
|
11
14
|
|
|
12
15
|
// Initialize during Firebase Functions init phase, not at module load
|
|
13
16
|
onInit(() => {
|
|
@@ -21,4 +24,16 @@ onInit(() => {
|
|
|
21
24
|
});
|
|
22
25
|
|
|
23
26
|
geminiEmbedding001 = vertexAI.embedder("gemini-embedding-001");
|
|
27
|
+
|
|
28
|
+
// Initialize retriever after ai is set up
|
|
29
|
+
recipesRetriever = defineFirestoreRetriever(ai, {
|
|
30
|
+
name: "recipesRetriever",
|
|
31
|
+
firestore,
|
|
32
|
+
collection: "recipes",
|
|
33
|
+
contentField: "searchTerms",
|
|
34
|
+
vectorField: "titleEmbedding",
|
|
35
|
+
embedder: geminiEmbedding001,
|
|
36
|
+
distanceMeasure: "COSINE",
|
|
37
|
+
distanceResultField: "distance",
|
|
38
|
+
});
|
|
24
39
|
});
|