11#!/usr/bin/env python3
22
33import argparse
4+ import json
45import os
56import sys
67import urllib .parse
78from configparser import ConfigParser
8- import json
9+ from typing import Any , Dict
910
1011from litellm import completion # type: ignore[import-not-found]
1112
1213import zulip
1314
14- def format_conversation (result ):
15+
16+ def format_conversation (result : Dict [str , Any ]) -> str :
1517 # Note: Including timestamps seems to have no impact; including reactions
1618 # makes the results worse.
1719 zulip_messages = result ["messages" ]
1820 if len (zulip_messages ) == 0 :
1921 print ("No messages in conversation to summarize" )
2022 sys .exit (0 )
2123
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+ ]
2428 return json .dumps (zulip_messages_list )
2529
26- def make_message (content , role = "user" ):
27- return {"content" : content ,
28- "role" : role }
2930
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+
3238
3339if __name__ == "__main__" :
3440 parser = argparse .ArgumentParser ()
@@ -113,7 +119,7 @@ if __name__ == "__main__":
113119 print ("Failed fetching message history" , result )
114120 sys .exit (1 )
115121
116- conversation_length = len (result [' messages' ])
122+ conversation_length = len (result [" messages" ])
117123 max_summary_length = get_max_summary_length (conversation_length )
118124
119125 print ("Conversation URL:" , url )
@@ -122,7 +128,11 @@ if __name__ == "__main__":
122128 intro = f"The following is a chat conversation in the Zulip team chat app. channel: { channel } , topic: { topic } "
123129 formatted_conversation = format_conversation (result )
124130 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+ ]
126136
127137 # Send formatted messages to the LLM model for summarization
128138 response = completion (
@@ -131,6 +141,8 @@ if __name__ == "__main__":
131141 messages = messages ,
132142 )
133143
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+ )
135147 print ()
136148 print (response ["choices" ][0 ]["message" ]["content" ])
0 commit comments