fastapi-fullstack 0.1.10__tar.gz → 0.1.12__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 (257) hide show
  1. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/PKG-INFO +1 -1
  2. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/fastapi_gen/config.py +18 -2
  3. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/fastapi_gen/prompts.py +8 -4
  4. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/pyproject.toml +4 -1
  5. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/VARIABLES.md +6 -2
  6. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/cookiecutter.json +2 -0
  7. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/CLAUDE.md +2 -0
  8. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +20 -0
  9. fastapi_fullstack-0.1.12/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +563 -0
  10. fastapi_fullstack-0.1.12/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +371 -0
  11. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +903 -0
  12. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +20 -0
  13. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +2 -0
  14. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +22 -4
  15. fastapi_fullstack-0.1.12/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +38 -0
  16. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +164 -17
  17. fastapi_fullstack-0.1.12/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +313 -0
  18. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +16 -1
  19. fastapi_fullstack-0.1.10/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +0 -18
  20. fastapi_fullstack-0.1.10/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +0 -165
  21. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/.gitignore +0 -0
  22. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/LICENSE +0 -0
  23. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/README.md +0 -0
  24. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/fastapi_gen/__init__.py +0 -0
  25. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/fastapi_gen/cli.py +0 -0
  26. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/fastapi_gen/generator.py +0 -0
  27. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/hooks/post_gen_project.py +0 -0
  28. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/.env.prod.example +0 -0
  29. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -0
  30. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/.gitignore +0 -0
  31. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -0
  32. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/AGENTS.md +0 -0
  33. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/Makefile +0 -0
  34. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/README.md +0 -0
  35. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
  36. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/.env.example +0 -0
  37. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
  38. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -0
  39. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -0
  40. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
  41. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
  42. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
  43. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
  44. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/admin.py +0 -0
  45. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +0 -0
  46. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +0 -0
  47. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +0 -0
  48. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -0
  49. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +0 -0
  50. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
  51. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +0 -0
  52. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -0
  53. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
  54. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
  55. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +0 -0
  56. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -0
  57. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -0
  58. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -0
  59. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +0 -0
  60. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -0
  61. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -0
  62. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -0
  63. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -0
  64. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/ws.py +0 -0
  65. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
  66. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
  67. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
  68. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
  69. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -0
  70. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
  71. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -0
  72. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
  73. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
  74. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +0 -0
  75. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
  76. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -0
  77. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
  78. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -0
  79. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
  80. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
  81. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
  82. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -0
  83. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
  84. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
  85. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +0 -0
  86. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +0 -0
  87. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +0 -0
  88. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -0
  89. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -0
  90. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -0
  91. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
  92. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -0
  93. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/__init__.py +0 -0
  94. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/base.py +0 -0
  95. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +0 -0
  96. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py +0 -0
  97. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +0 -0
  98. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +0 -0
  99. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
  100. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +0 -0
  101. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -0
  102. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +0 -0
  103. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
  104. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +0 -0
  105. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +0 -0
  106. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
  107. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
  108. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -0
  109. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
  110. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -0
  111. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +0 -0
  112. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +0 -0
  113. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -0
  114. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -0
  115. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -0
  116. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -0
  117. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +0 -0
  118. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -0
  119. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
  120. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -0
  121. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -0
  122. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -0
  123. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -0
  124. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
  125. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
  126. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
  127. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
  128. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
  129. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -0
  130. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +0 -0
  131. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
  132. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_items.py +0 -0
  133. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +0 -0
  134. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
  135. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
  136. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +0 -0
  137. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
  138. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
  139. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
  140. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_pipelines.py +0 -0
  141. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
  142. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
  143. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -0
  144. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -0
  145. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +0 -0
  146. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
  147. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +0 -0
  148. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docker-compose.yml +0 -0
  149. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -0
  150. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docs/architecture.md +0 -0
  151. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docs/patterns.md +0 -0
  152. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docs/testing.md +0 -0
  153. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +0 -0
  154. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
  155. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
  156. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
  157. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -0
  158. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
  159. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
  160. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
  161. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
  162. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +0 -0
  163. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
  164. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
  165. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +0 -0
  166. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +0 -0
  167. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -0
  168. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/package.json +0 -0
  169. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
  170. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
  171. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +0 -0
  172. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +0 -0
  173. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +0 -0
  174. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +0 -0
  175. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +0 -0
  176. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +0 -0
  177. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +0 -0
  178. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +0 -0
  179. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +0 -0
  180. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +0 -0
  181. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -0
  182. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -0
  183. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -0
  184. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -0
  185. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -0
  186. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -0
  187. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -0
  188. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -0
  189. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -0
  190. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -0
  191. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +0 -0
  192. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +0 -0
  193. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -0
  194. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +0 -0
  195. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +0 -0
  196. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +0 -0
  197. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +0 -0
  198. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +0 -0
  199. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +0 -0
  200. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +0 -0
  201. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +0 -0
  202. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/local-conversation-sidebar.tsx +0 -0
  203. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +0 -0
  204. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +0 -0
  205. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -0
  206. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
  207. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -0
  208. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +0 -0
  209. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
  210. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +0 -0
  211. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -0
  212. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -0
  213. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -0
  214. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -0
  215. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -0
  216. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -0
  217. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -0
  218. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -0
  219. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -0
  220. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -0
  221. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +0 -0
  222. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +0 -0
  223. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -0
  224. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -0
  225. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -0
  226. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -0
  227. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -0
  228. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -0
  229. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -0
  230. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -0
  231. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
  232. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -0
  233. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -0
  234. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -0
  235. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +0 -0
  236. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -0
  237. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -0
  238. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -0
  239. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/local-chat-store.ts +0 -0
  240. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +0 -0
  241. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -0
  242. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
  243. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -0
  244. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +0 -0
  245. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -0
  246. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -0
  247. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
  248. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +0 -0
  249. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -0
  250. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -0
  251. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +0 -0
  252. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +0 -0
  253. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +0 -0
  254. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -0
  255. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +0 -0
  256. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +0 -0
  257. {fastapi_fullstack-0.1.10 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/nginx/ssl/.gitkeep +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-fullstack
3
- Version: 0.1.10
3
+ Version: 0.1.12
4
4
  Summary: Full-stack FastAPI + Next.js template generator with PydanticAI/LangChain agents, WebSocket streaming, 20+ enterprise integrations, and Logfire/LangSmith observability. Ship AI apps fast. CLI tool to generate production-ready FastAPI + Next.js projects with AI agents, auth, and observability.
5
5
  Project-URL: Homepage, https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template
6
6
  Project-URL: Documentation, https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template#readme
@@ -89,6 +89,8 @@ class AIFrameworkType(str, Enum):
89
89
 
90
90
  PYDANTIC_AI = "pydantic_ai"
91
91
  LANGCHAIN = "langchain"
92
+ LANGGRAPH = "langgraph"
93
+ CREWAI = "crewai"
92
94
 
93
95
 
94
96
  class LLMProviderType(str, Enum):
@@ -177,7 +179,7 @@ class ProjectConfig(BaseModel):
177
179
  admin_require_auth: bool = True
178
180
  enable_websockets: bool = False
179
181
  enable_file_storage: bool = False
180
- enable_ai_agent: bool = False
182
+ enable_ai_agent: bool = True
181
183
  ai_framework: AIFrameworkType = AIFrameworkType.PYDANTIC_AI
182
184
  llm_provider: LLMProviderType = LLMProviderType.OPENAI
183
185
  enable_conversation_persistence: bool = False
@@ -206,7 +208,7 @@ class ProjectConfig(BaseModel):
206
208
  python_version: str = "3.12"
207
209
 
208
210
  # Frontend
209
- frontend: FrontendType = FrontendType.NONE
211
+ frontend: FrontendType = FrontendType.NEXTJS
210
212
  frontend_port: int = 3000
211
213
 
212
214
  # Backend
@@ -263,6 +265,18 @@ class ProjectConfig(BaseModel):
263
265
  and self.llm_provider == LLMProviderType.OPENROUTER
264
266
  ):
265
267
  raise ValueError("OpenRouter is not supported with LangChain")
268
+ if (
269
+ self.enable_ai_agent
270
+ and self.ai_framework == AIFrameworkType.LANGGRAPH
271
+ and self.llm_provider == LLMProviderType.OPENROUTER
272
+ ):
273
+ raise ValueError("OpenRouter is not supported with LangGraph")
274
+ if (
275
+ self.enable_ai_agent
276
+ and self.ai_framework == AIFrameworkType.CREWAI
277
+ and self.llm_provider == LLMProviderType.OPENROUTER
278
+ ):
279
+ raise ValueError("OpenRouter is not supported with CrewAI")
266
280
  if (
267
281
  self.enable_rate_limiting
268
282
  and self.rate_limit_storage == RateLimitStorageType.REDIS
@@ -345,6 +359,8 @@ class ProjectConfig(BaseModel):
345
359
  "ai_framework": self.ai_framework.value,
346
360
  "use_pydantic_ai": self.ai_framework == AIFrameworkType.PYDANTIC_AI,
347
361
  "use_langchain": self.ai_framework == AIFrameworkType.LANGCHAIN,
362
+ "use_langgraph": self.ai_framework == AIFrameworkType.LANGGRAPH,
363
+ "use_crewai": self.ai_framework == AIFrameworkType.CREWAI,
348
364
  "llm_provider": self.llm_provider.value,
349
365
  "use_openai": self.llm_provider == LLMProviderType.OPENAI,
350
366
  "use_anthropic": self.llm_provider == LLMProviderType.ANTHROPIC,
@@ -310,7 +310,9 @@ def prompt_integrations() -> dict[str, bool]:
310
310
  questionary.Choice("Admin Panel (SQLAdmin)", value="admin_panel"),
311
311
  questionary.Choice("WebSockets", value="websockets"),
312
312
  questionary.Choice("File Storage (S3/MinIO)", value="file_storage"),
313
- questionary.Choice("AI Agent (PydanticAI/LangChain)", value="ai_agent"),
313
+ questionary.Choice(
314
+ "AI Agent (PydanticAI/LangGraph/CrewAI)", value="ai_agent", checked=True
315
+ ),
314
316
  questionary.Choice("Webhooks (outbound events)", value="webhooks"),
315
317
  questionary.Choice("Example CRUD (Item model)", value="example_crud", checked=True),
316
318
  questionary.Choice("CORS middleware", value="cors", checked=True),
@@ -485,8 +487,8 @@ def prompt_frontend() -> FrontendType:
485
487
  console.print()
486
488
 
487
489
  choices = [
488
- questionary.Choice("None (API only)", value=FrontendType.NONE),
489
490
  questionary.Choice("Next.js 15 (App Router, TypeScript, Bun)", value=FrontendType.NEXTJS),
491
+ questionary.Choice("None (API only)", value=FrontendType.NONE),
490
492
  ]
491
493
 
492
494
  return cast(
@@ -530,6 +532,8 @@ def prompt_ai_framework() -> AIFrameworkType:
530
532
  choices = [
531
533
  questionary.Choice("PydanticAI (recommended)", value=AIFrameworkType.PYDANTIC_AI),
532
534
  questionary.Choice("LangChain", value=AIFrameworkType.LANGCHAIN),
535
+ questionary.Choice("LangGraph (ReAct agent)", value=AIFrameworkType.LANGGRAPH),
536
+ questionary.Choice("CrewAI (multi-agent crews)", value=AIFrameworkType.CREWAI),
533
537
  ]
534
538
 
535
539
  return cast(
@@ -549,7 +553,7 @@ def prompt_llm_provider(ai_framework: AIFrameworkType) -> LLMProviderType:
549
553
 
550
554
  Args:
551
555
  ai_framework: The selected AI framework. OpenRouter is only
552
- available for PydanticAI.
556
+ available for PydanticAI (not LangChain, LangGraph, or CrewAI).
553
557
  """
554
558
  console.print()
555
559
  console.print("[bold cyan]LLM Provider[/]")
@@ -560,7 +564,7 @@ def prompt_llm_provider(ai_framework: AIFrameworkType) -> LLMProviderType:
560
564
  questionary.Choice("Anthropic (claude-sonnet-4-5)", value=LLMProviderType.ANTHROPIC),
561
565
  ]
562
566
 
563
- # OpenRouter only available for PydanticAI
567
+ # OpenRouter only available for PydanticAI (not LangChain, LangGraph, or CrewAI)
564
568
  if ai_framework == AIFrameworkType.PYDANTIC_AI:
565
569
  choices.append(
566
570
  questionary.Choice("OpenRouter (multi-provider)", value=LLMProviderType.OPENROUTER)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-fullstack"
3
- version = "0.1.10"
3
+ version = "0.1.12"
4
4
  description = "Full-stack FastAPI + Next.js template generator with PydanticAI/LangChain agents, WebSocket streaming, 20+ enterprise integrations, and Logfire/LangSmith observability. Ship AI apps fast. CLI tool to generate production-ready FastAPI + Next.js projects with AI agents, auth, and observability."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -149,6 +149,9 @@ testpaths = ["tests"]
149
149
  python_files = ["test_*.py"]
150
150
  python_functions = ["test_*"]
151
151
  addopts = "-v --tb=short"
152
+ markers = [
153
+ "slow: marks tests as slow (deselect with '-m \"not slow\"')",
154
+ ]
152
155
 
153
156
  [tool.coverage.run]
154
157
  source = ["fastapi_gen"]
@@ -187,9 +187,11 @@ These variables are set automatically by the generator.
187
187
  | Variable | Type | Default | Description | Dependencies |
188
188
  |----------|------|---------|-------------|--------------|
189
189
  | `enable_ai_agent` | bool | `false` | Enable AI agent functionality | - |
190
- | `ai_framework` | enum | `"pydantic_ai"` | AI framework. Values: `pydantic_ai`, `langchain` | Requires `enable_ai_agent` |
190
+ | `ai_framework` | enum | `"pydantic_ai"` | AI framework. Values: `pydantic_ai`, `langchain`, `langgraph`, `crewai` | Requires `enable_ai_agent` |
191
191
  | `use_pydantic_ai` | bool | `true` | PydanticAI is selected | Computed from `ai_framework` |
192
192
  | `use_langchain` | bool | `false` | LangChain is selected | Computed from `ai_framework` |
193
+ | `use_langgraph` | bool | `false` | LangGraph (ReAct agent) is selected | Computed from `ai_framework` |
194
+ | `use_crewai` | bool | `false` | CrewAI (multi-agent crews) is selected | Computed from `ai_framework` |
193
195
  | `llm_provider` | enum | `"openai"` | LLM provider. Values: `openai`, `anthropic`, `openrouter` | Requires `enable_ai_agent` |
194
196
  | `use_openai` | bool | `true` | OpenAI is selected | Computed from `llm_provider` |
195
197
  | `use_anthropic` | bool | `false` | Anthropic is selected | Computed from `llm_provider` |
@@ -198,7 +200,9 @@ These variables are set automatically by the generator.
198
200
 
199
201
  **Notes:**
200
202
  - PydanticAI uses `iter()` for full event streaming over WebSocket
201
- - OpenRouter with LangChain is not supported
203
+ - LangGraph implements a ReAct (Reasoning + Acting) agent pattern with graph-based architecture
204
+ - CrewAI enables multi-agent teams that collaborate on complex tasks
205
+ - OpenRouter with LangChain, LangGraph, or CrewAI is not supported
202
206
 
203
207
  ---
204
208
 
@@ -61,6 +61,8 @@
61
61
  "ai_framework": "pydantic_ai",
62
62
  "use_pydantic_ai": true,
63
63
  "use_langchain": false,
64
+ "use_langgraph": false,
65
+ "use_crewai": false,
64
66
  "llm_provider": "openai",
65
67
  "use_openai": true,
66
68
  "use_anthropic": false,
@@ -12,6 +12,8 @@
12
12
  {%- if cookiecutter.enable_redis %}, Redis{%- endif %}
13
13
  {%- if cookiecutter.enable_ai_agent and cookiecutter.use_pydantic_ai %}, PydanticAI{%- endif %}
14
14
  {%- if cookiecutter.enable_ai_agent and cookiecutter.use_langchain %}, LangChain{%- endif %}
15
+ {%- if cookiecutter.enable_ai_agent and cookiecutter.use_langgraph %}, LangGraph{%- endif %}
16
+ {%- if cookiecutter.enable_ai_agent and cookiecutter.use_crewai %}, CrewAI{%- endif %}
15
17
  {%- if cookiecutter.use_celery %}, Celery{%- endif %}
16
18
  {%- if cookiecutter.use_taskiq %}, Taskiq{%- endif %}
17
19
  {%- if cookiecutter.use_frontend %}, Next.js 15{%- endif %}
@@ -18,6 +18,26 @@ Tools are defined in the tools/ subdirectory.
18
18
  from app.agents.langchain_assistant import AgentContext, AgentState, LangChainAssistant
19
19
 
20
20
  __all__ = ["LangChainAssistant", "AgentContext", "AgentState"]
21
+ {%- elif cookiecutter.enable_ai_agent and cookiecutter.use_langgraph %}
22
+ """AI Agents module using LangGraph.
23
+
24
+ This module contains a ReAct agent built with LangGraph.
25
+ Tools are defined in the tools/ subdirectory.
26
+ """
27
+
28
+ from app.agents.langgraph_assistant import AgentContext, AgentState, LangGraphAssistant
29
+
30
+ __all__ = ["LangGraphAssistant", "AgentContext", "AgentState"]
31
+ {%- elif cookiecutter.enable_ai_agent and cookiecutter.use_crewai %}
32
+ """AI Agents module using CrewAI.
33
+
34
+ This module contains a multi-agent crew built with CrewAI.
35
+ Agents work together in a team to accomplish complex tasks.
36
+ """
37
+
38
+ from app.agents.crewai_assistant import CrewAIAssistant, CrewConfig, CrewContext
39
+
40
+ __all__ = ["CrewAIAssistant", "CrewConfig", "CrewContext"]
21
41
  {%- else %}
22
42
  """AI Agents - not configured."""
23
43
  {%- endif %}