Skip to content

Commit f92da8e

Browse files
authored
feat: support streaming rendering of Mermaid charts (#64)
1 parent d17c020 commit f92da8e

18 files changed

+1508
-83
lines changed

README.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,17 @@ across Android, iOS, and macOS platforms.
1616
![](assets/promo.avif)
1717

1818
### What's New 🔥
19-
19+
- 🚀 Support streaming rendering of Mermaid charts (From v2.6.0).
20+
<div style="display: flex; flex-direction: 'row'; background-color: #888888;">
21+
<img src="assets/animations/mermaid_en.avif" width=48%>
22+
<img src="assets/animations/mermaid_save_en.avif" width=48%>
23+
</div>
2024
- 🚀 Support using Bedrock API Key for Amazon Bedrock models (From v2.5.0).
2125
- 🚀 Support virtual try-on, automatically recognize clothes, pants, shoes and try them on (From v2.5.0).
2226
- 🚀 Support shortcuts for macOS (From v2.5.0).
2327
- Use `Shift + Enter`, `Control + Enter` or `Option + Enter` to add a line break.
2428
- Use `⌘ + V` to add images (Screenshot), videos, or documents from your clipboard.
2529
- Use `⌘ + N` to opening multiple Mac windows for parallel operations.
26-
- Support adds multiple OpenAI Compatible model providers. You can now
27-
use [Easy Model Deployer](https://github.com/aws-samples/easy-model-deployer), OpenRouter, or any OpenAI-compatible
28-
model provider. (From v2.5.0).
29-
- Supports dark mode on Android, iOS, and Mac (From v2.4.0).
30-
- Support Speech to Speech By Amazon Nova Sonic on Apple Platform. (From v2.3.0).
3130

3231
## 📱 Quick Download
3332

@@ -207,6 +206,10 @@ Congratulations 🎉 Your SwiftChat App is ready to use!
207206
- `GPT-4.1`
208207
- `GPT-4.1 mini`
209208
- `GPT-4.1 nano`
209+
- `GPT-5`
210+
- `GPT-5 chat`
211+
- `GPT-5 mini`
212+
- `GPT-5 nano`
210213

211214
Additionally, if you have deployed and configured the [SwiftChat Server](#getting-started-with-amazon-bedrock), you
212215
can enable the **Use Proxy** option to forward your requests.
@@ -232,7 +235,7 @@ can enable the **Use Proxy** option to forward your requests.
232235
## Key Features
233236

234237
- Real-time streaming chat with AI
235-
- Rich Markdown Support: Tables, Code Blocks, LaTeX and More
238+
- Rich Markdown Support: Tables, Code Blocks, LaTeX, Mermaid Chart and More
236239
- AI image generation with progress
237240
- Multimodal support (images, videos & documents)
238241
- Conversation history list view and management

README_CN.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@ SwiftChat 是一款快速响应的 AI 聊天应用,采用 [React Native](https
1616

1717
### 新功能 🔥
1818

19+
- 🚀 支持流式渲染 Mermaid 图表(自 v2.6.0 起)。
20+
<div style="display: flex; flex-direction: 'row'; background-color: #888888;">
21+
<img src="assets/animations/mermaid.avif" width=48%>
22+
<img src="assets/animations/mermaid_save.avif" width=48%>
23+
</div>
1924
- 🚀 支持使用 Bedrock API Key 连接 Amazon Bedrock 模型(自 v2.5.0 起)。
2025
- 🚀 支持虚拟试衣功能,自动识别衣服、裤子、鞋子并试穿(自 v2.5.0 起)。
2126
- 🚀 支持 macOS 快捷键操作(自 v2.5.0 起)。
2227
- 使用 `Shift + Enter``Control + Enter``Option + Enter` 添加换行。
2328
- 使用 `⌘ + V` 从剪贴板添加图片(截图)、视频或文档。
2429
- 使用 `⌘ + N` 打开多个 Mac 窗口进行并行操作。
25-
- 支持添加多个 OpenAI Compatible
26-
模型提供商。您现在可以使用 [Easy Model Deployer](https://github.com/aws-samples/easy-model-deployer)、OpenRouter 或任何
27-
OpenAI 兼容的模型提供商(自 v2.5.0 起)。
28-
- 支持 Android、iOS 和 Mac 上的暗黑模式(自 v2.4.0 起)。
29-
- 在 Apple 平台上支持 Amazon Nova Sonic 语音对语音功能(自 v2.3.0 起)。
3030

3131
## 📱 快速下载
3232

@@ -195,6 +195,10 @@ SwiftChat 是一款快速响应的 AI 聊天应用,采用 [React Native](https
195195
- `GPT-4.1`
196196
- `GPT-4.1 mini`
197197
- `GPT-4.1 nano`
198+
- `GPT-5`
199+
- `GPT-5 chat`
200+
- `GPT-5 mini`
201+
- `GPT-5 nano`
198202

199203
此外,如果您已部署并配置了 [SwiftChat 服务器](#amazon-bedrock-入门指南),可以启用 **Use Proxy** 选项来转发您的请求。
200204

@@ -218,7 +222,7 @@ SwiftChat 是一款快速响应的 AI 聊天应用,采用 [React Native](https
218222
## 主要功能
219223

220224
- 与 AI 进行实时流式聊天
221-
- 丰富的 Markdown 支持:表格、代码块、LaTeX
225+
- 丰富的 Markdown 支持:表格、代码块、LaTeX, Mermaid图标等
222226
- 带进度显示的 AI 图像生成
223227
- 多模态支持(图像、视频和文档)
224228
- 对话历史列表查看和管理

assets/animations/mermaid.avif

272 KB
Binary file not shown.

assets/animations/mermaid_en.avif

366 KB
Binary file not shown.
267 KB
Binary file not shown.
217 KB
Binary file not shown.

react-native/ios/Podfile.lock

Lines changed: 83 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ PODS:
77
- hermes-engine (0.74.1):
88
- hermes-engine/Pre-built (= 0.74.1)
99
- hermes-engine/Pre-built (0.74.1)
10-
- MMKV (1.3.9):
11-
- MMKVCore (~> 1.3.9)
12-
- MMKVCore (1.3.9)
10+
- MMKV (2.2.3):
11+
- MMKVCore (~> 2.2.3)
12+
- MMKVCore (2.2.3)
1313
- RCT-Folly (2024.01.01.00):
1414
- boost
1515
- DoubleConversion
@@ -1027,6 +1027,27 @@ PODS:
10271027
- Yoga
10281028
- react-native-safe-area-context (4.10.8):
10291029
- React-Core
1030+
- react-native-webview (13.16.0):
1031+
- DoubleConversion
1032+
- glog
1033+
- hermes-engine
1034+
- RCT-Folly (= 2024.01.01.00)
1035+
- RCTRequired
1036+
- RCTTypeSafety
1037+
- React-Codegen
1038+
- React-Core
1039+
- React-debug
1040+
- React-Fabric
1041+
- React-featureflags
1042+
- React-graphics
1043+
- React-ImageManager
1044+
- React-NativeModulesApple
1045+
- React-RCTFabric
1046+
- React-rendererdebug
1047+
- React-utils
1048+
- ReactCommon/turbomodule/bridging
1049+
- ReactCommon/turbomodule/core
1050+
- Yoga
10301051
- React-nativeconfig (0.74.1)
10311052
- React-NativeModulesApple (0.74.1):
10321053
- glog
@@ -1374,6 +1395,7 @@ DEPENDENCIES:
13741395
- react-native-image-picker (from `../node_modules/react-native-image-picker`)
13751396
- react-native-mmkv (from `../node_modules/react-native-mmkv`)
13761397
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
1398+
- react-native-webview (from `../node_modules/react-native-webview`)
13771399
- React-nativeconfig (from `../node_modules/react-native/ReactCommon`)
13781400
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
13791401
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
@@ -1488,6 +1510,8 @@ EXTERNAL SOURCES:
14881510
:path: "../node_modules/react-native-mmkv"
14891511
react-native-safe-area-context:
14901512
:path: "../node_modules/react-native-safe-area-context"
1513+
react-native-webview:
1514+
:path: "../node_modules/react-native-webview"
14911515
React-nativeconfig:
14921516
:path: "../node_modules/react-native/ReactCommon"
14931517
React-NativeModulesApple:
@@ -1562,73 +1586,74 @@ SPEC CHECKSUMS:
15621586
fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120
15631587
glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
15641588
hermes-engine: 16b8530de1b383cdada1476cf52d1b52f0692cbc
1565-
MMKV: 817ba1eea17421547e01e087285606eb270a8dcb
1566-
MMKVCore: af055b00e27d88cd92fad301c5fecd1ff9b26dd9
1567-
RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47
1589+
MMKV: 941e8774da0e6fdf12c6b3fcc833ca687ae5a42d
1590+
MMKVCore: 6d5cc1bacce539f4c974985dfe646fb65a5d27d2
1591+
RCT-Folly: 5dc73daec3476616d19e8a53f0156176f7b55461
15681592
RCTDeprecation: efb313d8126259e9294dc4ee0002f44a6f676aba
15691593
RCTRequired: f49ea29cece52aee20db633ae7edc4b271435562
15701594
RCTTypeSafety: a11979ff0570d230d74de9f604f7d19692157bc4
15711595
React: 88794fad7f460349dbc9df8a274d95f37a009f5d
15721596
React-callinvoker: 7a7023e34a55c89ea2aa62486bb3c1164ab0be0c
1573-
React-Codegen: af31a9323ce23988c255c9afd0ae9415ff894939
1574-
React-Core: 60075333bc22b5a793d3f62e207368b79bff2e64
1575-
React-CoreModules: 147c314d6b3b1e069c9ad64cbbbeba604854ff86
1576-
React-cxxreact: 5de27fd8bff4764acb2eac3ee66001e0e2b910e7
1597+
React-Codegen: 118828b0731a9ecf9021270b788f958f9ccb2e19
1598+
React-Core: 74cc07109071b230de904d394c2bf15b9f886bff
1599+
React-CoreModules: 8beb4863375aafeac52c49a3962b81d137577585
1600+
React-cxxreact: d0b0d575214ba236dff569e14dd4411ac82b3566
15771601
React-debug: 6397f0baf751b40511d01e984b01467d7e6d8127
1578-
React-Fabric: 6fa475e16e0a37b38d462cec32b70fd5cf886305
1579-
React-FabricImage: 7e09b3704e3fa084b4d44b5b5ef6e2e3d3334ec0
1602+
React-Fabric: 37f29709a9caefd2a9fece6f695bc88a0af77f40
1603+
React-FabricImage: 9c3f6125b2f5908a2e7d0947cfb74022c1a0b294
15801604
React-featureflags: 2eb79dd9df4095bff519379f2a4c915069e330bb
1581-
React-graphics: 82a482a3aa5d9659b74cdf2c8b57faf67eaa10fb
1582-
React-hermes: d93936b02de2fd7e67c11e92c16d4278a14d0134
1583-
React-ImageManager: ebb3c4812e2c5acba5a89728c2d77729471329ad
1584-
React-jserrorhandler: a08e0adcf1612900dde82b8bf8e93e7d2ad953b3
1585-
React-jsi: f46d09ee5079a4f3b637d30d0e59b8ea6470632c
1586-
React-jsiexecutor: e73579560957aa3ca9dc02ab90e163454279d48c
1587-
React-jsinspector: e8ba20dde269c7c1d45784b858fa1cf4383f0bbb
1588-
React-jsitracing: 233d1a798fe0ff33b8e630b8f00f62c4a8115fbc
1589-
React-logger: 7e7403a2b14c97f847d90763af76b84b152b6fce
1590-
React-Mapbuffer: 11029dcd47c5c9e057a4092ab9c2a8d10a496a33
1591-
react-native-compressor: 2ae9013718fb351264fcfcdf232eccbbf3d280a2
1592-
react-native-document-picker: c4f197741c327270453aa9840932098e0064fd52
1593-
react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06
1594-
react-native-image-picker: fb0c2b3adc3eff6caa3cd6a507a34b9dcc9238dd
1595-
react-native-mmkv: 8c9a677e64a1ac89b0c6cf240feea528318b3074
1596-
react-native-safe-area-context: b7daa1a8df36095a032dff095a1ea8963cb48371
1605+
React-graphics: d0b9a0a174fb86bfed50bf4fb7c835183a546ab5
1606+
React-hermes: 06e8316213d56ab914afb9a829763123fcfacf22
1607+
React-ImageManager: 821a1182139cc986598868d0e9a00b3a021feddb
1608+
React-jserrorhandler: 1dd2a75b24dd9a318ee88fa6792e98524879af24
1609+
React-jsi: e381545475da5ea77777e7b5513031a434ced04b
1610+
React-jsiexecutor: ce91dde1a61efd519a5ff7ac0f64b61a14217072
1611+
React-jsinspector: 627ac44b1d090fc6a8039b1df723677bc7d86fe4
1612+
React-jsitracing: dd0e541a34027b3ab668ad94cf268482ad6f82fb
1613+
React-logger: 6070f362a1657bb53335eb1fc903d3f49fd79842
1614+
React-Mapbuffer: 2c95cbabc3d75a17747452381e998c35208ea3ee
1615+
react-native-compressor: 837b2774cb6e6a026862d90a783586ca317c29c3
1616+
react-native-document-picker: 451699da81cba8b40b596b8076019a4deb86f46e
1617+
react-native-get-random-values: d16467cf726c618e9c7a8c3c39c31faa2244bbba
1618+
react-native-image-picker: f1006d8935a3bc0baf8157faaa7857c76a77c8bb
1619+
react-native-mmkv: f8155c2efbe795cb0c7586d00ff484b1c9388af0
1620+
react-native-safe-area-context: b72c4611af2e86d80a59ac76279043d8f75f454c
1621+
react-native-webview: b836f1f162b87b5b8351611b5d5299f2b699360a
15971622
React-nativeconfig: b0073a590774e8b35192fead188a36d1dca23dec
1598-
React-NativeModulesApple: df46ff3e3de5b842b30b4ca8a6caae6d7c8ab09f
1623+
React-NativeModulesApple: 61b07ab32af3ea4910ba553932c0a779e853c082
15991624
React-perflogger: 3d31e0d1e8ad891e43a09ac70b7b17a79773003a
16001625
React-RCTActionSheet: c4a3a134f3434c9d7b0c1054f1a8cfed30c7a093
1601-
React-RCTAnimation: 0e5d15320eeece667fcceb6c785acf9a184e9da1
1602-
React-RCTAppDelegate: c4f6c0700b8950a8b18c2e004996eec1807d430a
1603-
React-RCTBlob: c46aaaee693d371a1c7cae2a8c8ee2aa7fbc1adb
1604-
React-RCTFabric: 0dbf28ce96c7f2843483e32a725a5b5793584ff3
1605-
React-RCTImage: a04dba5fcc823244f5822192c130ecf09623a57f
1606-
React-RCTLinking: 533bf13c745fcb2a0c14e0e49fd149586a7f0d14
1607-
React-RCTNetwork: a29e371e0d363d7b4c10ab907bc4d6ae610541e9
1608-
React-RCTSettings: 127813224780861d0d30ecda17a40d1dfebe7d73
1609-
React-RCTText: 8a823f245ecf82edb7569646e3c4d8041deb800a
1610-
React-RCTVibration: 46b5fae74e63f240f22f39de16ad6433da3b65d9
1611-
React-rendererdebug: 4653f8da6ab1d7b01af796bdf8ca47a927539e39
1626+
React-RCTAnimation: dab04683056694845eb7a9e283f4c63eec7fa633
1627+
React-RCTAppDelegate: 1785d42459138c45175b2fa18e86cd2aee829a93
1628+
React-RCTBlob: a0a8f6bfd8926bff0e2814ec3f8cd5514f2db243
1629+
React-RCTFabric: f69d856b74b6d385c4cf4bd128c330161ce18306
1630+
React-RCTImage: 51db983bcc5075fa9bf3e094e5c6c1f5b5575472
1631+
React-RCTLinking: 3430cd1023a5ac86a96ed6d4fbf7a8ed7b2e44d5
1632+
React-RCTNetwork: 52198f8a8c823639dcc8f6725ca5b360d66ea1a0
1633+
React-RCTSettings: c127440c2c538128f92fb45524e976e25cb69bd6
1634+
React-RCTText: 640b2d0bfb51d88d8a76c6a1a7ea1f94667bf231
1635+
React-RCTVibration: bd20c8156b649cd745c70db3341c409ae3b42821
1636+
React-rendererdebug: 16394ffe0d852967123b3b76a630233b90ec8e63
16121637
React-rncore: 4f1e645acb5107bd4b4cf29eff17b04a7cd422f3
1613-
React-RuntimeApple: 013b606e743efb5ee14ef03c32379b78bfe74354
1614-
React-RuntimeCore: 7205be45a25713b5418bbf2db91ddfcca0761d8b
1638+
React-RuntimeApple: 97d0a5c655467c57b88076434427ec32413e7802
1639+
React-RuntimeCore: a55443ddb73e6666b441963d8951a16ba5cfc223
16151640
React-runtimeexecutor: a278d4249921853d4a3f24e4d6e0ff30688f3c16
1616-
React-RuntimeHermes: 44c628568ce8feedc3acfbd48fc07b7f0f6d2731
1617-
React-runtimescheduler: e2152ed146b6a35c07386fc2ac4827b27e6aad12
1618-
React-utils: 3285151c9d1e3a28a9586571fc81d521678c196d
1619-
ReactCommon: f42444e384d82ab89184aed5d6f3142748b54768
1620-
RNCClipboard: 0a720adef5ec193aa0e3de24c3977222c7e52a37
1621-
RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592
1622-
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
1623-
RNGestureHandler: 8dbcccada4a7e702e7dec9338c251b1cf393c960
1624-
RNReactNativeHapticFeedback: ec56a5f81c3941206fd85625fa669ffc7b4545f9
1625-
RNReanimated: f4ff116e33e0afc3d127f70efe928847c7c66355
1626-
RNScreens: 024c5cb8569dea6667b5c73e6c119beb83f686f0
1627-
RNShare: 0fad69ae2d71de9d1f7b9a43acf876886a6cb99c
1628-
RNSVG: 7ff26379b2d1871b8571e6f9bc9630de6baf9bdf
1641+
React-RuntimeHermes: 6273f0755fef304453fc3c356b25abf17e915b83
1642+
React-runtimescheduler: 87b14969bb0b10538014fb8407d472f9904bc8cd
1643+
React-utils: 67574b07bff4429fd6c4d43a7fad8254d814ee20
1644+
ReactCommon: 64c64f4ae1f2debe3fab1800e00cb8466a4477b7
1645+
RNCClipboard: 4598dae0fe33e2aa130d9d213e2007be78310266
1646+
RNFileViewer: 4b5d83358214347e4ab2d4ca8d5c1c90d869e251
1647+
RNFS: 89de7d7f4c0f6bafa05343c578f61118c8282ed8
1648+
RNGestureHandler: 77ca8899a0bd9a9d948e74174ee401bbffa5e524
1649+
RNReactNativeHapticFeedback: a6fb5b7a981683bf58af43e3fb827d4b7ed87f83
1650+
RNReanimated: fe62058b0e1ecb46e252d63d27580f36cd6d9eb2
1651+
RNScreens: df14a2a11e7afb57e6f35f8964d206271f4dae44
1652+
RNShare: 694e19d7f74ac4c04de3a8af0649e9ccc03bd8b1
1653+
RNSVG: 3421710ac15f4f2dc47e5c122f2c2e4282116830
16291654
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
1630-
Yoga: b9a182ab00cf25926e7f79657d08c5d23c2d03b0
1655+
Yoga: 348f8b538c3ed4423eb58a8e5730feec50bce372
16311656

1632-
PODFILE CHECKSUM: ccd372319eaeea775147eb2843bb9cf9d1b4cd7a
1657+
PODFILE CHECKSUM: eed3e49f72b6465b4551e72df9de6b83230c91ca
16331658

1634-
COCOAPODS: 1.14.3
1659+
COCOAPODS: 1.16.2

react-native/package-lock.json

Lines changed: 43 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

react-native/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"react-native-share": "^10.2.1",
4747
"react-native-svg": "^15.4.0",
4848
"react-native-toast-message": "^2.2.1",
49+
"react-native-webview": "^13.16.0",
4950
"react-syntax-highlighter": "^15.5.0"
5051
},
5152
"devDependencies": {
696 Bytes
Loading

0 commit comments

Comments
 (0)