-
Notifications
You must be signed in to change notification settings - Fork 5
/
main.go
98 lines (83 loc) · 1.91 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package main
import (
"fmt"
"os"
"text/tabwriter"
"time"
"github.com/Kardbord/hfapigo/v3"
)
const TableRows = 2
const query = "What is the population of Anytown?"
var table = func() map[string][]string {
// Table looks like this:
// +-----------------------+
// |City | Population |
// |-----------------------|
// |Anytown | 12345 |
// |Someplace | 7890 |
// +-----------------------+
return map[string][]string{
"City": {"Anytown", "Someplace"},
"Population": {"12345", "7890"},
}
}
func main() {
outputTable()
fmt.Println("\nSending Query:", query)
sendRequest()
}
func outputTable() {
fmt.Println("Data Table")
fmt.Println("+---------------------+")
w := tabwriter.NewWriter(os.Stdout, 1, 2, 1, ' ', tabwriter.Debug)
rowQueue := [][]string{}
for hdr, col := range table() {
fmt.Fprintf(w, "%s\t", hdr)
rowQueue = append(rowQueue, col)
}
fmt.Fprintln(w)
for _, col := range rowQueue {
if len(col) != TableRows {
panic("all columns must have the same number of rows")
}
}
for i := 0; i < TableRows; i++ {
for _, col := range rowQueue {
fmt.Fprintf(w, "%s\t", col[i])
}
fmt.Fprintln(w)
}
w.Flush()
fmt.Println("+---------------------+")
}
func sendRequest() {
type ChanRv struct {
resp *hfapigo.TableQuestionAnsweringResponse
err error
}
ch := make(chan ChanRv)
go func() {
tqaResp, err := hfapigo.SendTableQuestionAnsweringRequest(hfapigo.RecommendedTableQuestionAnsweringModel, &hfapigo.TableQuestionAnsweringRequest{
Inputs: hfapigo.TableQuestionAnsweringInputs{
Query: query,
Table: table(),
},
Options: *hfapigo.NewOptions().SetWaitForModel(true),
})
ch <- ChanRv{tqaResp, err}
}()
for {
select {
case chrv := <-ch:
if chrv.err != nil {
fmt.Println(chrv.err)
return
}
fmt.Println("\nAnswer:", chrv.resp.Answer)
return
default:
fmt.Print(".")
time.Sleep(time.Millisecond * 100)
}
}
}