File size: 4,274 Bytes
303d85f
 
 
 
 
 
 
 
 
 
 
 
 
c43070d
 
303d85f
c43070d
d1d124c
 
 
 
 
303d85f
a57e479
6121ab9
a57e479
c43070d
6121ab9
a57e479
6121ab9
a57e479
cb7900d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
---
license: llama3
base_model: meta-llama/Meta-Llama-3.2-3B
language:
- en
pipeline_tag: text-generation
tags:
- code
- spatial
- sql
- GIS
- PostGIS
---


**EXPERIMENTAL ALPHA**
</br>
**CURRENTLY TESTING**
</br>
**ENGLISH ONLY**
</br>
**MODIFICATIONS INBOUND - NOTES BELOW ON SQL ##RESPONSE TRAINING CHALLENGES**


### Model Information

This model, Llama-3.2-3B-Instruct-Spatial-SQL-1.0, is an 3B, narrow use case, text to spatial SQL, lightly fine-tuned model. In general, its primary use case
is the Natural Language command adaptation of particular geographic spatial functions as normally defined in pure SQL. Data input should be a combination of an English prefix in the form of a question, and a coordinate prompt injection, likely from an active mapping system application coordinate list. Output is PostGIS spatial SQL.

There are four primary geographic functions released in version 1.0.

**Model developer**: Mark Rodrigo
- Chat to Map interfacing.

**Model Architecture**: The model is a QLoRA / Supervised Fine Tuning (SFT)

### Model Input / Output Overview:

Input: Text plus coordinate prompt injection.
Output: **PostGIS spatial SQL**
NOTE: Inputs and outputs are in meters and or geographic decimal degrees WGS 84 coordinates.

| Function  | Question Input  | Geo Input | SQL Execution Output      |
|:---------:|:---------------:|:---------:|:-------------------------:|
| Area      | Area question   | Polygon   | Number - Area sq meters   |
| Centroid  | Center question | Polygon   | Point                     |
| Buffer    | Buffer distance | Point     | Polygon                   |
| Length    | Length question | Line      | Number - Length in meters |

### Example Prompt / Prompt File

<|begin_of_text|><|start_header_id|>system<|end_header_id|>
<p></p>
You are a helpful assistant. You are an expert at PostGIS and Postgresql and SQL and psql.
<p></p>
<|eot_id|><|start_header_id|>user<|end_header_id|>

\### Instruction: Write a PostGIS SQL statement for the following.
<p></p>

\### Input:

<p></p>
{input}

<p></p>

\### Response:

<|eot_id|><|start_header_id|>assistant<|end_header_id|>


### Examples
**Note 10/6/24 **
- Centroid and Buffer responses are currently returning as WKT. While technically correct, this is not the desired response, and will be addressed.
</br> Reference - https://postgis.net/docs/ST_AsText.html
- English and Chinese models, etc. currently require the 8b models and or additional fine-tuning for 3b.

AREA
<p></p>

\### Input: What is the area for the polygon? : 'Polygon ((-3.7515154 40.3855551, -3.7514972 40.3856581, -3.7507005 40.3855767, -3.7507167 40.3854722, -3.7515154 40.3855551))'
<p></p>

\### Response: SELECT ST_Area(geog) As area FROM (select 'Polygon ((-3.7515154 40.3855551, -3.7514972 40.3856581, -3.7507005 40.3855767, -3.7507167 40.3854722, -3.7515154 40.3855551))' :: geography geog) subquery;
<p></p>

CENTROID
<p></p>

\### Input: What is the centroid for the polygon? : 'Polygon ((-3.6934636 40.4808785, -3.6933352 40.4811486, -3.6930125 40.4810598, -3.693141 40.4807897, -3.6934636 40.4808785))'
<p></p>

**actual**

\### Response: SELECT ST_Centroid(geog) FROM (select 'Polygon ((-3.6934636 40.4808785, -3.6933352 40.4811486, -3.6930125 40.4810598, -3.693141 40.4807897, -3.6934636 40.4808785))' :: geography as geog) subquery

**desired**

\### Response: SELECT ST_AsText(ST_Centroid(geog)) As centroid FROM (select 'Polygon ((-3.6934636 40.4808785, -3.6933352 40.4811486, -3.6930125 40.4810598, -3.693141 40.4807897, -3.6934636 40.4808785))' :: geography geog) subquery;

<p></p>
BUFFER
<p></p>

\### Input: What is the thousand meter buffer for the following point? : 'Point(-8.7522658 41.3862664)'
<p></p>

**actual**

\### Response: SELECT ST_Buffer(geog, 1000) FROM (select 'Point(-8.7522658 41.3862664)' :: geography as geog) subquery

**desired**

\### Response: SELECT ST_AsText(ST_Buffer(geog, 1000)) as buffer FROM (select 'Point(-8.7522658 41.3862664)' :: geography geog) subquery;

<p></p>
LENGTH
<p></p>

\### Input: How long is the line? : 'LINESTRING (-3.6976693 40.4263178, -3.6986082 40.4258729)'
<p></p>

\### Response: SELECT ST_Length(geog) As length FROM (select 'LINESTRING (-3.6976693 40.4263178, -3.6986082 40.4258729)' :: geography geog) subquery;
<p></p>