openai / chatkit-python
File Churn

File change frequency (churn) shows the distribution of file updates (days with at least one commit).

Overview
File Change Frequency Overall
  • There are 9 files with 3,218 lines of code.
    • 0 files changed more than 100 times (0 lines of code)
    • 0 files changed 51-100 times (0 lines of code)
    • 3 files changed 21-50 times (2,373 lines of code)
    • 4 files changed 6-20 times (804 lines of code)
    • 2 files changed 1-5 times (41 lines of code)
0% | 0% | 73% | 24% | 1%
Legend:
101+
51-100
21-50
6-20
1-5

explore: grouped by folders | grouped by update frequency | data
Contributors Count Frequency Overall
  • There are 9 files with 3,218 lines of code.
    • 0 files changed by more than 25 contributors (0 lines of code)
    • 0 files changed by 11-25 contributors (0 lines of code)
    • 1 file changed by 6-10 contributors (873 lines of code)
    • 4 files changed by 2-5 contributors (2,117 lines of code)
    • 4 files changed by 1 contributor (228 lines of code)
0% | 0% | 27% | 65% | 7%
Legend:
26+
11-25
6-10
2-5
1

explore: grouped by folders | grouped by contributors count | data
File Change Frequency per File Extension
md, py, json, yaml, svg, css, gitignore, toml, txt
File Change Frequency per Extension
The number of recorded file updates
101+
51-100
21-50
6-20
1-5
py0% | 0% | 73% | 24% | 1%
File Change Frequency per Logical Decomposition
primary
primary (file change frequency)
The number of recorded file updates
101+
51-100
21-50
6-20
1-5
chatkit0% | 0% | 73% | 24% | 1%
Most Frequently Changed Files (Top 11)

See data for all files...

File# lines# unitscreatedlast modified# changes
(days)
# contributorsline
churn
first
contributor
latest
contributor
types.py
in chatkit
523 3 2025-10-06 2026-05-14 26 4 +1016 / -187 victor@openai.com jiwon@openai.com
server.py
in chatkit
873 17 2025-10-06 2026-05-14 23 9 +835 / -141 victor@openai.com jiwon@openai.com
agents.py
in chatkit
977 11 2025-10-09 2026-05-19 21 5 +1014 / -342 170453430+weedon-openai@use... jiwon@openai.com
widgets.py
in chatkit
574 7 2025-10-15 2026-02-17 12 5 +475 / -301 jiwon@openai.com weedon@openai.com
actions.py
in chatkit
43 1 2025-10-14 2026-02-20 7 4 +32 / -26 weedon@openai.com weedon@openai.com
icons.py
in chatkit
74 - 2025-11-07 2026-01-10 6 1 +156 / -0 jiwon@openai.com jiwon@openai.com
store.py
in chatkit
113 4 2025-11-22 2026-01-21 6 1 +48 / -6 jiwon@openai.com jiwon@openai.com
errors.py
in chatkit
36 2 2025-10-29 2025-10-31 2 1 +4 / -4 danwang@openai.com danwang@openai.com
version.py
in chatkit
5 - 2025-11-06 2025-11-06 1 1 +2 / -2 jiwon@openai.com jiwon@openai.com
__init__.py
in chatkit
1 -
logger.py
in chatkit
13 -
Files With Most Churn (Top 11)
Based on the number of lines added and deleted across all commits.

See data for all files...

File# lines# unitscreatedlast modified# changes
(days)
# contributorsline
churn
first
contributor
latest
contributor
agents.py
in chatkit
977 11 2025-10-09 2026-05-19 21 5 +1014 / -342 170453430+weedon-openai@use... jiwon@openai.com
types.py
in chatkit
523 3 2025-10-06 2026-05-14 26 4 +1016 / -187 victor@openai.com jiwon@openai.com
server.py
in chatkit
873 17 2025-10-06 2026-05-14 23 9 +835 / -141 victor@openai.com jiwon@openai.com
widgets.py
in chatkit
574 7 2025-10-15 2026-02-17 12 5 +475 / -301 jiwon@openai.com weedon@openai.com
icons.py
in chatkit
74 - 2025-11-07 2026-01-10 6 1 +156 / -0 jiwon@openai.com jiwon@openai.com
actions.py
in chatkit
43 1 2025-10-14 2026-02-20 7 4 +32 / -26 weedon@openai.com weedon@openai.com
store.py
in chatkit
113 4 2025-11-22 2026-01-21 6 1 +48 / -6 jiwon@openai.com jiwon@openai.com
errors.py
in chatkit
36 2 2025-10-29 2025-10-31 2 1 +4 / -4 danwang@openai.com danwang@openai.com
version.py
in chatkit
5 - 2025-11-06 2025-11-06 1 1 +2 / -2 jiwon@openai.com jiwon@openai.com
__init__.py
in chatkit
1 -
logger.py
in chatkit
13 -
Files With Most Contributors (Top 11)
Based on the number of unique email addresses found in commits.

