diff --git a/examples/python-json-datagenerator/predefinedschema.py b/examples/python-json-datagenerator/predefinedschema.py new file mode 100644 index 00000000..56d8afa2 --- /dev/null +++ b/examples/python-json-datagenerator/predefinedschema.py @@ -0,0 +1,31 @@ +import requests +import json +import random + +model = "llama2" +template = { + "firstName": "", + "lastName": "", + "address": { + "theStreet": "", + "theCity": "", + "theState": "", + "theZipCode": "" + }, + "phoneNumber": "" +} + +prompt = f"generate one realisticly believable sample data set of a persons first name, last name, address in the US, and phone number. \nUse the following template: {json.dumps(template)}." + +data = { + "prompt": prompt, + "model": model, + "format": "json", + "stream": False, + "options": {"temperature": 2.5, "top_p": 0.99, "top_k": 100}, +} + +print(f"Generating a sample user") +response = requests.post("http://localhost:11434/api/generate", json=data, stream=False) +json_data = json.loads(response.text) +print(json.dumps(json.loads(json_data["response"]), indent=2)) diff --git a/examples/python-json-datagenerator/randomaddresses.py b/examples/python-json-datagenerator/randomaddresses.py new file mode 100644 index 00000000..d5780c88 --- /dev/null +++ b/examples/python-json-datagenerator/randomaddresses.py @@ -0,0 +1,35 @@ +import requests +import json +import random + +countries = [ + "the US", + "the UK", + "the Netherlands", + "Germany", + "Mexico", + "Canada", + "France", +] +country = random.choice(countries) +model = "llama2" + +prompt = ( + "generate one realisticly believable sample data set of a persons first name, last name, address in the" + + country + + ", and phone number. Do not use common names. Respond using JSON. Key names should with no backslashes, values should use plain ascii with no special characters." +) + +data = { + "prompt": prompt, + "model": model, + "format": "json", + "stream": False, + "options": {"temperature": 2.5, "top_p": 0.99, "top_k": 100}, +} + +print(f"Generating a sample user in {country}") +response = requests.post("http://localhost:11434/api/generate", json=data, stream=False) +json_data = json.loads(response.text) + +print(json.dumps(json.loads(json_data["response"]), indent=2)) diff --git a/examples/python-json-datagenerator/readme.md b/examples/python-json-datagenerator/readme.md new file mode 100644 index 00000000..c311c42c --- /dev/null +++ b/examples/python-json-datagenerator/readme.md @@ -0,0 +1,13 @@ +# JSON Output Example + +New in version 0.1.9 is support for JSON output. There are two python scripts in this example. `randomaddresses.py` generates random addresses from different countries. `predefinedschema.py` sets a template for the model to fill in. + +## Review the Code + +Both programs are basically the same, with a different prompt for each, demonstrating two different ideas. The key part of getting JSON out of a model is to state in the prompt or system prompt that it should respond using JSON, and specifying the `format` as `json` in the data body. + +When running `randomaddresses.py` you will see that the schema changes and adapts to the chosen country. + +In `predefinedschema.py`, a template has been specified in the prompt as well. It's been defined as JSON and then dumped into the prompt string to make it easier to work with. + +Both examples turn streaming off so that we end up with the completed JSON all at once. We need to convert the `response.text` to JSON so that when we output it as a string we can set the indent spacing to make the output attractive. diff --git a/examples/python-json-datagenerator/requirements.txt b/examples/python-json-datagenerator/requirements.txt new file mode 100644 index 00000000..9688b8ec --- /dev/null +++ b/examples/python-json-datagenerator/requirements.txt @@ -0,0 +1 @@ +Requests==2.31.0