@lobehub/chat 1.47.23 → 1.48.1

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 (92) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/changelog/v1.json +18 -0
  3. package/locales/ar/chat.json +4 -0
  4. package/locales/ar/components.json +1 -0
  5. package/locales/ar/models.json +6 -0
  6. package/locales/bg-BG/chat.json +4 -0
  7. package/locales/bg-BG/components.json +1 -0
  8. package/locales/bg-BG/models.json +6 -0
  9. package/locales/de-DE/chat.json +4 -0
  10. package/locales/de-DE/components.json +1 -0
  11. package/locales/de-DE/models.json +6 -0
  12. package/locales/en-US/chat.json +4 -0
  13. package/locales/en-US/components.json +1 -0
  14. package/locales/en-US/models.json +6 -0
  15. package/locales/es-ES/chat.json +4 -0
  16. package/locales/es-ES/components.json +1 -0
  17. package/locales/es-ES/models.json +6 -0
  18. package/locales/fa-IR/chat.json +4 -0
  19. package/locales/fa-IR/components.json +1 -0
  20. package/locales/fa-IR/models.json +6 -0
  21. package/locales/fr-FR/chat.json +4 -0
  22. package/locales/fr-FR/components.json +1 -0
  23. package/locales/fr-FR/models.json +6 -0
  24. package/locales/it-IT/chat.json +4 -0
  25. package/locales/it-IT/components.json +1 -0
  26. package/locales/it-IT/models.json +6 -0
  27. package/locales/ja-JP/chat.json +4 -0
  28. package/locales/ja-JP/components.json +1 -0
  29. package/locales/ja-JP/models.json +6 -0
  30. package/locales/ko-KR/chat.json +4 -0
  31. package/locales/ko-KR/components.json +1 -0
  32. package/locales/ko-KR/models.json +6 -0
  33. package/locales/nl-NL/chat.json +4 -0
  34. package/locales/nl-NL/components.json +1 -0
  35. package/locales/nl-NL/models.json +6 -0
  36. package/locales/pl-PL/chat.json +4 -0
  37. package/locales/pl-PL/components.json +1 -0
  38. package/locales/pl-PL/models.json +6 -0
  39. package/locales/pt-BR/chat.json +4 -0
  40. package/locales/pt-BR/components.json +1 -0
  41. package/locales/pt-BR/models.json +6 -0
  42. package/locales/ru-RU/chat.json +4 -0
  43. package/locales/ru-RU/components.json +1 -0
  44. package/locales/ru-RU/models.json +6 -0
  45. package/locales/tr-TR/chat.json +4 -0
  46. package/locales/tr-TR/components.json +1 -0
  47. package/locales/tr-TR/models.json +6 -0
  48. package/locales/vi-VN/chat.json +4 -0
  49. package/locales/vi-VN/components.json +1 -0
  50. package/locales/vi-VN/models.json +6 -0
  51. package/locales/zh-CN/chat.json +4 -0
  52. package/locales/zh-CN/components.json +1 -0
  53. package/locales/zh-CN/modelProvider.json +2 -2
  54. package/locales/zh-CN/models.json +7 -1
  55. package/locales/zh-TW/chat.json +4 -0
  56. package/locales/zh-TW/components.json +1 -0
  57. package/locales/zh-TW/models.json +6 -0
  58. package/package.json +1 -1
  59. package/src/components/ModelSelect/index.tsx +16 -1
  60. package/src/config/aiModels/deepseek.ts +3 -0
  61. package/src/config/modelProviders/ollama.ts +1 -1
  62. package/src/database/client/migrations.json +13 -2
  63. package/src/database/migrations/0014_add_message_reasoning.sql +1 -0
  64. package/src/database/migrations/meta/0014_snapshot.json +3961 -0
  65. package/src/database/migrations/meta/_journal.json +7 -0
  66. package/src/database/schemas/message.ts +2 -3
  67. package/src/database/server/models/__tests__/message.test.ts +5 -4
  68. package/src/database/server/models/message.ts +35 -13
  69. package/src/database/server/models/topic.ts +3 -2
  70. package/src/features/Conversation/Messages/Assistant/Reasoning/index.tsx +123 -0
  71. package/src/features/Conversation/Messages/Assistant/index.tsx +8 -1
  72. package/src/features/Conversation/components/MarkdownElements/LobeThinking/index.ts +2 -2
  73. package/src/libs/agent-runtime/google/index.ts +7 -5
  74. package/src/libs/agent-runtime/utils/streams/openai.test.ts +203 -0
  75. package/src/libs/agent-runtime/utils/streams/openai.ts +8 -1
  76. package/src/libs/agent-runtime/utils/streams/protocol.ts +1 -1
  77. package/src/locales/default/chat.ts +4 -0
  78. package/src/locales/default/components.ts +1 -0
  79. package/src/server/routers/lambda/message.ts +4 -2
  80. package/src/services/message/client.test.ts +1 -1
  81. package/src/services/message/type.ts +1 -1
  82. package/src/store/chat/selectors.ts +1 -0
  83. package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +60 -14
  84. package/src/store/chat/slices/aiChat/initialState.ts +5 -0
  85. package/src/store/chat/slices/aiChat/selectors.ts +9 -0
  86. package/src/store/chat/slices/message/action.ts +4 -1
  87. package/src/types/aiModel.ts +5 -14
  88. package/src/types/message/base.ts +59 -0
  89. package/src/types/message/chat.ts +136 -0
  90. package/src/types/message/index.ts +2 -135
  91. package/src/utils/fetch/__tests__/fetchSSE.test.ts +34 -0
  92. package/src/utils/fetch/fetchSSE.ts +38 -3
