@happ-integ/llm
LLM сервис с автоматическим fallback между провайдерами.
Установка
bash
pnpm add @happ-integ/llmПровайдеры
| Провайдер | Описание |
|---|---|
openai | OpenAI GPT-4, GPT-3.5 |
claude | Anthropic Claude |
gemini | Google Gemini |
groq | Groq (Llama 3.3 70B) |
Использование
Базовое использование
typescript
import { LLMService } from "@happ-integ/llm";
const llm = new LLMService({
primary: "groq",
secondary: "claude", // fallback при ошибке
env,
});
// Chat
const response = await llm.chat({
messages: [
{ role: "system", content: "Ты помощник" },
{ role: "user", content: "Привет!" },
],
model: "llama-3.3-70b-versatile", // опционально
temperature: 0.7, // опционально
});
console.log(response.text);
console.log(response.usage); // { promptTokens, completionTokens, totalTokens }Embeddings
typescript
// Один текст
const embedding = await llm.embedding({
text: "Hello world",
model: "text-embedding-3-small", // опционально
});
// => number[] (вектор)
// Несколько текстов
const embeddings = await llm.embeddings({
texts: ["Hello", "World"],
});
// => number[][] (массив векторов)Автоматический Fallback
При ошибке primary провайдера автоматически используется secondary:
typescript
const llm = new LLMService({
primary: "groq",
secondary: "claude",
env,
});
// Если Groq недоступен → автоматически Claude
const response = await llm.chat({ messages });Fallback логируется в консоль:
Primary provider (openai) failed, falling back to claude: Error...API
LLMService
typescript
new LLMService(config: ILLMServiceConfig)Config:
| Параметр | Тип | Описание |
|---|---|---|
primary | "openai" | "claude" | "gemini" | "groq" | Primary провайдер |
secondary | "openai" | "claude" | "gemini" | "groq" | Fallback провайдер (опционально) |
openaiKey | string | OpenAI API Key |
claudeKey | string | Anthropic API Key |
geminiKey | string | Google Gemini API Key |
groqKey | string | Groq API Key |
Методы
chat(params): Promise<ILLMChatResponse>
typescript
interface ILLMChatParams {
messages: Array<{
role: "system" | "user" | "assistant";
content: string;
}>;
model?: string;
temperature?: number;
maxTokens?: number;
}
interface ILLMChatResponse {
text: string;
usage: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
};
}embedding(params): Promise<number[]>
typescript
interface ILLMEmbeddingParams {
text: string;
model?: string;
}embeddings(params): Promise<number[][]>
typescript
interface ILLMEmbeddingsParams {
texts: string[];
model?: string;
}Прямой доступ к провайдерам
Для специфичных возможностей можно использовать провайдеры напрямую:
typescript
import { OpenAIService, ClaudeService, GeminiService, GroqService } from "@happ-integ/llm";
const openai = new OpenAIService(apiKey);
const claude = new ClaudeService(apiKey);
const gemini = new GeminiService(apiKey);
const groq = new GroqService(apiKey);