fastapi-fullstack 0.2.12__py3-none-any.whl → 0.2.13__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.2.12.dist-info → fastapi_fullstack-0.2.13.dist-info}/METADATA +358 -144
- {fastapi_fullstack-0.2.12.dist-info → fastapi_fullstack-0.2.13.dist-info}/RECORD +587 -526
- fastapi_gen/cli.py +17 -48
- fastapi_gen/config.py +39 -65
- fastapi_gen/generator.py +16 -30
- fastapi_gen/prompts.py +111 -134
- fastapi_gen/template/VARIABLES.md +11 -16
- fastapi_gen/template/cookiecutter.json +4 -4
- fastapi_gen/template/hooks/post_gen_project.py +34 -102
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/rules/code-style.md +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/skills/agent-tool/SKILL.md +49 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/skills/alembic-migration/SKILL.md +41 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/skills/background-task/SKILL.md +79 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/skills/billing-stripe/SKILL.md +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/skills/channel-bot/SKILL.md +45 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/skills/frontend-feature/SKILL.md +47 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/skills/pytest-suite/SKILL.md +57 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/skills/rag-knowledge/SKILL.md +48 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/.gitignore +0 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/AGENTS.md +3 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/CLAUDE.md +5 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/CONTRIBUTING.md +2 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/ENV_VARS.md +0 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/MANUAL_STEPS.md +0 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/Makefile +2 -26
- fastapi_gen/template/{{cookiecutter.project_slug}}/README.md +12 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.env.example +11 -31
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0000_create_users.py +0 -27
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0001_create_organization_tables.py +1 -48
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0002_backfill_personal_orgs.py +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0003_add_is_app_admin.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_5_create_core_tables.py +0 -40
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_create_audit_log.py +1 -16
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0005_add_org_id_to_conversations_and_rag.py +1 -39
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0006_backfill_org_id_on_conversations.py +1 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0007_create_knowledge_bases.py +1 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0008_backfill_default_kbs.py +1 -55
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0009_conv_active_kb_ids.py +1 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0010_org_billing_seats.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0011_create_plan_price_tables.py +1 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0012_create_subscription_table.py +1 -16
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0013_create_stripe_event_table.py +1 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0014_credits_usage_events.py +1 -35
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0015_create_mv_usage_daily.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0021_create_items.py +1 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0022_sync_source_org_scope.py +68 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/admin.py +4 -29
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +0 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +111 -205
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +12 -97
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +8 -158
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +12 -197
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +33 -86
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +6 -107
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +9 -16
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_tool.py +39 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/code_execution.py +5 -233
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/fetch_url.py +3 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +32 -153
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/research.py +3 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +1 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/{tools/datetime_tool.py → utils.py} +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +58 -472
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +4 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +12 -34
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +3 -158
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_ratings.py +6 -193
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_users.py +33 -94
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +25 -46
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +3 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/billing.py +27 -183
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +3 -240
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +64 -886
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +6 -58
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +4 -54
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/invitations.py +0 -83
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +1 -47
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/knowledge_bases.py +135 -219
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/me_slash_commands.py +0 -34
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/members.py +0 -100
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +2 -90
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/org_integrations.py +128 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/organizations.py +35 -225
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/projects.py +0 -46
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +114 -31
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +1 -82
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +1 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +1 -67
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +12 -236
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -310
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -50
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +6 -113
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +5 -42
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/create_app_admin.py +2 -67
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +55 -162
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +6 -89
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/sync_stripe_plans.py +2 -125
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/audit.py +3 -77
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +13 -98
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/crypto.py +39 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +1 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/logging.py +0 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +2 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -24
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +1 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/audit_log.py +2 -95
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +2 -143
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_identity.py +2 -129
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_session.py +2 -172
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/chat_file.py +2 -55
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +2 -360
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation_share.py +2 -152
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/credit_transaction.py +2 -105
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +1 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/knowledge_base.py +2 -140
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/message_rating.py +2 -158
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/organization.py +2 -367
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/plan.py +2 -165
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/project.py +2 -228
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +2 -106
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +2 -139
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/stripe_event.py +2 -49
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/subscription.py +10 -78
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_log.py +2 -65
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_source.py +33 -64
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +2 -220
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user_slash_command.py +2 -113
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +2 -254
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +32 -97
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/todo_pool.py +0 -26
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/main.py +118 -206
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +6 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +0 -253
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_identity.py +0 -179
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_session.py +1 -247
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/chat_file.py +10 -74
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +16 -921
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation_share.py +0 -238
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/credit_transaction.py +0 -100
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/invitation.py +1 -189
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +1 -67
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/knowledge_base.py +8 -186
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/member.py +1 -187
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +1 -434
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/organization.py +12 -289
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/plan.py +0 -70
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/project.py +0 -396
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +11 -122
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -204
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/stripe_event.py +0 -61
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/subscription.py +3 -105
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_log.py +5 -95
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_source.py +20 -147
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/usage_event.py +0 -343
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +6 -357
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user_slash_command.py +0 -86
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -251
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +19 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/billing.py +27 -52
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/channel_bot.py +2 -50
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +5 -84
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +11 -45
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/file.py +0 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +1 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/knowledge_base.py +0 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/message_rating.py +0 -22
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/organization.py +10 -38
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/project.py +0 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/rag.py +34 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +4 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/sync_source.py +24 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +31 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user_slash_command.py +0 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +11 -20
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/admin.py +24 -74
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent.py +8 -147
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +48 -311
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent_session.py +185 -590
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/anomaly_detection.py +7 -145
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/checkout_service.py +0 -154
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/credit_service.py +8 -193
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/facade.py +83 -190
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/customer_events.py +0 -54
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/invoice_events.py +4 -142
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/payment_events.py +0 -46
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/subscription_events.py +0 -298
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/pricing.py +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/stripe_client.py +1 -74
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/subscription_service.py +5 -108
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/webhook_handler.py +9 -107
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +0 -293
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/channels/base.py +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/channels/chart_render.py +132 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/channels/router.py +9 -260
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/channels/slack.py +3 -27
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/channels/telegram.py +3 -24
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +50 -1329
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation_share.py +0 -323
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/__init__.py +1 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/service.py +4 -22
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +42 -288
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/invitation.py +1 -405
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +1 -43
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/knowledge_base.py +83 -390
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/member.py +4 -225
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +20 -855
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/organization.py +33 -213
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/project.py +1 -387
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/config.py +2 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/__init__.py +3 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/google_drive.py +43 -42
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/s3.py +49 -32
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/documents.py +15 -64
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/embeddings.py +40 -130
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/image_describer.py +17 -78
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/ingestion.py +37 -56
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/models.py +14 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/reranker.py +95 -228
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/retrieval.py +42 -137
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/base.py +2 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/google_drive.py +1 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/s3.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag/vectorstore.py +88 -48
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +21 -222
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_status.py +20 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +45 -151
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/rules.py +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/service.py +2 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/storage.py +3 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/research.py +51 -22
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -268
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +134 -217
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/usage.py +3 -130
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +68 -219
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user_slash_command.py +0 -135
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +6 -396
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/background/channel.py +0 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/background/rag.py +8 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/prefect_app.py +87 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +46 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/cleanup_tasks.py +19 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/email_tasks.py +26 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +113 -112
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +17 -184
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +13 -51
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +9 -16
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -29
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_openapi.py +3 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +1 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +1 -31
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +15 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_chart_tool.py +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +7 -16
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_conversation_kb_toggle.py +3 -79
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +15 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_fetch_url.py +0 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_kb_scoping.py +4 -152
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_migrations.py +18 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_rbac_teams.py +3 -119
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +2 -74
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories_teams.py +5 -189
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -161
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +4 -30
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_members.py +4 -147
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_organizations.py +6 -98
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_stripe_seats.py +4 -103
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_tenant_isolation.py +3 -115
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_web_search.py +0 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +54 -64
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +0 -37
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.yml +58 -67
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/architecture.md +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/commands.md +25 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/configuration.md +1 -25
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/deploy.md +6 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/file-processing.md +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/howto/add-api-endpoint.md +0 -53
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/howto/add-background-task.md +38 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/permissions.md +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/testing.md +10 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/README.md +50 -623
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/content/blog/shipping-ai-saas-template.mdx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/eslint.config.mjs +40 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +115 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +115 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +8 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/package.json +10 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/public/.gitkeep +0 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +2 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/reset-password/page.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +146 -152
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/layout.tsx +25 -30
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/page.tsx +65 -142
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +185 -318
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/ratings-chart.tsx +95 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/stripe-events/page.tsx +243 -335
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/system/page.tsx +94 -115
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/users/page.tsx +182 -229
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/page.tsx +142 -151
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/usage-spark.tsx +31 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/invoices/page.tsx +96 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/layout.tsx +31 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/page.tsx +101 -228
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/payment-methods/page.tsx +5 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/subscription/page.tsx +24 -39
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/page.tsx +46 -94
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/usage-charts.tsx +113 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +115 -334
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dev/components/page.tsx +136 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/error.tsx +33 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/invitations/[token]/page.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/[id]/page.tsx +453 -467
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/page.tsx +111 -67
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/integrations/page.tsx +252 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/members/page.tsx +176 -114
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/page.tsx +86 -91
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +513 -558
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/account/page.tsx +45 -67
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/appearance/page.tsx +13 -25
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/layout.tsx +20 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/notifications/page.tsx +27 -50
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +3 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/profile/page.tsx +42 -85
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/slash-commands/page.tsx +12 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/about/page.tsx +10 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/page.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/[slug]/page.tsx +17 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/page.tsx +17 -24
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/changelog/page.tsx +9 -16
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/community/page.tsx +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/contact/page.tsx +8 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +15 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/help/page.tsx +2 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +6 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/cookies/page.tsx +2 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/privacy/page.tsx +1 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/terms/page.tsx +1 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/[step]/page.tsx +1 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/page.tsx +18 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +114 -37
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/page.tsx +7 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/security/page.tsx +7 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +3 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +58 -21
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/me/[...path]/route.ts +2 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/contact/route.ts +5 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/tool-stats/route.ts +3 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/[docId]/download/route.ts +37 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/route.ts +8 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/trigger/route.ts +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/connectors/route.ts +3 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/[id]/route.ts +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/avatar/route.ts +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/integrations/[sourceId]/route.ts +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/integrations/[sourceId]/trigger/route.ts +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/integrations/connectors/route.ts +26 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/integrations/route.ts +49 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +0 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/apple-icon.tsx +17 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +94 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/icon.tsx +17 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +12 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/opengraph-image.tsx +77 -81
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +10 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/sitemap.ts +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/admin-nav.tsx +10 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/user-detail-drawer.tsx +4 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/forgot-password-form.tsx +1 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +3 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/oauth-buttons.tsx +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +5 -30
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/reset-password-form.tsx +2 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/credits-panel.tsx +2 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/invoices-panel.tsx +2 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/seat-selector-dialog.tsx +6 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/subscription-panel.tsx +2 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/usage-gauge.tsx +13 -21
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/blog/mdx-components.tsx +4 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chart-message.impl.tsx +391 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chart-message.tsx +21 -306
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +68 -57
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-controls.tsx +11 -34
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-empty-state.tsx +23 -78
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +68 -24
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +17 -23
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +3 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-card.tsx +476 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-panel.tsx +10 -494
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +1 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.impl.tsx +229 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +26 -202
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +169 -109
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +1 -55
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/pending-messages.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +1 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/research-panel.tsx +92 -184
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +9 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-commands.ts +1 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/sources-panel.tsx +200 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/subagent-feed.tsx +109 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/subagent-panel.tsx +156 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +0 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +46 -700
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/ask-user.tsx +55 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/datetime.tsx +32 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/generic.tsx +127 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/rag.tsx +191 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/run-python.tsx +89 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/skills.tsx +35 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/web-search.tsx +86 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/active-sessions.tsx +9 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/onboarding-banner.tsx +10 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/page-header.tsx +86 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/page-hero.tsx +2 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/page-tabs.tsx +51 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/quick-actions.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/recent-activity.tsx +7 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/segmented-control.tsx +1 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card-spark.tsx +39 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card.tsx +55 -69
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/subscription-chip.tsx +5 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/team-summary.tsx +7 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/tool-usage.tsx +2 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/top-models.tsx +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline-chart.tsx +110 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline.tsx +14 -79
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/create-kb-dialog.tsx +6 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/file-viewer.tsx +330 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/index.ts +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/kb-list.tsx +5 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +68 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/command-palette.tsx +123 -22
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +284 -87
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/mobile-tab-bar.tsx +11 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/not-found-back-button.tsx +14 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +12 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/cookies-content.tsx +45 -21
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/privacy-content.tsx +42 -34
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/terms-content.tsx +60 -60
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/animated-number.tsx +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/brand-icon.tsx +46 -59
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/case-study.tsx +71 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/code-preview.tsx +2 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/comparison-table.tsx +88 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/contact-form.tsx +17 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/cookie-banner.tsx +12 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/data-flow-diagram.tsx +25 -31
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/enterprise-security.tsx +105 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/faq-accordion.tsx +7 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-bento.tsx +137 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-glyph.tsx +86 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-mockup.tsx +17 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-section.tsx +12 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/final-cta.tsx +2 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/footer-config.ts +176 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero-demo.tsx +25 -40
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero.tsx +68 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/how-it-works.tsx +20 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/integrations-grid.tsx +68 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/legal-page.tsx +6 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/logos-strip.tsx +14 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-footer.tsx +96 -80
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-page-layout.tsx +6 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marquee.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/outcomes-band.tsx +45 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pill-nav.tsx +339 -44
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pricing-teaser.tsx +18 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/reveal.tsx +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/section.tsx +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/smooth-scroll.tsx +56 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-carousel.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-grid.tsx +16 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-shell.tsx +28 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-state.ts +37 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-agent.tsx +14 -23
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-data.tsx +12 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-done.tsx +14 -22
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-team.tsx +11 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-welcome.tsx +9 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/drag-drop-overlay.tsx +2 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-logs.tsx +125 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-wizard.tsx +306 -120
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/seo/json-ld.tsx +1 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/brand-color-picker.tsx +2 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-nav.tsx +7 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-section.tsx +24 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/slash-commands-manager.tsx +2 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/empty-state.tsx +15 -20
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/error-state.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/loading-state.tsx +6 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/create-org-dialog.tsx +3 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/invite-member-dialog.tsx +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/org-switcher.tsx +7 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert.tsx +13 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +2 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/confirm-dialog.tsx +99 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/data-table.tsx +134 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/form-field.tsx +79 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/icon-button.tsx +23 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +7 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +3 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/question-prompt.tsx +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/section-heading.tsx +43 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +4 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +4 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-users.ts +11 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +66 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-billing.ts +56 -89
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +50 -136
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +105 -65
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +109 -74
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-copy-to-clipboard.ts +20 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-invitations.ts +43 -25
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-knowledge-bases.ts +179 -42
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-members.ts +40 -21
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-org-integrations.ts +96 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-organizations.ts +55 -22
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-slash-commands.ts +46 -34
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +102 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/active-route.ts +34 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +62 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/blog.ts +1 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/changelog.ts +21 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/chat-sources.ts +70 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +27 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/query-keys.ts +62 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +63 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/seo.ts +4 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/teaser-plans.ts +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +80 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +2 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +4 -29
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +1 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/kb-selection-store.ts +1 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/org-store.ts +3 -30
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/research-store.ts +24 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/sources-panel-store.ts +20 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +27 -46
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +0 -756
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/antv_chart.py +0 -146
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_render.py +0 -125
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/map_tool.py +0 -102
- {fastapi_fullstack-0.2.12.dist-info → fastapi_fullstack-0.2.13.dist-info}/WHEEL +0 -0
- {fastapi_fullstack-0.2.12.dist-info → fastapi_fullstack-0.2.13.dist-info}/entry_points.txt +0 -0
- {fastapi_fullstack-0.2.12.dist-info → fastapi_fullstack-0.2.13.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-fullstack
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.13
|
|
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-ai-agent-template
|
|
6
6
|
Project-URL: Documentation, https://github.com/vstorm-co/full-stack-ai-agent-template#readme
|
|
@@ -25,7 +25,7 @@ Requires-Dist: click>=8.3.0
|
|
|
25
25
|
Requires-Dist: cookiecutter>=2.7.0
|
|
26
26
|
Requires-Dist: email-validator>=2.3.0
|
|
27
27
|
Requires-Dist: httpx>=0.28.1
|
|
28
|
-
Requires-Dist: pydantic-settings>=2.
|
|
28
|
+
Requires-Dist: pydantic-settings>=2.14.2
|
|
29
29
|
Requires-Dist: pydantic>=2.13.0
|
|
30
30
|
Requires-Dist: pytest-asyncio>=1.3.0
|
|
31
31
|
Requires-Dist: pytest>=9.0.3
|
|
@@ -45,10 +45,6 @@ Requires-Dist: mkdocs>=1.6.1; extra == 'docs'
|
|
|
45
45
|
Requires-Dist: pymdown-extensions>=10.20; extra == 'docs'
|
|
46
46
|
Description-Content-Type: text/markdown
|
|
47
47
|
|
|
48
|
-
<p align="center">
|
|
49
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new2/chat_demo.gif" alt="Live chat — web search, tool calls, and chart generation" width="100%">
|
|
50
|
-
</p>
|
|
51
|
-
|
|
52
48
|
<h1 align="center">Full-Stack AI Agent Template</h1>
|
|
53
49
|
|
|
54
50
|
<p align="center">
|
|
@@ -79,7 +75,11 @@ Description-Content-Type: text/markdown
|
|
|
79
75
|
</p>
|
|
80
76
|
|
|
81
77
|
<p align="center">
|
|
82
|
-
<
|
|
78
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new3/chat_demo_with_tasks.gif" alt="AI chat with live plan & task checklist" width="100%">
|
|
79
|
+
</p>
|
|
80
|
+
|
|
81
|
+
<p align="center">
|
|
82
|
+
<b>🤖 5 AI Agent Frameworks</b> <i>(PydanticAI, PydanticDeep, LangChain, LangGraph, DeepAgents)</i>
|
|
83
83
|
<br>
|
|
84
84
|
<b>📄 RAG Pipeline</b> <i>(Milvus, Qdrant, pgvector, ChromaDB)</i>
|
|
85
85
|
<br>
|
|
@@ -150,50 +150,23 @@ uv tool install fastapi-fullstack
|
|
|
150
150
|
pipx install fastapi-fullstack
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
###
|
|
153
|
+
### From zero to a running app
|
|
154
|
+
|
|
155
|
+
Three steps. The wizard scaffolds the project, `make bootstrap` brings up the whole backend, and the frontend runs with a single command:
|
|
154
156
|
|
|
155
157
|
```bash
|
|
156
|
-
#
|
|
158
|
+
# 1. Generate your project — just answer the wizard's prompts
|
|
157
159
|
fastapi-fullstack
|
|
158
160
|
|
|
159
|
-
#
|
|
160
|
-
fastapi-fullstack create my_ai_app \
|
|
161
|
-
--database postgresql \
|
|
162
|
-
--frontend nextjs
|
|
163
|
-
|
|
164
|
-
# Use presets for common setups
|
|
165
|
-
fastapi-fullstack create my_ai_app --preset production # Full production setup
|
|
166
|
-
fastapi-fullstack create my_ai_app --preset ai-agent # AI agent with streaming
|
|
167
|
-
|
|
168
|
-
# Minimal project (no extras)
|
|
169
|
-
fastapi-fullstack create my_ai_app --minimal
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Start Development
|
|
173
|
-
|
|
174
|
-
#### First time on a fresh clone
|
|
175
|
-
|
|
176
|
-
```bash
|
|
161
|
+
# 2. Backend + PostgreSQL up, migrations applied, default admin seeded
|
|
177
162
|
cd my_ai_app
|
|
178
|
-
make bootstrap
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
That's it — backend, database, Redis, vector store (if RAG), Celery (if selected) come up, migrations are applied, and a default admin is seeded.
|
|
163
|
+
make bootstrap
|
|
182
164
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
```bash
|
|
186
|
-
make dev # idempotent: build + up + migrate. Re-run anytime.
|
|
165
|
+
# 3. Frontend (in a second terminal)
|
|
166
|
+
cd frontend && bun install && bun dev
|
|
187
167
|
```
|
|
188
168
|
|
|
189
|
-
`make
|
|
190
|
-
|
|
191
|
-
**Behind the scenes (`make dev`):**
|
|
192
|
-
|
|
193
|
-
1. Builds the backend Docker image (cached after first run)
|
|
194
|
-
2. Starts services via `docker-compose.dev.yml` (hot-reload bind mounts)
|
|
195
|
-
3. Polls Postgres until ready (`pg_isready` — no fixed sleeps)
|
|
196
|
-
4. Applies pending Alembic migrations (no-op if already at head)
|
|
169
|
+
> **What `make bootstrap` does** (= `make dev` + `make seed`): builds the backend Docker image, starts the stack via `docker-compose.dev.yml`, waits for PostgreSQL (`pg_isready`), applies Alembic migrations, and seeds `admin@example.com` / `admin123`. It's idempotent — re-run it anytime.
|
|
197
170
|
|
|
198
171
|
**Then access:**
|
|
199
172
|
|
|
@@ -215,6 +188,28 @@ make dev-rebuild # force-rebuild backend image (after pyproject.toml changes)
|
|
|
215
188
|
make dev-frontend # start the Next.js container
|
|
216
189
|
```
|
|
217
190
|
|
|
191
|
+
After the first `make bootstrap`, day-to-day you just run `make dev` (skips admin re-seed). Run `make help` inside the project for the full list.
|
|
192
|
+
|
|
193
|
+
<details>
|
|
194
|
+
<summary><b>Other ways to generate (flags, presets, minimal)</b></summary>
|
|
195
|
+
|
|
196
|
+
Skip the wizard and pass options directly:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Non-interactive with explicit options
|
|
200
|
+
fastapi-fullstack create my_ai_app --database postgresql --frontend nextjs
|
|
201
|
+
|
|
202
|
+
# Presets for common scenarios (run `fastapi-fullstack templates` for the full list)
|
|
203
|
+
fastapi-fullstack create my_ai_app --preset ai-agent # AI agent with streaming
|
|
204
|
+
fastapi-fullstack create my_ai_app --preset production # Full production setup
|
|
205
|
+
fastapi-fullstack create my_ai_app --preset production-saas # SaaS: billing, teams, admin
|
|
206
|
+
|
|
207
|
+
# Bare-bones project (PostgreSQL, no Docker/Redis/CI)
|
|
208
|
+
fastapi-fullstack create my_ai_app --minimal
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
</details>
|
|
212
|
+
|
|
218
213
|
### Environments
|
|
219
214
|
|
|
220
215
|
| `make` target | Compose file | When to use |
|
|
@@ -292,156 +287,367 @@ Use `make help` to see all available Makefile shortcuts.
|
|
|
292
287
|
|
|
293
288
|
## 🎬 Demo
|
|
294
289
|
|
|
295
|
-
**CLI generator
|
|
290
|
+
**CLI generator** — configure and scaffold a full-stack AI project in under 60 seconds:
|
|
296
291
|
|
|
297
|
-
|
|
298
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/app_start.gif" alt="FastAPI Fullstack Generator Demo">
|
|
299
|
-
</p>
|
|
292
|
+

|
|
300
293
|
|
|
301
|
-
|
|
294
|
+
<table>
|
|
295
|
+
<tr>
|
|
296
|
+
<td width="50%">
|
|
302
297
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
298
|
+
**AI chat** — streaming responses, tool calls, reasoning, and ask-user pauses:
|
|
299
|
+
|
|
300
|
+

|
|
301
|
+
|
|
302
|
+
</td>
|
|
303
|
+
<td width="50%">
|
|
304
|
+
|
|
305
|
+
**RAG ingestion** — drop a document, watch it get chunked, embedded, and answered against:
|
|
306
|
+
|
|
307
|
+

|
|
308
|
+
|
|
309
|
+
</td>
|
|
310
|
+
</tr>
|
|
311
|
+
</table>
|
|
312
|
+
|
|
313
|
+
**Generated marketing site** — public landing page with hero, pricing, blog, and legal pages (`enable_marketing_site`):
|
|
314
|
+
|
|
315
|
+

|
|
306
316
|
|
|
307
317
|
---
|
|
308
318
|
|
|
309
319
|
## 📸 Screenshots
|
|
310
320
|
|
|
311
|
-
###
|
|
321
|
+
### AI Chat
|
|
322
|
+
|
|
323
|
+
The chat UI streams responses over WebSocket and renders each tool call as a purpose-built card.
|
|
324
|
+
|
|
325
|
+
<table>
|
|
326
|
+
<tr>
|
|
327
|
+
<td width="50%">
|
|
328
|
+
|
|
329
|
+
**Plan & tasks** — sticky checklist updating live as the agent works through steps.
|
|
330
|
+
|
|
331
|
+

|
|
332
|
+
|
|
333
|
+
</td>
|
|
334
|
+
<td width="50%">
|
|
335
|
+
|
|
336
|
+
**Subagents** — live feed and side panel showing each subagent's status and messages.
|
|
337
|
+
|
|
338
|
+

|
|
339
|
+
|
|
340
|
+
</td>
|
|
341
|
+
</tr>
|
|
342
|
+
<tr>
|
|
343
|
+
<td width="50%">
|
|
344
|
+
|
|
345
|
+
**Charts** — interactive bar/area/line/pie/scatter charts rendered inline.
|
|
346
|
+
|
|
347
|
+

|
|
348
|
+
|
|
349
|
+
</td>
|
|
350
|
+
<td width="50%">
|
|
351
|
+
|
|
352
|
+
**Code execution** — `run_python` shows code + stdout/result in a collapsible card.
|
|
312
353
|
|
|
313
|
-
|
|
354
|
+

|
|
314
355
|
|
|
315
|
-
|
|
356
|
+
</td>
|
|
357
|
+
</tr>
|
|
358
|
+
<tr>
|
|
359
|
+
<td width="50%">
|
|
316
360
|
|
|
317
|
-
**
|
|
361
|
+
**Ask user** — agent pauses to ask clarifying questions; card keeps the full transcript.
|
|
318
362
|
|
|
319
|
-

|
|
320
364
|
|
|
321
|
-
|
|
365
|
+
</td>
|
|
366
|
+
<td width="50%">
|
|
322
367
|
|
|
323
|
-
|
|
368
|
+
**Reasoning** — clean thinking view + answered-question history for long agent turns.
|
|
324
369
|
|
|
325
|
-
|
|
370
|
+

|
|
326
371
|
|
|
327
|
-
|
|
372
|
+
</td>
|
|
373
|
+
</tr>
|
|
374
|
+
</table>
|
|
328
375
|
|
|
329
|
-
### Auth
|
|
376
|
+
### Auth & Dashboard
|
|
330
377
|
|
|
331
|
-
|
|
378
|
+
<table>
|
|
379
|
+
<tr>
|
|
380
|
+
<td width="50%">
|
|
332
381
|
|
|
333
|
-
|
|
382
|
+
**Login** — split-screen with Google OAuth + email/password, HTTP-only cookie session.
|
|
334
383
|
|
|
335
|
-
|
|
384
|
+

|
|
336
385
|
|
|
337
|
-
|
|
386
|
+
</td>
|
|
387
|
+
<td width="50%">
|
|
338
388
|
|
|
339
|
-
|
|
389
|
+
**Register** — same split-screen layout with confirm-password and terms acceptance.
|
|
340
390
|
|
|
341
|
-
|
|
391
|
+

|
|
342
392
|
|
|
343
|
-
|
|
393
|
+
</td>
|
|
394
|
+
</tr>
|
|
395
|
+
<tr>
|
|
396
|
+
<td width="50%">
|
|
344
397
|
|
|
345
|
-
**Dashboard (
|
|
398
|
+
**Dashboard (light)** — stat cards, usage timeline, recent activity, onboarding banner.
|
|
346
399
|
|
|
347
|
-

|
|
348
401
|
|
|
349
|
-
|
|
402
|
+
</td>
|
|
403
|
+
<td width="50%">
|
|
350
404
|
|
|
351
|
-
**
|
|
405
|
+
**Dashboard (dark)** — same view in dark theme; saved per-device.
|
|
352
406
|
|
|
353
|
-

|
|
354
408
|
|
|
355
|
-
|
|
409
|
+
</td>
|
|
410
|
+
</tr>
|
|
411
|
+
</table>
|
|
356
412
|
|
|
357
|
-
|
|
413
|
+
### Teams & Knowledge Bases
|
|
358
414
|
|
|
359
|
-
|
|
415
|
+
<table>
|
|
416
|
+
<tr>
|
|
417
|
+
<td width="50%">
|
|
360
418
|
|
|
361
|
-
**
|
|
419
|
+
**Workspaces** — list of all orgs with plan tier and role; switch or create new workspace.
|
|
362
420
|
|
|
363
|
-

|
|
364
422
|
|
|
365
|
-
|
|
423
|
+
</td>
|
|
424
|
+
<td width="50%">
|
|
366
425
|
|
|
367
|
-
**
|
|
426
|
+
**Team management** — workspace profile, member list with roles, invite button.
|
|
368
427
|
|
|
369
|
-

|
|
429
|
+
|
|
430
|
+
</td>
|
|
431
|
+
</tr>
|
|
432
|
+
<tr>
|
|
433
|
+
<td width="50%">
|
|
434
|
+
|
|
435
|
+
**Knowledge bases** — list of RAG collections; toggle active bases, upload documents.
|
|
436
|
+
|
|
437
|
+

|
|
438
|
+
|
|
439
|
+
</td>
|
|
440
|
+
<td width="50%">
|
|
441
|
+
|
|
442
|
+
**Documents & sync sources** — preview files, manage Google Drive/S3 connectors, view run logs.
|
|
443
|
+
|
|
444
|
+

|
|
445
|
+
|
|
446
|
+
</td>
|
|
447
|
+
</tr>
|
|
448
|
+
</table>
|
|
449
|
+
|
|
450
|
+
### Billing & Usage
|
|
451
|
+
|
|
452
|
+
<table>
|
|
453
|
+
<tr>
|
|
454
|
+
<td width="50%">
|
|
455
|
+
|
|
456
|
+
**Billing overview** — current plan, seats, storage usage, Customer Portal link.
|
|
457
|
+
|
|
458
|
+

|
|
459
|
+
|
|
460
|
+
</td>
|
|
461
|
+
<td width="50%">
|
|
462
|
+
|
|
463
|
+
**Usage charts** — daily credits-spent + call-count charts, by-model token breakdown.
|
|
464
|
+
|
|
465
|
+

|
|
466
|
+
|
|
467
|
+
</td>
|
|
468
|
+
</tr>
|
|
469
|
+
<tr>
|
|
470
|
+
<td width="50%">
|
|
471
|
+
|
|
472
|
+
**Credits** — balance, immutable transaction ledger, usage sparkline.
|
|
473
|
+
|
|
474
|
+

|
|
475
|
+
|
|
476
|
+
</td>
|
|
477
|
+
<td width="50%">
|
|
478
|
+
|
|
479
|
+
**Subscription & invoices** — plan management, invoice list, payment methods — all via Stripe.
|
|
480
|
+
|
|
481
|
+

|
|
482
|
+
|
|
483
|
+
</td>
|
|
484
|
+
</tr>
|
|
485
|
+
</table>
|
|
370
486
|
|
|
371
487
|
### Profile & Settings
|
|
372
488
|
|
|
373
|
-
|
|
489
|
+
<table>
|
|
490
|
+
<tr>
|
|
491
|
+
<td width="50%">
|
|
374
492
|
|
|
375
|
-
|
|
493
|
+
**Profile** — avatar upload, display name, email, active sessions with per-device revoke.
|
|
376
494
|
|
|
377
|
-
|
|
495
|
+

|
|
378
496
|
|
|
379
|
-
|
|
497
|
+
</td>
|
|
498
|
+
<td width="50%">
|
|
380
499
|
|
|
381
|
-
**
|
|
500
|
+
**Account & security** — password change, "sign out everywhere", account deletion zone.
|
|
382
501
|
|
|
383
|
-

|
|
384
503
|
|
|
385
|
-
|
|
504
|
+
</td>
|
|
505
|
+
</tr>
|
|
506
|
+
<tr>
|
|
507
|
+
<td width="50%">
|
|
386
508
|
|
|
387
|
-
|
|
509
|
+
**Slash commands** — toggle built-ins, create custom prompt shortcuts for the chat palette.
|
|
388
510
|
|
|
389
|
-
|
|
511
|
+

|
|
390
512
|
|
|
391
|
-
|
|
513
|
+
</td>
|
|
514
|
+
<td width="50%">
|
|
515
|
+
|
|
516
|
+
**Appearance** — light/dark/system theme + brand color picker (5 presets, saved per-device).
|
|
517
|
+
|
|
518
|
+

|
|
519
|
+
|
|
520
|
+
</td>
|
|
521
|
+
</tr>
|
|
522
|
+
</table>
|
|
392
523
|
|
|
393
524
|
### Admin Panel
|
|
394
525
|
|
|
395
|
-
|
|
526
|
+
<table>
|
|
527
|
+
<tr>
|
|
528
|
+
<td width="50%">
|
|
396
529
|
|
|
397
|
-
|
|
530
|
+
**Overview** — workspace-wide metrics (users, sessions, conversations, MRR) + activity feed.
|
|
398
531
|
|
|
399
|
-
|
|
532
|
+

|
|
400
533
|
|
|
401
|
-
|
|
534
|
+
</td>
|
|
535
|
+
<td width="50%">
|
|
402
536
|
|
|
403
|
-
**
|
|
537
|
+
**User management** — search by email/name, roles, status, join date, inspect/suspend actions.
|
|
404
538
|
|
|
405
|
-

|
|
406
540
|
|
|
407
|
-
|
|
541
|
+
</td>
|
|
542
|
+
</tr>
|
|
543
|
+
<tr>
|
|
544
|
+
<td width="50%">
|
|
408
545
|
|
|
409
|
-
|
|
546
|
+
**Conversation browser** — filter by status/owner, open any conversation read-only.
|
|
410
547
|
|
|
411
|
-
|
|
548
|
+

|
|
412
549
|
|
|
413
|
-
|
|
550
|
+
</td>
|
|
551
|
+
<td width="50%">
|
|
414
552
|
|
|
415
|
-
**
|
|
553
|
+
**Message ratings** — approval rate, daily chart, filterable rating table with comments.
|
|
416
554
|
|
|
417
|
-

|
|
418
556
|
|
|
419
|
-
|
|
557
|
+
</td>
|
|
558
|
+
</tr>
|
|
559
|
+
<tr>
|
|
560
|
+
<td width="50%">
|
|
561
|
+
|
|
562
|
+
**Stripe events log** — webhook event browser with manual replay for debugging.
|
|
563
|
+
|
|
564
|
+

|
|
565
|
+
|
|
566
|
+
</td>
|
|
567
|
+
<td width="50%">
|
|
420
568
|
|
|
421
|
-
**
|
|
569
|
+
**System health** — live readiness checks: API, DB, Redis, vector store, LLM, worker, Stripe.
|
|
570
|
+
|
|
571
|
+

|
|
572
|
+
|
|
573
|
+
</td>
|
|
574
|
+
</tr>
|
|
575
|
+
</table>
|
|
576
|
+
|
|
577
|
+
### Marketing Site
|
|
578
|
+
|
|
579
|
+
<table>
|
|
580
|
+
<tr>
|
|
581
|
+
<td width="50%">
|
|
582
|
+
|
|
583
|
+
**Pricing** — three-tier page with monthly/annual toggle; pulls live Stripe plan data.
|
|
584
|
+
|
|
585
|
+

|
|
586
|
+
|
|
587
|
+
</td>
|
|
588
|
+
<td width="50%">
|
|
589
|
+
|
|
590
|
+
**Blog** — engineering blog from MDX files; tags, featured posts, author bylines. No CMS needed.
|
|
591
|
+
|
|
592
|
+

|
|
593
|
+
|
|
594
|
+
</td>
|
|
595
|
+
</tr>
|
|
596
|
+
</table>
|
|
597
|
+
|
|
598
|
+
### Background Tasks, Observability & Channels
|
|
599
|
+
|
|
600
|
+
<table>
|
|
601
|
+
<tr>
|
|
602
|
+
<td width="50%">
|
|
603
|
+
|
|
604
|
+
**Prefect** — self-hosted server with RAG, billing, and email flows on cron schedules.
|
|
605
|
+
|
|
606
|
+

|
|
607
|
+
|
|
608
|
+
</td>
|
|
609
|
+
<td width="50%">
|
|
610
|
+
|
|
611
|
+
**Prefect flow runs** — per-run history, task timeline, and retry visibility.
|
|
612
|
+
|
|
613
|
+

|
|
614
|
+
|
|
615
|
+
</td>
|
|
616
|
+
</tr>
|
|
617
|
+
<tr>
|
|
618
|
+
<td width="50%">
|
|
619
|
+
|
|
620
|
+
**Logfire** — distributed tracing: FastAPI, PydanticAI, DB, Redis, Celery, HTTPX in one timeline.
|
|
422
621
|
|
|
423
622
|

|
|
424
623
|
|
|
425
|
-
|
|
624
|
+
</td>
|
|
625
|
+
<td width="50%">
|
|
626
|
+
|
|
627
|
+
**LangSmith** — trace viewer for LangChain/LangGraph: chains, token usage, feedback.
|
|
426
628
|
|
|
427
629
|

|
|
428
630
|
|
|
429
|
-
|
|
631
|
+
</td>
|
|
632
|
+
</tr>
|
|
633
|
+
<tr>
|
|
634
|
+
<td width="50%">
|
|
430
635
|
|
|
431
|
-
**Telegram
|
|
636
|
+
**Telegram bot** — multi-bot, polling + webhook, per-thread sessions, group concurrency control.
|
|
432
637
|
|
|
433
638
|

|
|
434
639
|
|
|
435
|
-
|
|
640
|
+
</td>
|
|
641
|
+
<td width="50%">
|
|
436
642
|
|
|
437
|
-
**
|
|
438
|
-
|
|
439
|
-

|
|
440
|
-
|
|
441
|
-
**API Documentation** — Auto-generated OpenAPI / Swagger UI at `/docs`. All endpoints documented with request/response schemas, auth requirements, and example payloads.
|
|
643
|
+
**API docs** — auto-generated OpenAPI / Swagger UI with schemas, auth, and example payloads.
|
|
442
644
|
|
|
443
645
|

|
|
444
646
|
|
|
647
|
+
</td>
|
|
648
|
+
</tr>
|
|
649
|
+
</table>
|
|
650
|
+
|
|
445
651
|
---
|
|
446
652
|
|
|
447
653
|
## 🎯 Why This Template
|
|
@@ -467,6 +673,12 @@ This template gives you all of that out of the box, with **20+ configurable inte
|
|
|
467
673
|
|
|
468
674
|
Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for AI coding assistants (Claude Code, Codex, Copilot, Cursor, Zed). Following [progressive disclosure](https://humanlayer.dev/blog/writing-a-good-claude-md) best practices - concise project overview with pointers to detailed docs when needed.
|
|
469
675
|
|
|
676
|
+
They also ship a ready-to-use **`.claude/` toolkit** that adapts to the options you selected:
|
|
677
|
+
|
|
678
|
+
- **Agent Skills** (`.claude/skills/`) — model-invoked playbooks that auto-trigger when relevant: `alembic-migration`, `pytest-suite`, `agent-tool` (framework-aware), `frontend-feature`, `rag-knowledge`, `background-task` (queue-aware), `billing-stripe`, and `channel-bot`. Feature-gated — only the skills that match your stack are generated.
|
|
679
|
+
- **Slash commands** (`.claude/commands/`) — `/add-endpoint`, `/fix-issue`, `/review`.
|
|
680
|
+
- **Convention rules** (`.claude/rules/`) — architecture, code style, schemas, exceptions/security, testing, and frontend conventions, loaded automatically.
|
|
681
|
+
|
|
470
682
|
---
|
|
471
683
|
|
|
472
684
|
## ✨ Features
|
|
@@ -475,7 +687,6 @@ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for A
|
|
|
475
687
|
<a href="https://ai.pydantic.dev"><img src="https://img.shields.io/badge/PydanticAI-E92063?logo=pydantic&logoColor=white" alt="PydanticAI"></a>
|
|
476
688
|
<a href="https://python.langchain.com"><img src="https://img.shields.io/badge/LangChain-1C3C3C?logo=langchain&logoColor=white" alt="LangChain"></a>
|
|
477
689
|
<a href="https://langchain-ai.github.io/langgraph/"><img src="https://img.shields.io/badge/LangGraph-005A9C?logo=langchain&logoColor=white" alt="LangGraph"></a>
|
|
478
|
-
<a href="https://www.crewai.com"><img src="https://img.shields.io/badge/CrewAI-FF6B35?logoColor=white" alt="CrewAI"></a>
|
|
479
690
|
<a href="https://milvus.io"><img src="https://img.shields.io/badge/Milvus-FF6B35?logoColor=white" alt="Milvus"></a>
|
|
480
691
|
<a href="https://openai.com"><img src="https://img.shields.io/badge/OpenAI-412991?logo=openai&logoColor=white" alt="OpenAI"></a>
|
|
481
692
|
<a href="https://anthropic.com"><img src="https://img.shields.io/badge/Anthropic-D4A373?logo=anthropic&logoColor=white" alt="Anthropic"></a>
|
|
@@ -494,12 +705,12 @@ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for A
|
|
|
494
705
|
|
|
495
706
|
<p align="center">
|
|
496
707
|
<a href="https://www.postgresql.org"><img src="https://img.shields.io/badge/PostgreSQL-4169E1?logo=postgresql&logoColor=white" alt="PostgreSQL"></a>
|
|
497
|
-
<a href="https://www.mongodb.com"><img src="https://img.shields.io/badge/MongoDB-47A248?logo=mongodb&logoColor=white" alt="MongoDB"></a>
|
|
498
708
|
<a href="https://redis.io"><img src="https://img.shields.io/badge/Redis-DC382D?logo=redis&logoColor=white" alt="Redis"></a>
|
|
499
709
|
<a href="https://milvus.io"><img src="https://img.shields.io/badge/Milvus-00A1EA?logoColor=white" alt="Milvus"></a>
|
|
500
710
|
<a href="https://qdrant.tech"><img src="https://img.shields.io/badge/Qdrant-FF6B6B?logoColor=white" alt="Qdrant"></a>
|
|
501
711
|
<a href="https://www.trychroma.com"><img src="https://img.shields.io/badge/ChromaDB-FF6F61?logoColor=white" alt="ChromaDB"></a>
|
|
502
712
|
<a href="https://docs.celeryq.dev"><img src="https://img.shields.io/badge/Celery-37814A?logo=celery&logoColor=white" alt="Celery"></a>
|
|
713
|
+
<a href="https://www.prefect.io"><img src="https://img.shields.io/badge/Prefect-070E10?logo=prefect&logoColor=white" alt="Prefect"></a>
|
|
503
714
|
<a href="https://logfire.pydantic.dev"><img src="https://img.shields.io/badge/Logfire-E92063?logo=pydantic&logoColor=white" alt="Logfire"></a>
|
|
504
715
|
<a href="https://sentry.io"><img src="https://img.shields.io/badge/Sentry-362D59?logo=sentry&logoColor=white" alt="Sentry"></a>
|
|
505
716
|
<a href="https://prometheus.io"><img src="https://img.shields.io/badge/Prometheus-E6522C?logo=prometheus&logoColor=white" alt="Prometheus"></a>
|
|
@@ -514,26 +725,28 @@ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for A
|
|
|
514
725
|
|
|
515
726
|
### 🤖 AI/LLM First
|
|
516
727
|
|
|
517
|
-
- **
|
|
728
|
+
- **5 AI Frameworks** - [PydanticAI](https://ai.pydantic.dev), [PydanticDeep](https://github.com/vstorm-co/pydantic-deep), [LangChain](https://python.langchain.com), [LangGraph](https://langchain-ai.github.io/langgraph/), [DeepAgents](https://github.com/vstorm-co/pydantic-deepagents)
|
|
518
729
|
- **4 LLM Providers** - OpenAI, Anthropic, Google Gemini, OpenRouter
|
|
519
730
|
- **RAG** - Document ingestion, vector search, reranking (Milvus, Qdrant, ChromaDB, pgvector)
|
|
520
731
|
- **WebSocket Streaming** - Real-time responses with full event access
|
|
732
|
+
- **Rich Chat UI** - Specialized tool-call cards (web search, knowledge base, Python, charts, skills), live subagent feed, citation sources panel, plan/task checklist, reasoning view, and in-chat file previews
|
|
733
|
+
- **Agent Tools** - Web search, URL fetch, charts, code execution (`run_python`), skills, `ask_user`, plus optional Deep Research (TODO planner + parallel subagents)
|
|
521
734
|
- **Messaging Channels** - Telegram and Slack multi-bot integration with polling, webhooks, per-thread sessions, group concurrency control
|
|
522
735
|
- **Conversation Sharing** - Share conversations with users or via public links, admin conversation browser
|
|
523
736
|
- **Conversation Persistence** - Save chat history to database
|
|
524
737
|
- **Message Ratings** - Like/dislike responses with feedback, admin analytics
|
|
525
738
|
- **Image Description** - Extract images from documents, describe via LLM vision
|
|
526
|
-
- **Multimodal Embeddings** -
|
|
739
|
+
- **Multimodal Embeddings** - Provider-aware: OpenAI, Voyage (Anthropic), Gemini (multimodal text + images)
|
|
527
740
|
- **Document Sources** - Local files, API upload, Google Drive, S3/MinIO
|
|
528
|
-
- **Sync Sources** -
|
|
741
|
+
- **Sync Sources** - Per-organization connector management UI (Google Drive, S3/MinIO) with scheduled sync, manual triggers, encrypted credentials, and per-run logs
|
|
529
742
|
- **Observability** - Logfire for PydanticAI, LangSmith for LangChain/LangGraph/DeepAgents
|
|
530
743
|
|
|
531
744
|
### ⚡ Backend (FastAPI)
|
|
532
745
|
|
|
533
746
|
- **[FastAPI](https://fastapi.tiangolo.com)** + **[Pydantic v2](https://docs.pydantic.dev)** - High-performance async API
|
|
534
|
-
- **
|
|
747
|
+
- **PostgreSQL** (async) - SQLAlchemy 2.0 + Alembic migrations, pgvector-ready
|
|
535
748
|
- **Authentication** - JWT + Refresh tokens, API Keys, OAuth2 (Google)
|
|
536
|
-
- **Background Tasks** - Celery, Taskiq, or
|
|
749
|
+
- **Background Tasks** - Celery, Taskiq, ARQ, or Prefect
|
|
537
750
|
- **Django-style CLI** - Custom management commands with auto-discovery
|
|
538
751
|
|
|
539
752
|
### 🎨 Frontend (Next.js 15)
|
|
@@ -542,8 +755,9 @@ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for A
|
|
|
542
755
|
- **AI Chat Interface** - WebSocket streaming, tool call visualization
|
|
543
756
|
- **Authentication** - HTTP-only cookies, auto-refresh, password reset, magic link
|
|
544
757
|
- **Marketing Site** - hero, pricing, FAQ, blog, contact form, legal pages (PL + EN)
|
|
758
|
+
- **Billing Dashboard** - subscription, payment methods, invoices, credits balance/ledger, and usage charts (Stripe)
|
|
545
759
|
- **User Settings** - profile, API keys CRUD (`sk_*` tokens), onboarding tracking
|
|
546
|
-
- **Admin Panel** - workspace stats, Stripe events browser
|
|
760
|
+
- **Admin Panel** - workspace stats, message-rating analytics, Stripe events browser
|
|
547
761
|
- **SEO** - per-page metadata, OG image, sitemap, robots, manifest, favicons
|
|
548
762
|
- **Dark Mode** + **i18n** (PL/EN via next-intl, locale-prefixed routes)
|
|
549
763
|
|
|
@@ -551,11 +765,13 @@ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for A
|
|
|
551
765
|
|
|
552
766
|
| Category | Integrations |
|
|
553
767
|
|----------|-------------|
|
|
554
|
-
| **AI Frameworks** | PydanticAI, PydanticDeep, LangChain, LangGraph,
|
|
768
|
+
| **AI Frameworks** | PydanticAI, PydanticDeep, LangChain, LangGraph, DeepAgents |
|
|
555
769
|
| **LLM Providers** | OpenAI, Anthropic, Google Gemini, OpenRouter |
|
|
556
770
|
| **RAG / Vector Stores** | Milvus, Qdrant, ChromaDB, pgvector |
|
|
557
|
-
| **RAG Sources** | Local files, API upload, Google Drive, S3/MinIO, Sync Sources (
|
|
771
|
+
| **RAG Sources** | Local files, API upload, Google Drive, S3/MinIO, Sync Sources (per-org UI, scheduled) |
|
|
558
772
|
| **Embeddings** | OpenAI, Voyage, Gemini (multimodal), SentenceTransformers |
|
|
773
|
+
| **Background Tasks** | Celery, Taskiq, ARQ, Prefect |
|
|
774
|
+
| **Billing** | Stripe subscriptions (seat-based), credits + usage metering, invoices, Customer Portal |
|
|
559
775
|
| **Caching & State** | Redis, fastapi-cache2 |
|
|
560
776
|
| **Security** | Rate limiting, CORS, CSRF protection |
|
|
561
777
|
| **Observability** | Logfire, LangSmith, Sentry, Prometheus |
|
|
@@ -579,7 +795,7 @@ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for A
|
|
|
579
795
|
│ │
|
|
580
796
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
581
797
|
│ │ AI AGENTS │ │
|
|
582
|
-
│ │ PydanticAI · LangChain · LangGraph ·
|
|
798
|
+
│ │ PydanticAI · LangChain · LangGraph · DeepAgents │ │
|
|
583
799
|
│ │ ──────────────────────────────────────────────────────────── │ │
|
|
584
800
|
│ │ Tools: datetime · web_search (Tavily) · search_knowledge_base │ │
|
|
585
801
|
│ │ Providers: OpenAI · Anthropic · Gemini · OpenRouter │ │
|
|
@@ -605,14 +821,15 @@ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for A
|
|
|
605
821
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
606
822
|
│ │
|
|
607
823
|
│ Auth (JWT/API Key/OAuth) · Rate Limiting · Webhooks · Admin Panel │
|
|
608
|
-
│ Background Tasks (Celery/Taskiq/ARQ
|
|
609
|
-
│ Observability (Logfire/LangSmith/
|
|
824
|
+
│ Billing (Stripe + credits) · Background Tasks (Celery/Taskiq/ARQ/ │
|
|
825
|
+
│ Prefect) · Django-style CLI · Observability (Logfire/LangSmith/ │
|
|
826
|
+
│ Sentry/Prometheus) │
|
|
610
827
|
└───────┬──────────────┬──────────────┬──────────────┬─────────────────────┘
|
|
611
828
|
│ │ │ │
|
|
612
829
|
▼ ▼ ▼ ▼
|
|
613
830
|
PostgreSQL Redis Vector DB LLM APIs
|
|
614
|
-
|
|
615
|
-
|
|
831
|
+
(async) (Milvus/ (OpenAI/
|
|
832
|
+
Qdrant/ Anthropic/
|
|
616
833
|
ChromaDB/ Gemini)
|
|
617
834
|
pgvector)
|
|
618
835
|
```
|
|
@@ -637,9 +854,9 @@ graph TB
|
|
|
637
854
|
end
|
|
638
855
|
|
|
639
856
|
subgraph Infrastructure
|
|
640
|
-
DB[(PostgreSQL
|
|
857
|
+
DB[(PostgreSQL)]
|
|
641
858
|
Redis[(Redis)]
|
|
642
|
-
Queue[Celery/Taskiq]
|
|
859
|
+
Queue[Celery/Taskiq/ARQ/Prefect]
|
|
643
860
|
end
|
|
644
861
|
|
|
645
862
|
subgraph External
|
|
@@ -685,7 +902,7 @@ See [Architecture Documentation](https://github.com/vstorm-co/full-stack-ai-agen
|
|
|
685
902
|
|
|
686
903
|
## 🤖 AI Agent
|
|
687
904
|
|
|
688
|
-
Choose from **
|
|
905
|
+
Choose from **5 AI frameworks** and **4 LLM providers** when generating your project:
|
|
689
906
|
|
|
690
907
|
```bash
|
|
691
908
|
# PydanticAI with OpenAI (default)
|
|
@@ -694,9 +911,6 @@ fastapi-fullstack create my_app --ai-framework pydantic_ai
|
|
|
694
911
|
# LangGraph with Anthropic
|
|
695
912
|
fastapi-fullstack create my_app --ai-framework langgraph --llm-provider anthropic
|
|
696
913
|
|
|
697
|
-
# CrewAI with Google Gemini
|
|
698
|
-
fastapi-fullstack create my_app --ai-framework crewai --llm-provider google
|
|
699
|
-
|
|
700
914
|
# DeepAgents with OpenAI
|
|
701
915
|
fastapi-fullstack create my_app --ai-framework deepagents
|
|
702
916
|
|
|
@@ -712,7 +926,6 @@ fastapi-fullstack create my_app --rag --database postgresql --task-queue celery
|
|
|
712
926
|
| **PydanticDeep** | ✓ | ✓ | ✓ | - |
|
|
713
927
|
| **LangChain** | ✓ | ✓ | ✓ | - |
|
|
714
928
|
| **LangGraph** | ✓ | ✓ | ✓ | - |
|
|
715
|
-
| **CrewAI** | ✓ | ✓ | ✓ | - |
|
|
716
929
|
| **DeepAgents** | ✓ | ✓ | ✓ | - |
|
|
717
930
|
|
|
718
931
|
### PydanticAI Integration
|
|
@@ -833,7 +1046,7 @@ uv run my_app rag-sync-s3 --collection docs --prefix reports/ --bucket my-bucket
|
|
|
833
1046
|
- **Image description** - Extract images from documents, describe via LLM vision API (opt-in)
|
|
834
1047
|
- **Chunking** - RecursiveCharacterTextSplitter with configurable size/overlap
|
|
835
1048
|
- **Reranking** - Cohere API or local CrossEncoder for improved search quality
|
|
836
|
-
- **Agent integration** - All
|
|
1049
|
+
- **Agent integration** - All 5 AI frameworks get a `search_knowledge_base` tool automatically
|
|
837
1050
|
|
|
838
1051
|
---
|
|
839
1052
|
|
|
@@ -872,7 +1085,7 @@ graph LR
|
|
|
872
1085
|
|-----------|-------------|
|
|
873
1086
|
| **PydanticAI** | Agent runs, tool calls, LLM requests, token usage, streaming events |
|
|
874
1087
|
| **FastAPI** | Request/response traces, latency, status codes, route performance |
|
|
875
|
-
| **PostgreSQL
|
|
1088
|
+
| **PostgreSQL** | Query execution time, slow queries, connection pool stats |
|
|
876
1089
|
| **Redis** | Cache hits/misses, command latency, key patterns |
|
|
877
1090
|
| **Celery/Taskiq** | Task execution, queue depth, worker performance |
|
|
878
1091
|
| **HTTPX** | External API calls, response times, error rates |
|
|
@@ -1000,7 +1213,7 @@ my_project/
|
|
|
1000
1213
|
│ │ │ ├── deps.py # Dependency injection
|
|
1001
1214
|
│ │ │ └── router.py # Route aggregation
|
|
1002
1215
|
│ │ ├── core/ # Config, security, middleware
|
|
1003
|
-
│ │ ├── db/models/ # SQLAlchemy
|
|
1216
|
+
│ │ ├── db/models/ # SQLAlchemy 2.0 models
|
|
1004
1217
|
│ │ ├── schemas/ # Pydantic schemas
|
|
1005
1218
|
│ │ ├── repositories/ # Data access layer
|
|
1006
1219
|
│ │ ├── services/ # Business logic
|
|
@@ -1039,15 +1252,15 @@ generated_at = "2024-12-21T10:30:00+00:00"
|
|
|
1039
1252
|
|
|
1040
1253
|
| Option | Values | Description |
|
|
1041
1254
|
|--------|--------|-------------|
|
|
1042
|
-
| **Database** | `postgresql`, `
|
|
1255
|
+
| **Database** | `postgresql`, `none` | Async PostgreSQL (SQLAlchemy 2.0 + Alembic) |
|
|
1043
1256
|
| **ORM** | `sqlalchemy`, `sqlmodel` | SQLModel for simplified syntax |
|
|
1044
1257
|
| **Auth** | `jwt`, `api_key`, `both`, `none` | JWT includes user management |
|
|
1045
1258
|
| **OAuth** | `none`, `google` | Social login |
|
|
1046
|
-
| **AI Framework** | `pydantic_ai`, `
|
|
1259
|
+
| **AI Framework** | `pydantic_ai`, `pydantic_deep`, `langchain`, `langgraph`, `deepagents` | Choose your AI agent framework |
|
|
1047
1260
|
| **LLM Provider** | `openai`, `anthropic`, `google`, `openrouter` | OpenRouter only with PydanticAI |
|
|
1048
1261
|
| **RAG** | `--rag` | Enable RAG with vector database |
|
|
1049
1262
|
| **Vector Store** | `milvus`, `qdrant`, `chromadb`, `pgvector` | pgvector uses existing PostgreSQL |
|
|
1050
|
-
| **Background Tasks** | `none`, `celery`, `taskiq`, `arq` | Distributed queues |
|
|
1263
|
+
| **Background Tasks** | `none`, `celery`, `taskiq`, `arq`, `prefect` | Distributed queues / orchestration |
|
|
1051
1264
|
| **Frontend** | `none`, `nextjs` | Next.js 15 + React 19 |
|
|
1052
1265
|
|
|
1053
1266
|
### Presets
|
|
@@ -1115,9 +1328,10 @@ fastapi-fullstack
|
|
|
1115
1328
|
| **FastAPI Backend** | ✅ | ✅ | ❌ |
|
|
1116
1329
|
| **Next.js Frontend** | ✅ (v15) | ❌ | ✅ |
|
|
1117
1330
|
| **JWT + OAuth Authentication** | ✅ | ✅ | ✅ (NextAuth) |
|
|
1118
|
-
| **Background Tasks** (Celery/Taskiq/ARQ) | ✅ | ✅ (Celery) | ❌ |
|
|
1331
|
+
| **Background Tasks** (Celery/Taskiq/ARQ/Prefect) | ✅ | ✅ (Celery) | ❌ |
|
|
1332
|
+
| **Billing & Credits** (Stripe + usage metering) | ✅ | ❌ | ❌ |
|
|
1119
1333
|
| **Admin Panel** | ✅ (SQLAdmin) | ❌ | ❌ |
|
|
1120
|
-
| **
|
|
1334
|
+
| **Async PostgreSQL** (SQLAlchemy 2.0 + pgvector) | ✅ | ✅ | Prisma |
|
|
1121
1335
|
| **Docker + K8s** | ✅ | ✅ | ❌ |
|
|
1122
1336
|
| **Interactive CLI Wizard** | ✅ | ❌ | ✅ |
|
|
1123
1337
|
| **Django-style Commands** | ✅ | ❌ | ❌ |
|