diff --git a/Makefile b/Makefile index 29be6bd..00d8c65 100644 --- a/Makefile +++ b/Makefile @@ -19,15 +19,35 @@ test: poetry run pytest tests build: - poetry build + @echo "Building SDK..." + cd sdk && poetry build + @echo "Building CLI..." + cd cli/highflame_cli && poetry build + +build-sdk: + cd sdk && poetry build + +build-cli: + cd cli/highflame_cli && poetry build clean: rm -rf dist/ rm -rf build/ rm -rf *.egg-info/ + rm -rf sdk/dist/ sdk/build/ sdk/*.egg-info/ + rm -rf cli/highflame_cli/dist/ cli/highflame_cli/build/ cli/highflame_cli/*.egg-info/ install: - poetry install + @echo "Installing SDK..." + cd sdk && poetry install + @echo "Installing CLI..." + cd cli/highflame_cli && poetry install + +install-sdk: + cd sdk && poetry install + +install-cli: + cd cli/highflame_cli && poetry install install-wheel: - pip install dist/highflame_sdk-*.whl --force-reinstall + pip install sdk/dist/highflame-*.whl --force-reinstall diff --git a/README.md b/README.md index f2d242f..468c788 100644 --- a/README.md +++ b/README.md @@ -17,12 +17,24 @@ Highflame Documentation: [https://docs.highflame.ai/](https://docs.highflame.ai/ ### Installation +**SDK:** + ```bash pip install highflame ``` +**CLI:** + +```bash +pip install highflame-cli +``` + +> **Note:** The CLI package (`highflame-cli`) depends on the SDK package (`highflame`), so installing the CLI will automatically install the SDK as well. + ### Basic Usage +**Using the SDK:** + ```python from highflame import Highflame, Config import os @@ -38,6 +50,22 @@ response = client.query_route( ) ``` +**Using the CLI:** + +```bash +# Authenticate +highflame-cli auth + +# List routes +highflame-cli route list + +# Create a route +highflame-cli route create --name my_route --file route.json + +# Get route details +highflame-cli route get --name my_route +``` + --- ## What Changed @@ -549,7 +577,7 @@ logger.setLevel(logging.INFO) ### CLI Improvements -- [ ] **CLI Separation**: Separate CLI into its own `highflame-cli` package. Create separate repository, package, and PyPI distribution. +- [x] **CLI Separation**: Separate CLI into its own `highflame-cli` package. Package structure separated, ready for independent distribution. - [ ] **CLI Error Messages**: Improve CLI error messages with troubleshooting hints and actionable guidance. diff --git a/highflame_cli/__init__.py b/cli/highflame_cli/__init__.py similarity index 100% rename from highflame_cli/__init__.py rename to cli/highflame_cli/__init__.py diff --git a/highflame_cli/__main__.py b/cli/highflame_cli/__main__.py similarity index 100% rename from highflame_cli/__main__.py rename to cli/highflame_cli/__main__.py diff --git a/highflame_cli/_internal/__init__.py b/cli/highflame_cli/_internal/__init__.py similarity index 100% rename from highflame_cli/_internal/__init__.py rename to cli/highflame_cli/_internal/__init__.py diff --git a/highflame_cli/_internal/commands.py b/cli/highflame_cli/_internal/commands.py similarity index 99% rename from highflame_cli/_internal/commands.py rename to cli/highflame_cli/_internal/commands.py index 419c884..68dd73f 100644 --- a/highflame_cli/_internal/commands.py +++ b/cli/highflame_cli/_internal/commands.py @@ -1,6 +1,8 @@ import json from pathlib import Path +# CLI imports from the public SDK API - this ensures CLI works as a separate package +# that depends on the highflame SDK package from highflame.client import Highflame from highflame.exceptions import ( BadRequest, diff --git a/highflame_cli/cli.py b/cli/highflame_cli/cli.py similarity index 100% rename from highflame_cli/cli.py rename to cli/highflame_cli/cli.py diff --git a/CLI_PYPROJECT.toml b/cli/highflame_cli/pyproject.toml similarity index 69% rename from CLI_PYPROJECT.toml rename to cli/highflame_cli/pyproject.toml index e4ac10b..2a476d4 100644 --- a/CLI_PYPROJECT.toml +++ b/cli/highflame_cli/pyproject.toml @@ -1,16 +1,13 @@ -# This file shows what the future CLI-only package pyproject.toml would look like -# Once CLI is separated into its own package: highflame-cli -# This serves as a reference for the CLI package separation plan - [tool.poetry] name = "highflame-cli" version = "2.0.0" description = "Command-line interface for Highflame - LLM Gateway Management" authors = ["Sharath Rajasekar "] -readme = "README.md" +readme = "../../README.md" license = "Apache-2.0" homepage = "https://highflame.com" -repository = "https://github.com/highflame-ai/highflame-cli" +repository = "https://github.com/highflame-ai/highflame-python" +keywords = ["cli", "llm", "gateway", "ai", "command-line"] packages = [ { include = "highflame_cli" }, ] diff --git a/highflame/__init__.py b/sdk/highflame/__init__.py similarity index 100% rename from highflame/__init__.py rename to sdk/highflame/__init__.py diff --git a/highflame/chat_completions.py b/sdk/highflame/chat_completions.py similarity index 100% rename from highflame/chat_completions.py rename to sdk/highflame/chat_completions.py diff --git a/highflame/client.py b/sdk/highflame/client.py similarity index 100% rename from highflame/client.py rename to sdk/highflame/client.py diff --git a/highflame/exceptions.py b/sdk/highflame/exceptions.py similarity index 100% rename from highflame/exceptions.py rename to sdk/highflame/exceptions.py diff --git a/highflame/model_adapters.py b/sdk/highflame/model_adapters.py similarity index 100% rename from highflame/model_adapters.py rename to sdk/highflame/model_adapters.py diff --git a/highflame/models.py b/sdk/highflame/models.py similarity index 100% rename from highflame/models.py rename to sdk/highflame/models.py diff --git a/highflame/py.typed b/sdk/highflame/py.typed similarity index 100% rename from highflame/py.typed rename to sdk/highflame/py.typed diff --git a/highflame/services/aispm_service.py b/sdk/highflame/services/aispm_service.py similarity index 100% rename from highflame/services/aispm_service.py rename to sdk/highflame/services/aispm_service.py diff --git a/highflame/services/gateway_service.py b/sdk/highflame/services/gateway_service.py similarity index 100% rename from highflame/services/gateway_service.py rename to sdk/highflame/services/gateway_service.py diff --git a/highflame/services/guardrails_service.py b/sdk/highflame/services/guardrails_service.py similarity index 100% rename from highflame/services/guardrails_service.py rename to sdk/highflame/services/guardrails_service.py diff --git a/highflame/services/modelspec_service.py b/sdk/highflame/services/modelspec_service.py similarity index 100% rename from highflame/services/modelspec_service.py rename to sdk/highflame/services/modelspec_service.py diff --git a/highflame/services/provider_service.py b/sdk/highflame/services/provider_service.py similarity index 100% rename from highflame/services/provider_service.py rename to sdk/highflame/services/provider_service.py diff --git a/highflame/services/route_service.py b/sdk/highflame/services/route_service.py similarity index 100% rename from highflame/services/route_service.py rename to sdk/highflame/services/route_service.py diff --git a/highflame/services/secret_service.py b/sdk/highflame/services/secret_service.py similarity index 100% rename from highflame/services/secret_service.py rename to sdk/highflame/services/secret_service.py diff --git a/highflame/services/template_service.py b/sdk/highflame/services/template_service.py similarity index 100% rename from highflame/services/template_service.py rename to sdk/highflame/services/template_service.py diff --git a/highflame/services/trace_service.py b/sdk/highflame/services/trace_service.py similarity index 100% rename from highflame/services/trace_service.py rename to sdk/highflame/services/trace_service.py diff --git a/highflame/tracing_setup.py b/sdk/highflame/tracing_setup.py similarity index 100% rename from highflame/tracing_setup.py rename to sdk/highflame/tracing_setup.py diff --git a/pyproject.toml b/sdk/pyproject.toml similarity index 92% rename from pyproject.toml rename to sdk/pyproject.toml index 0d140ad..7d3c2af 100644 --- a/pyproject.toml +++ b/sdk/pyproject.toml @@ -3,19 +3,15 @@ name = "highflame" version = "2.0.0" description = "Python SDK for Highflame - Enterprise-Scale LLM Gateway" authors = ["Sharath Rajasekar "] -readme = "README.md" +readme = "../README.md" license = "Apache-2.0" homepage = "https://highflame.com" repository = "https://github.com/highflame-ai/highflame-python" keywords = ["llm", "gateway", "ai", "api", "routing"] packages = [ - { include = "highflame_cli" }, { include = "highflame" }, ] -[tool.poetry.scripts] -highflame-cli = "highflame_cli.cli:main" - [tool.poetry.dependencies] python = "^3.9" httpx = "^0.27.2"