@lobehub/chat 1.127.2 → 1.127.3

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 (231) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/changelog/v1.json +9 -0
  3. package/docker-compose/local/docker-compose.yml +83 -1
  4. package/docker-compose/local/grafana/.env.example +42 -0
  5. package/docker-compose/local/grafana/.env.zh-CN.example +42 -0
  6. package/docker-compose/local/grafana/docker-compose.yml +251 -0
  7. package/docker-compose/local/grafana/grafana/dashboards/.gitkeep +0 -0
  8. package/docker-compose/local/grafana/grafana/datasources/datasource-prometheus.yaml +15 -0
  9. package/docker-compose/local/grafana/grafana/datasources/datasource-tempo.yaml +16 -0
  10. package/docker-compose/local/grafana/otel-collector/collector-config.yaml +45 -0
  11. package/docker-compose/local/grafana/prometheus/prometheus.yml +11 -0
  12. package/docker-compose/local/grafana/tempo/tempo.yaml +58 -0
  13. package/docker-compose/production/grafana/.env.example +44 -0
  14. package/docker-compose/production/grafana/.env.zh-CN.example +42 -0
  15. package/docker-compose/production/grafana/docker-compose.yml +249 -0
  16. package/docker-compose/production/grafana/grafana/dashboards/.gitkeep +0 -0
  17. package/docker-compose/production/grafana/grafana/datasources/datasource-prometheus.yaml +15 -0
  18. package/docker-compose/production/grafana/grafana/datasources/datasource-tempo.yaml +20 -0
  19. package/docker-compose/production/grafana/otel-collector/collector-config.yaml +45 -0
  20. package/docker-compose/production/grafana/prometheus/prometheus.yml +11 -0
  21. package/docker-compose/production/grafana/tempo/tempo.yaml +58 -0
  22. package/docker-compose.development.yml +44 -0
  23. package/docs/self-hosting/advanced/observability/grafana.mdx +71 -0
  24. package/docs/self-hosting/advanced/observability/grafana.zh-CN.mdx +70 -0
  25. package/package.json +1 -1
  26. package/packages/model-runtime/package.json +1 -1
  27. package/packages/model-runtime/src/const/modelProvider.ts +64 -0
  28. package/packages/model-runtime/src/const/type.test.ts +9 -0
  29. package/packages/model-runtime/src/{BaseAI.ts → core/BaseAI.ts} +3 -4
  30. package/packages/model-runtime/src/{ModelRuntime.test.ts → core/ModelRuntime.test.ts} +3 -3
  31. package/packages/model-runtime/src/{ModelRuntime.ts → core/ModelRuntime.ts} +9 -8
  32. package/packages/model-runtime/src/core/RouterRuntime/baseRuntimeMap.ts +17 -0
  33. package/packages/model-runtime/src/{RouterRuntime → core/RouterRuntime}/createRuntime.ts +7 -7
  34. package/packages/model-runtime/src/{utils → core}/openaiCompatibleFactory/createImage.ts +3 -3
  35. package/packages/model-runtime/src/{utils → core}/openaiCompatibleFactory/index.test.ts +2 -2
  36. package/packages/model-runtime/src/{utils → core}/openaiCompatibleFactory/index.ts +9 -9
  37. package/packages/model-runtime/src/{utils → core}/streams/bedrock/claude.ts +1 -1
  38. package/packages/model-runtime/src/{utils → core}/streams/bedrock/llama.test.ts +1 -1
  39. package/packages/model-runtime/src/{utils → core}/streams/bedrock/llama.ts +1 -1
  40. package/packages/model-runtime/src/{utils → core}/streams/google-ai.test.ts +1 -1
  41. package/packages/model-runtime/src/{utils → core}/streams/google-ai.ts +1 -1
  42. package/packages/model-runtime/src/core/streams/model.test.ts +268 -0
  43. package/packages/model-runtime/src/{utils → core}/streams/ollama.test.ts +1 -1
  44. package/packages/model-runtime/src/{utils → core}/streams/ollama.ts +1 -1
  45. package/packages/model-runtime/src/{utils → core}/streams/openai/openai.test.ts +3 -4
  46. package/packages/model-runtime/src/{utils → core}/streams/openai/openai.ts +1 -1
  47. package/packages/model-runtime/src/{utils → core}/streams/openai/responsesStream.ts +1 -1
  48. package/packages/model-runtime/src/{utils → core}/streams/protocol.ts +2 -2
  49. package/packages/model-runtime/src/{utils → core}/streams/qwen.ts +1 -1
  50. package/packages/model-runtime/src/{utils → core}/streams/spark.ts +1 -1
  51. package/packages/model-runtime/src/core/streams/utils.test.ts +164 -0
  52. package/packages/model-runtime/src/{utils → core}/streams/vertex-ai.test.ts +1 -1
  53. package/packages/model-runtime/src/{utils → core}/streams/vertex-ai.ts +1 -1
  54. package/packages/model-runtime/src/index.ts +28 -27
  55. package/packages/model-runtime/src/providerTestUtils.ts +1 -1
  56. package/packages/model-runtime/src/{ai21 → providers/ai21}/index.test.ts +1 -1
  57. package/packages/model-runtime/src/{ai21 → providers/ai21}/index.ts +2 -2
  58. package/packages/model-runtime/src/{ai302 → providers/ai302}/index.ts +4 -4
  59. package/packages/model-runtime/src/{ai360 → providers/ai360}/index.test.ts +1 -1
  60. package/packages/model-runtime/src/{ai360 → providers/ai360}/index.ts +2 -2
  61. package/packages/model-runtime/src/{aihubmix → providers/aihubmix}/index.ts +5 -5
  62. package/packages/model-runtime/src/{akashchat → providers/akashchat}/index.test.ts +1 -1
  63. package/packages/model-runtime/src/{akashchat → providers/akashchat}/index.ts +5 -4
  64. package/packages/model-runtime/src/{anthropic → providers/anthropic}/index.test.ts +2 -2
  65. package/packages/model-runtime/src/{anthropic → providers/anthropic}/index.ts +10 -10
  66. package/packages/model-runtime/src/{azureOpenai → providers/azureOpenai}/index.test.ts +4 -4
  67. package/packages/model-runtime/src/{azureOpenai → providers/azureOpenai}/index.ts +11 -11
  68. package/packages/model-runtime/src/{azureai → providers/azureai}/index.ts +9 -9
  69. package/packages/model-runtime/src/{baichuan → providers/baichuan}/index.test.ts +1 -1
  70. package/packages/model-runtime/src/{baichuan → providers/baichuan}/index.ts +2 -2
  71. package/packages/model-runtime/src/{bedrock → providers/bedrock}/index.test.ts +1 -1
  72. package/packages/model-runtime/src/{bedrock → providers/bedrock}/index.ts +12 -12
  73. package/packages/model-runtime/src/{bfl → providers/bfl}/createImage.test.ts +25 -25
  74. package/packages/model-runtime/src/{bfl → providers/bfl}/createImage.ts +6 -6
  75. package/packages/model-runtime/src/{bfl → providers/bfl}/index.test.ts +1 -1
  76. package/packages/model-runtime/src/{bfl → providers/bfl}/index.ts +4 -4
  77. package/packages/model-runtime/src/{cloudflare → providers/cloudflare}/index.test.ts +1 -1
  78. package/packages/model-runtime/src/{cloudflare → providers/cloudflare}/index.ts +8 -8
  79. package/packages/model-runtime/src/{cohere → providers/cohere}/index.test.ts +1 -1
  80. package/packages/model-runtime/src/{cohere → providers/cohere}/index.ts +2 -2
  81. package/packages/model-runtime/src/providers/cometapi/index.test.ts +12 -0
  82. package/packages/model-runtime/src/{cometapi → providers/cometapi}/index.ts +3 -3
  83. package/packages/model-runtime/src/{deepseek → providers/deepseek}/index.test.ts +1 -1
  84. package/packages/model-runtime/src/{deepseek → providers/deepseek}/index.ts +3 -5
  85. package/packages/model-runtime/src/{fal → providers/fal}/index.test.ts +1 -1
  86. package/packages/model-runtime/src/{fal → providers/fal}/index.ts +4 -4
  87. package/packages/model-runtime/src/{fireworksai → providers/fireworksai}/index.test.ts +1 -1
  88. package/packages/model-runtime/src/{fireworksai → providers/fireworksai}/index.ts +2 -2
  89. package/packages/model-runtime/src/{giteeai → providers/giteeai}/index.test.ts +1 -1
  90. package/packages/model-runtime/src/{giteeai → providers/giteeai}/index.ts +3 -3
  91. package/packages/model-runtime/src/{github → providers/github}/index.test.ts +1 -1
  92. package/packages/model-runtime/src/{github → providers/github}/index.ts +5 -5
  93. package/packages/model-runtime/src/{google → providers/google}/createImage.test.ts +2 -2
  94. package/packages/model-runtime/src/{google → providers/google}/createImage.ts +5 -5
  95. package/packages/model-runtime/src/{google → providers/google}/index.test.ts +2 -2
  96. package/packages/model-runtime/src/{google → providers/google}/index.ts +13 -13
  97. package/packages/model-runtime/src/{groq → providers/groq}/index.test.ts +1 -1
  98. package/packages/model-runtime/src/{groq → providers/groq}/index.ts +3 -3
  99. package/packages/model-runtime/src/{higress → providers/higress}/index.ts +6 -5
  100. package/packages/model-runtime/src/{huggingface → providers/huggingface}/index.ts +4 -4
  101. package/packages/model-runtime/src/{hunyuan → providers/hunyuan}/index.test.ts +1 -1
  102. package/packages/model-runtime/src/{hunyuan → providers/hunyuan}/index.ts +2 -2
  103. package/packages/model-runtime/src/{infiniai → providers/infiniai}/index.ts +3 -3
  104. package/packages/model-runtime/src/{internlm → providers/internlm}/index.test.ts +1 -1
  105. package/packages/model-runtime/src/{internlm → providers/internlm}/index.ts +2 -2
  106. package/packages/model-runtime/src/{jina → providers/jina}/index.test.ts +1 -1
  107. package/packages/model-runtime/src/{jina → providers/jina}/index.ts +2 -2
  108. package/packages/model-runtime/src/{lmstudio → providers/lmstudio}/index.test.ts +1 -1
  109. package/packages/model-runtime/src/{lmstudio → providers/lmstudio}/index.ts +2 -2
  110. package/packages/model-runtime/src/{minimax → providers/minimax}/createImage.test.ts +2 -2
  111. package/packages/model-runtime/src/{minimax → providers/minimax}/createImage.ts +3 -3
  112. package/packages/model-runtime/src/{minimax → providers/minimax}/index.test.ts +1 -1
  113. package/packages/model-runtime/src/{minimax → providers/minimax}/index.ts +2 -2
  114. package/packages/model-runtime/src/{mistral → providers/mistral}/index.test.ts +1 -1
  115. package/packages/model-runtime/src/{mistral → providers/mistral}/index.ts +2 -2
  116. package/packages/model-runtime/src/{modelscope → providers/modelscope}/index.test.ts +1 -1
  117. package/packages/model-runtime/src/{modelscope → providers/modelscope}/index.ts +3 -3
  118. package/packages/model-runtime/src/{moonshot → providers/moonshot}/index.test.ts +1 -1
  119. package/packages/model-runtime/src/{moonshot → providers/moonshot}/index.ts +3 -3
  120. package/packages/model-runtime/src/{nebius → providers/nebius}/index.test.ts +1 -1
  121. package/packages/model-runtime/src/{nebius → providers/nebius}/index.ts +3 -3
  122. package/packages/model-runtime/src/{newapi → providers/newapi}/index.test.ts +4 -4
  123. package/packages/model-runtime/src/{newapi → providers/newapi}/index.ts +5 -5
  124. package/packages/model-runtime/src/{novita → providers/novita}/index.test.ts +1 -1
  125. package/packages/model-runtime/src/{novita → providers/novita}/index.ts +3 -3
  126. package/packages/model-runtime/src/{nvidia → providers/nvidia}/index.test.ts +1 -1
  127. package/packages/model-runtime/src/{nvidia → providers/nvidia}/index.ts +3 -3
  128. package/packages/model-runtime/src/{ollama → providers/ollama}/index.test.ts +3 -3
  129. package/packages/model-runtime/src/{ollama → providers/ollama}/index.ts +11 -10
  130. package/packages/model-runtime/src/{openai → providers/openai}/index.test.ts +1 -1
  131. package/packages/model-runtime/src/{openai → providers/openai}/index.ts +6 -5
  132. package/packages/model-runtime/src/{openrouter → providers/openrouter}/index.test.ts +1 -1
  133. package/packages/model-runtime/src/{openrouter → providers/openrouter}/index.ts +3 -3
  134. package/packages/model-runtime/src/{perplexity → providers/perplexity}/index.test.ts +1 -1
  135. package/packages/model-runtime/src/{perplexity → providers/perplexity}/index.ts +2 -2
  136. package/packages/model-runtime/src/{ppio → providers/ppio}/index.test.ts +1 -1
  137. package/packages/model-runtime/src/{ppio → providers/ppio}/index.ts +2 -2
  138. package/packages/model-runtime/src/{qiniu → providers/qiniu}/index.test.ts +2 -2
  139. package/packages/model-runtime/src/{qiniu → providers/qiniu}/index.ts +3 -3
  140. package/packages/model-runtime/src/{qwen → providers/qwen}/createImage.test.ts +2 -2
  141. package/packages/model-runtime/src/{qwen → providers/qwen}/createImage.ts +4 -4
  142. package/packages/model-runtime/src/{qwen → providers/qwen}/index.test.ts +1 -1
  143. package/packages/model-runtime/src/{qwen → providers/qwen}/index.ts +4 -4
  144. package/packages/model-runtime/src/{sambanova → providers/sambanova}/index.test.ts +1 -1
  145. package/packages/model-runtime/src/{sambanova → providers/sambanova}/index.ts +2 -2
  146. package/packages/model-runtime/src/{search1api → providers/search1api}/index.test.ts +1 -1
  147. package/packages/model-runtime/src/{search1api → providers/search1api}/index.ts +2 -2
  148. package/packages/model-runtime/src/{sensenova → providers/sensenova}/index.test.ts +1 -1
  149. package/packages/model-runtime/src/{sensenova → providers/sensenova}/index.ts +3 -3
  150. package/packages/model-runtime/src/{siliconcloud → providers/siliconcloud}/index.ts +4 -4
  151. package/packages/model-runtime/src/{spark → providers/spark}/index.test.ts +1 -1
  152. package/packages/model-runtime/src/{spark → providers/spark}/index.ts +3 -3
  153. package/packages/model-runtime/src/{stepfun → providers/stepfun}/index.test.ts +1 -1
  154. package/packages/model-runtime/src/{stepfun → providers/stepfun}/index.ts +2 -2
  155. package/packages/model-runtime/src/{taichu → providers/taichu}/index.test.ts +2 -2
  156. package/packages/model-runtime/src/{taichu → providers/taichu}/index.ts +2 -2
  157. package/packages/model-runtime/src/{tencentcloud → providers/tencentcloud}/index.test.ts +1 -1
  158. package/packages/model-runtime/src/{tencentcloud → providers/tencentcloud}/index.ts +2 -2
  159. package/packages/model-runtime/src/{togetherai → providers/togetherai}/index.test.ts +1 -1
  160. package/packages/model-runtime/src/{togetherai → providers/togetherai}/index.ts +2 -2
  161. package/packages/model-runtime/src/{upstage → providers/upstage}/index.test.ts +1 -1
  162. package/packages/model-runtime/src/{upstage → providers/upstage}/index.ts +2 -2
  163. package/packages/model-runtime/src/{v0 → providers/v0}/index.ts +3 -3
  164. package/packages/model-runtime/src/providers/vertexai/index.test.ts +54 -0
  165. package/packages/model-runtime/src/{vertexai → providers/vertexai}/index.ts +2 -2
  166. package/packages/model-runtime/src/providers/vllm/index.test.ts +12 -0
  167. package/packages/model-runtime/src/{vllm → providers/vllm}/index.ts +2 -2
  168. package/packages/model-runtime/src/{volcengine → providers/volcengine}/createImage.test.ts +2 -2
  169. package/packages/model-runtime/src/{volcengine → providers/volcengine}/createImage.ts +2 -2
  170. package/packages/model-runtime/src/{volcengine → providers/volcengine}/index.ts +3 -3
  171. package/packages/model-runtime/src/{wenxin → providers/wenxin}/index.test.ts +1 -1
  172. package/packages/model-runtime/src/{wenxin → providers/wenxin}/index.ts +2 -2
  173. package/packages/model-runtime/src/{xai → providers/xai}/index.test.ts +1 -1
  174. package/packages/model-runtime/src/{xai → providers/xai}/index.ts +3 -3
  175. package/packages/model-runtime/src/providers/xinference/index.test.ts +12 -0
  176. package/packages/model-runtime/src/{xinference → providers/xinference}/index.ts +2 -2
  177. package/packages/model-runtime/src/{zeroone → providers/zeroone}/index.test.ts +1 -1
  178. package/packages/model-runtime/src/{zeroone → providers/zeroone}/index.ts +3 -3
  179. package/packages/model-runtime/src/{zhipu → providers/zhipu}/index.test.ts +1 -1
  180. package/packages/model-runtime/src/{zhipu → providers/zhipu}/index.ts +5 -5
  181. package/packages/model-runtime/src/runtimeMap.ts +61 -61
  182. package/packages/model-runtime/src/types/index.ts +1 -0
  183. package/packages/model-runtime/src/types/type.ts +1 -65
  184. package/packages/model-runtime/src/utils/createError.test.ts +95 -0
  185. package/packages/model-runtime/src/utils/handleOpenAIError.test.ts +149 -0
  186. package/packages/model-runtime/src/utils/postProcessModelList.test.ts +190 -0
  187. package/packages/model-runtime/src/utils/response.test.ts +91 -0
  188. package/packages/types/src/fetch.ts +1 -1
  189. package/packages/types/src/message/base.ts +2 -3
  190. package/packages/types/src/user/settings/index.ts +1 -2
  191. package/packages/types/src/user/settings/modelProvider.ts +4 -3
  192. package/src/app/[variants]/(main)/settings/llm/ProviderList/HuggingFace/index.tsx +1 -1
  193. package/src/server/modules/ModelRuntime/index.test.ts +2 -4
  194. package/src/services/__tests__/chat.test.ts +13 -8
  195. package/src/store/user/slices/settings/initialState.ts +2 -3
  196. package/tsconfig.json +0 -2
  197. package/vitest.config.mts +0 -1
  198. package/packages/model-runtime/src/RouterRuntime/baseRuntimeMap.ts +0 -17
  199. /package/packages/model-runtime/src/{RouterRuntime → core/RouterRuntime}/createRuntime.test.ts +0 -0
  200. /package/packages/model-runtime/src/{RouterRuntime → core/RouterRuntime}/index.ts +0 -0
  201. /package/packages/model-runtime/src/{utils → core}/streams/__snapshots__/protocol.test.ts.snap +0 -0
  202. /package/packages/model-runtime/src/{utils → core}/streams/anthropic.test.ts +0 -0
  203. /package/packages/model-runtime/src/{utils → core}/streams/anthropic.ts +0 -0
  204. /package/packages/model-runtime/src/{utils → core}/streams/bedrock/common.ts +0 -0
  205. /package/packages/model-runtime/src/{utils → core}/streams/bedrock/index.ts +0 -0
  206. /package/packages/model-runtime/src/{utils → core}/streams/index.ts +0 -0
  207. /package/packages/model-runtime/src/{utils → core}/streams/model.ts +0 -0
  208. /package/packages/model-runtime/src/{utils → core}/streams/openai/__snapshots__/responsesStream.test.ts.snap +0 -0
  209. /package/packages/model-runtime/src/{utils → core}/streams/openai/index.ts +0 -0
  210. /package/packages/model-runtime/src/{utils → core}/streams/openai/responsesStream.test.ts +0 -0
  211. /package/packages/model-runtime/src/{utils → core}/streams/protocol.test.ts +0 -0
  212. /package/packages/model-runtime/src/{utils → core}/streams/qwen.test.ts +0 -0
  213. /package/packages/model-runtime/src/{utils → core}/streams/spark.test.ts +0 -0
  214. /package/packages/model-runtime/src/{utils → core}/streams/utils.ts +0 -0
  215. /package/packages/model-runtime/src/{anthropic → providers/anthropic}/handleAnthropicError.ts +0 -0
  216. /package/packages/model-runtime/src/{bfl → providers/bfl}/types.ts +0 -0
  217. /package/packages/model-runtime/src/{huggingface → providers/huggingface}/index.test.ts +0 -0
  218. /package/packages/model-runtime/src/{novita → providers/novita}/__snapshots__/index.test.ts.snap +0 -0
  219. /package/packages/model-runtime/src/{novita → providers/novita}/fixtures/models.json +0 -0
  220. /package/packages/model-runtime/src/{novita → providers/novita}/type.ts +0 -0
  221. /package/packages/model-runtime/src/{ollama → providers/ollama}/type.ts +0 -0
  222. /package/packages/model-runtime/src/{openai → providers/openai}/__snapshots__/index.test.ts.snap +0 -0
  223. /package/packages/model-runtime/src/{openai → providers/openai}/fixtures/openai-models.json +0 -0
  224. /package/packages/model-runtime/src/{openrouter → providers/openrouter}/fixtures/frontendModels.json +0 -0
  225. /package/packages/model-runtime/src/{openrouter → providers/openrouter}/fixtures/models.json +0 -0
  226. /package/packages/model-runtime/src/{openrouter → providers/openrouter}/type.ts +0 -0
  227. /package/packages/model-runtime/src/{ppio → providers/ppio}/__snapshots__/index.test.ts.snap +0 -0
  228. /package/packages/model-runtime/src/{ppio → providers/ppio}/fixtures/models.json +0 -0
  229. /package/packages/model-runtime/src/{ppio → providers/ppio}/type.ts +0 -0
  230. /package/packages/model-runtime/src/{togetherai → providers/togetherai}/fixtures/models.json +0 -0
  231. /package/packages/model-runtime/src/{togetherai → providers/togetherai}/type.ts +0 -0
