insforge 1.2.10 → 1.3.0

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 (335) hide show
  1. package/.claude-plugin/marketplace.json +20 -20
  2. package/.dockerignore +60 -60
  3. package/.env.example +83 -77
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +65 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -63
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +44 -44
  15. package/CLAUDE_PLUGIN.md +104 -104
  16. package/CODE_OF_CONDUCT.md +128 -128
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -30
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -182
  23. package/assets/Dark.svg +23 -23
  24. package/auth/package.json +28 -28
  25. package/auth/src/lib/broadcastService.ts +117 -115
  26. package/auth/src/pages/SignInPage.tsx +60 -57
  27. package/auth/src/pages/SignUpPage.tsx +60 -57
  28. package/auth/tsconfig.json +32 -32
  29. package/auth/tsconfig.node.json +11 -11
  30. package/backend/package.json +78 -75
  31. package/backend/src/api/routes/ai/index.routes.ts +3 -3
  32. package/backend/src/api/routes/auth/index.routes.ts +667 -570
  33. package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
  34. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  35. package/backend/src/api/routes/database/index.routes.ts +78 -1
  36. package/backend/src/api/routes/database/records.routes.ts +10 -10
  37. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  38. package/backend/src/api/routes/docs/index.routes.ts +75 -76
  39. package/backend/src/api/routes/email/index.routes.ts +35 -0
  40. package/backend/src/api/routes/functions/index.routes.ts +18 -12
  41. package/backend/src/api/routes/metadata/index.routes.ts +12 -0
  42. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  43. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  44. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  45. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  46. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  47. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  48. package/backend/src/infra/database/database.manager.ts +14 -1
  49. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  50. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  51. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  52. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  53. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  54. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  55. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  56. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  57. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  58. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  59. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  60. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  61. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  62. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  63. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  64. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  65. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  66. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  67. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  68. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  69. package/backend/src/infra/security/token.manager.ts +219 -125
  70. package/backend/src/infra/socket/socket.manager.ts +198 -64
  71. package/backend/src/providers/ai/openrouter.provider.ts +12 -9
  72. package/backend/src/providers/email/base.provider.ts +4 -7
  73. package/backend/src/providers/email/cloud.provider.ts +84 -0
  74. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  75. package/backend/src/providers/oauth/index.ts +1 -0
  76. package/backend/src/server.ts +317 -284
  77. package/backend/src/services/ai/ai-model.service.ts +5 -5
  78. package/backend/src/services/ai/chat-completion.service.ts +4 -4
  79. package/backend/src/services/ai/image-generation.service.ts +3 -3
  80. package/backend/src/services/auth/auth.service.ts +14 -0
  81. package/backend/src/services/database/database-table.service.ts +0 -9
  82. package/backend/src/services/database/database.service.ts +127 -0
  83. package/backend/src/services/email/email.service.ts +5 -7
  84. package/backend/src/services/realtime/index.ts +3 -0
  85. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  86. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  87. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  88. package/backend/src/types/auth.ts +11 -0
  89. package/backend/src/types/realtime.ts +18 -0
  90. package/backend/src/types/socket.ts +7 -31
  91. package/backend/src/utils/cookies.ts +35 -0
  92. package/backend/src/utils/s3-config-loader.ts +64 -0
  93. package/backend/src/utils/seed.ts +301 -298
  94. package/backend/src/utils/sql-parser.ts +90 -0
  95. package/backend/tests/README.md +133 -133
  96. package/backend/tests/cleanup-all-test-data.sh +230 -230
  97. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  98. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  99. package/backend/tests/local/test-ai-config.sh +129 -129
  100. package/backend/tests/local/test-ai-usage.sh +80 -80
  101. package/backend/tests/local/test-auth-router.sh +143 -143
  102. package/backend/tests/local/test-database-router.sh +222 -222
  103. package/backend/tests/local/test-e2e.sh +240 -240
  104. package/backend/tests/local/test-fk-errors.sh +96 -96
  105. package/backend/tests/local/test-functions.sh +123 -123
  106. package/backend/tests/local/test-id-field.sh +200 -200
  107. package/backend/tests/local/test-logs.sh +132 -132
  108. package/backend/tests/local/test-public-bucket.sh +264 -264
  109. package/backend/tests/local/test-secrets.sh +249 -249
  110. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  111. package/backend/tests/local/test-traditional-rest.sh +208 -208
  112. package/backend/tests/manual/README.md +50 -50
  113. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  114. package/backend/tests/manual/seed-large-table.sql +100 -100
  115. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  116. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  117. package/backend/tests/manual/test-database-advance.sh +296 -296
  118. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  119. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  120. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  121. package/backend/tests/manual/test-universal-storage.sh +263 -263
  122. package/backend/tests/manual/test-users.sql +17 -17
  123. package/backend/tests/run-all-tests.sh +139 -139
  124. package/backend/tests/setup.ts +0 -0
  125. package/backend/tests/test-config.sh +338 -338
  126. package/backend/tests/unit/analyze-query.test.ts +697 -0
  127. package/backend/tsconfig.json +22 -22
  128. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  129. package/claude-plugin/README.md +133 -133
  130. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
  131. package/docker-compose.prod.yml +204 -200
  132. package/docker-compose.yml +232 -228
  133. package/docker-init/db/db-init.sql +97 -97
  134. package/docker-init/db/jwt.sql +5 -5
  135. package/docker-init/db/postgresql.conf +16 -16
  136. package/docker-init/logs/vector.yml +236 -236
  137. package/docs/README.md +44 -44
  138. package/docs/agent-docs/real-time.md +269 -0
  139. package/docs/changelog.mdx +119 -67
  140. package/docs/core-concepts/ai/architecture.mdx +372 -372
  141. package/docs/core-concepts/ai/sdk.mdx +213 -213
  142. package/docs/core-concepts/authentication/architecture.mdx +278 -278
  143. package/docs/core-concepts/authentication/sdk.mdx +414 -414
  144. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
  145. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
  146. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
  147. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
  148. package/docs/core-concepts/database/architecture.mdx +255 -255
  149. package/docs/core-concepts/database/sdk.mdx +382 -382
  150. package/docs/core-concepts/email/architecture.mdx +101 -0
  151. package/docs/core-concepts/email/sdk.mdx +53 -0
  152. package/docs/core-concepts/functions/architecture.mdx +105 -105
  153. package/docs/core-concepts/functions/sdk.mdx +184 -184
  154. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  155. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  156. package/docs/core-concepts/storage/architecture.mdx +243 -243
  157. package/docs/core-concepts/storage/sdk.mdx +253 -253
  158. package/docs/deployment/README.md +94 -94
  159. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  160. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  161. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  162. package/docs/deployment/deploy-to-render.md +441 -441
  163. package/docs/deprecated/insforge-auth-api.md +214 -214
  164. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  165. package/docs/deprecated/insforge-db-api.md +358 -358
  166. package/docs/deprecated/insforge-db-sdk.md +139 -139
  167. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  168. package/docs/deprecated/insforge-debug.md +64 -64
  169. package/docs/deprecated/insforge-instructions.md +123 -123
  170. package/docs/deprecated/insforge-project.md +117 -117
  171. package/docs/deprecated/insforge-storage-api.md +278 -278
  172. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  173. package/docs/docs.json +232 -210
  174. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  175. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  176. package/docs/examples/framework-guides/react.mdx +165 -165
  177. package/docs/examples/framework-guides/svelte.mdx +153 -153
  178. package/docs/examples/framework-guides/vue.mdx +159 -159
  179. package/docs/examples/overview.mdx +67 -67
  180. package/docs/favicon.svg +19 -19
  181. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  182. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  183. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  184. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  185. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  186. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  187. package/docs/images/icons/ai.svg +4 -4
  188. package/docs/images/logos/nextjs.svg +4 -4
  189. package/docs/images/logos/nuxt.svg +4 -4
  190. package/docs/images/logos/react.svg +5 -5
  191. package/docs/images/logos/svelte.svg +4 -4
  192. package/docs/images/logos/vue.svg +5 -5
  193. package/docs/insforge-instructions-sdk.md +89 -88
  194. package/docs/introduction.mdx +45 -45
  195. package/docs/logo/dark.svg +22 -22
  196. package/docs/logo/light.svg +20 -20
  197. package/docs/partnership.mdx +651 -646
  198. package/docs/quickstart.mdx +82 -82
  199. package/docs/showcase.mdx +52 -52
  200. package/docs/snippets/sdk-installation.mdx +21 -21
  201. package/docs/snippets/service-icons.mdx +27 -27
  202. package/examples/oauth/frontend-oauth-example.html +250 -250
  203. package/examples/response-examples.md +443 -443
  204. package/frontend/components.json +17 -17
  205. package/frontend/package.json +69 -69
  206. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  207. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  208. package/frontend/src/assets/icons/checked.svg +3 -3
  209. package/frontend/src/assets/icons/connected.svg +3 -3
  210. package/frontend/src/assets/icons/error.svg +3 -3
  211. package/frontend/src/assets/icons/loader.svg +9 -9
  212. package/frontend/src/assets/icons/pencil.svg +4 -4
  213. package/frontend/src/assets/icons/refresh.svg +4 -4
  214. package/frontend/src/assets/icons/step_active.svg +3 -3
  215. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  216. package/frontend/src/assets/icons/warning.svg +3 -3
  217. package/frontend/src/assets/logos/apple.svg +3 -3
  218. package/frontend/src/assets/logos/claude_code.svg +3 -3
  219. package/frontend/src/assets/logos/cline.svg +6 -6
  220. package/frontend/src/assets/logos/cursor.svg +20 -20
  221. package/frontend/src/assets/logos/discord.svg +8 -8
  222. package/frontend/src/assets/logos/facebook.svg +3 -3
  223. package/frontend/src/assets/logos/gemini.svg +19 -19
  224. package/frontend/src/assets/logos/github.svg +5 -5
  225. package/frontend/src/assets/logos/google.svg +13 -13
  226. package/frontend/src/assets/logos/grok.svg +10 -10
  227. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  228. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  229. package/frontend/src/assets/logos/instagram.svg +1 -1
  230. package/frontend/src/assets/logos/linkedin.svg +3 -3
  231. package/frontend/src/assets/logos/openai.svg +10 -10
  232. package/frontend/src/assets/logos/roo_code.svg +9 -9
  233. package/frontend/src/assets/logos/spotify.svg +16 -16
  234. package/frontend/src/assets/logos/tiktok.svg +5 -5
  235. package/frontend/src/assets/logos/trae.svg +3 -3
  236. package/frontend/src/assets/logos/windsurf.svg +10 -10
  237. package/frontend/src/assets/logos/x.svg +3 -3
  238. package/frontend/src/components/layout/AppHeader.tsx +9 -10
  239. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  240. package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
  241. package/frontend/src/features/auth/helpers.tsx +8 -0
  242. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  243. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  244. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  245. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  246. package/frontend/src/features/database/hooks/useTables.ts +32 -28
  247. package/frontend/src/features/database/index.ts +1 -0
  248. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -37
  249. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +35 -47
  250. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +43 -54
  251. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  252. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +35 -47
  253. package/frontend/src/features/database/services/advance.service.ts +0 -26
  254. package/frontend/src/features/database/services/database.service.ts +55 -0
  255. package/frontend/src/features/database/services/table.service.ts +0 -6
  256. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  257. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +11 -9
  258. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  259. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  260. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  261. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  262. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  263. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  264. package/frontend/src/features/realtime/index.ts +11 -0
  265. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  266. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  267. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  268. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  269. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  270. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
  271. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +1 -35
  272. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  273. package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
  274. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  275. package/frontend/src/lib/utils/menuItems.ts +24 -0
  276. package/frontend/src/lib/utils/utils.ts +14 -1
  277. package/frontend/tsconfig.json +25 -25
  278. package/frontend/tsconfig.node.json +9 -9
  279. package/functions/deno.json +24 -24
  280. package/functions/server.ts +315 -315
  281. package/i18n/README.ar.md +130 -130
  282. package/i18n/README.de.md +130 -130
  283. package/i18n/README.es.md +154 -154
  284. package/i18n/README.fr.md +134 -134
  285. package/i18n/README.hi.md +129 -129
  286. package/i18n/README.ja.md +174 -174
  287. package/i18n/README.ko.md +136 -136
  288. package/i18n/README.pt-BR.md +131 -131
  289. package/i18n/README.ru.md +129 -129
  290. package/i18n/README.zh-CN.md +133 -133
  291. package/openapi/ai.yaml +715 -715
  292. package/openapi/auth.yaml +1244 -1244
  293. package/openapi/email.yaml +158 -0
  294. package/openapi/functions.yaml +475 -475
  295. package/openapi/health.yaml +29 -29
  296. package/openapi/logs.yaml +223 -223
  297. package/openapi/metadata.yaml +177 -177
  298. package/openapi/realtime.yaml +699 -0
  299. package/openapi/records.yaml +381 -381
  300. package/openapi/secrets.yaml +370 -370
  301. package/openapi/storage.yaml +875 -875
  302. package/openapi/tables.yaml +463 -463
  303. package/package.json +97 -97
  304. package/shared-schemas/package.json +31 -31
  305. package/shared-schemas/src/ai.schema.ts +63 -59
  306. package/shared-schemas/src/auth-api.schema.ts +352 -339
  307. package/shared-schemas/src/auth.schema.ts +1 -1
  308. package/shared-schemas/src/database-api.schema.ts +32 -1
  309. package/shared-schemas/src/database.schema.ts +39 -0
  310. package/shared-schemas/src/docs.schema.ts +26 -0
  311. package/shared-schemas/src/email-api.schema.ts +30 -0
  312. package/shared-schemas/src/index.ts +4 -0
  313. package/shared-schemas/src/metadata.schema.ts +9 -0
  314. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  315. package/shared-schemas/src/realtime.schema.ts +143 -0
  316. package/shared-schemas/tsconfig.json +21 -21
  317. package/tsconfig.json +7 -7
  318. package/zeabur/README.md +13 -13
  319. package/zeabur/template.yml +1032 -1032
  320. package/.cursor/rules/cursor-rules.mdc +0 -94
  321. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  322. package/test-gemini.sh +0 -35
  323. package/test-usage-admin.sh +0 -57
  324. package/test-usage.sh +0 -50
  325. /package/frontend/src/features/ai/{page → pages}/AIPage.tsx +0 -0
  326. /package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +0 -0
  327. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  328. /package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +0 -0
  329. /package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +0 -0
  330. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  331. /package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +0 -0
  332. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  333. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  334. /package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +0 -0
  335. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
