import os import gradio as gr from groq import Groq import numpy as np import faiss from sentence_transformers import SentenceTransformer # Initialize Groq API Client GROQ_API_KEY = "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" client = Groq(api_key=GROQ_API_KEY) # Load Pretrained Embedding Model embedding_model = SentenceTransformer("all-MiniLM-L6-v2") # Load Sample Environmental Dataset (Replace with your own) 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"}, # Add more entries as needed ] # Generate embeddings for the dataset 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) # Function to retrieve relevant 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 # Function to generate an EIA report def generate_eia_report(project_type, location, size): # Combine user input into a query query = f"Project Type: {project_type}, Location: {location}, Size: {size}. Provide related environmental impact details." # Retrieve relevant context relevant_data = retrieve_relevant_data(query) context = " ".join(relevant_data) # Use Groq API to generate a detailed report 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 # Define Gradio Interface 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}" # Gradio App 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." ) # Launch Gradio App if __name__ == "__main__": interface.launch()