Skip to content

Commit

Permalink
Merge pull request #280 from Dheeraj-Bhandari/main
Browse files Browse the repository at this point in the history
[Provider] Added Support for MonsterAPI Integration
  • Loading branch information
VisargD authored May 2, 2024
2 parents a6657c5 + f9a3c19 commit c1c714b
Show file tree
Hide file tree
Showing 5 changed files with 156 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/globals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export const OPENROUTER: string = 'openrouter';
export const LINGYI: string = 'lingyi';
export const ZHIPU: string = 'zhipu';
export const NOVITA_AI: string = 'novita-ai';
export const MONSTERAPI: string = 'monsterapi';

export const VALID_PROVIDERS = [
ANTHROPIC,
Expand Down Expand Up @@ -78,6 +79,7 @@ export const VALID_PROVIDERS = [
LINGYI,
ZHIPU,
NOVITA_AI,
MONSTERAPI,
];

export const CONTENT_TYPES = {
Expand Down
2 changes: 2 additions & 0 deletions src/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import OpenrouterConfig from './openrouter';
import LingYiConfig from './lingyi';
import ZhipuConfig from './zhipu';
import NovitaAIConfig from './novita-ai';
import MonsterAPIConfig from './monsterapi';

const Providers: { [key: string]: ProviderConfigs } = {
openai: OpenAIConfig,
Expand Down Expand Up @@ -55,6 +56,7 @@ const Providers: { [key: string]: ProviderConfigs } = {
lingyi: LingYiConfig,
zhipu: ZhipuConfig,
'novita-ai': NovitaAIConfig,
monsterapi: MonsterAPIConfig,
};

export default Providers;
18 changes: 18 additions & 0 deletions src/providers/monsterapi/api.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { ProviderAPIConfig } from '../types';

const MonsterAPIApiConfig: ProviderAPIConfig = {
getBaseURL: () => 'https://llm.monsterapi.ai/v1',
headers: ({ providerOptions }) => {
return { Authorization: `Bearer ${providerOptions.apiKey}` };
},
getEndpoint: ({ fn }) => {
switch (fn) {
case 'chatComplete':
return '/generate';
default:
return '';
}
},
};

export default MonsterAPIApiConfig;
118 changes: 118 additions & 0 deletions src/providers/monsterapi/chatComplete.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import { MONSTERAPI } from '../../globals';
import {
ChatCompletionResponse,
ErrorResponse,
ProviderConfig,
} from '../types';
import {
generateErrorResponse,
generateInvalidProviderResponseError,
} from '../utils';

export const MonsterAPIChatCompleteConfig: ProviderConfig = {
top_k: {
param: 'top_k',
min: 1,
max: 20,
},
top_p: {
param: 'top_p',
min: 0,
max: 1,
},
temperature: {
param: 'temperature',
min: 0,
max: 1,
},
max_length: {
param: 'max_length',
min: 1,
max: 2048,
},
repetition_penalty: {
param: 'repetition_penalty',
min: 0,
},
beam_size: {
param: 'beam_size',
min: 1,
},
model: {
param: 'model',
required: true,
default: 'mistralai/Mistral-7B-Instruct-v0.2',
},
messages: {
param: 'messages',
required: true,
default: [],
},
};

export interface MonsterAPIChatCompleteResponse {
model: string;
response: {
text: string[];
token_counts: {
input: number;
output: number;
};
credits_consumed: number;
};
}

export interface MonsterAPIErrorResponse {
error: {
message: string;
type: string;
code: number;
};
}

export const MonsterAPIChatCompleteResponseTransform: (
response: MonsterAPIChatCompleteResponse | MonsterAPIErrorResponse,
responseStatus: number
) => ChatCompletionResponse | ErrorResponse = (response, responseStatus) => {
if ('error' in response) {
return generateErrorResponse(
{
message: response.error.message,
type: response.error.type,
param: null,
code: response.error.code.toString(),
},
MONSTERAPI
);
}

if ('response' in response) {
return {
id: Date.now().toString(),
object: 'chat.completion',
created: Math.floor(Date.now() / 1000),
model: response?.model,
choices: [
{
message: {
role: 'assistant',
content: response.response.text.join('\n'),
},
index: 0,
logprobs: null,
finish_reason: 'completed',
},
],
usage: {
prompt_tokens: response.response.token_counts.input,
completion_tokens: response.response.token_counts.output,
total_tokens:
response.response.token_counts.input +
response.response.token_counts.output,
},
provider: MONSTERAPI,
};
}

return generateInvalidProviderResponseError(response, MONSTERAPI);
};
16 changes: 16 additions & 0 deletions src/providers/monsterapi/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ProviderConfigs } from '../types';
import MonsterAPIApiConfig from './api';
import {
MonsterAPIChatCompleteConfig,
MonsterAPIChatCompleteResponseTransform,
} from './chatComplete';

const MonsterAPIConfig: ProviderConfigs = {
api: MonsterAPIApiConfig,
chatComplete: MonsterAPIChatCompleteConfig,
responseTransforms: {
chatComplete: MonsterAPIChatCompleteResponseTransform,
},
};

export default MonsterAPIConfig;

0 comments on commit c1c714b

Please sign in to comment.