mirror of
https://github.com/ItzCrazyKns/Perplexica.git
synced 2025-09-16 06:11:32 +00:00
Introduces support for the AI/ML API provider, including configuration options, chat and embedding model loading, and UI integration. Updates documentation and sample config to reflect the new provider.
95 lines
2.4 KiB
TypeScript
95 lines
2.4 KiB
TypeScript
import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai';
|
|
import { getAimlApiKey } from '../config';
|
|
import { ChatModel, EmbeddingModel } from '.';
|
|
import { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
import { Embeddings } from '@langchain/core/embeddings';
|
|
import axios from 'axios';
|
|
|
|
export const PROVIDER_INFO = {
|
|
key: 'aimlapi',
|
|
displayName: 'AI/ML API',
|
|
};
|
|
|
|
interface AimlApiModel {
|
|
id: string;
|
|
name?: string;
|
|
type?: string;
|
|
}
|
|
|
|
const API_URL = 'https://api.aimlapi.com';
|
|
|
|
export const loadAimlApiChatModels = async () => {
|
|
const apiKey = getAimlApiKey();
|
|
|
|
if (!apiKey) return {};
|
|
|
|
try {
|
|
const response = await axios.get(`${API_URL}/models`, {
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Authorization: `Bearer ${apiKey}`,
|
|
},
|
|
});
|
|
|
|
const chatModels: Record<string, ChatModel> = {};
|
|
|
|
response.data.data.forEach((model: AimlApiModel) => {
|
|
if (model.type === 'chat-completion') {
|
|
chatModels[model.id] = {
|
|
displayName: model.name || model.id,
|
|
model: new ChatOpenAI({
|
|
openAIApiKey: apiKey,
|
|
modelName: model.id,
|
|
temperature: 0.7,
|
|
configuration: {
|
|
baseURL: API_URL,
|
|
},
|
|
}) as unknown as BaseChatModel,
|
|
};
|
|
}
|
|
});
|
|
|
|
return chatModels;
|
|
} catch (err) {
|
|
console.error(`Error loading AI/ML API models: ${err}`);
|
|
return {};
|
|
}
|
|
};
|
|
|
|
export const loadAimlApiEmbeddingModels = async () => {
|
|
const apiKey = getAimlApiKey();
|
|
|
|
if (!apiKey) return {};
|
|
|
|
try {
|
|
const response = await axios.get(`${API_URL}/models`, {
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Authorization: `Bearer ${apiKey}`,
|
|
},
|
|
});
|
|
|
|
const embeddingModels: Record<string, EmbeddingModel> = {};
|
|
|
|
response.data.data.forEach((model: AimlApiModel) => {
|
|
if (model.type === 'embedding') {
|
|
embeddingModels[model.id] = {
|
|
displayName: model.name || model.id,
|
|
model: new OpenAIEmbeddings({
|
|
openAIApiKey: apiKey,
|
|
modelName: model.id,
|
|
configuration: {
|
|
baseURL: API_URL,
|
|
},
|
|
}) as unknown as Embeddings,
|
|
};
|
|
}
|
|
});
|
|
|
|
return embeddingModels;
|
|
} catch (err) {
|
|
console.error(`Error loading AI/ML API embeddings models: ${err}`);
|
|
return {};
|
|
}
|
|
};
|