|
@@ -8,6 +8,7 @@ import uuid
|
|
from exo.orchestration.standard_node import StandardNode
|
|
from exo.orchestration.standard_node import StandardNode
|
|
from exo.networking.grpc.grpc_server import GRPCServer
|
|
from exo.networking.grpc.grpc_server import GRPCServer
|
|
from exo.networking.udp_discovery import UDPDiscovery
|
|
from exo.networking.udp_discovery import UDPDiscovery
|
|
|
|
+from exo.networking.tailscale_discovery import TailscaleDiscovery
|
|
from exo.networking.grpc.grpc_peer_handle import GRPCPeerHandle
|
|
from exo.networking.grpc.grpc_peer_handle import GRPCPeerHandle
|
|
from exo.topology.ring_memory_weighted_partitioning_strategy import RingMemoryWeightedPartitioningStrategy
|
|
from exo.topology.ring_memory_weighted_partitioning_strategy import RingMemoryWeightedPartitioningStrategy
|
|
from exo.api import ChatGPTAPI
|
|
from exo.api import ChatGPTAPI
|
|
@@ -31,6 +32,7 @@ parser.add_argument("--download-quick-check", action="store_true", help="Quick c
|
|
parser.add_argument("--max-parallel-downloads", type=int, default=4, help="Max parallel downloads for model shards download")
|
|
parser.add_argument("--max-parallel-downloads", type=int, default=4, help="Max parallel downloads for model shards download")
|
|
parser.add_argument("--prometheus-client-port", type=int, default=None, help="Prometheus client port")
|
|
parser.add_argument("--prometheus-client-port", type=int, default=None, help="Prometheus client port")
|
|
parser.add_argument("--broadcast-port", type=int, default=5678, help="Broadcast port for discovery")
|
|
parser.add_argument("--broadcast-port", type=int, default=5678, help="Broadcast port for discovery")
|
|
|
|
+parser.add_argument("--discovery-module", type=str, choices=["udp", "tailscale"], default="udp", help="Discovery module to use")
|
|
parser.add_argument("--discovery-timeout", type=int, default=30, help="Discovery timeout in seconds")
|
|
parser.add_argument("--discovery-timeout", type=int, default=30, help="Discovery timeout in seconds")
|
|
parser.add_argument("--wait-for-peers", type=int, default=0, help="Number of peers to wait to connect to before starting")
|
|
parser.add_argument("--wait-for-peers", type=int, default=0, help="Number of peers to wait to connect to before starting")
|
|
parser.add_argument("--chatgpt-api-port", type=int, default=8000, help="ChatGPT API port")
|
|
parser.add_argument("--chatgpt-api-port", type=int, default=8000, help="ChatGPT API port")
|
|
@@ -40,6 +42,8 @@ parser.add_argument("--inference-engine", type=str, default=None, help="Inferenc
|
|
parser.add_argument("--disable-tui", action=argparse.BooleanOptionalAction, help="Disable TUI")
|
|
parser.add_argument("--disable-tui", action=argparse.BooleanOptionalAction, help="Disable TUI")
|
|
parser.add_argument("--run-model", type=str, help="Specify a model to run directly")
|
|
parser.add_argument("--run-model", type=str, help="Specify a model to run directly")
|
|
parser.add_argument("--prompt", type=str, help="Prompt for the model when using --run-model", default="Who are you?")
|
|
parser.add_argument("--prompt", type=str, help="Prompt for the model when using --run-model", default="Who are you?")
|
|
|
|
+parser.add_argument("--tailscale-api-key", type=str, default=None, help="Tailscale API key")
|
|
|
|
+parser.add_argument("--tailnet-name", type=str, default=None, help="Tailnet name")
|
|
args = parser.parse_args()
|
|
args = parser.parse_args()
|
|
|
|
|
|
print_yellow_exo()
|
|
print_yellow_exo()
|
|
@@ -67,7 +71,10 @@ if DEBUG >= 0:
|
|
for chatgpt_api_endpoint in chatgpt_api_endpoints:
|
|
for chatgpt_api_endpoint in chatgpt_api_endpoints:
|
|
print(f" - {terminal_link(chatgpt_api_endpoint)}")
|
|
print(f" - {terminal_link(chatgpt_api_endpoint)}")
|
|
|
|
|
|
-discovery = UDPDiscovery(args.node_id, args.node_port, args.listen_port, args.broadcast_port, lambda peer_id, address, device_capabilities: GRPCPeerHandle(peer_id, address, device_capabilities), discovery_timeout=args.discovery_timeout)
|
|
|
|
|
|
+if args.discovery_module == "udp":
|
|
|
|
+ discovery = UDPDiscovery(args.node_id, args.node_port, args.listen_port, args.broadcast_port, lambda peer_id, address, device_capabilities: GRPCPeerHandle(peer_id, address, device_capabilities), discovery_timeout=args.discovery_timeout)
|
|
|
|
+elif args.discovery_module == "tailscale":
|
|
|
|
+ discovery = TailscaleDiscovery(args.node_id, args.node_port, lambda peer_id, address, device_capabilities: GRPCPeerHandle(peer_id, address, device_capabilities), discovery_timeout=args.discovery_timeout, tailscale_api_key=args.tailscale_api_key, tailnet=args.tailnet_name)
|
|
topology_viz = TopologyViz(chatgpt_api_endpoints=chatgpt_api_endpoints, web_chat_urls=web_chat_urls) if not args.disable_tui else None
|
|
topology_viz = TopologyViz(chatgpt_api_endpoints=chatgpt_api_endpoints, web_chat_urls=web_chat_urls) if not args.disable_tui else None
|
|
node = StandardNode(
|
|
node = StandardNode(
|
|
args.node_id,
|
|
args.node_id,
|