Spaces:
Sleeping
Sleeping
File size: 2,450 Bytes
1bf38da 0e46ae7 b34eeab f4b21ec 2b23f98 0e46ae7 1bf38da 2616683 0e46ae7 1bf38da 0e46ae7 1bf38da 25c8d3c 1bf38da 2a32308 0e46ae7 1bf38da 156d641 1bf38da 156d641 25c8d3c 9587196 156d641 1bf38da 156d641 1bf38da 2a32308 1bf38da 2a32308 1bf38da |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
import os
import json
import google.generativeai as genai
import gradio as gr
# Configure the Gemini API
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
# Define the system instruction (pre_prompt)
pre_prompt = """
You are a chemistry expert. Break down the given chemical reaction mechanism into simple steps.
The output should be in JSON format with the following structure:
{
"step 1": {
"reactants": ["reactant 1", "reactant 2"],
"products": ["product 1", "product 2"],
"mechanism": "Describe the perfectly logical reason behind this step, such as driving force, why bonds breaking, why bonds forming, electron transfer, what caused it.",
"reagent": "Optional reagent or conditions for this step",
"conditions": "Optional environmental conditions like temperature and pressure for this step"
},
"step 2": { ... }
...
}
DO NOT USE CODEBLOCK or any markdown. Simply write the JSON only.
"""
# Define the model with the system instruction (pre_prompt)
model = genai.GenerativeModel(
model_name="gemini-1.5-flash",
system_instruction=pre_prompt
)
# Function to generate steps for A -> D flow
def generate_reaction_steps(reactants, products):
prompt = f"Given reactants: {reactants} and products: {products}, break down the reaction mechanism into simple steps in JSON format."
chat_session = model.start_chat(history=[])
response = chat_session.send_message(prompt)
# Extract the JSON content from the response
try:
# Parsing the raw response to extract the JSON text
content = response.text
print(response)
print("\n\n\n")
print(content)
# Loading the JSON string to a Python dictionary
steps = json.loads(content)
except (json.JSONDecodeError, KeyError):
steps = {"error": "Failed to decode JSON from Gemini response."}
return steps
# Gradio interface
def process_reaction(reactants, products):
steps = generate_reaction_steps(reactants, products)
return json.dumps(steps, indent=4)
# Create the Gradio interface
iface = gr.Interface(
fn=process_reaction,
inputs=[gr.Textbox(label="Reactants (comma-separated)"), gr.Textbox(label="Products (comma-separated)")],
outputs="json",
title="Chemistry Rationalizer",
description="Break down a reaction mechanism into simple steps."
)
if __name__ == "__main__":
iface.launch()
|