Showing preview only (390K chars total). Download the full file or copy to clipboard to get everything.
Repository: agora-protocol/paper-demo
Branch: main
Commit: 9dfe6837ee1e
Files: 38
Total size: 374.5 KB
Directory structure:
gitextract_gcfiyf96/
├── .gitignore
├── README.md
├── actions.json
├── agents/
│ ├── common/
│ │ └── core.py
│ ├── protocol_db/
│ │ └── main.py
│ ├── server/
│ │ ├── config.py
│ │ ├── main.py
│ │ └── memory.py
│ └── user/
│ ├── config.py
│ ├── main.py
│ ├── memory.py
│ └── protocol_management.py
├── compute_costs.py
├── config.json
├── generate_screenplay.py
├── generate_users.py
├── mocks/
│ ├── mock_tasks.py
│ └── mock_tools.py
├── models/
│ └── openai_model.py
├── orchestrator.py
├── requirements.txt
├── specialized_toolformers/
│ ├── negotiator.py
│ ├── programmer.py
│ ├── protocol_checker.py
│ ├── querier.py
│ └── responder.py
├── toolformers/
│ ├── __init__.py
│ ├── base.py
│ ├── camel.py
│ ├── gemini.py
│ ├── llama/
│ │ ├── __init__.py
│ │ ├── api_gateway.py
│ │ ├── function_calling.py
│ │ ├── llama.py
│ │ ├── sambanova_langchain.py
│ │ └── utils.py
│ └── unified.py
└── utils.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
/**/__pycache__/**
venv/**
.env
past_experiments/**
new_tests/**
script_utils/**
storage/**
logs/**
databases/**
================================================
FILE: README.md
================================================
# Agora - A Scalable Communication Protocol for Networks of LLMs
[Paper](https://arxiv.org/abs/2410.11905) | [Website](https://agoraprotocol.org) | [Twitter](https://x.com/Agora_Protocol) | [Discord](https://discord.gg/MXmfhwQ4FB) | [Mailing List](https://forms.gle/KeCMveoRGx2S3i5CA)
## **Important**: This demo was originally made for the paper. Check out our [updated HuggingFace demo](https://huggingface.co/spaces/agora-protocol/agora-demo) and our [Python library](https://github.com/agora-protocol/python).
Agora is a simple cross-platform protocol that allows heterogeneous LLMs to communicate efficienly with each other.
This is achieved through the power of **negotiation**.
In particular, Agora agents operate as follows:
1. For rare communications, they use LLMs to talk with each other in natural language
2. For frequent communications, they use LLMs to negotiate a protocol for communication, usually involving structured data (e.g. JSON)
3. Once a protocol is finalized, they use LLMs to implement _routines_, simple scripts (e.g. in Python) that send or receive data
4. Future communications are handled using the routines, which means that LLMs aren't required anymore
Since natural language is supported, very different agents that have never interacted before can communicate with each other, but once a common ground is established they just use routines, which are way more efficient. This enables agents to achieve at the same time **efficiency**, **versatility** and **portability**.
## The Demo
This demo showcases a network of 100 agents interacting with each other. The agents have different LLMs (OpenAI GPT-4o, Llama 3 405b, Gemini 1.5 Pro) and different DB technologies (MongoDB, SQL), but they still complete complex, multi-agent tasks with way lower costs. In a picture:
<img src="./static/readme_comparison.png?raw=true">
You might also be interested in our [HuggingFace demo](https://huggingface.co/spaces/agora-protocol/agora-demo).
## Running the Demo
1. `mv .env.template .env`
2. Add the corresponding fields to the `.env` file
3. `pip install -r requirements.txt`
4. `python orchestrator.py`
## Contributing
We're building the next iteration of Agora, with more features for real-world use cases. If you're interested in contributing or simply want to stay updated about Agora, check out our [Discord](https://discord.gg/MXmfhwQ4FB) or subscribe to our [Mailing List](https://forms.gle/KeCMveoRGx2S3i5CA)
================================================
FILE: actions.json
================================================
[
[
"phenex",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "68 Wilson Street"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "21 Taylor Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-04",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-09-14"
}
],
[
"bune",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "9 Davis Street"
}
],
[
"valefor",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-09-05"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "2 Brown Street",
"time": "20:57"
}
],
[
"marbas",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 18,
"numTickets": 2,
"movie": "Forrest Gump"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "62 Davis Street"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-06-19"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "62 Johnson Street"
}
],
[
"paimon",
[
"restaurant1",
"openingTimes"
],
{}
],
[
"sitri",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-08-11",
"endDate": "2024-08-28"
}
],
[
"valefor",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-06"
}
],
[
"naberius",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "71 Johnson Street",
"time": "2:15"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-21",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-03",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "10 Smith Street",
"time": "0:49"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "83 Jones Street",
"time": "20:1"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-09-17",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-08-24"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-04-20"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-17",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-05",
"type": "carving"
}
],
[
"ipos",
[
"taxi2",
"callTaxi"
],
{
"address": "60 Williams Street",
"time": "10:11"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "75 Brown Street",
"time": "5:59"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-23",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-14",
"type": "carving"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Toby Williams",
"date": "2024-07-21",
"numPeople": 1,
"hour": 19
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-22",
"type": "racing"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "88 Williams Street",
"time": "13:56"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Laurel Miller",
"date": "2024-03-07",
"numPeople": 8,
"hour": 20
}
],
[
"caim",
[
"taxi2",
"callTaxi"
],
{
"address": "9 Johnson Street",
"time": "18:38"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-25"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "31 Johnson Street",
"time": "18:46"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Brooke Brown",
"date": "2024-07-09",
"numPeople": 10,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-14"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-27",
"type": "backcountry"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-18",
"type": "racing"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Maxwell Davis",
"date": "2024-08-31",
"numPeople": 7,
"hour": 18
}
],
[
"samigina",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Maxwell Smith",
"date": "2024-05-21",
"numPeople": 5,
"hour": 18
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-25",
"type": "carving"
}
],
[
"leraje",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-08-23",
"endDate": "2024-08-31"
}
],
[
"beleth",
[
"restaurant1",
"openingTimes"
],
{}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-14",
"type": "carving"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Madge Miller",
"date": "2024-09-11",
"numPeople": 1,
"hour": 17
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-30",
"type": "carving"
}
],
[
"bifrons",
[
"taxi1",
"callTaxi"
],
{
"address": "79 Miller Street",
"time": "11:28"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-20",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-09-07"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "100 Miller Street",
"time": "23:58"
}
],
[
"purson",
[
"trafficServer",
"getTraffic"
],
{
"date": "2024-03-05",
"location": "Zurich"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-22",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-15",
"type": "carving"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-05-04",
"endDate": "2024-05-05"
}
],
[
"andras",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Nina Johnson",
"date": "2023-10-02",
"numPeople": 6,
"hour": 16
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "87 Johnson Street",
"time": "19:1"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-24",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-02",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-25"
}
],
[
"sitri",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-06-20",
"endDate": "2024-06-26"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "20 Wilson Street",
"time": "18:44"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-12",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-05",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-25",
"type": "carving"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "45 Miller Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-04",
"type": "carving"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-04",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-27",
"type": "carving"
}
],
[
"buer",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-25"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-07",
"type": "racing"
}
],
[
"halphas",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-02-18",
"endDate": "2024-02-26"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2023-10-11",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-26",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-02-07"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-19",
"type": "carving"
}
],
[
"marchosias",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-01-16",
"endDate": "2024-01-21"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-03-21"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-23",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-03-07"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-24",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "36 Wilson Street",
"time": "20:41"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-29"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-09-23",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-19",
"type": "backcountry"
}
],
[
"guison",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-19"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-06",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-30",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-23",
"type": "carving"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-03-20",
"endDate": "2024-04-07"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-13",
"type": "backcountry"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "81 Davis Street"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-04-15",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-01",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-01",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-08",
"type": "racing"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-23",
"type": "backcountry"
}
],
[
"guison",
[
"taxi2",
"callTaxi"
],
{
"address": "31 White Street",
"time": "21:15"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "11 Wilson Street",
"time": "18:40"
}
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 18,
"numTickets": 3,
"movie": "Stand by Me"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2023-09-27",
"type": "backcountry"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Cliff Miller",
"date": "2023-10-26",
"numPeople": 10,
"hour": 17
}
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-18"
],
"hour": 18,
"numTickets": 2,
"movie": "Forrest Gump"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-07-03",
"endDate": "2024-07-08"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-27",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-21",
"type": "backcountry"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"marbas",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-08-21",
"endDate": "2024-08-23"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-05",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-09-28",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-02",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "33 Williams Street",
"time": "4:17"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Cliff Jones",
"date": "2024-02-18",
"numPeople": 9,
"hour": 23
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-14",
"type": "racing"
}
],
[
"ronove",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 18,
"numTickets": 1,
"movie": "Stand by Me"
}
],
[
"vassago",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Toby Davis",
"date": "2024-05-22",
"numPeople": 8,
"hour": 21
}
],
[
"botis",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-27",
"type": "racing"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-23",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "39 Jones Street",
"time": "7:57"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "16 Smith Street",
"time": "21:57"
}
],
[
"leraje",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-07-02",
"endDate": "2024-07-06"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-09-28"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-05-16"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-08-08"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "70 Davis Street",
"time": "8:53"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-11",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "41 Jones Street",
"time": "20:58"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "31 Williams Street",
"time": "10:56"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-10",
"type": "racing"
}
],
[
"amon",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-08-08",
"endDate": "2024-08-13"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-20",
"type": "carving"
}
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-15"
],
"hour": 20,
"numTickets": 1,
"movie": "The Silence of the Lambs"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "100 White Street",
"time": "7:59"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-11-25"
}
],
[
"marbas",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2023-11-22",
"endDate": "2023-11-30"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Kara Smith",
"date": "2024-06-02",
"numPeople": 10,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-26"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"stolas",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "49 Jones Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-30",
"type": "racing"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-08-31",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "28 Davis Street",
"time": "18:4"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-15",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-05-23"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-12",
"type": "backcountry"
}
],
[
"marax",
[
"trafficServer",
"getTraffic"
],
{
"date": "2023-09-29",
"location": "London"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-08-12"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-21"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "55 Williams Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-09-25",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-26",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "11 Taylor Street",
"time": "13:35"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-21",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-27",
"type": "racing"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "48 Wilson Street"
}
],
[
"valefor",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-05",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "5 Taylor Street",
"time": "4:42"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "67 Wilson Street"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"paimon",
[
"restaurant1",
"openingTimes"
],
{}
],
[
"zepar",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-15"
],
"hour": 18,
"numTickets": 6,
"movie": "Forrest Gump"
}
],
[
"naberius",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "11 White Street",
"time": "2:8"
}
],
[
"aim",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-18"
],
"hour": 20,
"numTickets": 4,
"movie": "Forrest Gump"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-10-15"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "28 Jones Street",
"time": "0:24"
}
],
[
"valefor",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-26",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-03",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-19",
"type": "carving"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Nina Johnson",
"date": "2023-12-01",
"numPeople": 6,
"hour": 19
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-18",
"type": "backcountry"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-02-04"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "75 Taylor Street",
"time": "9:58"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-12",
"type": "carving"
}
],
[
"asmoday",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-15"
],
"hour": 20,
"numTickets": 2,
"movie": "Stand by Me"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Valerie Williams",
"date": "2024-01-29",
"numPeople": 1,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-09",
"type": "backcountry"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "51 Taylor Street",
"time": "22:38"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "81 Johnson Street",
"time": "8:53"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-25",
"type": "backcountry"
}
],
[
"orobas",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-03-02",
"endDate": "2024-03-21"
}
],
[
"botis",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-24",
"type": "carving"
}
],
[
"berith",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-05",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "87 Wilson Street",
"time": "17:58"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-09",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-10-07"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "20 White Street",
"time": "8:51"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "17 Davis Street",
"time": "17:0"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Nina Jones",
"date": "2024-09-21",
"numPeople": 3,
"hour": 17
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-05"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "95 Johnson Street"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Nina Williams",
"date": "2024-09-19",
"numPeople": 1,
"hour": 16
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-08-12"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-17",
"type": "backcountry"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-03-30",
"endDate": "2024-04-04"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "55 Davis Street"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "100 Jones Street",
"time": "9:38"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-14",
"type": "racing"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Toby Miller",
"date": "2023-10-25",
"numPeople": 2,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-17",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-10"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-21",
"type": "backcountry"
}
],
[
"marchosias",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"sallos",
[
"restaurant2",
"openingTimes"
],
{}
],
[
"valefor",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-01",
"type": "carving"
}
],
[
"purson",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-25",
"type": "backcountry"
}
],
[
"buer",
[
"restaurant3",
"openingTimes"
],
{}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-06-04",
"endDate": "2024-06-18"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "35 Wilson Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-26",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-30",
"type": "backcountry"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-07-04",
"endDate": "2024-07-14"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-06"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-24",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "79 Wilson Street",
"time": "13:18"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Valerie Smith",
"date": "2024-07-26",
"numPeople": 7,
"hour": 16
}
],
[
"vassago",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Maxwell Brown",
"date": "2024-08-10",
"numPeople": 7,
"hour": 16
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "4 Jones Street",
"time": "17:12"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-19"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-13",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "1 Brown Street",
"time": "13:1"
}
],
[
"guison",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-16",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-11",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "39 Miller Street",
"time": "5:8"
}
],
[
"leraje",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-06-15"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-08",
"type": "backcountry"
}
],
[
"cimeies",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-04",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-07",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "27 Williams Street",
"time": "23:39"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-06-11",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-31",
"type": "backcountry"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "51 White Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-09",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-21",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "32 Johnson Street",
"time": "6:9"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-05",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "90 Williams Street",
"time": "0:23"
}
],
[
"buer",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-08-11"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-14",
"type": "carving"
}
],
[
"furcas",
[
"cinema2",
"buyTickets"
],
{
"date": [
"2024-03-15"
],
"hour": 20,
"numTickets": 4,
"movie": "Forrest Gump"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Brooke Brown",
"date": "2024-03-03",
"numPeople": 1,
"hour": 23
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-13",
"type": "racing"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-03-07",
"type": "carving"
}
],
[
"eligos",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "79 White Street"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "41 White Street",
"time": "0:4"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"zepar",
[
"weatherServer",
"queryWeather"
],
{
"date": "2024-05-11",
"location": "New York, USA"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "8 Jones Street"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "56 Smith Street",
"time": "1:11"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-05-25",
"type": "carving"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Cliff Johnson",
"date": "2024-03-08",
"numPeople": 1,
"hour": 20
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-08-07"
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-08-07",
"endDate": "2024-08-25"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-03-09"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-08-30"
}
],
[
"gaap",
[
"restaurant2",
"openingTimes"
],
{}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Cliff Johnson",
"date": "2024-05-07",
"numPeople": 8,
"hour": 23
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "71 Jones Street",
"time": "3:45"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Toby Johnson",
"date": "2023-11-11",
"numPeople": 8,
"hour": 18
}
],
[
"vepar",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-17"
],
"hour": 18,
"numTickets": 5,
"movie": "Forrest Gump"
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-02-15",
"endDate": "2024-02-25"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "51 Wilson Street",
"time": "17:3"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "52 Brown Street"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"haures",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "63 Williams Street"
}
],
[
"leraje",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-04-01",
"endDate": "2024-04-05"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "6 Smith Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-18",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "45 Johnson Street",
"time": "20:57"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-01-24"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "30 Brown Street",
"time": "11:39"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "19 Williams Street"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "49 Miller Street"
}
],
[
"astaroth",
[
"restaurant3",
"openingTimes"
],
{}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-03-25"
}
],
[
"seere",
[
"restaurant3",
"openingTimes"
],
{}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"beleth",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2023-11-21",
"endDate": "2023-11-27"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-17",
"type": "carving"
}
],
[
"amon",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-03-16",
"endDate": "2024-03-20"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "33 Smith Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-21",
"type": "carving"
}
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-18"
],
"hour": 18,
"numTickets": 2,
"movie": "Forrest Gump"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-06",
"type": "backcountry"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Valerie Miller",
"date": "2024-09-06",
"numPeople": 4,
"hour": 19
}
],
[
"vassago",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Nina Wilson",
"date": "2024-07-31",
"numPeople": 2,
"hour": 16
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "85 Smith Street"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-30",
"type": "carving"
}
],
[
"bune",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-07-10",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-17",
"type": "backcountry"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "47 White Street",
"time": "22:4"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-13",
"type": "carving"
}
],
[
"botis",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-01",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-26"
}
],
[
"guison",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-08-29"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-06",
"type": "carving"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "6 Williams Street"
}
],
[
"paimon",
[
"restaurant1",
"openingTimes"
],
{}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "79 Wilson Street",
"time": "1:41"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "59 Jones Street",
"time": "5:49"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "54 Brown Street",
"time": "13:8"
}
],
[
"botis",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-02",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "26 Johnson Street",
"time": "5:11"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-03-12"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-06",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "98 Williams Street",
"time": "4:9"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-18",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-16",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-06-26"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-13",
"type": "backcountry"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-19"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Kara Davis",
"date": "2024-07-19",
"numPeople": 9,
"hour": 16
}
],
[
"asmoday",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-08-28"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-02-06"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-19",
"type": "backcountry"
}
],
[
"enepsigon",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Brooke Wilson",
"date": "2024-03-15",
"numPeople": 10,
"hour": 18
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "96 Jones Street",
"time": "22:28"
}
],
[
"naberius",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-01-19",
"endDate": "2024-01-28"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-25",
"type": "backcountry"
}
],
[
"valefor",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-06",
"type": "backcountry"
}
],
[
"zagan",
[
"hotel2",
"bookRoom"
],
{
"startDate": "2024-04-23",
"endDate": "2024-05-13"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-05-17"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-01",
"type": "racing"
}
],
[
"forneus",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-10"
}
],
[
"vassago",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Laurel Johnson",
"date": "2024-07-10",
"numPeople": 9,
"hour": 16
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "3 Wilson Street",
"time": "23:51"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-06",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-11",
"type": "backcountry"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"eligos",
[
"trafficServer",
"getTraffic"
],
{
"date": "2024-03-14",
"location": "Zurich"
}
],
[
"haagenti",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-02-12"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "90 Williams Street",
"time": "13:16"
}
],
[
"envy",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-09-06",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-17",
"type": "backcountry"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2023-10-23",
"type": "carving"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-23",
"type": "carving"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "94 Wilson Street"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Valerie White",
"date": "2024-03-29",
"numPeople": 4,
"hour": 21
}
],
[
"vassago",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Valerie Brown",
"date": "2024-07-15",
"numPeople": 4,
"hour": 18
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-11",
"type": "racing"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-03",
"type": "racing"
}
],
[
"leraje",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2023-12-03",
"endDate": "2023-12-23"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "79 Brown Street",
"time": "2:36"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-13",
"type": "racing"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"glasya-labolas",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-04-25",
"endDate": "2024-04-26"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-20",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-30",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-27"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-02-06"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-29",
"type": "carving"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "60 Miller Street"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-09-02"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-23",
"type": "carving"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Kara Davis",
"date": "2024-05-12",
"numPeople": 9,
"hour": 16
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-07",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "82 Williams Street",
"time": "10:17"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-04-30"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-27",
"type": "backcountry"
}
],
[
"vassago",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Manfred White",
"date": "2024-04-12",
"numPeople": 2,
"hour": 16
}
],
[
"beleth",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-01-17",
"endDate": "2024-01-30"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-10-01"
}
],
[
"raum",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2023-10-05",
"endDate": "2023-10-07"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-07",
"type": "carving"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-02",
"type": "racing"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-07-14",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-09-07"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Nina White",
"date": "2023-11-27",
"numPeople": 1,
"hour": 19
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "28 Johnson Street",
"time": "23:49"
}
],
[
"raum",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Madge Taylor",
"date": "2023-12-12",
"numPeople": 2,
"hour": 21
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "30 Davis Street",
"time": "13:37"
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-08-09",
"endDate": "2024-08-13"
}
],
[
"guison",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-05-20",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-06-10"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-02-26"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "73 Miller Street",
"time": "3:46"
}
],
[
"zepar",
[
"weatherServer",
"queryWeather"
],
{
"date": "2024-01-11",
"location": "London, UK"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Kara Jones",
"date": "2024-05-07",
"numPeople": 4,
"hour": 16
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-02-21",
"endDate": "2024-03-04"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "37 Miller Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-02",
"type": "racing"
}
],
[
"astaroth",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2023-10-08",
"endDate": "2023-10-13"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Cliff Jones",
"date": "2024-08-01",
"numPeople": 10,
"hour": 22
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-06-01"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-05-06",
"type": "backcountry"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-05"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-01",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-07",
"type": "racing"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-05-19"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-06",
"type": "racing"
}
],
[
"sitri",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-03-21",
"endDate": "2024-03-23"
}
],
[
"pruflas",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "94 Miller Street"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "61 White Street",
"time": "7:15"
}
],
[
"botis",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-06-25",
"type": "racing"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"stolas",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-08-07",
"type": "carving"
}
],
[
"sitri",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2023-12-09",
"endDate": "2023-12-26"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-12",
"type": "racing"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "65 Jones Street"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "15 Brown Street",
"time": "0:53"
}
],
[
"sitri",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2023-11-17",
"endDate": "2023-12-03"
}
],
[
"rath",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Brooke White",
"date": "2024-03-13",
"numPeople": 9,
"hour": 23
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-15",
"type": "backcountry"
}
],
[
"barbatos",
[
"cinema2",
"buyTickets"
],
{
"date": [
"2024-03-18"
],
"hour": 20,
"numTickets": 2,
"movie": "Forrest Gump"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-09-18"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"zepar",
[
"weatherServer",
"queryWeather"
],
{
"date": "2024-06-30",
"location": "New York, USA"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-15",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-21",
"type": "backcountry"
}
],
[
"beleth",
[
"restaurant1",
"openingTimes"
],
{}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-05-24",
"endDate": "2024-05-31"
}
],
[
"crocell",
[
"trafficServer",
"getTraffic"
],
{
"date": "2024-02-24",
"location": "Zurich"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "57 Davis Street",
"time": "3:8"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-02-12",
"type": "carving"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "31 Miller Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-01",
"type": "racing"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "79 Jones Street",
"time": "22:12"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "53 Brown Street",
"time": "9:35"
}
],
[
"andrealphus",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Maxwell Wilson",
"date": "2024-03-22",
"numPeople": 5,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-21",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-09-09"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-22",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-11-18"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-17",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "24 Jones Street",
"time": "6:16"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "11 Wilson Street",
"time": "22:44"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-08",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-22",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-21",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-08",
"type": "carving"
}
],
[
"vine",
[
"weatherServer",
"queryWeather"
],
{
"date": "2024-06-20",
"location": "Paris, France"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "41 Williams Street",
"time": "23:53"
}
],
[
"amy",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-03-12",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-12",
"type": "racing"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-08-04"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "51 Miller Street",
"time": "5:50"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2023-12-15",
"endDate": "2023-12-20"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-05",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-02",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-23"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-11",
"type": "carving"
}
],
[
"vine",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Nina Miller",
"date": "2024-08-29",
"numPeople": 4,
"hour": 17
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "90 Davis Street",
"time": "14:57"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "42 Miller Street",
"time": "13:22"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-23",
"type": "backcountry"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"rabdos",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-05",
"type": "racing"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-30",
"type": "backcountry"
}
],
[
"glasya-labolas",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Manfred Brown",
"date": "2024-08-13",
"numPeople": 4,
"hour": 18
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-09-29"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-28",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "20 Taylor Street",
"time": "12:12"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-26",
"type": "carving"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-06",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-02",
"type": "carving"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Toby Brown",
"date": "2024-01-31",
"numPeople": 1,
"hour": 23
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-14",
"type": "racing"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "93 Brown Street",
"time": "2:14"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-16",
"type": "racing"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "71 White Street"
}
],
[
"shax",
[
"restaurant3",
"openingTimes"
],
{}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-14",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-08",
"type": "carving"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-05",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "15 Williams Street",
"time": "11:8"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Laurel Johnson",
"date": "2023-12-25",
"numPeople": 7,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-27",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-02",
"type": "backcountry"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2023-11-07",
"type": "carving"
}
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 20,
"numTickets": 1,
"movie": "Stand by Me"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Toby White",
"date": "2024-03-24",
"numPeople": 1,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-10",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-20"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-13"
}
],
[
"sallos",
[
"restaurant2",
"openingTimes"
],
{}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "90 Brown Street",
"time": "9:43"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "6 Williams Street",
"time": "17:50"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Toby White",
"date": "2023-10-01",
"numPeople": 6,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-09-02"
}
],
[
"ronove",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-10-23"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Cliff Taylor",
"date": "2024-06-23",
"numPeople": 2,
"hour": 23
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-21"
}
],
[
"balam",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Toby Smith",
"date": "2023-10-01",
"numPeople": 4,
"hour": 18
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"beelzebub",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 18,
"numTickets": 5,
"movie": "The Silence of the Lambs"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-07",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-31"
}
],
[
"foras",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "61 Miller Street",
"time": "5:22"
}
],
[
"furcas",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-09",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-16",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-15",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "69 White Street",
"time": "8:48"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-10-25"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"alloces",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-17"
}
],
[
"glasya-labolas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Laurel Taylor",
"date": "2024-09-01",
"numPeople": 1,
"hour": 20
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-17",
"type": "carving"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Toby Smith",
"date": "2023-12-29",
"numPeople": 10,
"hour": 21
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-07-23"
}
],
[
"vassago",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Maxwell Jones",
"date": "2024-04-05",
"numPeople": 3,
"hour": 20
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-17",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-04",
"type": "carving"
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-07-09",
"endDate": "2024-07-14"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-01",
"type": "racing"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-29",
"type": "backcountry"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-09-24"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "70 Johnson Street",
"time": "7:5"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-10",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "12 Johnson Street",
"time": "21:32"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-14",
"type": "carving"
}
],
[
"furfur",
[
"restaurant3",
"openingTimes"
],
{}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "54 Johnson Street"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "94 Brown Street",
"time": "3:11"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "70 White Street"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"leraje",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-04-25",
"endDate": "2024-05-02"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "8 Miller Street"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-01-31",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-30"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-09",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-15",
"type": "backcountry"
}
],
[
"eligos",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "50 Wilson Street"
}
],
[
"purson",
[
"trafficServer",
"getTraffic"
],
{
"date": "2023-10-20",
"location": "Los Angeles"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "46 White Street",
"time": "23:45"
}
],
[
"tephras",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-18",
"type": "backcountry"
}
],
[
"kunopaston",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-06"
}
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-15"
],
"hour": 20,
"numTickets": 6,
"movie": "Stand by Me"
}
],
[
"decarabia",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Manfred Miller",
"date": "2023-12-13",
"numPeople": 7,
"hour": 22
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-07"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "18 Johnson Street",
"time": "20:0"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-23",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-04-18"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-18",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-24",
"type": "carving"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-29"
}
],
[
"beleth",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-05-15",
"endDate": "2024-05-31"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-10-05"
}
],
[
"eligos",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "21 Brown Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-17",
"type": "carving"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-06-22",
"endDate": "2024-07-07"
}
],
[
"amon",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-20",
"type": "carving"
}
],
[
"eligos",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "53 Williams Street"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-20",
"type": "backcountry"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-12-18"
}
],
[
"foras",
[
"taxi2",
"callTaxi"
],
{
"address": "42 Brown Street",
"time": "12:22"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "26 Williams Street",
"time": "1:36"
}
],
[
"barbatos",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-09-11"
}
],
[
"beleth",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-08-24",
"endDate": "2024-09-01"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Valerie Miller",
"date": "2024-06-09",
"numPeople": 6,
"hour": 18
}
],
[
"guison",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"guison",
[
"taxi2",
"callTaxi"
],
{
"address": "96 White Street",
"time": "8:11"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "68 Miller Street"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"malphas",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-25",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-06-22"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-15",
"type": "racing"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-11-07"
}
],
[
"leraje",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-06-16",
"endDate": "2024-06-26"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-01",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "54 Johnson Street",
"time": "21:14"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-09-17"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "63 Brown Street",
"time": "17:0"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "49 Miller Street",
"time": "12:55"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-12",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-18",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-31",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-12",
"type": "backcountry"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Brooke Taylor",
"date": "2024-09-07",
"numPeople": 6,
"hour": 22
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Manfred Williams",
"date": "2024-07-07",
"numPeople": 6,
"hour": 21
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "25 Taylor Street",
"time": "20:51"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-11",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-13",
"type": "racing"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-06-05"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "42 Jones Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-27",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-10",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-15",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "77 Jones Street",
"time": "3:2"
}
],
[
"guison",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-25",
"type": "backcountry"
}
],
[
"forneus",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-05-29",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-12",
"type": "backcountry"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "2 Miller Street",
"time": "10:54"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-23",
"type": "carving"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-10-20"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-03",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-05",
"type": "carving"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-10-27"
}
],
[
"foras",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "4 White Street"
}
],
[
"barbatos",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-10-22"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-02",
"type": "carving"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Kara Wilson",
"date": "2023-11-24",
"numPeople": 9,
"hour": 20
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "66 Davis Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-19",
"type": "backcountry"
}
],
[
"bathin",
[
"taxi2",
"callTaxi"
],
{
"address": "59 Taylor Street",
"time": "9:14"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Kara Williams",
"date": "2024-05-04",
"numPeople": 9,
"hour": 19
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "10 Taylor Street",
"time": "21:32"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-29",
"type": "racing"
}
],
[
"orias",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "23 Davis Street"
}
],
[
"andromalius",
[
"restaurant2",
"openingTimes"
],
{}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-20",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "7 Smith Street",
"time": "0:40"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-04-23"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-06-29"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "68 Taylor Street",
"time": "2:24"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "64 White Street",
"time": "7:26"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-08",
"type": "carving"
}
],
[
"samigina",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Madge Wilson",
"date": "2024-08-18",
"numPeople": 8,
"hour": 19
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "39 Brown Street",
"time": "20:6"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-10-31"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-07",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-16",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "21 Williams Street",
"time": "2:11"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "91 White Street",
"time": "8:59"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-26",
"type": "racing"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "6 Miller Street"
}
],
[
"leraje",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-04-28"
}
],
[
"marbas",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-18"
],
"hour": 18,
"numTickets": 3,
"movie": "Forrest Gump"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-16",
"type": "racing"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Cliff White",
"date": "2023-11-12",
"numPeople": 5,
"hour": 20
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-18",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-14",
"type": "carving"
}
],
[
"sitri",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-01-21",
"endDate": "2024-02-09"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-03-28",
"type": "racing"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "37 Williams Street",
"time": "5:13"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-25",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-09",
"type": "racing"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-05-30",
"endDate": "2024-06-06"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-16",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "43 Johnson Street",
"time": "13:13"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-21",
"type": "backcountry"
}
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-18"
],
"hour": 18,
"numTickets": 5,
"movie": "The Silence of the Lambs"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-26",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-29",
"type": "carving"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-04-27"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-09-10"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-02-07",
"type": "carving"
}
],
[
"dantalion",
[
"weatherServer",
"queryWeather"
],
{
"date": "2023-11-06",
"location": "Paris, France"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-12",
"type": "backcountry"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-02-23"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-21",
"type": "racing"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "48 Taylor Street",
"time": "6:26"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-10",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-29",
"type": "backcountry"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-10-02"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-09-05",
"type": "carving"
}
],
[
"murmur",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-17"
],
"hour": 18,
"numTickets": 5,
"movie": "The Silence of the Lambs"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "30 Brown Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-23",
"type": "backcountry"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "36 Johnson Street"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-03-05",
"endDate": "2024-03-11"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-02-08"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "37 Brown Street",
"time": "9:28"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"aim",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-09-04",
"endDate": "2024-09-05"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-18",
"type": "carving"
}
],
[
"tribolaios",
[
"restaurant3",
"openingTimes"
],
{}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "59 Taylor Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-06",
"type": "racing"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-08",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-11",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-19",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-15",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-05-10"
}
],
[
"ipos",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-05-09",
"endDate": "2024-05-20"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-02",
"type": "racing"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "51 Taylor Street",
"time": "5:9"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "60 Miller Street",
"time": "22:28"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-02",
"type": "backcountry"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "17 Davis Street"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-07-28",
"type": "backcountry"
}
],
[
"marbas",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-17"
],
"hour": 20,
"numTickets": 5,
"movie": "Stand by Me"
}
],
[
"obizuth",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-09",
"type": "carving"
}
],
[
"sabnock",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-05-04",
"endDate": "2024-05-19"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-08",
"type": "backcountry"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "84 Wilson Street"
}
],
[
"paimon",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Laurel Brown",
"date": "2024-03-10",
"numPeople": 9,
"hour": 17
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"amon",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-12",
"type": "backcountry"
}
],
[
"beleth",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-16",
"type": "racing"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Brooke Wilson",
"date": "2024-04-29",
"numPeople": 8,
"hour": 20
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-24",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-04"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-13",
"type": "carving"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-04-04"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "99 Jones Street",
"time": "6:39"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "11 Miller Street",
"time": "6:39"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "48 Jones Street",
"time": "2:4"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "96 Johnson Street",
"time": "8:59"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "32 Jones Street"
}
],
[
"sallos",
[
"restaurant3",
"openingTimes"
],
{}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-30",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-16",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-01",
"type": "backcountry"
}
],
[
"gaap",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-03-15",
"endDate": "2024-03-16"
}
],
[
"berith",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2023-10-23",
"endDate": "2023-11-10"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "38 Davis Street"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "31 Wilson Street",
"time": "17:42"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-01-24"
}
],
[
"bathin",
[
"taxi2",
"callTaxi"
],
{
"address": "25 Smith Street",
"time": "20:23"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-16",
"type": "carving"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "94 Taylor Street"
}
],
[
"ronove",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Valerie Jones",
"date": "2024-06-13",
"numPeople": 4,
"hour": 18
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-04-23",
"type": "carving"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Brooke Wilson",
"date": "2023-10-23",
"numPeople": 10,
"hour": 18
}
],
[
"amon",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-01-05",
"endDate": "2024-01-23"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "79 Taylor Street"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"vapula",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-08-25"
}
],
[
"sitri",
[
"restaurant1",
"openingTimes"
],
{}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-12-04"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-04-03"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-18",
"type": "carving"
}
],
[
"guison",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Toby Smith",
"date": "2024-05-14",
"numPeople": 4,
"hour": 17
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "75 Brown Street"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Manfred Taylor",
"date": "2024-09-16",
"numPeople": 9,
"hour": 19
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"sitri",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-02-28",
"endDate": "2024-03-08"
}
],
[
"bathin",
[
"taxi2",
"callTaxi"
],
{
"address": "63 White Street",
"time": "15:3"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-21",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "91 Taylor Street",
"time": "22:14"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Cliff Jones",
"date": "2024-05-07",
"numPeople": 6,
"hour": 19
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-09",
"type": "backcountry"
}
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-17"
],
"hour": 20,
"numTickets": 5,
"movie": "Stand by Me"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-08",
"type": "backcountry"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Cliff Taylor",
"date": "2024-02-28",
"numPeople": 4,
"hour": 22
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "54 Miller Street",
"time": "17:20"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-09-03",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-04",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-10",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-09-29",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-18",
"type": "racing"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-10-19"
}
],
[
"sitri",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2023-10-27",
"endDate": "2023-10-31"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-01-24",
"type": "racing"
}
],
[
"crocell",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-10",
"type": "backcountry"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-16",
"type": "backcountry"
}
],
[
"purson",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "10 Williams Street"
}
],
[
"sitri",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-04-13",
"endDate": "2024-05-03"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-26"
}
],
[
"shax",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-02-12",
"endDate": "2024-03-01"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-01",
"type": "carving"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-02-26",
"endDate": "2024-03-04"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-09-05",
"endDate": "2024-09-13"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-24",
"type": "racing"
}
],
[
"marbas",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-18"
],
"hour": 18,
"numTickets": 1,
"movie": "The Silence of the Lambs"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-31",
"type": "racing"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-02-04"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-18",
"type": "racing"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "33 Williams Street",
"time": "9:46"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-05",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-21",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-10-09"
}
],
[
"ose",
[
"skiResort1",
"rentSki"
],
{
"date": "2023-12-26",
"type": "backcountry"
}
],
[
"bune",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-13",
"type": "racing"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"sallos",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-25",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-12",
"type": "carving"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "40 Williams Street",
"time": "18:28"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "76 Miller Street",
"time": "0:10"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "65 Johnson Street"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "62 Johnson Street"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-01-21",
"endDate": "2024-02-09"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-03",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-04",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-20",
"type": "racing"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"alloces",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-15",
"type": "carving"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Brooke Jones",
"date": "2023-12-15",
"numPeople": 7,
"hour": 23
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "38 Jones Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-15",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-16"
}
],
[
"marax",
[
"hotel2",
"bookRoom"
],
{
"startDate": "2024-07-22",
"endDate": "2024-08-05"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "5 Jones Street",
"time": "1:28"
}
],
[
"valefor",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-02",
"type": "racing"
}
],
[
"phenex",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-17"
],
"hour": 18,
"numTickets": 1,
"movie": "Stand by Me"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Valerie Williams",
"date": "2024-04-10",
"numPeople": 1,
"hour": 18
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-20"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-08",
"type": "backcountry"
}
],
[
"focalor",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Toby Williams",
"date": "2024-03-27",
"numPeople": 6,
"hour": 19
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-30"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-30",
"type": "racing"
}
],
[
"bathin",
[
"trafficServer",
"getTraffic"
],
{
"date": "2024-05-29",
"location": "Cairo"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "60 White Street"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Cliff Smith",
"date": "2024-04-02",
"numPeople": 6,
"hour": 16
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "26 White Street",
"time": "20:41"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "46 Jones Street"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "68 Miller Street",
"time": "11:40"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-22",
"type": "carving"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "89 Johnson Street",
"time": "8:48"
}
],
[
"bathin",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-20",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "100 Jones Street",
"time": "14:20"
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2023-10-26",
"endDate": "2023-11-10"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "2 Brown Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-04",
"type": "backcountry"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "6 Brown Street",
"time": "18:33"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-05-09"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-05",
"type": "backcountry"
}
],
[
"aim",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-15",
"type": "carving"
}
],
[
"beleth",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-03-28",
"endDate": "2024-04-05"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-02",
"type": "backcountry"
}
],
[
"botis",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "71 Jones Street"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Brooke Miller",
"date": "2024-06-04",
"numPeople": 3,
"hour": 19
}
],
[
"marbas",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 20,
"numTickets": 1,
"movie": "Forrest Gump"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Cliff Davis",
"date": "2024-09-15",
"numPeople": 9,
"hour": 21
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-05-08"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"valac",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "70 Miller Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-12",
"type": "racing"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-04-27"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Cliff Smith",
"date": "2024-09-19",
"numPeople": 6,
"hour": 17
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-16",
"type": "racing"
}
],
[
"agares",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Laurel Jones",
"date": "2024-04-10",
"numPeople": 4,
"hour": 22
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-02",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-06",
"type": "racing"
}
],
[
"marax",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2023-11-22",
"endDate": "2023-12-01"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-07-06",
"endDate": "2024-07-25"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Brooke Williams",
"date": "2023-12-14",
"numPeople": 10,
"hour": 23
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-03",
"type": "racing"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-01-22",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-17",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "72 Brown Street",
"time": "8:0"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Maxwell Davis",
"date": "2024-04-19",
"numPeople": 5,
"hour": 22
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2023-09-30",
"endDate": "2023-10-18"
}
],
[
"vepar",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-11-20"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "73 Taylor Street"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-21",
"type": "backcountry"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "70 Smith Street",
"time": "23:40"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-21",
"type": "carving"
}
],
[
"sabnock",
[
"taxi1",
"callTaxi"
],
{
"address": "49 Smith Street",
"time": "0:20"
}
],
[
"amon",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-05-30",
"endDate": "2024-06-03"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "89 Brown Street"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "51 Davis Street"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "85 Williams Street",
"time": "21:56"
}
],
[
"amdusias",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-04",
"type": "racing"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Cliff White",
"date": "2024-03-03",
"numPeople": 9,
"hour": 18
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"naberius",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-12-10"
}
],
[
"glasya-labolas",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Brooke Wilson",
"date": "2024-06-04",
"numPeople": 8,
"hour": 23
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "12 Johnson Street",
"time": "11:39"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-21",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-22",
"type": "backcountry"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-02-13"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-02",
"type": "racing"
}
],
[
"gaap",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-02-15",
"endDate": "2024-02-29"
}
],
[
"ipos",
[
"restaurant1",
"openingTimes"
],
{}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-24",
"type": "racing"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"eligos",
[
"taxi1",
"callTaxi"
],
{
"address": "82 Johnson Street",
"time": "19:31"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-28",
"type": "backcountry"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-16"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-18",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-12"
}
],
[
"beleth",
[
"hotel1",
"bookRoom"
],
{
"startDate": "2024-08-15",
"endDate": "2024-08-21"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-03",
"type": "racing"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-27"
}
],
[
"marbas",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-15"
],
"hour": 20,
"numTickets": 2,
"movie": "Forrest Gump"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Brooke Miller",
"date": "2024-04-02",
"numPeople": 1,
"hour": 23
}
],
[
"guison",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-02",
"type": "carving"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-10-05"
}
],
[
"malphas",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "81 Jones Street"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "58 Williams Street"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"samigina",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 18,
"numTickets": 4,
"movie": "The Silence of the Lambs"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-12-11"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-06",
"type": "racing"
}
],
[
"vassago",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-05-12",
"endDate": "2024-05-26"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-04",
"type": "racing"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-06-12",
"endDate": "2024-06-24"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "47 Davis Street",
"time": "15:9"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-04",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-23",
"type": "racing"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "57 Brown Street",
"time": "1:22"
}
],
[
"vual",
[
"restaurant2",
"bookTable"
],
{
"fullName": "Laurel Davis",
"date": "2024-06-21",
"numPeople": 4,
"hour": 19
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-10-07"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-06-27",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-24",
"type": "racing"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-09-15",
"type": "backcountry"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-07-28"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-24",
"type": "carving"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-03-20",
"type": "racing"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-29",
"type": "backcountry"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-05-30",
"type": "racing"
}
],
[
"marbas",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-04-18",
"endDate": "2024-04-24"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "80 Jones Street",
"time": "12:22"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-07",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-06-17"
}
],
[
"berith",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "47 Brown Street"
}
],
[
"guison",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-17",
"type": "racing"
}
],
[
"samigina",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Manfred Johnson",
"date": "2024-04-24",
"numPeople": 5,
"hour": 21
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-13",
"type": "racing"
}
],
[
"aim",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-17",
"type": "carving"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-21",
"type": "backcountry"
}
],
[
"zepar",
[
"restaurant1",
"openingTimes"
],
{}
],
[
"bifrons",
[
"skiResort1",
"bookRoom"
],
{
"startDate": "2024-08-10",
"endDate": "2024-08-20"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-26",
"type": "backcountry"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-08",
"type": "backcountry"
}
],
[
"ephippas",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-15"
],
"hour": 20,
"numTickets": 4,
"movie": "Stand by Me"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-28",
"type": "backcountry"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"sallos",
[
"restaurant2",
"openingTimes"
],
{}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "45 White Street",
"time": "18:2"
}
],
[
"ipos",
[
"hotel3",
"bookRoom"
],
{
"startDate": "2024-02-27",
"endDate": "2024-03-15"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-07",
"type": "backcountry"
}
],
[
"barbatos",
[
"cinema2",
"buyTickets"
],
{
"date": [
"2024-03-18"
],
"hour": 20,
"numTickets": 5,
"movie": "Forrest Gump"
}
],
[
"balam",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"bathin",
[
"taxi2",
"callTaxi"
],
{
"address": "84 White Street",
"time": "3:18"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-07-03"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-24",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-30",
"type": "backcountry"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"marbas",
[
"cinema1",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 18,
"numTickets": 4,
"movie": "Forrest Gump"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2023-11-28"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "2 Smith Street",
"time": "18:43"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-04-29"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-15",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-23",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-30",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "7 Smith Street",
"time": "8:55"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-12-18",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-05-31",
"type": "carving"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "87 Williams Street",
"time": "3:53"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-28",
"type": "racing"
}
],
[
"focalor",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-02-11"
}
],
[
"haagenti",
[
"trafficServer",
"getTraffic"
],
{
"date": "2024-03-30",
"location": "Cairo"
}
],
[
"ornias",
[
"hotel2",
"bookRoom"
],
{
"startDate": "2024-06-25",
"endDate": "2024-07-13"
}
],
[
"marbas",
[
"restaurant1",
"bookTable"
],
{
"fullName": "Kara Brown",
"date": "2024-04-21",
"numPeople": 10,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-23"
}
],
[
"forneus",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-17"
]
}
],
[
"purson",
[
"trafficServer",
"getTraffic"
],
{
"date": "2023-10-11",
"location": "Rome"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "15 Taylor Street",
"time": "12:51"
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Madge Williams",
"date": "2023-12-21",
"numPeople": 8,
"hour": 19
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-18"
]
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "36 Jones Street",
"time": "2:9"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "99 Davis Street",
"time": "18:2"
}
],
[
"furfur",
[
"cinema1",
"availableMovies"
],
{
"date": [
"2024-03-16"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-30",
"type": "racing"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-01-31",
"type": "backcountry"
}
],
[
"samigina",
[
"hotel3",
"suggestRestaurant"
],
{
"date": "2024-04-11"
}
],
[
"buer",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-03-14",
"type": "racing"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "86 Davis Street"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "51 Wilson Street",
"time": "19:32"
}
],
[
"barbatos",
[
"cinema2",
"buyTickets"
],
{
"date": [
"2024-03-16"
],
"hour": 20,
"numTickets": 6,
"movie": "Forrest Gump"
}
],
[
"amon",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-05-09",
"type": "backcountry"
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "42 Taylor Street",
"time": "10:42"
}
],
[
"vassago",
[
"restaurant2",
"orderEverything"
],
{
"deliveryAddress": "85 Miller Street"
}
],
[
"eligos",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "12 Brown Street"
}
],
[
"onoskelis",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-01-10"
}
],
[
"belial",
[
"restaurant3",
"openingTimes"
],
{}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "56 Jones Street",
"time": "19:24"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-25",
"type": "racing"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "98 Brown Street",
"time": "17:46"
}
],
[
"barbatos",
[
"skiResort2",
"bookRoom"
],
{
"startDate": "2024-02-27",
"endDate": "2024-02-29"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2024-05-29"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-02",
"type": "carving"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-24",
"type": "backcountry"
}
],
[
"astaroth",
[
"weatherServer",
"queryWeather"
],
{
"date": "2024-03-28",
"location": "London, UK"
}
],
[
"valefor",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Brooke Davis",
"date": "2024-01-22",
"numPeople": 8,
"hour": 18
}
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "96 Smith Street",
"time": "19:24"
}
],
[
"gremory",
[
"restaurant1",
"orderEverything"
],
{
"deliveryAddress": "16 Davis Street"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"protocolDb2",
[
null,
"synchronization"
],
null
],
[
"agares",
[
"taxi2",
"callTaxi"
],
{
"address": "49 Miller Street",
"time": "5:41"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-16",
"type": "carving"
}
],
[
"paimon",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-11-15"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-08",
"type": "racing"
}
],
[
"halphas",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-08-25",
"type": "racing"
}
],
[
"samigina",
[
"restaurant3",
"bookTable"
],
{
"fullName": "Maxwell Miller",
"date": "2023-09-29",
"numPeople": 4,
"hour": 21
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-02-26",
"type": "racing"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "71 Johnson Street",
"time": "16:6"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-07-20",
"type": "racing"
}
],
[
"marax",
[
"trafficServer",
"getTraffic"
],
{
"date": "2024-04-26",
"location": "Zurich"
}
],
[
"protocolDb3",
[
null,
"synchronization"
],
null
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-04-08",
"type": "carving"
}
],
[
"vual",
[
"trafficServer",
"getTraffic"
],
{
"date": "2023-10-29",
"location": "Tokyo"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-11-10",
"type": "carving"
}
],
[
"asmoday",
[
"skiResort1",
"rentSki"
],
{
"date": "2024-01-23",
"type": "backcountry"
}
],
[
"zepar",
[
"weatherServer",
"queryWeather"
],
{
"date": "2023-09-24",
"location": "Paris, France"
}
],
[
"bael",
[
"skiResort2",
"suggestRestaurant"
],
{
"date": "2023-10-27"
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2024-03-16",
"type": "carving"
}
],
[
"bael",
[
"taxi2",
"callTaxi"
],
{
"address": "45 Jones Street",
"time": "3:56"
}
],
[
"agares",
[
"cinema2",
"availableMovies"
],
{
"date": [
"2024-03-15"
]
}
],
[
"bael",
[
"skiResort2",
"rentSki"
],
{
"date": "2023-10-30",
"type": "backcountry"
}
],
[
"protocolDb1",
[
null,
"synchronization"
],
null
]
]
================================================
FILE: agents/common/core.py
================================================
from enum import Enum
class Suitability(str, Enum):
ADEQUATE = 'adequate'
INADEQUATE = 'inadequate'
PROBABLY_INADEQUATE = 'probably_inadequate'
UNKNOWN = 'unknown'
================================================
FILE: agents/protocol_db/main.py
================================================
import sys
sys.path.append('.')
import dotenv
dotenv.load_dotenv()
import os
from pathlib import Path
if os.environ.get('STORAGE_PATH') is None:
os.environ['STORAGE_PATH'] = str(Path().parent / 'storage' / 'protocol_db')
from flask import Flask, request
import requests as request_manager
import json
from utils import compute_hash, shared_config
app = Flask(__name__)
OTHER_DBS = []
PROTOCOLS = {}
@app.route('/', methods=['GET'])
def main():
return json.dumps({
'status': 'success',
'protocols' : [
{
'id': protocol_id,
'name': protocol_data['name'],
'description': protocol_data['description'],
}
for protocol_id, protocol_data in PROTOCOLS.items()
]
})
@app.route('/', methods=['POST'])
def add_protocol():
data = request.get_json()
if 'protocol' not in data:
return json.dumps({
'status': 'error',
'message': 'No protocol provided.'
})
protocol = data['protocol']
hashed_protocol = compute_hash(protocol)
if hashed_protocol in PROTOCOLS:
# No-op
return json.dumps({
'status' : 'success'
})
PROTOCOLS[hashed_protocol] = data
print('Added protocol:', hashed_protocol)
save_memory()
return json.dumps({
'status': 'success'
})
# route for each protocol
@app.route('/protocol', methods=['GET'])
def get_protocol():
protocol_id = request.args.get('id')
print('Received request for protocol:', protocol_id)
print('Current keys:', PROTOCOLS.keys())
print('Do I have the protocol?', protocol_id in PROTOCOLS)
if protocol_id not in PROTOCOLS:
return json.dumps({
'status': 'error',
'message': 'Protocol not found.'
})
# No JSON
return PROTOCOLS[protocol_id]['protocol']
@app.route('/metadata', methods=['GET'])
def get_metadata():
protocol_id = request.args.get('id')
print('Received request for metadata:', protocol_id)
print('Current keys:', PROTOCOLS.keys())
print('Do I have the protocol?', protocol_id in PROTOCOLS)
if protocol_id not in PROTOCOLS:
return json.dumps({
'status': 'error',
'message': 'Protocol not found.'
})
return json.dumps({
'status': 'success',
'metadata': {
'name': PROTOCOLS[protocol_id]['name'],
'description': PROTOCOLS[protocol_id]['description']
}
})
@app.route('/synchronize', methods=['POST'])
def trigger_share():
for other_db in OTHER_DBS:
print('Checking known protocols of:', other_db)
known_protocols = request_manager.get(f'{other_db}/', timeout=shared_config('timeout')).json()
for protocol_id, protocol_data in PROTOCOLS.items():
if protocol_id not in known_protocols:
print('Sharing protocol:', protocol_id)
request_manager.post(f'{other_db}/', json=protocol_data, timeout=shared_config('timeout'))
return json.dumps({
'status': 'success'
})
def load_config():
with open('config.json') as f:
config = json.load(f)
with open('node_urls.json') as f:
node_urls = json.load(f)
agent_id = os.environ.get('AGENT_ID')
db_config = config['protocolDbs'][agent_id]
for peer_id in db_config['peers']:
OTHER_DBS.append(node_urls[peer_id])
def load_memory():
PROTOCOLS.clear()
storage_path = Path(os.environ.get('STORAGE_PATH'))
memory_file = storage_path / 'memory.json'
if not memory_file.exists():
print('No memory file found, using empty memory')
return
with open(memory_file, 'r') as f:
memory = json.load(f)
for protocol_id, protocol_data in memory.items():
PROTOCOLS[protocol_id] = protocol_data
print('Loaded memory:', PROTOCOLS)
def save_memory():
storage_path = Path(os.environ.get('STORAGE_PATH'))
if not storage_path.exists():
storage_path.mkdir(parents=True)
memory_file = storage_path / 'memory.json'
with open(memory_file, 'w') as f:
json.dump(PROTOCOLS, f)
def init():
load_config()
load_memory()
init()
================================================
FILE: agents/server/config.py
================================================
import json
import os
import random
import requests as request_manager
import databases.mongo as mongo
import databases.sql as sql
from toolformers.base import Tool, StringParameter, EnumParameter
import mocks.mock_tools as mock_tools
from utils import get_query_id, shared_config
TOOLS = []
ADDITIONAL_INFO = ''
NODE_URLS = {}
def get_additional_info():
return ADDITIONAL_INFO
def add_mongo_database(external_name, schema):
global ADDITIONAL_INFO
# TODO: Support hot-loading?
mongo.create_database_from_schema(external_name, schema)
ADDITIONAL_INFO += f'You have access to a MongoDB database.\n'
ADDITIONAL_INFO += 'The database has the following collections (with schemas):\n\n'
for collection_name, collection_schema in schema['collections'].items():
ADDITIONAL_INFO += f'=={collection_name}==\n'
if 'initialValues' in collection_schema:
del collection_schema['initialValues']
ADDITIONAL_INFO += json.dumps(collection_schema, indent=2) + '\n\n'
def add_mongo_tools(server_name):
def insert_element(collection, doc):
doc = json.loads(doc)
mongo.insert_one(server_name, collection, doc)
return 'Done'
insert_element_tool = Tool('insert_into_database', 'Insert into a database (MongoDB).', [
StringParameter('collection', 'The collection to insert into', True),
StringParameter('doc', 'The document to insert, as a formatted JSON string for MongoDB', True)
], insert_element)
def query_database(collection, query):
query = json.loads(query)
output = mongo.query_database(server_name, collection, query)
print('MongoDB query database output:', output)
return json.dumps(output)
find_in_database_tool = Tool('find_in_database', 'Find in a database (MongoDB). Returns a JSON formatted string with the result.', [
StringParameter('collection', 'The collection to query', True),
StringParameter('query', 'The query to run, as a formatted JSON string for MongoDB', True)
], query_database)
def update_element(collection, query, update):
query = json.loads(query)
update = json.loads(update)
mongo.update_one(server_name, collection, query, update)
return 'Done'
update_element_tool = Tool('update_one_in_database', 'Update an element in a database (MongoDB).', [
StringParameter('collection', 'The collection to query', True),
StringParameter('query', 'The query to run, as a formatted JSON string for MongoDB', True),
StringParameter('update', 'The update to run, as a formatted JSON string for MongoDB. Remember the $ operator (e.g. {$set : {...}})', True)
], update_element)
def delete_element(collection, query):
query = json.loads(query)
mongo.delete_one(server_name, collection, query)
return 'Done'
delete_element_tool = Tool('delete_element_in_database', 'Delete an element in a database (MongoDB).', [
StringParameter('database', 'The database to query', True),
StringParameter('collection', 'The collection to query', True),
StringParameter('query', 'The query to run, as a formatted JSON string for MongoDB', True)
], delete_element)
TOOLS.append(insert_element_tool)
TOOLS.append(find_in_database_tool)
TOOLS.append(update_element_tool)
TOOLS.append(delete_element_tool)
# TODO: Test insert and delete tools
def add_sql_database(table_schemas, server_name):
global ADDITIONAL_INFO
name_mappings = sql.create_database_from_schema(table_schemas, server_name)
global ADDITIONAL_INFO
ADDITIONAL_INFO += f'\n\nYou have access to a Microsoft SQL Server database. You can run SQL queries on the database. The database has the following tables:\n\n'
for table_name, table_schema in table_schemas.items():
ADDITIONAL_INFO += f'=={table_name}==\n'
ADDITIONAL_INFO += f'Description: {table_schema["description"]}\n'
ADDITIONAL_INFO += 'Columns:\n'
for column_name, column_data in table_schema['columns'].items():
ADDITIONAL_INFO += f'\n- {column_name}: {column_data}'
constraints = table_schema.get('constraints', [])
if len(constraints) > 0:
print('Constraints:', constraints)
ADDITIONAL_INFO += '\n\nConstraints:\n'
for constraint in constraints:
ADDITIONAL_INFO += f'\n- {constraint}'
extra_table_schema_info = table_schema.get('extraInfo', '')
if extra_table_schema_info:
ADDITIONAL_INFO += '\n\nOther info:' + extra_table_schema_info
for starting_value in table_schema.get('initialValues', []):
sql.insert(table_name, server_name, starting_value)
ADDITIONAL_INFO += '\n\n========\n\n'
ADDITIONAL_INFO += '\n'
ADDITIONAL_INFO += 'For security reasons, you are not allowed to create other tables or modify the schema of the existing tables.\n'
ADDITIONAL_INFO += 'Remember: Microsoft SQL Server uses single quotes (\') for literals!'
return name_mappings
def add_sql_tools(name_mappings):
def run_query(query):
for internal_table_name, external_table_name in name_mappings.items():
query = query.replace(internal_table_name, external_table_name)
# Some models (especially Gemini) really struggle with escaping, adding escaping where it's not necessary
query = query.replace("\\'", "'")
print('Running SQL query:', query)
response = sql.run_query(query)
print('SQL Response:', response)
return response
tool_description = 'Run a Microsoft SQL Server query. Returns a list of results, where each element is a dictionary ' \
'with the column names as keys. If the query does not return any results, an empty list is returned.'
query_tool = Tool('run_sql_query', tool_description, [
StringParameter('query', 'The query to run', True)
], run_query)
TOOLS.append(query_tool)
def prepare_mock_tool(tool_schema, internal_name, schema_name):
print('Internal name:', internal_name)
print('Tool schema:', tool_schema)
input_schema = tool_schema['input']
required_parameter_names = input_schema['required']
parameters = []
for parameter_name, parameter_data in input_schema['properties'].items():
if 'enum' in parameter_data:
parameters.append(EnumParameter(parameter_name, parameter_data['description'], parameter_data['enum'], parameter_name in required_parameter_names))
elif parameter_data['type'] == 'string':
parameters.append(StringParameter(parameter_name, parameter_data['description'], parameter_name in required_parameter_names))
else:
raise ValueError('Unknown parameter type:', parameter_data['type'])
def run_mock_tool(*args, **kwargs):
print('Running mock tool:', internal_name, 'Schema name:', schema_name, args, kwargs)
if schema_name not in mock_tools.__dict__:
raise ValueError('Unknown mock tool schema:', schema_name)
response = mock_tools.__dict__[schema_name](*args, **kwargs)
print(f'Mock tool {internal_name} response:', response)
return response
mock_tool = Tool(internal_name, tool_schema['description'], parameters, run_mock_tool, output_schema=tool_schema['output'])
return mock_tool
def prepare_external_tool(tool_schema, internal_name, external_server_name):
input_schema = tool_schema['input']
required_parameter_names = input_schema['required']
parameters = []
for parameter_name, parameter_data in input_schema['properties'].items():
if 'enum' in parameter_data:
parameters.append(EnumParameter(parameter_name, parameter_data['description'], parameter_data['enum'], parameter_name in required_parameter_names))
elif parameter_data['type'] == 'string':
parameters.append(StringParameter(parameter_name, parameter_data['description'], parameter_name in required_parameter_names))
else:
raise ValueError('Unknown parameter type:', parameter_data['type'])
helper_id = os.environ.get('AGENT_ID') + '_helper'
helper_url = NODE_URLS[helper_id]
def run_external_tool(*args, **kwargs):
for i, arg in enumerate(args):
argument_name = parameters[i].name
kwargs[argument_name] = arg
# TODO: Check that the parameter names are correct?
print('Running external tool:', internal_name, kwargs)
query_parameters = {
'type' : internal_name, # TODO: Use the schema name instead? Must be matched on the other side
'data' : kwargs,
'targetServer' : external_server_name,
'queryId': get_query_id()
}
response = request_manager.post(helper_url + '/customRun', json=query_parameters, timeout=shared_config('timeout'))
print(f'Response from external tool {internal_name}:', response.text)
if response.status_code == 200:
parsed_response = json.loads(response.text)
return parsed_response
#if parsed_response['status'] == 'success':
# return parsed_response['body']
return 'Failed to call the tool: ' + response.text
external_tool = Tool(internal_name, tool_schema['description'], parameters, run_external_tool, output_schema=tool_schema['output'])
return external_tool
def load_config(server_name):
global ADDITIONAL_INFO
with open('config.json') as f:
config = json.load(f)
with open('node_urls.json') as f:
node_urls = json.load(f)
for node_id, node_url in node_urls.items():
NODE_URLS[node_id] = node_url
server_config = config['servers'][server_name]
ADDITIONAL_INFO += 'This is the description of the service provided by the server:\n====\n'
ADDITIONAL_INFO += server_config['description']
for action_description in server_config['actionDescriptions']:
ADDITIONAL_INFO += f'\n- {action_description}'
ADDITIONAL_INFO += '\n====\n\n'
if server_config['internalDbSchema'] is not None:
db_config = config['dbSchemas'][server_config['internalDbSchema']]
if db_config['dbType'] == 'mongo':
add_mongo_database(server_name, db_config)
add_mongo_tools(server_name)
elif db_config['dbType'] == 'sql':
name_mappings = add_sql_database(db_config['tables'], server_name)
add_sql_tools(name_mappings)
else:
raise ValueError('Unknown database type:', db_config['dbType'])
for internal_name, schema_name in server_config.get('mockTools', {}).items():
tool_schema = config['toolSchemas'][schema_name]
tool = prepare_mock_tool(tool_schema, internal_name, schema_name)
TOOLS.append(tool)
for internal_name, external_tool_config in server_config.get('externalTools', {}).items():
schema_name = external_tool_config['schema']
tool_schema = config['toolSchemas'][schema_name]
tool_server = external_tool_config['server']
tool = prepare_external_tool(tool_schema, internal_name, tool_server)
TOOLS.append(tool)
print('Final additional info:', ADDITIONAL_INFO)
print('Final tools:', TOOLS)
================================================
FILE: agents/server/main.py
================================================
import sys
sys.path.append('.')
import dotenv
dotenv.load_dotenv()
from pathlib import Path
import os
if os.environ.get('STORAGE_PATH') is None:
os.environ['STORAGE_PATH'] = str(Path().parent / 'storage' / 'server')
import json
from threading import Lock
import traceback
from flask import Flask, request
from agents.common.core import Suitability
from agents.server.memory import PROTOCOL_INFOS, register_new_protocol, has_implementation, get_num_conversations, increment_num_conversations, has_implementation, add_routine, load_memory, save_memory
from utils import load_protocol_document, execute_routine, download_and_verify_protocol, use_query_id
from specialized_toolformers.responder import reply_to_query
from specialized_toolformers.protocol_checker import check_protocol_for_tools
from specialized_toolformers.programmer import write_routine_for_tools
from specialized_toolformers.negotiator import handle_negotiation_for_tools
from agents.server.config import TOOLS, get_additional_info, load_config
app = Flask(__name__)
NUM_CONVERSATIONS_FOR_ROUTINE = -1# 1e6
NUM_CONVERSATIONS_FOR_PROTOCOL = 5 #1e6
no_protocol_conversation_counter = 0
mutex = Lock()
def call_implementation(protocol_hash, query):
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'routines'
try:
output = execute_routine(base_folder, protocol_hash, query, TOOLS)
return {
'status': 'success',
'body': output
}
except Exception as e:
print(traceback.print_exception(type(e), e, e.__traceback__))
print('Error executing routine:', e)
print('Falling back to responder')
return reply_to_query(query, protocol_hash, TOOLS, get_additional_info())
def handle_query_suitable(protocol_hash, query):
increment_num_conversations(protocol_hash)
if has_implementation(protocol_hash):
return call_implementation(protocol_hash, query)
elif get_num_conversations(protocol_hash) >= NUM_CONVERSATIONS_FOR_ROUTINE:
# We've used this protocol enough times to justify writing a routine
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'protocol_documents'
protocol_document = load_protocol_document(base_folder, protocol_hash)
implementation = write_routine_for_tools(TOOLS, protocol_document, get_additional_info())
add_routine(protocol_hash, implementation)
return call_implementation(protocol_hash, query)
else:
print('Calling with protocol_hash. Using tools:', TOOLS)
return reply_to_query(query, protocol_hash, TOOLS, get_additional_info())
def handle_negotiation(raw_query):
global no_protocol_conversation_counter
no_protocol_conversation_counter = 0
raw_query = json.loads(raw_query)
conversation_id = raw_query.get('conversationId', None)
query = raw_query['body']
reply, conversation_id = handle_negotiation_for_tools(query, conversation_id, TOOLS, get_additional_info())
raw_reply = {
'conversationId': conversation_id,
'body': reply
}
return {
'status': 'success',
'body': json.dumps(raw_reply)
}
def handle_query(protocol_hash, protocol_sources, query):
if protocol_hash is None:
print('No protocol hash provided. Using TOOLS:', TOOLS)
global no_protocol_conversation_counter
no_protocol_conversation_counter += 1
return reply_to_query(query, None, TOOLS, get_additional_info())
if protocol_hash == 'negotiation':
# Special protocol, default to human-written routine
return handle_negotiation(query)
if has_implementation(protocol_hash):
return call_implementation(protocol_hash, query)
if protocol_hash in PROTOCOL_INFOS:
if PROTOCOL_INFOS[protocol_hash]['suitability'] == Suitability.UNKNOWN:
# Determine if we can support this protocol
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'protocol_documents'
protocol_document = load_protocol_document(base_folder, protocol_hash)
if check_protocol_for_tools(protocol_document, TOOLS):
PROTOCOL_INFOS[protocol_hash]['suitability'] = Suitability.ADEQUATE
else:
PROTOCOL_INFOS[protocol_hash]['suitability'] = Suitability.INADEQUATE
save_memory()
if PROTOCOL_INFOS[protocol_hash]['suitability'] == Suitability.ADEQUATE:
return handle_query_suitable(protocol_hash, query)
else:
return {
'status': 'error',
'message': 'Protocol not suitable.'
}
else:
print('Protocol sources:', protocol_sources)
for protocol_source in protocol_sources:
protocol_document = download_and_verify_protocol(protocol_hash, protocol_source)
if protocol_document is not None:
register_new_protocol(protocol_hash, protocol_source, protocol_document)
is_suitable = check_protocol_for_tools(protocol_document, TOOLS)
if is_suitable:
PROTOCOL_INFOS[protocol_hash]['suitability'] = Suitability.ADEQUATE
else:
PROTOCOL_INFOS[protocol_hash]['suitability'] = Suitability.INADEQUATE
save_memory()
if is_suitable:
return handle_query_suitable(protocol_hash, query)
return {
'status': 'error',
'message': 'No valid protocol source provided.'
}
@app.route("/", methods=['POST'])
def main():
data = request.get_json()
protocol_hash = data.get('protocolHash', None)
protocol_sources = data.get('protocolSources', [])
query_id = data.get('queryId', None)
if query_id is None:
print('No query ID provided.')
else:
print('Query ID:', query_id)
with mutex:
with use_query_id(query_id):
response = handle_query(protocol_hash, protocol_sources, data['body'])
print('Final response:', response)
return response
@app.route("/wellknown", methods=['GET'])
def wellknown():
return {
'status': 'success',
'protocols': { protocol_hash: [PROTOCOL_INFOS[protocol_hash]['source']] for protocol_hash in PROTOCOL_INFOS if PROTOCOL_INFOS[protocol_hash]['suitability'] == Suitability.ADEQUATE }
}
# Note: In a real-world case, the server would already register the protocol as part of the negotiation process
@app.route("/registerNegotiatedProtocol", methods=['POST'])
def register_negotiated_protocol():
data = request.get_json()
protocol_hash = data['protocolHash']
protocol_sources = data['protocolSources']
protocol_document = None
for protocol_source in protocol_sources:
protocol_document = download_and_verify_protocol(protocol_hash, protocol_source)
if protocol_document is not None:
break
if protocol_document is None:
return {
'status': 'error',
'message': 'No valid protocol source provided.'
}
register_new_protocol(protocol_hash, protocol_source, protocol_document)
PROTOCOL_INFOS[protocol_hash]['suitability'] = Suitability.ADEQUATE
save_memory()
return {
'status': 'success'
}
# Determines if the user should start a negotiation instead of a regular conversation
# Note: in a real-world case, this would be determined independently by the server
@app.route("/requiresNegotiation", methods=['GET'])
def requires_negotiation():
return {
'status': 'success',
'requiresNegotiation': no_protocol_conversation_counter >= NUM_CONVERSATIONS_FOR_PROTOCOL
}
def init():
load_config(os.environ.get('AGENT_ID'))
load_memory()
init()
================================================
FILE: agents/server/memory.py
================================================
import json
import os
from pathlib import Path
from agents.common.core import Suitability
from utils import save_protocol_document, save_routine
PROTOCOL_INFOS = {}
def load_memory():
storage_path = Path(os.environ.get('STORAGE_PATH')) / 'memory.json'
if not Path(storage_path).exists():
print('No memory found. Using default blank memory.')
PROTOCOL_INFOS.clear()
return
with open(storage_path, 'r') as f:
data = json.load(f)
PROTOCOL_INFOS.clear()
PROTOCOL_INFOS.update(data['protocol_infos'])
print('Loaded memory:', PROTOCOL_INFOS.keys())
def save_memory():
storage_path = Path(os.environ.get('STORAGE_PATH')) / 'memory.json'
storage_path.parent.mkdir(parents=True, exist_ok=True)
with open(storage_path, 'w') as f:
json.dump({
'protocol_infos': PROTOCOL_INFOS
}, f, indent=4)
def register_new_protocol(protocol_hash, protocol_source, protocol_document):
PROTOCOL_INFOS[protocol_hash] = {
'source': protocol_source,
'suitability': Suitability.UNKNOWN,
'has_implementation': False,
'num_conversations': 0
}
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'protocol_documents'
save_protocol_document(base_folder, protocol_hash, protocol_document)
save_memory()
def has_implementation(protocol_hash):
if protocol_hash not in PROTOCOL_INFOS:
return False
return PROTOCOL_INFOS[protocol_hash]['has_implementation']
def get_num_conversations(protocol_hash):
if protocol_hash not in PROTOCOL_INFOS:
return 0
return PROTOCOL_INFOS[protocol_hash]['num_conversations']
def increment_num_conversations(protocol_hash):
PROTOCOL_INFOS[protocol_hash]['num_conversations'] += 1
save_memory()
def add_routine(protocol_id, implementation):
PROTOCOL_INFOS[protocol_id]['has_implementation'] = True
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'routines'
save_routine(base_folder, protocol_id, implementation)
save_memory()
================================================
FILE: agents/user/config.py
================================================
import json
import random
TASK_CONFIGS = []
TASK_SCHEMAS = {}
NODE_URLS = {}
# Workaround for the fact that once a constant is imported, it cannot be updated
_PROTOCOL_DB_URL = None
def get_protocol_db_url():
return _PROTOCOL_DB_URL
def load_standard_config(user_name):
print(f'Running in standalone mode as {user_name}.')
with open('config.json') as f:
config = json.load(f)
for task_name, task_schema in config['taskSchemas'].items():
TASK_SCHEMAS[task_name] = task_schema
user_config = config['users'][user_name]
for task_config in user_config['tasks']:
TASK_CONFIGS.append(task_config)
with open('node_urls.json') as f:
node_urls = json.load(f)
for node_id, node_url in node_urls.items():
NODE_URLS[node_id] = node_url
global _PROTOCOL_DB_URL
_PROTOCOL_DB_URL = NODE_URLS[user_config['protocolDb']]
def load_helper_config(master_server_name):
# A helper user agent is a user agent that is used to access the external tools of a server
print(f'Running in helper mode for {master_server_name}.')
with open('config.json') as f:
config = json.load(f)
with open('node_urls.json') as f:
node_urls = json.load(f)
for node_id, node_url in node_urls.items():
NODE_URLS[node_id] = node_url
server_config = config['servers'][master_server_name]
for external_tool_name, external_tool_config in server_config['externalTools'].items():
schema_name = external_tool_config['schema']
task_schema = config['toolSchemas'][schema_name]
TASK_SCHEMAS[external_tool_name] = task_schema
global _PROTOCOL_DB_URL
_PROTOCOL_DB_URL = NODE_URLS[server_config['protocolDb']]
def load_config(user_name):
if user_name.endswith('_helper'):
load_helper_config(user_name[:-len('_helper')])
else:
load_standard_config(user_name)
def get_task():
# Pick a random task
task_config = random.choice(TASK_CONFIGS)
task_type = task_config['schema']
task_data = random.choice(task_config['choices'])
target_server = random.choice(task_config['servers'])
return task_type, task_data, target_server
================================================
FILE: agents/user/main.py
================================================
import sys
sys.path.append('.')
import dotenv
dotenv.load_dotenv()
import json
import os
from pathlib import Path
import traceback
from threading import Lock
if os.environ.get('STORAGE_PATH') is None:
os.environ['STORAGE_PATH'] = str(Path().parent / 'storage' / 'user')
from agents.user.memory import load_memory, increment_num_conversations, get_num_protocol_uses, increment_num_protocol_uses, PROTOCOL_INFOS, save_memory, add_routine
from specialized_toolformers.querier import send_query_with_protocol, send_query_without_protocol
from specialized_toolformers.programmer import write_routine_for_task
from toolformers.base import Tool, StringParameter
from agents.user.protocol_management import decide_protocol, has_implementation
from agents.user.config import get_task, load_config, TASK_SCHEMAS, NODE_URLS
from utils import load_protocol_document, execute_routine, send_raw_query, use_query_id
NUM_CONVERSATIONS_FOR_PROTOCOL = -1
NUM_CONVERSATIONS_FOR_ROUTINE = -1
from flask import Flask, request
app = Flask(__name__)
mutex = Lock()
def call_using_implementation(task_type, task_schema, protocol_id, task_data, target_node):
def send_to_server(query):
print('Sending query:', query)
response = send_raw_query(query, protocol_id, target_node, PROTOCOL_INFOS[protocol_id]['source'])
if response.status_code == 200:
parsed_response = json.loads(response.text)
if parsed_response['status'] == 'success':
body = parsed_response['body']
if isinstance(body, dict):
# Sometimes this gets returned as a dict instead of a string
return json.dumps(body)
return body
raise Exception('Error calling the server:', response.text)
send_to_server_tool = Tool(
'send_to_server',
'Sends a query to the server and returns the response as described in the protocol document.', [
StringParameter('query', 'The query to send to the server.', True)
],
send_to_server
)
try:
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'routines' / task_type
parsed_response = execute_routine(base_folder, protocol_id, task_data, [send_to_server_tool])
return parsed_response
except Exception as e:
print(traceback.print_exception(type(e), e, e.__traceback__))
print('Error executing routine:', e)
print('Falling back to querier')
response = send_query_with_protocol(task_schema, task_data, target_node, protocol_id, PROTOCOL_INFOS[protocol_id]['source'])
return response
@app.route("/", methods=['POST'])
def main():
if os.environ.get('AGENT_ID').endswith('_helper'):
return json.dumps({
'status': 'error',
'message': 'This agent is a helper agent and cannot be used for direct communication.'
})
data = request.get_json()
query_id = data['queryId']
if query_id is None:
print('No query ID provided.')
else:
print('Query ID:', query_id)
with mutex:
with use_query_id(query_id):
response = run_random_task()
print('Response:', response, flush=True)
save_memory()
return response
def run_task(task_type, task_data, target_server):
# Query the node to know its preferred protocols
# If you already support a protocol, use it and call the corresponding routine
# If you might accept one of the target's protocols but don't have an implementation:
# - If the communication is sufficiently rare, use the querier with the protocol
# - Otherwise, call the programmer to implement the protocol
# If you haven't categorized the target's protocols yet, use the categorizer to classify them and go back
# If you've classified all the target's protocols and none are suitable, check on the public protocol database and repeat
# If you've checked all the public protocols and none are suitable:
# - If the communication is sufficiently rare, use the querier without any protocol
# - Otherwise, use the negotiator to reach an agreement with the target on a new protocol
task_schema = TASK_SCHEMAS[task_type]
target_node = NODE_URLS[target_server]
protocol_id = decide_protocol(task_type, target_node, NUM_CONVERSATIONS_FOR_PROTOCOL, NUM_CONVERSATIONS_FOR_NEGOTIATED_PROTOCOL)
if protocol_id is None:
source = None
else:
source = PROTOCOL_INFOS[protocol_id]['source']
increment_num_conversations(task_type, target_node)
if protocol_id is not None:
print('Using protocol:', protocol_id)
increment_num_protocol_uses(protocol_id)
# Check if we have an implementation
if has_implementation(task_type, protocol_id):
return call_using_implementation(task_type, task_schema, protocol_id, task_data, target_node)
# If we've talked enough times using a certain protocol, write an implementation
elif get_num_protocol_uses(protocol_id) > NUM_CONVERSATIONS_FOR_ROUTINE:
protocol_document = load_protocol_document(Path(os.environ.get('STORAGE_PATH')) / 'protocol_documents', protocol_id)
routine = write_routine_for_task(task_schema, protocol_document)
add_routine(task_type, protocol_id, routine)
return call_using_implementation(task_type, task_schema, protocol_id, task_data, target_node)
else:
# Use the querier with the protocol
response = send_query_with_protocol(task_schema, task_data, target_node, protocol_id, source)
return response
else:
# Use the querier without any protocol
print('Using the querier without any protocol')
response = send_query_without_protocol(task_schema, task_data, target_node)
return response
def run_random_task():
# Generate task info (with structured data) and pick a target node
task_type, task_data, target_server = get_task()
return run_task(task_type, task_data, target_server)
@app.route('/customRun', methods=['POST'])
def custom_run():
data = request.get_json()
task_type = data['type']
task_data = data['data']
target_server = data['targetServer']
query_id = data['queryId']
if query_id is None:
print('No query ID provided.')
else:
print('Query ID:', query_id)
print('Custom run:', task_type, task_data, target_server)
with mutex:
with use_query_id(query_id):
return run_task(task_type, task_data, target_server)
def init():
load_config(os.environ.get('AGENT_ID'))
load_memory()
print('Agent initialized')
init()
================================================
FILE: agents/user/memory.py
================================================
import json
import os
from pathlib import Path
from utils import save_routine
# Stores for each protocol
# - The id
# - Whether it is suitable for each task
# - The source of the protocol
# - Whether there is an implementation available
PROTOCOL_INFOS = {}
# Indexed by task type and target node
NUM_CONVERSATIONS = {}
def load_memory():
storage_path = Path(os.environ.get('STORAGE_PATH')) / 'memory.json'
if not Path(storage_path).exists():
print('No memory found. Using default blank memory.')
PROTOCOL_INFOS.clear()
NUM_CONVERSATIONS.clear()
return
with open(storage_path, 'r') as f:
data = json.load(f)
PROTOCOL_INFOS.clear()
PROTOCOL_INFOS.update(data['protocol_infos'])
NUM_CONVERSATIONS.clear()
NUM_CONVERSATIONS.update(data['num_conversations'])
print('Loaded memory:', PROTOCOL_INFOS.keys())
def save_memory():
storage_path = Path(os.environ.get('STORAGE_PATH')) / 'memory.json'
storage_path.parent.mkdir(parents=True, exist_ok=True)
with open(storage_path, 'w') as f:
json.dump({
'protocol_infos': PROTOCOL_INFOS,
'num_conversations': NUM_CONVERSATIONS
}, f, indent=4)
def get_num_protocol_uses(protocol_id):
if protocol_id not in PROTOCOL_INFOS:
return 0
return PROTOCOL_INFOS[protocol_id]['num_uses']
def increment_num_protocol_uses(protocol_id):
PROTOCOL_INFOS[protocol_id]['num_uses'] += 1
save_memory()
def get_num_conversations(task_type, target_node):
if task_type not in NUM_CONVERSATIONS:
return 0
if target_node not in NUM_CONVERSATIONS[task_type]:
return 0
return NUM_CONVERSATIONS[task_type][target_node]
def increment_num_conversations(task_type, target_node):
if task_type not in NUM_CONVERSATIONS:
NUM_CONVERSATIONS[task_type] = {}
if target_node not in NUM_CONVERSATIONS[task_type]:
NUM_CONVERSATIONS[task_type][target_node] = 0
NUM_CONVERSATIONS[task_type][target_node] += 1
def add_routine(task_type, protocol_id, implementation):
PROTOCOL_INFOS[protocol_id]['has_implementation'][task_type] = True
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'routines' / task_type
save_routine(base_folder, protocol_id, implementation)
save_memory()
================================================
FILE: agents/user/protocol_management.py
================================================
import urllib
import os
from pathlib import Path
import requests as request_manager
from utils import load_protocol_document, save_protocol_document, compute_hash, shared_config
from agents.user.config import TASK_SCHEMAS
from agents.user.memory import get_num_conversations, PROTOCOL_INFOS, save_memory
from specialized_toolformers.protocol_checker import check_protocol_for_task, filter_protocols_for_task
from specialized_toolformers.negotiator import negotiate_protocol_for_task
from agents.common.core import Suitability
from agents.user.config import get_protocol_db_url
def query_protocols(target_node):
response = request_manager.get(f'{target_node}/wellknown', timeout=shared_config('timeout'))
response = response.json()
if response['status'] == 'success':
return response['protocols']
else:
return []
def has_implementation(task_type, protocol_id):
if protocol_id not in PROTOCOL_INFOS:
return False
if task_type not in PROTOCOL_INFOS[protocol_id]['has_implementation']:
return False
return PROTOCOL_INFOS[protocol_id]['has_implementation'][task_type]
def is_adequate(task_type, protocol_id):
if protocol_id not in PROTOCOL_INFOS:
return False
if task_type not in PROTOCOL_INFOS[protocol_id]['suitability_info']:
return False
return PROTOCOL_INFOS[protocol_id]['suitability_info'][task_type] == Suitability.ADEQUATE
def is_categorized(task_type, protocol_id):
if protocol_id not in PROTOCOL_INFOS:
return False
if task_type not in PROTOCOL_INFOS[protocol_id]['suitability_info']:
return False
return PROTOCOL_INFOS[protocol_id]['suitability_info'][task_type] != Suitability.UNKNOWN
def get_an_adequate_protocol(task_type, eligible_protocols):
# Will ignore protocols that haven't been downloaded yet
# First, try with protocols having an implementation
protocols_with_implementations = [ protocol_id for protocol_id in eligible_protocols if is_adequate(task_type, protocol_id) and has_implementation(task_type, protocol_id) ]
if len(protocols_with_implementations) > 0:
print('Found protocol with implementation:', protocols_with_implementations[0])
return protocols_with_implementations[0]
# If there is no matching implementation, try with protocols that have been categorized and have been deemed adequate
adequate_protocols = [ protocol_id for protocol_id in eligible_protocols if is_adequate(task_type, protocol_id) ]
if len(adequate_protocols) > 0:
return adequate_protocols[0]
# If there are still none, try with protocols that haven't been categorized yet (but are already in memory), categorize them and check again
uncategorized_protocols = [protocol_id for protocol_id in eligible_protocols if protocol_id in PROTOCOL_INFOS and not is_categorized(task_type, protocol_id)]
uncategorized_protocols = prefilter_protocols(uncategorized_protocols, task_type)
for protocol_id in uncategorized_protocols:
suitable = categorize_protocol(protocol_id, task_type)
if suitable:
return protocol_id
# We're out of luck, return None
return None
def categorize_protocol(protocol_id, task_type):
print('Categorizing protocol:', protocol_id)
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'protocol_documents'
protocol_document = load_protocol_document(base_folder, protocol_id)
suitable = check_protocol_for_task(protocol_document, TASK_SCHEMAS[task_type])
if suitable:
PROTOCOL_INFOS[protocol_id]['suitability_info'][task_type] = Suitability.ADEQUATE
else:
PROTOCOL_INFOS[protocol_id]['suitability_info'][task_type] = Suitability.INADEQUATE
save_memory()
return suitable
def prefilter_protocols(protocol_ids, task_type):
print('Prefiltering protocols:', protocol_ids, 'for task type:', task_type)
if len(protocol_ids) <= 1:
# No point in prefiltering if there's only one protocol
return protocol_ids
protocol_metadatas = []
for protocol_id in protocol_ids:
print('Checking suitability for protocol:', protocol_id)
if task_type not in PROTOCOL_INFOS[protocol_id]['suitability_info'] or \
PROTOCOL_INFOS[protocol_id]['suitability_info'][task_type] == Suitability.UNKNOWN:
protocol_metadatas.append({ 'id' : protocol_id, **PROTOCOL_INFOS[protocol_id]['metadata']})
filtered_protocols = filter_protocols_for_task(protocol_metadatas, TASK_SCHEMAS[task_type])
probably_inadequate = [protocol['id'] for protocol in protocol_metadatas if protocol not in filtered_protocols]
for protocol_id in probably_inadequate:
PROTOCOL_INFOS[protocol_id]['suitability_info'][task_type] = Suitability.PROBABLY_INADEQUATE
save_memory()
filtered_ids = [protocol['id'] for protocol in filtered_protocols]
print('Filtered protocols:', filtered_ids)
return filtered_ids
def register_new_protocol(protocol_id, source, protocol_data):
PROTOCOL_INFOS[protocol_id] = {
'suitability_info': {},
'source': source,
'has_implementation': {},
'num_uses' : 0,
'metadata' : {
'name' : protocol_data['name'],
'description' : protocol_data['description']
}
}
base_folder = Path(os.environ.get('STORAGE_PATH')) / 'protocol_documents'
save_protocol_document(base_folder, protocol_id, protocol_data['protocol'])
save_memory()
def submit_protocol_to_public_db(protocol_id, protocol_data):
response = request_manager.post(get_protocol_db_url(), json={
'name': protocol_data['name'],
'description': protocol_data['description'],
'protocol': protocol_data['protocol']
}, timeout=shared_config('timeout'))
source_url = f'{get_protocol_db_url()}/protocol?' + urllib.parse.urlencode({
'id': protocol_id
})
print('Submitted protocol to public database. URL:', source_url)
return source_url if response.status_code == 200 else None
def negotiate_protocol(task_type, target_node):
task_schema = TASK_SCHEMAS[task_type]
protocol_data = negotiate_protocol_for_task(task_schema, target_node)
protocol_id = compute_hash(protocol_data['protocol'])
source_url = submit_protocol_to_public_db(protocol_id, protocol_data)
if source_url is not None:
register_new_protocol(protocol_id, source_url, protocol_data)
else:
raise Exception('Failed to submit protocol to public database')
# Share the protocol with the target
response = request_manager.post(f'{target_node}/registerNegotiatedProtocol', json={
'protocolHash': protocol_id,
'protocolSources': [source_url]
}, timeout=shared_config('timeout'))
if response.status_code != 200:
raise Exception('Failed to share the protocol with the target:', response.text)
return protocol_id
def decide_protocol(task_type, target_node, num_conversations_for_protocol, num_conversations_for_negotiated_protocol):
target_protocols = query_protocols(target_node)
print('Target protocols:', target_protocols)
protocol_id = get_an_adequate_protocol(task_type, list(target_protocols.keys()))
if protocol_id is not None:
print('Found adequate protocol from storage:', protocol_id)
return protocol_id
# If there are none, categorize the remaining target protocols, and try again
for protocol_id, sources in target_protocols.items():
if protocol_id not in PROTOCOL_INFOS:
for source in sources:
response = request_manager.get(source, timeout=shared_config('timeout'))
protocol_document = response.text
metadata = request_manager.get(source.replace('protocol', 'metadata'), timeout=shared_config('timeout')).json()
if metadata['status'] != 'success':
print('Failed to retrieve metadata:', metadata)
continue
metadata = metadata['metadata']
protocol_data = {
'name': metadata['name'],
'description': metadata['description'],
'protocol': protocol_document
}
register_new_protocol(protocol_id, source, protocol_data)
for protocol_id in prefilter_protocols(list(target_protocols.keys()), task_type):
# Categorize the protocol
suitable = categorize_protocol(protocol_id, task_type)
if suitable:
return protocol_id
if get_num_conversations(task_type, target_node) < num_conversations_for_protocol:
# No point in exploring potential protocols (outside of the explicitly supported ones) if we haven't talked enough times with the target
return None
# If there are still none, check if we have in our memory a suitable protocol
protocol_id = get_an_adequate_protocol(task_type, PROTOCOL_INFOS.keys())
if protocol_id is not None:
return protocol_id
# If there are still none, check the public protocol database and categorize them
# Note: in a real system, we wouldn't get all protocols from the database, but rather
# only the ones likely to be suitable for the task
public_protocols_response = request_manager.get(get_protocol_db_url(), timeout=shared_config('timeout')).json()
if public_protocols_response['status'] == 'success':
public_protocols = [x for x in public_protocols_response['protocols']]
else:
public_protocols = []
print('Stored protocols:', PROTOCOL_INFOS.keys())
print('Public protocols:', public_protocols)
for protocol_metadata in public_protocols:
protocol_id = protocol_metadata['id']
# Retrieve the protocol
print('Protocol ID:', urllib.parse.quote_plus(protocol_id))
uri = f'{get_protocol_db_url()}/protocol?' + urllib.parse.urlencode({
'id': protocol_id
})
print('URI:', uri)
protocol_document_response = request_manager.get(uri, timeout=shared_config('timeout'))
if protocol_document_response.status_code == 200:
protocol_document = protocol_document_response.text
protocol_data = {
'name': protocol_metadata['name'],
'descri
gitextract_gcfiyf96/ ├── .gitignore ├── README.md ├── actions.json ├── agents/ │ ├── common/ │ │ └── core.py │ ├── protocol_db/ │ │ └── main.py │ ├── server/ │ │ ├── config.py │ │ ├── main.py │ │ └── memory.py │ └── user/ │ ├── config.py │ ├── main.py │ ├── memory.py │ └── protocol_management.py ├── compute_costs.py ├── config.json ├── generate_screenplay.py ├── generate_users.py ├── mocks/ │ ├── mock_tasks.py │ └── mock_tools.py ├── models/ │ └── openai_model.py ├── orchestrator.py ├── requirements.txt ├── specialized_toolformers/ │ ├── negotiator.py │ ├── programmer.py │ ├── protocol_checker.py │ ├── querier.py │ └── responder.py ├── toolformers/ │ ├── __init__.py │ ├── base.py │ ├── camel.py │ ├── gemini.py │ ├── llama/ │ │ ├── __init__.py │ │ ├── api_gateway.py │ │ ├── function_calling.py │ │ ├── llama.py │ │ ├── sambanova_langchain.py │ │ └── utils.py │ └── unified.py └── utils.py
SYMBOL INDEX (249 symbols across 30 files)
FILE: agents/common/core.py
class Suitability (line 3) | class Suitability(str, Enum):
FILE: agents/protocol_db/main.py
function main (line 27) | def main():
function add_protocol (line 41) | def add_protocol():
function get_protocol (line 70) | def get_protocol():
function get_metadata (line 86) | def get_metadata():
function trigger_share (line 107) | def trigger_share():
function load_config (line 121) | def load_config():
function load_memory (line 134) | def load_memory():
function save_memory (line 152) | def save_memory():
function init (line 163) | def init():
FILE: agents/server/config.py
function get_additional_info (line 19) | def get_additional_info():
function add_mongo_database (line 22) | def add_mongo_database(external_name, schema):
function add_mongo_tools (line 38) | def add_mongo_tools(server_name):
function add_sql_database (line 90) | def add_sql_database(table_schemas, server_name):
function add_sql_tools (line 131) | def add_sql_tools(name_mappings):
function prepare_mock_tool (line 154) | def prepare_mock_tool(tool_schema, internal_name, schema_name):
function prepare_external_tool (line 182) | def prepare_external_tool(tool_schema, internal_name, external_server_na...
function load_config (line 229) | def load_config(server_name):
FILE: agents/server/main.py
function call_implementation (line 40) | def call_implementation(protocol_hash, query):
function handle_query_suitable (line 55) | def handle_query_suitable(protocol_hash, query):
function handle_negotiation (line 71) | def handle_negotiation(raw_query):
function handle_query (line 92) | def handle_query(protocol_hash, protocol_sources, query):
function main (line 148) | def main():
function wellknown (line 168) | def wellknown():
function register_negotiated_protocol (line 176) | def register_negotiated_protocol():
function requires_negotiation (line 207) | def requires_negotiation():
function init (line 213) | def init():
FILE: agents/server/memory.py
function load_memory (line 10) | def load_memory():
function save_memory (line 25) | def save_memory():
function register_new_protocol (line 33) | def register_new_protocol(protocol_hash, protocol_source, protocol_docum...
function has_implementation (line 44) | def has_implementation(protocol_hash):
function get_num_conversations (line 50) | def get_num_conversations(protocol_hash):
function increment_num_conversations (line 56) | def increment_num_conversations(protocol_hash):
function add_routine (line 60) | def add_routine(protocol_id, implementation):
FILE: agents/user/config.py
function get_protocol_db_url (line 10) | def get_protocol_db_url():
function load_standard_config (line 13) | def load_standard_config(user_name):
function load_helper_config (line 35) | def load_helper_config(master_server_name):
function load_config (line 59) | def load_config(user_name):
function get_task (line 66) | def get_task():
FILE: agents/user/main.py
function call_using_implementation (line 39) | def call_using_implementation(task_type, task_schema, protocol_id, task_...
function main (line 77) | def main():
function run_task (line 100) | def run_task(task_type, task_data, target_server):
function run_random_task (line 151) | def run_random_task():
function custom_run (line 157) | def custom_run():
function init (line 175) | def init():
FILE: agents/user/memory.py
function load_memory (line 17) | def load_memory():
function save_memory (line 36) | def save_memory():
function get_num_protocol_uses (line 45) | def get_num_protocol_uses(protocol_id):
function increment_num_protocol_uses (line 51) | def increment_num_protocol_uses(protocol_id):
function get_num_conversations (line 56) | def get_num_conversations(task_type, target_node):
function increment_num_conversations (line 65) | def increment_num_conversations(task_type, target_node):
function add_routine (line 75) | def add_routine(task_type, protocol_id, implementation):
FILE: agents/user/protocol_management.py
function query_protocols (line 18) | def query_protocols(target_node):
function has_implementation (line 27) | def has_implementation(task_type, protocol_id):
function is_adequate (line 36) | def is_adequate(task_type, protocol_id):
function is_categorized (line 45) | def is_categorized(task_type, protocol_id):
function get_an_adequate_protocol (line 54) | def get_an_adequate_protocol(task_type, eligible_protocols):
function categorize_protocol (line 84) | def categorize_protocol(protocol_id, task_type):
function prefilter_protocols (line 100) | def prefilter_protocols(protocol_ids, task_type):
function register_new_protocol (line 129) | def register_new_protocol(protocol_id, source, protocol_data):
function submit_protocol_to_public_db (line 144) | def submit_protocol_to_public_db(protocol_id, protocol_data):
function negotiate_protocol (line 158) | def negotiate_protocol(task_type, target_node):
function decide_protocol (line 182) | def decide_protocol(task_type, target_node, num_conversations_for_protoc...
FILE: compute_costs.py
function main (line 14) | def main():
FILE: generate_screenplay.py
function generate_discrete_power_law (line 14) | def generate_discrete_power_law(num_values, alpha, min_value, total):
function main (line 34) | def main():
FILE: mocks/mock_tasks.py
function _random_date (line 4) | def _random_date():
function _random_date_range (line 9) | def _random_date_range():
function queryWeather (line 15) | def queryWeather():
function bookRoom (line 20) | def bookRoom():
function suggestRestaurant (line 27) | def suggestRestaurant():
function rentSki (line 32) | def rentSki():
function currentWeather (line 38) | def currentWeather():
function menu (line 41) | def menu():
function openingTimes (line 44) | def openingTimes():
function bookTable (line 50) | def bookTable():
function orderEverything (line 58) | def orderEverything():
function _get_movie_date (line 63) | def _get_movie_date():
function availableMovies (line 66) | def availableMovies():
function buyTickets (line 73) | def buyTickets():
function callTaxi (line 81) | def callTaxi():
function getTraffic (line 89) | def getTraffic():
FILE: mocks/mock_tools.py
function weather (line 4) | def weather(location, date):
function currentDate (line 28) | def currentDate():
function getMenu (line 102) | def getMenu(cuisineType):
function dayOfTheWeek (line 107) | def dayOfTheWeek(date):
function sendDriver (line 113) | def sendDriver(restaurant, address):
function trafficInfo (line 118) | def trafficInfo(date, location):
function getAvailableTaxi (line 125) | def getAvailableTaxi(time):
function assignTaxi (line 138) | def assignTaxi(taxiId, time, address):
FILE: models/openai_model.py
class OpenAIModel (line 12) | class OpenAIModel():
method __init__ (line 13) | def __init__(self, api_key, model="gpt-3.5-turbo"):
method chat (line 17) | def chat(self, messages):
FILE: orchestrator.py
function create_id_to_url_mappings (line 22) | def create_id_to_url_mappings(config):
function launch_instance (line 52) | def launch_instance(tmux_server, instance_type, model_type, agent_id, ba...
function run_query (line 67) | def run_query(query_id, user_id, user_url, target, task, data):
function process_task (line 82) | def process_task(worker_id, task):
function worker (line 86) | def worker(worker_id, task_queue, result_list):
function fifo_task_processor (line 96) | def fifo_task_processor(task_list, num_workers):
function run_asynchronous (line 115) | def run_asynchronous(actions):
function main (line 118) | def main():
FILE: specialized_toolformers/negotiator.py
function chat (line 46) | def chat(message, conversation_id, target_node):
function negotiate_protocol_for_task (line 61) | def negotiate_protocol_for_task(task_schema, target_node):
function create_negotiation_conversation (line 110) | def create_negotiation_conversation(tools, additional_info):
function handle_negotiation_for_tools (line 129) | def handle_negotiation_for_tools(message, conversation_id, tools, additi...
FILE: specialized_toolformers/programmer.py
function write_routine_for_task (line 65) | def write_routine_for_task(task_schema, protocol_document):
function write_routine_for_tools (line 90) | def write_routine_for_tools(tools, protocol_document, additional_info):
FILE: specialized_toolformers/protocol_checker.py
function check_protocol_for_task (line 19) | def check_protocol_for_task(protocol_document, task_schema):
function filter_protocols_for_task (line 34) | def filter_protocols_for_task(protocol_metadatas, task_schema):
function check_protocol_for_tools (line 96) | def check_protocol_for_tools(protocol_document, tools):
FILE: specialized_toolformers/querier.py
function construct_query_description (line 24) | def construct_query_description(protocol_document, task_schema, task_data):
function parse_and_handle_query (line 48) | def parse_and_handle_query(query, target_node, protocol_id, source):
function get_output_parameters (line 58) | def get_output_parameters(task_schema):
function handle_conversation (line 70) | def handle_conversation(prompt, message, target_node, protocol_id, sourc...
function send_query_with_protocol (line 146) | def send_query_with_protocol(task_schema, task_data, target_node, protoc...
function send_query_without_protocol (line 154) | def send_query_without_protocol(task_schema, task_data, target_node):
FILE: specialized_toolformers/responder.py
function reply_with_protocol_document (line 26) | def reply_with_protocol_document(query, protocol_document, tools, additi...
function reply_to_nl_query (line 53) | def reply_to_nl_query(query, tools, additional_info):
function reply_to_query (line 74) | def reply_to_query(query, protocol_id, tools, additional_info):
FILE: toolformers/base.py
class Parameter (line 12) | class Parameter:
method __init__ (line 13) | def __init__(self, name, description, required):
method as_openai_info (line 18) | def as_openai_info(self):
method as_standard_api (line 21) | def as_standard_api(self):
class StringParameter (line 24) | class StringParameter(Parameter):
method __init__ (line 25) | def __init__(self, name, description, required):
method as_openai_info (line 28) | def as_openai_info(self):
method as_standard_api (line 35) | def as_standard_api(self):
method as_natural_language (line 43) | def as_natural_language(self):
method as_documented_python (line 46) | def as_documented_python(self):
method as_gemini_tool (line 49) | def as_gemini_tool(self):
method from_standard_api (line 56) | def from_standard_api(api_info):
class EnumParameter (line 59) | class EnumParameter(Parameter):
method __init__ (line 60) | def __init__(self, name, description, values, required):
method as_openai_info (line 64) | def as_openai_info(self):
method as_standard_api (line 71) | def as_standard_api(self):
method as_natural_language (line 80) | def as_natural_language(self):
method as_documented_python (line 83) | def as_documented_python(self):
method as_gemini_tool (line 86) | def as_gemini_tool(self):
method from_standard_api (line 94) | def from_standard_api(api_info):
class NumberParameter (line 97) | class NumberParameter(Parameter):
method __init__ (line 98) | def __init__(self, name, description, required):
method as_openai_info (line 101) | def as_openai_info(self):
method as_standard_api (line 107) | def as_standard_api(self):
method as_natural_language (line 115) | def as_natural_language(self):
method as_documented_python (line 118) | def as_documented_python(self):
method as_gemini_tool (line 121) | def as_gemini_tool(self):
class ArrayParameter (line 127) | class ArrayParameter(Parameter):
method __init__ (line 128) | def __init__(self, name, description, required, item_schema):
method as_openai_info (line 132) | def as_openai_info(self):
method as_standard_api (line 139) | def as_standard_api(self):
method as_natural_language (line 148) | def as_natural_language(self):
method as_documented_python (line 151) | def as_documented_python(self):
method as_gemini_tool (line 154) | def as_gemini_tool(self):
function parameter_from_openai_api (line 161) | def parameter_from_openai_api(parameter_name, schema, required):
class Tool (line 173) | class Tool:
method __init__ (line 174) | def __init__(self, name, description, parameters, function, output_sch...
method call_tool_for_toolformer (line 181) | def call_tool_for_toolformer(self, *args, **kwargs):
method as_openai_info (line 192) | def as_openai_info(self):
method as_gemini_tool (line 206) | def as_gemini_tool(self) -> CallableFunctionDeclaration:
method as_llama_schema (line 222) | def as_llama_schema(self):
method as_natural_language (line 235) | def as_natural_language(self):
method as_standard_api (line 251) | def as_standard_api(self):
method as_documented_python (line 258) | def as_documented_python(self):
method as_executable_function (line 272) | def as_executable_function(self):
method from_standard_api (line 283) | def from_standard_api(api_info): # TODO: Drop?
function send_usage_to_db (line 295) | def send_usage_to_db(usage, time_start, time_end, agent, category, model):
class Conversation (line 312) | class Conversation(ABC):
method chat (line 314) | def chat(self, message, role='user', print_output=True):
class Toolformer (line 317) | class Toolformer(ABC):
method new_conversation (line 319) | def new_conversation(self, category=None) -> Conversation:
FILE: toolformers/camel.py
class CamelConversation (line 15) | class CamelConversation(Conversation):
method __init__ (line 16) | def __init__(self, toolformer, agent, category=None):
method chat (line 21) | def chat(self, message, role='user', print_output=True):
class CamelToolformer (line 48) | class CamelToolformer(Toolformer):
method __init__ (line 49) | def __init__(self, model_platform, model_type, model_config_dict, syst...
method name (line 58) | def name(self):
method new_conversation (line 64) | def new_conversation(self, category=None) -> Conversation:
function make_openai_toolformer (line 79) | def make_openai_toolformer(model_type_internal, system_prompt, tools : L...
FILE: toolformers/gemini.py
class GeminiConversation (line 15) | class GeminiConversation(Conversation):
method __init__ (line 16) | def __init__(self, model_name, chat_agent : ChatSession, category=None):
method chat (line 21) | def chat(self, message, role='user', print_output=True):
class GeminiToolformer (line 79) | class GeminiToolformer(Toolformer):
method __init__ (line 80) | def __init__(self, model_name, system_prompt, tools):
method new_conversation (line 85) | def new_conversation(self, category=None) -> Conversation:
function make_gemini_toolformer (line 98) | def make_gemini_toolformer(model_name, system_prompt, tools : List[Tool]):
FILE: toolformers/llama/api_gateway.py
class APIGateway (line 31) | class APIGateway:
method load_llm (line 33) | def load_llm(
FILE: toolformers/llama/function_calling.py
class FunctionCallingLlm (line 56) | class FunctionCallingLlm:
method __init__ (line 61) | def __init__(
method execute (line 119) | def execute(self, invoked_tools: List[dict]) -> tuple[bool, List[str]]:
method json_finder (line 154) | def json_finder(self, input_string: str) -> Optional[str]:
method msgs_to_llama3_str (line 203) | def msgs_to_llama3_str(self, msgs: list) -> str:
method msgs_to_sncloud (line 230) | def msgs_to_sncloud(self, msgs: list) -> list:
method function_call_llm (line 251) | def function_call_llm(self, query: str, max_it: int = 5, debug: bool =...
FILE: toolformers/llama/llama.py
class LlamaConversation (line 8) | class LlamaConversation(Conversation):
method __init__ (line 9) | def __init__(self, model_name, function_calling_llm : FunctionCallingL...
method chat (line 14) | def chat(self, message, role='user', print_output=True):
class LlamaToolformer (line 34) | class LlamaToolformer(Toolformer):
method __init__ (line 35) | def __init__(self, model_name: str, system_prompt: str, tools: List[To...
method new_conversation (line 39) | def new_conversation(self, category=None) -> LlamaConversation:
function make_llama_toolformer (line 42) | def make_llama_toolformer(model_name, system_prompt: str, tools: List[To...
FILE: toolformers/llama/sambanova_langchain.py
class SSEndpointHandler (line 19) | class SSEndpointHandler:
method __init__ (line 26) | def __init__(self, host_url: str, api_base_uri: str):
method _process_response (line 37) | def _process_response(self, response: requests.Response) -> Dict:
method _process_streaming_response (line 63) | def _process_streaming_response(
method _get_full_url (line 100) | def _get_full_url(self, path: str) -> str:
method nlp_predict (line 110) | def nlp_predict(
method nlp_predict_stream (line 157) | def nlp_predict_stream(
class SambaStudio (line 211) | class SambaStudio(LLM):
class Config (line 271) | class Config:
method is_lc_serializable (line 277) | def is_lc_serializable(cls) -> bool:
method _identifying_params (line 281) | def _identifying_params(self) -> Dict[str, Any]:
method _llm_type (line 286) | def _llm_type(self) -> str:
method validate_environment (line 291) | def validate_environment(cls, values: Dict) -> Dict:
method _get_tuning_params (line 309) | def _get_tuning_params(self, stop: Optional[List[str]]) -> str:
method _handle_nlp_predict (line 335) | def _handle_nlp_predict(self, sdk: SSEndpointHandler, prompt: Union[Li...
method _handle_completion_requests (line 378) | def _handle_completion_requests(self, prompt: Union[List[str], str], s...
method _handle_nlp_predict_stream (line 396) | def _handle_nlp_predict_stream(
method _stream (line 448) | def _stream(
method _handle_stream_request (line 478) | def _handle_stream_request(
method _call (line 504) | def _call(
class SambaNovaCloud (line 531) | class SambaNovaCloud(LLM):
class Config (line 583) | class Config:
method is_lc_serializable (line 589) | def is_lc_serializable(cls) -> bool:
method _identifying_params (line 593) | def _identifying_params(self) -> Dict[str, Any]:
method invoke (line 604) | def invoke(
method _llm_type (line 644) | def _llm_type(self) -> str:
method validate_environment (line 649) | def validate_environment(cls, values: Dict) -> Dict:
method _handle_nlp_predict_stream (line 657) | def _handle_nlp_predict_stream(
method _stream (line 753) | def _stream(
method _handle_stream_request (line 778) | def _handle_stream_request(
method _call (line 804) | def _call(
FILE: toolformers/llama/utils.py
function usage_tracker (line 6) | def usage_tracker():
function get_total_usage (line 15) | def get_total_usage():
function append_to_usage_tracker (line 30) | def append_to_usage_tracker(usage):
FILE: toolformers/unified.py
function make_toolformer (line 8) | def make_toolformer(model_type_internal, system_prompt, tools):
function make_default_toolformer (line 18) | def make_default_toolformer(system_prompt, tools):
FILE: utils.py
function compute_hash (line 13) | def compute_hash(s):
function save_protocol_document (line 23) | def save_protocol_document(base_folder, protocol_id, protocol_document):
function load_protocol_document (line 35) | def load_protocol_document(base_folder, protocol_id):
function execute_routine (line 46) | def execute_routine(base_folder, protocol_id, task_data, tools):
function save_routine (line 67) | def save_routine(base_folder, protocol_id, routine):
function extract (line 80) | def extract(text, start_tag, end_tag):
function download_and_verify_protocol (line 89) | def download_and_verify_protocol(protocol_hash, protocol_source):
function send_raw_query (line 115) | def send_raw_query(text, protocol_id, target_node, source):
function use_query_id (line 127) | def use_query_id(query_id):
function get_query_id (line 138) | def get_query_id():
function shared_config (line 143) | def shared_config(key, fallback='no_fallback'):
function serialize_gemini_data (line 155) | def serialize_gemini_data(output):
Condensed preview — 38 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (423K chars).
[
{
"path": ".gitignore",
"chars": 112,
"preview": "/**/__pycache__/**\nvenv/**\n.env\npast_experiments/**\nnew_tests/**\nscript_utils/**\nstorage/**\nlogs/**\ndatabases/**"
},
{
"path": "README.md",
"chars": 2457,
"preview": "# Agora - A Scalable Communication Protocol for Networks of LLMs\n[Paper](https://arxiv.org/abs/2410.11905) | [Website](h"
},
{
"path": "actions.json",
"chars": 148535,
"preview": "[\n [\n \"phenex\",\n [\n \"restaurant2\",\n \"orderEverything\"\n ],\n {\n \"deliveryAddress\": \"68 Wilson "
},
{
"path": "agents/common/core.py",
"chars": 182,
"preview": "from enum import Enum\n\nclass Suitability(str, Enum):\n ADEQUATE = 'adequate'\n INADEQUATE = 'inadequate'\n PROBABL"
},
{
"path": "agents/protocol_db/main.py",
"chars": 4266,
"preview": "import sys\nsys.path.append('.')\n\nimport dotenv\ndotenv.load_dotenv()\n\nimport os\nfrom pathlib import Path\n\nif os.environ.g"
},
{
"path": "agents/server/config.py",
"chars": 11391,
"preview": "import json\nimport os\nimport random\n\nimport requests as request_manager\n\nimport databases.mongo as mongo\nimport database"
},
{
"path": "agents/server/main.py",
"chars": 7780,
"preview": "import sys\nsys.path.append('.')\n\nimport dotenv\ndotenv.load_dotenv()\n\nfrom pathlib import Path\nimport os\n\nif os.environ.g"
},
{
"path": "agents/server/memory.py",
"chars": 2062,
"preview": "import json\nimport os\nfrom pathlib import Path\n\nfrom agents.common.core import Suitability\nfrom utils import save_protoc"
},
{
"path": "agents/user/config.py",
"chars": 2214,
"preview": "import json\nimport random\n\nTASK_CONFIGS = []\nTASK_SCHEMAS = {}\nNODE_URLS = {}\n\n# Workaround for the fact that once a con"
},
{
"path": "agents/user/main.py",
"chars": 6721,
"preview": "import sys\nsys.path.append('.')\n\nimport dotenv\ndotenv.load_dotenv()\n\nimport json\nimport os\nfrom pathlib import Path\nimpo"
},
{
"path": "agents/user/memory.py",
"chars": 2355,
"preview": "import json\nimport os\nfrom pathlib import Path\n\nfrom utils import save_routine\n\n# Stores for each protocol\n# - The id\n# "
},
{
"path": "agents/user/protocol_management.py",
"chars": 11641,
"preview": "import urllib\n\nimport os\nfrom pathlib import Path\nimport requests as request_manager\n\n\nfrom utils import load_protocol_d"
},
{
"path": "compute_costs.py",
"chars": 672,
"preview": "from databases.mongo import query_database\n\nCOSTS = {\n 'gpt-4o' : {\n 'prompt_tokens' : 5e-6,\n 'completi"
},
{
"path": "config.json",
"chars": 61306,
"preview": "{\n \"shared\": {\n \"timeout\": 1000,\n \"backoff_lower\": 15,\n \"backoff_upper\": 30,\n \"backoff_factor\": 2,\n \"bac"
},
{
"path": "generate_screenplay.py",
"chars": 2520,
"preview": "NUM_USERS = 80\nMIN_CONVERSATIONS = 1\nTOTAL_CONVERSATIONS = 100\nNUM_ACTIONS = 5\n\nimport json\n\nimport numpy as np\nimport m"
},
{
"path": "generate_users.py",
"chars": 617,
"preview": "import json\nimport random\n\nrandom.seed(42)\n\nwith open('names.json', 'r') as f:\n names = json.load(f)\n\nmodels = ['gpt-"
},
{
"path": "mocks/mock_tasks.py",
"chars": 2474,
"preview": "import datetime\nimport random\n\ndef _random_date():\n chosen_date = datetime.datetime.now() - datetime.timedelta(days=r"
},
{
"path": "mocks/mock_tools.py",
"chars": 3082,
"preview": "import random\nimport datetime\n\ndef weather(location, date):\n temperature = random.randint(-10, 30)\n precipitation "
},
{
"path": "models/openai_model.py",
"chars": 1033,
"preview": "import os\nfrom openai import OpenAI\n\nfrom dotenv import load_dotenv\nload_dotenv()\n\nclient = OpenAI(\n # This is the de"
},
{
"path": "orchestrator.py",
"chars": 6946,
"preview": "import sys\nsys.path.append('.')\n\nimport dotenv\ndotenv.load_dotenv()\n\nimport concurrent.futures\nimport json\nfrom pathlib "
},
{
"path": "requirements.txt",
"chars": 82,
"preview": "camel-ai\npython-dotenv\nflask\ngoogle-generativeai\nlangchain\nlibtmux\npymongo\npymssql"
},
{
"path": "specialized_toolformers/negotiator.py",
"chars": 6404,
"preview": "# The negotiator negotiates a protocol based on the task schema and data (for the user) and the tools available (for the"
},
{
"path": "specialized_toolformers/programmer.py",
"chars": 6319,
"preview": "# The programmer creates implementations depending on a protocol specification\n\nimport json\nimport os\n\nfrom toolformers."
},
{
"path": "specialized_toolformers/protocol_checker.py",
"chars": 4949,
"preview": "# The protocol checker is a toolformer that checks if a protocol is suitable for a given task\n\nimport sys\nsys.path.appen"
},
{
"path": "specialized_toolformers/querier.py",
"chars": 7482,
"preview": "# The querier is a special toolformer that queries a service based on a protocol document.\n# It receives the protocol do"
},
{
"path": "specialized_toolformers/responder.py",
"chars": 3283,
"preview": "# The responder is a special toolformer that replies to a service based on a protocol document.\n# It receives the protoc"
},
{
"path": "toolformers/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "toolformers/base.py",
"chars": 10990,
"preview": "from abc import ABC, abstractmethod\n\nimport json\n\nfrom google.generativeai.types import CallableFunctionDeclaration\nimpo"
},
{
"path": "toolformers/camel.py",
"chars": 3445,
"preview": "import datetime\nimport os\nfrom typing import List\nimport warnings\n\nfrom toolformers.base import Conversation, Toolformer"
},
{
"path": "toolformers/gemini.py",
"chars": 3577,
"preview": "import datetime\nimport os\nfrom random import random\nimport time\nimport traceback\nfrom typing import List\n\nfrom toolforme"
},
{
"path": "toolformers/llama/__init__.py",
"chars": 40,
"preview": "from .llama import make_llama_toolformer"
},
{
"path": "toolformers/llama/api_gateway.py",
"chars": 5733,
"preview": "import logging\nimport os\nimport sys\nfrom typing import Optional\n\nfrom langchain_community.llms.sambanova import SambaStu"
},
{
"path": "toolformers/llama/function_calling.py",
"chars": 14021,
"preview": "import json\nimport os\nimport re\nfrom random import random\nfrom pprint import pprint\nimport time\nfrom typing import List,"
},
{
"path": "toolformers/llama/llama.py",
"chars": 1778,
"preview": "import datetime\nimport os\nfrom typing import List\n\nfrom toolformers.base import Conversation, Toolformer, Tool, send_usa"
},
{
"path": "toolformers/llama/sambanova_langchain.py",
"chars": 29909,
"preview": "\"\"\"Langchain Wrapper around Sambanova LLM APIs.\"\"\"\n\nimport json\nfrom typing import Any, Dict, Generator, Iterator, List,"
},
{
"path": "toolformers/llama/utils.py",
"chars": 679,
"preview": "from contextlib import contextmanager\n\nUSAGE_TRACKER = None\n\n@contextmanager\ndef usage_tracker():\n global USAGE_TRACK"
},
{
"path": "toolformers/unified.py",
"chars": 959,
"preview": "import os\n\nfrom toolformers.camel import make_openai_toolformer\nfrom toolformers.gemini import make_gemini_toolformer\nfr"
},
{
"path": "utils.py",
"chars": 5445,
"preview": "import base64\nfrom contextlib import contextmanager\nimport hashlib\nimport importlib\nimport json\nfrom pathlib import Path"
}
]
About this extraction
This page contains the full source code of the agora-protocol/paper-demo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 38 files (374.5 KB), approximately 104.6k tokens, and a symbol index with 249 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.