@@ -0,0 +1,42 @@
1
+ # Proxy,如果你需要的话(比如你使用 GitHub 作为鉴权服务提供商)
2
+ # HTTP_PROXY=http://localhost:7890
3
+ # HTTPS_PROXY=http://localhost:7890
4
+
5
+
6
+ # 其他环境变量,视需求而定,可以参照客户端版本的环境变量配置,注意不要有 ACCESS_CODE
7
+ # OPENAI_API_KEY=sk-xxxx
8
+ # OPENAI_PROXY_URL=https://api.openai.com/v1
9
+ # OPENAI_MODEL_LIST=...
10
+
11
+
12
+ # ===================
13
+ # ===== 预设配置 =====
14
+ # ===================
15
+ # 如没有特殊需要不用更改
16
+ LOBE_PORT=3210
17
+ CASDOOR_PORT=8000
18
+ MINIO_PORT=9000
19
+ APP_URL=http://localhost:3210
20
+ AUTH_URL=http://localhost:3210/api/auth
21
+
22
+ # Postgres 相关,也即 DB 必须的环境变量
23
+ LOBE_DB_NAME=lobechat
24
+ POSTGRES_PASSWORD=uWNZugjBqixf8dxC
25
+
26
+ AUTH_CASDOOR_ISSUER=http://localhost:8000
27
+ # Casdoor secret
28
+ AUTH_CASDOOR_ID=a387a4892ee19b1a2249
29
+ AUTH_CASDOOR_SECRET=dbf205949d704de81b0b5b3603174e23fbecc354
30
+ CASDOOR_WEBHOOK_SECRET=casdoor-secret
31
+
32
+ # MinIO S3 配置
33
+ MINIO_ROOT_USER=admin
34
+ MINIO_ROOT_PASSWORD=YOUR_MINIO_PASSWORD
35
+
36
+ # 在下方配置 minio 中添加的桶
37
+ S3_PUBLIC_DOMAIN=http://localhost:9000
38
+ S3_ENDPOINT=http://localhost:9000
39
+ MINIO_LOBE_BUCKET=lobe
40
+
41
+ # 为 casdoor 配置
42
+ origin=http://localhost:8000
@@ -0,0 +1,249 @@
1
+ name: lobe-chat-database
2
+ services:
3
+ network-service:
4
+ image: alpine
5
+ container_name: lobe-network
6
+ restart: always
7
+ ports:
8
+ - '${MINIO_PORT}:${MINIO_PORT}' # MinIO API
9
+ - '9001:9001' # MinIO Console
10
+ - '${CASDOOR_PORT}:${CASDOOR_PORT}' # Casdoor
11
+ - '${LOBE_PORT}:3210' # LobeChat
12
+ - '3000:3000' # Grafana
13
+ - '4318:4318' # otel-collector HTTP
14
+ - '4317:4317' # otel-collector gRPC
15
+ command: tail -f /dev/null
16
+ networks:
17
+ - lobe-network
18
+
19
+ postgresql:
20
+ image: pgvector/pgvector:pg17
21
+ container_name: lobe-postgres
22
+ ports:
23
+ - '5432:5432'
24
+ volumes:
25
+ - './data:/var/lib/postgresql/data'
26
+ environment:
27
+ - 'POSTGRES_DB=${LOBE_DB_NAME}'
28
+ - 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}'
29
+ healthcheck:
30
+ test: ['CMD-SHELL', 'pg_isready -U postgres']
31
+ interval: 5s
32
+ timeout: 5s
33
+ retries: 5
34
+ restart: always
35
+ networks:
36
+ - lobe-network
37
+
38
+ minio:
39
+ image: minio/minio:RELEASE.2025-04-22T22-12-26Z
40
+ container_name: lobe-minio
41
+ network_mode: 'service:network-service'
42
+ volumes:
43
+ - './s3_data:/etc/minio/data'
44
+ environment:
45
+ - 'MINIO_API_CORS_ALLOW_ORIGIN=*'
46
+ env_file:
47
+ - .env
48
+ restart: always
49
+ entrypoint: >
50
+ /bin/sh -c "
51
+ minio server /etc/minio/data --address ':${MINIO_PORT}' --console-address ':9001' &
52
+ MINIO_PID=\$!
53
+ while ! curl -s http://localhost:${MINIO_PORT}/minio/health/live; do
54
+ echo 'Waiting for MinIO to start...'
55
+ sleep 1
56
+ done
57
+ sleep 5
58
+ mc alias set myminio http://localhost:${MINIO_PORT} ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}
59
+ echo 'Creating bucket ${MINIO_LOBE_BUCKET}'
60
+ mc mb myminio/${MINIO_LOBE_BUCKET}
61
+ wait \$MINIO_PID
62
+ "
63
+
64
+ # version lock ref: https://github.com/lobehub/lobe-chat/pull/7331
65
+ casdoor:
66
+ image: casbin/casdoor:v2.13.0
67
+ container_name: lobe-casdoor
68
+ entrypoint: /bin/sh -c './server --createDatabase=true'
69
+ network_mode: 'service:network-service'
70
+ depends_on:
71
+ postgresql:
72
+ condition: service_healthy
73
+ environment:
74
+ httpport: ${CASDOOR_PORT}
75
+ RUNNING_IN_DOCKER: 'true'
76
+ driverName: 'postgres'
77
+ dataSourceName: 'user=postgres password=${POSTGRES_PASSWORD} host=postgresql port=5432 sslmode=disable dbname=casdoor'
78
+ runmode: 'dev'
79
+ volumes:
80
+ - ./init_data.json:/init_data.json
81
+ env_file:
82
+ - .env
83
+
84
+ searxng:
85
+ image: searxng/searxng
86
+ container_name: lobe-searxng
87
+ volumes:
88
+ - './searxng-settings.yml:/etc/searxng/settings.yml'
89
+ environment:
90
+ - 'SEARXNG_SETTINGS_FILE=/etc/searxng/settings.yml'
91
+ restart: always
92
+ networks:
93
+ - lobe-network
94
+ env_file:
95
+ - .env
96
+
97
+ grafana:
98
+ image: grafana/grafana:12.2.0-17419259409
99
+ container_name: lobe-grafana
100
+ network_mode: 'service:network-service'
101
+ restart: always
102
+ environment:
103
+ - GF_SECURITY_ADMIN_PASSWORD=${GF_SECURITY_ADMIN_PASSWORD}
104
+ - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor
105
+ volumes:
106
+ - grafana_data:/var/lib/grafana
107
+ - ./grafana/dashboards:/etc/grafana/provisioning/dashboards
108
+ - ./grafana/datasources:/etc/grafana/provisioning/datasources
109
+ depends_on:
110
+ - tempo
111
+ - prometheus
112
+
113
+ tempo:
114
+ image: grafana/tempo:latest
115
+ container_name: lobe-tempo
116
+ network_mode: 'service:network-service'
117
+ restart: always
118
+ volumes:
119
+ - ./tempo/tempo.yaml:/etc/tempo.yaml
120
+ - tempo_data:/var/tempo
121
+ command: ['-config.file=/etc/tempo.yaml']
122
+
123
+ prometheus:
124
+ image: prom/prometheus
125
+ container_name: lobe-prometheus
126
+ network_mode: 'service:network-service'
127
+ restart: always
128
+ volumes:
129
+ - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
130
+ - prometheus_data:/prometheus
131
+ command:
132
+ - '--config.file=/etc/prometheus/prometheus.yml'
133
+ - '--web.enable-otlp-receiver'
134
+ - '--web.enable-remote-write-receiver'
135
+ - '--enable-feature=exemplar-storage'
136
+
137
+ otel-collector:
138
+ image: otel/opentelemetry-collector
139
+ container_name: lobe-otel-collector
140
+ network_mode: 'service:network-service'
141
+ restart: always
142
+ volumes:
143
+ - ./otel-collector/collector-config.yaml:/etc/otelcol/config.yaml
144
+ command: ['--config', '/etc/otelcol/config.yaml']
145
+ depends_on:
146
+ - tempo
147
+ - prometheus
148
+
149
+ otel-tracing-test:
150
+ profiles:
151
+ - otel-test
152
+ image: ghcr.io/grafana/xk6-client-tracing:v0.0.7
153
+ container_name: lobe-otel-tracing-test
154
+ network_mode: 'service:network-service'
155
+ restart: always
156
+ environment:
157
+ - ENDPOINT=127.0.0.1:4317
158
+
159
+ lobe:
160
+ image: lobehub/lobe-chat-database
161
+ container_name: lobe-chat
162
+ network_mode: 'service:network-service'
163
+ depends_on:
164
+ postgresql:
165
+ condition: service_healthy
166
+ network-service:
167
+ condition: service_started
168
+ minio:
169
+ condition: service_started
170
+ casdoor:
171
+ condition: service_started
172
+
173
+ environment:
174
+ - 'NEXT_AUTH_SSO_PROVIDERS=casdoor'
175
+ - 'KEY_VAULTS_SECRET=Kix2wcUONd4CX51E/ZPAd36BqM4wzJgKjPtz2sGztqQ='
176
+ - 'NEXT_AUTH_SECRET=NX2kaPE923dt6BL2U8e9oSre5RfoT7hg'
177
+ - 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
178
+ - 'S3_BUCKET=${MINIO_LOBE_BUCKET}'
179
+ - 'S3_ENABLE_PATH_STYLE=1'
180
+ - 'S3_ACCESS_KEY=${MINIO_ROOT_USER}'
181
+ - 'S3_ACCESS_KEY_ID=${MINIO_ROOT_USER}'
182
+ - 'S3_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}'
183
+ - 'LLM_VISION_IMAGE_USE_BASE64=1'
184
+ - 'S3_SET_ACL=0'
185
+ - 'SEARXNG_URL=http://searxng:8080'
186
+ - 'OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf'
187
+ - 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:4318/v1/metrics'
188
+ - 'OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf'
189
+ - 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4318/v1/traces'
190
+ env_file:
191
+ - .env
192
+ restart: always
193
+ entrypoint: >
194
+ /bin/sh -c "
195
+ /bin/node /app/startServer.js &
196
+ LOBE_PID=\$!
197
+ sleep 3
198
+ if [ $(wget --timeout=5 --spider --server-response ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -c 'HTTP/1.1 200 OK') -eq 0 ]; then
199
+ echo '⚠️Warning: Unable to fetch OIDC configuration from Casdoor'
200
+ echo 'Request URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
201
+ echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
202
+ echo ''
203
+ echo '⚠️注意:无法从 Casdoor 获取 OIDC 配置'
204
+ echo '请求 URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
205
+ echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration'
206
+ echo ''
207
+ else
208
+ if ! wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep 'issuer' | grep ${AUTH_CASDOOR_ISSUER}; then
209
+ printf '❌Error: The Auth issuer is conflict, Issuer in OIDC configuration is: %s' \$(wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -E 'issuer.*' | awk -F '\"' '{print \$4}')
210
+ echo ' , but the issuer in .env file is: ${AUTH_CASDOOR_ISSUER} '
211
+ echo 'Request URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
212
+ echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
213
+ echo ''
214
+ printf '❌错误:Auth 的 issuer 冲突,OIDC 配置中的 issuer 是:%s' \$(wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -E 'issuer.*' | awk -F '\"' '{print \$4}')
215
+ echo ' , 但 .env 文件中的 issuer 是:${AUTH_CASDOOR_ISSUER} '
216
+ echo '请求 URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
217
+ echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration'
218
+ echo ''
219
+ fi
220
+ fi
221
+ if [ $(wget --timeout=5 --spider --server-response ${S3_ENDPOINT}/minio/health/live 2>&1 | grep -c 'HTTP/1.1 200 OK') -eq 0 ]; then
222
+ echo '⚠️Warning: Unable to fetch MinIO health status'
223
+ echo 'Request URL: ${S3_ENDPOINT}/minio/health/live'
224
+ echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
225
+ echo ''
226
+ echo '⚠️注意:无法获取 MinIO 健康状态'
227
+ echo '请求 URL: ${S3_ENDPOINT}/minio/health/live'
228
+ echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration'
229
+ echo ''
230
+ fi
231
+ wait \$LOBE_PID
232
+ "
233
+
234
+ volumes:
235
+ data:
236
+ driver: local
237
+ s3_data:
238
+ driver: local
239
+ grafana_data:
240
+ driver: local
241
+ tempo_data:
242
+ driver: local
243
+ prometheus_data:
244
+ driver: local
245
+
246
+
247
+ networks:
248
+ lobe-network:
249
+ driver: bridge
@@ -0,0 +1,15 @@
1
+ apiVersion: 1
2
+
3
+ datasources:
4
+ - name: Prometheus
5
+ type: prometheus
6
+ uid: prometheus
7
+ access: proxy
8
+ orgId: 1
9
+ url: http://127.0.0.1:9090
10
+ basicAuth: false
11
+ isDefault: false
12
+ version: 1
13
+ editable: false
14
+ jsonData:
15
+ httpMethod: GET
@@ -0,0 +1,20 @@
1
+ apiVersion: 1
2
+
3
+ datasources:
4
+ - name: Tempo
5
+ type: tempo
6
+ access: proxy
7
+ orgId: 1
8
+ url: http://127.0.0.1:3200
9
+ basicAuth: false
10
+ isDefault: true
11
+ version: 1
12
+ editable: false
13
+ apiVersion: 1
14
+ uid: tempo
15
+ jsonData:
16
+ httpMethod: GET
17
+ serviceMap:
18
+ datasourceUid: prometheus
19
+ streamingEnabled:
20
+ search: true
@@ -0,0 +1,45 @@
1
+ extensions:
2
+ health_check:
3
+ endpoint: 127.0.0.1:13133
4
+
5
+ receivers:
6
+ prometheus:
7
+ config:
8
+ scrape_configs:
9
+ - job_name: otel-collector-metrics
10
+ scrape_interval: 10s
11
+ static_configs:
12
+ - targets: ["127.0.0.1:8888"]
13
+
14
+ otlp:
15
+ protocols:
16
+ grpc:
17
+ endpoint: 0.0.0.0:4317
18
+ http:
19
+ endpoint: 0.0.0.0:4318
20
+
21
+ exporters:
22
+ prometheusremotewrite:
23
+ endpoint: http://127.0.0.1:9090/api/v1/write
24
+ tls:
25
+ insecure: true
26
+
27
+ otlp:
28
+ endpoint: 127.0.0.1:14317
29
+ tls:
30
+ insecure: true
31
+
32
+ debug:
33
+ verbosity: detailed
34
+
35
+ service:
36
+ pipelines:
37
+ metrics:
38
+ receivers: [prometheus]
39
+ exporters: [prometheusremotewrite]
40
+ traces:
41
+ receivers: [otlp]
42
+ exporters: [otlp]
43
+ logs:
44
+ receivers: [otlp]
45
+ exporters: [debug]
@@ -0,0 +1,11 @@
1
+ global:
2
+ scrape_interval: 15s
3
+ evaluation_interval: 15s
4
+
5
+ scrape_configs:
6
+ - job_name: "prometheus"
7
+ static_configs:
8
+ - targets: ["127.0.0.1:9090"]
9
+ - job_name: "tempo"
10
+ static_configs:
11
+ - targets: ["127.0.0.1:3200"]
@@ -0,0 +1,58 @@
1
+ stream_over_http_enabled: true
2
+ server:
3
+ http_listen_port: 3200
4
+ log_level: info
5
+
6
+ query_frontend:
7
+ search:
8
+ duration_slo: 5s
9
+ throughput_bytes_slo: 1.073741824e+09
10
+ metadata_slo:
11
+ duration_slo: 5s
12
+ throughput_bytes_slo: 1.073741824e+09
13
+ trace_by_id:
14
+ duration_slo: 5s
15
+
16
+ distributor:
17
+ max_attribute_bytes: 10485760
18
+ receivers:
19
+ otlp:
20
+ protocols:
21
+ grpc:
22
+ endpoint: 127.0.0.1:14317
23
+ http:
24
+ endpoint: 127.0.0.1:14318
25
+
26
+ ingester:
27
+ max_block_duration: 5m # cut the headblock when this much time passes. this is being set for demo purposes and should probably be left alone normally
28
+
29
+ compactor:
30
+ compaction:
31
+ block_retention: 1h # overall Tempo trace retention. set for demo purposes
32
+
33
+ metrics_generator:
34
+ registry:
35
+ external_labels:
36
+ source: tempo
37
+ cluster: docker-compose
38
+ storage:
39
+ path: /var/tempo/generator/wal
40
+ remote_write:
41
+ - url: http://127.0.0.1:9090/api/v1/write
42
+ send_exemplars: true
43
+ traces_storage:
44
+ path: /var/tempo/generator/traces
45
+
46
+ storage:
47
+ trace:
48
+ backend: local # backend configuration to use
49
+ wal:
50
+ path: /var/tempo/wal # where to store the wal locally
51
+ local:
52
+ path: /var/tempo/blocks
53
+
54
+ overrides:
55
+ defaults:
56
+ metrics_generator:
57
+ processors: [service-graphs, span-metrics, local-blocks] # enables metrics generator
58
+ generate_native_histograms: both
@@ -8,6 +8,9 @@ services:
8
8
  - '${MINIO_PORT}:${MINIO_PORT}' # MinIO API