@@ -1328,6 +1328,9 @@
1328
1328
  "step-1.5v-mini": {
1329
1329
  "description": "Este modelo possui uma poderosa capacidade de compreensão de vídeo."
1330
1330
  },
1331
+ "step-1o-vision-32k": {
1332
+ "description": "Este modelo possui uma poderosa capacidade de compreensão de imagens. Em comparação com a série de modelos step-1v, apresenta um desempenho visual superior."
1333
+ },
1331
1334
  "step-1v-32k": {
1332
1335
  "description": "Suporta entradas visuais, aprimorando a experiência de interação multimodal."
1333
1336
  },
@@ -1337,6 +1340,9 @@
1337
1340
  "step-2-16k": {
1338
1341
  "description": "Suporta interações de contexto em larga escala, adequado para cenários de diálogo complexos."
1339
1342
  },
1343
+ "step-2-mini": {
1344
+ "description": "Um modelo de grande escala de alta velocidade baseado na nova arquitetura de atenção auto-desenvolvida MFA, alcançando resultados semelhantes ao step1 com um custo muito baixo, enquanto mantém uma maior taxa de transferência e um tempo de resposta mais rápido. Capaz de lidar com tarefas gerais, possui especialização em habilidades de codificação."
1345
+ },
1340
1346
  "taichu2_mm": {
1341
1347
  "description": "Integra capacidades de compreensão de imagem, transferência de conhecimento e atribuição lógica, destacando-se no campo de perguntas e respostas baseadas em texto e imagem."
1342
1348
  },
@@ -82,6 +82,10 @@
82
82
  }
83
83
  }
84
84
  },
85
+ "reasoning": {
86
+ "thinking": "Глубокое размышление",
87
+ "thought": "Глубоко размышлял (время: {{duration}} секунд)"
88
+ },
85
89
  "regenerate": "Сгенерировать заново",
86
90
  "roleAndArchive": "Роль и архив",
87
91
  "searchAgentPlaceholder": "Поиск помощника...",
@@ -76,6 +76,7 @@
76
76
  "custom": "Пользовательская модель по умолчанию поддерживает как вызов функций, так и распознавание изображений. Пожалуйста, проверьте доступность указанных возможностей в вашем случае",
77
77
  "file": "Эта модель поддерживает загрузку и распознавание файлов",
78
78
  "functionCall": "Эта модель поддерживает вызов функций",
79
+ "reasoning": "Эта модель поддерживает глубокое мышление",
79
80
  "tokens": "Эта модель поддерживает до {{tokens}} токенов в одной сессии",
80
81
  "vision": "Эта модель поддерживает распознавание изображений"
81
82
  },
