Skip to content

Commit 7921321

Browse files
authored
Merge pull request #1393 from GravityCloudAI/add_matterai_provider
feat: add matterai provider
2 parents 80c2593 + 604fa7b commit 7921321

File tree

7 files changed

+135
-0
lines changed

7 files changed

+135
-0
lines changed

src/data/models.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,30 @@
22
"object": "list",
33
"version": "1.0.0",
44
"data": [
5+
{
6+
"id": "axon",
7+
"object": "model",
8+
"provider": {
9+
"id": "matterai"
10+
},
11+
"name": "Axon"
12+
},
13+
{
14+
"id": "axon-mini",
15+
"object": "model",
16+
"provider": {
17+
"id": "matterai"
18+
},
19+
"name": "Axon Mini"
20+
},
21+
{
22+
"id": "axon-code",
23+
"object": "model",
24+
"provider": {
25+
"id": "matterai"
26+
},
27+
"name": "Axon Code"
28+
},
529
{
630
"id": "meta-llama/llama-3.1-70b-instruct/fp-8",
731
"object": "model",

src/data/providers.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22
"object": "list",
33
"version": "1.0.0",
44
"data": [
5+
{
6+
"id": "matterai",
7+
"name": "MatterAI",
8+
"object": "provider",
9+
"description": "MatterAI provides access to advanced AI models including Axon series for various applications such as text generation, coding assistance, and more. Built for performance and scalability.",
10+
"base_url": "https://api.matterai.so/v1"
11+
},
512
{
613
"id": "ai21",
714
"name": "AI21",

src/globals.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export const KRUTRIM: string = 'krutrim';
103103
export const QDRANT: string = 'qdrant';
104104
export const THREE_ZERO_TWO_AI: string = '302ai';
105105
export const COMETAPI: string = 'cometapi';
106+
export const MATTERAI: string = 'matterai';
106107
export const MESHY: string = 'meshy';
107108
export const TRIPO3D: string = 'tripo3d';
108109
export const NEXTBIT: string = 'nextbit';
@@ -172,6 +173,7 @@ export const VALID_PROVIDERS = [
172173
QDRANT,
173174
THREE_ZERO_TWO_AI,
174175
COMETAPI,
176+
MATTERAI,
175177
MESHY,
176178
TRIPO3D,
177179
NEXTBIT,

src/providers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import MeshyConfig from './meshy';
6767
import Tripo3DConfig from './tripo3d';
6868
import { NextBitConfig } from './nextbit';
6969
import CometAPIConfig from './cometapi';
70+
import MatterAIConfig from './matterai';
7071

7172
const Providers: { [key: string]: ProviderConfigs } = {
7273
openai: OpenAIConfig,
@@ -131,6 +132,7 @@ const Providers: { [key: string]: ProviderConfigs } = {
131132
krutrim: KrutrimConfig,
132133
'302ai': AI302Config,
133134
cometapi: CometAPIConfig,
135+
matterai: MatterAIConfig,
134136
meshy: MeshyConfig,
135137
nextbit: NextBitConfig,
136138
tripo3d: Tripo3DConfig,

src/providers/matterai/api.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { ProviderAPIConfig } from '../types';
2+
3+
const DEFAULT_MATTERAI_BASE_URL = 'https://api.matterai.so/v1';
4+
5+
const MatterAIAPIConfig: ProviderAPIConfig = {
6+
getBaseURL: () => DEFAULT_MATTERAI_BASE_URL,
7+
headers: ({ providerOptions }) => {
8+
return {
9+
Authorization: `Bearer ${providerOptions.apiKey}`,
10+
};
11+
},
12+
getEndpoint: ({ fn }) => {
13+
switch (fn) {
14+
case 'chatComplete':
15+
case 'stream-chatComplete':
16+
return '/chat/completions';
17+
default:
18+
return '';
19+
}
20+
},
21+
};
22+
23+
export default MatterAIAPIConfig;
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { MATTERAI } from '../../globals';
2+
import { ParameterConfig, ProviderConfig } from '../types';
3+
import { OpenAIChatCompleteConfig } from '../openai/chatComplete';
4+
5+
const matterAIModelConfig = OpenAIChatCompleteConfig.model as ParameterConfig;
6+
7+
export const MatterAIChatCompleteConfig: ProviderConfig = {
8+
...OpenAIChatCompleteConfig,
9+
model: {
10+
...matterAIModelConfig,
11+
default: 'axon',
12+
},
13+
};
14+
15+
interface MatterAIStreamChunk {
16+
id: string;
17+
object: string;
18+
created: number;
19+
model: string;
20+
choices: {
21+
delta?: Record<string, unknown>;
22+
message?: Record<string, unknown>;
23+
index: number;
24+
finish_reason: string | null;
25+
logprobs?: unknown;
26+
}[];
27+
usage?: Record<string, unknown>;
28+
system_fingerprint?: string | null;
29+
}
30+
31+
export const MatterAIChatCompleteStreamChunkTransform: (
32+
responseChunk: string
33+
) => string = (responseChunk) => {
34+
let chunk = responseChunk.trim();
35+
36+
if (!chunk) {
37+
return '';
38+
}
39+
40+
if (chunk.startsWith('data:')) {
41+
chunk = chunk.slice(5).trim();
42+
}
43+
44+
if (!chunk) {
45+
return '';
46+
}
47+
48+
if (chunk === '[DONE]') {
49+
return `data: ${chunk}\n\n`;
50+
}
51+
52+
const parsedChunk: MatterAIStreamChunk = JSON.parse(chunk);
53+
54+
if (!parsedChunk?.choices?.length) {
55+
return `data: ${chunk}\n\n`;
56+
}
57+
58+
return (
59+
`data: ${JSON.stringify({
60+
...parsedChunk,
61+
provider: MATTERAI,
62+
})}` + '\n\n'
63+
);
64+
};

src/providers/matterai/index.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import MatterAIAPIConfig from './api';
2+
import {
3+
MatterAIChatCompleteConfig,
4+
MatterAIChatCompleteStreamChunkTransform,
5+
} from './chatComplete';
6+
7+
const MatterAIConfig = {
8+
api: MatterAIAPIConfig,
9+
chatComplete: MatterAIChatCompleteConfig,
10+
streamChunkTransform: MatterAIChatCompleteStreamChunkTransform,
11+
};
12+
13+
export default MatterAIConfig;

0 commit comments

Comments
 (0)