template_test.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package templates
  2. import (
  3. "bufio"
  4. "bytes"
  5. "encoding/json"
  6. "io"
  7. "os"
  8. "path/filepath"
  9. "testing"
  10. "text/template"
  11. "github.com/ollama/ollama/llm"
  12. )
  13. func TestKVChatTemplate(t *testing.T) {
  14. f, err := os.Open(filepath.Join("testdata", "templates.jsonl"))
  15. if err != nil {
  16. t.Fatal(err)
  17. }
  18. defer f.Close()
  19. scanner := bufio.NewScanner(f)
  20. for scanner.Scan() {
  21. var ss map[string]string
  22. if err := json.Unmarshal(scanner.Bytes(), &ss); err != nil {
  23. t.Fatal(err)
  24. }
  25. for k, v := range ss {
  26. t.Run(k, func(t *testing.T) {
  27. kv := llm.KV{"tokenizer.chat_template": v}
  28. s := kv.ChatTemplate()
  29. r, err := NamedTemplate(s)
  30. if err != nil {
  31. t.Fatal(err)
  32. }
  33. if r.Name != k {
  34. t.Errorf("expected %q, got %q", k, r.Name)
  35. }
  36. var b bytes.Buffer
  37. if _, err := io.Copy(&b, r.Reader()); err != nil {
  38. t.Fatal(err)
  39. }
  40. tmpl, err := template.New(s).Parse(b.String())
  41. if err != nil {
  42. t.Fatal(err)
  43. }
  44. if tmpl.Tree.Root.String() == "" {
  45. t.Errorf("empty %s template", k)
  46. }
  47. })
  48. }
  49. }
  50. }