| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | from ten import ( |
| | Extension, |
| | TenEnv, |
| | Cmd, |
| | Data, |
| | StatusCode, |
| | CmdResult, |
| | ) |
| |
|
| | CMD_NAME_FLUSH = "flush" |
| |
|
| | TEXT_DATA_TEXT_FIELD = "text" |
| | TEXT_DATA_FINAL_FIELD = "is_final" |
| |
|
| |
|
| | class InterruptDetectorExtension(Extension): |
| | def on_start(self, ten: TenEnv) -> None: |
| | ten.log_info("on_start") |
| | ten.on_start_done() |
| |
|
| | def on_stop(self, ten: TenEnv) -> None: |
| | ten.log_info("on_stop") |
| | ten.on_stop_done() |
| |
|
| | def send_flush_cmd(self, ten: TenEnv) -> None: |
| | flush_cmd = Cmd.create(CMD_NAME_FLUSH) |
| | ten.send_cmd( |
| | flush_cmd, |
| | lambda ten, result, _: ten.log_info("send_cmd done"), |
| | ) |
| |
|
| | ten.log_info(f"sent cmd: {CMD_NAME_FLUSH}") |
| |
|
| | def on_cmd(self, ten: TenEnv, cmd: Cmd) -> None: |
| | cmd_name = cmd.get_name() |
| | ten.log_info("on_cmd name {}".format(cmd_name)) |
| |
|
| | |
| | self.send_flush_cmd(ten) |
| |
|
| | |
| | cmd_json = cmd.get_property_to_json() |
| | new_cmd = Cmd.create(cmd_name) |
| | new_cmd.set_property_from_json(None, cmd_json) |
| | ten.send_cmd( |
| | new_cmd, |
| | lambda ten, result, _: ten.log_info("send_cmd done"), |
| | ) |
| |
|
| | cmd_result = CmdResult.create(StatusCode.OK) |
| | ten.return_result(cmd_result, cmd) |
| |
|
| | def on_data(self, ten: TenEnv, data: Data) -> None: |
| | """ |
| | on_data receives data from ten graph. |
| | current supported data: |
| | - name: text_data |
| | example: |
| | {name: text_data, properties: {text: "hello", is_final: false} |
| | """ |
| | ten.log_info("on_data") |
| |
|
| | try: |
| | text = data.get_property_string(TEXT_DATA_TEXT_FIELD) |
| | except Exception as e: |
| | ten.log_warn( |
| | f"on_data get_property_string {TEXT_DATA_TEXT_FIELD} error: {e}" |
| | ) |
| | return |
| |
|
| | try: |
| | final = data.get_property_bool(TEXT_DATA_FINAL_FIELD) |
| | except Exception as e: |
| | ten.log_warn( |
| | f"on_data get_property_bool {TEXT_DATA_FINAL_FIELD} error: {e}" |
| | ) |
| | return |
| |
|
| | ten.log_debug( |
| | f"on_data {TEXT_DATA_TEXT_FIELD}: {text} {TEXT_DATA_FINAL_FIELD}: {final}" |
| | ) |
| |
|
| | if final or len(text) >= 2: |
| | self.send_flush_cmd(ten) |
| |
|
| | d = Data.create("text_data") |
| | d.set_property_bool(TEXT_DATA_FINAL_FIELD, final) |
| | d.set_property_string(TEXT_DATA_TEXT_FIELD, text) |
| | ten.send_data(d) |
| |
|