Usage
Run chatto
in the directory where your YAML files are located, or specify a path to them with the --path
flag:
chatto --path ./your/data
To run on Docker, use:
docker run \
-p 4770:4770 \
-e CHATTO_DATA=./your/data \
-v $PWD/your/data:/data \
jaimeteb/chatto
Note
The default log level is INFO. You can set it to DEBUG with the environment variable DEBUG
set to true
.
CLI
You can use the Chatto CLI tool by running chatto cli
. The CLI makes it easy to test your bot interactions.
chatto cli --url 'http://localhost' --port 4770
Chatto Init
Run the chatto init
command to generate a sample Chatto project on the directory of your choice. Just run:
chatto init --path my-chatto/
A Chatto project will be initialized at my-chatto
.
Import
An importable bot server and client package is provided to allow embedding into your own application.
To embed the server:
package main
import (
"flag"
"github.com/jaimeteb/chatto/bot"
)
func main() {
port := flag.Int("port", 4770, "Specify port to use.")
path := flag.String("path", ".", "Path to YAML files.")
flag.Parse()
server := bot.NewServer(*path, *port)
server.Run()
}
To embed the client:
package myservice
import (
"log"
"github.com/jaimeteb/chatto/bot"
)
type MyService struct {
chatto bot.Client
}
func NewMyService(url string, port int) *MyService {
return &MyService{chatto: bot.NewClient(url, port)}
}
func (s *MyService) Submit(question *query.Question) error {
answers, err := s.chatto.Submit(question)
if err != nil {
return err
}
// Print answers to stdout
for _, answer := range answers {
fmt.Println(answer.Text)
}
return nil
}
Deployment
Docker Compose
You can use Chatto on Docker Compose as well. A docker-compose.yml
would look like this:
version: "3"
services:
chatto:
image: jaimeteb/chatto:${CHATTO_VERSION}
env_file: .env
ports:
- "4770:4770"
volumes:
- ${CHATTO_DATA}:/data
depends_on:
- ext
- redis
ext:
image: odise/busybox-curl # Busy box with certificates
command: ext/ext
expose:
- 8770
volumes:
- ${CHATTO_DATA}/ext:/ext
redis:
image: bitnami/redis:6.0
environment:
- REDIS_PASSWORD=${STORE_PASSWORD}
expose:
- 6379
This requires a .env
file to contain the necessary environment variables:
# Chatto configuration
CHATTO_VERSION=latest
CHATTO_DATA=./your/data
# Extension configuration
CHATTO_BOT_EXTENSIONS_EXTENSION_NAME_URL=http://ext:8770
# Redis
CHATTO_BOT_STORE_HOST=redis
CHATTO_BOT_STORE_PASSWORD=pass
# Logs
CHATTO_BOT_DEBUG=true
The directory structure with all the files would look like this:
.
├── data
│ ├── ext
│ │ ├── ext
│ │ └── ext.go
│ ├── bot.yml
│ ├── chn.yml
│ ├── clf.yml
| └── fsm.yml
├── docker-compose.yml
└── .env
Finally, run:
docker-compose up -d redis ext
docker-compose up -d chatto
Important
The extensions server has to be executed according to its language.
For this docker-compose.yml
file, you'd have to build the Go extension first:
go build -o data/ext/ext data/ext/ext.go
Note
The extensions server has to be running before Chatto initializes.
Kubernetes
Under the deploy/kubernetes
directory you can find an example deployment:
Kind | Name | Description |
---|---|---|
Secret | chatto-config-secrets |
Contains the tokens that Chatto will use for authorization |
ConfigMap | chatto-config-envs |
Contains the environment variables for the bot.yml file |
ConfigMap | chatto-config-files |
Contains the clf.yml and fsm.yml file |
Deployment | chatto |
Chatto deployment based on the jaimeteb/chatto Docker image |
Service | chatto-service |
Service for the chatto deployment |
Ingress | chatto-ingress |
Ingress for the chatto-service service |
Run the following command to deploy on Kubernetes:
kubectl apply -f ./deploy/kubernetes/