Skip to content

@happ-integ/llm

LLM сервис с автоматическим fallback между провайдерами.

Установка

bash
pnpm add @happ-integ/llm

Провайдеры

ПровайдерОписание
openaiOpenAI GPT-4, GPT-3.5
claudeAnthropic Claude
geminiGoogle Gemini
groqGroq (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 провайдер (опционально)
openaiKeystringOpenAI API Key
claudeKeystringAnthropic API Key
geminiKeystringGoogle Gemini API Key
groqKeystringGroq 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);