97513141dc
Phase 7: nine runnable examples/ programs (parse, failover chains with trailing alias, tiers, LLM_* env providers, multimodal, tool loop, Generate[T], agent, skills); docs/mort-migration.md mapping mort's go-llm/go-agentkit usage onto majordomo APIs with the planned additive library extensions and conversion order; README finalized with the complete matrix. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
43 lines
1.3 KiB
Go
43 lines
1.3 KiB
Go
// Command envproviders demonstrates LLM_* env-DSN provider definitions
|
|
// (go-llm parity): named providers built entirely from the environment,
|
|
// first-class in Parse, chains, and tiers.
|
|
//
|
|
// export LLM_M1=foreman://test-token-change-me@foreman-m1.orgrimmar.dudenhoeffer.casa
|
|
// export LLM_M5=foreman://test-token-change-me@foreman-m5.orgrimmar.dudenhoeffer.casa
|
|
// go run ./examples/envproviders
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"gitea.stevedudenhoeffer.com/steve/majordomo"
|
|
)
|
|
|
|
func main() {
|
|
spec := flag.String("model", "m5/qwen3:30b,m1/qwen3:30b,thinking", "spec mixing env providers, built-ins, and aliases")
|
|
flag.Parse()
|
|
|
|
if os.Getenv("LLM_M1") == "" && os.Getenv("LLM_M5") == "" {
|
|
log.Println("note: no LLM_M1/LLM_M5 set — set foreman DSNs to run this against real daemons")
|
|
}
|
|
|
|
reg := majordomo.New() // eagerly loads every LLM_* var; unknown names also resolve lazily
|
|
reg.RegisterAlias("thinking", "ollama-cloud/minimax-m3:cloud")
|
|
|
|
m, err := reg.Parse(*spec)
|
|
if err != nil {
|
|
log.Fatalf("parse %q: %v", *spec, err)
|
|
}
|
|
resp, err := m.Generate(context.Background(), majordomo.Request{
|
|
Messages: []majordomo.Message{majordomo.UserText("Which machine are you running on? One sentence.")},
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("generate: %v", err)
|
|
}
|
|
fmt.Printf("[%s] %s\n", resp.Model, resp.Text())
|
|
}
|