|
""" |
|
Example of integrating efficient-context with a lightweight LLM. |
|
""" |
|
|
|
import logging |
|
import time |
|
from typing import List, Dict, Any, Optional |
|
|
|
from efficient_context import ContextManager |
|
from efficient_context.compression import SemanticDeduplicator |
|
from efficient_context.chunking import SemanticChunker |
|
from efficient_context.retrieval import CPUOptimizedRetriever |
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
logger = logging.getLogger(__name__) |
|
|
|
class LightweightLLM: |
|
""" |
|
A simple wrapper for a lightweight LLM. |
|
|
|
This is a placeholder that would be replaced with an actual |
|
lightweight LLM implementation in a real application. |
|
""" |
|
|
|
def __init__(self, model_name: str = "tiny-llm"): |
|
""" |
|
Initialize the lightweight LLM. |
|
|
|
Args: |
|
model_name: Name of the model to use |
|
""" |
|
self.model_name = model_name |
|
logger.info(f"Initialized LightweightLLM with model: {model_name}") |
|
|
|
|
|
logger.info("Note: This is a placeholder class for demonstration purposes") |
|
|
|
def generate( |
|
self, |
|
prompt: str, |
|
context: Optional[str] = None, |
|
max_tokens: int = 512 |
|
) -> str: |
|
""" |
|
Generate text using the LLM. |
|
|
|
Args: |
|
prompt: The prompt for generation |
|
context: Optional context to condition the generation |
|
max_tokens: Maximum number of tokens to generate |
|
|
|
Returns: |
|
response: Generated text response |
|
""" |
|
|
|
|
|
|
|
logger.info(f"Generating response with context size: {len(context.split()) if context else 0} tokens") |
|
|
|
|
|
if context: |
|
time.sleep(0.001 * len(context.split())) |
|
|
|
|
|
if "renewable energy" in context and "climate" in context: |
|
return "Renewable energy has a positive impact on climate change mitigation by reducing greenhouse gas emissions. The transition from fossil fuels to renewable sources like wind and solar is crucial for limiting global warming." |
|
elif "rural" in context and "renewable" in context: |
|
return "Renewable energy technologies are well-suited for rural and remote areas. They can provide decentralized power generation, improving energy access in areas without reliable grid connections, which is critical for human development." |
|
else: |
|
return "Renewable energy sources are sustainable alternatives to fossil fuels. They include solar, wind, hydro, geothermal, and biomass energy, and their use is growing globally." |
|
else: |
|
return "I don't have enough context to provide a detailed answer on this topic." |
|
|
|
def main(): |
|
|
|
documents = [ |
|
{ |
|
"content": """ |
|
Renewable energy is derived from natural sources that are replenished at a higher rate than they are consumed. |
|
Sunlight and wind, for example, are such sources that are constantly being replenished. |
|
Renewable energy resources exist over wide geographical areas, in contrast to fossil fuels, |
|
which are concentrated in a limited number of countries. |
|
|
|
Rapid deployment of renewable energy and energy efficiency technologies is resulting in significant |
|
energy security, climate change mitigation, and economic benefits. |
|
In international public opinion surveys there is strong support for promoting renewable sources |
|
such as solar power and wind power. |
|
|
|
While many renewable energy projects are large-scale, renewable technologies are also suited to rural |
|
and remote areas and developing countries, where energy is often crucial in human development. |
|
As most of the renewable energy technologies provide electricity, renewable energy is often deployed |
|
together with further electrification, which has several benefits: electricity can be converted to heat, |
|
can be converted into mechanical energy with high efficiency, and is clean at the point of consumption. |
|
""", |
|
"metadata": {"topic": "renewable energy", "source": "example"} |
|
}, |
|
{ |
|
"content": """ |
|
Climate change mitigation consists of actions to limit global warming and its related effects. |
|
This involves reductions in human emissions of greenhouse gases (GHGs) as well as activities |
|
that reduce their concentration in the atmosphere. |
|
|
|
Fossil fuels account for more than 70% of GHG emissions. The energy sector contributes to global |
|
emissions, mainly through the burning of fossil fuels to generate electricity and heat, |
|
and through the use of gasoline and diesel to power vehicles. |
|
|
|
A transition to renewable energy is a key component of climate change mitigation. By replacing |
|
fossil fuel power plants with renewable energy sources, such as wind and solar, we can reduce |
|
the amount of greenhouse gases emitted into the atmosphere. |
|
|
|
Renewable energy can also play a role in adapting to climate change, for example by providing |
|
reliable power for cooling in increasingly hot regions, or by ensuring energy access in the |
|
aftermath of climate-related disasters. |
|
""", |
|
"metadata": {"topic": "climate change", "source": "example"} |
|
}, |
|
] |
|
|
|
|
|
context_manager = ContextManager( |
|
compressor=SemanticDeduplicator(threshold=0.85), |
|
chunker=SemanticChunker(chunk_size=256), |
|
retriever=CPUOptimizedRetriever(embedding_model="lightweight"), |
|
max_context_size=512 |
|
) |
|
|
|
|
|
llm = LightweightLLM() |
|
|
|
|
|
document_ids = context_manager.add_documents(documents) |
|
|
|
|
|
queries = [ |
|
"Tell me about the climate impact of renewable energy", |
|
"How does renewable energy work in rural areas?", |
|
"What are the advantages of using renewable energy?" |
|
] |
|
|
|
|
|
for query in queries: |
|
print(f"\n\n=== QUERY: {query} ===") |
|
|
|
|
|
start_time = time.time() |
|
optimized_context = context_manager.generate_context(query=query) |
|
context_time = time.time() - start_time |
|
|
|
print(f"Context generation took {context_time:.3f} seconds") |
|
print(f"Context size: {len(optimized_context.split())} tokens") |
|
|
|
|
|
start_time = time.time() |
|
response = llm.generate(prompt=query, context=optimized_context) |
|
llm_time = time.time() - start_time |
|
|
|
print(f"LLM generation took {llm_time:.3f} seconds") |
|
print(f"--- RESPONSE ---") |
|
print(response) |
|
print("-" * 50) |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|