add example showing use of JSON format
Signed-off-by: Matt Williams <m@technovangelist.com>
This commit is contained in:
parent
cdddd3df65
commit
73f3448ede
4 changed files with 80 additions and 0 deletions
31
examples/python-json-datagenerator/predefinedschema.py
Normal file
31
examples/python-json-datagenerator/predefinedschema.py
Normal file
|
@ -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))
|
35
examples/python-json-datagenerator/randomaddresses.py
Normal file
35
examples/python-json-datagenerator/randomaddresses.py
Normal file
|
@ -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))
|
13
examples/python-json-datagenerator/readme.md
Normal file
13
examples/python-json-datagenerator/readme.md
Normal file
|
@ -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.
|
1
examples/python-json-datagenerator/requirements.txt
Normal file
1
examples/python-json-datagenerator/requirements.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Requests==2.31.0
|
Loading…
Reference in a new issue