
- Added new LLM API functions for non-streaming chat completions - Introduced UI utility functions for input/output interaction - Implemented multi-select and single-select UI components
65 lines
1.5 KiB
Python
65 lines
1.5 KiB
Python
import os
|
|
import time
|
|
|
|
import yaml
|
|
|
|
def output_message(output):
|
|
out_data = f"""\n{output}\n"""
|
|
print(out_data, flush=True)
|
|
|
|
|
|
def parse_response_from_ui(response):
|
|
# resonse text like this:
|
|
"""
|
|
``` some_name
|
|
some key name 1: value1
|
|
some key name 2: value2
|
|
```
|
|
"""
|
|
# parse key values
|
|
lines = response.strip().split("\n")
|
|
if len(lines) <= 2:
|
|
return {}
|
|
|
|
data = yaml.safe_load('\n'.join(lines[1:-1]))
|
|
return data
|
|
|
|
|
|
def pipe_interaction_mock(output: str):
|
|
output_message(output)
|
|
# read response.txt in same dir with current script file
|
|
response_file = os.path.join(os.path.dirname(__file__), 'response.txt')
|
|
|
|
# clear content in response_file
|
|
with open(response_file, 'w+', encoding="utf8"):
|
|
pass
|
|
|
|
while True:
|
|
if os.path.exists(response_file):
|
|
with open(response_file, encoding="utf8") as f:
|
|
response = f.read()
|
|
if response.strip().endswith("```"):
|
|
break
|
|
time.sleep(1)
|
|
return parse_response_from_ui(response)
|
|
|
|
|
|
def pipe_interaction(output: str):
|
|
output_message(output)
|
|
|
|
lines = []
|
|
while True:
|
|
try:
|
|
line = input()
|
|
if line.strip().startswith('```yaml'):
|
|
lines = []
|
|
elif line.strip() == '```':
|
|
lines.append(line)
|
|
break
|
|
lines.append(line)
|
|
except EOFError:
|
|
pass
|
|
|
|
replay_message = '\n'.join(lines)
|
|
return parse_response_from_ui(replay_message)
|