mirror of
https://github.com/temporal-community/temporal-ai-agent.git
synced 2026-03-15 14:08:08 +01:00
README and its create invoice not generate
This commit is contained in:
14
README.md
14
README.md
@@ -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
|
|
||||||
@@ -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">
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user