ai-codebase-analyst / 01_basic_summarizer.py
arizen-dev's picture
Initial project upload
90f65f7
Raw
History Blame Contribute Delete
2.84 kB
# file: 01_basic_summarizer.py
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
OPENROUTER_API_URL = "https://openrouter.ai/api/v1"
def main():
"""
Main function to load environment variables, create a summarization chain,
and process a sample text, as described in Chapter 2.
"""
# Load environment variables from .env file
load_dotenv()
# 1. Define the LLM we want to use
# We select a fast and cost-effective model from the Gemini family and
# configure the client to use OpenRouter's API.
'''chat_model = ChatOpenAI(
model="google/gemini-2.0-flash-001",
temperature=0.3,
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base=OPENROUTER_API_URL # Using the constant defined above
)'''
chat_model = ChatOpenAI(
model="qwen/qwen3-coder:free", # Swapped from Gemini to Qwen's Coder
temperature=0.3,
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base=OPENROUTER_API_URL
)
# 2. Create our prompt template
# This guides the model on what to do with the input.
template = """
You are a helpful assistant who summarizes text.
Summarize the following text in 1 sentence:
Text: "{text_to_summarize}"
"""
prompt = ChatPromptTemplate.from_template(template)
# 3. Create the output parser
# This will convert the model's chat message output into a string.
output_parser = StrOutputParser()
# 4. Create the "chain" by piping the components together
# This uses the LangChain Expression Language (LCEL) to define the flow of data.
summarization_chain = prompt | chat_model | output_parser
# 5. Invoke the chain with a sample text
# We pass the input text from the book to test our chain.
sample_text = """
AI engineering represents a significant paradigm shift from traditional machine
learning. While traditional ML focused heavily on model training and optimization
in environments like Jupyter Notebooks, modern AI engineering treats pre-trained
Large Language Models (LLMs) as components, akin to a CPU. The primary challenge
is no longer just building an accurate model, but architecting a robust system
around it. This requires a focus on three pillars: observability, to understand
the system's internal state; reliability, to ensure predictable and structured
outputs; and scalability, to manage cost and performance effectively.
"""
print("--- Summarizing Text ---")
summary = summarization_chain.invoke({"text_to_summarize": sample_text})
print(summary)
print("------------------------")
if __name__ == "__main__":
main()