diff --git a/src/globals.ts b/src/globals.ts index 9a78a4759..75d559688 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -74,6 +74,7 @@ export const LEMONFOX_AI: string = 'lemonfox-ai'; export const UPSTAGE: string = 'upstage'; export const LAMBDA: string = 'lambda'; export const DASHSCOPE: string = 'dashscope'; +export const X_AI: string = 'x-ai'; export const VALID_PROVIDERS = [ ANTHROPIC, @@ -121,6 +122,7 @@ export const VALID_PROVIDERS = [ UPSTAGE, LAMBDA, DASHSCOPE, + X_AI, ]; export const CONTENT_TYPES = { diff --git a/src/providers/index.ts b/src/providers/index.ts index fcf3659f1..b6e7f7e0b 100644 --- a/src/providers/index.ts +++ b/src/providers/index.ts @@ -47,6 +47,7 @@ import { UpstageConfig } from './upstage'; import { LAMBDA } from '../globals'; import { LambdaProviderConfig } from './lambda'; import { DashScopeConfig } from './dashscope'; +import XAIConfig from './x-ai'; import QdrantConfig from './qdrant'; const Providers: { [key: string]: ProviderConfigs } = { @@ -95,6 +96,7 @@ const Providers: { [key: string]: ProviderConfigs } = { upstage: UpstageConfig, [LAMBDA]: LambdaProviderConfig, dashscope: DashScopeConfig, + 'x-ai': XAIConfig, qdrant: QdrantConfig, }; diff --git a/src/providers/x-ai/api.ts b/src/providers/x-ai/api.ts new file mode 100644 index 000000000..cd10a8d92 --- /dev/null +++ b/src/providers/x-ai/api.ts @@ -0,0 +1,22 @@ +import { ProviderAPIConfig } from '../types'; + +const XAIAPIConfig: ProviderAPIConfig = { + getBaseURL: () => 'https://api.x.ai/v1', + headers: ({ providerOptions }) => { + return { Authorization: `Bearer ${providerOptions.apiKey}` }; + }, + getEndpoint: ({ fn }) => { + switch (fn) { + case 'chatComplete': + return '/chat/completions'; + case 'complete': + return '/completions'; + case 'embed': + return '/embeddings'; + default: + return ''; + } + }, +}; + +export default XAIAPIConfig; diff --git a/src/providers/x-ai/index.ts b/src/providers/x-ai/index.ts new file mode 100644 index 000000000..82b25419a --- /dev/null +++ b/src/providers/x-ai/index.ts @@ -0,0 +1,23 @@ +import { ProviderConfigs } from '../types'; +import { X_AI } from '../../globals'; +import XAIAPIConfig from './api'; +import { + chatCompleteParams, + completeParams, + embedParams, + responseTransformers, +} from '../open-ai-base'; + +const XAIConfig: ProviderConfigs = { + chatComplete: chatCompleteParams([], { model: 'grok-beta' }), + complete: completeParams([], { model: 'grok-beta' }), + embed: embedParams([], { model: 'v1' }), + api: XAIAPIConfig, + responseTransforms: responseTransformers(X_AI, { + chatComplete: true, + complete: true, + embed: true, + }), +}; + +export default XAIConfig;