UNPKG

@nuggetwise/cli

Version:

Magic Nuggetwise CLI for Cursor IDE integration

91 lines (78 loc) 2.35 kB
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' }; } } }