Files
becomingone/cli.py
T

104 lines
3.4 KiB
Python
Raw Normal View History

#!/home/becomingone/kairos/.venv/bin/python3
import sys
import os
import json
import requests
import argparse
from typing import Dict, Any
# Simple ANSI colors since we avoid heavy dependencies like rich unless requested
class Colors:
HEADER = '\033[95m'
BLUE = '\033[94m'
CYAN = '\033[96m'
GREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def print_header():
print(f"{Colors.GREEN}{Colors.BOLD}")
print("========================================")
print(" BECOMINGONE CHORUS CLI ")
print("========================================")
print(f"Connecting to KAIROS via OpenAI standard{Colors.ENDC}\n")
def stream_chat(url: str, messages: list):
payload = {
"model": "becomingone-chorus",
"messages": messages,
"stream": True
}
try:
response = requests.post(url, json=payload, stream=True)
response.raise_for_status()
print(f"\n{Colors.CYAN}{Colors.BOLD}MASTER TRANSDUCER & CHORUS:{Colors.ENDC}")
full_content = ""
for line in response.iter_lines():
if line:
line_str = line.decode('utf-8')
if line_str.startswith('data: '):
data_str = line_str[6:]
if data_str == '[DONE]':
break
try:
chunk = json.loads(data_str)
delta = chunk['choices'][0].get('delta', {})
content = delta.get('content', '')
if content:
full_content += content
# Print incrementally
sys.stdout.write(content)
sys.stdout.flush()
except json.JSONDecodeError:
continue
print("\n")
return full_content
except requests.exceptions.RequestException as e:
print(f"\n{Colors.FAIL}Error communicating with KAIROS node: {e}{Colors.ENDC}")
return None
def interactive_loop(base_url: str):
url = f"{base_url}/v1/chat/completions"
messages = []
print_header()
print(f"Server URL: {base_url}")
print("Type 'exit' or 'quit' to close the link.\n")
while True:
try:
user_input = input(f"{Colors.BLUE}{Colors.BOLD}User > {Colors.ENDC}")
if user_input.strip().lower() in ['exit', 'quit']:
break
if not user_input.strip():
continue
messages.append({"role": "user", "content": user_input})
# Send to engine
assistant_content = stream_chat(url, messages)
if assistant_content:
messages.append({"role": "assistant", "content": assistant_content})
except KeyboardInterrupt:
print(f"\n{Colors.WARNING}Interrupted by user. Disconnecting.{Colors.ENDC}")
break
except EOFError:
break
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="BecomingONE Command Line Interface")
parser.add_argument("--url", type=str, default="http://localhost:8000", help="Base URL for the KAIROS server")
args = parser.parse_args()
interactive_loop(args.url)