See data for all files...

File# lines# unitscreatedlast modified# changes
(days)
# contributorsline
churn
first
contributor
latest
contributor
server.py
in chatkit
873 17 2025-10-06 2026-05-14 23 9 +835 / -141 victor@openai.com jiwon@openai.com
agents.py
in chatkit
977 11 2025-10-09 2026-05-19 21 5 +1014 / -342 170453430+weedon-openai@use... jiwon@openai.com
widgets.py
in chatkit
574 7 2025-10-15 2026-02-17 12 5 +475 / -301 jiwon@openai.com weedon@openai.com
types.py
in chatkit
523 3 2025-10-06 2026-05-14 26 4 +1016 / -187 victor@openai.com jiwon@openai.com
actions.py
in chatkit
43 1 2025-10-14 2026-02-20 7 4 +32 / -26 weedon@openai.com weedon@openai.com
icons.py
in chatkit
74 - 2025-11-07 2026-01-10 6 1 +156 / -0 jiwon@openai.com jiwon@openai.com
store.py
in chatkit
113 4 2025-11-22 2026-01-21 6 1 +48 / -6 jiwon@openai.com jiwon@openai.com
errors.py
in chatkit
36 2 2025-10-29 2025-10-31 2 1 +4 / -4 danwang@openai.com danwang@openai.com
version.py
in chatkit
5 - 2025-11-06 2025-11-06 1 1 +2 / -2 jiwon@openai.com jiwon@openai.com
logger.py
in chatkit
13 -
__init__.py
in chatkit
1 -
Files With Least Contributors (Top 11)
Based on the number of unique email addresses found in commits.

See data for all files...

File# lines# unitscreatedlast modified# changes
(days)
# contributorsline
churn
first
contributor
latest
contributor
logger.py
in chatkit
13 -
__init__.py
in chatkit
1 -
store.py
in chatkit
113 4 2025-11-22 2026-01-21 6 1 +48 / -6 jiwon@openai.com jiwon@openai.com
icons.py
in chatkit
74 - 2025-11-07 2026-01-10 6 1 +156 / -0 jiwon@openai.com jiwon@openai.com
errors.py
in chatkit
36 2 2025-10-29 2025-10-31 2 1 +4 / -4 danwang@openai.com danwang@openai.com
version.py
in chatkit
5 - 2025-11-06 2025-11-06 1 1 +2 / -2 jiwon@openai.com jiwon@openai.com
types.py
in chatkit
523 3 2025-10-06 2026-05-14 26 4 +1016 / -187 victor@openai.com jiwon@openai.com
actions.py
in chatkit
43 1 2025-10-14 2026-02-20 7 4 +32 / -26 weedon@openai.com weedon@openai.com
agents.py
in chatkit
977 11 2025-10-09 2026-05-19 21 5 +1014 / -342 170453430+weedon-openai@use... jiwon@openai.com
widgets.py
in chatkit
574 7 2025-10-15 2026-02-17 12 5 +475 / -301 jiwon@openai.com weedon@openai.com
server.py
in chatkit
873 17 2025-10-06 2026-05-14 23 9 +835 / -141 victor@openai.com jiwon@openai.com
Correlations

File Size vs. Number of Changes: 9 points

chatkit/agents.py x: 977 lines of code y: 21 # changes chatkit/server.py x: 873 lines of code y: 23 # changes chatkit/types.py x: 523 lines of code y: 26 # changes chatkit/actions.py x: 43 lines of code y: 7 # changes chatkit/widgets.py x: 574 lines of code y: 12 # changes chatkit/store.py x: 113 lines of code y: 6 # changes chatkit/icons.py x: 74 lines of code y: 6 # changes chatkit/version.py x: 5 lines of code y: 1 # changes chatkit/errors.py x: 36 lines of code y: 2 # changes
26.0
# changes
  min: 1.0
  average: 11.56
  25th percentile: 4.0
  median: 7.0
  75th percentile: 22.0
  max: 26.0
0 977.0
lines of code
min: 5.0 | average: 357.56 | 25th percentile: 39.5 | median: 113.0 | 75th percentile: 723.5 | max: 977.0

Number of Contributors vs. Number of Changes: 9 points