@@ -1328,6 +1328,9 @@
1328
1328
  "step-1.5v-mini": {
1329
1329
  "description": "Эта модель обладает мощными возможностями понимания видео."
1330
1330
  },
1331
+ "step-1o-vision-32k": {
1332
+ "description": "Эта модель обладает мощными способностями к пониманию изображений. По сравнению с серией моделей step-1v, она имеет более высокую визуальную производительность."
1333
+ },
1331
1334
  "step-1v-32k": {
1332
1335
  "description": "Поддерживает визуальный ввод, улучшая мультимодальный опыт взаимодействия."
1333
1336
  },
@@ -1337,6 +1340,9 @@
1337
1340
  "step-2-16k": {
1338
1341
  "description": "Поддерживает масштабные взаимодействия контекста, подходит для сложных диалоговых сценариев."
1339
1342
  },
1343
+ "step-2-mini": {
1344
+ "description": "Супербыстрая большая модель на основе новой самодельной архитектуры внимания MFA, достигающая аналогичных результатов, как step1, при очень низких затратах, одновременно обеспечивая более высокую пропускную способность и более быстрое время отклика. Способна обрабатывать общие задачи и обладает особыми навыками в кодировании."
1345
+ },
1340
1346
  "taichu2_mm": {
1341
1347
  "description": "Объединяет способности понимания изображений, переноса знаний, логической атрибуции и демонстрирует выдающиеся результаты в области вопросов и ответов на основе текста и изображений."
1342
1348
  },
@@ -82,6 +82,10 @@
82
82
  }
83
83
  }
84
84
  },
85
+ "reasoning": {
86
+ "thinking": "Derin düşünme aşamasında",
87
+ "thought": "Derinlemesine düşündü (geçen süre {{duration}} saniye)"
88
+ },
85
89
  "regenerate": "Tekrarla",
86
90
  "roleAndArchive": "Rol ve Arşiv",
87
91
  "searchAgentPlaceholder": "Arama Asistanı...",
@@ -76,6 +76,7 @@
76
76
  "custom": "Özel model, varsayılan olarak hem fonksiyon çağrısını hem de görüntü tanımayı destekler, yukarıdaki yeteneklerin kullanılabilirliğini doğrulamak için lütfen gerçek durumu kontrol edin",
77
77
  "file": "Bu model dosya yükleme ve tanımayı destekler",
78
78
  "functionCall": "Bu model fonksiyon çağrısını destekler",
79
+ "reasoning": "Bu model derin düşünmeyi destekler",
79
80
  "tokens": "Bu model tek bir oturumda en fazla {{tokens}} Token destekler",
80
81
  "vision": "Bu model görüntü tanımıyı destekler"
81
82
  },
@@ -1328,6 +1328,9 @@
1328
1328
  "step-1.5v-mini": {
1329
1329
  "description": "Bu model, güçlü bir video anlama yeteneğine sahiptir."
1330
1330
  },
1331
+ "step-1o-vision-32k": {
1332
+ "description": "Bu model, güçlü bir görüntü anlama yeteneğine sahiptir. Step-1v serisi modellere kıyasla daha güçlü bir görsel performansa sahiptir."
1333
+ },
1331
1334
  "step-1v-32k": {
1332
1335
  "description": "Görsel girdi desteği sunar, çok modlu etkileşim deneyimini artırır."
1333
1336
  },
@@ -1337,6 +1340,9 @@
1337
1340
  "step-2-16k": {
1338
1341
  "description": "Büyük ölçekli bağlam etkileşimlerini destekler, karmaşık diyalog senaryoları için uygundur."
1339
1342
  },
1343
+ "step-2-mini": {
1344
+ "description": "Yeni nesil kendi geliştirdiğimiz MFA Attention mimarisine dayanan hızlı büyük model, çok düşük maliyetle step1 ile benzer sonuçlar elde ederken, daha yüksek bir throughput ve daha hızlı yanıt süresi sağlıyor. Genel görevleri işleyebilme yeteneğine sahip olup, kodlama yeteneklerinde uzmanlık gösteriyor."
1345
+ },
1340
1346
  "taichu2_mm": {
1341
1347
  "description": "Görüntü anlama, bilgi transferi, mantıksal atıf gibi yetenekleri birleştirerek, metin ve görüntü ile soru-cevap alanında öne çıkmaktadır."
1342
1348
  },
