bug(api): completion-conversations end-time filter uses strict `<` instead of `<=`, silently dropping boundary conversations
还没有人认领这个 Issue。
评估
调研方向
从 api/controllers/console/app/conversation.py 中的 CompletionConversationApi.get 开始,然后将其结束时间处理方式与 Chat conversation endpoint 进行比较。验证在所选分钟的最后一秒创建的 conversation 会被 completion-conversations 过滤器包含,符合文档中描述的预期行为。
由索引模型根据 Issue 内容生成。
描述
Self Checks
- I have read the Contributing Guide and Language Policy.
- This is only for bug report, if you would like to ask a question, please head to Discussions.
- I have searched for existing issues search for existing issues, including closed ones.
- I confirm that I am using English to submit this report, otherwise it will be closed.
- 【中文用户 & Non English User】请使用英语提交,否则会被关闭 :)
- Please do not modify this template :) and fill in all the required fields.
Dify version
1.17.0 (main branch, commit 6bc7f01261)
Cloud or Self Hosted
Self Hosted (Docker)
Steps to reproduce
- In the Dify console, open any Completion-type app's conversation log page.
- Set a date/time filter with an end time, e.g.
2024-01-15 14:30. - Note which conversations are returned.
- Compare results with a Chat-type app using the same end-time filter.
✔️ Expected Behavior
Both Completion and Chat conversation list endpoints should use an inclusive upper bound (<=) for the end-time filter. A conversation created at exactly 2024-01-15 14:30:59 (the last second of the specified end minute) should appear in the results.
❌ Actual Behavior
The Completion conversation endpoint (GET /apps/<id>/completion-conversations) uses a strict less-than (<) comparison for the end-time, which silently excludes conversations created at exactly the boundary second.
The Chat conversation endpoint (GET /apps/<id>/chat-conversations) correctly uses <=.
Root Cause (Code Evidence)
Both endpoints call parse_time_range() which parses end time as HH:MM with second=0, then both immediately call .replace(second=59) — clearly intending to include the full minute up to :59. But the comparison operators then diverge:
CompletionConversationApi.get — api/controllers/console/app/conversation.py line 141-143 (BUG):
if end_datetime_utc:
end_datetime_utc = end_datetime_utc.replace(second=59)
query = query.where(Conversation.created_at < end_datetime_utc) # ← strict <
- 主要语言
- TypeScript
- 星标
- 157k
- 派生
- 24.7k
- 平均合并
- 22 小时 32 分钟
- 30 天内合并 PR
- 611
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
langgenius/dify 的其他 Issue
-
Annotation Reply: a stored score threshold of 0.0 is silently replaced with 1, disabling the feature 未关闭
难度 2/5 1-3 小时 新手友好度 88/100
langgenius/dify#42639 · 1 条评论 · 1 个 reaction ·
-
难度 2/5 1-3 小时 新手友好度 70/100
langgenius/dify#42468 · 1 条评论 · 1 个 reaction ·
-
🐞 bug
难度 2/5 1-3 小时 新手友好度 86/100
langgenius/dify#42446 · 1 个 reaction ·
-
难度 2/5 1-3 小时 新手友好度 88/100
langgenius/dify#42355 · 1 条评论 · 1 个 reaction ·
-
难度 2/5 1-3 小时 新手友好度 88/100
langgenius/dify#42350 · 1 条评论 · 1 个 reaction ·
相似的 Issue
-
calcite-components needs triage refactor
难度 2/5 1-3 小时 新手友好度 75/100
Esri/calcite-design-system#15203 ·
-
难度 2/5 1-3 小时 新手友好度 91/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
难度 1/5 1 小时以内 新手友好度 95/100
-
难度 2/5 1-3 小时 新手友好度 78/100
Automattic/studio#4908 ·
-
难度 2/5 1-3 小时 新手友好度 90/100