fastapi-fullstack 0.1.7__py3-none-any.whl → 0.1.15__py3-none-any.whl
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.
- {fastapi_fullstack-0.1.7.dist-info → fastapi_fullstack-0.1.15.dist-info}/METADATA +9 -2
- {fastapi_fullstack-0.1.7.dist-info → fastapi_fullstack-0.1.15.dist-info}/RECORD +71 -55
- fastapi_gen/__init__.py +6 -1
- fastapi_gen/cli.py +9 -0
- fastapi_gen/config.py +154 -2
- fastapi_gen/generator.py +34 -14
- fastapi_gen/prompts.py +172 -31
- fastapi_gen/template/VARIABLES.md +33 -4
- fastapi_gen/template/cookiecutter.json +10 -0
- fastapi_gen/template/hooks/post_gen_project.py +87 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/.env.prod.example +9 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +178 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/CLAUDE.md +3 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/README.md +334 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.env.example +32 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +10 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/admin.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +31 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +563 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +526 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +4 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +371 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +1472 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +3 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +7 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +44 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +7 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +42 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +262 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +76 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +118 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +158 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +185 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/main.py +29 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py +6 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +9 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +6 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +7 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +165 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +10 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +40 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +53 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +2 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +6 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +100 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.yml +39 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.env.example +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +28 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +1 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +22 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +23 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +138 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +242 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +242 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +57 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +63 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +242 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +28 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +12 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +59 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +23 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +225 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/nginx/ssl/.gitkeep +18 -0
- {fastapi_fullstack-0.1.7.dist-info → fastapi_fullstack-0.1.15.dist-info}/WHEEL +0 -0
- {fastapi_fullstack-0.1.7.dist-info → fastapi_fullstack-0.1.15.dist-info}/entry_points.txt +0 -0
- {fastapi_fullstack-0.1.7.dist-info → fastapi_fullstack-0.1.15.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-fullstack
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.15
|
|
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
|
|
@@ -186,6 +186,10 @@ cd my_ai_app
|
|
|
186
186
|
make install
|
|
187
187
|
```
|
|
188
188
|
|
|
189
|
+
> **Windows Users:** The `make` command requires GNU Make which is not available by default on Windows.
|
|
190
|
+
> Install via [Chocolatey](https://chocolatey.org/) (`choco install make`), use WSL, or run raw commands manually.
|
|
191
|
+
> Each generated project includes a "Manual Commands Reference" section in its README with all commands.
|
|
192
|
+
|
|
189
193
|
#### 2. Start the database
|
|
190
194
|
|
|
191
195
|
```bash
|
|
@@ -195,8 +199,10 @@ make docker-db
|
|
|
195
199
|
|
|
196
200
|
#### 3. Create and apply database migrations
|
|
197
201
|
|
|
202
|
+
> ⚠️ **Important:** Both commands are required! `db-migrate` creates the migration file, `db-upgrade` applies it to the database.
|
|
203
|
+
|
|
198
204
|
```bash
|
|
199
|
-
# Create initial migration (first time
|
|
205
|
+
# Create initial migration (REQUIRED first time)
|
|
200
206
|
make db-migrate
|
|
201
207
|
# Enter message: "Initial migration"
|
|
202
208
|
|
|
@@ -656,6 +662,7 @@ generated_at = "2024-12-21T10:30:00+00:00"
|
|
|
656
662
|
| Option | Values | Description |
|
|
657
663
|
|--------|--------|-------------|
|
|
658
664
|
| **Database** | `postgresql`, `mongodb`, `sqlite`, `none` | Async by default |
|
|
665
|
+
| **ORM** | `sqlalchemy`, `sqlmodel` | SQLModel for simplified syntax |
|
|
659
666
|
| **Auth** | `jwt`, `api_key`, `both`, `none` | JWT includes user management |
|
|
660
667
|
| **OAuth** | `none`, `google` | Social login |
|
|
661
668
|
| **AI Framework** | `pydantic_ai`, `langchain` | Choose your AI agent framework |
|
|
@@ -1,37 +1,41 @@
|
|
|
1
|
-
fastapi_gen/__init__.py,sha256=
|
|
2
|
-
fastapi_gen/cli.py,sha256=
|
|
3
|
-
fastapi_gen/config.py,sha256=
|
|
4
|
-
fastapi_gen/generator.py,sha256=
|
|
5
|
-
fastapi_gen/prompts.py,sha256=
|
|
6
|
-
fastapi_gen/template/VARIABLES.md,sha256=
|
|
7
|
-
fastapi_gen/template/cookiecutter.json,sha256=
|
|
8
|
-
fastapi_gen/template/hooks/post_gen_project.py,sha256=
|
|
9
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/.env.prod.example,sha256=
|
|
1
|
+
fastapi_gen/__init__.py,sha256=P8oQOck29jCkbJJfYdi4nmHDmr2DZ8TsyYzmailbC5o,271
|
|
2
|
+
fastapi_gen/cli.py,sha256=bE3zXuii9aJnHw6Gik6GSBYt9JvqUeEtrjlVfGf1rI0,15997
|
|
3
|
+
fastapi_gen/config.py,sha256=thc1faYZrwgqVRPPO9f_iAU2ftGmZQ3PwZatw-Y1PGQ,19882
|
|
4
|
+
fastapi_gen/generator.py,sha256=7N_4spT4xnfFRK5f2ZKiDmyje6G4bja0bIOmrnOi5xI,8297
|
|
5
|
+
fastapi_gen/prompts.py,sha256=6oNrYiaur-lGSCmxdgGMg24X8VTuuWP81pFU4JWsTFs,31780
|
|
6
|
+
fastapi_gen/template/VARIABLES.md,sha256=i6RT1b0B50T_Xdx3lzJdD9sYMvfZXcNDDuBQcyJMG4c,15069
|
|
7
|
+
fastapi_gen/template/cookiecutter.json,sha256=_8RCeDLDwIVO9MErKtJ0bhpr2OPSqOuWwa5ZA3uReSc,2957
|
|
8
|
+
fastapi_gen/template/hooks/post_gen_project.py,sha256=Mmx8PfRRYRwt6SYHeingh5fYVuTqh7SUvzAzLyuF4U4,17771
|
|
9
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/.env.prod.example,sha256=DmY3oxFJ8BsXN8Vd_agZJsqOssSNcLiVzQBPui4kV14,1637
|
|
10
10
|
fastapi_gen/template/{{cookiecutter.project_slug}}/.gitignore,sha256=InfbjRDaumEu7EsgiUiBEbDAb8uwcJV2j6Mt2Y1EcIU,1091
|
|
11
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml,sha256=-LsuRAEva_sH4dPs54qx3RY3YV_-_YF4UqdISpiaGKo,4835
|
|
11
12
|
fastapi_gen/template/{{cookiecutter.project_slug}}/AGENTS.md,sha256=bQAXADBmMDuxT57Fw8BwNnuN1lOGY4NLgDlXPycfvTE,1432
|
|
12
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/CLAUDE.md,sha256=
|
|
13
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/CLAUDE.md,sha256=gHn0tyMOpl7cGNvJWH_eSlD3mAdoyg5DZk9fE2r0Z1E,3204
|
|
13
14
|
fastapi_gen/template/{{cookiecutter.project_slug}}/Makefile,sha256=kgHIPSDVaTQrZZR__fVpziZZWzjtQDpfPYsTGOmJ6BM,9352
|
|
14
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/README.md,sha256=
|
|
15
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml,sha256=
|
|
15
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/README.md,sha256=_kw_6EbF2FdIVZxaDDqoEA2nksou23mGbETzNAsVIQo,34070
|
|
16
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml,sha256=w4lZB6cLaN7DA3xrBw7eDQ6CSMMO0joNPCkG_C9iYLE,6424
|
|
16
17
|
fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml,sha256=4EpP7yqPXUj8K_-fYEjZLZdBMsPuDZpblsamNQRxUgk,1069
|
|
17
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml,sha256=
|
|
18
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.yml,sha256=
|
|
18
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml,sha256=VLjV7fUpwBENC4MxrptoL-mGDoUMvNYtVdlmmRdED9k,16850
|
|
19
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.yml,sha256=e4IYnAmL4KTDM4G4PqJge84mFp9IJ75KkMzu6LeWvSk,7140
|
|
19
20
|
fastapi_gen/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml,sha256=MuR0odXZfg49c9q0eSqtSF5WzhneR8MMJhOzRM7-29Q,3789
|
|
20
21
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.dockerignore,sha256=_iRaYQqTvt8_2yhJZUp60PPaL5XLiUFg0OSa-J_9XIQ,523
|
|
21
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.env.example,sha256=
|
|
22
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.env.example,sha256=Bv8YfZTFUSOYTpqpFi1ejv4kP1N5KXxppdYhlGVUt0k,4488
|
|
22
23
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml,sha256=KL9PoA9VtzqzL3M99O_0JPyVh6uo_Pp52JflfzCK7qA,821
|
|
23
24
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/Dockerfile,sha256=cDwsmfoQzXZ220-oFZUmomfg0Plo-Z5sTRzoo2jxuiY,1529
|
|
24
25
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic.ini,sha256=Ol5tRsSTj20-C-9YOyQV17oEPFhPRi0aY859ZNc3cUs,872
|
|
25
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/pyproject.toml,sha256=
|
|
26
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/env.py,sha256=
|
|
26
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/pyproject.toml,sha256=T1IytshdwC4JXbI5pgMS97Xn6Amlnj-ajpHWy5HNU0A,5946
|
|
27
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/env.py,sha256=NjdHh6uPtdz-hp8b3Hjg-6rGxT0Ls8MTyj4BGc7NjpI,2163
|
|
27
28
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako,sha256=zYHP43PVmdbq194tp6gdxIhFFGUF2fecyFtL012Ig8A,752
|
|
28
29
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
30
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/__init__.py,sha256=vNnuyVXC5oZ3yq46meWLNhkUYlMgod70TgvWyvgNhBk,68
|
|
30
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/admin.py,sha256=
|
|
31
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/main.py,sha256
|
|
32
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py,sha256=
|
|
31
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/admin.py,sha256=5qKXaU6rMzO_AhM4fjnuIIjzSCeOeEsJKj54lLG_otU,14075
|
|
32
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/main.py,sha256=-sVnDGHcfCo4TwXLY3M4H12KDNaM8oHlokLjSCcGObA,11294
|
|
33
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py,sha256=QTyO1YABDNSEeJeiHwZT91VQHviY-ai6GiFgPuj8ZG0,1938
|
|
33
34
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py,sha256=8diknxhBhFCEGGO6FPLosgwGVmrgEouEOt67Mv7l4AY,7170
|
|
34
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/
|
|
35
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py,sha256=X7tkOOpnfL3Ja5Lr0P3EqyX6u5ph1kYJSUaCILwXH4U,20488
|
|
36
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py,sha256=lFIEqIbjuZSQs8t5BjyNRteCr5AI7KGmaeKFIBPsPh0,19063
|
|
37
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py,sha256=FQsnQl6eL5pV11KtsLpxBLKhpWCWHJ9BbgWPeSUFU0U,6871
|
|
38
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py,sha256=UduWADnaGAZc70KWnzw9zzdOLq4S-z5qNaooXmlmohk,12483
|
|
35
39
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py,sha256=XA-6oNqTKHWi1MQYtby-PqDC0Sy9LZvYizl5-UpeqMg,284
|
|
36
40
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py,sha256=ZYuSAD6eFLP3QrIkZ6VSC8GM_FNlPflHplCo2qRFQPQ,375
|
|
37
41
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py,sha256=JhSwnmbdbw1Aockl4woYbAKAVjOEV-W3e92B1FGFkc8,444
|
|
@@ -42,12 +46,12 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/router.py,sha
|
|
|
42
46
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py,sha256=6O8-Bf6RwF5syME-0RFupmtoyXuIQOl2Q3jmLP-g5HM,7110
|
|
43
47
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py,sha256=wIJD_xpViBStOBb4iWBX_hxdPfSKJyAGlcOw81NTWXo,207
|
|
44
48
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py,sha256=jISsw5fOhd32mr4hdAFetoZ5eVcFRKmEIiIu21V0Icw,2846
|
|
45
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py,sha256=
|
|
49
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py,sha256=R4z2nNi8t0UZu7rulTrraFxrY4UysBz9CtTDNemQDbs,107624
|
|
46
50
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py,sha256=lF_vfrPd_x7C-049FK8dht4lC-pKmwefV3viP7KDlrI,12946
|
|
47
51
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py,sha256=tFCZG81hdPQvImDkmaMM31Qq5coRCdrCgXd35nY-IwU,14368
|
|
48
52
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py,sha256=dFJI0ZpC4I8yXDA4RPg8pZYoFJ9PBxRcB5SvWXsz6Gg,6512
|
|
49
53
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py,sha256=YWoLNEbjyaERuiy91coHRTIHsG28pEiBxMUo4M4c2yo,6743
|
|
50
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py,sha256=
|
|
54
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py,sha256=xFmYPlO-7NSAMkdrn2I1rGy2Tk1UQCs7Ej9S6Cpv0Ps,6830
|
|
51
55
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py,sha256=RaTjCVCwIdZYAByYOadb79SLAmQlJTMz46S8jLkH1OE,4869
|
|
52
56
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py,sha256=hu1OBOq6DBPgpmpkO9ervN_PcSoh1bVBJ8dcrda-lsk,8468
|
|
53
57
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py,sha256=0pC2piprVjv5pxcLeaavpINbsstCFOcdtsoHP2hLl2c,13237
|
|
@@ -55,12 +59,12 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/ws.
|
|
|
55
59
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py,sha256=gA4EUVDQQoTzeaLzFHZEA6Ps0eO7eo8NYjhNUDkzwzs,281
|
|
56
60
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py,sha256=SiOE_YSSlIMsvP7BM17ZG3z35dunUwWHrMpbIc3UeOY,2636
|
|
57
61
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py,sha256=qTHo8rqGxoWGVyi5t1Z99zP1invUw_9osgQ7nLGEb6A,3032
|
|
58
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py,sha256=
|
|
62
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py,sha256=uLjJV_2i8NlLPCF0UdJdhzxoB7VRcbwZ8qmvXs_19G0,2452
|
|
59
63
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py,sha256=sx49u9oUIqvTfkurkIrFsZ4HFP1946kclkNVp6-zW28,733
|
|
60
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py,sha256=
|
|
64
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py,sha256=YdvCOOMc-hEwucLOnpQ6tVAlJIw16fSKhY400mVQT18,9646
|
|
61
65
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py,sha256=0KTMN04rekcigOT6xO5DRXZ_Hj5vVBPvNBVYIQ6FGeg,106
|
|
62
66
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py,sha256=VYZfvIdLdtb1Y8h09IoxqPkDyG8pZtY96hR15Hff8YM,626
|
|
63
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/config.py,sha256=
|
|
67
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/config.py,sha256=Rq6R2UyIKg8pBe49FXR_i8BCFcbFCb8mjairRcjuFO4,10565
|
|
64
68
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py,sha256=NMB7xWuj2tS69YJKFsILcU3J06gemGi6oFIwaUHIDCY,4914
|
|
65
69
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py,sha256=jjsFTjpqRxlp4XU2NR4lK_hmteJLZcO3DKJIZZ9T2Pk,2842
|
|
66
70
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py,sha256=hMCIK7pIJx30RmJi9pLNP0XWTMrPld2SSMvSGMTUG-s,2183
|
|
@@ -69,22 +73,22 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py,sha
|
|
|
69
73
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py,sha256=emmc2orBEIT6yfrZvy1jxdr52_eVawYAQJx9MiFsQKk,1689
|
|
70
74
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py,sha256=wQn3h1pFL3aqemr6W2jWMqGPJGVnb8ipZwLOwHdr6aI,7372
|
|
71
75
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/security.py,sha256=AqT0q6y1PmhyhZeV97Ujtc2PQx8EdUKMeAa2VC2sCQY,2769
|
|
72
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py,sha256=
|
|
73
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/base.py,sha256=
|
|
76
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py,sha256=y9by535cwbinmqOftskTk0iALAtckQfpjW-KmyzGwhw,362
|
|
77
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/base.py,sha256=GhD2e6qTX5EaAbkDxGkZAySHmO36mx04Z4afgSA8u2I,2345
|
|
74
78
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/session.py,sha256=am1aFndCCNOJ3fGn3e7H4cZZi-fsUnWPsTEy2h-GzAY,3075
|
|
75
79
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py,sha256=PubozE1RaMhf4U0aGNAiLkNHpOAH1hNsrO5IRuro8cc,1134
|
|
76
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py,sha256=
|
|
77
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py,sha256=
|
|
78
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py,sha256=
|
|
79
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py,sha256=
|
|
80
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py,sha256=
|
|
80
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py,sha256=Vb15rHz0jjlXKoHooZDWUbPiVNJI5iCMRQL5pY-skbg,19748
|
|
81
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py,sha256=7jNXPkMOv4XTacItXwQoJLh7edEW0u-UYZg5uajVIgY,5090
|
|
82
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py,sha256=YxXbniTvH7R9vn58aNPFz830AI-3Ua2GIb-e_3IToe0,8287
|
|
83
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py,sha256=2vlvRRcBNjJb70PMsrc35UVtsY3ofev_x6hyb93hOko,11278
|
|
84
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py,sha256=VLHlun1o0qVir4Gvis5dOsP7n8QO_EKT4CSHVTfGM9Q,13795
|
|
81
85
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/pipelines/__init__.py,sha256=aUxx4qSMxaxP9SygICOQvvcQgI75-zqP1cdGAGCmkdo,262
|
|
82
86
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/pipelines/base.py,sha256=_CssyDyeqdJiBPN0tsx7E4q9Z1db5BRUweq6IAJbc6g,1944
|
|
83
87
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py,sha256=rNHPw6j2o1ppubBsms0r3F_0AbdHjDsUoaE0LsdATpM,1754
|
|
84
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py,sha256=
|
|
88
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py,sha256=ZZDoCP0HWadELmazyIhYawPK8HtDoB_kUbqoFHHXmSU,4331
|
|
85
89
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py,sha256=H1_N1qtefivNd-g8dcmRXUkcDdmqxdDq7DGMwj2zzcs,23140
|
|
86
90
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py,sha256=USac17QKifFRqs65s_QEBgSZWgD8XlurnkGgVIyF3wU,4853
|
|
87
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py,sha256=
|
|
91
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py,sha256=HKw2HeTIzsH5CR5poTXeM7gJPbkfelLGBeJaI4TF1t4,8839
|
|
88
92
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py,sha256=JdS0sXJg08bwHLk5dJjjYVhRWE-1jW89GAVAqCE25AI,7652
|
|
89
93
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py,sha256=1KLbmFj9fhEoNSWXbC2k940ssof00W99Av4sg0qXw-Y,9238
|
|
90
94
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py,sha256=GC_buyJRRpDKZLwFcX4EK4PMdYKdsZVjQJ77xWJD4C8,1956
|
|
@@ -96,15 +100,16 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py,
|
|
|
96
100
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py,sha256=yHA2GcOqER9XD1TdyEo_8VDEqYudb9rMk7pftYEdsxI,1581
|
|
97
101
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py,sha256=OG1Cauhfj1h-RVqCO97vABO253uzHZ0htgNO1f1dFqs,1969
|
|
98
102
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py,sha256=EOjL4YcFmpgYh-7rDv4VAD5zcA8t4ff-eAAabPNEK70,1378
|
|
99
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py,sha256=
|
|
103
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py,sha256=Swx75GA2qqWimhbR2i--NGZsXz0yXEeWsPjeicEL3j0,26307
|
|
100
104
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/item.py,sha256=OnGnoPCOJE8YGSOM8soH_HN-J1z35OFA2XXuT8U9Urw,7146
|
|
101
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/session.py,sha256=
|
|
105
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/session.py,sha256=n-ICXvEr2S2t_rUo8Za5WknZSs4YBYkZ24iH5jWVTN8,11343
|
|
102
106
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user.py,sha256=xsPpoGef3t-6dA1CQW_QRWP4rt_NI3ZYnbamv1BZ1bs,13809
|
|
103
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py,sha256=
|
|
104
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py,sha256=
|
|
107
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py,sha256=vLyl3ohfP_FSE06L3mYxmGlSgjAsT1RaFnAOdEHWWrk,17072
|
|
108
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py,sha256=RRfSOD2hWUqo_rYkOc9KaE5BgqK7UkRC--Ni-BjMC3Q,169
|
|
109
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py,sha256=zRhVkK9OyuxIDu6ItDZ3myYeIRRugHovG8S3Nn2g4Wg,4127
|
|
105
110
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py,sha256=64eaF-rfTMsf60AsnvvJ1var8roNNG10DGCiIMvAXuA,1668
|
|
106
111
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py,sha256=XfCdeoG14FgABKnsH7b0a38IaQzc45z166WLKS4otd0,851
|
|
107
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py,sha256=
|
|
112
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py,sha256=e-CXzHwP2qsgiIIWDNNTv2LYSVOopbZ9s4X4MPhxnPc,996
|
|
108
113
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py,sha256=T-VHMulRamX0bbq0UDw4EKAGyNRHlM7sLorSfkiiojY,2433
|
|
109
114
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py,sha256=oa6mpit4TXg_R4jTkncYuKakHMgOJuSopyMOnKWLdHo,887
|
|
110
115
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py,sha256=7gVfUToHbphzCk8TzunDmDGyaW8dFT3F7DafoYdCr28,1929
|
|
@@ -114,7 +119,7 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep,sha2
|
|
|
114
119
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py,sha256=xqsJPT1QR2TH_5GYK8tiHp-Lb29chxGsr147MWoLAZw,21
|
|
115
120
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py,sha256=dHJhMgAoU6JBp-_-3JsOkqTgvCH9RD7flJy_z1-8JiI,4099
|
|
116
121
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py,sha256=0bR-5XlVyo2JaDuy02kfPqRW12dRAG3jhCDl8Qr-cEc,30802
|
|
117
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py,sha256=
|
|
122
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py,sha256=qLklIWbWcXNj6aTuGDwaPHiAkUmCOHJ92Z83thSadlg,9208
|
|
118
123
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py,sha256=qKU2z4YVQMWdnNE9aH5lnACsdzQ1G4fcE9_sK8x7K2U,6282
|
|
119
124
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py,sha256=45TvE15OGGd3p2HS4bpnUnVToW24L5rjMOQXaJpkWyk,5014
|
|
120
125
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py,sha256=eU7FHHGCpW4eH8zK3fZvjN7EmM_Ys7C-DCBkJ1b6xRI,4107
|
|
@@ -128,13 +133,14 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.p
|
|
|
128
133
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py,sha256=yTbtQ0jxj2Ah0zwNu831nSbd1Sb7yWIKwdlZhPzLBtQ,4599
|
|
129
134
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py,sha256=XwkFvoezYip-YT977rlLB9o46uGV77MSijt_bNlowT0,3678
|
|
130
135
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_items.py,sha256=lFMdUaayDDEw7msuVj3po6pYa8TgvE9XjTKc-GiaWk4,9202
|
|
136
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py,sha256=nikYPuAynnvHWSRFWsuFuqBYY3jyN5sJH2dgiONaVdA,1835
|
|
131
137
|
fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py,sha256=JLcPKnk14aPSyyWpjEHfFJcBBDEdHMLM41Tuua7nbnM,7343
|
|
132
138
|
fastapi_gen/template/{{cookiecutter.project_slug}}/docs/adding_features.md,sha256=ZFz9VFo1S0i3LMbMszL4Wps9gxoPDAkJAjiHOhq3npE,3474
|
|
133
139
|
fastapi_gen/template/{{cookiecutter.project_slug}}/docs/architecture.md,sha256=teK1lOMMiLJWBRGmj5HNsj8MvVAUcbeRTjMTevDKL6w,1901
|
|
134
140
|
fastapi_gen/template/{{cookiecutter.project_slug}}/docs/patterns.md,sha256=MVUfe2lkLZoUqKIVmwk2YTksQ-OyOx1tIqn9hw3WQYI,3828
|
|
135
141
|
fastapi_gen/template/{{cookiecutter.project_slug}}/docs/testing.md,sha256=2vdwICbfw4Q6HcvJUpwpgpomXcAwr30kd0pcRjL14vA,2330
|
|
136
142
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.dockerignore,sha256=aPWb-zCIZu6TI0jiXFs481-eMrOO-FxVvRL3992jrDY,343
|
|
137
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.env.example,sha256=
|
|
143
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.env.example,sha256=cIdaKDEZ8eBCi2r3yOEhvwrLwZxTx2gicDSm6Mk4gQY,693
|
|
138
144
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.gitignore,sha256=fZEN8HisQjcSmxEB3IDWoKA5dTYDzEAXLtqYKvdsprs,439
|
|
139
145
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.prettierignore,sha256=wYnkkZcvXw2mtuFVzYAjH-eFldFkK5Xn26fsZZ19BK0,161
|
|
140
146
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.prettierrc,sha256=cjszu9uAT0HddFAatvqg7KjdgnC99AGuOhZL9SE8eL8,227
|
|
@@ -183,15 +189,16 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/langu
|
|
|
183
189
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts,sha256=7h7J1ATCCYrVwGYr1j6k-TuVBxWKoLgmRwQS21tJF5Y,90
|
|
184
190
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx,sha256=_MX_XBLB22cvHWmvn_WUooATFqaFM-G4D8HKSVnJBsg,3760
|
|
185
191
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx,sha256=EofAzSHxNlM8LrRAKYmQ5-jVJnsnjy0ZERPXZ_22uxY,4911
|
|
186
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx,sha256=
|
|
192
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx,sha256=7pDAh6Dkh06kAd8CH1b_Hwsb4skmojeH_dWK2dMzQcg,7953
|
|
187
193
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx,sha256=sJwS6E7zF_2K-z6nfHdVXhw71XLu5EY_7UQlsub13JE,2049
|
|
188
194
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx,sha256=lVDX8O_UP7UwCwr6grcZevo6Z04aafOEruTMSlH6giM,9318
|
|
189
195
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx,sha256=FELAI5pT_AI9RU3oP7sTJoIg-IqcC0PGAytMna0JTf8,1093
|
|
190
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts,sha256=
|
|
196
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts,sha256=nOy9indoaJa7K_i0wJzxMNv8qpNi_5usiW7RE4bmSKc,644
|
|
191
197
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/local-conversation-sidebar.tsx,sha256=kOkTqlIaDq9lPyDldU6_SmpvAXYRTqhz-WkMfMwffj4,8281
|
|
192
198
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx,sha256=aCftdRUJ1mROHFtegXZw5oNpOPt0ekIk-CIUhmbZZhk,4583
|
|
193
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx,sha256=
|
|
194
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx,sha256=
|
|
199
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx,sha256=HpFdJmG9QPi6dzgimV1A4pBbhRIn5xTLXYu5bNcpLPU,3445
|
|
200
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx,sha256=EMW8ZKs8_8PDQlUzUtWsT_DWoBZs6Qas9-LvhBL-Xdg,1062
|
|
201
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx,sha256=lC3VHL-2r6QJGKcvCarrbEyZq7VtH7JPnW3NQYOAXqA,3987
|
|
195
202
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx,sha256=WIY6o13Q8Grwj6ht4Fdehodr32Jbnve-XbkH2XcFD24,2763
|
|
196
203
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx,sha256=1N1bjOHSbRT0yinxoCZUTTc2aOTsjzNFRdSUNrll0J0,1073
|
|
197
204
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts,sha256=HHElTMcT04ZHmI9mX5_Rf0re7wRaI_HHTISocPlhFYM,100
|
|
@@ -211,12 +218,12 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/la
|
|
|
211
218
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx,sha256=zdFQbRSWq1oLzWnp_flNFN24EEY8pHvG4KY47iugzgU,2295
|
|
212
219
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts,sha256=8Fm2aSVrCWazkE3PJ0K8cYjUrZw2VOTXvXg8CFUdDbo,327
|
|
213
220
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts,sha256=e3KWyCC1sS6AHiPWX1XkW93-v1xJ1sbiqqpvf0RW_eM,2334
|
|
214
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts,sha256=
|
|
221
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts,sha256=69UUzRvR8qszYPKwBZ7entJm9TOGfImqtYPY1qJ8p7k,13619
|
|
215
222
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts,sha256=_6jas8lDilJA-h-kozMxoGp9jGA4lNAQvHNANzvke6k,4935
|
|
216
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts,sha256=
|
|
223
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts,sha256=hUEq1Bk_zMRgt25Po4JHL4q89udBtos0NvN2lX8PhvY,12124
|
|
217
224
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts,sha256=wVOXjPF1uBULis4ec9O3gZkU_68rKMIjw3wtCJG5Fo4,2648
|
|
218
225
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts,sha256=X2x9mbmHfjWbsQEA1ILilHky5ak8QCj-owI65ZqrdEo,2275
|
|
219
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts,sha256=
|
|
226
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts,sha256=FCT3JGCthALrAMK1cCF524glPih4SIqgGu8P1Bh6q74,874
|
|
220
227
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts,sha256=4e2SNaXoEEe1F4Z1SWLXvjHAzYOcK4QiG3QjyIYpr-g,1851
|
|
221
228
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts,sha256=S4hLcI8u5-sPixqyPyedi6mZRSjJlLhRTPkVY-8DV1g,1299
|
|
222
229
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts,sha256=bZ_gCiWlxvrEzbmHOFX8zhuRigCq1da2NZFpv4jyU-U,1090
|
|
@@ -231,11 +238,20 @@ fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-s
|
|
|
231
238
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts,sha256=-xY0kYXZMks-Qh1qrcMDwcdh_svF1ww498aR3u7MKOU,985
|
|
232
239
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts,sha256=h_WXzUWJ67lDJ2hKi5It2hlTWhGnm_YMa0nTYJn3TDM,396
|
|
233
240
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts,sha256=anNUBMNJ5Y3zlX6e174Acre7P2lo4Vfa4w0KSJW-sRo,839
|
|
234
|
-
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts,sha256=
|
|
241
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts,sha256=dTDX6-lfYgX0Cz6Cs7cKx1WKyCZsuE3Ri2rrBQp28zM,2754
|
|
235
242
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts,sha256=0kBX-7qYowZOrBGMDjH_7dA8FEujtXqlfbRBpT4FBng,1150
|
|
236
243
|
fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts,sha256=W0lBPMjlZ0wt-eqGBqQvt648q90n2i9v0Bh25pdm8S4,234
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
244
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml,sha256=aqw1YN_1MWA0yDrLg7_lHEcJ3DYw4puvK7VEf4IUtHw,1697
|
|
245
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml,sha256=sXulLkJdtgzWySwtcmhmJoNc12Uq4sJpNLWe3p1iFec,7328
|
|
246
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml,sha256=4_ccXQP5G1m6lqHn4YrmnkHFffjtSbO9Ui4yh_pMjJM,1499
|
|
247
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml,sha256=t5BdtyNrDagRufe1kmPF0kVD8CNtr9Lv7sRo4xh9C9c,699
|
|
248
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml,sha256=hS9-TeXJNgu28AB0Pv43ob6lLDiavlYu0bwSRI804sA,360
|
|
249
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml,sha256=ySr8O3ih6qYvZjbzUSWL-VtwCPOzdxiqbbjO6uxYR-o,1482
|
|
250
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml,sha256=o3bCXguj8E5aQ0H1o3cBD3z_iZ_RA_Pmx1bc0sVzK28,682
|
|
251
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/nginx/nginx.conf,sha256=gJWUMMqNvr9TwNZOcc_WPPGZvdAlRUH3jLhbllOb_YY,7359
|
|
252
|
+
fastapi_gen/template/{{cookiecutter.project_slug}}/nginx/ssl/.gitkeep,sha256=o_WQQOgVGOLttT48x0EXSC4BbbDFemApFpmwhybcVUU,617
|
|
253
|
+
fastapi_fullstack-0.1.15.dist-info/METADATA,sha256=wZy-vmNueVjOKQCpaWC7JlzRLdZ9-muP7CB1vEWNSq0,24374
|
|
254
|
+
fastapi_fullstack-0.1.15.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
255
|
+
fastapi_fullstack-0.1.15.dist-info/entry_points.txt,sha256=s9JXrISZp8LMYJGeVofOAd1wPTzpq-jwjSgSf4hWzjs,59
|
|
256
|
+
fastapi_fullstack-0.1.15.dist-info/licenses/LICENSE,sha256=bL4JuK_rcA8y__Gg7PEuTs3g2Qf6VvSz2w2Jajd6nVU,1063
|
|
257
|
+
fastapi_fullstack-0.1.15.dist-info/RECORD,,
|
fastapi_gen/__init__.py
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
"""FastAPI Project Generator with Logfire observability."""
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
__version__ = version("fastapi-fullstack")
|
|
7
|
+
except PackageNotFoundError:
|
|
8
|
+
__version__ = "0.0.0" # Development/editable install fallback
|
fastapi_gen/cli.py
CHANGED
|
@@ -15,6 +15,7 @@ from .config import (
|
|
|
15
15
|
FrontendType,
|
|
16
16
|
LLMProviderType,
|
|
17
17
|
OAuthProvider,
|
|
18
|
+
OrmType,
|
|
18
19
|
ProjectConfig,
|
|
19
20
|
)
|
|
20
21
|
from .generator import generate_project, post_generation_tasks
|
|
@@ -87,6 +88,12 @@ def new(output: Path | None, no_input: bool, name: str | None) -> None:
|
|
|
87
88
|
default="postgresql",
|
|
88
89
|
help="Database type",
|
|
89
90
|
)
|
|
91
|
+
@click.option(
|
|
92
|
+
"--orm",
|
|
93
|
+
type=click.Choice(["sqlalchemy", "sqlmodel"]),
|
|
94
|
+
default="sqlalchemy",
|
|
95
|
+
help="ORM library (sqlalchemy or sqlmodel). SQLModel only works with PostgreSQL/SQLite",
|
|
96
|
+
)
|
|
90
97
|
@click.option(
|
|
91
98
|
"--auth",
|
|
92
99
|
type=click.Choice(["jwt", "api_key", "both", "none"]),
|
|
@@ -188,6 +195,7 @@ def create(
|
|
|
188
195
|
name: str,
|
|
189
196
|
output: Path | None,
|
|
190
197
|
database: str,
|
|
198
|
+
orm: str,
|
|
191
199
|
auth: str,
|
|
192
200
|
no_logfire: bool,
|
|
193
201
|
no_docker: bool,
|
|
@@ -295,6 +303,7 @@ def create(
|
|
|
295
303
|
config = ProjectConfig(
|
|
296
304
|
project_name=name,
|
|
297
305
|
database=DatabaseType(database),
|
|
306
|
+
orm_type=OrmType(orm),
|
|
298
307
|
auth=AuthType(auth),
|
|
299
308
|
enable_logfire=not no_logfire,
|
|
300
309
|
enable_docker=not no_docker,
|
fastapi_gen/config.py
CHANGED
|
@@ -89,6 +89,9 @@ class AIFrameworkType(str, Enum):
|
|
|
89
89
|
|
|
90
90
|
PYDANTIC_AI = "pydantic_ai"
|
|
91
91
|
LANGCHAIN = "langchain"
|
|
92
|
+
LANGGRAPH = "langgraph"
|
|
93
|
+
CREWAI = "crewai"
|
|
94
|
+
DEEPAGENTS = "deepagents"
|
|
92
95
|
|
|
93
96
|
|
|
94
97
|
class LLMProviderType(str, Enum):
|
|
@@ -111,9 +114,18 @@ class ReverseProxyType(str, Enum):
|
|
|
111
114
|
|
|
112
115
|
TRAEFIK_INCLUDED = "traefik_included" # Include Traefik service + labels
|
|
113
116
|
TRAEFIK_EXTERNAL = "traefik_external" # External Traefik, include labels only
|
|
117
|
+
NGINX_INCLUDED = "nginx_included" # Include Nginx service in docker-compose
|
|
118
|
+
NGINX_EXTERNAL = "nginx_external" # External Nginx, config template only
|
|
114
119
|
NONE = "none" # No reverse proxy, expose ports directly
|
|
115
120
|
|
|
116
121
|
|
|
122
|
+
class OrmType(str, Enum):
|
|
123
|
+
"""Supported ORM libraries for SQL databases."""
|
|
124
|
+
|
|
125
|
+
SQLALCHEMY = "sqlalchemy"
|
|
126
|
+
SQLMODEL = "sqlmodel"
|
|
127
|
+
|
|
128
|
+
|
|
117
129
|
class LogfireFeatures(BaseModel):
|
|
118
130
|
"""Logfire instrumentation features."""
|
|
119
131
|
|
|
@@ -136,6 +148,7 @@ class ProjectConfig(BaseModel):
|
|
|
136
148
|
|
|
137
149
|
# Database
|
|
138
150
|
database: DatabaseType = DatabaseType.POSTGRESQL
|
|
151
|
+
orm_type: OrmType = OrmType.SQLALCHEMY
|
|
139
152
|
db_pool_size: int = 5
|
|
140
153
|
db_max_overflow: int = 10
|
|
141
154
|
db_pool_timeout: int = 30
|
|
@@ -167,7 +180,7 @@ class ProjectConfig(BaseModel):
|
|
|
167
180
|
admin_require_auth: bool = True
|
|
168
181
|
enable_websockets: bool = False
|
|
169
182
|
enable_file_storage: bool = False
|
|
170
|
-
enable_ai_agent: bool =
|
|
183
|
+
enable_ai_agent: bool = True
|
|
171
184
|
ai_framework: AIFrameworkType = AIFrameworkType.PYDANTIC_AI
|
|
172
185
|
llm_provider: LLMProviderType = LLMProviderType.OPENAI
|
|
173
186
|
enable_conversation_persistence: bool = False
|
|
@@ -196,7 +209,7 @@ class ProjectConfig(BaseModel):
|
|
|
196
209
|
python_version: str = "3.12"
|
|
197
210
|
|
|
198
211
|
# Frontend
|
|
199
|
-
frontend: FrontendType = FrontendType.
|
|
212
|
+
frontend: FrontendType = FrontendType.NEXTJS
|
|
200
213
|
frontend_port: int = 3000
|
|
201
214
|
|
|
202
215
|
# Backend
|
|
@@ -208,6 +221,18 @@ class ProjectConfig(BaseModel):
|
|
|
208
221
|
"""Return project slug (underscores instead of hyphens)."""
|
|
209
222
|
return self.project_name.replace("-", "_")
|
|
210
223
|
|
|
224
|
+
@computed_field
|
|
225
|
+
@property
|
|
226
|
+
def use_sqlalchemy(self) -> bool:
|
|
227
|
+
"""Check if SQLAlchemy ORM is selected."""
|
|
228
|
+
return self.orm_type == OrmType.SQLALCHEMY
|
|
229
|
+
|
|
230
|
+
@computed_field
|
|
231
|
+
@property
|
|
232
|
+
def use_sqlmodel(self) -> bool:
|
|
233
|
+
"""Check if SQLModel ORM is selected."""
|
|
234
|
+
return self.orm_type == OrmType.SQLMODEL
|
|
235
|
+
|
|
211
236
|
@model_validator(mode="after")
|
|
212
237
|
def validate_option_combinations(self) -> "ProjectConfig":
|
|
213
238
|
"""Validate that option combinations are valid.
|
|
@@ -218,11 +243,17 @@ class ProjectConfig(BaseModel):
|
|
|
218
243
|
- Caching requires Redis to be enabled
|
|
219
244
|
- Session management requires a database
|
|
220
245
|
- Conversation persistence requires a database
|
|
246
|
+
- SQLModel requires a SQL database (PostgreSQL or SQLite)
|
|
221
247
|
"""
|
|
222
248
|
if self.enable_admin_panel and self.database == DatabaseType.NONE:
|
|
223
249
|
raise ValueError("Admin panel requires a database")
|
|
224
250
|
if self.enable_admin_panel and self.database == DatabaseType.MONGODB:
|
|
225
251
|
raise ValueError("Admin panel (SQLAdmin) requires PostgreSQL or SQLite")
|
|
252
|
+
if self.orm_type == OrmType.SQLMODEL and self.database not in (
|
|
253
|
+
DatabaseType.POSTGRESQL,
|
|
254
|
+
DatabaseType.SQLITE,
|
|
255
|
+
):
|
|
256
|
+
raise ValueError("SQLModel requires PostgreSQL or SQLite database")
|
|
226
257
|
if self.enable_caching and not self.enable_redis:
|
|
227
258
|
raise ValueError("Caching requires Redis to be enabled")
|
|
228
259
|
if self.enable_session_management and self.database == DatabaseType.NONE:
|
|
@@ -235,12 +266,119 @@ class ProjectConfig(BaseModel):
|
|
|
235
266
|
and self.llm_provider == LLMProviderType.OPENROUTER
|
|
236
267
|
):
|
|
237
268
|
raise ValueError("OpenRouter is not supported with LangChain")
|
|
269
|
+
if (
|
|
270
|
+
self.enable_ai_agent
|
|
271
|
+
and self.ai_framework == AIFrameworkType.LANGGRAPH
|
|
272
|
+
and self.llm_provider == LLMProviderType.OPENROUTER
|
|
273
|
+
):
|
|
274
|
+
raise ValueError("OpenRouter is not supported with LangGraph")
|
|
275
|
+
if (
|
|
276
|
+
self.enable_ai_agent
|
|
277
|
+
and self.ai_framework == AIFrameworkType.CREWAI
|
|
278
|
+
and self.llm_provider == LLMProviderType.OPENROUTER
|
|
279
|
+
):
|
|
280
|
+
raise ValueError("OpenRouter is not supported with CrewAI")
|
|
281
|
+
if (
|
|
282
|
+
self.enable_ai_agent
|
|
283
|
+
and self.ai_framework == AIFrameworkType.DEEPAGENTS
|
|
284
|
+
and self.llm_provider == LLMProviderType.OPENROUTER
|
|
285
|
+
):
|
|
286
|
+
raise ValueError(
|
|
287
|
+
"DeepAgents does not support OpenRouter. Use OpenAI or Anthropic provider instead."
|
|
288
|
+
)
|
|
238
289
|
if (
|
|
239
290
|
self.enable_rate_limiting
|
|
240
291
|
and self.rate_limit_storage == RateLimitStorageType.REDIS
|
|
241
292
|
and not self.enable_redis
|
|
242
293
|
):
|
|
243
294
|
raise ValueError("Rate limiting with Redis storage requires Redis to be enabled")
|
|
295
|
+
|
|
296
|
+
# WebSocket JWT auth requires main JWT auth
|
|
297
|
+
if self.websocket_auth == WebSocketAuthType.JWT and self.auth not in (
|
|
298
|
+
AuthType.JWT,
|
|
299
|
+
AuthType.BOTH,
|
|
300
|
+
):
|
|
301
|
+
raise ValueError("WebSocket JWT authentication requires JWT auth to be enabled")
|
|
302
|
+
|
|
303
|
+
# WebSocket API key auth requires main API key auth
|
|
304
|
+
if self.websocket_auth == WebSocketAuthType.API_KEY and self.auth not in (
|
|
305
|
+
AuthType.API_KEY,
|
|
306
|
+
AuthType.BOTH,
|
|
307
|
+
):
|
|
308
|
+
raise ValueError("WebSocket API key authentication requires API key auth to be enabled")
|
|
309
|
+
|
|
310
|
+
# Admin panel authentication requires JWT (for User model and security functions)
|
|
311
|
+
if (
|
|
312
|
+
self.enable_admin_panel
|
|
313
|
+
and self.admin_require_auth
|
|
314
|
+
and self.auth not in (AuthType.JWT, AuthType.BOTH)
|
|
315
|
+
):
|
|
316
|
+
raise ValueError(
|
|
317
|
+
"Admin panel authentication requires JWT auth to be enabled. "
|
|
318
|
+
"Either enable JWT auth or set admin_require_auth=False"
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
# Conversation persistence requires AI agent
|
|
322
|
+
if self.enable_conversation_persistence and not self.enable_ai_agent:
|
|
323
|
+
raise ValueError("Conversation persistence requires AI agent to be enabled")
|
|
324
|
+
|
|
325
|
+
# Admin panel requires SQLAlchemy (SQLAdmin doesn't fully support SQLModel)
|
|
326
|
+
if self.enable_admin_panel and self.orm_type == OrmType.SQLMODEL:
|
|
327
|
+
raise ValueError(
|
|
328
|
+
"Admin panel (SQLAdmin) requires SQLAlchemy ORM. "
|
|
329
|
+
"SQLModel is not fully supported. Use orm_type=sqlalchemy or disable admin panel."
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
# Session management requires JWT auth
|
|
333
|
+
if self.enable_session_management and self.auth not in (AuthType.JWT, AuthType.BOTH):
|
|
334
|
+
raise ValueError("Session management requires JWT auth to be enabled")
|
|
335
|
+
|
|
336
|
+
# Webhooks require a database
|
|
337
|
+
if self.enable_webhooks and self.database == DatabaseType.NONE:
|
|
338
|
+
raise ValueError(
|
|
339
|
+
"Webhooks require a database to store subscriptions and delivery history"
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
# OAuth requires JWT authentication
|
|
343
|
+
if self.oauth_provider != OAuthProvider.NONE and self.auth not in (
|
|
344
|
+
AuthType.JWT,
|
|
345
|
+
AuthType.BOTH,
|
|
346
|
+
):
|
|
347
|
+
raise ValueError(
|
|
348
|
+
"OAuth authentication requires JWT auth to be enabled. "
|
|
349
|
+
"OAuth uses JWT tokens for session management after social login."
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
# Background task queues require Redis
|
|
353
|
+
if (
|
|
354
|
+
self.background_tasks
|
|
355
|
+
in (
|
|
356
|
+
BackgroundTaskType.CELERY,
|
|
357
|
+
BackgroundTaskType.TASKIQ,
|
|
358
|
+
BackgroundTaskType.ARQ,
|
|
359
|
+
)
|
|
360
|
+
and not self.enable_redis
|
|
361
|
+
):
|
|
362
|
+
raise ValueError(
|
|
363
|
+
f"{self.background_tasks.value.title()} requires Redis to be enabled. "
|
|
364
|
+
"All task queue systems use Redis as broker/backend."
|
|
365
|
+
)
|
|
366
|
+
|
|
367
|
+
# Logfire feature-specific validations (only when logfire is enabled)
|
|
368
|
+
if self.enable_logfire:
|
|
369
|
+
if self.logfire_features.database and self.database == DatabaseType.NONE:
|
|
370
|
+
raise ValueError(
|
|
371
|
+
"Logfire database instrumentation requires a database to be enabled"
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
if self.logfire_features.redis and not self.enable_redis:
|
|
375
|
+
raise ValueError("Logfire Redis instrumentation requires Redis to be enabled")
|
|
376
|
+
|
|
377
|
+
if self.logfire_features.celery and self.background_tasks != BackgroundTaskType.CELERY:
|
|
378
|
+
raise ValueError(
|
|
379
|
+
"Logfire Celery instrumentation requires Celery as background task system"
|
|
380
|
+
)
|
|
381
|
+
|
|
244
382
|
return self
|
|
245
383
|
|
|
246
384
|
def to_cookiecutter_context(self) -> dict[str, Any]:
|
|
@@ -265,6 +403,10 @@ class ProjectConfig(BaseModel):
|
|
|
265
403
|
"db_pool_size": self.db_pool_size,
|
|
266
404
|
"db_max_overflow": self.db_max_overflow,
|
|
267
405
|
"db_pool_timeout": self.db_pool_timeout,
|
|
406
|
+
# ORM
|
|
407
|
+
"orm_type": self.orm_type.value,
|
|
408
|
+
"use_sqlalchemy": self.use_sqlalchemy,
|
|
409
|
+
"use_sqlmodel": self.use_sqlmodel,
|
|
268
410
|
# Auth
|
|
269
411
|
"auth": self.auth.value,
|
|
270
412
|
"use_jwt": self.auth in (AuthType.JWT, AuthType.BOTH),
|
|
@@ -313,6 +455,9 @@ class ProjectConfig(BaseModel):
|
|
|
313
455
|
"ai_framework": self.ai_framework.value,
|
|
314
456
|
"use_pydantic_ai": self.ai_framework == AIFrameworkType.PYDANTIC_AI,
|
|
315
457
|
"use_langchain": self.ai_framework == AIFrameworkType.LANGCHAIN,
|
|
458
|
+
"use_langgraph": self.ai_framework == AIFrameworkType.LANGGRAPH,
|
|
459
|
+
"use_crewai": self.ai_framework == AIFrameworkType.CREWAI,
|
|
460
|
+
"use_deepagents": self.ai_framework == AIFrameworkType.DEEPAGENTS,
|
|
316
461
|
"llm_provider": self.llm_provider.value,
|
|
317
462
|
"use_openai": self.llm_provider == LLMProviderType.OPENAI,
|
|
318
463
|
"use_anthropic": self.llm_provider == LLMProviderType.ANTHROPIC,
|
|
@@ -339,6 +484,13 @@ class ProjectConfig(BaseModel):
|
|
|
339
484
|
"include_traefik_service": self.reverse_proxy == ReverseProxyType.TRAEFIK_INCLUDED,
|
|
340
485
|
"include_traefik_labels": self.reverse_proxy
|
|
341
486
|
in (ReverseProxyType.TRAEFIK_INCLUDED, ReverseProxyType.TRAEFIK_EXTERNAL),
|
|
487
|
+
"use_traefik": self.reverse_proxy
|
|
488
|
+
in (ReverseProxyType.TRAEFIK_INCLUDED, ReverseProxyType.TRAEFIK_EXTERNAL),
|
|
489
|
+
"include_nginx_service": self.reverse_proxy == ReverseProxyType.NGINX_INCLUDED,
|
|
490
|
+
"include_nginx_config": self.reverse_proxy
|
|
491
|
+
in (ReverseProxyType.NGINX_INCLUDED, ReverseProxyType.NGINX_EXTERNAL),
|
|
492
|
+
"use_nginx": self.reverse_proxy
|
|
493
|
+
in (ReverseProxyType.NGINX_INCLUDED, ReverseProxyType.NGINX_EXTERNAL),
|
|
342
494
|
"ci_type": self.ci_type.value,
|
|
343
495
|
"use_github_actions": self.ci_type == CIType.GITHUB,
|
|
344
496
|
"use_gitlab_ci": self.ci_type == CIType.GITLAB,
|