package/openapi/ai.yaml CHANGED
@@ -1,716 +1,716 @@
1
- openapi: 3.0.3
2
- info:
3
- title: Insforge AI API
4
- version: 1.0.0
5
- description: AI services for chat and image generation with OpenRouter integration
6
-
7
- paths:
8
- /api/ai/configurations:
9
- post:
10
- summary: Create AI configuration
11
- description: Create a new AI configuration with model and system prompt
12
- tags:
13
- - Admin
14
- security:
15
- - bearerAuth: []
16
- requestBody:
17
- required: true
18
- content:
19
- application/json:
20
- schema:
21
- $ref: '#/components/schemas/CreateAIConfigurationRequest'
22
- responses:
23
- '201':
24
- description: AI configuration created successfully
25
- content:
26
- application/json:
27
- schema:
28
- type: object
29
- properties:
30
- id:
31
- type: string
32
- format: uuid
33
- message:
34
- type: string
35
- '400':
36
- description: Validation error
37
- '401':
38
- description: Unauthorized
39
- '500':
40
- description: Failed to create AI configuration
41
-
42
- get:
43
- summary: List AI configurations
44
- description: Get all AI configurations
45
- tags:
46
- - Admin
47
- security:
48
- - bearerAuth: []
49
- responses:
50
- '200':
51
- description: List of AI configurations
52
- content:
53
- application/json:
54
- schema:
55
- type: array
56
- items:
57
- $ref: '#/components/schemas/AIConfiguration'
58
- '401':
59
- description: Unauthorized
60
- '500':
61
- description: Failed to fetch AI configurations
62
-
63
- /api/ai/configurations/{id}:
64
- patch:
65
- summary: Update AI configuration
66
- description: Update an existing AI configuration's system prompt
67
- tags:
68
- - Admin
69
- security:
70
- - bearerAuth: []
71
- parameters:
72
- - in: path
73
- name: id
74
- required: true
75
- schema:
76
- type: string
77
- format: uuid
78
- requestBody:
79
- required: true
80
- content:
81
- application/json:
82
- schema:
83
- $ref: '#/components/schemas/UpdateAIConfigurationRequest'
84
- responses:
85
- '200':
86
- description: AI configuration updated successfully
87
- content:
88
- application/json:
89
- schema:
90
- type: object
91
- properties:
92
- message:
93
- type: string
94
- '400':
95
- description: Validation error
96
- '401':
97
- description: Unauthorized
98
- '404':
99
- description: AI configuration not found
100
- '500':
101
- description: Failed to update AI configuration
102
-
103
- delete:
104
- summary: Delete AI configuration
105
- description: Delete an AI configuration
106
- tags:
107
- - Admin
108
- security:
109
- - bearerAuth: []
110
- parameters:
111
- - in: path
112
- name: id
113
- required: true
114
- schema:
115
- type: string
116
- format: uuid
117
- responses:
118
- '200':
119
- description: AI configuration deleted successfully
120
- content:
121
- application/json:
122
- schema:
123
- type: object
124
- properties:
125
- message:
126
- type: string
127
- '401':
128
- description: Unauthorized
129
- '404':
130
- description: AI configuration not found
131
- '500':
132
- description: Failed to delete AI configuration
133
-
134
- /api/ai/usage/summary:
135
- get:
136
- summary: Get AI usage summary
137
- description: Get AI usage summary statistics
138
- tags:
139
- - Admin
140
- security:
141
- - bearerAuth: []
142
- parameters:
143
- - in: query
144
- name: configId
145
- schema:
146
- type: string
147
- format: uuid
148
- description: Filter by configuration ID
149
- - in: query
150
- name: startDate
151
- schema:
152
- type: string
153
- format: date-time
154
- description: Start date for usage period
155
- - in: query
156
- name: endDate
157
- schema:
158
- type: string
159
- format: date-time
160
- description: End date for usage period
161
- responses:
162
- '200':
163
- description: Usage summary
164
- content:
165
- application/json:
166
- schema:
167
- $ref: '#/components/schemas/AIUsageSummary'
168
- '400':
169
- description: Validation error
170
- '401':
171
- description: Unauthorized
172
- '500':
173
- description: Failed to fetch usage summary
174
-
175
- /api/ai/usage:
176
- get:
177
- summary: Get AI usage records
178
- description: Get AI usage records with pagination
179
- tags:
180
- - Admin
181
- security:
182
- - bearerAuth: []
183
- parameters:
184
- - in: query
185
- name: startDate
186
- schema:
187
- type: string
188
- format: date-time
189
- description: Start date for usage period
190
- - in: query
191
- name: endDate
192
- schema:
193
- type: string
194
- format: date-time
195
- description: End date for usage period
196
- - in: query
197
- name: limit
198
- schema:
199
- type: string
200
- default: "50"
201
- description: Number of records to return
202
- - in: query
203
- name: offset
204
- schema:
205
- type: string
206
- default: "0"
207
- description: Number of records to skip
208
- responses:
209
- '200':
210
- description: Usage records
211
- content:
212
- application/json:
213
- schema:
214
- type: array
215
- items:
216
- $ref: '#/components/schemas/AIUsageRecord'
217
- '400':
218
- description: Validation error
219
- '401':
220
- description: Unauthorized
221
- '500':
222
- description: Failed to fetch usage records
223
-
224
- /api/ai/usage/config/{configId}:
225
- get:
226
- summary: Get usage by configuration
227
- description: Get usage records for a specific AI configuration
228
- tags:
229
- - Admin
230
- security:
231
- - bearerAuth: []
232
- parameters:
233
- - in: path
234
- name: configId
235
- required: true
236
- schema:
237
- type: string
238
- format: uuid
239
- - in: query
240
- name: startDate
241
- schema:
242
- type: string
243
- format: date-time
244
- description: Start date for usage period
245
- - in: query
246
- name: endDate
247
- schema:
248
- type: string
249
- format: date-time
250
- description: End date for usage period
251
- responses:
252
- '200':
253
- description: Configuration usage records
254
- content:
255
- application/json:
256
- schema:
257
- type: array
258
- items:
259
- $ref: '#/components/schemas/AIUsageRecord'
260
- '401':
261
- description: Unauthorized
262
- '500':
263
- description: Failed to fetch config usage records
264
-
265
- /api/ai/models:
266
- get:
267
- summary: Get all available AI models
268
- description: Returns list of all available text and image models from OpenRouter
269
- tags:
270
- - Client
271
- security:
272
- - bearerAuth: []
273
- responses:
274
- '200':
275
- description: List of available models categorized by type
276
- content:
277
- application/json:
278
- schema:
279
- $ref: '#/components/schemas/ListModelsResponse'
280
- '401':
281
- description: Unauthorized
282
- '500':
283
- description: Failed to get models list
284
-
285
- /api/ai/chat/completion:
286
- post:
287
- summary: Generate chat completion
288
- description: Send a chat message to any supported model with optional streaming
289
- tags:
290
- - Client
291
- security:
292
- - bearerAuth: []
293
- requestBody:
294
- required: true
295
- content:
296
- application/json:
297
- schema:
298
- $ref: '#/components/schemas/ChatRequest'
299
- responses:
300
- '200':
301
- description: Chat completion response
302
- content:
303
- application/json:
304
- schema:
305
- $ref: '#/components/schemas/ChatCompletionResponse'
306
- text/event-stream:
307
- schema:
308
- type: string
309
- description: Server-sent events stream for streaming responses
310
- '400':
311
- description: Invalid request - missing model or messages
312
- '401':
313
- description: Unauthorized
314
- '500':
315
- description: Failed to get response
316
-
317
- /api/ai/image/generation:
318
- post:
319
- summary: Generate images
320
- description: Generate images using specified model and prompt
321
- tags:
322
- - Client
323
- security:
324
- - bearerAuth: []
325
- requestBody:
326
- required: true
327
- content:
328
- application/json:
329
- schema:
330
- $ref: '#/components/schemas/ImageGenerationOptions'
331
- responses:
332
- '201':
333
- description: Images generated successfully
334
- content:
335
- application/json:
336
- schema:
337
- type: object
338
- properties:
339
- model:
340
- type: string
341
- description: Model used for generation
342
- images:
343
- type: array
344
- items:
345
- $ref: '#/components/schemas/OpenRouterImageMessage'
346
- text:
347
- type: string
348
- description: Text content from multimodal models
349
- count:
350
- type: integer
351
- description: Number of images generated
352
- metadata:
353
- type: object
354
- properties:
355
- model:
356
- type: string
357
- revisedPrompt:
358
- type: string
359
- usage:
360
- $ref: '#/components/schemas/TokenUsage'
361
- nextActions:
362
- type: string
363
- example: Images have been generated successfully. Use the returned URLs or base64 data to access them.
364
- '400':
365
- description: Invalid request - missing model or prompt
366
- '401':
367
- description: Unauthorized
368
- '500':
369
- description: Failed to generate image
370
-
371
- components:
372
- securitySchemes:
373
- bearerAuth:
374
- type: http
375
- scheme: bearer
376
- bearerFormat: JWT
377
- apiKey:
378
- type: apiKey
379
- in: header
380
- name: x-api-key
381
-
382
- schemas:
383
- ChatMessage:
384
- type: object
385
- required:
386
- - role
387
- - content
388
- properties:
389
- role:
390
- type: string
391
- enum: [user, assistant, system]
392
- description: Role of the message sender
393
- content:
394
- type: string
395
- description: Message content
396
-
397
- ChatRequest:
398
- type: object
399
- required:
400
- - model
401
- properties:
402
- model:
403
- type: string
404
- description: OpenRouter model identifier
405
- example: openai/gpt-4
406
- messages:
407
- type: array
408
- description: Array of messages for conversation
409
- items:
410
- $ref: '#/components/schemas/ChatMessage'
411
- stream:
412
- type: boolean
413
- default: false
414
- description: Enable streaming response via Server-Sent Events
415
- temperature:
416
- type: number
417
- minimum: 0
418
- maximum: 2
419
- description: Controls randomness in generation
420
- maxTokens:
421
- type: integer
422
- description: Maximum number of tokens to generate
423
- topP:
424
- type: number
425
- minimum: 0
426
- maximum: 1
427
- description: Nucleus sampling parameter
428
- systemPrompt:
429
- type: string
430
- description: System prompt to guide model behavior
431
-
432
- ChatCompletionResponse:
433
- type: object
434
- properties:
435
- success:
436
- type: boolean
437
- content:
438
- type: string
439
- description: AI model response
440
- metadata:
441
- type: object
442
- properties:
443
- model:
444
- type: string
445
- usage:
446
- $ref: '#/components/schemas/TokenUsage'
447
-
448
- TokenUsage:
449
- type: object
450
- properties:
451
- promptTokens:
452
- type: integer
453
- completionTokens:
454
- type: integer
455
- totalTokens:
456
- type: integer
457
-
458
- ImageGenerationOptions:
459
- type: object
460
- required:
461
- - model
462
- - prompt
463
- properties:
464
- model:
465
- type: string
466
- description: OpenRouter model identifier for image generation
467
- example: openai/dall-e-3
468
- prompt:
469
- type: string
470
- description: Text prompt describing the desired image
471
- example: "A serene landscape with mountains and a lake at sunset"
472
-
473
- OpenRouterImageMessage:
474
- type: object
475
- properties:
476
- type:
477
- type: string
478
- enum: [image_url]
479
- image_url:
480
- type: object
481
- properties:
482
- url:
483
- type: string
484
- description: Can be a direct URL or data:image base64 URL
485
-
486
- OpenRouterModel:
487
- type: object
488
- properties:
489
- id:
490
- type: string
491
- name:
492
- type: string
493
- created:
494
- type: integer
495
- description:
496
- type: string
497
- architecture:
498
- type: object
499
- properties:
500
- input_modalities:
501
- type: array
502
- items:
503
- type: string
504
- output_modalities:
505
- type: array
506
- items:
507
- type: string
508
- tokenizer:
509
- type: string
510
- instruct_type:
511
- type: string
512
- topProvider:
513
- type: object
514
- properties:
515
- is_moderated:
516
- type: boolean
517
- context_length:
518
- type: integer
519
- max_completion_tokens:
520
- type: integer
521
- pricing:
522
- type: object
523
- properties:
524
- prompt:
525
- type: string
526
- completion:
527
- type: string
528
- image:
529
- type: string
530
- request:
531
- type: string
532
- web_search:
533
- type: string
534
- internal_reasoning:
535
- type: string
536
- input_cache_read:
537
- type: string
538
- input_cache_write:
539
- type: string
540
- context_length:
541
- type: integer
542
- max_completion_tokens:
543
- type: integer
544
- per_request_limits:
545
- type: object
546
- supported_parameters:
547
- type: array
548
- items:
549
- type: string
550
-
551
- ListModelsResponse:
552
- type: object
553
- properties:
554
- text:
555
- type: array
556
- items:
557
- type: object
558
- properties:
559
- provider:
560
- type: string
561
- example: openrouter
562
- configured:
563
- type: boolean
564
- models:
565
- type: array
566
- items:
567
- $ref: '#/components/schemas/OpenRouterModel'
568
- image:
569
- type: array
570
- items:
571
- type: object
572
- properties:
573
- provider:
574
- type: string
575
- example: openrouter
576
- configured:
577
- type: boolean
578
- models:
579
- type: array
580
- items:
581
- $ref: '#/components/schemas/OpenRouterModel'
582
-
583
- CreateAIConfigurationRequest:
584
- type: object
585
- required:
586
- - inputModality
587
- - outputModality
588
- - provider
589
- - modelId
590
-
591
- properties:
592
- inputModality:
593
- type: array
594
- items:
595
- type: string
596
- enum: [text, image]
597
- outputModality:
598
- type: array
599
- items:
600
- type: string
601
- enum: [text, image]
602
- provider:
603
- type: string
604
- example: openrouter
605
- modelId:
606
- type: string
607
- example: openai/gpt-4
608
- systemPrompt:
609
- type: string
610
- description: Optional system prompt for the configuration
611
-
612
- UpdateAIConfigurationRequest:
613
- type: object
614
- properties:
615
- systemPrompt:
616
- type: string
617
- description: Updated system prompt
618
-
619
- AIConfiguration:
620
- type: object
621
- properties:
622
- id:
623
- type: string
624
- format: uuid
625
- modality:
626
- type: string
627
- enum: [text, image]
628
- provider:
629
- type: string
630
- modelId:
631
- type: string
632
- systemPrompt:
633
- type: string
634
- createdAt:
635
- type: string
636
- format: date-time
637
- updatedAt:
638
- type: string
639
- format: date-time
640
-
641
- AIUsageSummary:
642
- type: object
643
- properties:
644
- totalRequests:
645
- type: integer
646
- totalTokens:
647
- type: integer
648
- totalCost:
649
- type: number
650
- byModel:
651
- type: object
652
- additionalProperties:
653
- type: object
654
- properties:
655
- requests:
656
- type: integer
657
- tokens:
658
- type: integer
659
- cost:
660
- type: number
661
-
662
- AIUsageRecord:
663
- type: object
664
- properties:
665
- id:
666
- type: string
667
- format: uuid
668
- configId:
669
- type: string
670
- format: uuid
671
- modelId:
672
- type: string
673
- promptTokens:
674
- type: integer
675
- completionTokens:
676
- type: integer
677
- totalTokens:
678
- type: integer
679
- cost:
680
- type: number
681
- createdAt:
682
- type: string
683
- format: date-time
684
- provider:
685
- type: string
686
- nullable: true
687
- model:
688
- type: string
689
- nullable: true
690
- inputModality:
691
- type: array
692
- nullable: true
693
- items:
694
- type: string
695
- enum: [text, image]
696
- outputModality:
697
- type: array
698
- nullable: true
699
- items:
700
- type: string
701
- enum: [text, image]
702
-
703
- ErrorResponse:
704
- type: object
705
- required:
706
- - error
707
- properties:
708
- error:
709
- type: string
710
- description: Error message
711
- details:
712
- type: string
713
- description: Additional error details
714
- code:
715
- type: string
1
+ openapi: 3.0.3
2
+ info:
3
+ title: Insforge AI API
4
+ version: 1.0.0
5
+ description: AI services for chat and image generation with OpenRouter integration
6
+
7
+ paths:
8
+ /api/ai/configurations:
9
+ post:
10
+ summary: Create AI configuration
11
+ description: Create a new AI configuration with model and system prompt
12
+ tags:
13
+ - Admin
14
+ security:
15
+ - bearerAuth: []
16
+ requestBody:
17
+ required: true
18
+ content:
19
+ application/json:
20
+ schema:
21
+ $ref: '#/components/schemas/CreateAIConfigurationRequest'
22
+ responses:
23
+ '201':
24
+ description: AI configuration created successfully
25
+ content:
26
+ application/json:
27
+ schema:
28
+ type: object
29
+ properties:
30
+ id:
31
+ type: string
32
+ format: uuid
33
+ message:
34
+ type: string
35
+ '400':
36
+ description: Validation error
37
+ '401':
38
+ description: Unauthorized
39
+ '500':
40
+ description: Failed to create AI configuration
41
+
42
+ get:
43
+ summary: List AI configurations
44
+ description: Get all AI configurations
45
+ tags:
46
+ - Admin
47
+ security:
48
+ - bearerAuth: []
49
+ responses:
50
+ '200':
51
+ description: List of AI configurations
52
+ content:
53
+ application/json:
54
+ schema:
55
+ type: array
56
+ items:
57
+ $ref: '#/components/schemas/AIConfiguration'
58
+ '401':
59
+ description: Unauthorized
60
+ '500':
61
+ description: Failed to fetch AI configurations
62
+
63
+ /api/ai/configurations/{id}:
64
+ patch:
65
+ summary: Update AI configuration
66
+ description: Update an existing AI configuration's system prompt
67
+ tags:
68
+ - Admin
69
+ security:
70
+ - bearerAuth: []
71
+ parameters:
72
+ - in: path
73
+ name: id
74
+ required: true
75
+ schema:
76
+ type: string
77
+ format: uuid
78
+ requestBody:
79
+ required: true
80
+ content:
81
+ application/json:
82
+ schema:
83
+ $ref: '#/components/schemas/UpdateAIConfigurationRequest'
84
+ responses:
85
+ '200':
86
+ description: AI configuration updated successfully
87
+ content:
88
+ application/json:
89
+ schema:
90
+ type: object
91
+ properties:
92
+ message:
93
+ type: string
94
+ '400':
95
+ description: Validation error
96
+ '401':
97
+ description: Unauthorized
98
+ '404':
99
+ description: AI configuration not found
100
+ '500':
101
+ description: Failed to update AI configuration
102
+
103
+ delete:
104
+ summary: Delete AI configuration
105
+ description: Delete an AI configuration
106
+ tags:
107
+ - Admin
108
+ security:
109
+ - bearerAuth: []
110
+ parameters:
111
+ - in: path
112
+ name: id
113
+ required: true
114
+ schema:
115
+ type: string
116
+ format: uuid
117
+ responses:
118
+ '200':
119
+ description: AI configuration deleted successfully
120
+ content:
121
+ application/json:
122
+ schema:
123
+ type: object
124
+ properties:
125
+ message:
126
+ type: string
127
+ '401':
128
+ description: Unauthorized
129
+ '404':
130
+ description: AI configuration not found
131
+ '500':
132
+ description: Failed to delete AI configuration
133
+
134
+ /api/ai/usage/summary:
135
+ get:
136
+ summary: Get AI usage summary
137
+ description: Get AI usage summary statistics
138
+ tags:
139
+ - Admin
140
+ security:
141
+ - bearerAuth: []
142
+ parameters:
143
+ - in: query
144
+ name: configId
145
+ schema:
146
+ type: string
147
+ format: uuid
148
+ description: Filter by configuration ID
149
+ - in: query
150
+ name: startDate
151
+ schema:
152
+ type: string
153
+ format: date-time
154
+ description: Start date for usage period
155
+ - in: query
156
+ name: endDate
157
+ schema:
158
+ type: string
159
+ format: date-time
160
+ description: End date for usage period
161
+ responses:
162
+ '200':
163
+ description: Usage summary
164
+ content:
165
+ application/json:
166
+ schema:
167
+ $ref: '#/components/schemas/AIUsageSummary'
168
+ '400':
169
+ description: Validation error
170
+ '401':
171
+ description: Unauthorized
172
+ '500':
173
+ description: Failed to fetch usage summary
174
+
175
+ /api/ai/usage:
176
+ get:
177
+ summary: Get AI usage records
178
+ description: Get AI usage records with pagination
179
+ tags:
180
+ - Admin
181
+ security:
182
+ - bearerAuth: []
183
+ parameters:
184
+ - in: query
185
+ name: startDate
186
+ schema:
187
+ type: string
188
+ format: date-time
189
+ description: Start date for usage period
190
+ - in: query
191
+ name: endDate
192
+ schema:
193
+ type: string
194
+ format: date-time
195
+ description: End date for usage period
196
+ - in: query
197
+ name: limit
198
+ schema:
199
+ type: string
200
+ default: "50"
201
+ description: Number of records to return
202
+ - in: query
203
+ name: offset
204
+ schema:
205
+ type: string
206
+ default: "0"
207
+ description: Number of records to skip
208
+ responses:
209
+ '200':
210
+ description: Usage records
211
+ content:
212
+ application/json:
213
+ schema:
214
+ type: array
215
+ items:
216
+ $ref: '#/components/schemas/AIUsageRecord'
217
+ '400':
218
+ description: Validation error
219
+ '401':
220
+ description: Unauthorized
221
+ '500':
222
+ description: Failed to fetch usage records
223
+
224
+ /api/ai/usage/config/{configId}:
225
+ get:
226
+ summary: Get usage by configuration
227
+ description: Get usage records for a specific AI configuration
228
+ tags:
229
+ - Admin
230
+ security:
231
+ - bearerAuth: []
232
+ parameters:
233
+ - in: path
234
+ name: configId
235
+ required: true
236
+ schema:
237
+ type: string
238
+ format: uuid
239
+ - in: query
240
+ name: startDate
241
+ schema:
242
+ type: string
243
+ format: date-time
244
+ description: Start date for usage period
245
+ - in: query
246
+ name: endDate
247
+ schema:
248
+ type: string
249
+ format: date-time
250
+ description: End date for usage period
251
+ responses:
252
+ '200':
253
+ description: Configuration usage records
254
+ content:
255
+ application/json:
256
+ schema:
257
+ type: array
258
+ items:
259
+ $ref: '#/components/schemas/AIUsageRecord'
260
+ '401':
261
+ description: Unauthorized
262
+ '500':
263
+ description: Failed to fetch config usage records
264
+
265
+ /api/ai/models:
266
+ get:
267
+ summary: Get all available AI models
268
+ description: Returns list of all available text and image models from OpenRouter
269
+ tags:
270
+ - Client
271
+ security:
272
+ - bearerAuth: []
273
+ responses:
274
+ '200':
275
+ description: List of available models categorized by type
276
+ content:
277
+ application/json:
278
+ schema:
279
+ $ref: '#/components/schemas/ListModelsResponse'
280
+ '401':
281
+ description: Unauthorized
282
+ '500':
283
+ description: Failed to get models list
284
+
285
+ /api/ai/chat/completion:
286
+ post:
287
+ summary: Generate chat completion
288
+ description: Send a chat message to any supported model with optional streaming
289
+ tags:
290
+ - Client
291
+ security:
292
+ - bearerAuth: []
293
+ requestBody:
294
+ required: true
295
+ content:
296
+ application/json:
297
+ schema:
298
+ $ref: '#/components/schemas/ChatRequest'
299
+ responses:
300
+ '200':
301
+ description: Chat completion response
302
+ content:
303
+ application/json:
304
+ schema:
305
+ $ref: '#/components/schemas/ChatCompletionResponse'
306
+ text/event-stream:
307
+ schema:
308
+ type: string
309
+ description: Server-sent events stream for streaming responses
310
+ '400':
311
+ description: Invalid request - missing model or messages
312
+ '401':
313
+ description: Unauthorized
314
+ '500':
315
+ description: Failed to get response
316
+
317
+ /api/ai/image/generation:
318
+ post:
319
+ summary: Generate images
320
+ description: Generate images using specified model and prompt
321
+ tags:
322
+ - Client
323
+ security:
324
+ - bearerAuth: []
325
+ requestBody:
326
+ required: true
327
+ content:
328
+ application/json:
329
+ schema:
330
+ $ref: '#/components/schemas/ImageGenerationOptions'
331
+ responses:
332
+ '201':
333
+ description: Images generated successfully
334
+ content:
335
+ application/json:
336
+ schema:
337
+ type: object
338
+ properties:
339
+ model:
340
+ type: string
341
+ description: Model used for generation
342
+ images:
343
+ type: array
344
+ items:
345
+ $ref: '#/components/schemas/OpenRouterImageMessage'
346
+ text:
347
+ type: string
348
+ description: Text content from multimodal models
349
+ count:
350
+ type: integer
351
+ description: Number of images generated
352
+ metadata:
353
+ type: object
354
+ properties:
355
+ model:
356
+ type: string
357
+ revisedPrompt:
358
+ type: string
359
+ usage:
360
+ $ref: '#/components/schemas/TokenUsage'
361
+ nextActions:
362
+ type: string
363
+ example: Images have been generated successfully. Use the returned URLs or base64 data to access them.
364
+ '400':
365
+ description: Invalid request - missing model or prompt
366
+ '401':
367
+ description: Unauthorized
368
+ '500':
369
+ description: Failed to generate image
370
+
371
+ components:
372
+ securitySchemes:
373
+ bearerAuth:
374
+ type: http
375
+ scheme: bearer
376
+ bearerFormat: JWT
377
+ apiKey:
378
+ type: apiKey
379
+ in: header
380
+ name: x-api-key
381
+
382
+ schemas:
383
+ ChatMessage:
384
+ type: object
385
+ required:
386
+ - role
387
+ - content
388
+ properties:
389
+ role:
390
+ type: string
391
+ enum: [user, assistant, system]
392
+ description: Role of the message sender
393
+ content:
394
+ type: string
395
+ description: Message content
396
+
397
+ ChatRequest:
398
+ type: object
399
+ required:
400
+ - model
401
+ properties:
402
+ model:
403
+ type: string
404
+ description: OpenRouter model identifier
405
+ example: openai/gpt-4
406
+ messages:
407
+ type: array
408
+ description: Array of messages for conversation
409
+ items:
410
+ $ref: '#/components/schemas/ChatMessage'
411
+ stream:
412
+ type: boolean
413
+ default: false
414
+ description: Enable streaming response via Server-Sent Events
415
+ temperature:
416
+ type: number
417
+ minimum: 0
418
+ maximum: 2
419
+ description: Controls randomness in generation
420
+ maxTokens:
421
+ type: integer
422
+ description: Maximum number of tokens to generate
423
+ topP:
424
+ type: number
425
+ minimum: 0
426
+ maximum: 1
427
+ description: Nucleus sampling parameter
428
+ systemPrompt:
429
+ type: string
430
+ description: System prompt to guide model behavior
431
+
432
+ ChatCompletionResponse:
433
+ type: object
434
+ properties:
435
+ success:
436
+ type: boolean
437
+ content:
438
+ type: string
439
+ description: AI model response
440
+ metadata:
441
+ type: object
442
+ properties:
443
+ model:
444
+ type: string
445
+ usage:
446
+ $ref: '#/components/schemas/TokenUsage'
447
+
448
+ TokenUsage:
449
+ type: object
450
+ properties:
451
+ promptTokens:
452
+ type: integer
453
+ completionTokens:
454
+ type: integer
455
+ totalTokens:
456
+ type: integer
457
+
458
+ ImageGenerationOptions:
459
+ type: object
460
+ required:
461
+ - model
462
+ - prompt
463
+ properties:
464
+ model:
465
+ type: string
466
+ description: OpenRouter model identifier for image generation
467
+ example: openai/dall-e-3
468
+ prompt:
469
+ type: string
470
+ description: Text prompt describing the desired image
471
+ example: "A serene landscape with mountains and a lake at sunset"
472
+
473
+ OpenRouterImageMessage:
474
+ type: object
475
+ properties:
476
+ type:
477
+ type: string
478
+ enum: [image_url]
479
+ image_url:
480
+ type: object
481
+ properties:
482
+ url:
483
+ type: string
484
+ description: Can be a direct URL or data:image base64 URL
485
+
486
+ OpenRouterModel:
487
+ type: object
488
+ properties:
489
+ id:
490
+ type: string
491
+ name:
492
+ type: string
493
+ created:
494
+ type: integer
495
+ description:
496
+ type: string
497
+ architecture:
498
+ type: object
499
+ properties:
500
+ input_modalities:
501
+ type: array
502
+ items:
503
+ type: string
504
+ output_modalities:
505
+ type: array
506
+ items:
507
+ type: string
508
+ tokenizer:
509
+ type: string
510
+ instruct_type:
511
+ type: string
512
+ topProvider:
513
+ type: object
514
+ properties:
515
+ is_moderated:
516
+ type: boolean
517
+ context_length:
518
+ type: integer
519
+ max_completion_tokens:
520
+ type: integer
521
+ pricing:
522
+ type: object
523
+ properties:
524
+ prompt:
525
+ type: string
526
+ completion:
527
+ type: string
528
+ image:
529
+ type: string
530
+ request:
531
+ type: string
532
+ web_search:
533
+ type: string
534
+ internal_reasoning:
535
+ type: string
536
+ input_cache_read:
537
+ type: string
538
+ input_cache_write:
539
+ type: string
540
+ context_length:
541
+ type: integer
542
+ max_completion_tokens:
543
+ type: integer
544
+ per_request_limits:
545
+ type: object
546
+ supported_parameters:
547
+ type: array
548
+ items:
549
+ type: string
550
+
551
+ ListModelsResponse:
552
+ type: object
553
+ properties:
554
+ text:
555
+ type: array
556
+ items:
557
+ type: object
558
+ properties:
559
+ provider:
560
+ type: string
561
+ example: openrouter
562
+ configured:
563
+ type: boolean
564
+ models:
565
+ type: array
566
+ items:
567
+ $ref: '#/components/schemas/OpenRouterModel'
568
+ image:
569
+ type: array
570
+ items:
571
+ type: object
572
+ properties:
573
+ provider:
574
+ type: string
575
+ example: openrouter
576
+ configured:
577
+ type: boolean
578
+ models:
579
+ type: array
580
+ items:
581
+ $ref: '#/components/schemas/OpenRouterModel'
582
+
583
+ CreateAIConfigurationRequest:
584
+ type: object
585
+ required:
586
+ - inputModality
587
+ - outputModality
588
+ - provider
589
+ - modelId
590
+
591
+ properties:
592
+ inputModality:
593
+ type: array
594
+ items:
595
+ type: string
596
+ enum: [text, image]
597
+ outputModality:
598
+ type: array
599
+ items:
600
+ type: string
601
+ enum: [text, image]
602
+ provider:
603
+ type: string
604
+ example: openrouter
605
+ modelId:
606
+ type: string
607
+ example: openai/gpt-4
608
+ systemPrompt:
609
+ type: string
610
+ description: Optional system prompt for the configuration
611
+
612
+ UpdateAIConfigurationRequest:
613
+ type: object
614
+ properties:
615
+ systemPrompt:
616
+ type: string
617
+ description: Updated system prompt
618
+
619
+ AIConfiguration:
620
+ type: object
621
+ properties:
622
+ id:
623
+ type: string
624
+ format: uuid
625
+ modality:
626
+ type: string
627
+ enum: [text, image]
628
+ provider:
629
+ type: string
630
+ modelId:
631
+ type: string
632
+ systemPrompt:
633
+ type: string
634
+ createdAt:
635
+ type: string
636
+ format: date-time
637
+ updatedAt:
638
+ type: string
639
+ format: date-time
640
+
641
+ AIUsageSummary:
642
+ type: object
643
+ properties:
644
+ totalRequests:
645
+ type: integer
646
+ totalTokens:
647
+ type: integer
648
+ totalCost:
649
+ type: number
650
+ byModel:
651
+ type: object
652
+ additionalProperties:
653
+ type: object
654
+ properties:
655
+ requests:
656
+ type: integer
657
+ tokens:
658
+ type: integer
659
+ cost:
660
+ type: number
661
+
662
+ AIUsageRecord:
663
+ type: object
664
+ properties:
665
+ id:
666
+ type: string
667
+ format: uuid
668
+ configId:
669
+ type: string
670
+ format: uuid
671
+ modelId:
672
+ type: string
673
+ promptTokens:
674
+ type: integer
675
+ completionTokens:
676
+ type: integer
677
+ totalTokens:
678
+ type: integer
679
+ cost:
680
+ type: number
681
+ createdAt:
682
+ type: string
683
+ format: date-time
684
+ provider:
685
+ type: string
686
+ nullable: true
687
+ model:
688
+ type: string
689
+ nullable: true
690
+ inputModality:
691
+ type: array
692
+ nullable: true
693
+ items:
694
+ type: string
695
+ enum: [text, image]
696
+ outputModality:
697
+ type: array
698
+ nullable: true
699
+ items:
700
+ type: string
701
+ enum: [text, image]
702
+
703
+ ErrorResponse:
704
+ type: object
705
+ required:
706
+ - error
707
+ properties:
708
+ error:
709
+ type: string
710
+ description: Error message
711
+ details:
712
+ type: string
713
+ description: Additional error details
714
+ code:
715
+ type: string
716
716
  description: Error code for programmatic handling