@@ -5,30 +5,50 @@ import os
55import sys
66import urllib .parse
77from configparser import ConfigParser
8+ import json
89
910from litellm import completion # type: ignore[import-not-found]
1011
1112import zulip
1213
14+ def format_conversation (result ):
15+ # Note: Including timestamps seems to have no impact; including reactions
16+ # makes the results worse.
17+ zulip_messages = result ["messages" ]
18+ if len (zulip_messages ) == 0 :
19+ print ("No messages in conversation to summarize" )
20+ sys .exit (0 )
21+
22+ zulip_messages_list = [{"sender" : message ['sender_full_name' ],
23+ "content" : message ['content' ]} for message in zulip_messages ]
24+ return json .dumps (zulip_messages_list )
25+
26+ def make_message (content , role = "user" ):
27+ return {"content" : content ,
28+ "role" : role }
29+
30+ def get_max_summary_length (conversation_length ):
31+ return min (6 , 4 + int ((conversation_length - 10 )/ 10 ))
32+
1333if __name__ == "__main__" :
1434 parser = argparse .ArgumentParser ()
1535 parser .add_argument (
1636 "--url" ,
1737 type = str ,
1838 help = "The URL to fetch content from" ,
19- default = "https://chat.zulip.org/#narrow/stream /101-design/topic/more.20user.20indicators " ,
39+ default = "https://chat.zulip.org/#narrow/channel /101-design/topic/buddy.20list.20style.20switcher " ,
2040 )
2141 parser .add_argument (
2242 "--model" ,
2343 type = str ,
2444 help = "The model name to use for summarization" ,
25- default = "huggingface/meta-llama/Meta- Llama-3-8B -Instruct" ,
45+ default = "huggingface/meta-llama/Llama-3.1-70B -Instruct" ,
2646 )
2747 parser .add_argument (
2848 "--max-tokens" ,
2949 type = int ,
3050 help = "The maximum tokens permitted in the response" ,
31- default = 100 ,
51+ default = 300 ,
3252 )
3353 parser .add_argument (
3454 "--max-messages" ,
@@ -92,38 +112,25 @@ if __name__ == "__main__":
92112 if result ["result" ] == "error" :
93113 print ("Failed fetching message history" , result )
94114 sys .exit (1 )
95- messages = result ["messages" ]
96115
97- if len (messages ) == 0 :
98- print ("No messages in conversation to summarize" )
99- sys .exit (0 )
116+ conversation_length = len (result ['messages' ])
117+ max_summary_length = get_max_summary_length (conversation_length )
100118
101- formatted_messages = [
102- {"content" : f"{ message ['sender_full_name' ]} : { message ['content' ]} " , "role" : "user" }
103- for message in messages
104- ]
119+ print ("Conversation URL:" , url )
120+ print (f"Max summary length: { max_summary_length } " )
105121
106- # Provide a instruction if using an `Instruct` model.
107- if "Instruct" in model :
108- formatted_messages .append (
109- {
110- "content" : """
111- Summarize the above content within 90 words.
112- """ ,
113- "role" : "user" ,
114- }
115- )
122+ intro = f"The following is a chat conversation in the Zulip team chat app. channel: { channel } , topic: { topic } "
123+ formatted_conversation = format_conversation (result )
124+ 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 )]
116126
117127 # Send formatted messages to the LLM model for summarization
118128 response = completion (
119129 max_tokens = args .max_tokens ,
120130 model = model ,
121- messages = formatted_messages ,
131+ messages = messages ,
122132 )
123133
124- print ("Summarized conversation URL:" , url )
125- print (
126- f"Used { response ['usage' ]['total_tokens' ]} tokens to summarize { len (formatted_messages )} Zulip messages."
127- )
134+ print (f"Used { response ['usage' ]['completion_tokens' ]} completion tokens to summarize { conversation_length } Zulip messages ({ response ['usage' ]['prompt_tokens' ]} prompt tokens)." )
128135 print ()
129136 print (response ["choices" ][0 ]["message" ]["content" ])
0 commit comments