alms-cli 0.1.6__tar.gz → 0.1.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. {alms_cli-0.1.6 → alms_cli-0.1.8}/PKG-INFO +1 -1
  2. {alms_cli-0.1.6 → alms_cli-0.1.8}/pyproject.toml +1 -1
  3. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/__init__.py +1 -1
  4. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/commands/init.py +21 -18
  5. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/main.py +8 -3
  6. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/main.py.j2 +14 -12
  7. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/config/settings.py.j2 +2 -1
  8. alms_cli-0.1.8/src/alms_cli/templates/files/src/providers/ai/factory.py.j2 +9 -0
  9. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/providers/ai/langchain_model_loader.py.j2 +3 -3
  10. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/conftest.py.j2 +3 -2
  11. alms_cli-0.1.6/src/alms_cli/templates/files/src/providers/ai/factory.py.j2 +0 -10
  12. {alms_cli-0.1.6 → alms_cli-0.1.8}/.gitignore +0 -0
  13. {alms_cli-0.1.6 → alms_cli-0.1.8}/LICENSE +0 -0
  14. {alms_cli-0.1.6 → alms_cli-0.1.8}/README.md +0 -0
  15. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/__main__.py +0 -0
  16. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/commands/__init__.py +0 -0
  17. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/commands/info.py +0 -0
  18. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/__init__.py +0 -0
  19. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/.env.example.j2 +0 -0
  20. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/.github/ISSUE_TEMPLATE/bug_report.yml.j2 +0 -0
  21. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/.github/ISSUE_TEMPLATE/feature_request.yml.j2 +0 -0
  22. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/.github/dependabot.yml.j2 +0 -0
  23. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/.github/pull_request_template.md.j2 +0 -0
  24. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/.github/workflows/ci.yml.j2 +0 -0
  25. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/.gitignore.j2 +0 -0
  26. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/Dockerfile.j2 +0 -0
  27. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/README.md.j2 +0 -0
  28. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/alembic/README.j2 +0 -0
  29. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/alembic/env.py.j2 +0 -0
  30. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/alembic/script.py.mako.j2 +0 -0
  31. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/alembic.ini.j2 +0 -0
  32. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docker-compose.yml.j2 +0 -0
  33. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docs/01-System-Design.md.j2 +0 -0
  34. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docs/02-Design-Patterns.md.j2 +0 -0
  35. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docs/03-Database-Design.md.j2 +0 -0
  36. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docs/04-Tech-Stack.md.j2 +0 -0
  37. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docs/05-Project-Structure.md.j2 +0 -0
  38. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docs/06-API-Documentation.md.j2 +0 -0
  39. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docs/07-Setup-Installation.md.j2 +0 -0
  40. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/docs/08-Contribution-Guide.md.j2 +0 -0
  41. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/pyproject.toml.j2 +0 -0
  42. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/pytest.ini.j2 +0 -0
  43. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/rules/project_rules.md.j2 +0 -0
  44. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/agents/agent_manager/agent.py.j2 +0 -0
  45. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/agents/prompts/sample_agent_prompt.py.j2 +0 -0
  46. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/endpoints/v1/dependencies.py.j2 +0 -0
  47. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/endpoints/v1/health.py.j2 +0 -0
  48. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/endpoints/v1/metrics.py.j2 +0 -0
  49. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/endpoints/v1/routers.py.j2 +0 -0
  50. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/endpoints/v1/sample_agent.py.j2 +0 -0
  51. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/endpoints/v1/sample_di.py.j2 +0 -0
  52. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/endpoints/v1/schemas/base.py.j2 +0 -0
  53. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/endpoints/v1/schemas/sample.py.j2 +0 -0
  54. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/middlewares/error_handler.py.j2 +0 -0
  55. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/middlewares/logging.py.j2 +0 -0
  56. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/middlewares/observability.py.j2 +0 -0
  57. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/middlewares/security.py.j2 +0 -0
  58. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/api/router/routers.py.j2 +0 -0
  59. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/config/logs_config.py.j2 +0 -0
  60. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/core/exceptions.py.j2 +0 -0
  61. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/database/connection.py.j2 +0 -0
  62. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/database/repositories/base.py.j2 +0 -0
  63. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/database/repositories/sqlalchemy_repository.py.j2 +0 -0
  64. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/execution/actions/sample_action.py.j2 +0 -0
  65. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/execution/usecases/sample_usecase.py.j2 +0 -0
  66. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/observability/__init__.py.j2 +0 -0
  67. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/observability/metrics.py.j2 +0 -0
  68. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/observability/tracing.py.j2 +0 -0
  69. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/providers/ai/base.py.j2 +0 -0
  70. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/README.md.j2 +0 -0
  71. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/e2e/test_workflows.py.j2 +0 -0
  72. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/integration/test_full_stack.py.j2 +0 -0
  73. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/v1/test_agent.py.j2 +0 -0
  74. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/v1/test_health.py.j2 +0 -0
  75. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/v1/test_metrics.py.j2 +0 -0
  76. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/v1/test_metrics_endpoint.py.j2 +0 -0
  77. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/v1/test_observability_middleware.py.j2 +0 -0
  78. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/v1/test_sqlalchemy_repository.py.j2 +0 -0
  79. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/files/src/tests/v1/test_tracing.py.j2 +0 -0
  80. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/generator.py +0 -0
  81. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/profiles.py +0 -0
  82. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/templates/template_renderer.py +0 -0
  83. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/ui/__init__.py +0 -0
  84. {alms_cli-0.1.6 → alms_cli-0.1.8}/src/alms_cli/ui/components.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alms-cli
