@weirdfingers/baseboards 0.9.5 → 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/index.js +561 -469
  2. package/dist/index.js.map +1 -1
  3. package/package.json +2 -5
  4. package/templates/README.md +0 -122
  5. package/templates/api/.env.example +0 -65
  6. package/templates/api/ARTIFACT_RESOLUTION_GUIDE.md +0 -148
  7. package/templates/api/Dockerfile +0 -32
  8. package/templates/api/README.md +0 -264
  9. package/templates/api/alembic/env.py +0 -114
  10. package/templates/api/alembic/script.py.mako +0 -28
  11. package/templates/api/alembic/versions/20250101_000000_initial_schema.py +0 -506
  12. package/templates/api/alembic/versions/20251022_174729_remove_provider_name_from_generations.py +0 -75
  13. package/templates/api/alembic/versions/20251023_165852_switch_to_declarative_base_and_mapping.py +0 -467
  14. package/templates/api/alembic/versions/20251202_000000_add_artifact_lineage.py +0 -134
  15. package/templates/api/alembic/versions/2025925_62735_add_seed_data_for_default_tenant.py +0 -88
  16. package/templates/api/alembic.ini +0 -36
  17. package/templates/api/config/generators.yaml +0 -237
  18. package/templates/api/config/storage_config.yaml +0 -26
  19. package/templates/api/docs/ADDING_GENERATORS.md +0 -409
  20. package/templates/api/docs/GENERATORS_API.md +0 -502
  21. package/templates/api/docs/MIGRATIONS.md +0 -472
  22. package/templates/api/docs/TESTING_LIVE_APIS.md +0 -417
  23. package/templates/api/docs/storage_providers.md +0 -337
  24. package/templates/api/pyproject.toml +0 -205
  25. package/templates/api/src/boards/__init__.py +0 -10
  26. package/templates/api/src/boards/api/app.py +0 -172
  27. package/templates/api/src/boards/api/auth.py +0 -75
  28. package/templates/api/src/boards/api/endpoints/__init__.py +0 -3
  29. package/templates/api/src/boards/api/endpoints/jobs.py +0 -76
  30. package/templates/api/src/boards/api/endpoints/setup.py +0 -505
  31. package/templates/api/src/boards/api/endpoints/sse.py +0 -129
  32. package/templates/api/src/boards/api/endpoints/storage.py +0 -155
  33. package/templates/api/src/boards/api/endpoints/tenant_registration.py +0 -296
  34. package/templates/api/src/boards/api/endpoints/uploads.py +0 -149
  35. package/templates/api/src/boards/api/endpoints/webhooks.py +0 -13
  36. package/templates/api/src/boards/auth/__init__.py +0 -15
  37. package/templates/api/src/boards/auth/adapters/__init__.py +0 -27
  38. package/templates/api/src/boards/auth/adapters/auth0.py +0 -220
  39. package/templates/api/src/boards/auth/adapters/base.py +0 -73
  40. package/templates/api/src/boards/auth/adapters/clerk.py +0 -172
  41. package/templates/api/src/boards/auth/adapters/jwt.py +0 -122
  42. package/templates/api/src/boards/auth/adapters/none.py +0 -102
  43. package/templates/api/src/boards/auth/adapters/oidc.py +0 -284
  44. package/templates/api/src/boards/auth/adapters/supabase.py +0 -110
  45. package/templates/api/src/boards/auth/context.py +0 -35
  46. package/templates/api/src/boards/auth/factory.py +0 -129
  47. package/templates/api/src/boards/auth/middleware.py +0 -221
  48. package/templates/api/src/boards/auth/provisioning.py +0 -129
  49. package/templates/api/src/boards/auth/tenant_extraction.py +0 -278
  50. package/templates/api/src/boards/cli.py +0 -354
  51. package/templates/api/src/boards/config.py +0 -131
  52. package/templates/api/src/boards/database/__init__.py +0 -7
  53. package/templates/api/src/boards/database/cli.py +0 -110
  54. package/templates/api/src/boards/database/connection.py +0 -292
  55. package/templates/api/src/boards/database/models.py +0 -19
  56. package/templates/api/src/boards/database/seed_data.py +0 -182
  57. package/templates/api/src/boards/dbmodels/__init__.py +0 -441
  58. package/templates/api/src/boards/generators/__init__.py +0 -57
  59. package/templates/api/src/boards/generators/artifact_resolution.py +0 -405
  60. package/templates/api/src/boards/generators/artifacts.py +0 -53
  61. package/templates/api/src/boards/generators/base.py +0 -144
  62. package/templates/api/src/boards/generators/implementations/__init__.py +0 -14
  63. package/templates/api/src/boards/generators/implementations/fal/__init__.py +0 -25
  64. package/templates/api/src/boards/generators/implementations/fal/audio/__init__.py +0 -23
  65. package/templates/api/src/boards/generators/implementations/fal/audio/beatoven_music_generation.py +0 -171
  66. package/templates/api/src/boards/generators/implementations/fal/audio/beatoven_sound_effect_generation.py +0 -167
  67. package/templates/api/src/boards/generators/implementations/fal/audio/chatterbox_text_to_speech.py +0 -176
  68. package/templates/api/src/boards/generators/implementations/fal/audio/chatterbox_tts_turbo.py +0 -195
  69. package/templates/api/src/boards/generators/implementations/fal/audio/elevenlabs_sound_effects_v2.py +0 -194
  70. package/templates/api/src/boards/generators/implementations/fal/audio/elevenlabs_tts_eleven_v3.py +0 -209
  71. package/templates/api/src/boards/generators/implementations/fal/audio/fal_elevenlabs_tts_turbo_v2_5.py +0 -206
  72. package/templates/api/src/boards/generators/implementations/fal/audio/fal_minimax_speech_26_hd.py +0 -237
  73. package/templates/api/src/boards/generators/implementations/fal/audio/minimax_music_v2.py +0 -173
  74. package/templates/api/src/boards/generators/implementations/fal/audio/minimax_speech_2_6_turbo.py +0 -221
  75. package/templates/api/src/boards/generators/implementations/fal/image/__init__.py +0 -63
  76. package/templates/api/src/boards/generators/implementations/fal/image/bytedance_seedream_v45_edit.py +0 -219
  77. package/templates/api/src/boards/generators/implementations/fal/image/clarity_upscaler.py +0 -220
  78. package/templates/api/src/boards/generators/implementations/fal/image/crystal_upscaler.py +0 -173
  79. package/templates/api/src/boards/generators/implementations/fal/image/fal_ideogram_character.py +0 -227
  80. package/templates/api/src/boards/generators/implementations/fal/image/flux_2.py +0 -203
  81. package/templates/api/src/boards/generators/implementations/fal/image/flux_2_edit.py +0 -230
  82. package/templates/api/src/boards/generators/implementations/fal/image/flux_2_pro.py +0 -204
  83. package/templates/api/src/boards/generators/implementations/fal/image/flux_2_pro_edit.py +0 -221
  84. package/templates/api/src/boards/generators/implementations/fal/image/flux_pro_kontext.py +0 -216
  85. package/templates/api/src/boards/generators/implementations/fal/image/flux_pro_ultra.py +0 -197
  86. package/templates/api/src/boards/generators/implementations/fal/image/gemini_25_flash_image.py +0 -177
  87. package/templates/api/src/boards/generators/implementations/fal/image/gemini_25_flash_image_edit.py +0 -208
  88. package/templates/api/src/boards/generators/implementations/fal/image/gpt_image_15_edit.py +0 -216
  89. package/templates/api/src/boards/generators/implementations/fal/image/gpt_image_1_5.py +0 -177
  90. package/templates/api/src/boards/generators/implementations/fal/image/gpt_image_1_edit_image.py +0 -182
  91. package/templates/api/src/boards/generators/implementations/fal/image/gpt_image_1_mini.py +0 -167
  92. package/templates/api/src/boards/generators/implementations/fal/image/ideogram_character_edit.py +0 -299
  93. package/templates/api/src/boards/generators/implementations/fal/image/ideogram_v2.py +0 -190
  94. package/templates/api/src/boards/generators/implementations/fal/image/imagen4_preview.py +0 -191
  95. package/templates/api/src/boards/generators/implementations/fal/image/imagen4_preview_fast.py +0 -179
  96. package/templates/api/src/boards/generators/implementations/fal/image/nano_banana.py +0 -183
  97. package/templates/api/src/boards/generators/implementations/fal/image/nano_banana_edit.py +0 -212
  98. package/templates/api/src/boards/generators/implementations/fal/image/nano_banana_pro.py +0 -179
  99. package/templates/api/src/boards/generators/implementations/fal/image/nano_banana_pro_edit.py +0 -226
  100. package/templates/api/src/boards/generators/implementations/fal/image/qwen_image.py +0 -249
  101. package/templates/api/src/boards/generators/implementations/fal/image/qwen_image_edit.py +0 -244
  102. package/templates/api/src/boards/generators/implementations/fal/image/reve_edit.py +0 -178
  103. package/templates/api/src/boards/generators/implementations/fal/image/reve_text_to_image.py +0 -155
  104. package/templates/api/src/boards/generators/implementations/fal/image/seedream_v45_text_to_image.py +0 -180
  105. package/templates/api/src/boards/generators/implementations/fal/utils.py +0 -61
  106. package/templates/api/src/boards/generators/implementations/fal/video/__init__.py +0 -77
  107. package/templates/api/src/boards/generators/implementations/fal/video/bytedance_seedance_v1_pro_text_to_video.py +0 -209
  108. package/templates/api/src/boards/generators/implementations/fal/video/creatify_lipsync.py +0 -161
  109. package/templates/api/src/boards/generators/implementations/fal/video/fal_bytedance_seedance_v1_pro_image_to_video.py +0 -222
  110. package/templates/api/src/boards/generators/implementations/fal/video/fal_minimax_hailuo_02_standard_text_to_video.py +0 -152
  111. package/templates/api/src/boards/generators/implementations/fal/video/fal_pixverse_lipsync.py +0 -197
  112. package/templates/api/src/boards/generators/implementations/fal/video/fal_sora_2_text_to_video.py +0 -173
  113. package/templates/api/src/boards/generators/implementations/fal/video/infinitalk.py +0 -221
  114. package/templates/api/src/boards/generators/implementations/fal/video/kling_video_ai_avatar_v2_pro.py +0 -168
  115. package/templates/api/src/boards/generators/implementations/fal/video/kling_video_ai_avatar_v2_standard.py +0 -159
  116. package/templates/api/src/boards/generators/implementations/fal/video/kling_video_v2_5_turbo_pro_image_to_video.py +0 -175
  117. package/templates/api/src/boards/generators/implementations/fal/video/kling_video_v2_5_turbo_pro_text_to_video.py +0 -168
  118. package/templates/api/src/boards/generators/implementations/fal/video/minimax_hailuo_2_3_pro_image_to_video.py +0 -153
  119. package/templates/api/src/boards/generators/implementations/fal/video/sora2_image_to_video.py +0 -172
  120. package/templates/api/src/boards/generators/implementations/fal/video/sora_2_image_to_video_pro.py +0 -175
  121. package/templates/api/src/boards/generators/implementations/fal/video/sora_2_text_to_video_pro.py +0 -163
  122. package/templates/api/src/boards/generators/implementations/fal/video/sync_lipsync_v2.py +0 -167
  123. package/templates/api/src/boards/generators/implementations/fal/video/sync_lipsync_v2_pro.py +0 -155
  124. package/templates/api/src/boards/generators/implementations/fal/video/veed_fabric_1_0.py +0 -180
  125. package/templates/api/src/boards/generators/implementations/fal/video/veed_lipsync.py +0 -174
  126. package/templates/api/src/boards/generators/implementations/fal/video/veo3.py +0 -194
  127. package/templates/api/src/boards/generators/implementations/fal/video/veo31.py +0 -190
  128. package/templates/api/src/boards/generators/implementations/fal/video/veo31_fast.py +0 -190
  129. package/templates/api/src/boards/generators/implementations/fal/video/veo31_fast_image_to_video.py +0 -191
  130. package/templates/api/src/boards/generators/implementations/fal/video/veo31_first_last_frame_to_video.py +0 -187
  131. package/templates/api/src/boards/generators/implementations/fal/video/veo31_image_to_video.py +0 -183
  132. package/templates/api/src/boards/generators/implementations/fal/video/veo31_reference_to_video.py +0 -172
  133. package/templates/api/src/boards/generators/implementations/fal/video/wan_25_preview_image_to_video.py +0 -212
  134. package/templates/api/src/boards/generators/implementations/fal/video/wan_25_preview_text_to_video.py +0 -208
  135. package/templates/api/src/boards/generators/implementations/fal/video/wan_pro_image_to_video.py +0 -158
  136. package/templates/api/src/boards/generators/implementations/kie/__init__.py +0 -11
  137. package/templates/api/src/boards/generators/implementations/kie/base.py +0 -316
  138. package/templates/api/src/boards/generators/implementations/kie/image/__init__.py +0 -3
  139. package/templates/api/src/boards/generators/implementations/kie/image/nano_banana_edit.py +0 -190
  140. package/templates/api/src/boards/generators/implementations/kie/utils.py +0 -98
  141. package/templates/api/src/boards/generators/implementations/kie/video/__init__.py +0 -8
  142. package/templates/api/src/boards/generators/implementations/kie/video/veo3.py +0 -161
  143. package/templates/api/src/boards/generators/implementations/openai/__init__.py +0 -1
  144. package/templates/api/src/boards/generators/implementations/openai/audio/__init__.py +0 -1
  145. package/templates/api/src/boards/generators/implementations/openai/audio/whisper.py +0 -69
  146. package/templates/api/src/boards/generators/implementations/openai/image/__init__.py +0 -1
  147. package/templates/api/src/boards/generators/implementations/openai/image/dalle3.py +0 -96
  148. package/templates/api/src/boards/generators/implementations/replicate/__init__.py +0 -1
  149. package/templates/api/src/boards/generators/implementations/replicate/image/__init__.py +0 -1
  150. package/templates/api/src/boards/generators/implementations/replicate/image/flux_pro.py +0 -88
  151. package/templates/api/src/boards/generators/implementations/replicate/video/__init__.py +0 -1
  152. package/templates/api/src/boards/generators/implementations/replicate/video/lipsync.py +0 -73
  153. package/templates/api/src/boards/generators/loader.py +0 -253
  154. package/templates/api/src/boards/generators/registry.py +0 -114
  155. package/templates/api/src/boards/generators/resolution.py +0 -632
  156. package/templates/api/src/boards/generators/testmods/class_gen.py +0 -34
  157. package/templates/api/src/boards/generators/testmods/import_side_effect.py +0 -35
  158. package/templates/api/src/boards/graphql/__init__.py +0 -7
  159. package/templates/api/src/boards/graphql/access_control.py +0 -136
  160. package/templates/api/src/boards/graphql/mutations/root.py +0 -148
  161. package/templates/api/src/boards/graphql/queries/root.py +0 -116
  162. package/templates/api/src/boards/graphql/resolvers/__init__.py +0 -8
  163. package/templates/api/src/boards/graphql/resolvers/auth.py +0 -12
  164. package/templates/api/src/boards/graphql/resolvers/board.py +0 -1053
  165. package/templates/api/src/boards/graphql/resolvers/generation.py +0 -666
  166. package/templates/api/src/boards/graphql/resolvers/generator.py +0 -50
  167. package/templates/api/src/boards/graphql/resolvers/lineage.py +0 -381
  168. package/templates/api/src/boards/graphql/resolvers/upload.py +0 -463
  169. package/templates/api/src/boards/graphql/resolvers/user.py +0 -25
  170. package/templates/api/src/boards/graphql/schema.py +0 -81
  171. package/templates/api/src/boards/graphql/types/board.py +0 -102
  172. package/templates/api/src/boards/graphql/types/generation.py +0 -166
  173. package/templates/api/src/boards/graphql/types/generator.py +0 -17
  174. package/templates/api/src/boards/graphql/types/user.py +0 -47
  175. package/templates/api/src/boards/jobs/repository.py +0 -153
  176. package/templates/api/src/boards/logging.py +0 -195
  177. package/templates/api/src/boards/middleware.py +0 -339
  178. package/templates/api/src/boards/progress/__init__.py +0 -4
  179. package/templates/api/src/boards/progress/models.py +0 -25
  180. package/templates/api/src/boards/progress/publisher.py +0 -64
  181. package/templates/api/src/boards/py.typed +0 -0
  182. package/templates/api/src/boards/redis_pool.py +0 -118
  183. package/templates/api/src/boards/storage/__init__.py +0 -52
  184. package/templates/api/src/boards/storage/base.py +0 -363
  185. package/templates/api/src/boards/storage/config.py +0 -187
  186. package/templates/api/src/boards/storage/factory.py +0 -288
  187. package/templates/api/src/boards/storage/implementations/__init__.py +0 -27
  188. package/templates/api/src/boards/storage/implementations/gcs.py +0 -340
  189. package/templates/api/src/boards/storage/implementations/local.py +0 -201
  190. package/templates/api/src/boards/storage/implementations/s3.py +0 -294
  191. package/templates/api/src/boards/storage/implementations/supabase.py +0 -218
  192. package/templates/api/src/boards/tenant_isolation.py +0 -446
  193. package/templates/api/src/boards/validation.py +0 -262
  194. package/templates/api/src/boards/workers/__init__.py +0 -1
  195. package/templates/api/src/boards/workers/actors.py +0 -274
  196. package/templates/api/src/boards/workers/cli.py +0 -125
  197. package/templates/api/src/boards/workers/context.py +0 -348
  198. package/templates/api/src/boards/workers/middleware.py +0 -58
  199. package/templates/api/src/py.typed +0 -0
  200. package/templates/compose.web.yaml +0 -35
  201. package/templates/compose.yaml +0 -116
  202. package/templates/docker/env.example +0 -23
  203. package/templates/web/.env.example +0 -28
  204. package/templates/web/Dockerfile +0 -51
  205. package/templates/web/components.json +0 -22
  206. package/templates/web/imageLoader.js +0 -18
  207. package/templates/web/next-env.d.ts +0 -5
  208. package/templates/web/next.config.js +0 -36
  209. package/templates/web/package.json +0 -41
  210. package/templates/web/postcss.config.mjs +0 -7
  211. package/templates/web/public/favicon.ico +0 -0
  212. package/templates/web/src/app/boards/[boardId]/page.tsx +0 -353
  213. package/templates/web/src/app/globals.css +0 -123
  214. package/templates/web/src/app/layout.tsx +0 -31
  215. package/templates/web/src/app/lineage/[generationId]/page.tsx +0 -235
  216. package/templates/web/src/app/page.tsx +0 -35
  217. package/templates/web/src/app/providers.tsx +0 -18
  218. package/templates/web/src/components/boards/ArtifactInputSlots.tsx +0 -206
  219. package/templates/web/src/components/boards/ArtifactPreview.tsx +0 -466
  220. package/templates/web/src/components/boards/GenerationGrid.tsx +0 -282
  221. package/templates/web/src/components/boards/GenerationInput.tsx +0 -370
  222. package/templates/web/src/components/boards/GeneratorSelector.tsx +0 -272
  223. package/templates/web/src/components/boards/UploadArtifact.tsx +0 -563
  224. package/templates/web/src/components/header.tsx +0 -32
  225. package/templates/web/src/components/theme-provider.tsx +0 -10
  226. package/templates/web/src/components/theme-toggle.tsx +0 -75
  227. package/templates/web/src/components/ui/alert-dialog.tsx +0 -157
  228. package/templates/web/src/components/ui/button.tsx +0 -58
  229. package/templates/web/src/components/ui/card.tsx +0 -92
  230. package/templates/web/src/components/ui/dropdown-menu.tsx +0 -200
  231. package/templates/web/src/components/ui/navigation-menu.tsx +0 -168
  232. package/templates/web/src/components/ui/toast.tsx +0 -128
  233. package/templates/web/src/components/ui/toaster.tsx +0 -35
  234. package/templates/web/src/components/ui/use-toast.ts +0 -187
  235. package/templates/web/src/hooks/useGeneratorMRU.ts +0 -57
  236. package/templates/web/src/lib/utils.ts +0 -6
  237. package/templates/web/tsconfig.json +0 -41
