@nuggetwise/cli
Version:
Magic Nuggetwise CLI for Cursor IDE integration
91 lines (78 loc) • 2.35 kB
text/typescript
import { GoogleGenerativeAI } from '@google/generative-ai';
export interface GeminiRequest {
prompt: string;
model?: 'gemini-1.5-flash' | 'gemini-2.0-flash';
temperature?: number;
maxTokens?: number;
systemPrompt?: string;
}
export interface GeminiResponse {
content: string;
success: boolean;
error?: string;
}
export class GeminiClient {
private genAI: GoogleGenerativeAI;
private defaultModel: string = 'gemini-1.5-flash';
constructor(apiKey: string) {
this.genAI = new GoogleGenerativeAI(apiKey);
}
async generateText(request: GeminiRequest): Promise<GeminiResponse> {
try {
const model = this.genAI.getGenerativeModel({
model: request.model || this.defaultModel
});
const prompt = request.systemPrompt
? `${request.systemPrompt}\n\n${request.prompt}`
: request.prompt;
const result = await model.generateContent(prompt);
const response = await result.response;
const text = response.text();
return {
content: text,
success: true
};
} catch (error) {
return {
content: '',
success: false,
error: error instanceof Error ? error.message : 'Unknown error'
};
}
}
async generateEmbeddings(text: string): Promise<number[]> {
try {
const model = this.genAI.getGenerativeModel({ model: 'embedding-001' });
const result = await model.embedContent(text);
const embedding = await result.embedding;
return embedding.values;
} catch (error) {
console.error('Embedding generation error:', error);
return [];
}
}
async generateWithVision(prompt: string, imageData: string): Promise<GeminiResponse> {
try {
const model = this.genAI.getGenerativeModel({ model: 'gemini-1.5-flash' });
const imagePart = {
inlineData: {
data: imageData,
mimeType: 'image/jpeg'
}
};
const result = await model.generateContent([prompt, imagePart]);
const response = await result.response;
const text = response.text();
return {
content: text,
success: true
};
} catch (error) {
return {
content: '',
success: false,
error: error instanceof Error ? error.message : 'Unknown error'
};
}
}
}