3
- Version: 0.1.6
3
+ Version: 0.1.8
4
4
  Summary: ALMS CLI - Beautiful project scaffolding tool for AI-first backends
5
5
  Project-URL: Homepage, https://github.com/KJ-AIML/alms
6
6
  Project-URL: Repository, https://github.com/KJ-AIML/alms
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "alms-cli"
3
- version = "0.1.6"
3
+ version = "0.1.8"
4
4
  description = "ALMS CLI - Beautiful project scaffolding tool for AI-first backends"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -1,3 +1,3 @@
1
1
  """ALMS CLI - Beautiful project scaffolding tool."""
2
2
 
3
- __version__ = "0.1.6"
3
+ __version__ = "0.1.8"
@@ -26,20 +26,22 @@ from alms_cli.templates import (
26
26
 
27
27
  console = Console()
28
28
 
29
- custom_style = Style([
30
- ("qmark", "fg:#FFFFFF"),
31
- ("question", "fg:#FFFFFF nobold"),
32
- ("answer", "fg:#FFFFFF"),
33
- ("pointer", "fg:#22C55E nobold"),
34
- ("highlighted", "fg:#FFFFFF nobold"),
35
- ("selected", "fg:#FFFFFF nobold"),
36
- ("separator", "fg:#666666"),
37
- ("instruction", "fg:#888888"),
38
- ("text", "fg:#FFFFFF nobold"),
39
- ("disabled", "fg:#666666 italic"),
40
- ("checkbox", "fg:#666666 nobold"),
41
- ("checkbox.selected", "fg:#22C55E nobold"),
42
- ])
29
+ custom_style = Style(
30
+ [
31
+ ("qmark", "fg:#FFFFFF"),
32
+ ("question", "fg:#FFFFFF nobold"),
33
+ ("answer", "fg:#FFFFFF"),
34
+ ("pointer", "fg:#22C55E nobold"),
35
+ ("highlighted", "fg:#FFFFFF nobold"),
36
+ ("selected", "fg:#FFFFFF nobold"),
37
+ ("separator", "fg:#666666"),
38
+ ("instruction", "fg:#888888"),
39
+ ("text", "fg:#FFFFFF nobold"),
40
+ ("disabled", "fg:#666666 italic"),
41
+ ("checkbox", "fg:#666666 nobold"),
42
+ ("checkbox.selected", "fg:#22C55E nobold"),
43
+ ]
44
+ )
43
45
 
44
46
  VALID_PROFILES = list(PROFILE_CAPABILITIES.keys())
45
47
 
@@ -65,7 +67,9 @@ def init_command(
65
67
  "Project name:",
66
68
  default="my-alms-project",
67
69
  style=custom_style,
68
- validate=lambda x: len(x) > 0 and x.replace("-", "").replace("_", "").isalnum(),
70
+ validate=lambda x: (
71
+ len(x) > 0 and x.replace("-", "").replace("_", "").isalnum()
72
+ ),
69
73
  ).ask()
70
74
 
71
75
  if not name:
@@ -114,8 +118,7 @@ def init_command(
114
118
  selected = questionary.checkbox(
115
119
  "Add capabilities to core-api:",
116
120
  choices=[
117
- questionary.Choice(title=fn, checked=de)
118
- for fn, de in feature_choices
121
+ questionary.Choice(title=fn, checked=de) for fn, de in feature_choices
119
122
  ],
120
123
  style=custom_style,
121
124
  instruction="(Use arrow keys to move, <space> to select)",
@@ -182,4 +185,4 @@ def init_command(
182
185
  border_style="green",
183
186
  )
184
187
  )
185
- console.print()
188
+ console.print()
@@ -19,16 +19,21 @@ console = Console()
19
19
  app.command(name="init")(init_command)
20
20
  app.add_typer(info_app, name="info")
21
21
 
22
+
22
23
  @app.callback(invoke_without_command=True)
23
24
  def main(ctx: typer.Context):
24
25
  """ALMS CLI - AI-First Backend Project Scaffolding"""
25
26
  if ctx.invoked_subcommand:
26
27
  return
27
-
28
+
28
29
  console.print()
29
30
  console.print("[bold blue]╔══════════════════════════════════════════╗[/bold blue]")
30
- console.print("[bold blue]║[/bold blue] [bold white]ALMS CLI[/bold white] [bold blue]║[/bold blue]")
31
- console.print("[bold blue]║[/bold blue] [dim]AI-First Backend Project Scaffolding[/dim] [bold blue]║[/bold blue]")
31
+ console.print(
32
+ "[bold blue]║[/bold blue] [bold white]ALMS CLI[/bold white] [bold blue]║[/bold blue]"
33
+ )
34
+ console.print(
35
+ "[bold blue]║[/bold blue] [dim]AI-First Backend Project Scaffolding[/dim] [bold blue]║[/bold blue]"
36
+ )
32
37
  console.print("[bold blue]╚══════════════════════════════════════════╝[/bold blue]")
33
38
  console.print()
34
39
  console.print(f"[dim]Version: {__version__}[/dim]")
@@ -47,13 +47,25 @@ def create_app() -> FastAPI:
47
47
  app.add_middleware(ErrorHandlerMiddleware)
48
48
  app.add_middleware(
49
49
  CORSMiddleware,
50
- allow_origins=["*"],
50
+ allow_origins=settings.ALLOWED_HOSTS,
51
51
  allow_credentials=True,
52
52
  allow_methods=["*"],
53
53
  allow_headers=["*"],
54
54
  )
55
55
 
56
56
  app.include_router(api_router, prefix=settings.API_PREFIX)
57
+ {% if has_scalar %}
58
+
59
+ # Scalar API Documentation
60
+ try:
61
+ from scalar_fastapi import get_scalar_api_reference
62
+
63
+ @app.get("/docs", include_in_schema=False)
64
+ async def scalar_html():
65
+ return get_scalar_api_reference(openapi_url=app.openapi_url, title=app.title)
66
+ except ImportError:
67
+ pass
68
+ {% endif %}
57
69
  return app
58
70
 
59
71
 
@@ -66,14 +78,4 @@ if __name__ == "__main__":
66
78
  host=settings.SERVER_HOST,
67
79
  port=settings.SERVER_PORT,
68
80
  reload=settings.DEBUG,
69
- )
70
- {% if has_scalar %}
71
-
72
- try:
73
- from scalar_fastapi import get_scalar_api_reference
74
- @app.get("/docs", include_in_schema=False)
75
- async def scalar_html():
76
- return get_scalar_api_reference(openapi_url=app.openapi_url, title=app.title)
77
- except ImportError:
78
- pass
79
- {% endif %}
81
+ )
@@ -15,7 +15,8 @@ class Settings(BaseSettings):
15
15
  {% if has_ai %} AI_ENABLED: bool = False