9
9
  - '9001:9001' # MinIO Console
10
10
  - '${CASDOOR_PORT}:${CASDOOR_PORT}' # Casdoor
11
+ - '3000:3000' # Grafana
12
+ - '4318:4318' # otel-collector HTTP
13
+ - '4317:4317' # otel-collector gRPC
11
14
  command: tail -f /dev/null
12
15
  networks:
13
16
  - lobe-network
@@ -29,11 +32,52 @@ services:
29
32
  file: docker-compose/local/docker-compose.yml
30
33
  service: searxng
31
34
 
35
+ grafana:
36
+ profiles:
37
+ - otel
38
+ extends:
39
+ file: docker-compose/local/grafana/docker-compose.yml
40
+ service: grafana
41
+
42
+ tempo:
43
+ profiles:
44
+ - otel
45
+ extends:
46
+ file: docker-compose/local/grafana/docker-compose.yml
47
+ service: tempo
48
+
49
+ prometheus:
50
+ profiles:
51
+ - otel
52
+ extends:
53
+ file: docker-compose/local/grafana/docker-compose.yml
54
+ service: prometheus
55
+
56
+ otel-collector:
57
+ profiles:
58
+ - otel
59
+ extends:
60
+ file: docker-compose/local/grafana/docker-compose.yml
61
+ service: otel-collector
62
+
63
+ otel-tracing-test:
64
+ profiles:
65
+ - otel-test
66
+ extends:
67
+ file: docker-compose/local/grafana/docker-compose.yml
68
+ service: otel-tracing-test
69
+
32
70
  volumes:
