README and its create invoice not generate

This commit is contained in:
Steve Androulakis
2025-01-06 11:15:34 -08:00
parent 1e9f3b4111
commit 99b11099af
3 changed files with 10 additions and 10 deletions

View File

@@ -2,16 +2,16 @@
Work in progress. 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 ## Setup
* Requires an OpenAI key for the gpt-4o model. Set this in the `OPENAI_API_KEY` environment variable in .env * 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 * 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) * 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. * 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/) * 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. * 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 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` * Install the dependencies: `poetry install`
@@ -22,6 +22,8 @@ Deprecated:
## Running the example ## Running the example
### Temporal
From the /scripts directory: From the /scripts directory:
1. Run the worker: `poetry run python run_worker.py` 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. 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. - `poetry run uvicorn api.main:app --reload` to start the API server.
- Access the API at `/docs` to see the available endpoints. - Access the API at `/docs` to see the available endpoints.
## UI ### UI
- `cd frontend` - `cd frontend`
- `npm install` to install the dependencies. - `npm install` to install the dependencies.
- `npm run dev` to start the dev server. - `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) - See main.py where some tool-specific logic is defined (todo, move this to the tool definition)
## TODO ## 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). - 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. - Currently hardcoded to the Temporal dev server at localhost:7233. Need to support options incl Temporal Cloud.
- UI: Make prettier - UI: Make prettier
- UI: Tool Confirmed state could be better represented

View File

@@ -104,7 +104,7 @@ export default function App() {
return ( return (
<div className="flex flex-col h-screen"> <div className="flex flex-col h-screen">
<NavBar title="Temporal AI Agent" /> <NavBar title="Temporal AI Agent 🤖" />
{/* Centered content, but no manual bottom margin */} {/* Centered content, but no manual bottom margin */}
<div className="flex-grow flex justify-center px-4 py-2 overflow-hidden"> <div className="flex-grow flex justify-center px-4 py-2 overflow-hidden">

View File

@@ -10,7 +10,7 @@ goal_event_flight_invoice = AgentGoal(
description="Help the user gather args for these tools in order: " description="Help the user gather args for these tools in order: "
"1. FindEvents: Find an event to travel to " "1. FindEvents: Find an event to travel to "
"2. SearchFlights: search for a flight around the event dates " "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( example_conversation_history="\n ".join(
[ [
"user: I'd like to travel to an event", "user: I'd like to travel to an event",