1
1
#!/usr/bin/env python3
2
2
3
3
import argparse
4
+ import json
4
5
import os
5
6
import sys
6
7
import urllib .parse
7
8
from configparser import ConfigParser
8
- import json
9
+ from typing import Any , Dict
9
10
10
11
from litellm import completion # type: ignore[import-not-found]
11
12
12
13
import zulip
13
14
14
- def format_conversation (result ):
15
+
16
+ def format_conversation (result : Dict [str , Any ]) -> str :
15
17
# Note: Including timestamps seems to have no impact; including reactions
16
18
# makes the results worse.
17
19
zulip_messages = result ["messages" ]
18
20
if len (zulip_messages ) == 0 :
19
21
print ("No messages in conversation to summarize" )
20
22
sys .exit (0 )
21
23
22
- zulip_messages_list = [{"sender" : message ['sender_full_name' ],
23
- "content" : message ['content' ]} for message in zulip_messages ]
24
+ zulip_messages_list = [
25
+ {"sender" : message ["sender_full_name" ], "content" : message ["content" ]}
26
+ for message in zulip_messages
27
+ ]
24
28
return json .dumps (zulip_messages_list )
25
29
26
- def make_message (content , role = "user" ):
27
- return {"content" : content ,
28
- "role" : role }
29
30
30
- def get_max_summary_length (conversation_length ):
31
- return min (6 , 4 + int ((conversation_length - 10 )/ 10 ))
31
+ def make_message (content : str , role : str = "user" ) -> Dict [str , str ]:
32
+ return {"content" : content , "role" : role }
33
+
34
+
35
+ def get_max_summary_length (conversation_length : int ) -> int :
36
+ return min (6 , 4 + int ((conversation_length - 10 ) / 10 ))
37
+
32
38
33
39
if __name__ == "__main__" :
34
40
parser = argparse .ArgumentParser ()
@@ -113,7 +119,7 @@ if __name__ == "__main__":
113
119
print ("Failed fetching message history" , result )
114
120
sys .exit (1 )
115
121
116
- conversation_length = len (result [' messages' ])
122
+ conversation_length = len (result [" messages" ])
117
123
max_summary_length = get_max_summary_length (conversation_length )
118
124
119
125
print ("Conversation URL:" , url )
@@ -122,7 +128,11 @@ if __name__ == "__main__":
122
128
intro = f"The following is a chat conversation in the Zulip team chat app. channel: { channel } , topic: { topic } "
123
129
formatted_conversation = format_conversation (result )
124
130
prompt = f"Succinctly summarize this conversation based only on the information provided, in up to { max_summary_length } sentences, for someone who is familiar with the context. Mention key conclusions and actions, if any. Refer to specific people as appropriate. Don't use an intro phrase."
125
- messages = [make_message (intro , "system" ), make_message (formatted_conversation ), make_message (prompt )]
131
+ messages = [
132
+ make_message (intro , "system" ),
133
+ make_message (formatted_conversation ),
134
+ make_message (prompt ),
135
+ ]
126
136
127
137
# Send formatted messages to the LLM model for summarization
128
138
response = completion (
@@ -131,6 +141,8 @@ if __name__ == "__main__":
131
141
messages = messages ,
132
142
)
133
143
134
- print (f"Used { response ['usage' ]['completion_tokens' ]} completion tokens to summarize { conversation_length } Zulip messages ({ response ['usage' ]['prompt_tokens' ]} prompt tokens)." )
144
+ print (
145
+ f"Used { response ['usage' ]['completion_tokens' ]} completion tokens to summarize { conversation_length } Zulip messages ({ response ['usage' ]['prompt_tokens' ]} prompt tokens)."
146
+ )
135
147
print ()
136
148
print (response ["choices" ][0 ]["message" ]["content" ])
0 commit comments