@@ -1,441 +0,0 @@
1
- """
2
- Database models for Boards (authoritative ORM definitions).
3
-
4
- This module defines the SQLAlchemy Base with a naming convention for stable
5
- Alembic autogenerate diffs, and exposes `target_metadata` for Alembic.
6
- """
7
-
8
- from datetime import datetime
9
- from decimal import Decimal
10
- from typing import Any
11
- from uuid import UUID
12
-
13
- from sqlalchemy import (
14
- Boolean,
15
- CheckConstraint,
16
- Column,
17
- DateTime,
18
- ForeignKeyConstraint,
19
- Index,
20
- MetaData,
21
- Numeric,
22
- PrimaryKeyConstraint,
23
- String,
24
- Text,
25
- UniqueConstraint,
26
- Uuid,
27
- text,
28
- )
29
- from sqlalchemy.dialects.postgresql import JSONB
30
- from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
31
-
32
- # Naming convention for deterministic constraint/index names in Alembic diffs
33
- naming_convention = {
34
- "ix": "ix_%(column_0_label)s",
35
- "uq": "uq_%(table_name)s_%(column_0_name)s",
36
- "ck": "ck_%(table_name)s_%(constraint_name)s",
37
- "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
38
- "pk": "pk_%(table_name)s",
39
- }
40
-
41
-
42
- class Base(DeclarativeBase):
43
- """Base class for all database models with type checking support."""
44
-
45
- metadata = MetaData(naming_convention=naming_convention, schema="boards")
46
-
47
-
48
- class Tenants(Base):
49
- __tablename__ = "tenants"
50
- __table_args__ = (
51
- PrimaryKeyConstraint("id", name="tenants_pkey"),
52
- UniqueConstraint("slug", name="tenants_slug_key"),
53
- )
54
-
55
- id: Mapped[UUID] = mapped_column(Uuid, server_default=text("uuid_generate_v4()"))
56
- name: Mapped[str] = mapped_column(String(255), nullable=False)
57
- slug: Mapped[str] = mapped_column(String(255), nullable=False)
58
- settings: Mapped[dict[str, Any]] = mapped_column(JSONB, server_default=text("'{}'::jsonb"))
59
- created_at: Mapped[datetime] = mapped_column(
60
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
61
- )
62
- updated_at: Mapped[datetime] = mapped_column(
63
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
64
- )
65
-
66
- provider_configs: Mapped[list["ProviderConfigs"]] = relationship(
67
- "ProviderConfigs", uselist=True, back_populates="tenant"
68
- )
69
- users: Mapped[list["Users"]] = relationship("Users", uselist=True, back_populates="tenant")
70
- boards: Mapped[list["Boards"]] = relationship("Boards", uselist=True, back_populates="tenant")
71
- lora_models: Mapped[list["LoraModels"]] = relationship(
72
- "LoraModels", uselist=True, back_populates="tenant"
73
- )
74
- generations: Mapped[list["Generations"]] = relationship(
75
- "Generations", uselist=True, back_populates="tenant"
76
- )
77
- credit_transactions: Mapped[list["CreditTransactions"]] = relationship(
78
- "CreditTransactions", uselist=True, back_populates="tenant"
79
- )
80
-
81
-
82
- class ProviderConfigs(Base):
83
- __tablename__ = "provider_configs"
84
- __table_args__ = (
85
- ForeignKeyConstraint(
86
- ["tenant_id"],
87
- ["tenants.id"],
88
- ondelete="CASCADE",
89
- name="provider_configs_tenant_id_fkey",
90
- ),
91
- PrimaryKeyConstraint("id", name="provider_configs_pkey"),
92
- UniqueConstraint(
93
- "tenant_id",
94
- "provider_name",
95
- name="provider_configs_tenant_id_provider_name_key",
96
- ),
97
- )
98
-
99
- id: Mapped[UUID] = mapped_column(Uuid, server_default=text("uuid_generate_v4()"))
100
- tenant_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
101
- provider_name: Mapped[str] = mapped_column(String(100), nullable=False)
102
- config: Mapped[dict[str, Any]] = mapped_column(JSONB, nullable=False)
103
- is_enabled: Mapped[bool] = mapped_column(Boolean, server_default=text("true"))
104
- created_at: Mapped[datetime] = mapped_column(
105
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
106
- )
107
- updated_at: Mapped[datetime] = mapped_column(
108
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
109
- )
110
-
111
- tenant: Mapped["Tenants"] = relationship("Tenants", back_populates="provider_configs")
112
-
113
-
114
- class Users(Base):
115
- __tablename__ = "users"
116
- __table_args__ = (
117
- ForeignKeyConstraint(
118
- ["tenant_id"],
119
- ["tenants.id"],
120
- ondelete="CASCADE",
121
- name="users_tenant_id_fkey",
122
- ),
123
- PrimaryKeyConstraint("id", name="users_pkey"),
124
- UniqueConstraint(
125
- "tenant_id",
126
- "auth_provider",
127
- "auth_subject",
128
- name="users_tenant_id_auth_provider_auth_subject_key",
129
- ),
130
- Index("idx_users_auth", "auth_provider", "auth_subject"),
131
- Index("idx_users_tenant", "tenant_id"),
132
- )
133
-
134
- id: Mapped[UUID] = mapped_column(Uuid, server_default=text("uuid_generate_v4()"))
135
- tenant_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
136
- auth_provider: Mapped[str] = mapped_column(String(50), nullable=False)
137
- auth_subject: Mapped[str] = mapped_column(String(255), nullable=False)
138
- email: Mapped[str | None] = mapped_column(String(255))
139
- display_name: Mapped[str | None] = mapped_column(String(255))
140
- avatar_url: Mapped[str | None] = mapped_column(Text)
141
- metadata_: Mapped[dict[str, Any]] = mapped_column(
142
- "metadata", JSONB, server_default=text("'{}'::jsonb")
143
- )
144
- created_at: Mapped[datetime] = mapped_column(
145
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
146
- )
147
- updated_at: Mapped[datetime] = mapped_column(
148
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
149
- )
150
-
151
- tenant: Mapped["Tenants"] = relationship("Tenants", back_populates="users")
152
- boards: Mapped[list["Boards"]] = relationship("Boards", uselist=True, back_populates="owner")
153
- lora_models: Mapped[list["LoraModels"]] = relationship(
154
- "LoraModels", uselist=True, back_populates="user"
155
- )
156
- board_members: Mapped[list["BoardMembers"]] = relationship(
157
- "BoardMembers",
158
- uselist=True,
159
- foreign_keys="[BoardMembers.invited_by]",
160
- back_populates="users",
161
- )
162
- board_members_: Mapped[list["BoardMembers"]] = relationship(
163
- "BoardMembers",
164
- uselist=True,
165
- foreign_keys="[BoardMembers.user_id]",
166
- back_populates="user",
167
- )
168
- generations: Mapped[list["Generations"]] = relationship(
169
- "Generations", uselist=True, back_populates="user"
170
- )
171
- credit_transactions: Mapped[list["CreditTransactions"]] = relationship(
172
- "CreditTransactions", uselist=True, back_populates="user"
173
- )
174
-
175
-
176
- class Boards(Base):
177
- __tablename__ = "boards"
178
- __table_args__ = (
179
- ForeignKeyConstraint(
180
- ["owner_id"], ["users.id"], ondelete="CASCADE", name="boards_owner_id_fkey"
181
- ),
182
- ForeignKeyConstraint(
183
- ["tenant_id"],
184
- ["tenants.id"],
185
- ondelete="CASCADE",
186
- name="boards_tenant_id_fkey",
187
- ),
188
- PrimaryKeyConstraint("id", name="boards_pkey"),
189
- Index("idx_boards_owner", "owner_id"),
190
- Index("idx_boards_tenant", "tenant_id"),
191
- )
192
-
193
- id: Mapped[UUID] = mapped_column(Uuid, server_default=text("uuid_generate_v4()"))
194
- tenant_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
195
- owner_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
196
- title: Mapped[str] = mapped_column(String(255), nullable=False)
197
- description: Mapped[str | None] = mapped_column(Text)
198
- is_public: Mapped[bool] = mapped_column(Boolean, server_default=text("false"))
199
- settings: Mapped[dict[str, Any]] = mapped_column(JSONB, server_default=text("'{}'::jsonb"))
200
- metadata_: Mapped[dict[str, Any]] = mapped_column(
201
- "metadata", JSONB, server_default=text("'{}'::jsonb")
202
- )
203
- created_at: Mapped[datetime] = mapped_column(
204
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
205
- )
206
- updated_at: Mapped[datetime] = mapped_column(
207
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
208
- )
209
-
210
- owner: Mapped["Users"] = relationship("Users", back_populates="boards")
211
- tenant: Mapped["Tenants"] = relationship("Tenants", back_populates="boards")
212
- board_members: Mapped[list["BoardMembers"]] = relationship(
213
- "BoardMembers", uselist=True, back_populates="board"
214
- )
215
- generations: Mapped[list["Generations"]] = relationship(
216
- "Generations", uselist=True, back_populates="board"
217
- )
218
-
219
-
220
- class LoraModels(Base):
221
- __tablename__ = "lora_models"
222
- __table_args__ = (
223
- ForeignKeyConstraint(
224
- ["tenant_id"],
225
- ["tenants.id"],
226
- ondelete="CASCADE",
227
- name="lora_models_tenant_id_fkey",
228
- ),
229
- ForeignKeyConstraint(
230
- ["user_id"],
231
- ["users.id"],
232
- ondelete="CASCADE",
233
- name="lora_models_user_id_fkey",
234
- ),
235
- PrimaryKeyConstraint("id", name="lora_models_pkey"),
236
- )
237
-
238
- id: Mapped[UUID] = mapped_column(Uuid, server_default=text("uuid_generate_v4()"))
239
- tenant_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
240
- user_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
241
- name: Mapped[str] = mapped_column(String(255), nullable=False)
242
- base_model: Mapped[str] = mapped_column(String(100), nullable=False)
243
- storage_url: Mapped[str] = mapped_column(Text, nullable=False)
244
- config: Mapped[dict[str, Any]] = mapped_column(JSONB, nullable=False)
245
- trigger_word: Mapped[str | None] = mapped_column(String(100))
246
- metadata_: Mapped[dict[str, Any]] = mapped_column(
247
- "metadata", JSONB, server_default=text("'{}'::jsonb")
248
- )
249
- is_public: Mapped[bool] = mapped_column(Boolean, server_default=text("false"))
250
- created_at: Mapped[datetime] = mapped_column(
251
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
252
- )
253
- updated_at: Mapped[datetime] = mapped_column(
254
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
255
- )
256
-
257
- tenant: Mapped["Tenants"] = relationship("Tenants", back_populates="lora_models")
258
- user: Mapped["Users"] = relationship("Users", back_populates="lora_models")
259
-
260
-
261
- class BoardMembers(Base):
262
- __tablename__ = "board_members"
263
- __table_args__ = (
264
- CheckConstraint(
265
- "role::text = ANY (ARRAY["
266
- "'viewer'::character varying, 'editor'::character varying, "
267
- "'admin'::character varying]::text[])",
268
- name="board_members_role_check",
269
- ),
270
- ForeignKeyConstraint(
271
- ["board_id"],
272
- ["boards.id"],
273
- ondelete="CASCADE",
274
- name="board_members_board_id_fkey",
275
- ),
276
- ForeignKeyConstraint(["invited_by"], ["users.id"], name="board_members_invited_by_fkey"),
277
- ForeignKeyConstraint(
278
- ["user_id"],
279
- ["users.id"],
280
- ondelete="CASCADE",
281
- name="board_members_user_id_fkey",
282
- ),
283
- PrimaryKeyConstraint("id", name="board_members_pkey"),
284
- UniqueConstraint("board_id", "user_id", name="board_members_board_id_user_id_key"),
285
- Index("idx_board_members_board", "board_id"),
286
- Index("idx_board_members_user", "user_id"),
287
- )
288
-
289
- id: Mapped[UUID] = mapped_column(Uuid, server_default=text("uuid_generate_v4()"))
290
- board_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
291
- user_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
292
- role: Mapped[str] = mapped_column(String(20), nullable=False)
293
- invited_by: Mapped[UUID | None] = mapped_column(Uuid)
294
- joined_at: Mapped[datetime] = mapped_column(
295
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
296
- )
297
-
298
- board: Mapped["Boards"] = relationship("Boards", back_populates="board_members")
299
- users: Mapped["Users | None"] = relationship(
300
- "Users", foreign_keys=[invited_by], back_populates="board_members"
301
- )
302
- user: Mapped["Users"] = relationship(
303
- "Users", foreign_keys=[user_id], back_populates="board_members_"
304
- )
305
-
306
-
307
- class Generations(Base):
308
- __tablename__ = "generations"
309
- __table_args__ = (
310
- CheckConstraint(
311
- "artifact_type::text = ANY (ARRAY["
312
- "'image'::character varying, 'video'::character varying, "
313
- "'audio'::character varying, 'text'::character varying, "
314
- "'lora'::character varying, 'model'::character varying"
315
- "]::text[])",
316
- name="generations_artifact_type_check",
317
- ),
318
- ForeignKeyConstraint(
319
- ["board_id"],
320
- ["boards.id"],
321
- ondelete="CASCADE",
322
- name="generations_board_id_fkey",
323
- ),
324
- ForeignKeyConstraint(
325
- ["tenant_id"],
326
- ["tenants.id"],
327
- ondelete="CASCADE",
328
- name="generations_tenant_id_fkey",
329
- ),
330
- ForeignKeyConstraint(
331
- ["user_id"],
332
- ["users.id"],
333
- ondelete="CASCADE",
334
- name="generations_user_id_fkey",
335
- ),
336
- PrimaryKeyConstraint("id", name="generations_pkey"),
337
- Index("idx_generations_board", "board_id"),
338
- Index("idx_generations_status", "status"),
339
- Index("idx_generations_tenant", "tenant_id"),
340
- Index("idx_generations_user", "user_id"),
341
- Index(
342
- "idx_generations_input_artifacts_gin",
343
- "input_artifacts",
344
- postgresql_using="gin",
345
- ),
346
- )
347
-
348
- id: Mapped[UUID] = mapped_column(Uuid, server_default=text("uuid_generate_v4()"))
349
- tenant_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
350
- board_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
351
- user_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
352
- generator_name: Mapped[str] = mapped_column(String(100), nullable=False)
353
- artifact_type: Mapped[str] = mapped_column(String(50), nullable=False)
354
- input_params: Mapped[dict[str, Any]] = mapped_column(JSONB, nullable=False)
355
- status: Mapped[str] = mapped_column(
356
- String(50), nullable=False, server_default=text("'pending'::character varying")
357
- )
358
- storage_url: Mapped[str | None] = mapped_column(Text)
359
- thumbnail_url: Mapped[str | None] = mapped_column(Text)
360
- additional_files: Mapped[list[Any]] = mapped_column(JSONB, server_default=text("'[]'::jsonb"))
361
- output_metadata: Mapped[dict[str, Any]] = mapped_column(
362
- JSONB, server_default=text("'{}'::jsonb")
363
- )
364
- input_artifacts: Mapped[list[dict[str, Any]]] = mapped_column(
365
- JSONB, server_default=text("'[]'::jsonb")
366
- )
367
- external_job_id: Mapped[str | None] = mapped_column(String(255))
368
- progress: Mapped[Decimal] = mapped_column(Numeric(5, 2), server_default=text("0.0"))
369
- error_message: Mapped[str | None] = mapped_column(Text)
370
- started_at: Mapped[datetime | None] = mapped_column(DateTime(True))
371
- completed_at: Mapped[datetime | None] = mapped_column(DateTime(True))
372
- created_at: Mapped[datetime] = mapped_column(
373
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
374
- )
375
- updated_at: Mapped[datetime] = mapped_column(
376
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
377
- )
378
-
379
- board: Mapped["Boards"] = relationship("Boards", back_populates="generations")
380
- tenant: Mapped["Tenants"] = relationship("Tenants", back_populates="generations")
381
- user: Mapped["Users"] = relationship("Users", back_populates="generations")
382
- credit_transactions: Mapped[list["CreditTransactions"]] = relationship(
383
- "CreditTransactions", uselist=True, back_populates="generation"
384
- )
385
-
386
-
387
- class CreditTransactions(Base):
388
- __tablename__ = "credit_transactions"
389
- __table_args__ = (
390
- CheckConstraint(
391
- "transaction_type::text = ANY (ARRAY["
392
- "'reserve'::character varying, 'finalize'::character varying, "
393
- "'refund'::character varying, 'purchase'::character varying, "
394
- "'grant'::character varying]::text[])",
395
- name="credit_transactions_transaction_type_check",
396
- ),
397
- ForeignKeyConstraint(
398
- ["generation_id"],
399
- ["generations.id"],
400
- name="credit_transactions_generation_id_fkey",
401
- ),
402
- ForeignKeyConstraint(
403
- ["tenant_id"],
404
- ["tenants.id"],
405
- ondelete="CASCADE",
406
- name="credit_transactions_tenant_id_fkey",
407
- ),
408
- ForeignKeyConstraint(
409
- ["user_id"],
410
- ["users.id"],
411
- ondelete="CASCADE",
412
- name="credit_transactions_user_id_fkey",
413
- ),
414
- PrimaryKeyConstraint("id", name="credit_transactions_pkey"),
415
- Index("idx_credit_transactions_user", "user_id"),
416
- )
417
-
418
- id: Mapped[UUID] = mapped_column(Uuid, server_default=text("uuid_generate_v4()"))
419
- tenant_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
420
- user_id: Mapped[UUID] = mapped_column(Uuid, nullable=False)
421
- transaction_type: Mapped[str] = mapped_column(String(20), nullable=False)
422
- amount: Mapped[Decimal] = mapped_column(Numeric(10, 4), nullable=False)
423
- balance_after: Mapped[Decimal] = mapped_column(Numeric(10, 4), nullable=False)
424
- generation_id: Mapped[UUID | None] = mapped_column(Uuid)
425
- description: Mapped[str | None] = mapped_column(Text)
426
- metadata_: Mapped[dict[str, Any]] = mapped_column(
427
- "metadata", JSONB, server_default=text("'{}'::jsonb")
428
- )
429
- created_at: Mapped[datetime] = mapped_column(
430
- DateTime(True), server_default=text("CURRENT_TIMESTAMP")
431
- )
432
-
433
- generation: Mapped["Generations | None"] = relationship(
434
- "Generations", back_populates="credit_transactions"
435
- )
436
- tenant: Mapped["Tenants"] = relationship("Tenants", back_populates="credit_transactions")
437
- user: Mapped["Users"] = relationship("Users", back_populates="credit_transactions")
438
-
439
-
440
- # Expose for Alembic
441
- target_metadata = Base.metadata
@@ -1,57 +0,0 @@
1
- """
2
- Boards generators system for integrating AI generation services.
3
-
4
- This package provides a simple, type-safe way to define and use AI generators
5
- that produce various types of artifacts (images, videos, audio, text, etc.).
6
-
7
- Key components:
8
- - BaseGenerator: Abstract base class for all generators
9
- - Artifact types: Pydantic models for different content types
10
- - Registry: System for discovering and managing generators
11
- - Resolution utilities: For converting artifacts to files for provider SDKs
12
-
13
- Example usage:
14
- from boards.generators import registry
15
- from boards.generators.implementations.replicate.image.flux_pro import ReplicateFluxProGenerator
16
-
17
- # Get available generators
18
- image_generators = registry.list_by_artifact_type("image")
19
-
20
- # Use a specific generator
21
- flux = registry.get("replicate-flux-pro")
22
- result = await flux.generate(inputs)
23
- """
24
-
25
- from .artifacts import (
26
- AudioArtifact,
27
- ImageArtifact,
28
- LoRArtifact,
29
- TextArtifact,
30
- VideoArtifact,
31
- )
32
- from .base import BaseGenerator
33
- from .registry import GeneratorRegistry, registry
34
- from .resolution import (
35
- resolve_artifact,
36
- store_audio_result,
37
- store_image_result,
38
- store_video_result,
39
- )
40
-
41
- __all__ = [
42
- # Core classes
43
- "BaseGenerator",
44
- "GeneratorRegistry",
45
- "registry",
46
- # Artifact types
47
- "AudioArtifact",
48
- "VideoArtifact",
49
- "ImageArtifact",
50
- "TextArtifact",
51
- "LoRArtifact",
52
- # Utilities
53
- "resolve_artifact",
54
- "store_image_result",
55
- "store_video_result",
56
- "store_audio_result",
57
- ]