@@ -82,6 +82,10 @@
82
82
  }
83
83
  }
84
84
  },
85
+ "reasoning": {
86
+ "thinking": "Đang suy nghĩ sâu sắc",
87
+ "thought": "Đã suy nghĩ sâu sắc (thời gian: {{duration}} giây)"
88
+ },
85
89
  "regenerate": "Tạo lại",
86
90
  "roleAndArchive": "Vai trò và lưu trữ",
87
91
  "searchAgentPlaceholder": "Trợ lý tìm kiếm...",
@@ -76,6 +76,7 @@
76
76
  "custom": "Mô hình tùy chỉnh, mặc định hỗ trợ cả cuộc gọi hàm và nhận diện hình ảnh, vui lòng xác minh khả năng sử dụng của chúng theo tình hình cụ thể",
77
77
  "file": "Mô hình này hỗ trợ tải lên và nhận diện tệp",
78
78
  "functionCall": "Mô hình này hỗ trợ cuộc gọi hàm (Function Call)",
79
+ "reasoning": "Mô hình này hỗ trợ tư duy sâu sắc",
79
80
  "tokens": "Mỗi phiên của mô hình này hỗ trợ tối đa {{tokens}} Tokens",
80
81
  "vision": "Mô hình này hỗ trợ nhận diện hình ảnh"
81
82
  },
@@ -1328,6 +1328,9 @@
1328
1328
  "step-1.5v-mini": {
1329
1329
  "description": "Mô hình này có khả năng hiểu video mạnh mẽ."
1330
1330
  },
1331
+ "step-1o-vision-32k": {
1332
+ "description": "Mô hình này có khả năng hiểu hình ảnh mạnh mẽ. So với các mô hình trong series step-1v, nó có hiệu suất thị giác vượt trội hơn."
1333
+ },
1331
1334
  "step-1v-32k": {
1332
1335
  "description": "Hỗ trợ đầu vào hình ảnh, tăng cường trải nghiệm tương tác đa mô hình."
1333
1336
  },
@@ -1337,6 +1340,9 @@
1337
1340
  "step-2-16k": {
1338
1341
  "description": "Hỗ trợ tương tác ngữ cảnh quy mô lớn, phù hợp cho các tình huống đối thoại phức tạp."
1339
1342
  },
1343
+ "step-2-mini": {
1344
+ "description": "Mô hình lớn siêu tốc dựa trên kiến trúc Attention tự nghiên cứu thế hệ mới MFA, đạt được hiệu quả tương tự như step1 với chi phí rất thấp, đồng thời duy trì thông lượng cao hơn và độ trễ phản hồi nhanh hơn. Có khả năng xử lý các nhiệm vụ chung, đặc biệt có năng lực trong lập trình."
1345
+ },
1340
1346
  "taichu2_mm": {
1341
1347
  "description": "Kết hợp khả năng hiểu hình ảnh, chuyển giao kiến thức, suy luận logic, nổi bật trong lĩnh vực hỏi đáp hình ảnh và văn bản."
1342
1348
  },
@@ -82,6 +82,10 @@
82
82
  }
83
83
  }
84
84
  },
85
+ "reasoning": {
86
+ "thinking": "深度思考中",
87
+ "thought": "已深度思考(用时 {{duration}} 秒)"
88
+ },
85
89
  "regenerate": "重新生成",
86
90
  "roleAndArchive": "角色与记录",
87
91
  "searchAgentPlaceholder": "搜索助手...",
@@ -76,6 +76,7 @@
76
76
  "custom": "自定义模型,默认设定同时支持函数调用与视觉识别,请根据实际情况验证上述能力的可用性",
77
77
  "file": "该模型支持上传文件读取与识别",
78
78
  "functionCall": "该模型支持函数调用(Function Call)",
79
+ "reasoning": "该模型支持深度思考",
79
80
  "tokens": "该模型单个会话最多支持 {{tokens}} Tokens",
80
81
  "vision": "该模型支持视觉识别"
81
82
  },
