gabykim's picture
gradio chat entrypoint moved to cli
ee1878f
raw
history blame
3.32 kB
"""Argument parsing for KnowLang CLI."""
import argparse
from pathlib import Path
from typing import Union
from knowlang.cli.commands.chat import chat_command
from knowlang.cli.types import ChatCommandArgs, ParseCommandArgs, BaseCommandArgs
from knowlang.cli.commands.parse import parse_command
def _convert_to_args(parsed_args: argparse.Namespace) -> Union[ParseCommandArgs, BaseCommandArgs]:
"""Convert parsed namespace to typed arguments."""
base_args = {
"verbose": parsed_args.verbose,
"config": parsed_args.config if hasattr(parsed_args, "config") else None
}
if parsed_args.command == "parse":
return ParseCommandArgs(
**base_args,
path=parsed_args.path,
output=parsed_args.output,
command="parse"
)
elif parsed_args.command == "chat":
return ChatCommandArgs(
**base_args,
command="chat",
port=parsed_args.port,
share=parsed_args.share,
server_port=parsed_args.server_port,
server_name=parsed_args.server_name
)
return BaseCommandArgs(**base_args)
def create_parser() -> argparse.ArgumentParser:
"""Create the main argument parser."""
parser = argparse.ArgumentParser(
description="KnowLang - Code Understanding Assistant",
formatter_class=argparse.RawDescriptionHelpFormatter
)
# Global options
parser.add_argument(
"--verbose", "-v",
action="store_true",
help="Enable verbose output"
)
parser.add_argument(
"--config",
type=Path,
help="Path to custom configuration file",
default=None
)
# Subcommands
subparsers = parser.add_subparsers(
title="commands",
description="Available commands",
dest="command"
)
subparsers.required = True
# Parse command
parse_parser = subparsers.add_parser(
"parse",
help="Parse and index a codebase"
)
parse_parser.add_argument(
"--output",
type=str,
choices=["table", "json"],
default="table",
help="Output format (default: table)"
)
parse_parser.add_argument(
"path",
type=Path,
help="Path to codebase directory or repository URL"
)
parse_parser.set_defaults(func=parse_command)
# Chat command
chat_parser = subparsers.add_parser(
"chat",
help="Launch the chat interface"
)
chat_parser.add_argument(
"--port",
type=int,
help="Port to run the interface on"
)
chat_parser.add_argument(
"--share",
action="store_true",
help="Create a shareable link"
)
chat_parser.add_argument(
"--server-port",
type=int,
help="Port to run the server on (if different from --port)"
)
chat_parser.add_argument(
"--server-name",
type=str,
help="Server name to listen on (default: 0.0.0.0)"
)
chat_parser.set_defaults(func=chat_command)
return parser
def parse_args() -> Union[ParseCommandArgs, BaseCommandArgs]:
"""Parse command line arguments into typed objects."""
parser = create_parser()
return _convert_to_args(parser.parse_args())