@memberjunction/ai-openai 2.32.2 → 2.34.0

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.
@@ -11,7 +11,30 @@ export declare class OpenAILLM extends BaseLLM {
11
11
  * Read only getter method to get the OpenAI instance
12
12
  */
13
13
  get OpenAI(): OpenAI;
14
- ChatCompletion(params: ChatParams): Promise<ChatResult>;
14
+ /**
15
+ * OpenAI supports streaming
16
+ */
17
+ get SupportsStreaming(): boolean;
18
+ /**
19
+ * Implementation of non-streaming chat completion for OpenAI
20
+ */
21
+ protected nonStreamingChatCompletion(params: ChatParams): Promise<ChatResult>;
22
+ /**
23
+ * Create a streaming request for OpenAI
24
+ */
25
+ protected createStreamingRequest(params: ChatParams): Promise<any>;
26
+ /**
27
+ * Process a streaming chunk from OpenAI
28
+ */
29
+ protected processStreamingChunk(chunk: any): {
30
+ content: string;
31
+ finishReason?: string;
32
+ usage?: any;
33
+ };
34
+ /**
35
+ * Create the final response from streaming results for OpenAI
36
+ */
37
+ protected finalizeStreamingResponse(accumulatedContent: string | null | undefined, lastChunk: any | null | undefined, usage: any | null | undefined): ChatResult;
15
38
  SummarizeText(params: SummarizeParams): Promise<SummarizeResult>;
16
39
  ClassifyText(params: ClassifyParams): Promise<ClassifyResult>;
17
40
  ConvertMJToOpenAIChatMessages(messages: ChatMessage[]): ChatCompletionMessageParam[];
@@ -1 +1 @@
1
- {"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["../../src/models/openAI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAmB,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAA4C,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC/M,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;GAEG;AACH,qBACa,SAAU,SAAQ,OAAO;IAClC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM;IAS1B;;OAEG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAEY,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAsDvD,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAmBhE,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAInE,6BAA6B,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,0BAA0B,EAAE;IAU3F;;;;;;;;;OASG;IACI,qBAAqB,CAAC,IAAI,EAAE,MAAM;CAY5C;AAED,wBAAgB,aAAa,SAE5B"}
1
+ {"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["../../src/models/openAI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAmB,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAA4C,eAAe,EAAE,eAAe,EAA0B,MAAM,oBAAoB,CAAC;AACvO,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;GAEG;AACH,qBACa,SAAU,SAAQ,OAAO;IAClC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM;IAS1B;;OAEG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAoB,iBAAiB,IAAI,OAAO,CAE/C;IAED;;OAEG;cACa,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAoDnF;;OAEG;cACa,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBxE;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,GAAG;QACzC,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,GAAG,CAAC;KACf;IAgBD;;OAEG;IACH,SAAS,CAAC,yBAAyB,CAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7C,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS,EACjC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS,GAC9B,UAAU;IAiCA,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAmBhE,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAInE,6BAA6B,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,0BAA0B,EAAE;IAU3F;;;;;;;;;OASG;IACI,qBAAqB,CAAC,IAAI,EAAE,MAAM;CAY5C;AAED,wBAAgB,aAAa,SAE5B"}
@@ -27,7 +27,16 @@ let OpenAILLM = class OpenAILLM extends ai_1.BaseLLM {
27
27
  get OpenAI() {
28
28
  return this._openAI;
29
29
  }
30
- async ChatCompletion(params) {
30
+ /**
31
+ * OpenAI supports streaming
32
+ */
33
+ get SupportsStreaming() {
34
+ return true;
35
+ }
36
+ /**
37
+ * Implementation of non-streaming chat completion for OpenAI
38
+ */
39
+ async nonStreamingChatCompletion(params) {
31
40
  const messages = this.ConvertMJToOpenAIChatMessages(params.messages);
32
41
  const startTime = new Date();
33
42
  const openAIParams = {
@@ -74,6 +83,75 @@ let OpenAILLM = class OpenAILLM extends ai_1.BaseLLM {
74
83
  exception: null
75
84
  };
76
85
  }
86
+ /**
87
+ * Create a streaming request for OpenAI
88
+ */
89
+ async createStreamingRequest(params) {
90
+ const messages = this.ConvertMJToOpenAIChatMessages(params.messages);
91
+ const openAIParams = {
92
+ model: params.model,
93
+ messages: messages,
94
+ temperature: params.temperature,
95
+ max_tokens: params.maxOutputTokens,
96
+ stream: true
97
+ };
98
+ // Set response format if specified
99
+ switch (params.responseFormat) {
100
+ case 'JSON':
101
+ openAIParams.response_format = { type: "json_object" };
102
+ break;
103
+ case 'ModelSpecific':
104
+ openAIParams.response_format = params.modelSpecificResponseFormat;
105
+ break;
106
+ }
107
+ return this.OpenAI.chat.completions.create(openAIParams);
108
+ }
109
+ /**
110
+ * Process a streaming chunk from OpenAI
111
+ */
112
+ processStreamingChunk(chunk) {
113
+ // Handle potential null/undefined values safely
114
+ const content = chunk?.choices?.[0]?.delta?.content || '';
115
+ const usage = chunk?.usage || null;
116
+ return {
117
+ content,
118
+ finishReason: chunk?.choices?.[0]?.finish_reason,
119
+ usage: usage ? {
120
+ promptTokens: usage.prompt_tokens || 0,
121
+ completionTokens: usage.completion_tokens || 0,
122
+ totalTokens: (usage.prompt_tokens || 0) + (usage.completion_tokens || 0)
123
+ } : null
124
+ };
125
+ }
126
+ /**
127
+ * Create the final response from streaming results for OpenAI
128
+ */
129
+ finalizeStreamingResponse(accumulatedContent, lastChunk, usage) {
130
+ // Handle possible null/undefined values
131
+ const content = accumulatedContent || '';
132
+ const promptTokens = usage?.promptTokens || 0;
133
+ const completionTokens = usage?.completionTokens || 0;
134
+ // Create dates (will be overridden by base class)
135
+ const now = new Date();
136
+ // Create a proper ChatResult instance with constructor params
137
+ const result = new ai_1.ChatResult(true, now, now);
138
+ // Set all properties
139
+ result.data = {
140
+ choices: [{
141
+ message: {
142
+ role: 'assistant',
143
+ content: content
144
+ },
145
+ finish_reason: lastChunk?.choices?.[0]?.finish_reason || 'stop',
146
+ index: 0
147
+ }],
148
+ usage: new ai_1.ModelUsage(promptTokens, completionTokens)
149
+ };
150
+ result.statusText = 'success';
151
+ result.errorMessage = null;
152
+ result.exception = null;
153
+ return result;
154
+ }
77
155
  async SummarizeText(params) {
78
156
  const messages = this.ConvertMJToOpenAIChatMessages(params.messages);
79
157
  const startTime = new Date();
@@ -1 +1 @@
1
- {"version":3,"file":"openAI.js","sourceRoot":"","sources":["../../src/models/openAI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openAI.js","sourceRoot":"","sources":["../../src/models/openAI.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAuO;AACvO,mCAAgC;AAChC,mDAAuD;AAGvD;;GAEG;AAEI,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,YAAO;IAGlC,YAAY,MAAc;QACtB,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,iCAAiC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAM,CAAC;YACtB,MAAM,EAAE,MAAM;SACjB,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAoB,iBAAiB;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,0BAA0B,CAAC,MAAkB;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAmE;YACjF,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,eAAe;SACrC,CAAC;QAEF,QAAQ,MAAM,CAAC,cAAc,EAAE,CAAC;YAC5B,KAAK,KAAK,CAAC;YACX,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU;gBACX,MAAM;YACV,KAAK,MAAM;gBACP,YAAY,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;gBACvD,MAAM;YACV,KAAK,eAAe;gBAChB,YAAY,CAAC,eAAe,GAAG,MAAM,CAAC,2BAA2B,CAAC;gBAClE,MAAM;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAE5D,OAAO;YACH,IAAI,EAAE;gBACF,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAyF,EAAE,EAAE;oBACtH,OAAO;wBACH,OAAO,EAAE;4BACL,IAAI,EAAmB,CAAC,CAAC,OAAO,CAAC,IAAI;4BACrC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO;yBAC7B;wBACD,aAAa,EAAE,CAAC,CAAC,aAAa;wBAC9B,KAAK,EAAE,CAAC,CAAC,KAAK;qBACjB,CAAA;gBACL,CAAC,CAAC;gBACF,KAAK,EAAE,IAAI,eAAU,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;aACpF;YACD,OAAO,EAAE,CAAC,CAAC,MAAM;YACjB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,WAAW;YACxB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;SAClB,CAAA;IACL,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,sBAAsB,CAAC,MAAkB;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAErE,MAAM,YAAY,GAAgE;YAC9E,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,eAAe;YAClC,MAAM,EAAE,IAAI;SACf,CAAC;QAEF,mCAAmC;QACnC,QAAQ,MAAM,CAAC,cAAc,EAAE,CAAC;YAC5B,KAAK,MAAM;gBACP,YAAY,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;gBACvD,MAAM;YACV,KAAK,eAAe;gBAChB,YAAY,CAAC,eAAe,GAAG,MAAM,CAAC,2BAA2B,CAAC;gBAClE,MAAM;QACd,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACO,qBAAqB,CAAC,KAAU;QAKtC,gDAAgD;QAChD,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC;QAEnC,OAAO;YACH,OAAO;YACP,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa;YAChD,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACX,YAAY,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;gBACtC,gBAAgB,EAAE,KAAK,CAAC,iBAAiB,IAAI,CAAC;gBAC9C,WAAW,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;aAC3E,CAAC,CAAC,CAAC,IAAI;SACX,CAAC;IACN,CAAC;IAED;;OAEG;IACO,yBAAyB,CAC/B,kBAA6C,EAC7C,SAAiC,EACjC,KAA6B;QAE7B,wCAAwC;QACxC,MAAM,OAAO,GAAG,kBAAkB,IAAI,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,KAAK,EAAE,gBAAgB,IAAI,CAAC,CAAC;QAEtD,kDAAkD;QAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,8DAA8D;QAC9D,MAAM,MAAM,GAAG,IAAI,eAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAE9C,qBAAqB;QACrB,MAAM,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,CAAC;oBACN,OAAO,EAAE;wBACL,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,OAAO;qBACnB;oBACD,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,IAAI,MAAM;oBAC/D,KAAK,EAAE,CAAC;iBACX,CAAC;YACF,KAAK,EAAE,IAAI,eAAU,CAAC,YAAY,EAAE,gBAAgB,CAAC;SACxD,CAAC;QAEF,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QAExB,OAAO,MAAM,CAAC;IAClB,CAAC;IAGM,KAAK,CAAC,aAAa,CAAC,MAAuB;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAGrE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACrD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAE3B,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACtE,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,OAAO;YACP,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAEpD,OAAO,IAAI,oBAAe,CAAC,IAAA,iCAA4B,EAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/G,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAsB;QAC5C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEM,6BAA6B,CAAC,QAAuB;QACxD,+CAA+C;QAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxC,OAAO,EAAE,CAAC,CAAC,OAAO;aACrB,CAAA;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;OASG;IACI,qBAAqB,CAAC,IAAY;QACrC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAChC,KAAK,QAAQ;gBACT,OAAO,QAAQ,CAAC;YACpB,KAAK,MAAM;gBACP,OAAO,MAAM,CAAC;YAClB,KAAK,WAAW;gBACZ,OAAO,WAAW,CAAC;YACvB;gBACI,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;IACL,CAAC;CACJ,CAAA;AAlOY,8BAAS;oBAAT,SAAS;IADrB,IAAA,sBAAa,EAAC,YAAO,EAAE,WAAW,CAAC;GACvB,SAAS,CAkOrB;AAED,SAAgB,aAAa;IACzB,iFAAiF;AACrF,CAAC;AAFD,sCAEC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ai-openai",
3
- "version": "2.32.2",
3
+ "version": "2.34.0",
4
4
  "description": "MemberJunction Wrapper for OpenAI AI Models",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,8 +19,8 @@
19
19
  "typescript": "^5.4.5"
20
20
  },
21
21
  "dependencies": {
22
- "@memberjunction/ai": "2.32.2",
23
- "@memberjunction/global": "2.32.2",
22
+ "@memberjunction/ai": "2.34.0",
23
+ "@memberjunction/global": "2.34.0",
24
24
  "openai": "4.83.0"
25
25
  }
26
26
  }
package/readme.md CHANGED
@@ -1,2 +1,188 @@
1
- # @memberjunction/ai-gemini
2
- Simple wrapper class for OpenAI's AI Models to use with the MemberJunction framework.
1
+ # @memberjunction/ai-openai
2
+
3
+ A comprehensive wrapper for OpenAI's API and models that seamlessly integrates with the MemberJunction AI framework, providing a standardized interface for GPT and other OpenAI models.
4
+
5
+ ## Features
6
+
7
+ - **OpenAI Integration**: Full integration with OpenAI's chat completion models
8
+ - **Standardized Interface**: Follows MemberJunction's BaseLLM abstract class for consistency
9
+ - **Message Formatting**: Handles conversion between MemberJunction and OpenAI message formats
10
+ - **Response Format Support**: Support for different response formats (Text, JSON, etc.)
11
+ - **Error Handling**: Comprehensive error handling with detailed reporting
12
+ - **Token Usage Tracking**: Automatic tracking of prompt and completion tokens
13
+ - **Chat Completion**: Chat-based interaction with models like GPT-4 and GPT-3.5
14
+ - **Text Summarization**: Summarize text content using OpenAI models
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ npm install @memberjunction/ai-openai
20
+ ```
21
+
22
+ ## Requirements
23
+
24
+ - Node.js 16+
25
+ - An OpenAI API key
26
+ - MemberJunction Core libraries
27
+
28
+ ## Usage
29
+
30
+ ### Basic Setup
31
+
32
+ ```typescript
33
+ import { OpenAILLM } from '@memberjunction/ai-openai';
34
+
35
+ // Initialize with your API key
36
+ const openAI = new OpenAILLM('your-openai-api-key');
37
+ ```
38
+
39
+ ### Chat Completion
40
+
41
+ ```typescript
42
+ import { ChatParams } from '@memberjunction/ai';
43
+
44
+ // Create chat parameters
45
+ const chatParams: ChatParams = {
46
+ model: 'gpt-4',
47
+ messages: [
48
+ { role: 'system', content: 'You are a helpful assistant.' },
49
+ { role: 'user', content: 'What is machine learning?' }
50
+ ],
51
+ temperature: 0.7,
52
+ maxOutputTokens: 500,
53
+ responseFormat: 'Text'
54
+ };
55
+
56
+ // Get a response
57
+ try {
58
+ const response = await openAI.ChatCompletion(chatParams);
59
+ if (response.success) {
60
+ console.log('Response:', response.data.choices[0].message.content);
61
+ console.log('Token Usage:', response.data.usage);
62
+ } else {
63
+ console.error('Error:', response.errorMessage);
64
+ }
65
+ } catch (error) {
66
+ console.error('Exception:', error);
67
+ }
68
+ ```
69
+
70
+ ### JSON Response Format
71
+
72
+ ```typescript
73
+ const jsonParams: ChatParams = {
74
+ model: 'gpt-4',
75
+ messages: [
76
+ { role: 'system', content: 'You are a helpful assistant.' },
77
+ { role: 'user', content: 'Generate a JSON object with name, age, and city for 3 fictional people.' }
78
+ ],
79
+ temperature: 0.3,
80
+ maxOutputTokens: 500,
81
+ responseFormat: 'JSON'
82
+ };
83
+
84
+ const jsonResponse = await openAI.ChatCompletion(jsonParams);
85
+ const jsonData = JSON.parse(jsonResponse.data.choices[0].message.content);
86
+ console.log('Structured Data:', jsonData);
87
+ ```
88
+
89
+ ### Text Summarization
90
+
91
+ ```typescript
92
+ import { SummarizeParams } from '@memberjunction/ai';
93
+
94
+ const text = `Long text that you want to summarize...`;
95
+
96
+ const summarizeParams: SummarizeParams = {
97
+ text: text,
98
+ model: 'gpt-3.5-turbo',
99
+ temperature: 0.3,
100
+ maxWords: 100
101
+ };
102
+
103
+ const summary = await openAI.SummarizeText(summarizeParams);
104
+ console.log('Summary:', summary.summary);
105
+ ```
106
+
107
+ ### Direct Access to OpenAI Client
108
+
109
+ ```typescript
110
+ // Access the underlying OpenAI client for advanced usage
111
+ const openAIClient = openAI.OpenAI;
112
+
113
+ // Use the client directly if needed
114
+ const embeddings = await openAIClient.embeddings.create({
115
+ model: 'text-embedding-ada-002',
116
+ input: 'The quick brown fox jumps over the lazy dog'
117
+ });
118
+ ```
119
+
120
+ ## API Reference
121
+
122
+ ### OpenAILLM Class
123
+
124
+ A class that extends BaseLLM to provide OpenAI-specific functionality.
125
+
126
+ #### Constructor
127
+
128
+ ```typescript
129
+ new OpenAILLM(apiKey: string)
130
+ ```
131
+
132
+ #### Properties
133
+
134
+ - `OpenAI`: (read-only) Returns the underlying OpenAI client instance
135
+
136
+ #### Methods
137
+
138
+ - `ChatCompletion(params: ChatParams): Promise<ChatResult>` - Perform a chat completion
139
+ - `SummarizeText(params: SummarizeParams): Promise<SummarizeResult>` - Summarize text
140
+ - `ClassifyText(params: ClassifyParams): Promise<ClassifyResult>` - Classify text (not implemented)
141
+ - `ConvertMJToOpenAIChatMessages(messages: ChatMessage[]): ChatCompletionMessageParam[]` - Convert MemberJunction messages to OpenAI messages
142
+ - `ConvertMJToOpenAIRole(role: string): string` - Convert MemberJunction roles to OpenAI roles
143
+
144
+ ## Response Formats
145
+
146
+ The OpenAILLM class supports various response formats:
147
+
148
+ - `Text`: Regular text responses (default)
149
+ - `JSON`: Structured JSON responses
150
+ - `Markdown`: Markdown-formatted responses
151
+ - `ModelSpecific`: Custom formats supported by specific models
152
+
153
+ Example with JSON response:
154
+
155
+ ```typescript
156
+ const params: ChatParams = {
157
+ // ...other parameters
158
+ responseFormat: 'JSON'
159
+ };
160
+ ```
161
+
162
+ ## Error Handling
163
+
164
+ The wrapper provides comprehensive error information:
165
+
166
+ ```typescript
167
+ try {
168
+ const response = await openAI.ChatCompletion(params);
169
+ if (!response.success) {
170
+ console.error('Error:', response.errorMessage);
171
+ console.error('Status:', response.statusText);
172
+ console.error('Time Elapsed:', response.timeElapsed, 'ms');
173
+ console.error('Exception:', response.exception);
174
+ }
175
+ } catch (error) {
176
+ console.error('Exception occurred:', error);
177
+ }
178
+ ```
179
+
180
+ ## Dependencies
181
+
182
+ - `openai`: Official OpenAI Node.js SDK (v4.x)
183
+ - `@memberjunction/ai`: MemberJunction AI core framework
184
+ - `@memberjunction/global`: MemberJunction global utilities
185
+
186
+ ## License
187
+
188
+ ISC