Spaces:
Sleeping
Sleeping
File size: 3,628 Bytes
d7697ac 67164b3 694caf5 48c7413 52a4245 d7697ac 551a0b5 5dacb50 5279d37 189f24f 5279d37 d7697ac 551a0b5 d7697ac 189f24f d7697ac 189f24f 551a0b5 7a67fb8 189f24f 551a0b5 189f24f 551a0b5 189f24f d62df08 7a67fb8 551a0b5 7a67fb8 d62df08 7a67fb8 551a0b5 7a67fb8 3309025 7a67fb8 551a0b5 7a67fb8 551a0b5 7a67fb8 d62df08 551a0b5 d62df08 7a67fb8 d62df08 551a0b5 d62df08 979fe41 5279d37 7a67fb8 551a0b5 5279d37 8ed3737 d7697ac 5c2d571 c7648a4 189f24f db4a355 5c2d571 189f24f |
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
import gradio as gr
import openai
from dotenv import load_dotenv
import os
import time
from gradio_client import Client
current_thread_id = None
title = "# Welcome to 🙋🏻♂️Tonic's🕵🏻♂️Bulbi🪴Plant👩🏻⚕️Doctor!"
description = """Here you can use Bulbi - an OpenAI agent that helps you save your plants!
OpenAI doesnt let you use Agents without paying for it, so I made you an interface you can use for free !
### How to use:
- Introduce your🌵plant below.
- Be as🌿descriptive as possible.
- **Respond with additional🗣️information when prompted.**
- Save your plants with👨🏻⚕️Bulbi Plant Doctor!
### Join us:
[Join my active builders' server on discord](https://discord.gg/VqTxc76K3u). Let's build together!
Big thanks to 🤗Huggingface Organisation for the🫂Community Grant"""
examples = [
["My Eucalyptus tree is struggling outside in the cold weather in Europe",True, None],
["My calathea house plant is yellowing.",True, None],
["We have a cactus at work that suddenly started yellowing and wilting.",True, None]
]
load_dotenv()
openai.api_key = os.getenv('OPENAI_API_KEY')
assistant_id = os.getenv('ASSISTANT_ID')
client = openai.OpenAI(api_key=openai.api_key)
thread_ids = {}
def ask_openai(question, start_new_thread=True, selected_thread_id=None):
global thread_ids
try:
if start_new_thread or selected_thread_id not in thread_ids:
thread = client.beta.threads.create()
current_thread_id = thread.id
thread_ids[current_thread_id] = thread.id
else:
current_thread_id = thread_ids[selected_thread_id]
client.beta.threads.messages.create(
thread_id=current_thread_id,
role="user",
content=question,
)
run = client.beta.threads.runs.create(
thread_id=current_thread_id,
assistant_id=assistant_id
)
response_received = False
timeout = 150
start_time = time.time()
while not response_received and time.time() - start_time < timeout:
run_status = client.beta.threads.runs.retrieve(
thread_id=current_thread_id,
run_id=run.id,
)
if run_status.status == 'completed':
response_received = True
else:
time.sleep(4)
if not response_received:
return "Response timed out."
steps = client.beta.threads.runs.steps.list(
thread_id=current_thread_id,
run_id=run.id
)
if steps.data:
last_step = steps.data[-1]
if last_step.type == 'message_creation':
message_id = last_step.step_details.message_creation.message_id
message = client.beta.threads.messages.retrieve(
thread_id=current_thread_id,
message_id=message_id
)
if message.content and message.content[0].type == 'text':
return message.content[0].text.value
return "No response."
except Exception as e:
return f"An error occurred: {str(e)}"
iface = gr.Interface(
title=title,
description=description,
fn=ask_openai,
inputs=[
gr.Textbox(lines=5, placeholder="Hi there, I have a plant that's..."),
gr.Checkbox(label="Start a new conversation thread"),
gr.Dropdown(label="Select previous thread", choices=list(thread_ids.keys()))
],
outputs=gr.Markdown(),
examples=examples
)
iface.launch() |