Skip to content

Commit ee8e76a

Browse files
authored
Merge pull request #283 from weaviate/modules/add-generative-xai
Add `generative-xai` when configuring collections and generate queries
2 parents d22cf06 + 3df4d6e commit ee8e76a

File tree

9 files changed

+496
-2
lines changed

9 files changed

+496
-2
lines changed

src/collections/config/types/generative.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ export type GenerativeGoogleConfig = {
9393
topP?: number;
9494
};
9595

96+
export type GenerativeXAIConfig = {
97+
baseURL?: string;
98+
maxTokens?: number;
99+
model?: string;
100+
temperature?: number;
101+
topP?: number;
102+
};
103+
96104
export type GenerativeConfig =
97105
| GenerativeAnthropicConfig
98106
| GenerativeAnyscaleConfig
@@ -106,6 +114,7 @@ export type GenerativeConfig =
106114
| GenerativeOllamaConfig
107115
| GenerativeOpenAIConfig
108116
| GenerativePaLMConfig
117+
| GenerativeXAIConfig
109118
| Record<string, any>
110119
| undefined;
111120

@@ -133,6 +142,8 @@ export type GenerativeConfigType<G> = G extends 'generative-anthropic'
133142
? GenerativeOpenAIConfig
134143
: G extends GenerativePalm
135144
? GenerativePaLMConfig
145+
: G extends 'generative-xai'
146+
? GenerativeXAIConfig
136147
: G extends 'none'
137148
? undefined
138149
: Record<string, any> | undefined;
@@ -153,5 +164,6 @@ export type GenerativeSearch =
153164
| 'generative-ollama'
154165
| 'generative-openai'
155166
| GenerativePalm
167+
| 'generative-xai'
156168
| 'none'
157169
| string;

src/collections/configure/generative.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
GenerativeOllamaConfig,
1313
GenerativeOpenAIConfig,
1414
GenerativePaLMConfig,
15+
GenerativeXAIConfig,
1516
ModuleConfig,
1617
} from '../config/types/index.js';
1718
import {
@@ -27,6 +28,7 @@ import {
2728
GenerativeOllamaConfigCreate,
2829
GenerativeOpenAIConfigCreate,
2930
GenerativePaLMConfigCreate,
31+
GenerativeXAIConfigCreate,
3032
} from '../index.js';
3133

3234
export default {
@@ -263,4 +265,20 @@ export default {
263265
config,
264266
};
265267
},
268+
/**
269+
* Create a `ModuleConfig<'generative-xai', GenerativeXAIConfig | undefined>` object for use when performing AI generation using the `generative-xai` module.
270+
*
271+
* See the [documentation](https://weaviate.io/developers/weaviate/model-providers/xai/generative) for detailed usage.
272+
*
273+
* @param {GenerativeXAIConfigCreate} [config] The configuration for the `generative-xai` module.
274+
* @returns {ModuleConfig<'generative-xai', GenerativeXAIConfig | undefined>} The configuration object.
275+
*/
276+
xai: (
277+
config?: GenerativeXAIConfigCreate
278+
): ModuleConfig<'generative-xai', GenerativeXAIConfig | undefined> => {
279+
return {
280+
name: 'generative-xai',
281+
config,
282+
};
283+
},
266284
};

src/collections/configure/types/generative.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
GenerativeNvidiaConfig,
99
GenerativeOllamaConfig,
1010
GenerativePaLMConfig,
11+
GenerativeXAIConfig,
1112
} from '../../index.js';
1213

