@memberjunction/ai-gemini 0.9.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.
- package/dist/index.d.ts +10 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/package.json +25 -0
- package/readme.md +2 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { InputContent } from "@google/generative-ai";
|
|
2
|
+
import { BaseLLM, ChatMessage, ChatParams, ChatResult, SummarizeParams, SummarizeResult } from "@memberjunction/ai";
|
|
3
|
+
export declare class GeminiLLM extends BaseLLM {
|
|
4
|
+
private static _gemini;
|
|
5
|
+
constructor(apiKey: string);
|
|
6
|
+
ChatCompletion(params: ChatParams): Promise<ChatResult>;
|
|
7
|
+
SummarizeText(params: SummarizeParams): Promise<SummarizeResult>;
|
|
8
|
+
ClassifyText(params: any): Promise<any>;
|
|
9
|
+
static MapMJMessageToGeminiHistoryEntry(message: ChatMessage): InputContent;
|
|
10
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GeminiLLM = void 0;
|
|
4
|
+
// Google Gemini Import
|
|
5
|
+
const generative_ai_1 = require("@google/generative-ai");
|
|
6
|
+
// MJ stuff
|
|
7
|
+
const ai_1 = require("@memberjunction/ai");
|
|
8
|
+
class GeminiLLM extends ai_1.BaseLLM {
|
|
9
|
+
constructor(apiKey) {
|
|
10
|
+
super(apiKey);
|
|
11
|
+
if (!GeminiLLM._gemini) {
|
|
12
|
+
GeminiLLM._gemini = new generative_ai_1.GoogleGenerativeAI(apiKey);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async ChatCompletion(params) {
|
|
16
|
+
try {
|
|
17
|
+
// For text-only input, use the gemini-pro model
|
|
18
|
+
const startTime = new Date();
|
|
19
|
+
const config = {
|
|
20
|
+
temperature: params.temperature || 0.5,
|
|
21
|
+
};
|
|
22
|
+
const model = GeminiLLM._gemini.getGenerativeModel({ model: params.model || "gemini-pro", generationConfig: config });
|
|
23
|
+
const allMessagesButLast = params.messages.slice(0, -1);
|
|
24
|
+
const chat = model.startChat({
|
|
25
|
+
history: allMessagesButLast.map(m => GeminiLLM.MapMJMessageToGeminiHistoryEntry(m))
|
|
26
|
+
});
|
|
27
|
+
const latestMessage = params.messages[params.messages.length - 1].content;
|
|
28
|
+
const result = await chat.sendMessage(latestMessage);
|
|
29
|
+
const endTime = new Date();
|
|
30
|
+
return {
|
|
31
|
+
success: true,
|
|
32
|
+
statusText: "OK",
|
|
33
|
+
startTime: startTime,
|
|
34
|
+
endTime: endTime,
|
|
35
|
+
timeElapsed: endTime.getTime() - startTime.getTime(),
|
|
36
|
+
data: {
|
|
37
|
+
choices: [{
|
|
38
|
+
message: { role: 'assistant', content: result.response.text() },
|
|
39
|
+
finish_reason: "completed",
|
|
40
|
+
index: 0
|
|
41
|
+
}],
|
|
42
|
+
usage: {
|
|
43
|
+
totalTokens: 0,
|
|
44
|
+
promptTokens: 0,
|
|
45
|
+
completionTokens: 0 // to do map this from google
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
errorMessage: "",
|
|
49
|
+
exception: null,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
statusText: e && e.message ? e.message : "Error",
|
|
56
|
+
startTime: new Date(),
|
|
57
|
+
endTime: new Date(),
|
|
58
|
+
timeElapsed: 0,
|
|
59
|
+
data: {
|
|
60
|
+
choices: [],
|
|
61
|
+
usage: {
|
|
62
|
+
totalTokens: 0,
|
|
63
|
+
promptTokens: 0,
|
|
64
|
+
completionTokens: 0
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
errorMessage: e.message,
|
|
68
|
+
exception: e
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
SummarizeText(params) {
|
|
73
|
+
throw new Error("Method not implemented.");
|
|
74
|
+
}
|
|
75
|
+
ClassifyText(params) {
|
|
76
|
+
throw new Error("Method not implemented.");
|
|
77
|
+
}
|
|
78
|
+
static MapMJMessageToGeminiHistoryEntry(message) {
|
|
79
|
+
return {
|
|
80
|
+
role: message.role === 'assistant' ? 'model' : 'user', // google calls all messages other than the replies from the model 'user' which would include the system prompt
|
|
81
|
+
parts: message.content
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.GeminiLLM = GeminiLLM;
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uBAAuB;AACvB,yDAAyE;AAEzE,WAAW;AACX,2CAAoH;AAEpH,MAAa,SAAU,SAAQ,YAAO;IAGlC,YAAY,MAAc;QACtB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACrB,SAAS,CAAC,OAAO,GAAG,IAAI,kCAAkB,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,MAAkB;QAC1C,IAAI,CAAC;YACD,gDAAgD;YAChD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG;gBACX,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,GAAG;aACzC,CAAC;YACF,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAC,CAAC,CAAC;YACrH,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;gBACzB,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC;aACtF,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YAC3B,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;gBACpD,IAAI,EAAE;oBACF,OAAO,EAAE,CAAC;4BACN,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;4BAC/D,aAAa,EAAE,WAAW;4BAC1B,KAAK,EAAE,CAAC;yBACX,CAAC;oBACF,KAAK,EAAE;wBACH,WAAW,EAAE,CAAC;wBACd,YAAY,EAAE,CAAC;wBACf,gBAAgB,EAAE,CAAC,CAAC,6BAA6B;qBACpD;iBACJ;gBACD,YAAY,EAAE,EAAE;gBAChB,SAAS,EAAE,IAAI;aAClB,CAAA;QACL,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;gBAChD,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,OAAO,EAAE,IAAI,IAAI,EAAE;gBACnB,WAAW,EAAE,CAAC;gBACd,IAAI,EAAE;oBACF,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE;wBACH,WAAW,EAAE,CAAC;wBACd,YAAY,EAAE,CAAC;wBACf,gBAAgB,EAAE,CAAC;qBACtB;iBACJ;gBACD,YAAY,EAAE,CAAC,CAAC,OAAO;gBACvB,SAAS,EAAE,CAAC;aAEf,CAAA;QACL,CAAC;IACL,CAAC;IACD,aAAa,CAAC,MAAuB;QACjC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,YAAY,CAAC,MAAW;QACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEM,MAAM,CAAC,gCAAgC,CAAC,OAAoB;QAC/D,OAAO;YACH,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,+GAA+G;YACtK,KAAK,EAAE,OAAO,CAAC,OAAO;SACzB,CAAA;IACL,CAAC;CACJ;AAjFD,8BAiFC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@memberjunction/ai-gemini",
|
|
3
|
+
"version": "0.9.4",
|
|
4
|
+
"description": "MemberJunction Wrapper for Google Gemini AI Models",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"/dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"start": "ts-node-dev src/index.ts",
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
14
|
+
},
|
|
15
|
+
"author": "MemberJunction.com",
|
|
16
|
+
"license": "ISC",
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"ts-node-dev": "^2.0.0",
|
|
19
|
+
"typescript": "^5.3.3"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@memberjunction/ai": "^0.9.147",
|
|
23
|
+
"@google/generative-ai": "~0.2.1"
|
|
24
|
+
}
|
|
25
|
+
}
|
package/readme.md
ADDED