File size: 2,461 Bytes
52d4ec9
50a4735
8e16424
 
e65d3fb
52d4ec9
b3d218a
 
 
e65d3fb
8e16424
 
 
 
490b63e
8e16424
793bade
e65d3fb
8e16424
 
 
 
 
e65d3fb
8e16424
 
e65d3fb
8e16424
 
e65d3fb
 
 
 
 
 
302df45
8e16424
 
 
 
 
 
302df45
 
e65d3fb
302df45
d727731
c4bfef8
 
d727731
302df45
53d3bea
302df45
 
d727731
53d3bea
d727731
302df45
c4bfef8
 
 
302df45
 
8e16424
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import streamlit as st
from datasets import load_dataset
from langchain.llms import HuggingFaceEndpoint
from langchain.prompts import FewShotChatMessagePromptTemplate, ChatPromptTemplate
from langchain.schema.messages import SystemMessage

# Set page config at the very top, before anything else
st.set_page_config(page_title="DialogSum Few-Shot Summarizer", page_icon="🧠")

# Load few-shot examples from dialogsum
@st.cache_data
def load_examples(n=3):
    dataset = load_dataset("knkarthick/dialogsum", split="train[:20]")
    return [{"dialogue": row["dialogue"], "summary": row["summary"]} for row in dataset.select(range(n))]

examples = load_examples()

# Template for each example
example_prompt = ChatPromptTemplate.from_messages([
    ("human", "Summarize the following dialog:\n\n{dialogue}"),
    ("ai", "{summary}")
])

# Few-shot prompt template (no prefix/suffix here)
few_shot_prompt = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples
)

# Now add intro system message + user input separately
final_prompt = ChatPromptTemplate.from_messages([
    SystemMessage(content="The following are examples of dialogues and their summaries."),
    ("human", "Summarize the following dialog:\n\n{dialogue}")
])

# Streamlit UI setup
st.title("🧠 Few-Shot Dialog Summarizer")
st.markdown("Uses real examples from `dialogsum` to guide the summary output.")

user_input = st.text_area("✍️ Paste your dialogue here:", height=200)

if user_input:
    # Prepare messages for the final prompt (include few-shot examples here directly)
    formatted_prompt = few_shot_prompt.format_messages(dialogue=user_input)
    
    # Add formatted examples to the final prompt
    final_formatted_prompt = final_prompt.format_messages(dialogue=user_input)
    
    # Convert the list of messages into a single string
    prompt_string = "\n".join([msg.content for msg in final_formatted_prompt])  # Access content with .content

    # Get response from model with correct explicit parameters
    llm = HuggingFaceEndpoint(
        repo_id="google/pegasus-xsum",
        task="summarization",  # Correct task for text summarization
        temperature=0.3,  # Explicitly passing temperature here
        max_length=128  # Explicitly passing max_length here
    )
    
    # Run the LLM with the prompt string
    response = llm(prompt_string)

    # Output the summary
    st.subheader("πŸ“Œ Summary:")
    st.write(response)