@@ -198,9 +198,9 @@
198
198
  },
199
199
  "baseURL": {
200
200
  "desc": "必须包含 http(s)://",
201
+ "invalid": "请输入合法的 URL",
201
202
  "placeholder": "https://your-proxy-url.com/v1",
202
- "title": "API 代理地址",
203
- "invalid": "请输入合法的 URL"
203
+ "title": "API 代理地址"
204
204
  },
205
205
  "checker": {
206
206
  "button": "检查",
@@ -1328,6 +1328,9 @@
1328
1328
  "step-1.5v-mini": {
1329
1329
  "description": "该模型拥有强大的视频理解能力。"
1330
1330
  },
1331
+ "step-1o-vision-32k": {
1332
+ "description": "该模型拥有强大的图像理解能力。相比于 step-1v 系列模型,拥有更强的视觉性能。"
1333
+ },
1331
1334
  "step-1v-32k": {
1332
1335
  "description": "支持视觉输入,增强多模态交互体验。"
1333
1336
  },
@@ -1335,7 +1338,10 @@
1335
1338
  "description": "小型视觉模型,适合基本的图文任务。"
1336
1339
  },
1337
1340
  "step-2-16k": {
1338
- "description": "支持大规模上下文交互,适合复杂对话场景。"
1341
+ "description": "step-2模型的实验版本,包含最新的特性,滚动更新中。不推荐在正式生产环境使用。"
1342
+ },
1343
+ "step-2-mini": {
1344
+ "description": "基于新一代自研Attention架构MFA的极速大模型,用极低成本达到和step1类似的效果,同时保持了更高的吞吐和更快响应时延。能够处理通用任务,在代码能力上具备特长。"
1339
1345
  },
1340
1346
  "taichu2_mm": {
1341
1347
  "description": "融合了图像理解、知识迁移、逻辑归因等能力,在图文问答领域表现突出"
@@ -82,6 +82,10 @@
82
82
  }
83
83
  }
84
84
  },
85
+ "reasoning": {
86
+ "thinking": "深入思考中",
87
+ "thought": "已深度思考(用時 {{duration}} 秒)"
88
+ },
85
89
  "regenerate": "重新生成",
86
90
  "roleAndArchive": "角色與記錄",
87
91
  "searchAgentPlaceholder": "搜尋助手...",
@@ -76,6 +76,7 @@
76
76
  "custom": "自訂模型,預設支援函式呼叫與視覺辨識,請根據實際情況驗證上述能力的可用性",
77
77
  "file": "該模型支援上傳檔案讀取與辨識",
78
78
  "functionCall": "該模型支援函式呼叫(Function Call)",
79
+ "reasoning": "該模型支持深度思考",
79
80
  "tokens": "該模型單一會話最多支援 {{tokens}} Tokens",
80
81
  "vision": "該模型支援視覺辨識"
81
82
  },
@@ -1328,6 +1328,9 @@
1328
1328
  "step-1.5v-mini": {
1329
1329
  "description": "該模型擁有強大的視頻理解能力。"
1330
1330
  },
1331
+ "step-1o-vision-32k": {
1332
+ "description": "該模型擁有強大的圖像理解能力。相比於 step-1v 系列模型,擁有更強的視覺性能。"
1333
+ },
1331
1334
  "step-1v-32k": {
1332
1335
  "description": "支持視覺輸入,增強多模態交互體驗。"
1333
1336
  },
@@ -1337,6 +1340,9 @@
1337
1340
  "step-2-16k": {
1338
1341
  "description": "支持大規模上下文交互,適合複雜對話場景。"
1339
1342
  },
