divi 0.0.1b0__tar.gz → 0.0.1b1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. {divi-0.0.1b0 → divi-0.0.1b1}/PKG-INFO +1 -1
  2. divi-0.0.1b1/README.md +72 -0
  3. {divi-0.0.1b0 → divi-0.0.1b1}/apps/README.md +0 -4
  4. divi-0.0.1b1/apps/docs/README.md +3 -0
  5. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/docs.json +2 -10
  6. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/en/introduction.mdx +2 -0
  7. divi-0.0.1b1/apps/docs/en/quickstart/evaluation.mdx +5 -0
  8. divi-0.0.1b1/apps/docs/en/quickstart/trace.mdx +56 -0
  9. divi-0.0.1b1/apps/docs/images/pirate-example.png +0 -0
  10. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/zh/development/roadmap.mdx +2 -0
  11. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/zh/introduction.mdx +2 -0
  12. divi-0.0.1b1/apps/docs/zh/quickstart/trace.mdx +56 -0
  13. divi-0.0.1b1/apps/graphql/README.md +3 -0
  14. divi-0.0.1b1/apps/web/README.md +3 -0
  15. divi-0.0.1b1/divi/README.md +3 -0
  16. {divi-0.0.1b0 → divi-0.0.1b1}/divi/__init__.py +3 -4
  17. {divi-0.0.1b0 → divi-0.0.1b1}/divi/decorators/obs_openai.py +7 -6
  18. {divi-0.0.1b0 → divi-0.0.1b1}/divi/decorators/observable.py +6 -1
  19. divi-0.0.1b1/divi/evaluation/__init__.py +4 -0
  20. {divi-0.0.1b0 → divi-0.0.1b1}/divi/evaluation/evaluator.py +20 -6
  21. divi-0.0.1b1/docs/images/thinking-angel.png +0 -0
  22. divi-0.0.1b1/packages/README.md +15 -0
  23. divi-0.0.1b0/README.md +0 -14
  24. divi-0.0.1b0/apps/docs/README.md +0 -32
  25. divi-0.0.1b0/apps/docs/en/quickstart/trace.mdx +0 -4
  26. divi-0.0.1b0/apps/docs/zh/quickstart/trace.mdx +0 -4
  27. divi-0.0.1b0/apps/graphql/README.md +0 -3
  28. divi-0.0.1b0/apps/web/README.md +0 -36
  29. divi-0.0.1b0/divi/evaluation/__init__.py +0 -4
  30. divi-0.0.1b0/packages/README.md +0 -15
  31. {divi-0.0.1b0 → divi-0.0.1b1}/.dockerignore +0 -0
  32. {divi-0.0.1b0 → divi-0.0.1b1}/.github/dependabot.yml +0 -0
  33. {divi-0.0.1b0 → divi-0.0.1b1}/.gitignore +0 -0
  34. {divi-0.0.1b0 → divi-0.0.1b1}/LICENSE +0 -0
  35. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/en/concepts/score.mdx +0 -0
  36. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/en/concepts/session.mdx +0 -0
  37. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/en/development/roadmap.mdx +0 -0
  38. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/en/tutorials/self-refine.mdx +0 -0
  39. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/favicon.ico +0 -0
  40. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/images/researcher-angel.png +0 -0
  41. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/images/scholar-angel.png +0 -0
  42. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/package.json +0 -0
  43. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/snippets/snippet-intro.mdx +0 -0
  44. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/zh/concepts/score.mdx +0 -0
  45. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/zh/concepts/session.mdx +0 -0
  46. {divi-0.0.1b0 → divi-0.0.1b1}/apps/docs/zh/tutorials/self-refine.mdx +0 -0
  47. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/Dockerfile +0 -0
  48. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/codegen.ts +0 -0
  49. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/package.json +0 -0
  50. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/src/datasources/auth-api.ts +0 -0
  51. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/src/datasources/datapark-api.ts +0 -0
  52. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/src/index.ts +0 -0
  53. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/src/resolvers.ts +0 -0
  54. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/src/schema.graphql +0 -0
  55. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/src/types/context.d.ts +0 -0
  56. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/src/types/response.d.ts +0 -0
  57. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/src/types/types.d.ts +0 -0
  58. {divi-0.0.1b0 → divi-0.0.1b1}/apps/graphql/tsconfig.json +0 -0
  59. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/.gitignore +0 -0
  60. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/@modal/(.)traces/[id]/page.tsx +0 -0
  61. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/@modal/default.tsx +0 -0
  62. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/actions.ts +0 -0
  63. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/components/columns.tsx +0 -0
  64. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/components/create-dialog.tsx +0 -0
  65. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/components/data-table-cell-viewer.tsx +0 -0
  66. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/components/data-table-toolbar.tsx +0 -0
  67. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/components/data-table.tsx +0 -0
  68. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/components/delete-dialog.tsx +0 -0
  69. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/data/data.tsx +0 -0
  70. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/data/schema.ts +0 -0
  71. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/layout.tsx +0 -0
  72. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/api-keys/page.tsx +0 -0
  73. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/components/app-sidebar.tsx +0 -0
  74. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/components/nav-main.tsx +0 -0
  75. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/components/nav-secondary.tsx +0 -0
  76. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/components/nav-user.tsx +0 -0
  77. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/components/site-header.tsx +0 -0
  78. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/layout.tsx +0 -0
  79. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/settings/account/components/account-form.tsx +0 -0
  80. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/settings/account/page.tsx +0 -0
  81. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/settings/appearance/components/appearance-form.tsx +0 -0
  82. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/settings/appearance/page.tsx +0 -0
  83. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/settings/components/profile-form.tsx +0 -0
  84. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/settings/components/sidebar-nav.tsx +0 -0
  85. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/settings/layout.tsx +0 -0
  86. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/settings/page.tsx +0 -0
  87. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(children)/[id]/components/Span.tsx +0 -0
  88. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(children)/[id]/components/responsive-resizable.tsx +0 -0
  89. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(children)/[id]/components/trace-board.tsx +0 -0
  90. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(children)/[id]/components/trace-chart.tsx +0 -0
  91. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(children)/[id]/page.tsx +0 -0
  92. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(overview)/components/columns.tsx +0 -0
  93. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(overview)/components/data-table-row-action.tsx +0 -0
  94. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(overview)/components/data-table-toolbar.tsx +0 -0
  95. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(overview)/components/data-table.tsx +0 -0
  96. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(overview)/data/data.tsx +0 -0
  97. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(overview)/data/schema.ts +0 -0
  98. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(overview)/layout.tsx +0 -0
  99. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/traces/(overview)/page.tsx +0 -0
  100. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/usages/actions.ts +0 -0
  101. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/usages/components/usage-board.tsx +0 -0
  102. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/usages/components/usage-chart.tsx +0 -0
  103. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/usages/layout.tsx +0 -0
  104. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/dashboard/usages/page.tsx +0 -0
  105. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/favicon.ico +0 -0
  106. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/home/components/home-header.tsx +0 -0
  107. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/home/components/home-hero.tsx +0 -0
  108. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/home/page.tsx +0 -0
  109. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/layout.tsx +0 -0
  110. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/login/components/login-form.tsx +0 -0
  111. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/login/page.tsx +0 -0
  112. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/page.tsx +0 -0
  113. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/signup/components/signup-form.tsx +0 -0
  114. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/app/signup/page.tsx +0 -0
  115. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/ApolloWrapper.tsx +0 -0
  116. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/Highter.tsx +0 -0
  117. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/Modal.tsx +0 -0
  118. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/calendar.tsx +0 -0
  119. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/data-table-column-header.tsx +0 -0
  120. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/data-table-faceted-filter.tsx +0 -0
  121. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/data-table-pagination.tsx +0 -0
  122. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/data-table-row.tsx +0 -0
  123. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/data-table-view-options.tsx +0 -0
  124. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/date-picker.tsx +0 -0
  125. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/mode-switcher.tsx +0 -0
  126. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components/theme-provider.tsx +0 -0
  127. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/components.json +0 -0
  128. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/hooks/actionState.ts +0 -0
  129. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/hooks/apolloClient.ts +0 -0
  130. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/callback/toast-callback.ts +0 -0
  131. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/callback/with-callback.ts +0 -0
  132. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/server/README.md +0 -0
  133. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/server/auth.ts +0 -0
  134. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/server/cookies.ts +0 -0
  135. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/server/evaluation.ts +0 -0
  136. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/server/openai.ts +0 -0
  137. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/server/span.ts +0 -0
  138. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/types/span.d.ts +0 -0
  139. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/types/state.d.ts +0 -0
  140. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/types/usage.d.ts +0 -0
  141. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/lib/utils.ts +0 -0
  142. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/middleware.ts +0 -0
  143. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/next-env.d.ts +0 -0
  144. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/next.config.ts +0 -0
  145. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/package.json +0 -0
  146. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/postcss.config.mjs +0 -0
  147. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/public/peeking-angel.png +0 -0
  148. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/public/thinking-angel.png +0 -0
  149. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/tsconfig.json +0 -0
  150. {divi-0.0.1b0 → divi-0.0.1b1}/apps/web/vercel.json +0 -0
  151. {divi-0.0.1b0 → divi-0.0.1b1}/biome.json +0 -0
  152. {divi-0.0.1b0 → divi-0.0.1b1}/compose-dev.yml +0 -0
  153. {divi-0.0.1b0 → divi-0.0.1b1}/divi/decorators/__init__.py +0 -0
  154. {divi-0.0.1b0 → divi-0.0.1b1}/divi/decorators/collect.py +0 -0
  155. {divi-0.0.1b0 → divi-0.0.1b1}/divi/decorators/observe.py +0 -0
  156. {divi-0.0.1b0 → divi-0.0.1b1}/divi/evaluation/evaluate.py +0 -0
  157. {divi-0.0.1b0 → divi-0.0.1b1}/divi/evaluation/prompts.py +0 -0
  158. {divi-0.0.1b0 → divi-0.0.1b1}/divi/evaluation/scores.py +0 -0
  159. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/common/v1/common.proto +0 -0
  160. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/common/v1/common_pb2.py +0 -0
  161. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/common/v1/common_pb2.pyi +0 -0
  162. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/core/health/v1/health_service.proto +0 -0
  163. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/core/health/v1/health_service_pb2.py +0 -0
  164. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/core/health/v1/health_service_pb2.pyi +0 -0
  165. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/core/health/v1/health_service_pb2_grpc.py +0 -0
  166. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/metric/v1/metric.proto +0 -0
  167. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/metric/v1/metric_pb2.py +0 -0
  168. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/metric/v1/metric_pb2.pyi +0 -0
  169. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/trace/v1/trace.proto +0 -0
  170. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/trace/v1/trace_pb2.py +0 -0
  171. {divi-0.0.1b0 → divi-0.0.1b1}/divi/proto/trace/v1/trace_pb2.pyi +0 -0
  172. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/__init__.py +0 -0
  173. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/auth/__init__.py +0 -0
  174. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/auth/auth.py +0 -0
  175. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/auth/init.py +0 -0
  176. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/auth/tokman.py +0 -0
  177. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/core/__init__.py +0 -0
  178. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/core/core.py +0 -0
  179. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/core/finish.py +0 -0
  180. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/core/init.py +0 -0
  181. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/datapark/__init__.py +0 -0
  182. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/datapark/datapark.py +0 -0
  183. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/datapark/init.py +0 -0
  184. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/finish.py +0 -0
  185. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/init.py +0 -0
  186. {divi-0.0.1b0 → divi-0.0.1b1}/divi/services/service.py +0 -0
  187. {divi-0.0.1b0 → divi-0.0.1b1}/divi/session/__init__.py +0 -0
  188. {divi-0.0.1b0 → divi-0.0.1b1}/divi/session/session.py +0 -0
  189. {divi-0.0.1b0 → divi-0.0.1b1}/divi/session/setup.py +0 -0
  190. {divi-0.0.1b0 → divi-0.0.1b1}/divi/session/teardown.py +0 -0
  191. {divi-0.0.1b0 → divi-0.0.1b1}/divi/signals/__init__.py +0 -0
  192. {divi-0.0.1b0 → divi-0.0.1b1}/divi/signals/span.py +0 -0
  193. {divi-0.0.1b0 → divi-0.0.1b1}/divi/signals/trace.py +0 -0
  194. {divi-0.0.1b0 → divi-0.0.1b1}/divi/utils.py +0 -0
  195. {divi-0.0.1b0 → divi-0.0.1b1}/docker-compose.yml +0 -0
  196. {divi-0.0.1b0 → divi-0.0.1b1}/docs/README.md +0 -0
  197. {divi-0.0.1b0 → divi-0.0.1b1}/docs/developer_tools.md +0 -0
  198. {divi-0.0.1b0 → divi-0.0.1b1}/docs/images/architecture.svg +0 -0
  199. {divi-0.0.1b0 → divi-0.0.1b1}/docs/images/favicon.ico +0 -0
  200. {divi-0.0.1b0 → divi-0.0.1b1}/docs/images/og-image.png +0 -0
  201. {divi-0.0.1b0 → divi-0.0.1b1}/docs/images/storage.svg +0 -0
  202. {divi-0.0.1b0 → divi-0.0.1b1}/docs/package_readme.md +0 -0
  203. {divi-0.0.1b0 → divi-0.0.1b1}/go.work +0 -0
  204. {divi-0.0.1b0 → divi-0.0.1b1}/go.work.sum +0 -0
  205. {divi-0.0.1b0 → divi-0.0.1b1}/hatch.toml +0 -0
  206. {divi-0.0.1b0 → divi-0.0.1b1}/package.json +0 -0
  207. {divi-0.0.1b0 → divi-0.0.1b1}/pnpm-lock.yaml +0 -0
  208. {divi-0.0.1b0 → divi-0.0.1b1}/pnpm-workspace.yaml +0 -0
  209. {divi-0.0.1b0 → divi-0.0.1b1}/pyproject.toml +0 -0
  210. {divi-0.0.1b0 → divi-0.0.1b1}/scripts/README.md +0 -0
  211. {divi-0.0.1b0 → divi-0.0.1b1}/scripts/hatch_build.py +0 -0
  212. {divi-0.0.1b0 → divi-0.0.1b1}/scripts/image_build.py +0 -0
  213. {divi-0.0.1b0 → divi-0.0.1b1}/scripts/key_build.py +0 -0
  214. {divi-0.0.1b0 → divi-0.0.1b1}/scripts/proto_build.py +0 -0
  215. {divi-0.0.1b0 → divi-0.0.1b1}/services/README.md +0 -0
  216. {divi-0.0.1b0 → divi-0.0.1b1}/services/go.mod +0 -0
  217. {divi-0.0.1b0 → divi-0.0.1b1}/services/go.sum +0 -0
  218. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/auth/handler/api.go +0 -0
  219. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/auth/handler/api_key.go +0 -0
  220. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/auth/handler/auth.go +0 -0
  221. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/auth/handler/user.go +0 -0
  222. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/auth/router/router.go +0 -0
  223. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/core/.keep +0 -0
  224. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/datapark/handler/api.go +0 -0
  225. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/datapark/handler/evaluation.go +0 -0
  226. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/datapark/handler/metric.go +0 -0
  227. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/datapark/handler/openai.go +0 -0
  228. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/datapark/handler/session.go +0 -0
  229. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/datapark/handler/trace.go +0 -0
  230. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/datapark/handler/usage.go +0 -0
  231. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/app/datapark/router/router.go +0 -0
  232. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/auth/auth.go +0 -0
  233. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/auth/middleware.go +0 -0
  234. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/config/config.go +0 -0
  235. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/database/connect.go +0 -0
  236. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/database/database.go +0 -0
  237. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/model/api_key.go +0 -0
  238. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/model/openai.go +0 -0
  239. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/model/score.go +0 -0
  240. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/model/session.go +0 -0
  241. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/model/trace.go +0 -0
  242. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/model/usage.go +0 -0
  243. {divi-0.0.1b0 → divi-0.0.1b1}/services/internal/pkg/model/user.go +0 -0
  244. {divi-0.0.1b0 → divi-0.0.1b1}/services/pb/common.pb.go +0 -0
  245. {divi-0.0.1b0 → divi-0.0.1b1}/services/pb/health_service.pb.go +0 -0
  246. {divi-0.0.1b0 → divi-0.0.1b1}/services/pb/health_service_grpc.pb.go +0 -0
  247. {divi-0.0.1b0 → divi-0.0.1b1}/services/pb/metric.pb.go +0 -0
  248. {divi-0.0.1b0 → divi-0.0.1b1}/services/pb/trace.pb.go +0 -0
  249. {divi-0.0.1b0 → divi-0.0.1b1}/tests/__init__.py +0 -0
  250. {divi-0.0.1b0 → divi-0.0.1b1}/tests/unit_tests/decorators/test_obs_openai.py +0 -0
  251. {divi-0.0.1b0 → divi-0.0.1b1}/tests/unit_tests/decorators/test_observable.py +0 -0
  252. {divi-0.0.1b0 → divi-0.0.1b1}/turbo.json +0 -0
  253. {divi-0.0.1b0 → divi-0.0.1b1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: divi
3
- Version: 0.0.1b0
3
+ Version: 0.0.1b1
4
4
  Summary: The Agent Platform for Observability & Evaluation
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.11
divi-0.0.1b1/README.md ADDED
@@ -0,0 +1,72 @@
1
+ <p align="center">
2
+ <a href="https://divine-agent.com/"><img width="128" height="128" src="https://raw.githubusercontent.com/Kaikaikaifang/divine-agent/main/docs/images/thinking-angel.png" alt='Divine Agent'></a>
3
+ </p>
4
+
5
+ <p align="center"><strong>Divine Agent</strong> <em>– Fully open-source agent observability. Simple. Clear.</em></p>
6
+
7
+ <p align="center">
8
+ <a href="https://pypi.org/project/divi/">
9
+ <img src="https://img.shields.io/pypi/v/divi.svg" alt="Package version">
10
+ </a>
11
+ </p>
12
+
13
+ divine-agent is an observability tool for LLM-based agents, offering tracing, evaluation, and usage statistics.
14
+
15
+ ---
16
+
17
+ > [!IMPORTANT]
18
+ > **divine-agent is currently experimental** and may undergo significant changes at any time. This project is in active development, which means APIs and features might change without prior notice.
19
+ >
20
+ > We do not recommend using divine-agent in production environments until a stable release is available.
21
+
22
+ ## Install
23
+
24
+ Requires Python 3.11+
25
+
26
+ ```shell
27
+ pip install divi
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ 1. Get API Key from [Web](https://www.divine-agent.com/dashboard/api-keys).
33
+ 2. Create a `.env` file and add the following line:
34
+ ```env
35
+ DIVI_API_KEY=your_api_key
36
+ ```
37
+ 3. Run the following code:
38
+ ```python
39
+ from divi import Score, obs_openai, observable
40
+ from dotenv import load_dotenv
41
+ from openai import OpenAI
42
+
43
+ load_dotenv()
44
+
45
+
46
+ class Pirate:
47
+ def __init__(self):
48
+ self.client = obs_openai(
49
+ OpenAI(),
50
+ name="Pirate",
51
+ scores=[Score.instruction_adherence],
52
+ )
53
+
54
+ @observable(name="Talk with pirate")
55
+ def talk(self, message: str):
56
+ """Talk like a pirate."""
57
+ res = self.client.chat.completions.create(
58
+ model="gpt-4o",
59
+ messages=[
60
+ {"role": "developer", "content": "Talk like a pirate."},
61
+ {
62
+ "role": "user",
63
+ "content": message,
64
+ },
65
+ ],
66
+ )
67
+ return res.choices[0].message.content
68
+
69
+
70
+ pirate = Pirate()
71
+ pirate.talk("How do I check if a Python object is an instance of a class?")
72
+ ```
@@ -9,7 +9,3 @@
9
9
  | graphql | A GraphQL server | 4000 |
10
10
  | web | A Next.js web server | 4001 |
11
11
  | docs | A documentation server | 4002 |
12
-
13
- ## Rules
14
-
15
- 1. [Split project files by feature or route](https://nextjs.org/docs/app/getting-started/project-structure#split-project-files-by-feature-or-route)
@@ -0,0 +1,3 @@
1
+ # Divi Docs
2
+
3
+ > This is a documentation site for the divine-agent project.
@@ -15,11 +15,7 @@
15
15
  "groups": [
16
16
  {
17
17
  "group": "Get Started",
18
- "pages": ["en/introduction"]
19
- },
20
- {
21
- "group": "Tutorials",
22
- "pages": ["en/tutorials/self-refine"]
18
+ "pages": ["en/introduction", "en/quickstart/trace"]
23
19
  }
24
20
  ]
25
21
  },
@@ -28,11 +24,7 @@
28
24
  "groups": [
29
25
  {
30
26
  "group": "快速开始",
31
- "pages": ["zh/introduction"]
32
- },
33
- {
34
- "group": "使用案例",
35
- "pages": ["zh/tutorials/self-refine"]
27
+ "pages": ["zh/introduction", "zh/quickstart/trace"]
36
28
  }
37
29
  ]
38
30
  }
@@ -13,3 +13,5 @@ description: "Welcome to the docs of Divine Agent"
13
13
  src="/images/scholar-angel.png"
14
14
  alt="Hero Dark"
15
15
  />
16
+
17
+ **Divine-Agent** is an observability tool for agents, offering tracing, evaluation, and usage statistics to help users observe the performance and behavior of their agents.
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: 'Evaluation'
3
+ description: 'Evaluate your agents in one line'
4
+ ---
5
+ ![Pirate](/images/pirate-example.png)
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: 'Trace'
3
+ description: 'Start observe your agents in under 5 minutes'
4
+ ---
5
+ ![Pirate](/images/pirate-example.png)
6
+
7
+ ## Install
8
+
9
+ Requires Python 3.11+
10
+
11
+ ```shell
12
+ pip install divi
13
+ ```
14
+
15
+ ## Steps
16
+
17
+ 1. Get API Key from [Web](https://www.divine-agent.com/dashboard/api-keys).
18
+ 2. Create a `.env` file and add the following line:
19
+ ```env
20
+ DIVI_API_KEY=your_api_key
21
+ ```
22
+ 3. Run the following code:
23
+ ```python Pirate Example {1,10-13,15} [expandable]
24
+ from divi import obs_openai, observable
25
+ from dotenv import load_dotenv
26
+ from openai import OpenAI
27
+
28
+ load_dotenv()
29
+
30
+
31
+ class Pirate:
32
+ def __init__(self):
33
+ self.client = obs_openai(
34
+ OpenAI(),
35
+ name="Pirate",
36
+ )
37
+
38
+ @observable(name="Talk with pirate")
39
+ def talk(self, message: str):
40
+ """Talk like a pirate."""
41
+ res = self.client.chat.completions.create(
42
+ model="gpt-4o",
43
+ messages=[
44
+ {"role": "developer", "content": "Talk like a pirate."},
45
+ {
46
+ "role": "user",
47
+ "content": message,
48
+ },
49
+ ],
50
+ )
51
+ return res.choices[0].message.content
52
+
53
+
54
+ pirate = Pirate()
55
+ pirate.talk("How do I check if a Python object is an instance of a class?")
56
+ ```
@@ -2,3 +2,5 @@
2
2
  title: '开发路线图'
3
3
  description: '开发路线图'
4
4
  ---
5
+
6
+ - [ ] 完善相关文档
@@ -13,3 +13,5 @@ description: "欢迎使用 Divine Agent"
13
13
  src="/images/scholar-angel.png"
14
14
  alt="Hero Dark"
15
15
  />
16
+
17
+ **神明代理人 (Divine Agent)** 是一个智能体可观测工具,提供追踪、评估和用量统计功能,帮助用户观察智能体的性能和行为。
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: '追踪'
3
+ description: '5 分钟内开启智能体追踪'
4
+ ---
5
+ ![Pirate](/images/pirate-example.png)
6
+
7
+ ## Install
8
+
9
+ 需要 Python 版本 3.11+
10
+
11
+ ```shell
12
+ pip install divi
13
+ ```
14
+
15
+ ## Steps
16
+
17
+ 1. 从 [Web](https://www.divine-agent.com/dashboard/api-keys) 获取 API Key.
18
+ 2. 创建 `.env` 文件并添加以下行:
19
+ ```env
20
+ DIVI_API_KEY=your_api_key
21
+ ```
22
+ 3. 运行以下代码:
23
+ ```python Pirate Example {1,10-13,15} [expandable]
24
+ from divi import obs_openai, observable
25
+ from dotenv import load_dotenv
26
+ from openai import OpenAI
27
+
28
+ load_dotenv()
29
+
30
+
31
+ class Pirate:
32
+ def __init__(self):
33
+ self.client = obs_openai(
34
+ OpenAI(),
35
+ name="Pirate",
36
+ )
37
+
38
+ @observable(name="Talk with pirate")
39
+ def talk(self, message: str):
40
+ """Talk like a pirate."""
41
+ res = self.client.chat.completions.create(
42
+ model="gpt-4o",
43
+ messages=[
44
+ {"role": "developer", "content": "Talk like a pirate."},
45
+ {
46
+ "role": "user",
47
+ "content": message,
48
+ },
49
+ ],
50
+ )
51
+ return res.choices[0].message.content
52
+
53
+
54
+ pirate = Pirate()
55
+ pirate.talk("How do I check if a Python object is an instance of a class?")
56
+ ```
@@ -0,0 +1,3 @@
1
+ # Divi GraphQL
2
+
3
+ > This is the GraphQL API for the divine-agent project.
@@ -0,0 +1,3 @@
1
+ # Divi Web
2
+
3
+ > This is the web application for the divine-agent project.
@@ -0,0 +1,3 @@
1
+ # DIVI SDK
2
+
3
+ > this is the Python SDK for the divine-agent project.
@@ -1,10 +1,9 @@
1
1
  from typing import Optional
2
2
 
3
3
  from .decorators import obs_openai, observable
4
- from .evaluation import Evaluator, Score
4
+ from .evaluation import Evaluator
5
5
  from .services import Auth, Core, DataPark
6
6
  from .session import Session
7
- from .signals import Kind
8
7
 
9
8
  name: str = "divi"
10
9
 
@@ -14,5 +13,5 @@ _auth: Optional[Auth] = None
14
13
  _datapark: Optional[DataPark] = None
15
14
  _evaluator: Optional[Evaluator] = None
16
15
 
17
- __version__ = "0.0.1b0"
18
- __all__ = ["obs_openai", "observable", "Score", "Kind"]
16
+ __version__ = "0.0.1b1"
17
+ __all__ = ["obs_openai", "observable"]
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING, TypeVar, Union
5
5
  from typing_extensions import Optional
6
6
 
7
7
  from divi.decorators.observable import observable
8
+ from divi.evaluation.evaluator import EvaluatorConfig
8
9
  from divi.evaluation.scores import Score
9
10
  from divi.signals.span import Kind
10
11
  from divi.utils import is_async
@@ -19,10 +20,13 @@ def _get_observable_create(
19
20
  create: Callable,
20
21
  name: Optional[str] = None,
21
22
  scores: Optional[list[Score]] = None,
23
+ eval: Optional[EvaluatorConfig] = None,
22
24
  ) -> Callable:
23
25
  @functools.wraps(create)
24
26
  def observable_create(*args, stream: bool = False, **kwargs):
25
- decorator = observable(kind=Kind.llm, name=name, scores=scores)
27
+ decorator = observable(
28
+ kind=Kind.llm, name=name, scores=scores, eval=eval
29
+ )
26
30
  return decorator(create)(*args, stream=stream, **kwargs)
27
31
 
28
32
  # TODO Async Observable Create
@@ -33,16 +37,13 @@ def obs_openai(
33
37
  client: C,
34
38
  name: Optional[str] = "Agent",
35
39
  scores: Optional[list[Score]] = None,
40
+ eval: Optional[EvaluatorConfig] = None,
36
41
  ) -> C:
37
42
  """Make OpenAI client observable."""
38
43
  client.chat.completions.create = _get_observable_create(
39
44
  client.chat.completions.create,
40
45
  name=name,
41
46
  scores=scores,
42
- )
43
- client.completions.create = _get_observable_create(
44
- client.completions.create,
45
- name=name,
46
- scores=scores,
47
+ eval=eval,
47
48
  )
48
49
  return client
@@ -15,6 +15,7 @@ from typing import (
15
15
 
16
16
  from divi.decorators.observe import observe
17
17
  from divi.evaluation.evaluate import evaluate_scores
18
+ from divi.evaluation.evaluator import EvaluatorConfig
18
19
  from divi.evaluation.scores import Score
19
20
  from divi.session import SessionExtra
20
21
  from divi.signals.span import Kind, Span
@@ -43,6 +44,7 @@ def observable(
43
44
  *,
44
45
  name: Optional[str] = None,
45
46
  scores: Optional[list[Score]] = None,
47
+ eval: Optional[EvaluatorConfig] = None,
46
48
  metadata: Optional[Mapping[str, Any]] = None,
47
49
  ) -> Callable[[Callable[P, R]], WithSessionExtra[P, R]]: ...
48
50
 
@@ -56,6 +58,7 @@ def observable(
56
58
  name = kwargs.pop("name", None)
57
59
  metadata = kwargs.pop("metadata", None)
58
60
  scores: list[Score] = kwargs.pop("scores", None)
61
+ eval: EvaluatorConfig = kwargs.pop("eval", None)
59
62
 
60
63
  def decorator(func):
61
64
  @functools.wraps(func)
@@ -78,7 +81,9 @@ def observable(
78
81
 
79
82
  # 3. evaluate the scores if they are provided
80
83
  messages = kwargs.get("messages", [])
81
- evaluate_scores(messages, outputs=result, scores=scores)
84
+ evaluate_scores(
85
+ messages, outputs=result, scores=scores, config=eval
86
+ )
82
87
 
83
88
  return result
84
89
 
@@ -0,0 +1,4 @@
1
+ from .evaluator import Evaluator, EvaluatorConfig
2
+ from .scores import Score
3
+
4
+ __all__ = ["Evaluator", "Score", "EvaluatorConfig"]
@@ -13,8 +13,9 @@ from divi.evaluation.scores import Score
13
13
  class EvaluatorConfig:
14
14
  def __init__(
15
15
  self,
16
- model: str = "gpt-4.1-nano",
16
+ model: str = "gpt-4o",
17
17
  temperature: float = 0.5,
18
+ n_rounds: int = 5,
18
19
  max_concurrency: int = 10,
19
20
  api_key: Optional[str] = None,
20
21
  base_url: Optional[str] = None,
@@ -23,6 +24,7 @@ class EvaluatorConfig:
23
24
  self.api_key = api_key
24
25
  self.base_url = base_url
25
26
  self.temperature = temperature
27
+ self.n_rounds = n_rounds
26
28
  self.max_concurrency = max_concurrency
27
29
 
28
30
 
@@ -123,7 +125,11 @@ class Evaluator:
123
125
  return aggregated_results
124
126
 
125
127
  def evaluate_sync(
126
- self, target: str, conversation: str, scores: list[Score], n_rounds: int
128
+ self,
129
+ target: str,
130
+ conversation: str,
131
+ scores: list[Score],
132
+ n_rounds: Optional[int] = None,
127
133
  ) -> List[EvaluationScore]:
128
134
  with concurrent.futures.ThreadPoolExecutor(
129
135
  max_workers=self.config.max_concurrency
@@ -132,7 +138,7 @@ class Evaluator:
132
138
  executor.submit(
133
139
  self._sync_evaluate_once, target, conversation, score
134
140
  )
135
- for _ in range(n_rounds)
141
+ for _ in range(n_rounds if n_rounds else self.config.n_rounds)
136
142
  for score in scores
137
143
  ]
138
144
  evaluations = [
@@ -143,7 +149,11 @@ class Evaluator:
143
149
  )
144
150
 
145
151
  async def evaluate_async(
146
- self, target: str, conversation: str, scores: list[Score], n_rounds: int
152
+ self,
153
+ target: str,
154
+ conversation: str,
155
+ scores: list[Score],
156
+ n_rounds: Optional[int] = None,
147
157
  ) -> List[EvaluationScore]:
148
158
  semaphore = asyncio.Semaphore(self.config.max_concurrency)
149
159
 
@@ -153,7 +163,11 @@ class Evaluator:
153
163
  target, conversation, score
154
164
  )
155
165
 
156
- tasks = [sem_task(score) for _ in range(n_rounds) for score in scores]
166
+ tasks = [
167
+ sem_task(score)
168
+ for _ in range(n_rounds if n_rounds else self.config.n_rounds)
169
+ for score in scores
170
+ ]
157
171
  evaluations = await asyncio.gather(*tasks)
158
172
  return self._aggregate_results(
159
173
  [e for e in evaluations if e is not None]
@@ -164,7 +178,7 @@ class Evaluator:
164
178
  target: str,
165
179
  conversation: str,
166
180
  scores: list[Score],
167
- n_rounds: int = 5,
181
+ n_rounds: Optional[int] = None,
168
182
  mode: Literal["sync", "async"] = "sync",
169
183
  ) -> List[EvaluationScore]:
170
184
  if mode == "async":
@@ -0,0 +1,15 @@
1
+ # Packages
2
+
3
+ > Js packages shared across the apps.
4
+
5
+ ## ui
6
+
7
+ > Shared shadcn ui for the project.
8
+
9
+ ## typescript-config
10
+
11
+ > Shared typescript configuration for the project.
12
+
13
+ ## graphql-client
14
+
15
+ > Shared GraphQL client codes for the project.
divi-0.0.1b0/README.md DELETED
@@ -1,14 +0,0 @@
1
- # divine-agent
2
-
3
- **Agent Platform for Observability**
4
-
5
- ## TODO
6
-
7
- - [ ] Web
8
- - [ ] Docs
9
-
10
- ## Architecture
11
-
12
- ![architecture](./docs/images/architecture.svg)
13
-
14
- ![storage](./docs/images/storage.svg)
@@ -1,32 +0,0 @@
1
- # Mintlify Starter Kit
2
-
3
- Click on `Use this template` to copy the Mintlify starter kit. The starter kit contains examples including
4
-
5
- - Guide pages
6
- - Navigation
7
- - Customizations
8
- - API Reference pages
9
- - Use of popular components
10
-
11
- ### Development
12
-
13
- Install the [Mintlify CLI](https://www.npmjs.com/package/mintlify) to preview the documentation changes locally. To install, use the following command
14
-
15
- ```
16
- npm i -g mintlify
17
- ```
18
-
19
- Run the following command at the root of your documentation (where docs.json is)
20
-
21
- ```
22
- mintlify dev
23
- ```
24
-
25
- ### Publishing Changes
26
-
27
- Install our Github App to auto propagate changes from your repo to your deployment. Changes will be deployed to production automatically after pushing to the default branch. Find the link to install on your dashboard.
28
-
29
- #### Troubleshooting
30
-
31
- - Mintlify dev isn't running - Run `mintlify install` it'll re-install dependencies.
32
- - Page loads as a 404 - Make sure you are running in a folder with `docs.json`
@@ -1,4 +0,0 @@
1
- ---
2
- title: 'Trace'
3
- description: 'Start observe your agents in under 5 minutes'
4
- ---
@@ -1,4 +0,0 @@
1
- ---
2
- title: '跟踪'
3
- description: 'Start observe your agents in under 5 minutes'
4
- ---
@@ -1,3 +0,0 @@
1
- # Catstronauts - server
2
-
3
- The starting point of the `server` code for Odyssey Lift-off I course.
@@ -1,36 +0,0 @@
1
- This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/create-next-app).
2
-
3
- ## Getting Started
4
-
5
- First, run the development server:
6
-
7
- ```bash
8
- npm run dev
9
- # or
10
- yarn dev
11
- # or
12
- pnpm dev
13
- # or
14
- bun dev
15
- ```
16
-
17
- Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18
-
19
- You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20
-
21
- This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load Inter, a custom Google Font.
22
-
23
- ## Learn More
24
-
25
- To learn more about Next.js, take a look at the following resources:
26
-
27
- - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28
- - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29
-
30
- You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
31
-
32
- ## Deploy on Vercel
33
-
34
- The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35
-
36
- Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
@@ -1,4 +0,0 @@
1
- from .evaluator import Evaluator
2
- from .scores import Score
3
-
4
- __all__ = ["Evaluator", "Score"]
@@ -1,15 +0,0 @@
1
- # Packages
2
-
3
- > Js packages shared across the apps.
4
-
5
- ## eslint-config
6
-
7
- > Shared eslint configuration for the project.
8
-
9
- ## typescript-config
10
-
11
- > Shared typescript configuration for the project.
12
-
13
- ## [tailwind-config](https://github.com/vercel/turborepo/tree/main/examples/with-tailwind)
14
-
15
- > Shared tailwind configuration for the project.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes