Spaces:
Running
Running
import gradio as gr | |
import requests | |
import os | |
# Load instructions from local files | |
def load_instruction(persona): | |
try: | |
with open(f"instructions/{persona.lower()}.txt", "r") as file: | |
return file.read() | |
except FileNotFoundError: | |
return "" | |
# Call Cohere R+ model via API | |
def call_cohere_api(system_instruction, user_prompt): | |
headers = { | |
"Authorization": f"Bearer {os.getenv('COHERE_API_KEY')}", | |
"Content-Type": "application/json" | |
} | |
payload = { | |
"model": "command-r-plus", | |
"message": user_prompt, | |
"preamble": system_instruction, | |
"max_tokens": 300 | |
} | |
response = requests.post("https://api.cohere.ai/v1/chat", headers=headers, json=payload) | |
if response.status_code == 200: | |
return response.json().get("text", "No response") | |
else: | |
return f"Error: {response.status_code} - {response.text}" | |
# Wrapper for dual assistant responses | |
def ask_forest_oracle(persona1, persona2, prompt): | |
instruction1 = load_instruction(persona1) | |
instruction2 = load_instruction(persona2) | |
response1 = call_cohere_api(instruction1, prompt) | |
response2 = call_cohere_api(instruction2, prompt) | |
return response1.strip(), response2.strip() | |
# UI Elements | |
import os | |
# Dynamically load persona names from instructions folder | |
personas = [ | |
os.path.splitext(f)[0].capitalize() | |
for f in os.listdir("instructions") | |
if f.endswith(".txt") | |
] | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
with gr.Column(scale=0.15): | |
gr.Image(value="data/MoreThanHumanVoices.png", label="More Than Human Voices", show_label=False) | |
with gr.Column(): | |
gr.Markdown("""# More Than Human Voices 🌳🪶 | |
*Conversations with the more-than-human world.* | |
This interactive experience allows you to ask questions to non-human personas—trees, crows, fungi, rivers—each responding from their own unique ecological viewpoint. | |
Rooted in poetic imagination but grounded in scientific truth, these voices offer insight into the living Earth and our entanglement with it. | |
""") | |
with gr.Row(): | |
persona1 = gr.Dropdown(personas, label="Choose First Persona", value="Tree") | |
persona2 = gr.Dropdown(personas, label="Choose Second Persona", value="Crow") | |
with gr.Row(): | |
user_input = gr.Textbox(label="Your Question to them", placeholder="e.g., What do you think of humans?", lines=2) | |
with gr.Row(): | |
ask_button = gr.Button("Submit question") | |
with gr.Row(): | |
output1 = gr.Textbox(label="Response from Persona 1") | |
output2 = gr.Textbox(label="Response from Persona 2") | |
ask_button.click(fn=ask_forest_oracle, inputs=[persona1, persona2, user_input], outputs=[output1, output2]) | |
if __name__ == "__main__": | |
demo.launch() | |