Open onlyspike opened 3 years ago
@onlyspike The extensions engine needs further documentation and it is something we are actively pursuing in the next 1-2 weeks. The file is exactly where this README mentions it, however: if you access the Pod via ssh and then type "cd /etc" and then "nano escapepod.conf" you will see the contents of the file and be able to edit them. "/etc" is the directory name. When I update the docs I will be more explicit about this.
Could you confirm that integration steps in Readme for these examples are compatible with escapepod 1.0? I'm getting intent_system_unsupported intent for behaviours I provision via escapepod ui. Looks like they are ignored.
The file you are looking for is: escape-pod.conf
The file you are looking for is: escape-pod.conf
@moribundant Thanks, I'm ok with the conf file name. I'm wondering if environment variables which you put in that file listed in the tutorial are applicable to escapeppod1.0, and if behaviour configuration example is valid
I wish I could help, but this thing is so vague and the instructions so esoteric that anything is a crap shoot.
What we have is the folks at DDL are letting out 'tidbits' of code because they have been instructed by others who already have the requisite knowledge to make things happen. The instruction, for lack of a better term, is incomplete. I have taken the position of 'waiting'--at some juncture they will have to publish clear cut instructions or perish. I only hope they do not perish before that happens.
I have noticed that the Escape Pod is extremely resilient and stable--that's a good sign.
I must add that I'm running escape_pod on my existing debian armv8 server, not as image on RPI4. It took some time to investigate what is required to get it running, but it is working fine for everything but extension.
So I'm wondering is it because my setup missing something comparing to RPI image, or released version of escape_pod has different integration steps for extensions.
Could you confirm that integration steps in Readme for these examples are compatible with escapepod 1.0? I'm getting intent_system_unsupported intent for behaviours I provision via escapepod ui. Looks like they are ignored.
I too am experiencing this issue. I have the escape-pod-extension
service
running on the escapepod rpi itself, so I have escape-pod.conf
pointing to
localhost:PORT
. Not sure if there's a chicken and egg situation going on
whether the escapepod service needs to connect with the extension service, but
it isn't running yet. Systemd logs shows the following when I try to trigger
the battery example.
Jun 28 07:02:59 escapepod escape_pod[1497]: {"extend":false,"function":"stt.(*Server).Parse","incoming_text":"how is your battery","level":"info","msg":"","result_intent":"intent_system_unsupported","source":"parse.go:69","time":"2021-06-28 07:02:59"}
Jun 28 07:02:59 escapepod escape_pod[1497]: {"duration":6.464023283,"error":null,"function":"log.StreamServerInterceptor.func1","level":"info","method":"/sttpb.STT/Parse","msg":"stream info","received":40,"sent":1,"source":"stream.go:55","time":"2021-06-28 07:02:59"}
Jun 28 07:02:59 escapepod escape_pod[1497]: {"device":"0050905d","function":"saywhatnow.(*Server).ProcessIntent","intent":"intent_system_unsupported","level":"info","msg":"","parameters":null,"session":"8e773a16-516c-49","source":"intent.go:166","time":"2021-06-28 07:02:59"}
Jun 28 07:02:59 escapepod escape_pod[1497]: {"duration":6.47724378,"error":null,"function":"log.StreamServerInterceptor.func1","level":"info","method":"/chippergrpc2.ChipperGrpc/StreamingIntent","msg":"stream info","received":40,"sent":1,"source":"stream.go:55","time":"2021-06-28 07:02:59"}
Jun 28 07:03:00 escapepod escape_pod[1497]: 2021/06/28 07:03:00 write tcp ESCAPEPOD_IP:80->LAPTOP_IP:50302: write: broken pipe
I'm not sure whether the "extend":false
KV is referring to the "Enable External Parsing" option for the behavior because that option is totally set.
I must add that I'm running escape_pod on my existing debian armv8 server, not as image on RPI4. It took some time to investigate what is required to get it running, but it is working fine for everything but extension.
So I'm wondering is it because my setup missing something comparing to RPI image, or released version of escape_pod has different integration steps for extensions.
Can you shed light on how you did this? From my quick observation, aside from
the main binary and assets in /usr/local/escapepod
, the systemd service, and
probably some supporting boot scripts there doesn't seem to be anything extra
that is required to run the escapepod service. Also, why does it have to run on
arm? Is there a reason they don't provide an x86/amd64 binary, as well?
I too am experiencing this issue. I have the
escape-pod-extension
service running on the escapepod rpi itself, so I haveescape-pod.conf
pointing tolocalhost:PORT
.
I run extension o n the same host as escapepod and used the following settings in escape-pod.conf:
ENABLE_EXTENSIONS=true ESCAPEPOD_EXTENDER_TARGET=127.0.0.1:8089 ESCAPEPOD_EXTENDER_DISABLE_TLS=true
I found that the integration works, but only for one intent: intent_weather_extend. For any other intent, escape_pod doesn't even try sending a request to extension and responds with 'intent_system_unsupported'. I tried contacting DDL support regarding the issue, but they never responded.
I must add that I'm running escape_pod on my existing debian armv8 server,
Can you shed light on how you did this? From my quick observation, aside from the main binary and assets in
/usr/local/escapepod
, the systemd service, and probably some supporting boot scripts there doesn't seem to be anything extra that is required to run the escapepod service. Also, why does it have to run on arm? Is there a reason they don't provide an x86/amd64 binary, as well?
Apart from /usr/local/escapepod, I also had to
Possibly a better way to do it is to use this docker image ( found it after I got my escape_pod running): https://github.com/cyb3rdog/escapepod-docker
I found that the integration works, but only for one intent: intent_weather_extend. For any other intent, escape_pod doesn't even try sending a request to extension and responds with 'intent_system_unsupported'. I tried contacting DDL support regarding the issue, but they never responded.
Okay. Initally the escapepod server was not connecting to the extender. I'm not
sure why, ~~but after changing ESCAPEPOD_EXTENDER_TARGET=127.0.0.1:8089
to
ESCAPEPOD_EXTENDER_TARGET=escapepod.local:8089
~~ it is now connecting. However,
I'm in the same boat as you now. I am able to trigger intent_weather_extend
,
but no other behaviors that I've manually added.
EDIT: The connection between the escapepod server and the extender seems to be intermittent.
After seeing these recent developments and having issues now with my robot, I am wondering what configurations everyone is running. I am running an EP with an OSKR robot and all was working perfectly (except EP Extension) and now the robot gets a 923 error (vic-cloud) because I was trying to get the extension working, but now I think it is hosing something.
Anyway, I wish they had not 'done it this this way' with the EP and OSKR being separate entities. It would have been far simpler to just have a set of server scripts available that would allow OSKR to directly access the web along with the Chipper service for intents processing.
I recieved a response from the discord, and it was observed that I have massive latency issues that are causing timeouts. This would explain my intermittent success with getting the weather intent working. Here are the logs I sent and the reposnse I got from @cyb3rdog.
Jun 29 06:24:51 escapepod escape_pod[2963]: {"extend":true,"function":"stt.(*Server).Parse","incoming_text":"what's the weather","level":"info","msg":"","result_intent":"intent_weather_extend","source":"parse.go:69","time":"2021-06-29 06:24:51"}
Jun 29 06:24:51 escapepod escape_pod[2963]: {"duration":4.131161914,"error":null,"function":"log.StreamServerInterceptor.func1","level":"info","method":"/sttpb.STT/Parse","msg":"stream info","received":25,"sent":1,"source":"stream.go:55","time":"2021-06-29 06:24:51"}
Jun 29 06:24:52 escapepod escape_pod[2963]: 2021/06/29 06:24:52 write tcp 192.168.1.14:80->192.168.1.13:50360: write: broken pipe
Jun 29 06:24:56 escapepod escape_pod[2963]: {"device":"0050905d","function":"saywhatnow.(*Server).ProcessIntent","intent":"intent_weather_extend","level":"error","msg":"rpc error: code = DeadlineExceeded desc = context deadline exceeded","parameters":{"final_intent":"intent_weather_extend"},"session":"8b414c
95-d184-4d","source":"intent.go:128","time":"2021-06-29 06:24:56"}
Jun 29 06:24:56 escapepod escape_pod[2963]: {"action":"get_intent","function":"server.(*Server).StreamingIntent","level":"info","msg":"rpc error: code = Internal desc = stream send fail","source":"intent.go:39","status":"failed","time":"2021-06-29 06:24:56"}
Jun 29 06:24:56 escapepod escape_pod[2963]: {"duration":8.814228504,"error":"rpc error: code = Internal desc = stream send fail","function":"log.StreamServerInterceptor.func1","level":"info","method":"/chippergrpc2.ChipperGrpc/StreamingIntent","msg":"stream info","received":25,"sent":1,"source":"stream.go:55
","time":"2021-06-29 06:24:56"}
cyb3rdog:
well delays might be tricky to troubleshoot, but i dont think the RPI3 itself is a problem... first the escape pod runs the voice recognition, and then it queries the mongo db for corresponding intent (that appear like those 4 seconds above), once it knows how the intent is configured, it contacts your extension for response (that was the 8 seconds there). .... So perhaps the bottleneck might be the the mongo db, and the actual processing algorithm of the extension, because the gRPC communication itself is pretty quick.... .... you might perhaps want to crosscheck all 3 logs, to see where exactly it delays....
@akissu:
I'm in the same boat as you now. I am able to trigger
intent_weather_extend
, but no other behaviors that I've manually added. EDIT: The connection between the escapepod server and the extender seems to be intermittent.
I didn't have any issues with delays or connectivity, just intents I create manually ignored by escape_pod. I wonder if it can be license-related
@moribundant:
I'm running OSKR with EP.
Has there been any progress made on this? I am still unable to create custom intents as all custom behaviors still map to "intent_system_unsupported".
For those you experiencing issues with every intent but weather, do you have ESCAPE_POD_ROBOT_TARGET and ESCAPE_POD_ROBOT_TOKEN configured as environment variables for your service? It looks like all but the weather intent call back to the robot SDK (so back to the robot itself) to elicit something happening.
For those you experiencing issues with every intent but weather, do you have ESCAPE_POD_ROBOT_TARGET and ESCAPE_POD_ROBOT_TOKEN configured as environment variables for your service? It looks like all but the weather intent call back to the robot SDK (so back to the robot itself) to elicit something happening.
In my case I have those variables set, but it doesn't matter as the problem is that escape pod isn't triggering the service, unless it is "intent_weather_extend"
So it is not yet possible to record and store custom programs in the Escape Pod?
For those you experiencing issues with every intent but weather, do you have ESCAPE_POD_ROBOT_TARGET and ESCAPE_POD_ROBOT_TOKEN configured as environment variables for your service? It looks like all but the weather intent call back to the robot SDK (so back to the robot itself) to elicit something happening.
In my case I have those variables set, but it doesn't matter as the problem is that escape pod isn't triggering the service, unless it is "intent_weather_extend"
Did you also add the new additional intents through the escapepod.local 'Behaviors' interface? The intent_weather_extend one is already there, so it makes sense that one fires.
Did you also add the new additional intents through the escapepod.local 'Behaviors' interface? The intent_weather_extend one is already there, so it makes sense that one fires.
Yes
Could you confirm that integration steps in Readme for these examples are compatible with escapepod 1.0? I'm getting intent_system_unsupported intent for behaviours I provision via escapepod ui. Looks like they are ignored.
I too am experiencing this issue. I have the
escape-pod-extension
service running on the escapepod rpi itself, so I haveescape-pod.conf
pointing tolocalhost:PORT
. Not sure if there's a chicken and egg situation going on whether the escapepod service needs to connect with the extension service, but it isn't running yet. Systemd logs shows the following when I try to trigger the battery example.Jun 28 07:02:59 escapepod escape_pod[1497]: {"extend":false,"function":"stt.(*Server).Parse","incoming_text":"how is your battery","level":"info","msg":"","result_intent":"intent_system_unsupported","source":"parse.go:69","time":"2021-06-28 07:02:59"} Jun 28 07:02:59 escapepod escape_pod[1497]: {"duration":6.464023283,"error":null,"function":"log.StreamServerInterceptor.func1","level":"info","method":"/sttpb.STT/Parse","msg":"stream info","received":40,"sent":1,"source":"stream.go:55","time":"2021-06-28 07:02:59"} Jun 28 07:02:59 escapepod escape_pod[1497]: {"device":"0050905d","function":"saywhatnow.(*Server).ProcessIntent","intent":"intent_system_unsupported","level":"info","msg":"","parameters":null,"session":"8e773a16-516c-49","source":"intent.go:166","time":"2021-06-28 07:02:59"} Jun 28 07:02:59 escapepod escape_pod[1497]: {"duration":6.47724378,"error":null,"function":"log.StreamServerInterceptor.func1","level":"info","method":"/chippergrpc2.ChipperGrpc/StreamingIntent","msg":"stream info","received":40,"sent":1,"source":"stream.go:55","time":"2021-06-28 07:02:59"} Jun 28 07:03:00 escapepod escape_pod[1497]: 2021/06/28 07:03:00 write tcp ESCAPEPOD_IP:80->LAPTOP_IP:50302: write: broken pipe
I'm not sure whether the
"extend":false
KV is referring to the "Enable External Parsing" option for the behavior because that option is totally set.I must add that I'm running escape_pod on my existing debian armv8 server, not as image on RPI4. It took some time to investigate what is required to get it running, but it is working fine for everything but extension. So I'm wondering is it because my setup missing something comparing to RPI image, or released version of escape_pod has different integration steps for extensions.
Can you shed light on how you did this? From my quick observation, aside from the main binary and assets in
/usr/local/escapepod
, the systemd service, and probably some supporting boot scripts there doesn't seem to be anything extra that is required to run the escapepod service. Also, why does it have to run on arm? Is there a reason they don't provide an x86/amd64 binary, as well?
Hello sir.
I am trying to setup the extension pod, an the same RPI as the escape pod. Could you eventually provide steps to be able to do ? Hope you can help > < So I can also tried to launche the services and help here
Hey everyone,
for those of you strugeling with this extension example, I would like to share few hints with you:
1) This escapepod extension should be considered only as example, as there is actualy few more ways to go...
2) The main point of interrest in this example is the protobuf definition, where the escapepod v1.0 client connects to this server side 'extension' binary, where the Unary grpc listener is implemented. Configuration of this 'server endpoint' is in /etc/escape-pod.conf
and basically needs to be extended only with this:
ENABLE_EXTENSIONS=true
ESCAPEPOD_EXTENDER_TARGET=127.0.0.1:8089
ESCAPEPOD_EXTENDER_DISABLE_TLS=true
3) Reason for this architectural concept (escapepod is client to extension server) was very likely just copying the whole principle
from intent processing realized in the Vector's DDL cloud, as in this scenario there can be only one 'cloud server'.
3) In the escapepod software version 1.0 there is also likely a bug, which requires the "intents/behaviours" marked for "External Parsing" to have the 'final_intent' reponse parameter's value same as the intent_name - the 'Behavior' field value, so keep this in mind when creating new "external parsing" intents, to save yourselves some nerves.
4) Your grpc server does not necessarily need to be implemented in golang, but it can be done in any programmig language which supports grpc protocol implementation.
5) Once the intent marked for "External Parsing" is received in extension, this example anyways uses the Vector's Go SDK to perform the actual "behaviours" overrides - So you can basically do the very very same thing in any other language which had Vector SDK developed for (node.js, c#, python....)
6) Although its perhaps the easiest and most suitable approach to deploy the extenstion binary to the same host as the escape-pod, it does not necessarily needs to be hosted there, you can have it hosted on any machine in same network as your vector and escapepod, and create the extension in any language and for any platform.
7) Some time ago, I have written my own extension, which is basically a proxy forwarding the unary request to its own event stream, to which the clients can connect and subscribe to. This was meant to provide with more 'friendly' way allowing broad variety of 'clients' to just connect to this extension proxy and just use it. Additionally, it also publishes methods for querying/creating/deleting the escapepod intents from your code.
So in case you'd like to know more about it, or use it as learning materials, feel free to visit my cyb3rdog/escape-pod-proxy repository.
8) I have also published the Python SDK for this particualar extension proxy of mine, to provide with some simple basic tutorials and examples of how to use this, how to be able to create intents/behaviour on the fly in your code, and to show the way, how to react to all escapepod intent events, regardless of its origin (vector's sdk/escapepod extension). Prerequisite of the use of this python sdk is to have this extension proxy of mine installed. See the documentation, deployment guide, and examples for more details.
I hope this will be of help to some of you, escpecially to begginers, and python coders, and that it will also provide with some insight to how this all actually works.
Cheers, cyb3rdog
Thanks for your time and answer Cyb3rDog. Do you have any documentation on how to make thing work with your services ?
Otherwise, any help possible ? I have two problems atm : First one, if you prefer to use location_id for the weather and commend ZIP_CODE, you ave an error telling you you need to enter at least one parameter ....
Second one, i actually set up the docker and all, but when trying to trigger the weather intent, I have this error popping. And I can't understand it. any hint on what's wrong and on how to correct it ?
Aug 21 17:02:12 escapepod escape_pod[736]: {"level":"error","ts":"2022-08-21T17:02:12.759Z","msg":"stream_server_interceptor=rpc error: code = Internal desc = no processor defined","correlation_id":"cc16a4fqcobc2r1hb9u0","stacktrace":"github.com/digital-dream-labs/go-logger.(*logger).Errorf\n\tgithub.com/digital-dream-labs/go-logger@v0.0.0-20210716200444-aacb0c191ae0/logger.go:197\ngithub.com/digital-dream-labs/go-logger.LoggingStreamServerInterceptor.func1\n\tgithub.com/digital-dream-labs/go-logger@v0.0.0-20210716200444-aacb0c191ae0/grpc.go:57\ngoogle.golang.org/grpc.chainStreamInterceptors.func1.1\n\tgoogle.golang.org/grpc@v1.45.0/server.go:1410\ngoogle.golang.org/grpc.chainStreamInterceptors.func1\n\tgoogle.golang.org/grpc@v1.45.0/server.go:1412\ngoogle.golang.org/grpc.(*Server).processStreamingRPC\n\tgoogle.golang.org/grpc@v1.45.0/server.go:1548\ngoogle.golang.org/grpc.(*Server).handleStream\n\tgoogle.golang.org/grpc@v1.45.0/server.go:1623\ngoogle.golang.org/grpc.(*Server).serveStreams.func1.2\n\tgoogle.golang.org/grpc@v1.45.0/server.go:921"}
I have just set up my Escape Pod. I would like to create extensions but cant find any documentation for this. The github read me says you just need to edit /etc/escapepod.conf. It does not mention where this file is or how to access it?