1314
export type GenerativeOpenAIConfigBaseCreate = {
@@ -55,6 +56,8 @@ export type GenerativeOpenAIConfigCreate = GenerativeOpenAIConfigBaseCreate & {
5556

5657
export type GenerativePaLMConfigCreate = GenerativePaLMConfig;
5758

59+
export type GenerativeXAIConfigCreate = GenerativeXAIConfig;
60+
5861
export type GenerativeConfigCreate =
5962
| GenerativeAnthropicConfigCreate
6063
| GenerativeAnyscaleConfigCreate
@@ -68,6 +71,7 @@ export type GenerativeConfigCreate =
6871
| GenerativeOllamaConfigCreate
6972
| GenerativeOpenAIConfigCreate
7073
| GenerativePaLMConfigCreate
74+
| GenerativeXAIConfigCreate
7175
| Record<string, any>
7276
| undefined;
7377

@@ -93,6 +97,8 @@ export type GenerativeConfigCreateType<G> = G extends 'generative-anthropic'
9397
? GenerativeOpenAIConfigCreate
9498
: G extends 'generative-palm'
9599
? GenerativePaLMConfigCreate
100+
: G extends 'generative-xai'
101+
? GenerativeXAIConfigCreate
96102
: G extends 'none'
97103
? undefined
98104
: Record<string, any> | undefined;

src/collections/configure/unit.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
GenerativeMistralConfig,
1111
GenerativeOllamaConfig,
1212
GenerativeOpenAIConfig,
13+
GenerativeXAIConfig,
1314
ModuleConfig,
1415
VectorConfigCreate,
1516
} from '../types/index.js';
@@ -1816,6 +1817,34 @@ describe('Unit testing of the generative factory class', () => {
18161817
});
18171818
});
18181819

1820+
it('should create the correct GenerativeXAIConfig type with required & default values', () => {
1821+
const config = configure.generative.xai();
1822+
expect(config).toEqual<ModuleConfig<'generative-xai', GenerativeXAIConfig | undefined>>({
1823+
name: 'generative-xai',
1824+
config: undefined,
1825+
});
1826+
});
1827+
1828+
it('should create the correct GenerativeXAIConfig type with all values', () => {
1829+
const config = configure.generative.xai({
1830+
baseURL: 'base-url',
1831+
maxTokens: 100,
1832+
model: 'model',
1833+
temperature: 0.5,
1834+
topP: 0.8,
1835+
});
1836+
expect(config).toEqual<ModuleConfig<'generative-xai', GenerativeXAIConfig | undefined>>({
1837+
name: 'generative-xai',
1838+
config: {
1839+
baseURL: 'base-url',
1840+
maxTokens: 100,
1841+
model: 'model',
1842+
temperature: 0.5,
1843+
topP: 0.8,
1844+
},
1845+
});
1846+
});
1847+
18191848
it('should create the correct GeneratGoogleConfig type with required & default values', () => {
18201849
const config = configure.generative.google();
18211850
expect(config).toEqual<ModuleConfig<'generative-google', undefined>>({

src/collections/generate/config.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
GenerativeNvidiaConfigRuntime,
1414
GenerativeOllamaConfigRuntime,
1515
GenerativeOpenAIConfigRuntime,
16+
GenerativeXAIConfigRuntime,
1617
} from '../index.js';
1718

1819
export const generativeParameters = {
@@ -277,4 +278,23 @@ export const generativeParameters = {
277278
: undefined,
278279
};
279280
},
281+
/**
282+
* Create a `ModuleConfig<'generative-xai', GenerativeConfigRuntimeType<'generative-xai'> | undefined>` object for use when performing runtime-specific AI generation using the `generative-xai` module.
283+
*
284+
* See the [documentation](https://weaviate.io/developers/weaviate/model-providers/xai/generative) for detailed usage.
285+
*/
286+
xai: (
287+
config?: GenerativeXAIConfigRuntime
288+
): ModuleConfig<'generative-xai', GenerativeConfigRuntimeType<'generative-xai'> | undefined> => {
289+
const { baseURL, ...rest } = config || {};
290+
return {
291+
name: 'generative-xai',
292+
config: config
293+
? {
294+
...rest,
295+
baseUrl: baseURL,
296+
}
297+
: undefined,
298+
};
299+
},
280300
};

src/collections/generate/mock.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ describe('Mock testing of generate with runtime config', () => {
158158
generativeParameters.ollama(model),
159159
generativeParameters.openAI(),
160160
generativeParameters.openAI(model),
161+
generativeParameters.xai(),
162+
generativeParameters.xai(model),
161163
];
162164

163165
tests.forEach((conf) => {

src/collections/generate/unit.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,4 +277,37 @@ describe('Unit testing of the generativeParameters factory methods', () => {
277277
});
278278
});
279279
});
280+
281+
describe('xai', () => {
282+
it('with defaults', () => {
283+
const config = generativeParameters.xai();
284+
expect(config).toEqual<
285+
ModuleConfig<'generative-xai', GenerativeConfigRuntimeType<'generative-xai'> | undefined>
286+
>({
287+
name: 'generative-xai',
288+
config: undefined,
289+
});
290+
});
291+
it('with values', () => {
292+
const config = generativeParameters.xai({
293+
baseURL: 'http://localhost:8080',
294+
maxTokens: 100,
295+
model: 'model',
296+
temperature: 0.5,
297+
topP: 0.9,
298+
});
299+
expect(config).toEqual<
300+
ModuleConfig<'generative-xai', GenerativeConfigRuntimeType<'generative-xai'> | undefined>
301+
>({
302+
name: 'generative-xai',
303+
config: {
304+
baseUrl: 'http://localhost:8080',
305+
maxTokens: 100,
306+
model: 'model',
307+
temperature: 0.5,
308+
topP: 0.9,
309+
},
310+
});
311+
});
312+
});
280313
});

