diff --git a/README.md b/README.md index 30d7d6c..9dfc759 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,16 @@ Work in progress. -This demo shows a multi-turn conversation with an AI agent running inside a Temporal workflow. The goal is to collect information towards a goal. There's a simple DSL input for collecting information (currently set up to use mock functions to search for events, book flights around those events then generate an invoice for those flights, see `send_message.py`). The AI will respond with clarifications and ask for any missing information to that goal. It uses a local LLM via Ollama. +This demo shows a multi-turn conversation with an AI agent running inside a Temporal workflow. The goal is to collect information towards a goal. There's a simple DSL input for collecting information (currently set up to use mock functions to search for events, book flights around those events then create an invoice for those flights, see `send_message.py`). The AI will respond with clarifications and ask for any missing information to that goal. It uses a local LLM via Ollama. ## Setup * Requires an OpenAI key for the gpt-4o model. Set this in the `OPENAI_API_KEY` environment variable in .env * Requires a rapidapi key for sky-scrapper (how we find flights). Set this in the `RAPIDAPI_KEY` environment variable in .env * It's free to sign up and get a key at [RapidAPI](https://rapidapi.com/apiheya/api/sky-scrapper) * If you're lazy go to `tools/search_flights.py` and replace the `get_flights` function with the mock `search_flights_example` that exists in the same file. -* Requires a Stripe key for the `generate_invoice` tool. Set this in the `STRIPE_API_KEY` environment variable in .env +* Requires a Stripe key for the `create_invoice` tool. Set this in the `STRIPE_API_KEY` environment variable in .env * It's free to sign up and get a key at [Stripe](https://stripe.com/) - * If you're lazy go to `tools/generate_invoice.py` and replace the `generate_invoice` function with the mock `generate_invoice_example` that exists in the same file. + * If you're lazy go to `tools/create_invoice.py` and replace the `create_invoice` function with the mock `create_invoice_example` that exists in the same file. * See .env_example for the required environment variables. * Install and run Temporal. Follow the instructions in the [Temporal documentation](https://learn.temporal.io/getting_started/python/dev_environment/#set-up-a-local-temporal-service-for-development-with-temporal-cli) to install and run the Temporal server. * Install the dependencies: `poetry install` @@ -22,6 +22,8 @@ Deprecated: ## Running the example +### Temporal + From the /scripts directory: 1. Run the worker: `poetry run python run_worker.py` @@ -46,11 +48,11 @@ The chat session will end if it has collected enough information to complete the Run query get_tool_data to see the data the tool has collected so far. -## API +### API - `poetry run uvicorn api.main:app --reload` to start the API server. - Access the API at `/docs` to see the available endpoints. -## UI +### UI - `cd frontend` - `npm install` to install the dependencies. - `npm run dev` to start the dev server. @@ -62,8 +64,6 @@ Run query get_tool_data to see the data the tool has collected so far. - See main.py where some tool-specific logic is defined (todo, move this to the tool definition) ## TODO -- Code GenerateInvoice against the Stripe API - I should prove this out with other tool definitions outside of the event/flight search case (take advantage of my nice DSL). - Currently hardcoded to the Temporal dev server at localhost:7233. Need to support options incl Temporal Cloud. -- UI: Make prettier -- UI: Tool Confirmed state could be better represented \ No newline at end of file +- UI: Make prettier \ No newline at end of file diff --git a/frontend/src/pages/App.jsx b/frontend/src/pages/App.jsx index 0272253..7e53144 100644 --- a/frontend/src/pages/App.jsx +++ b/frontend/src/pages/App.jsx @@ -104,7 +104,7 @@ export default function App() { return (
- + {/* Centered content, but no manual bottom margin */}
diff --git a/tools/goal_registry.py b/tools/goal_registry.py index 3052f09..ccc9c79 100644 --- a/tools/goal_registry.py +++ b/tools/goal_registry.py @@ -10,7 +10,7 @@ goal_event_flight_invoice = AgentGoal( description="Help the user gather args for these tools in order: " "1. FindEvents: Find an event to travel to " "2. SearchFlights: search for a flight around the event dates " - "3. GenerateInvoice: Create a simple invoice for the cost of that flight ", + "3. CreateInvoice: Create a simple invoice for the cost of that flight ", example_conversation_history="\n ".join( [ "user: I'd like to travel to an event",