Skip to content

Commit 05124ca

Browse files
alyatimabbott
authored andcommitted
summarize-topic: Improve message processing and prompt.
1 parent 67c8034 commit 05124ca

File tree

1 file changed

+33
-26
lines changed

1 file changed

+33
-26
lines changed

zulip/integrations/litellm/summarize-topic

+33-26
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,50 @@ import os
55
import sys
66
import urllib.parse
77
from configparser import ConfigParser
8+
import json
89

910
from litellm import completion # type: ignore[import-not-found]
1011

1112
import 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+
1333
if __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

Comments
 (0)