16
16
  {% endif %}{% if has_db %} DATABASE_ENABLED: bool = True
17
17
  {% endif %}{% if has_redis %} REDIS_ENABLED: bool = False
18
- {% endif %}{% if has_ai %} OPENAI_API_KEY: str = ""
18
+ {% endif %}{% if has_ai %} MODEL_PROVIDER: str = "openai" # reserved for future provider selection; only "openai" is supported
19
+ OPENAI_API_KEY: str = ""
19
20
  OPENAI_MODEL_BASIC: str = "gpt-4o-mini"
20
21
  OPENAI_MODEL_REASONING: str = "gpt-4o"
21
22
  {% endif %}{% if has_db %} DATABASE_URL: str | None = None
@@ -0,0 +1,9 @@
1
+ """AI provider factory."""
2
+
3
+ from src.providers.ai.base import AIModelProvider
4
+ from src.providers.ai.langchain_model_loader import LangchainModelLoader
5
+
6
+
7
+ def get_ai_provider() -> AIModelProvider:
8
+ """Return the configured AI provider."""
9
+ return LangchainModelLoader()
@@ -5,8 +5,8 @@ from src.config.settings import settings
5
5
  from src.providers.ai.base import AIModelProvider
6
6
 
7
7
 
8
- class LangChainModelProvider(AIModelProvider):
9
- """LangChain AI model provider."""
8
+ class LangchainModelLoader(AIModelProvider):
9
+ """LangChain AI model loader."""
10
10
 