1343
+ "step-2-mini": {
1344
+ "description": "基於新一代自研Attention架構MFA的極速大模型,用極低成本達到和step1類似的效果,同時保持了更高的吞吐和更快響應時延。能夠處理通用任務,在程式碼能力上具備特長。"
1345
+ },
1340
1346
  "taichu2_mm": {
1341
1347
  "description": "融合了圖像理解、知識遷移、邏輯歸因等能力,在圖文問答領域表現突出"
1342
1348
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.47.23",
3
+ "version": "1.48.1",
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",
@@ -2,7 +2,7 @@ import { IconAvatarProps, ModelIcon, ProviderIcon } from '@lobehub/icons';
2
2
  import { Avatar, Icon, Tooltip } from '@lobehub/ui';
3
3
  import { Typography } from 'antd';
4
4
  import { createStyles } from 'antd-style';
5
- import { Infinity, LucideEye, LucidePaperclip, ToyBrick } from 'lucide-react';
5
+ import { Infinity, AtomIcon, LucideEye, LucidePaperclip, ToyBrick } from 'lucide-react';
6
6
  import numeral from 'numeral';
7
7
  import { rgba } from 'polished';
8
8
  import { FC, memo } from 'react';
@@ -45,6 +45,10 @@ const useStyles = createStyles(({ css, token }) => ({
45
45
  color: ${token.green};
46
46
  background: ${token.green1};
47
47
  `,
48
+ tagPurple: css`
49
+ color: ${token.purple};
50
+ background: ${token.purple1};
51
+ `,
48
52
  token: css`
49
53
  width: 36px;
50
54
  height: 20px;
@@ -107,6 +111,17 @@ export const ModelInfoTags = memo<ModelInfoTagsProps>(
107
111
  </div>
108
112
  </Tooltip>
109
113
  )}
114
+ {model.reasoning && (
115
+ <Tooltip
116
+ placement={placement}
117
+ styles={{ root: { pointerEvents: 'none' } }}
118
+ title={t('ModelSelect.featureTag.reasoning')}
119
+ >
120
+ <div className={cx(styles.tag, styles.tagPurple)} style={{ cursor: 'pointer' }}>
121
+ <Icon icon={AtomIcon} />
122
+ </div>
123
+ </Tooltip>
124
+ )}
110
125
  {typeof model.contextWindowTokens === 'number' && (
111
126
  <Tooltip
112
127
  placement={placement}
@@ -21,6 +21,9 @@ const deepseekChatModels: AIChatModelCard[] = [
21
21
  type: 'chat',
22
22
  },
23
23
  {
24
+ abilities: {
25
+ reasoning: true,
26
+ },
24
27
  contextWindowTokens: 65_536,
25
28
  description:
26
29
  'DeepSeek 推出的推理模型。在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。',
@@ -334,7 +334,7 @@ const Ollama: ModelProviderCard = {
334
334
  modelsUrl: 'https://ollama.com/library',
335
335
  name: 'Ollama',
336
336
  settings: {
337
- disableBrowserRequest: true,
337
+ defaultShowBrowserRequest: true,
338
338
  sdkType: 'ollama',
339
339
  showApiKey: false,
340
340
  showModelFetcher: true,
@@ -223,7 +223,10 @@
223
223
  "hash": "9646161fa041354714f823d726af27247bcd6e60fa3be5698c0d69f337a5700b"
224
224
  },
225
225
  {
226
- "sql": ["DROP TABLE \"user_budgets\";", "\nDROP TABLE \"user_subscriptions\";"],
226
+ "sql": [
227
+ "DROP TABLE \"user_budgets\";",
228
+ "\nDROP TABLE \"user_subscriptions\";"
229
+ ],
227
230
  "bps": true,
228
231
  "folderMillis": 1729699958471,
229
232
  "hash": "7dad43a2a25d1aec82124a4e53f8d82f8505c3073f23606c1dc5d2a4598eacf9"
@@ -293,5 +296,13 @@
293
296
  "bps": true,
294
297
  "folderMillis": 1735834653361,
295
298
  "hash": "845a692ceabbfc3caf252a97d3e19a213bc0c433df2689900135f9cfded2cf49"
299
+ },
300
+ {
301
+ "sql": [
302
+ "ALTER TABLE \"messages\" ADD COLUMN \"reasoning\" jsonb;"
303
+ ],
304
+ "bps": true,
305
+ "folderMillis": 1737609172353,
306
+ "hash": "2cb36ae4fcdd7b7064767e04bfbb36ae34518ff4bb1b39006f2dd394d1893868"
296
307
  }
297
- ]
308
+ ]
@@ -0,0 +1 @@
1
+ ALTER TABLE "messages" ADD COLUMN "reasoning" jsonb;