54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
"""
|
|
Website summarizer using Ollama instead of OpenAI.
|
|
"""
|
|
|
|
from openai import OpenAI
|
|
from scraper import fetch_website_contents
|
|
|
|
OLLAMA_BASE_URL = "http://localhost:11434/v1"
|
|
MODEL = "llama3.2"
|
|
|
|
system_prompt = """
|
|
You are a snarky assistant that analyzes the contents of a website,
|
|
and provides a short, snarky, humorous summary, ignoring text that might be navigation related.
|
|
Respond in markdown. Do not wrap the markdown in a code block - respond just with the markdown.
|
|
"""
|
|
|
|
user_prompt_prefix = """
|
|
Here are the contents of a website.
|
|
Provide a short summary of this website.
|
|
If it includes news or announcements, then summarize these too.
|
|
|
|
"""
|
|
|
|
|
|
def messages_for(website):
|
|
"""Create message list for the LLM."""
|
|
return [
|
|
{"role": "system", "content": system_prompt},
|
|
{"role": "user", "content": user_prompt_prefix + website}
|
|
]
|
|
|
|
|
|
def summarize(url):
|
|
"""Fetch and summarize a website using Ollama."""
|
|
ollama = OpenAI(base_url=OLLAMA_BASE_URL, api_key='ollama')
|
|
website = fetch_website_contents(url)
|
|
response = ollama.chat.completions.create(
|
|
model=MODEL,
|
|
messages=messages_for(website)
|
|
)
|
|
return response.choices[0].message.content
|
|
|
|
|
|
def main():
|
|
"""Main entry point for testing."""
|
|
url = input("Enter a URL to summarize: ")
|
|
print("\nFetching and summarizing...\n")
|
|
summary = summarize(url)
|
|
print(summary)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|