mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-09-06 16:16:37 +08:00
feat: 实现伪流式传输功能
本次提交引入了伪流式传输(Fake Streaming)功能,旨在为不支持原生流式响应的语言模型或特定场景提供类似流式的用户体验。
主要变更包括:
- **配置更新**:
- 在 `.env.example` 和 `app/config/config.py` 中添加了新的配置项 `FAKE_STREAM_ENABLED` 和 `FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS`,用于控制伪流式功能的启用和心跳包发送间隔。
- 更新了 `README.md` 以包含新的伪流式配置说明。
- **核心服务逻辑**:
- 在 `app/service/chat/openai_chat_service.py` 中:
- 新增 `_fake_stream_logic_impl` 方法,用于处理伪流式调用的核心逻辑。当启用伪流式时,该方法会调用非流式接口,并在等待期间定期发送空数据块以维持连接。
- 修改 `_handle_stream_completion` 方法,使其能够根据 `FAKE_STREAM_ENABLED` 配置在真实流式和伪流式逻辑之间切换。
- 改进了流式处理中的重试逻辑、API密钥切换机制以及错误日志记录,使其更加健壮。特别是在伪流式场景下,确保了即使在非流式调用中也能正确处理和记录错误。
- **前端配置界面**:
- 在 `app/static/js/config_editor.js` 中添加了处理和填充伪流式配置项的逻辑。
- 在 `app/templates/config_editor.html` 中为伪流式配置添加了相应的表单控件,允许用户在配置编辑器中启用/禁用伪流式并设置空数据发送间隔。
该功能通过在后端模拟流式输出,即使底层模型不支持流式传输,也能向客户端提供持续的数据流,从而改善了用户体验,特别是在处理可能耗时较长的请求时。
This commit is contained in:
@@ -1101,6 +1101,60 @@ endblock %} {% block head_extra_styles %}
|
||||
/>
|
||||
<small class="text-gray-500 mt-1 block">流式输出的分块大小</small>
|
||||
</div>
|
||||
|
||||
<!-- Fake Streaming Configuration -->
|
||||
<h3
|
||||
class="text-lg font-semibold mb-4 pt-4 border-t border-violet-300 border-opacity-20 text-gray-200"
|
||||
>
|
||||
<i class="fas fa-ghost text-violet-400"></i> 假流式配置 (Fake
|
||||
Streaming)
|
||||
</h3>
|
||||
|
||||
<!-- 启用假流式输出 -->
|
||||
<div class="mb-6 flex items-center justify-between">
|
||||
<label for="FAKE_STREAM_ENABLED" class="font-semibold text-gray-700"
|
||||
>启用假流式输出</label
|
||||
>
|
||||
<div
|
||||
class="relative inline-block w-10 mr-2 align-middle select-none transition duration-200 ease-in"
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
name="FAKE_STREAM_ENABLED"
|
||||
id="FAKE_STREAM_ENABLED"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer"
|
||||
/>
|
||||
<label
|
||||
for="FAKE_STREAM_ENABLED"
|
||||
class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 cursor-pointer"
|
||||
></label>
|
||||
</div>
|
||||
</div>
|
||||
<small class="text-gray-500 mt-1 block mb-4"
|
||||
>当启用时,将调用非流式接口,并在等待响应期间发送空数据以维持连接。</small
|
||||
>
|
||||
|
||||
<!-- 假流式发送空数据的间隔时间 -->
|
||||
<div class="mb-6">
|
||||
<label
|
||||
for="FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS"
|
||||
class="block font-semibold mb-2 text-gray-700"
|
||||
>假流式空数据发送间隔(秒)</label
|
||||
>
|
||||
<input
|
||||
type="number"
|
||||
id="FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS"
|
||||
name="FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS"
|
||||
min="1"
|
||||
max="60"
|
||||
step="1"
|
||||
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed"
|
||||
/>
|
||||
<small class="text-gray-500 mt-1 block"
|
||||
>在启用假流式输出时,向客户端发送空数据以维持连接状态的时间间隔(建议
|
||||
3-10 秒)。</small
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 定时任务配置 -->
|
||||
|
||||
Reference in New Issue
Block a user