11
11
  def get_chat_model(self, tier: str = "basic"):
12
12
  """Get LLM instance."""
@@ -24,4 +24,4 @@ class LangChainModelProvider(AIModelProvider):
24
24
 
25
25
  def get_llm(model: str = "basic"):
26
26
  """Get LLM instance."""
27
- return LangChainModelProvider().get_chat_model(tier=model)
27
+ return LangchainModelLoader().get_chat_model(tier=model)
@@ -1,7 +1,7 @@
1
1
  """Pytest configuration and fixtures."""
2
2
 
3
3
  import pytest
4
- from httpx import AsyncClient
4
+ from httpx import ASGITransport, AsyncClient
5
5
  from src.api.main import app
6
6
  {% if has_db %}try:
7
7
  from src.database.connection import get_db
@@ -12,7 +12,8 @@ except ImportError:
12
12
  @pytest.fixture
13
13
  async def client():
14
14
  """Create test client."""
15
- async with AsyncClient(app=app, base_url="http://test") as client:
15
+ transport = ASGITransport(app=app)
16
+ async with AsyncClient(transport=transport, base_url="http://test") as client:
16
17
  yield client
17
18
  {% if has_db %}
18
19
 
@@ -1,10 +0,0 @@
1
- """AI provider factory."""
2
-
3
- from functools import lru_cache
4
- from src.providers.ai.langchain_model_loader import LangChainModelProvider
5
-
6
-
7
- @lru_cache
8
- def get_ai_provider() -> LangChainModelProvider:
9
- """Return the configured AI provider."""
10
- return LangChainModelProvider()
File without changes
File without changes
File without changes