@@ -145,7 +145,7 @@ func DefaultOllamaConfig() *Config {
145145 Provider : "ollama" ,
146146 APIURL : "http://localhost:11434" ,
147147 APIPath : "/api/embeddings" ,
148- Model : "mxbai-embed-large " ,
148+ Model : "bge-m3 " ,
149149 Dimensions : 1024 ,
150150 Timeout : 30 * time .Second ,
151151 }
@@ -241,12 +241,12 @@ type OllamaEmbedder struct {
241241//
242242// // Uses localhost:11434 by default
243243// embedder := embed.NewOllama(nil)
244- //
244+ //
245245// vec, err := embedder.Embed(ctx, "Hello world")
246246// if err != nil {
247247// log.Fatal(err)
248248// }
249- //
249+ //
250250// fmt.Printf("Generated %d-dimensional embedding\n", len(vec))
251251// // Output: Generated 1024-dimensional embedding
252252//
@@ -255,9 +255,9 @@ type OllamaEmbedder struct {
255255// config := embed.DefaultOllamaConfig()
256256// config.Model = "nomic-embed-text"
257257// config.Dimensions = 768
258- //
258+ //
259259// embedder := embed.NewOllama(config)
260- //
260+ //
261261// // Good for English text
262262// vec, _ := embedder.Embed(ctx, "The quick brown fox")
263263// fmt.Printf("Nomic embedding: %d dims\n", len(vec)) // 768
@@ -267,9 +267,9 @@ type OllamaEmbedder struct {
267267// config := embed.DefaultOllamaConfig()
268268// config.APIURL = "http://ollama-server.internal:11434"
269269// config.Timeout = 60 * time.Second
270- //
270+ //
271271// embedder := embed.NewOllama(config)
272- //
272+ //
273273// // Connect to remote Ollama instance
274274// vec, err := embedder.Embed(ctx, "distributed embeddings")
275275// if err != nil {
@@ -279,19 +279,19 @@ type OllamaEmbedder struct {
279279// Example 4 - Batch Processing for Efficiency:
280280//
281281// embedder := embed.NewOllama(nil)
282- //
282+ //
283283// documents := []string{
284284// "Document 1 about AI",
285285// "Document 2 about ML",
286286// "Document 3 about NLP",
287287// }
288- //
288+ //
289289// // Process in batch
290290// embeddings, err := embedder.EmbedBatch(ctx, documents)
291291// if err != nil {
292292// log.Fatal(err)
293293// }
294- //
294+ //
295295// // Store embeddings in database
296296// for i, emb := range embeddings {
297297// storeEmbedding(documents[i], emb)
@@ -313,10 +313,10 @@ type OllamaEmbedder struct {
313313// - OFFLINE (works without internet)
314314//
315315// How it works:
316- // 1. Install Ollama: `ollama run mxbai-embed-large`
317- // 2. Ollama runs on localhost:11434
318- // 3. Send text, get back 1024 numbers
319- // 4. Use numbers to find similar text
316+ // 1. Install Ollama: `ollama run mxbai-embed-large`
317+ // 2. Ollama runs on localhost:11434
318+ // 3. Send text, get back 1024 numbers
319+ // 4. Use numbers to find similar text
320320//
321321// Models Available:
322322// - mxbai-embed-large: 1024 dims, best quality (default)
@@ -337,7 +337,8 @@ type OllamaEmbedder struct {
337337// - Memory: ~500MB-2GB for model
338338//
339339// Thread Safety:
340- // Safe to call from multiple goroutines.
340+ //
341+ // Safe to call from multiple goroutines.
341342func NewOllama (config * Config ) * OllamaEmbedder {
342343 if config == nil {
343344 config = DefaultOllamaConfig ()
@@ -508,12 +509,12 @@ type OpenAIEmbedder struct {
508509//
509510// apiKey := os.Getenv("OPENAI_API_KEY") // sk-...
510511// embedder := embed.NewOpenAI(embed.DefaultOpenAIConfig(apiKey))
511- //
512+ //
512513// vec, err := embedder.Embed(ctx, "artificial intelligence")
513514// if err != nil {
514515// log.Fatal(err)
515516// }
516- //
517+ //
517518// fmt.Printf("Generated %d-dimensional embedding\n", len(vec))
518519// // Output: Generated 1536-dimensional embedding
519520//
@@ -522,9 +523,9 @@ type OpenAIEmbedder struct {
522523// config := embed.DefaultOpenAIConfig(apiKey)
523524// config.Model = "text-embedding-3-large"
524525// config.Dimensions = 3072 // Maximum quality
525- //
526+ //
526527// embedder := embed.NewOpenAI(config)
527- //
528+ //
528529// // Higher quality embeddings for critical applications
529530// vec, _ := embedder.Embed(ctx, "complex semantic meaning")
530531// fmt.Printf("High-quality: %d dims\n", len(vec)) // 3072
@@ -534,9 +535,9 @@ type OpenAIEmbedder struct {
534535// config := embed.DefaultOpenAIConfig(apiKey)
535536// config.Model = "text-embedding-3-small"
536537// config.Dimensions = 1536
537- //
538+ //
538539// embedder := embed.NewOpenAI(config)
539- //
540+ //
540541// // 5x cheaper than text-embedding-3-large
541542// // $0.02 per 1M tokens vs $0.13 per 1M tokens
542543// vec, _ := embedder.Embed(ctx, "cost effective")
@@ -545,9 +546,9 @@ type OpenAIEmbedder struct {
545546//
546547// config := embed.DefaultOpenAIConfig(apiKey)
547548// config.Timeout = 30 * time.Second
548- //
549+ //
549550// embedder := embed.NewOpenAI(config)
550- //
551+ //
551552// texts := []string{"doc1", "doc2", "doc3"}
552553// embeddings, err := embedder.EmbedBatch(ctx, texts)
553554// if err != nil {
@@ -568,9 +569,9 @@ type OpenAIEmbedder struct {
568569// Model: "text-embedding-ada-002",
569570// Dimensions: 1536,
570571// }
571- //
572+ //
572573// embedder := embed.NewOpenAI(config)
573- //
574+ //
574575// // Works with multiple languages
575576// embeddings, _ := embedder.EmbedBatch(ctx, []string{
576577// "Hello world", // English
@@ -602,20 +603,20 @@ type OpenAIEmbedder struct {
602603//
603604// Models & Pricing (2024):
604605//
605- // text-embedding-3-small:
606- // - 1536 dimensions
607- // - $0.02 per 1M tokens (~750k words)
608- // - Best for: Cost-sensitive applications
606+ // text-embedding-3-small:
607+ // - 1536 dimensions
608+ // - $0.02 per 1M tokens (~750k words)
609+ // - Best for: Cost-sensitive applications
609610//
610- // text-embedding-3-large:
611- // - 3072 dimensions (can truncate to 256-3072)
612- // - $0.13 per 1M tokens
613- // - Best for: Maximum quality
611+ // text-embedding-3-large:
612+ // - 3072 dimensions (can truncate to 256-3072)
613+ // - $0.13 per 1M tokens
614+ // - Best for: Maximum quality
614615//
615- // text-embedding-ada-002 (legacy):
616- // - 1536 dimensions
617- // - $0.10 per 1M tokens
618- // - Still works but use v3 instead
616+ // text-embedding-ada-002 (legacy):
617+ // - 1536 dimensions
618+ // - $0.10 per 1M tokens
619+ // - Still works but use v3 instead
619620//
620621// Rate Limits:
621622// - Free tier: 3 RPM (requests per minute)
@@ -634,7 +635,8 @@ type OpenAIEmbedder struct {
634635// - Use batch processing to reduce costs
635636//
636637// Thread Safety:
637- // Safe to call from multiple goroutines.
638+ //
639+ // Safe to call from multiple goroutines.
638640func NewOpenAI (config * Config ) * OpenAIEmbedder {
639641 if config == nil {
640642 config = DefaultOpenAIConfig ("" )
0 commit comments