瀏覽代碼

add example showing use of JSON format

Signed-off-by: Matt Williams <m@technovangelist.com>
Matt Williams 1 年之前
父節點
當前提交
73f3448ede

+ 31 - 0
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))

+ 35 - 0
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))

+ 13 - 0
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.

+ 1 - 0
examples/python-json-datagenerator/requirements.txt

@@ -0,0 +1 @@
+Requests==2.31.0