summaryrefslogtreecommitdiff
path: root/internal/llmutils
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-09-06 13:19:01 +0300
committerPaul Buetow <paul@buetow.org>2025-09-06 13:19:01 +0300
commit04f290dbeeee8a6fcbc70fed253a968336bcb2ab (patch)
tree3ee23a4ac4bcc5b43b43697cfb0e905735fc6331 /internal/llmutils
parent5e966f50111adf6e2cb2683fe588f6fe033fa931 (diff)
more tests
Diffstat (limited to 'internal/llmutils')
-rw-r--r--internal/llmutils/client.go35
-rw-r--r--internal/llmutils/client_test.go28
2 files changed, 63 insertions, 0 deletions
diff --git a/internal/llmutils/client.go b/internal/llmutils/client.go
new file mode 100644
index 0000000..ae545c5
--- /dev/null
+++ b/internal/llmutils/client.go
@@ -0,0 +1,35 @@
+package llmutils
+
+import (
+ "os"
+ "strings"
+
+ "codeberg.org/snonux/hexai/internal/appconfig"
+ "codeberg.org/snonux/hexai/internal/llm"
+)
+
+// NewClientFromApp builds an llm.Client using app config and environment keys.
+func NewClientFromApp(cfg appconfig.App) (llm.Client, error) {
+ llmCfg := llm.Config{
+ Provider: cfg.Provider,
+ OpenAIBaseURL: cfg.OpenAIBaseURL,
+ OpenAIModel: cfg.OpenAIModel,
+ OpenAITemperature: cfg.OpenAITemperature,
+ OllamaBaseURL: cfg.OllamaBaseURL,
+ OllamaModel: cfg.OllamaModel,
+ OllamaTemperature: cfg.OllamaTemperature,
+ CopilotBaseURL: cfg.CopilotBaseURL,
+ CopilotModel: cfg.CopilotModel,
+ CopilotTemperature: cfg.CopilotTemperature,
+ }
+ oaKey := os.Getenv("HEXAI_OPENAI_API_KEY")
+ if strings.TrimSpace(oaKey) == "" {
+ oaKey = os.Getenv("OPENAI_API_KEY")
+ }
+ cpKey := os.Getenv("HEXAI_COPILOT_API_KEY")
+ if strings.TrimSpace(cpKey) == "" {
+ cpKey = os.Getenv("COPILOT_API_KEY")
+ }
+ return llm.NewFromConfig(llmCfg, oaKey, cpKey)
+}
+
diff --git a/internal/llmutils/client_test.go b/internal/llmutils/client_test.go
new file mode 100644
index 0000000..9bb7ea2
--- /dev/null
+++ b/internal/llmutils/client_test.go
@@ -0,0 +1,28 @@
+package llmutils
+
+import (
+ "os"
+ "testing"
+
+ "codeberg.org/snonux/hexai/internal/appconfig"
+)
+
+func TestNewClientFromApp_Ollama(t *testing.T) {
+ cfg := appconfig.App{Provider: "ollama"}
+ c, err := NewClientFromApp(cfg)
+ if err != nil || c == nil {
+ t.Fatalf("ollama client failed: %v %v", c, err)
+ }
+}
+
+func TestNewClientFromApp_OpenAI_WithKey(t *testing.T) {
+ t.Setenv("HEXAI_OPENAI_API_KEY", "test-key")
+ cfg := appconfig.App{Provider: "openai"}
+ c, err := NewClientFromApp(cfg)
+ if err != nil || c == nil {
+ t.Fatalf("openai client failed: %v %v", c, err)
+ }
+ // ensure env override precedence
+ _ = os.Unsetenv("OPENAI_API_KEY")
+}
+