Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tutorial #2

Open
onlyspike opened this issue Mar 10, 2021 · 21 comments
Open

Tutorial #2

onlyspike opened this issue Mar 10, 2021 · 21 comments

Comments

@onlyspike
Copy link

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?

@bussardrobbie
Copy link
Contributor

@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.

@yekorzh
Copy link

yekorzh commented Apr 7, 2021

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.

@moribundant
Copy link

The file you are looking for is: escape-pod.conf

@yekorzh
Copy link

yekorzh commented Apr 7, 2021

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

@moribundant
Copy link

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.

@yekorzh
Copy link

yekorzh commented Apr 9, 2021

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.

@akissu
Copy link

akissu commented Jun 28, 2021

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?

@yekorzh
Copy link

yekorzh commented Jun 28, 2021

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.

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

  • install mongodb (with configuration file and databases from the escape_pod image). I had to cross-compile a new version on another PC for my armv8 debian, as in my case GLIBC libraries were not compatible with binaries from the escape_pod image
  • configure avahi mDNS to publish 'escapepod.local'
  • copy libdeepspeach.so from escape_pod image to my host. Looks like escape_pod is using deepspeach project and its voice model to do voice to text. Potentially this is the way to improve Vector's voice recognition capabilities.

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

@akissu
Copy link

akissu commented Jun 29, 2021

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.

@moribundant
Copy link

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.

@akissu
Copy link

akissu commented Jun 29, 2021

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....

@yekorzh
Copy link

yekorzh commented Jun 29, 2021

@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.

@akissu
Copy link

akissu commented Aug 8, 2021

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".

@BillMerryman
Copy link

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.

@yekorzh
Copy link

yekorzh commented Sep 8, 2021

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"

@iamalek
Copy link

iamalek commented Oct 14, 2021

So it is not yet possible to record and store custom programs in the Escape Pod?

@BillMerryman
Copy link

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.

@yekorzh
Copy link

yekorzh commented Oct 27, 2021

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

@Neo-dessinator
Copy link

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?

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

@cyb3rdog
Copy link

cyb3rdog commented Dec 12, 2021

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
  1. 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'.
  2. 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.
  3. 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.
  4. 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....)
  5. 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.
  6. 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.
  7. 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

@Neo-dessinator
Copy link

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/[email protected]/logger.go:197\ngithub.com/digital-dream-labs/go-logger.LoggingStreamServerInterceptor.func1\n\tgithub.com/digital-dream-labs/[email protected]/grpc.go:57\ngoogle.golang.org/grpc.chainStreamInterceptors.func1.1\n\tgoogle.golang.org/[email protected]/server.go:1410\ngoogle.golang.org/grpc.chainStreamInterceptors.func1\n\tgoogle.golang.org/[email protected]/server.go:1412\ngoogle.golang.org/grpc.(*Server).processStreamingRPC\n\tgoogle.golang.org/[email protected]/server.go:1548\ngoogle.golang.org/grpc.(*Server).handleStream\n\tgoogle.golang.org/[email protected]/server.go:1623\ngoogle.golang.org/grpc.(*Server).serveStreams.func1.2\n\tgoogle.golang.org/[email protected]/server.go:921"}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants