@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.
@@ -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":"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"}
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
@@ -0,0 +1,2 @@
1
+ # @memberjunction/ai-gemini
2
+ Simple wrapper class for Google Gemini AI Models to use with the MemberJunction framework.