@modelence/ai 0.1.0 → 0.1.1-dev.1

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @modelence/ai
2
2
 
3
- AI engine for Modelence applications.
3
+ AI engine for Modelence applications with built-in telemetry, based on https://ai-sdk.dev
4
4
 
5
5
  ## Installation
6
6
 
@@ -10,19 +10,35 @@ npm install @modelence/ai
10
10
 
11
11
  ## Usage
12
12
 
13
+ ### generateText
14
+
15
+ A wrapper around [AI SDK](https://ai-sdk.dev)'s `generateText` with built-in Modelence configuration and telemetry.
16
+
13
17
  ```typescript
14
- import { getOpenAIConfig } from '@modelence/ai';
18
+ import { generateText } from '@modelence/ai';
19
+
20
+ const response = await generateText({
21
+ provider: 'openai',
22
+ model: 'gpt-4o',
23
+ messages: [
24
+ { role: 'user', content: 'Hello, world!' }
25
+ ],
26
+ });
15
27
 
16
- const config = getOpenAIConfig();
17
- // Returns: { apiKey: string }
28
+ console.log(response.text);
18
29
  ```
19
30
 
20
- ## Functions
31
+ #### Supported Providers
21
32
 
22
- ### `getOpenAIConfig()`
33
+ - **OpenAI**: `provider: 'openai'`, models: `gpt-4o`, `gpt-4o-mini`, `gpt-3.5-turbo`
34
+ - **Anthropic**: `provider: 'anthropic'`, models: `claude-3-5-sonnet-20241022`, `claude-3-haiku-20240307`
35
+ - **Google**: `provider: 'google'`, models: `gemini-1.5-pro`, `gemini-1.5-flash`
23
36
 
24
- Returns the OpenAI configuration from Modelence server config.
37
+ #### Configuration
25
38
 
26
- **Returns:** `{ apiKey: string }`
39
+ The function automatically uses API keys from Modelence configuration:
40
+ - OpenAI: `_system.openai.apiKey`
41
+ - Anthropic: `_system.anthropic.apiKey`
42
+ - Google: `_system.google.apiKey`
27
43
 
28
- The API key is retrieved from the `_system.openai.apiKey` configuration key using Modelence's server-side config system.
44
+ You don't need to manually set any of these configs as long as your application is using a [Modelence Cloud](https://modelence.com/cloud) backend - simply use the AI > Integrations tab in your Modelence Cloud dashboard to configure keys, and it will be automatically used and recognized by this package.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,48 @@
1
- declare function getOpenAIConfig(): {
2
- apiKey: string;
3
- };
1
+ import * as ai from 'ai';
2
+ import { generateText as generateText$1 } from 'ai';
4
3
 
5
- export { getOpenAIConfig };
4
+ /**
5
+ * Supported AI providers for text generation.
6
+ */
7
+ type Provider = 'openai' | 'anthropic' | 'google';
8
+ type OriginalGenerateTextParams = Parameters<typeof generateText$1>[0];
9
+ /**
10
+ * Options for the Modelence generateText function.
11
+ *
12
+ * This interface extends all the standard AI SDK generateText options,
13
+ * but replaces the model parameter with separate provider and model parameters.
14
+ */
15
+ interface GenerateTextOptions extends Omit<OriginalGenerateTextParams, 'model'> {
16
+ /** The AI provider name */
17
+ provider: Provider;
18
+ /** The specific model name */
19
+ model: string;
20
+ }
21
+ /**
22
+ * Generates text using AI models with built-in Modelence configuration and telemetry.
23
+ *
24
+ * This is a wrapper around the AI SDK's generateText function that automatically
25
+ * configures providers using Modelence's server-side configuration system.
26
+ *
27
+ * @param options - Configuration options for text generation
28
+ * @returns A promise that resolves to the generated text result
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { generateText } from '@modelence/ai';
33
+ *
34
+ * const response = await generateText({
35
+ * provider: 'openai',
36
+ * model: 'gpt-4o',
37
+ * messages: [
38
+ * { role: 'user', content: 'Write a haiku about programming' }
39
+ * ],
40
+ * temperature: 0.7
41
+ * });
42
+ *
43
+ * console.log(response.text);
44
+ * ```
45
+ */
46
+ declare function generateText(options: GenerateTextOptions): Promise<ai.GenerateTextResult<ai.ToolSet, unknown>>;
47
+
48
+ export { type GenerateTextOptions, generateText };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import {getConfig}from'modelence/server';function n(){return {apiKey:String(getConfig("_system.openai.apiKey"))}}export{n as getOpenAIConfig};//# sourceMappingURL=index.js.map
1
+ import {getConfig}from'modelence/server';import {startTransaction,captureError}from'modelence/telemetry';import {generateText}from'ai';import {createOpenAI}from'@ai-sdk/openai';import {createAnthropic}from'@ai-sdk/anthropic';import {createGoogleGenerativeAI}from'@ai-sdk/google';function d(e,r){switch(e){case "openai":return createOpenAI({apiKey:String(getConfig("_system.openai.apiKey"))})(r);case "anthropic":return createAnthropic({apiKey:String(getConfig("_system.anthropic.apiKey"))})(r);case "google":return createGoogleGenerativeAI({apiKey:String(getConfig("_system.google.apiKey"))})(r);default:throw new Error(`Unsupported provider: ${e}`)}}async function G(e){let{provider:r,model:o,...i}=e,n=startTransaction("ai","ai:generateText",{provider:r,model:o,messageCount:Array.isArray(e.messages)?e.messages.length:0,temperature:e.temperature});try{let t=await generateText({model:d(r,o),...i});return n.end(),t}catch(t){throw captureError(t),n.end("error"),t}}export{G as generateText};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["getOpenAIConfig","getConfig"],"mappings":"yCAEO,SAASA,GAAkB,CAChC,OAAO,CACL,MAAA,CAAQ,MAAOC,CAAAA,SAAAA,CAAU,uBAAuB,CAAC,CACnD,CACF","file":"index.js","sourcesContent":["import { getConfig } from 'modelence/server';\n\nexport function getOpenAIConfig() {\n return {\n apiKey: String(getConfig('_system.openai.apiKey'))\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["getProviderModel","provider","model","createOpenAI","getConfig","createAnthropic","createGoogleGenerativeAI","generateText","options","restOptions","transaction","startTransaction","result","originalGenerateText","error","captureError"],"mappings":"uRA4BA,SAASA,CAAiBC,CAAAA,CAAAA,CAAoBC,CAAe,CAAA,CAC3D,OAAQD,CAAU,EAChB,KAAK,QAAA,CACH,OAAOE,YAAa,CAAA,CAClB,MAAQ,CAAA,MAAA,CAAOC,UAAU,uBAAuB,CAAC,CACnD,CAAC,EAAEF,CAAK,CAAA,CAEV,KAAK,WAAA,CACH,OAAOG,eAAgB,CAAA,CACrB,MAAQ,CAAA,MAAA,CAAOD,UAAU,0BAA0B,CAAC,CACtD,CAAC,EAAEF,CAAK,CAAA,CAEV,KAAK,QAAA,CACH,OAAOI,wBAAyB,CAAA,CAC9B,MAAQ,CAAA,MAAA,CAAOF,UAAU,uBAAuB,CAAC,CACnD,CAAC,CAAA,CAAEF,CAAK,CAEV,CAAA,QACE,MAAM,IAAI,MAAM,CAAyBD,sBAAAA,EAAAA,CAAQ,CAAE,CAAA,CACvD,CACF,CA2BA,eAAsBM,CAAaC,CAAAA,CAAAA,CAA8B,CAC/D,GAAM,CAAE,QAAAP,CAAAA,CAAAA,CAAU,MAAAC,CAAO,CAAA,GAAGO,CAAY,CAAA,CAAID,EAEtCE,CAAcC,CAAAA,gBAAAA,CAAiB,IAAM,CAAA,iBAAA,CAAmB,CAC5D,QAAAV,CAAAA,CAAAA,CACA,KAAAC,CAAAA,CAAAA,CACA,aAAc,KAAM,CAAA,OAAA,CAAQM,EAAQ,QAAQ,CAAA,CAAIA,EAAQ,QAAS,CAAA,MAAA,CAAS,CAC1E,CAAA,WAAA,CAAaA,EAAQ,WACvB,CAAC,CAED,CAAA,GAAI,CACF,IAAMI,CAAAA,CAAS,MAAMC,YAAAA,CAAqB,CACxC,KAAOb,CAAAA,CAAAA,CAAiBC,CAAUC,CAAAA,CAAK,EACvC,GAAGO,CACL,CAAC,CAAA,CAED,OAAAC,CAAY,CAAA,GAAA,EACLE,CAAAA,CACT,OAASE,CAAO,CAAA,CACd,MAAAC,YAAAA,CAAaD,CAAc,CAC3BJ,CAAAA,CAAAA,CAAY,IAAI,OAAO,CAAA,CACjBI,CACR,CACF","file":"index.js","sourcesContent":["import { getConfig } from 'modelence/server';\nimport { startTransaction, captureError } from 'modelence/telemetry';\nimport { generateText as originalGenerateText } from 'ai';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createAnthropic } from '@ai-sdk/anthropic';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google';\n\n/**\n * Supported AI providers for text generation.\n */\ntype Provider = 'openai' | 'anthropic' | 'google';\n\n// Extract the original generateText parameters and override the model property\ntype OriginalGenerateTextParams = Parameters<typeof originalGenerateText>[0];\n\n/**\n * Options for the Modelence generateText function.\n * \n * This interface extends all the standard AI SDK generateText options,\n * but replaces the model parameter with separate provider and model parameters.\n */\nexport interface GenerateTextOptions extends Omit<OriginalGenerateTextParams, 'model'> {\n /** The AI provider name */\n provider: Provider;\n /** The specific model name */\n model: string;\n}\n\nfunction getProviderModel(provider: Provider, model: string) {\n switch (provider) {\n case 'openai':\n return createOpenAI({\n apiKey: String(getConfig('_system.openai.apiKey')),\n })(model);\n \n case 'anthropic':\n return createAnthropic({\n apiKey: String(getConfig('_system.anthropic.apiKey')),\n })(model);\n \n case 'google':\n return createGoogleGenerativeAI({\n apiKey: String(getConfig('_system.google.apiKey')),\n })(model);\n \n default:\n throw new Error(`Unsupported provider: ${provider}`);\n }\n}\n\n/**\n * Generates text using AI models with built-in Modelence configuration and telemetry.\n * \n * This is a wrapper around the AI SDK's generateText function that automatically\n * configures providers using Modelence's server-side configuration system.\n * \n * @param options - Configuration options for text generation\n * @returns A promise that resolves to the generated text result\n * \n * @example\n * ```typescript\n * import { generateText } from '@modelence/ai';\n * \n * const response = await generateText({\n * provider: 'openai',\n * model: 'gpt-4o',\n * messages: [\n * { role: 'user', content: 'Write a haiku about programming' }\n * ],\n * temperature: 0.7\n * });\n * \n * console.log(response.text);\n * ```\n */\nexport async function generateText(options: GenerateTextOptions) {\n const { provider, model, ...restOptions } = options;\n \n const transaction = startTransaction('ai', 'ai:generateText', {\n provider, \n model,\n messageCount: Array.isArray(options.messages) ? options.messages.length : 0,\n temperature: options.temperature\n });\n\n try {\n const result = await originalGenerateText({\n model: getProviderModel(provider, model),\n ...restOptions,\n });\n \n transaction.end();\n return result;\n } catch (error) {\n captureError(error as Error);\n transaction.end('error');\n throw error;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@modelence/ai",
4
- "version": "0.1.0",
4
+ "version": "0.1.1-dev.1",
5
5
  "description": "Modelence AI engine",
6
6
  "exports": {
7
7
  ".": {
@@ -19,7 +19,11 @@
19
19
  "author": "Modelence",
20
20
  "license": "SEE LICENSE IN LICENSE",
21
21
  "dependencies": {
22
- "modelence": "^0.5.0"
22
+ "@ai-sdk/anthropic": "^1.2.12",
23
+ "@ai-sdk/google": "^1.2.19",
24
+ "@ai-sdk/openai": "^1.3.22",
25
+ "ai": "^4.3.16",
26
+ "modelence": "^0.5.1-dev.2"
23
27
  },
24
28
  "devDependencies": {
25
29
  "tsup": "^8.3.6",
package/src/index.ts CHANGED
@@ -1,7 +1,99 @@
1
1
  import { getConfig } from 'modelence/server';
2
+ import { startTransaction, captureError } from 'modelence/telemetry';
3
+ import { generateText as originalGenerateText } from 'ai';
4
+ import { createOpenAI } from '@ai-sdk/openai';
5
+ import { createAnthropic } from '@ai-sdk/anthropic';
6
+ import { createGoogleGenerativeAI } from '@ai-sdk/google';
2
7
 
3
- export function getOpenAIConfig() {
4
- return {
5
- apiKey: String(getConfig('_system.openai.apiKey'))
6
- };
8
+ /**
9
+ * Supported AI providers for text generation.
10
+ */
11
+ type Provider = 'openai' | 'anthropic' | 'google';
12
+
13
+ // Extract the original generateText parameters and override the model property
14
+ type OriginalGenerateTextParams = Parameters<typeof originalGenerateText>[0];
15
+
16
+ /**
17
+ * Options for the Modelence generateText function.
18
+ *
19
+ * This interface extends all the standard AI SDK generateText options,
20
+ * but replaces the model parameter with separate provider and model parameters.
21
+ */
22
+ export interface GenerateTextOptions extends Omit<OriginalGenerateTextParams, 'model'> {
23
+ /** The AI provider name */
24
+ provider: Provider;
25
+ /** The specific model name */
26
+ model: string;
27
+ }
28
+
29
+ function getProviderModel(provider: Provider, model: string) {
30
+ switch (provider) {
31
+ case 'openai':
32
+ return createOpenAI({
33
+ apiKey: String(getConfig('_system.openai.apiKey')),
34
+ })(model);
35
+
36
+ case 'anthropic':
37
+ return createAnthropic({
38
+ apiKey: String(getConfig('_system.anthropic.apiKey')),
39
+ })(model);
40
+
41
+ case 'google':
42
+ return createGoogleGenerativeAI({
43
+ apiKey: String(getConfig('_system.google.apiKey')),
44
+ })(model);
45
+
46
+ default:
47
+ throw new Error(`Unsupported provider: ${provider}`);
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Generates text using AI models with built-in Modelence configuration and telemetry.
53
+ *
54
+ * This is a wrapper around the AI SDK's generateText function that automatically
55
+ * configures providers using Modelence's server-side configuration system.
56
+ *
57
+ * @param options - Configuration options for text generation
58
+ * @returns A promise that resolves to the generated text result
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * import { generateText } from '@modelence/ai';
63
+ *
64
+ * const response = await generateText({
65
+ * provider: 'openai',
66
+ * model: 'gpt-4o',
67
+ * messages: [
68
+ * { role: 'user', content: 'Write a haiku about programming' }
69
+ * ],
70
+ * temperature: 0.7
71
+ * });
72
+ *
73
+ * console.log(response.text);
74
+ * ```
75
+ */
76
+ export async function generateText(options: GenerateTextOptions) {
77
+ const { provider, model, ...restOptions } = options;
78
+
79
+ const transaction = startTransaction('ai', 'ai:generateText', {
80
+ provider,
81
+ model,
82
+ messageCount: Array.isArray(options.messages) ? options.messages.length : 0,
83
+ temperature: options.temperature
84
+ });
85
+
86
+ try {
87
+ const result = await originalGenerateText({
88
+ model: getProviderModel(provider, model),
89
+ ...restOptions,
90
+ });
91
+
92
+ transaction.end();
93
+ return result;
94
+ } catch (error) {
95
+ captureError(error as Error);
96
+ transaction.end('error');
97
+ throw error;
98
+ }
7
99
  }