@perkos/service-ai
v1.0.1
Published
Multi-provider AI service abstraction with OpenRouter, Replicate, and OpenAI support
Maintainers
Readme
@perkos/service-ai
Multi-provider AI service abstraction with OpenRouter, Replicate, and OpenAI support.
Installation
npm install @perkos/service-aiUsage
import { AIService } from "@perkos/service-ai";
const aiService = new AIService({
openRouterApiKey: process.env.OPENROUTER_API_KEY!,
replicateApiKey: process.env.REPLICATE_API_KEY,
openAIApiKey: process.env.OPENAI_API_KEY,
defaultModel: "anthropic/claude-3.5-sonnet",
});
// Analyze an image
const analysis = await aiService.analyzeImage(imageUrl, {
prompt: "Describe this image in detail",
});
// Generate an image
const result = await aiService.generateImage("A sunset over mountains", {
style: "photorealistic",
aspectRatio: "16:9",
});
// Transcribe audio
const transcription = await aiService.transcribeAudio(audioUrl, {
language: "en",
});
// Generate speech
const audio = await aiService.synthesizeSpeech("Hello world", {
voice: "alloy",
});Available Methods
Vision & Image
analyzeImage(imageUrl, options?)- Analyze image contentgenerateImage(prompt, options?)- Generate images with DALL-E or Replicate
Audio
transcribeAudio(audioUrl, options?)- Transcribe audio to textsynthesizeSpeech(text, options?)- Convert text to speech
Text Processing
summarizeText(text, options?)- Summarize long texttranslateText(text, targetLanguage, options?)- Translate textanalyzeSentiment(text, options?)- Analyze sentimentmoderateContent(text, options?)- Content moderationsimplifyText(text, options?)- Simplify complex textextractEntities(text, options?)- Extract named entities
Content Generation
generateEmail(context, options?)- Generate professional emailsgenerateProductDescription(product, options?)- E-commerce descriptionsoptimizeSEO(content, options?)- SEO optimization suggestions
Code & Technical
generateCode(prompt, options?)- Generate code snippetsreviewCode(code, options?)- Code review and suggestionsgenerateSQLQuery(description, options?)- Generate SQL queriesgenerateRegex(description, options?)- Generate regex patternsgenerateAPIDocs(code, options?)- Generate API documentation
Other
extractTextOCR(imageUrl, options?)- Extract text from imagesgenerateQuiz(topic, options?)- Generate educational quizzes
Configuration
interface AIServiceConfig {
openRouterApiKey: string;
replicateApiKey?: string;
openAIApiKey?: string;
defaultModel?: string;
imageModel?: string;
siteUrl?: string;
siteName?: string;
}Provider Fallback
The service automatically falls back between providers:
- Image Generation: Tries OpenAI DALL-E first, falls back to Replicate SDXL
- Speech Synthesis: Uses OpenAI TTS with fallback to Replicate
- Text Tasks: Uses OpenRouter with configurable models
Supported Models
OpenRouter (Text/Vision)
anthropic/claude-3.5-sonnet(default)openai/gpt-4ogoogle/gemini-pro- Any model supported by OpenRouter
OpenAI
dall-e-3for image generationwhisper-1for transcriptiontts-1/tts-1-hdfor speech
Replicate
black-forest-labs/flux-schnellfor fast image generationstability-ai/sdxlfor high-quality images- Various other models as fallbacks
Error Handling
try {
const result = await aiService.generateImage(prompt);
} catch (error) {
if (error.message.includes("rate limit")) {
// Handle rate limiting
}
// Handle other errors
}License
MIT
