|
import os |
|
import gradio as gr |
|
from groq import Groq |
|
import numpy as np |
|
import faiss |
|
from sentence_transformers import SentenceTransformer |
|
|
|
|
|
GROQ_API_KEY = "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" |
|
client = Groq(api_key=GROQ_API_KEY) |
|
|
|
|
|
embedding_model = SentenceTransformer("all-MiniLM-L6-v2") |
|
|
|
|
|
environmental_data = [ |
|
{"text": "Deforestation leads to loss of biodiversity.", "category": "Biodiversity"}, |
|
{"text": "Construction projects can increase carbon emissions.", "category": "Air Quality"}, |
|
{"text": "Water usage must be monitored to prevent scarcity.", "category": "Water Resources"}, |
|
|
|
] |
|
|
|
|
|
def create_dataset_index(data): |
|
texts = [entry["text"] for entry in data] |
|
embeddings = embedding_model.encode(texts) |
|
faiss_index = faiss.IndexFlatL2(embeddings.shape[1]) |
|
faiss_index.add(np.array(embeddings)) |
|
return faiss_index, data |
|
|
|
index, indexed_data = create_dataset_index(environmental_data) |
|
|
|
|
|
def retrieve_relevant_data(query, top_k=3): |
|
query_embedding = embedding_model.encode([query]) |
|
distances, indices = index.search(np.array(query_embedding), top_k) |
|
relevant_texts = [indexed_data[i]["text"] for i in indices[0]] |
|
return relevant_texts |
|
|
|
|
|
def generate_eia_report(project_type, location, size): |
|
|
|
query = f"Project Type: {project_type}, Location: {location}, Size: {size}. Provide related environmental impact details." |
|
|
|
|
|
relevant_data = retrieve_relevant_data(query) |
|
context = " ".join(relevant_data) |
|
|
|
|
|
chat_completion = client.chat.completions.create( |
|
messages=[ |
|
{ |
|
"role": "user", |
|
"content": f"Generate an Environmental Impact Assessment report based on the following details:\n{query}\nContext:\n{context}" |
|
} |
|
], |
|
model="llama3-8b-8192", |
|
stream=False, |
|
) |
|
return chat_completion.choices[0].message.content |
|
|
|
|
|
def eia_interface(project_type, location, size): |
|
try: |
|
report = generate_eia_report(project_type, location, size) |
|
return report |
|
except Exception as e: |
|
return f"An error occurred: {e}" |
|
|
|
|
|
interface = gr.Interface( |
|
fn=eia_interface, |
|
inputs=[ |
|
gr.Textbox(label="Project Type (e.g., Solar Farm, Highway)"), |
|
gr.Textbox(label="Location (e.g., California, USA)"), |
|
gr.Textbox(label="Project Size (e.g., 50 acres, 100 MW)"), |
|
], |
|
outputs="text", |
|
title="Environmental Impact Assessment Generator", |
|
description="Enter project details to generate a detailed Environmental Impact Assessment (EIA) report." |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
interface.launch() |
|
|