33
71
  data:
34
72
  driver: local
35
73
  s3_data:
36
74
  driver: local
75
+ grafana_data:
76
+ driver: local
77
+ tempo_data:
78
+ driver: local
79
+ prometheus_data:
80
+ driver: local
37
81
 
38
82
  networks:
39
83
  lobe-network:
@@ -0,0 +1,71 @@
1
+ ---
2
+ title: Observability with Grafana, Prometheus, and Tempo
3
+ description: >-
4
+ Monitor and analyze your LobeChat instance using Grafana dashboards, Prometheus metrics, and Tempo traces. This guide covers setup, configuration for self-hosted deployments.
5
+ tags:
6
+ - Observability
7
+ - Grafana
8
+ - Prometheus
9
+ - Tempo
10
+ ---
11
+
12
+ # Observability with [Grafana](https://grafana.com/), [Prometheus](https://prometheus.io/), and [Tempo](https://grafana.com/docs/tempo/latest/)
13
+
14
+ LobeChat supports advanced observability for self-hosted deployments using open-source tools:
15
+
16
+ - **Grafana** for dashboards and visualization
17
+ - **Prometheus** for metrics collection
18
+ - **Tempo** for distributed tracing
19
+ - **otel-collector** ingesting other OpenTelemetry supported data
20
+
21
+ We provided Docker Compose (`docker-compose`) file presets to bootstrap the observability stack with advanced self-hosting features.
22
+ This guide will help you set up and use these tools to monitor your LobeChat instance.
23
+
24
+ ## Prerequisites
25
+
26
+ - `docker` CLI
27
+ - OrbStack (macOS), or Docker Desktop Windows
28
+ - `docker-compose` plugin enabled (check through `docker compose version`)
29
+
30
+ ## 1. Deploy
31
+
32
+ ```bash
33
+ curl -O https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/production/grafana/docker-compose.yml
34
+ curl -O https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/production/grafana/.env.example
35
+ mv .env.example .env
36
+ ```
37
+
38
+ 1. Update the password & secrets in the `.env` file as needed.
39
+ 2. Start the stack with the correct profile:
40
+
41
+ ```sh
42
+ docker compose up -d
43
+ ```
44
+
45
+ This will launch Grafana, Prometheus, Tempo, and the otel-collector alongside LobeChat with Casdoor, Minio, and other advanced services.
46
+
47
+ ## 2. Access Grafana Dashboards
48
+
49
+ - Open Grafana in your browser at [http://localhost:3000](http://localhost:3000) (or your server's IP).
50
+ - Default login (if required):
51
+ - **Username:** admin
52
+ - **Password:** (see your environment or Docker Compose file)
53
+
54
+ ## 3. Explore traces & metrics
55
+
56
+ Click on "Explore" in the left sidebar to access the query editor to run ad-hoc queries against your Prometheus and Tempo data sources.
57
+
58
+ ## 4. Troubleshooting
59
+
60
+ - Ensure all containers are running: `docker compose ps`
61
+ - Check logs for any service: `docker compose logs <service-name>`
62
+ - Verify Prometheus and Tempo are scraping and receiving data from LobeChat and otel-collector.
63
+
64
+ ## See Also
65
+
66
+ - [Langfuse Observability](https://lobehub.com/docs/self-hosting/advanced/observability/langfuse)
67
+ - [Self-Hosting Overview](https://lobehub.com/docs/self-hosting/start)
68
+
69
+ ---
70
+
71
+ For questions or feedback, open an issue on GitHub or join our community discussions.
@@ -0,0 +1,70 @@
1
+ ---
2
+ title: 使用 Grafana、Prometheus 和 Tempo 进行可观测性监控
3
+ description: >-
4
+ 使用 Grafana、Prometheus 指标和 Tempo 链路追踪,监控和分析你的 LobeChat 实例。本指南涵盖自托管部署的搭建、配置和示例仪表盘。
5
+ tags:
6
+ - 可观测性
7
+ - Grafana
8
+ - Prometheus
9
+ - Tempo
10
+ ---
11
+
12
+ # 使用 [Grafana](https://grafana.com/)、[Prometheus](https://prometheus.io/) 和 [Tempo](https://grafana.com/docs/tempo/latest/) 进行可观测性监控
13
+
14
+ LobeChat 支持通过开源工具实现自托管部署的高级可观测性:
15
+
16
+ - **Grafana**:仪表盘与可视化
17
+ - **Prometheus**:指标采集
18
+ - **Tempo**:分布式链路追踪
19
+ - **otel-collector**:采集 OpenTelemetry 支持的数据
20
+
21
+ 我们提供了 Docker Compose (`docker-compose`) 预设文件,帮助你一键启动包含高级可观测性功能的自托管栈。
22
+
23
+ ## 前置条件
24
+
25
+ - 已安装 `docker` 命令行工具
26
+ - OrbStack(macOS)或 Docker Desktop(Windows)
27
+ - 启用 `docker-compose` 插件(可通过 `docker compose version` 检查)
28
+
29
+ ## 1. 部署
30
+
31
+ ```bash
32
+ curl -O https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/production/grafana/docker-compose.yml
33
+ curl -O https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/production/grafana/.env.example
34
+ mv .env.example .env
35
+ ```
36
+
37
+ 1. 根据需要修改 `.env` 文件中的密码和密钥。
38
+ 2. 使用如下命令启动服务:
39
+
40
+ ```sh
41
+ docker compose up -d
42
+ ```
43
+
44
+ 这将会启动 Grafana、Prometheus、Tempo、otel-collector 以及 LobeChat、Casdoor、Minio 等高级服务。
45
+
46
+ ## 2. 访问 Grafana 仪表盘
47
+
48
+ - 在浏览器中打开 [http://localhost:3000](http://localhost:3000)(或你的服务器 IP)。
49
+ - 默认登录信息(如需):
50
+ - **用户名:** admin
51
+ - **密码:** 见你的环境变量或 Docker Compose 文件
52
+
53
+ ## 3. 探索链路追踪与指标
54
+
55
+ 点击左侧边栏的 “Explore” 进入查询编辑器,可对 Prometheus 和 Tempo 数据源进行即席查询。
56
+
57
+ ## 4. 故障排查
58
+
59
+ - 确认所有容器已运行:`docker compose ps`
60
+ - 查看服务日志:`docker compose logs <服务名>`
61
+ - 检查 Prometheus 和 Tempo 是否正常采集 LobeChat 及 otel-collector 的数据。
62
+
63
+ ## 相关链接
64
+
65
+ - [Langfuse 可观测性](https://lobehub.com/zh/docs/self-hosting/advanced/observability/langfuse)
66
+ - [自托管总览](https://lobehub.com/zh/docs/self-hosting/start)
67
+
68
+ ---
69
+
70
+ 如有问题或建议,欢迎在 GitHub 提 Issue 或加入社区讨论。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.127.2",
3
+ "version": "1.127.3",
4
4
  "description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -4,7 +4,7 @@
4
4
  "private": true,
5
5
  "exports": {
6
6
  ".": "./src/index.ts",
7
- "./vertexai": "./src/vertexai/index.ts"
7
+ "./vertexai": "./src/providers/vertexai/index.ts"
8
8
  },
9
9
  "scripts": {
10
10
  "test": "vitest",