chatkit/agents.py x: 5 # contributors y: 21 # changes chatkit/server.py x: 9 # contributors y: 23 # changes chatkit/types.py x: 4 # contributors y: 26 # changes chatkit/actions.py x: 4 # contributors y: 7 # changes chatkit/widgets.py x: 5 # contributors y: 12 # changes chatkit/store.py x: 1 # contributors y: 6 # changes chatkit/version.py x: 1 # contributors y: 1 # changes chatkit/errors.py x: 1 # contributors y: 2 # changes
26.0
# changes
  min: 1.0
  average: 11.56
  25th percentile: 4.0
  median: 7.0
  75th percentile: 22.0
  max: 26.0
0 9.0
# contributors
min: 1.0 | average: 3.44 | 25th percentile: 1.0 | median: 4.0 | 75th percentile: 5.0 | max: 9.0

Number of Contributors vs. File Size: 9 points

chatkit/agents.py x: 5 # contributors y: 977 lines of code chatkit/server.py x: 9 # contributors y: 873 lines of code chatkit/types.py x: 4 # contributors y: 523 lines of code chatkit/actions.py x: 4 # contributors y: 43 lines of code chatkit/widgets.py x: 5 # contributors y: 574 lines of code chatkit/store.py x: 1 # contributors y: 113 lines of code chatkit/icons.py x: 1 # contributors y: 74 lines of code chatkit/version.py x: 1 # contributors y: 5 lines of code chatkit/errors.py x: 1 # contributors y: 36 lines of code
977.0
lines of code
  min: 5.0
  average: 357.56
  25th percentile: 39.5
  median: 113.0
  75th percentile: 723.5
  max: 977.0
0 9.0
# contributors
min: 1.0 | average: 3.44 | 25th percentile: 1.0 | median: 4.0 | 75th percentile: 5.0 | max: 9.0

Number of Changes vs. Line Churn: 88 points

Makefile x: 1 # changes y: 64 line churn chatkit/agents.py x: 21 # changes y: 1356 line churn pyproject.toml x: 27 # changes y: 120 line churn tests/test_agents.py x: 11 # changes y: 1566 line churn uv.lock x: 26 # changes y: 3864 line churn chatkit/server.py x: 23 # changes y: 976 line churn chatkit/types.py x: 26 # changes y: 1203 line churn docs/guides/accept-rich-user-input.md x: 7 # changes y: 866 line churn tests/test_chatkit_server.py x: 15 # changes y: 2128 line churn .github/workflows/ci.yml x: 5 # changes y: 16 line churn .github/workflows/docs.yml x: 4 # changes y: 12 line churn .github/workflows/release.yml x: 7 # changes y: 24 line churn chatkit/actions.py x: 7 # changes y: 58 line churn docs/concepts/actions.md x: 4 # changes y: 60 line churn chatkit/widgets.py x: 12 # changes y: 776 line churn tests/test_widgets.py x: 4 # changes y: 402 line churn chatkit/store.py x: 6 # changes y: 54 line churn docs/release.md x: 5 # changes y: 120 line churn tests/helpers/mock_store.py x: 2 # changes y: 4 line churn docs/guides/add-annotations.md x: 3 # changes y: 338 line churn tests/test_store.py x: 2 # changes y: 22 line churn chatkit/icons.py x: 6 # changes y: 156 line churn docs/guides/respond-to-user-message.md x: 4 # changes y: 722 line churn docs/guides/stream-generated-images.md x: 1 # changes y: 412 line churn mkdocs.yml x: 10 # changes y: 248 line churn docs/quickstart.md x: 2 # changes y: 536 line churn docs/api/chatkit/index.md x: 1 # changes y: 20 line churn docs/concepts/entities.md x: 4 # changes y: 78 line churn docs/concepts/thread-stream-events.md x: 4 # changes y: 156 line churn docs/concepts/threads.md x: 4 # changes y: 322 line churn docs/gen_ref_pages.py x: 1 # changes y: 34 line churn docs/concepts/thread-items.md x: 3 # changes y: 216 line churn docs/guides/add-features/accept-attachments.md x: 2 # changes y: 596 line churn docs/guides/add-features/add-annotations.md x: 2 # changes y: 400 line churn docs/guides/add-features/allow-mentions.md x: 2 # changes y: 516 line churn docs/guides/add-features/create-custom-forms.md x: 2 # changes y: 276 line churn docs/guides/add-features/disable-new-messages.md x: 2 # changes y: 200 line churn docs/guides/add-features/handle-feedback.md x: 2 # changes y: 164 line churn docs/guides/add-features/make-client-tool-calls.md x: 2 # changes y: 228 line churn docs/guides/add-features/save-thread-titles.md x: 2 # changes y: 196 line churn docs/guides/add-features/show-progress-for-long-running-tools.md x: 2 # changes y: 416 line churn docs/guides/add-features/stream-widgets.md x: 2 # changes y: 432 line churn docs/guides/browse-past-threads.md x: 1 # changes y: 278 line churn docs/guides/build-interactive-responses-with-widgets.md x: 1 # changes y: 656 line churn docs/guides/compose-model-input.md x: 3 # changes y: 358 line churn docs/guides/handle-feedback.md x: 1 # changes y: 82 line churn docs/guides/keep-your-app-in-sync-with-chatkit.md x: 1 # changes y: 154 line churn docs/guides/let-your-app-draft-and-send-messages.md x: 1 # changes y: 182 line churn docs/guides/pass-extra-app-context-to-your-model.md x: 1 # changes y: 332 line churn docs/guides/persist-chatkit-data.md x: 4 # changes y: 474 line churn docs/guides/prepare-your-app-for-production.md x: 1 # changes y: 510 line churn docs/guides/serve-chatkit.md x: 2 # changes y: 394 line churn docs/guides/stream-thread-events.md x: 4 # changes y: 782 line churn docs/guides/accept-attachments.md x: 1 # changes y: 298 line churn docs/guides/allow-mentions.md x: 1 # changes y: 258 line churn docs/guides/create-custom-forms.md x: 1 # changes y: 138 line churn docs/guides/make-client-tool-calls.md x: 1 # changes y: 114 line churn docs/guides/send-client-effects.md x: 1 # changes y: 104 line churn docs/guides/show-progress-for-long-running-tools.md x: 1 # changes y: 208 line churn docs/guides/stream-widgets.md x: 1 # changes y: 216 line churn docs/actions.md x: 1 # changes y: 528 line churn docs/server.md x: 2 # changes y: 1056 line churn docs/widgets.md x: 2 # changes y: 1082 line churn tests/assets/widgets/card_no_data.json x: 2 # changes y: 142 line churn tests/assets/widgets/card_with_data.json x: 2 # changes y: 112 line churn tests/assets/widgets/list_view_no_data.json x: 2 # changes y: 106 line churn tests/assets/widgets/list_view_no_data.widget x: 2 # changes y: 130 line churn tests/assets/widgets/list_view_with_data.widget x: 2 # changes y: 242 line churn chatkit/version.py x: 1 # changes y: 4 line churn
3864.0
line churn
  min: 4.0
  average: 370.42
  25th percentile: 104.5
  median: 212.0
  75th percentile: 415.0
  max: 3864.0