src/collections/types/generate.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ import {
2424
GenerativeOllamaMetadata,
2525
GenerativeOpenAI as GenerativeOpenAIGRPC,
2626
GenerativeOpenAIMetadata,
27+
GenerativeXAI as GenerativeXAIGRPC,
28+
GenerativeXAIMetadata,
2729
} from '../../proto/v1/generative.js';
28-
import { ModuleConfig } from '../index.js';
30+
import { GenerativeXAIConfig, ModuleConfig } from '../index.js';
2931
import { GroupByObject, GroupByResult, WeaviateGenericObject, WeaviateNonGenericObject } from './query.js';
3032

3133
export type GenerativeGenericObject<
@@ -134,7 +136,8 @@ export type GenerativeConfigRuntime =
134136
| ModuleConfig<'generative-mistral', GenerativeConfigRuntimeType<'generative-mistral'> | undefined>
135137
| ModuleConfig<'generative-nvidia', GenerativeConfigRuntimeType<'generative-nvidia'> | undefined>
136138
| ModuleConfig<'generative-ollama', GenerativeConfigRuntimeType<'generative-ollama'> | undefined>
137-
| ModuleConfig<'generative-openai', GenerativeConfigRuntimeType<'generative-openai'>>;
139+
| ModuleConfig<'generative-openai', GenerativeConfigRuntimeType<'generative-openai'>>
140+
| ModuleConfig<'generative-xai', GenerativeConfigRuntimeType<'generative-xai'> | undefined>;
138141

139142
export type GenerativeConfigRuntimeType<G> = G extends 'generative-anthropic'
140143
? Omit<GenerativeAnthropicGRPC, omitFields>
@@ -160,6 +163,8 @@ export type GenerativeConfigRuntimeType<G> = G extends 'generative-anthropic'
160163
? Omit<GenerativeOllamaGRPC, omitFields>
161164
: G extends 'generative-openai'
162165
? Omit<GenerativeOpenAIGRPC, omitFields> & { isAzure?: false }
166+
: G extends 'generative-xai'
167+
? Omit<GenerativeXAIGRPC, omitFields>
163168
: G extends 'none'
164169
? undefined
165170
: Record<string, any> | undefined;
@@ -191,6 +196,8 @@ export type GenerativeMetadata<C extends GenerativeConfigRuntime | undefined> =
191196
? GenerativeOllamaMetadata
192197
: R['name'] extends 'generative-openai'
193198
? GenerativeOpenAIMetadata
199+
: R['name'] extends 'generative-xai'
200+
? GenerativeXAIMetadata
194201
: never
195202
: never;
196203

@@ -312,3 +319,5 @@ export type GenerativeOpenAIConfigRuntime = {
312319
resourceName?: string | undefined;
313320
deploymentId?: string | undefined;
314321
};
322+
323+
export type GenerativeXAIConfigRuntime = GenerativeXAIConfig;

0 commit comments

Comments
 (0)