Spaces:
Runtime error
Runtime error
File size: 3,712 Bytes
db95b72 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
import gradio as gr
import json
# JSON νμΌ μ½κΈ°
with open('/home/judy/command_bot/node.json', 'r') as file:
node_info = json.load(file)
##############################################################################
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
else:
return None # μ€νμ΄ λΉμ΄μμ λλ None λ°ν λλ μμΈ μ²λ¦¬λ κ°λ₯
def peek(self):
if not self.is_empty():
return self.items[-1]
else:
return None # μ€νμ΄ λΉμ΄μμ λλ None λ°ν λλ μμΈ μ²λ¦¬λ κ°λ₯
def size(self):
return len(self.items)
stack = Stack()
# λ°νμ λͺ
λ Ήμ΄κ° ν¬ν¨λμ΄ μλμ§ νμΈ
# λͺ
λ Ήμ΄κ° ν¬ν¨λμ΄ μλ€λ©΄ ν΄λΉ λ
Έλ μΆμΆ
def classifier(utterance):
print(utterance)
top = stack.peek()
if utterance == "save":
while(True):
if stack.size() == 0:
return
peek = stack.peek()
if peek['start_node'] == 3:
return
else:
stack.pop()
# top node μ dest node λ₯Ό λͺ¨λ κ°μ Έμ¨λ€.
for dest_node in top['dest_node']:
# node_info μμ start_node == dest_node μΈ λ
Έλλ₯Ό μ°Ύλλ€.
for node in node_info["items"]:
if node['start_node'] == dest_node:
# candidate_node.append(node)
# μ΅μ λ
Έλλ³΄λ€ λ°ν λ
Έλκ° λ€μ state μΈμ§ νμΈ
if top['depth']+1 == node['depth']:
# dest_node μ uttr μΆμΆ -> λ°νμ / λ°νκ° ν¬ν¨λλμ§ νμΈ
# node['uttrance'] μ κ°μ΄ λ€μ λ€μ΄μλ κ²½μ° λ°°μ΄λ‘ λ°ν
# if '\n' in node['utterance']:
node_utter = node['utterance'].split('\n')
for n in node_utter:
if utterance in n or n in utterance:
stack.push(node)
# print(node['intent'])
if node['fallback']:
while(True):
if stack.size() == 0:
return
peek = stack.peek()
if peek['start_node'] == node['fallback']:
return str(str(node['depth']) + ':' + node['intent'])
else:
stack.pop()
else:
return str(str(node['depth']) + ':' + node['intent'])
return str("Can't run this command!")
# 1. μ°¨νΈ μΉ κ΅¬λ
## state = 1
stack.push(node_info["items"][0])
# 2. νλ¦¬μ€ / μνλνΈ κ° μ°¨νΈ λΆκΈ°
## νλ¦¬μ€ μ°¨νΈλ‘ λΆκΈ°
stack.push(node_info["items"][1])
demo = gr.Interface(fn=classifier, inputs="textbox", outputs="textbox",
examples=[
["start listening"],
["select tooth 1"],
["pocket depth 1 2 3"],
["select tooth 2"],
["treatment plan"],
["missing"],
["select tooth 5 buccal mesial pocket depth"],
["save"]
]
)
if __name__ == "__main__":
demo.launch(share=True)
|