0 27.0
# changes
min: 1.0 | average: 4.01 | 25th percentile: 1.0 | median: 2.0 | 75th percentile: 4.0 | max: 27.0

Number of Contributors vs. Line Churn: 9 points

chatkit/agents.py x: 5 # contributors y: 1356 line churn chatkit/server.py x: 9 # contributors y: 976 line churn chatkit/types.py x: 4 # contributors y: 1203 line churn chatkit/actions.py x: 4 # contributors y: 58 line churn chatkit/widgets.py x: 5 # contributors y: 776 line churn chatkit/store.py x: 1 # contributors y: 54 line churn chatkit/icons.py x: 1 # contributors y: 156 line churn chatkit/version.py x: 1 # contributors y: 4 line churn chatkit/errors.py x: 1 # contributors y: 8 line churn
1356.0
line churn
  min: 4.0
  average: 510.11
  25th percentile: 31.0
  median: 156.0
  75th percentile: 1089.5
  max: 1356.0
0 9.0
# contributors
min: 1.0 | average: 3.44 | 25th percentile: 1.0 | median: 4.0 | 75th percentile: 5.0 | max: 9.0

File Size vs. Line Churn: 9 points

chatkit/agents.py x: 977 lines of code y: 1356 line churn chatkit/server.py x: 873 lines of code y: 976 line churn chatkit/types.py x: 523 lines of code y: 1203 line churn chatkit/actions.py x: 43 lines of code y: 58 line churn chatkit/widgets.py x: 574 lines of code y: 776 line churn chatkit/store.py x: 113 lines of code y: 54 line churn chatkit/icons.py x: 74 lines of code y: 156 line churn chatkit/version.py x: 5 lines of code y: 4 line churn chatkit/errors.py x: 36 lines of code y: 8 line churn
1356.0
line churn
  min: 4.0
  average: 510.11
  25th percentile: 31.0
  median: 156.0
  75th percentile: 1089.5
  max: 1356.0
0 977.0
lines of code
min: 5.0 | average: 357.56 | 25th percentile: 39.5 | median: 113.0 | 75th percentile: 723.5 | max: 977.0