Hi, I am using HTTP API to train the model. I get the whole model tar file in response of the train api. Is there a way to get the model name of currently trained model so that I can load that model using API.
Currently, you cannot obtain the filename of the trained model from the response. I opened a Pull Request (/model/train: add filename to response header by tabergma · Pull Request #3872 · RasaHQ/rasa · GitHub) to fix this. So, in the next release you can get the model filename from the response headers.
The trained model is stored in the directory you provide via out
in the request body or in the default model directory models
. For now, you can just take the latest model file in that directory and assume that it is the model you just trained.
Hi @Tanja
Is the feature updated. if so how can i get the filename form response header ??
Yes, the feature is updated. You can get the response header by doing something similar like this: Python’s Requests Library (Guide) – Real Python
what is returned by the train API is a byte array
model = requests.post(‘http://localhost:8003/model/train’,headers=headers,data=json.dumps(data)).content
something like
b’\x1f\x8b\x08\x08 \xfa\xa6]\x02\xff20191016-163816.tar\x00\xec\xbdY\x8f\xabZ\xba \x98\xcf\xf9\x1fZ\x8aJ\xa9\x95U\xf2\xc9c\xf0\x88S}\xfa6`\xb0\x99lFc\*ma\xc0\x183\x1a0\x06J%\xf5K\xff\x88~\xec\x7f\xda\x0b\xec\x18w8\x8c\xed\xd8\xe7\xde\xea\xce-\x9d\x13\x11\x0c\x8b\xf5\xad\xf5\xcd\xd32\xc2\xd8j\xff\xe5\xd7\xfe\x83\xc0\xbf\xe1\xb0\xff\x97\xff\x13\xfc\xfe\xbf\xfc\xdf\xff\xd7\xff\xf3\xfc\x13z\xfd\xf7\x17\xb8\xdb\xef\xc3\xfda\x1f\xeaA\x7f\x81\xe0N\x0f<\xfe\xd4\xff\xcb\x9f\xf0\xef\x90\xa4z\xfc\xf4\xf4\x17\xb8\xd7\x85\xa1\xce\xe0\xe2s\xd7\xee?\x03\xf2\xfc\xf3…
what i want is the name alone so that i can persist that tar file somewhere else with same name with timestamp
how can i extract out the filename alone ??
You can do something like this:
import requests
url = "http://localhost:5005/model/train"
payload = "{\n \"domain\": \"intents:\\n - greet\\n - goodbye\\n - affirm\\n - deny\\n - mood_great\\n - mood_unhappy\\n\\nactions:\\n - utter_greet\\n - utter_cheer_up\\n - utter_did_that_help\\n - utter_happy\\n - utter_goodbye\\n\\ntemplates:\\n utter_greet:\\n - text: \\\"Hey! How are you?\\\"\\n\\n utter_cheer_up:\\n - text: \\\"Here is something to cheer you up:\\\"\\n image: \\\"https://i.imgur.com/nGF1K8f.jpg\\\"\\n\\n utter_did_that_help:\\n - text: \\\"Did that help you?\\\"\\n\\n utter_happy:\\n - text: \\\"Great carry on!\\\"\\n\\n utter_goodbye:\\n - text: \\\"Bye\\\"\",\n \"config\": \"language: en\\npipeline: supervised_embeddings\\npolicies:\\n - name: MemoizationPolicy\\n - name: KerasPolicy\",\n \"nlu\": \"## intent:greet\\n- hey\\n- hello\\n- hi\\n## intent:goodbye\\n- bye\\n- goodbye\\n- have a nice day\\n- see you\\n## intent:affirm\\n- yes\\n- indeed\\n## intent:deny\\n- no\\n- never\\n## intent:mood_great\\n- perfect\\n- very good\\n- great\\n## intent:mood_unhappy\\n- sad\\n- not good\\n- unhappy\",\n \"stories\": \"## happy path\\n* greet\\n\\n - utter_greet\\n\\n* mood_great\\n\\n - utter_happy\\n\\n## sad path 1\\n* greet\\n\\n - utter_greet\\n\\n* mood_unhappy\\n\\n - utter_cheer_up\\n\\n - utter_did_that_help\\n\\n* affirm\\n\\n - utter_happy\\n\\n## sad path 2\\n* greet\\n\\n - utter_greet\\n\\n* mood_unhappy\\n\\n - utter_cheer_up\\n\\n - utter_did_that_help\\n\\n* deny\\n\\n - utter_goodbye\\n\\n## say goodbye\\n* goodbye\\n\\n - utter_goodbye\",\n \"out\": \"models\",\n \"force\": false\n}"
headers = {
'accept': "application/octet-stream",
'Content-Type': "application/json",
'User-Agent': "PostmanRuntime/7.17.1",
'Cache-Control': "no-cache",
'Postman-Token': "71989a1f-1e03-4808-bec9-6770dfc9475e,bc8da177-85d5-4f24-b50e-bfced6969a62",
'Host': "localhost:5005",
'Accept-Encoding': "gzip, deflate",
'Content-Length': "1428",
'Connection': "keep-alive",
'cache-control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.headers["filename"])
Hey, can you tell me how to load new model using API after train?
Hi @NgocNam1512
You can use Rasa HTTP-API for loading the newly train model.
Try Out
curl -X PUT http://localhost:5005/model -H ‘Content-type: application/json’ -d ‘{“model_file”:“/app/models/model.tar.gz”,}’
Web Ref - Rasa & Rasa Pro Documentation