supporting-blog-content/ollama-and-go-for-rag/main.go (45 lines of code) (raw):
package main
import (
"fmt"
"log"
"ollama-rag/elasticsearch"
"github.com/parakeet-nest/parakeet/completion"
"github.com/parakeet-nest/parakeet/enums/option"
"github.com/parakeet-nest/parakeet/llm"
)
func main() {
ollamaUrl := "http://localhost:11434"
chatModel := "llama3.2:latest"
question := `Summarize document: JAK Inhibitors vs. Monoclonal Antibodies in Rheumatoid Arthritis Treatment`
size := 3
esClient, err := elasticsearch.EsClient()
if err != nil {
log.Fatalln("😡:", err)
}
// Retrieve documents from semantic query to build context
documentsContent, nil := elasticsearch.SemanticRetriever(esClient, question, size)
systemContent := `You are a helpful medical assistant. Only answer the questions based on found documents.
Add references to the base document titles and be succint in your answers.`
options := llm.SetOptions(map[string]interface{}{
option.Temperature: 0.0,
})
queryChat := llm.Query{
Model: chatModel,
Messages: []llm.Message{
{Role: "system", Content: systemContent},
{Role: "system", Content: documentsContent},
{Role: "user", Content: question},
},
Options: options,
}
fmt.Println()
fmt.Println("🤖 answer:")
// Answer the question
_, err = completion.ChatStream(ollamaUrl, queryChat,
func(answer llm.Answer) error {
fmt.Print(answer.Message.Content)
return nil
})
if err != nil {
log.Fatal("😡:", err)
}
fmt.Println()
}