| ofs | hex dump | ascii | 
|---|
| 0000 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 00 00 00 00 00 00 00 00 00 00 00 00  | gptel-20240424.2306/............ | 
| 0020 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0040 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0060 |  00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000755.0000000.0000000.0000 | 
| 0080 |  30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 32 31 32 30 00 20 35 00 00 00  | 0000000.00000000000.012120..5... | 
| 00a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 00c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 00e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0100 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 0120 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 0140 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0160 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0180 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 01a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 01c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 01e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0200 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 67 65 6d 69 6e 69  | gptel-20240424.2306/gptel-gemini | 
| 0220 |  2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .el............................. | 
| 0240 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0260 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 0280 |  30 30 31 35 31 33 37 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 30 33 32 00 20 30 00 00 00  | 0015137.00000000000.015032..0... | 
| 02a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 02c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 02e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0300 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 0320 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 0340 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0360 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0380 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 03a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 03c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 03e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0400 |  3b 3b 3b 20 67 70 74 65 6c 2d 67 65 6d 69 6e 69    2e 65 6c 20 2d 2d 2d 20 20 47 65 6d 69 6e 69 20  | ;;;.gptel-gemini.el.---..Gemini. | 
| 0420 |  73 75 70 70 70 6f 72 74 20 66 6f 72 20 67 70 74    65 6c 20 20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d  | suppport.for.gptel..-*-.lexical- | 
| 0440 |  62 69 6e 64 69 6e 67 3a 20 74 3b 20 2d 2a 2d 0a    0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28 43  | binding:.t;.-*-..;;.Copyright.(C | 
| 0460 |  29 20 32 30 32 33 20 20 4b 61 72 74 68 69 6b 20    43 68 69 6b 6d 61 67 61 6c 75 72 0a 0a 3b 3b 20  | ).2023..Karthik.Chikmagalur..;;. | 
| 0480 |  41 75 74 68 6f 72 3a 20 4b 61 72 74 68 69 6b 20    43 68 69 6b 6d 61 67 61 6c 75 72 20 3c 6b 61 72  | Author:.Karthik.Chikmagalur.<kar | 
| 04a0 |  74 68 69 6b 63 68 69 6b 6d 61 67 61 6c 75 72 40    67 6d 61 69 6c 2e 63 6f 6d 3e 0a 0a 3b 3b 20 54  | thikchikmagalur@gmail.com>..;;.T | 
| 04c0 |  68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66    72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  | his.program.is.free.software;.yo | 
| 04e0 |  75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75    74 65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64  | u.can.redistribute.it.and/or.mod | 
| 0500 |  69 66 79 0a 3b 3b 20 69 74 20 75 6e 64 65 72 20    74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  | ify.;;.it.under.the.terms.of.the | 
| 0520 |  20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62    6c 69 63 20 4c 69 63 65 6e 73 65 20 61 73 20 70  | .GNU.General.Public.License.as.p | 
| 0540 |  75 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 74    68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65  | ublished.by.;;.the.Free.Software | 
| 0560 |  20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74    68 65 72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66  | .Foundation,.either.version.3.of | 
| 0580 |  20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72    0a 3b 3b 20 28 61 74 20 79 6f 75 72 20 6f 70 74  | .the.License,.or.;;.(at.your.opt | 
| 05a0 |  69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76    65 72 73 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69 73  | ion).any.later.version...;;.This | 
| 05c0 |  20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74    72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  | .program.is.distributed.in.the.h | 
| 05e0 |  6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c    20 62 65 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 62  | ope.that.it.will.be.useful,.;;.b | 
| 0600 |  75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57    41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74  | ut.WITHOUT.ANY.WARRANTY;.without | 
| 0620 |  20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65    64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b  | .even.the.implied.warranty.of.;; | 
| 0640 |  20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59    20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20  | .MERCHANTABILITY.or.FITNESS.FOR. | 
| 0660 |  41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52    50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b  | A.PARTICULAR.PURPOSE...See.the.; | 
| 0680 |  3b 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75    62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72  | ;.GNU.General.Public.License.for | 
| 06a0 |  20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a    3b 3b 20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61  | .more.details...;;.You.should.ha | 
| 06c0 |  76 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f    70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65  | ve.received.a.copy.of.the.GNU.Ge | 
| 06e0 |  6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63    65 6e 73 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77 69  | neral.Public.License.;;.along.wi | 
| 0700 |  74 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e    20 20 49 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68  | th.this.program...If.not,.see.<h | 
| 0720 |  74 74 70 73 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f    72 67 2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a  | ttps://www.gnu.org/licenses/>... | 
| 0740 |  3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a    0a 3b 3b 20 54 68 69 73 20 66 69 6c 65 20 61 64  | ;;;.Commentary:..;;.This.file.ad | 
| 0760 |  64 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74    68 65 20 47 65 6d 69 6e 69 20 41 50 49 20 74 6f  | ds.support.for.the.Gemini.API.to | 
| 0780 |  20 67 70 74 65 6c 0a 0a 3b 3b 3b 20 43 6f 64 65    3a 0a 28 72 65 71 75 69 72 65 20 27 67 70 74 65  | .gptel..;;;.Code:.(require.'gpte | 
| 07a0 |  6c 29 0a 28 72 65 71 75 69 72 65 20 27 63 6c 2d    67 65 6e 65 72 69 63 29 0a 28 72 65 71 75 69 72  | l).(require.'cl-generic).(requir | 
| 07c0 |  65 20 27 6d 61 70 29 0a 28 65 76 61 6c 2d 77 68    65 6e 2d 63 6f 6d 70 69 6c 65 20 28 72 65 71 75  | e.'map).(eval-when-compile.(requ | 
| 07e0 |  69 72 65 20 27 63 6c 2d 6c 69 62 29 29 0a 0a 28    64 65 63 6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e  | ire.'cl-lib))..(declare-function | 
| 0800 |  20 70 72 6f 70 2d 6d 61 74 63 68 2d 76 61 6c 75    65 20 22 74 65 78 74 2d 70 72 6f 70 65 72 74 79  | .prop-match-value."text-property | 
| 0820 |  2d 73 65 61 72 63 68 22 29 0a 28 64 65 63 6c 61    72 65 2d 66 75 6e 63 74 69 6f 6e 20 74 65 78 74  | -search").(declare-function.text | 
| 0840 |  2d 70 72 6f 70 65 72 74 79 2d 73 65 61 72 63 68    2d 62 61 63 6b 77 61 72 64 20 22 74 65 78 74 2d  | -property-search-backward."text- | 
| 0860 |  70 72 6f 70 65 72 74 79 2d 73 65 61 72 63 68 22    29 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63 74  | property-search").(declare-funct | 
| 0880 |  69 6f 6e 20 6a 73 6f 6e 2d 72 65 61 64 20 22 6a    73 6f 6e 22 29 0a 28 64 65 66 76 61 72 20 6a 73  | ion.json-read."json").(defvar.js | 
| 08a0 |  6f 6e 2d 6f 62 6a 65 63 74 2d 74 79 70 65 29 0a    0a 3b 3b 3b 20 47 65 6d 69 6e 69 0a 28 63 6c 2d  | on-object-type)..;;;.Gemini.(cl- | 
| 08c0 |  64 65 66 73 74 72 75 63 74 0a 20 20 20 20 28 67    70 74 65 6c 2d 67 65 6d 69 6e 69 20 28 3a 63 6f  | defstruct.....(gptel-gemini.(:co | 
| 08e0 |  6e 73 74 72 75 63 74 6f 72 20 67 70 74 65 6c 2d    2d 6d 61 6b 65 2d 67 65 6d 69 6e 69 29 0a 20 20  | nstructor.gptel--make-gemini)... | 
| 0900 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 3a 63 6f 70 69 65 72 20 6e 69 6c 29 0a 20 20  | ................(:copier.nil)... | 
| 0920 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 3a 69 6e 63 6c 75 64 65 20 67 70 74 65 6c 2d  | ................(:include.gptel- | 
| 0940 |  62 61 63 6b 65 6e 64 29 29 29 0a 0a 28 63 6c 2d    64 65 66 6d 65 74 68 6f 64 20 67 70 74 65 6c 2d  | backend)))..(cl-defmethod.gptel- | 
| 0960 |  63 75 72 6c 2d 2d 70 61 72 73 65 2d 73 74 72 65    61 6d 20 28 28 5f 62 61 63 6b 65 6e 64 20 67 70  | curl--parse-stream.((_backend.gp | 
| 0980 |  74 65 6c 2d 67 65 6d 69 6e 69 29 20 5f 69 6e 66    6f 29 0a 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e  | tel-gemini)._info)...(let*.((con | 
| 09a0 |  74 65 6e 74 2d 73 74 72 73 29 29 0a 20 20 20 20    28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20  | tent-strs)).....(condition-case. | 
| 09c0 |  6e 69 6c 0a 20 20 20 20 20 20 20 20 3b 3b 20 77    68 69 6c 65 2d 6c 65 74 20 69 73 20 45 6d 61 63  | nil.........;;.while-let.is.Emac | 
| 09e0 |  73 20 32 39 2e 31 2b 20 6f 6e 6c 79 0a 20 20 20    20 20 20 20 20 28 77 68 69 6c 65 20 28 70 72 6f  | s.29.1+.only.........(while.(pro | 
| 0a00 |  67 31 20 28 73 65 61 72 63 68 2d 66 6f 72 77 61    72 64 20 22 7b 22 20 6e 69 6c 20 74 29 0a 20 20  | g1.(search-forward."{".nil.t)... | 
| 0a20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    62 61 63 6b 77 61 72 64 2d 63 68 61 72 20 31 29  | ...............(backward-char.1) | 
| 0a40 |  29 0a 20 20 20 20 20 20 20 20 20 20 28 73 61 76    65 2d 6d 61 74 63 68 2d 64 61 74 61 0a 20 20 20  | )...........(save-match-data.... | 
| 0a60 |  20 20 20 20 20 20 20 20 20 28 77 68 65 6e 2d 6c    65 74 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20  | .........(when-let*............. | 
| 0a80 |  20 20 20 20 28 28 72 65 73 70 6f 6e 73 65 20 28    67 70 74 65 6c 2d 2d 6a 73 6f 6e 2d 72 65 61 64  | ....((response.(gptel--json-read | 
| 0aa0 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 74 65 78 74 20 28 6d 61 70 2d 6e  | ))..................(text.(map-n | 
| 0ac0 |  65 73 74 65 64 2d 65 6c 74 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ested-elt....................... | 
| 0ae0 |  20 20 72 65 73 70 6f 6e 73 65 20 27 28 3a 63 61    6e 64 69 64 61 74 65 73 20 30 20 3a 63 6f 6e 74  | ..response.'(:candidates.0.:cont | 
| 0b00 |  65 6e 74 20 3a 70 61 72 74 73 20 30 20 3a 74 65    78 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20  | ent.:parts.0.:text)))).......... | 
| 0b20 |  20 20 20 20 20 28 70 75 73 68 20 74 65 78 74 20    63 6f 6e 74 65 6e 74 2d 73 74 72 73 29 29 29 29  | .....(push.text.content-strs)))) | 
| 0b40 |  0a 20 20 20 20 20 20 28 65 72 72 6f 72 0a 20 20    20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20  | .......(error........(goto-char. | 
| 0b60 |  28 6d 61 74 63 68 2d 62 65 67 69 6e 6e 69 6e 67    20 30 29 29 29 29 0a 20 20 20 20 28 61 70 70 6c  | (match-beginning.0)))).....(appl | 
| 0b80 |  79 20 23 27 63 6f 6e 63 61 74 20 28 6e 72 65 76    65 72 73 65 20 63 6f 6e 74 65 6e 74 2d 73 74 72  | y.#'concat.(nreverse.content-str | 
| 0ba0 |  73 29 29 29 29 0a 0a 28 63 6c 2d 64 65 66 6d 65    74 68 6f 64 20 67 70 74 65 6c 2d 2d 70 61 72 73  | s))))..(cl-defmethod.gptel--pars | 
| 0bc0 |  65 2d 72 65 73 70 6f 6e 73 65 20 28 28 5f 62 61    63 6b 65 6e 64 20 67 70 74 65 6c 2d 67 65 6d 69  | e-response.((_backend.gptel-gemi | 
| 0be0 |  6e 69 29 20 72 65 73 70 6f 6e 73 65 20 5f 69 6e    66 6f 29 0a 20 20 28 6d 61 70 2d 6e 65 73 74 65  | ni).response._info)...(map-neste | 
| 0c00 |  64 2d 65 6c 74 20 72 65 73 70 6f 6e 73 65 20 27    28 3a 63 61 6e 64 69 64 61 74 65 73 20 30 20 3a  | d-elt.response.'(:candidates.0.: | 
| 0c20 |  63 6f 6e 74 65 6e 74 20 3a 70 61 72 74 73 20 30    20 3a 74 65 78 74 29 29 29 0a 0a 28 63 6c 2d 64  | content.:parts.0.:text)))..(cl-d | 
| 0c40 |  65 66 6d 65 74 68 6f 64 20 67 70 74 65 6c 2d 2d    72 65 71 75 65 73 74 2d 64 61 74 61 20 28 28 5f  | efmethod.gptel--request-data.((_ | 
| 0c60 |  62 61 63 6b 65 6e 64 20 67 70 74 65 6c 2d 67 65    6d 69 6e 69 29 20 70 72 6f 6d 70 74 73 29 0a 20  | backend.gptel-gemini).prompts).. | 
| 0c80 |  20 22 4a 53 4f 4e 20 65 6e 63 6f 64 65 20 50 52    4f 4d 50 54 53 20 66 6f 72 20 73 65 6e 64 69 6e  | ."JSON.encode.PROMPTS.for.sendin | 
| 0ca0 |  67 20 74 6f 20 47 65 6d 69 6e 69 2e 22 0a 20 20    28 6c 65 74 20 28 28 70 72 6f 6d 70 74 73 2d 70  | g.to.Gemini."...(let.((prompts-p | 
| 0cc0 |  6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 60 28    3a 63 6f 6e 74 65 6e 74 73 20 5b 2c 40 70 72 6f  | list..........`(:contents.[,@pro | 
| 0ce0 |  6d 70 74 73 5d 0a 20 20 20 20 20 20 20 20 20 20    20 3a 73 61 66 65 74 79 53 65 74 74 69 6e 67 73  | mpts]............:safetySettings | 
| 0d00 |  20 5b 28 3a 63 61 74 65 67 6f 72 79 20 22 48 41    52 4d 5f 43 41 54 45 47 4f 52 59 5f 48 41 52 41  | .[(:category."HARM_CATEGORY_HARA | 
| 0d20 |  53 53 4d 45 4e 54 22 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | SSMENT"......................... | 
| 0d40 |  20 20 20 20 20 3a 74 68 72 65 73 68 6f 6c 64 20    22 42 4c 4f 43 4b 5f 4e 4f 4e 45 22 29 0a 20 20  | .....:threshold."BLOCK_NONE")... | 
| 0d60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 3a 63 61 74 65  | ..........................(:cate | 
| 0d80 |  67 6f 72 79 20 22 48 41 52 4d 5f 43 41 54 45 47    4f 52 59 5f 53 45 58 55 41 4c 4c 59 5f 45 58 50  | gory."HARM_CATEGORY_SEXUALLY_EXP | 
| 0da0 |  4c 49 43 49 54 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | LICIT".......................... | 
| 0dc0 |  20 20 20 20 3a 74 68 72 65 73 68 6f 6c 64 20 22    42 4c 4f 43 4b 5f 4e 4f 4e 45 22 29 0a 20 20 20  | ....:threshold."BLOCK_NONE").... | 
| 0de0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 3a 63 61 74 65 67  | .........................(:categ | 
| 0e00 |  6f 72 79 20 22 48 41 52 4d 5f 43 41 54 45 47 4f    52 59 5f 44 41 4e 47 45 52 4f 55 53 5f 43 4f 4e  | ory."HARM_CATEGORY_DANGEROUS_CON | 
| 0e20 |  54 45 4e 54 22 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | TENT"........................... | 
| 0e40 |  20 20 20 3a 74 68 72 65 73 68 6f 6c 64 20 22 42    4c 4f 43 4b 5f 4e 4f 4e 45 22 29 0a 20 20 20 20  | ...:threshold."BLOCK_NONE")..... | 
| 0e60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 3a 63 61 74 65 67 6f  | ........................(:catego | 
| 0e80 |  72 79 20 22 48 41 52 4d 5f 43 41 54 45 47 4f 52    59 5f 48 41 54 45 5f 53 50 45 45 43 48 22 0a 20  | ry."HARM_CATEGORY_HATE_SPEECH".. | 
| 0ea0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 3a 74 68 72  | ............................:thr | 
| 0ec0 |  65 73 68 6f 6c 64 20 22 42 4c 4f 43 4b 5f 4e 4f    4e 45 22 29 5d 29 29 0a 20 20 20 20 20 20 20 20  | eshold."BLOCK_NONE")]))......... | 
| 0ee0 |  70 61 72 61 6d 73 29 0a 20 20 20 20 28 77 68 65    6e 20 67 70 74 65 6c 2d 74 65 6d 70 65 72 61 74  | params).....(when.gptel-temperat | 
| 0f00 |  75 72 65 0a 20 20 20 20 20 20 28 73 65 74 71 20    70 61 72 61 6d 73 0a 20 20 20 20 20 20 20 20 20  | ure.......(setq.params.......... | 
| 0f20 |  20 20 20 28 70 6c 69 73 74 2d 70 75 74 20 70 61    72 61 6d 73 0a 20 20 20 20 20 20 20 20 20 20 20  | ...(plist-put.params............ | 
| 0f40 |  20 20 20 20 20 20 20 20 20 20 20 20 3a 74 65 6d    70 65 72 61 74 75 72 65 20 28 6d 61 78 20 67 70  | ............:temperature.(max.gp | 
| 0f60 |  74 65 6c 2d 74 65 6d 70 65 72 61 74 75 72 65 20    31 2e 30 29 29 29 29 0a 20 20 20 20 28 77 68 65  | tel-temperature.1.0)))).....(whe | 
| 0f80 |  6e 20 67 70 74 65 6c 2d 6d 61 78 2d 74 6f 6b 65    6e 73 0a 20 20 20 20 20 20 28 73 65 74 71 20 70  | n.gptel-max-tokens.......(setq.p | 
| 0fa0 |  61 72 61 6d 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 70 6c 69 73 74 2d 70 75 74 20 70 61 72  | arams.............(plist-put.par | 
| 0fc0 |  61 6d 73 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 3a 6d 61 78 4f  | ams........................:maxO | 
| 0fe0 |  75 74 70 75 74 54 6f 6b 65 6e 73 20 67 70 74 65    6c 2d 6d 61 78 2d 74 6f 6b 65 6e 73 29 29 29 0a  | utputTokens.gptel-max-tokens))). | 
| 1000 |  20 20 20 20 28 77 68 65 6e 20 70 61 72 61 6d 73    0a 20 20 20 20 20 20 28 70 6c 69 73 74 2d 70 75  | ....(when.params.......(plist-pu | 
| 1020 |  74 20 70 72 6f 6d 70 74 73 2d 70 6c 69 73 74 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | t.prompts-plist................. | 
| 1040 |  20 3a 67 65 6e 65 72 61 74 69 6f 6e 43 6f 6e 66    69 67 20 70 61 72 61 6d 73 29 29 0a 20 20 20 20  | .:generationConfig.params))..... | 
| 1060 |  70 72 6f 6d 70 74 73 2d 70 6c 69 73 74 29 29 0a    0a 28 63 6c 2d 64 65 66 6d 65 74 68 6f 64 20 67  | prompts-plist))..(cl-defmethod.g | 
| 1080 |  70 74 65 6c 2d 2d 70 61 72 73 65 2d 62 75 66 66    65 72 20 28 28 5f 62 61 63 6b 65 6e 64 20 67 70  | ptel--parse-buffer.((_backend.gp | 
| 10a0 |  74 65 6c 2d 67 65 6d 69 6e 69 29 20 26 6f 70 74    69 6f 6e 61 6c 20 6d 61 78 2d 65 6e 74 72 69 65  | tel-gemini).&optional.max-entrie | 
| 10c0 |  73 29 0a 20 20 28 6c 65 74 20 28 28 70 72 6f 6d    70 74 73 29 20 28 70 72 6f 70 29 29 0a 20 20 20  | s)...(let.((prompts).(prop)).... | 
| 10e0 |  20 28 77 68 69 6c 65 20 28 61 6e 64 0a 20 20 20    20 20 20 20 20 20 20 20 20 28 6f 72 20 28 6e 6f  | .(while.(and.............(or.(no | 
| 1100 |  74 20 6d 61 78 2d 65 6e 74 72 69 65 73 29 20 28    3e 3d 20 6d 61 78 2d 65 6e 74 72 69 65 73 20 30  | t.max-entries).(>=.max-entries.0 | 
| 1120 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    73 65 74 71 20 70 72 6f 70 20 28 74 65 78 74 2d  | )).............(setq.prop.(text- | 
| 1140 |  70 72 6f 70 65 72 74 79 2d 73 65 61 72 63 68 2d    62 61 63 6b 77 61 72 64 0a 20 20 20 20 20 20 20  | property-search-backward........ | 
| 1160 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 27 67 70 74 65 6c 20 27 72 65 73 70 6f 6e 73  | .................'gptel.'respons | 
| 1180 |  65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20  | e.........................(when. | 
| 11a0 |  28 67 65 74 2d 63 68 61 72 2d 70 72 6f 70 65 72    74 79 20 28 6d 61 78 20 28 70 6f 69 6e 74 2d 6d  | (get-char-property.(max.(point-m | 
| 11c0 |  69 6e 29 20 28 31 2d 20 28 70 6f 69 6e 74 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | in).(1-.(point)))............... | 
| 11e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1200 |  20 20 20 27 67 70 74 65 6c 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ...'gptel)...................... | 
| 1220 |  20 20 20 20 20 74 29 29 29 29 0a 20 20 20 20 20    20 28 70 75 73 68 20 28 6c 69 73 74 20 3a 72 6f  | .....t)))).......(push.(list.:ro | 
| 1240 |  6c 65 20 28 69 66 20 28 70 72 6f 70 2d 6d 61 74    63 68 2d 76 61 6c 75 65 20 70 72 6f 70 29 20 22  | le.(if.(prop-match-value.prop)." | 
| 1260 |  6d 6f 64 65 6c 22 20 22 75 73 65 72 22 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | model"."user").................. | 
| 1280 |  20 3a 70 61 72 74 73 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20  | .:parts...................(list. | 
| 12a0 |  3a 74 65 78 74 20 28 73 74 72 69 6e 67 2d 74 72    69 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | :text.(string-trim.............. | 
| 12c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 62 75 66 66 65 72 2d 73 75 62 73 74 72  | ..................(buffer-substr | 
| 12e0 |  69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65    73 20 28 70 72 6f 70 2d 6d 61 74 63 68 2d 62 65  | ing-no-properties.(prop-match-be | 
| 1300 |  67 69 6e 6e 69 6e 67 20 70 72 6f 70 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ginning.prop)................... | 
| 1320 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1340 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72    6f 70 2d 6d 61 74 63 68 2d 65 6e 64 20 70 72 6f  | .............(prop-match-end.pro | 
| 1360 |  70 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | p))............................. | 
| 1380 |  20 20 20 28 66 6f 72 6d 61 74 20 22 5b 5c 74 5c    72 5c 6e 20 5d 2a 5c 5c 28 3f 3a 25 73 5c 5c 29  | ...(format."[\t\r\n.]*\\(?:%s\\) | 
| 13a0 |  3f 5b 5c 74 5c 72 5c 6e 20 5d 2a 22 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ?[\t\r\n.]*".................... | 
| 13c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 72 65 67 65 78 70 2d 71 75 6f 74  | ....................(regexp-quot | 
| 13e0 |  65 20 28 67 70 74 65 6c 2d 70 72 6f 6d 70 74 2d    70 72 65 66 69 78 2d 73 74 72 69 6e 67 29 29 29  | e.(gptel-prompt-prefix-string))) | 
| 1400 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1420 |  28 66 6f 72 6d 61 74 20 22 5b 5c 74 5c 72 5c 6e    20 5d 2a 5c 5c 28 3f 3a 25 73 5c 5c 29 3f 5b 5c  | (format."[\t\r\n.]*\\(?:%s\\)?[\ | 
| 1440 |  74 5c 72 5c 6e 20 5d 2a 22 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | t\r\n.]*"....................... | 
| 1460 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 28  | .................(regexp-quote.( | 
| 1480 |  67 70 74 65 6c 2d 72 65 73 70 6f 6e 73 65 2d 70    72 65 66 69 78 2d 73 74 72 69 6e 67 29 29 29 29  | gptel-response-prefix-string)))) | 
| 14a0 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70    72 6f 6d 70 74 73 29 0a 20 20 20 20 20 20 28 61  | )).............prompts).......(a | 
| 14c0 |  6e 64 20 6d 61 78 2d 65 6e 74 72 69 65 73 20 28    63 6c 2d 64 65 63 66 20 6d 61 78 2d 65 6e 74 72  | nd.max-entries.(cl-decf.max-entr | 
| 14e0 |  69 65 73 29 29 29 0a 20 20 20 20 28 63 6c 2d 63    61 6c 6c 66 20 28 6c 61 6d 62 64 61 20 28 6d 73  | ies))).....(cl-callf.(lambda.(ms | 
| 1500 |  67 29 20 28 63 6f 6e 63 61 74 20 67 70 74 65 6c    2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73 61 67 65  | g).(concat.gptel--system-message | 
| 1520 |  20 22 5c 6e 5c 6e 22 20 6d 73 67 29 29 0a 20 20    20 20 20 20 20 20 28 74 68 72 65 61 64 2d 66 69  | ."\n\n".msg)).........(thread-fi | 
| 1540 |  72 73 74 20 28 63 61 72 20 70 72 6f 6d 70 74 73    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | rst.(car.prompts)............... | 
| 1560 |  20 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 67    65 74 20 3a 70 61 72 74 73 29 0a 20 20 20 20 20  | ........(plist-get.:parts)...... | 
| 1580 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 70 6c 69 73 74 2d 67 65 74 20 3a 74 65 78  | .................(plist-get.:tex | 
| 15a0 |  74 29 29 29 0a 20 20 20 20 70 72 6f 6d 70 74 73    29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f  | t))).....prompts))..;;;###autolo | 
| 15c0 |  61 64 0a 28 63 6c 2d 64 65 66 75 6e 20 67 70 74    65 6c 2d 6d 61 6b 65 2d 67 65 6d 69 6e 69 0a 20  | ad.(cl-defun.gptel-make-gemini.. | 
| 15e0 |  20 20 20 28 6e 61 6d 65 20 26 6b 65 79 20 63 75    72 6c 2d 61 72 67 73 20 68 65 61 64 65 72 20 6b  | ...(name.&key.curl-args.header.k | 
| 1600 |  65 79 20 28 73 74 72 65 61 6d 20 6e 69 6c 29 0a    20 20 20 20 20 20 20 20 20 20 28 68 6f 73 74 20  | ey.(stream.nil)...........(host. | 
| 1620 |  22 67 65 6e 65 72 61 74 69 76 65 6c 61 6e 67 75    61 67 65 2e 67 6f 6f 67 6c 65 61 70 69 73 2e 63  | "generativelanguage.googleapis.c | 
| 1640 |  6f 6d 22 29 0a 20 20 20 20 20 20 20 20 20 20 28    70 72 6f 74 6f 63 6f 6c 20 22 68 74 74 70 73 22  | om")...........(protocol."https" | 
| 1660 |  29 0a 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64    65 6c 73 20 27 28 22 67 65 6d 69 6e 69 2d 70 72  | )...........(models.'("gemini-pr | 
| 1680 |  6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 22 67 65 6d 69 6e 69 2d 31  | o"....................."gemini-1 | 
| 16a0 |  2e 35 2d 70 72 6f 2d 6c 61 74 65 73 74 22 29 29    0a 20 20 20 20 20 20 20 20 20 20 28 65 6e 64 70  | .5-pro-latest"))...........(endp | 
| 16c0 |  6f 69 6e 74 20 22 2f 76 31 62 65 74 61 2f 6d 6f    64 65 6c 73 22 29 29 0a 0a 20 20 22 52 65 67 69  | oint."/v1beta/models"))...."Regi | 
| 16e0 |  73 74 65 72 20 61 20 47 65 6d 69 6e 69 20 62 61    63 6b 65 6e 64 20 66 6f 72 20 67 70 74 65 6c 20  | ster.a.Gemini.backend.for.gptel. | 
| 1700 |  77 69 74 68 20 4e 41 4d 45 2e 0a 0a 4b 65 79 77    6f 72 64 20 61 72 67 75 6d 65 6e 74 73 3a 0a 0a  | with.NAME...Keyword.arguments:.. | 
| 1720 |  43 55 52 4c 2d 41 52 47 53 20 28 6f 70 74 69 6f    6e 61 6c 29 20 69 73 20 61 20 6c 69 73 74 20 6f  | CURL-ARGS.(optional).is.a.list.o | 
| 1740 |  66 20 61 64 64 69 74 69 6f 6e 61 6c 20 43 75 72    6c 20 61 72 67 75 6d 65 6e 74 73 2e 0a 0a 48 4f  | f.additional.Curl.arguments...HO | 
| 1760 |  53 54 20 28 6f 70 74 69 6f 6e 61 6c 29 20 69 73    20 74 68 65 20 41 50 49 20 68 6f 73 74 2c 20 64  | ST.(optional).is.the.API.host,.d | 
| 1780 |  65 66 61 75 6c 74 73 20 74 6f 0a 5c 22 67 65 6e    65 72 61 74 69 76 65 6c 61 6e 67 75 61 67 65 2e  | efaults.to.\"generativelanguage. | 
| 17a0 |  67 6f 6f 67 6c 65 61 70 69 73 2e 63 6f 6d 5c 22    2e 0a 0a 4d 4f 44 45 4c 53 20 69 73 20 61 20 6c  | googleapis.com\"...MODELS.is.a.l | 
| 17c0 |  69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65    20 6d 6f 64 65 6c 20 6e 61 6d 65 73 2e 0a 0a 53  | ist.of.available.model.names...S | 
| 17e0 |  54 52 45 41 4d 20 69 73 20 61 20 62 6f 6f 6c 65    61 6e 20 74 6f 20 65 6e 61 62 6c 65 20 73 74 72  | TREAM.is.a.boolean.to.enable.str | 
| 1800 |  65 61 6d 69 6e 67 20 72 65 73 70 6f 6e 73 65 73    2c 20 64 65 66 61 75 6c 74 73 20 74 6f 0a 66 61  | eaming.responses,.defaults.to.fa | 
| 1820 |  6c 73 65 2e 0a 0a 50 52 4f 54 4f 43 4f 4c 20 28    6f 70 74 69 6f 6e 61 6c 29 20 73 70 65 63 69 66  | lse...PROTOCOL.(optional).specif | 
| 1840 |  69 65 73 20 74 68 65 20 70 72 6f 74 6f 63 6f 6c    2c 20 5c 22 68 74 74 70 73 5c 22 20 62 79 20 64  | ies.the.protocol,.\"https\".by.d | 
| 1860 |  65 66 61 75 6c 74 2e 0a 0a 45 4e 44 50 4f 49 4e    54 20 28 6f 70 74 69 6f 6e 61 6c 29 20 69 73 20  | efault...ENDPOINT.(optional).is. | 
| 1880 |  74 68 65 20 41 50 49 20 65 6e 64 70 6f 69 6e 74    20 66 6f 72 20 63 6f 6d 70 6c 65 74 69 6f 6e 73  | the.API.endpoint.for.completions | 
| 18a0 |  2c 20 64 65 66 61 75 6c 74 73 20 74 6f 0a 5c 22    2f 76 31 62 65 74 61 2f 6d 6f 64 65 6c 73 5c 22  | ,.defaults.to.\"/v1beta/models\" | 
| 18c0 |  2e 0a 0a 48 45 41 44 45 52 20 28 6f 70 74 69 6f    6e 61 6c 29 20 69 73 20 66 6f 72 20 61 64 64 69  | ...HEADER.(optional).is.for.addi | 
| 18e0 |  74 69 6f 6e 61 6c 20 68 65 61 64 65 72 73 20 74    6f 20 73 65 6e 64 20 77 69 74 68 20 65 61 63 68  | tional.headers.to.send.with.each | 
| 1900 |  0a 72 65 71 75 65 73 74 2e 20 49 74 20 73 68 6f    75 6c 64 20 62 65 20 61 6e 20 61 6c 69 73 74 20  | .request..It.should.be.an.alist. | 
| 1920 |  6f 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68    61 74 20 72 65 74 75 6e 73 20 61 6e 0a 61 6c 69  | or.a.function.that.retuns.an.ali | 
| 1940 |  73 74 2c 20 6c 69 6b 65 3a 0a 28 28 5c 22 43 6f    6e 74 65 6e 74 2d 54 79 70 65 5c 22 20 2e 20 5c  | st,.like:.((\"Content-Type\"...\ | 
| 1960 |  22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f    6e 5c 22 29 29 0a 0a 4b 45 59 20 28 6f 70 74 69  | "application/json\"))..KEY.(opti | 
| 1980 |  6f 6e 61 6c 29 20 69 73 20 61 20 76 61 72 69 61    62 6c 65 20 77 68 6f 73 65 20 76 61 6c 75 65 20  | onal).is.a.variable.whose.value. | 
| 19a0 |  69 73 20 74 68 65 20 41 50 49 20 6b 65 79 2c 20    6f 72 0a 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  | is.the.API.key,.or.function.that | 
| 19c0 |  20 72 65 74 75 72 6e 73 20 74 68 65 20 6b 65 79    2e 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69  | .returns.the.key."...(declare.(i | 
| 19e0 |  6e 64 65 6e 74 20 31 29 29 0a 20 20 28 6c 65 74    20 28 28 62 61 63 6b 65 6e 64 20 28 67 70 74 65  | ndent.1))...(let.((backend.(gpte | 
| 1a00 |  6c 2d 2d 6d 61 6b 65 2d 67 65 6d 69 6e 69 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | l--make-gemini.................. | 
| 1a20 |  20 3a 63 75 72 6c 2d 61 72 67 73 20 63 75 72 6c    2d 61 72 67 73 0a 20 20 20 20 20 20 20 20 20 20  | .:curl-args.curl-args........... | 
| 1a40 |  20 20 20 20 20 20 20 20 3a 6e 61 6d 65 20 6e 61    6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ........:name.name.............. | 
| 1a60 |  20 20 20 20 20 3a 68 6f 73 74 20 68 6f 73 74 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .....:host.host................. | 
| 1a80 |  20 20 3a 68 65 61 64 65 72 20 68 65 61 64 65 72    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..:header.header................ | 
| 1aa0 |  20 20 20 3a 6d 6f 64 65 6c 73 20 6d 6f 64 65 6c    73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ...:models.models............... | 
| 1ac0 |  20 20 20 20 3a 70 72 6f 74 6f 63 6f 6c 20 70 72    6f 74 6f 63 6f 6c 0a 20 20 20 20 20 20 20 20 20  | ....:protocol.protocol.......... | 
| 1ae0 |  20 20 20 20 20 20 20 20 20 3a 65 6e 64 70 6f 69    6e 74 20 65 6e 64 70 6f 69 6e 74 0a 20 20 20 20  | .........:endpoint.endpoint..... | 
| 1b00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 73    74 72 65 61 6d 20 73 74 72 65 61 6d 0a 20 20 20  | ..............:stream.stream.... | 
| 1b20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    6b 65 79 20 6b 65 79 0a 20 20 20 20 20 20 20 20  | ...............:key.key......... | 
| 1b40 |  20 20 20 20 20 20 20 20 20 20 3a 75 72 6c 20 28    6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20  | ..........:url.(lambda.()....... | 
| 1b60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 6c 65 74 20 28 28 6d 65 74 68 6f 64  | ...................(let.((method | 
| 1b80 |  20 28 69 66 20 28 61 6e 64 20 73 74 72 65 61 6d    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .(if.(and.stream................ | 
| 1ba0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1bc0 |  20 67 70 74 65 6c 2d 73 74 72 65 61 6d 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .gptel-stream).................. | 
| 1be0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 22 73 74 72 65 61  | .........................."strea | 
| 1c00 |  6d 47 65 6e 65 72 61 74 65 43 6f 6e 74 65 6e 74    22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | mGenerateContent"............... | 
| 1c20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 22 67 65 6e 65  | ..........................."gene | 
| 1c40 |  72 61 74 65 43 6f 6e 74 65 6e 74 22 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | rateContent")))................. | 
| 1c60 |  20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d    61 74 20 22 25 73 3a 2f 2f 25 73 25 73 2f 25 73  | ...........(format."%s://%s%s/%s | 
| 1c80 |  3a 25 73 3f 6b 65 79 3d 25 73 22 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | :%s?key=%s"..................... | 
| 1ca0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70    72 6f 74 6f 63 6f 6c 0a 20 20 20 20 20 20 20 20  | ...............protocol......... | 
| 1cc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 68 6f 73 74 0a  | ...........................host. | 
| 1ce0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1d00 |  20 20 20 65 6e 64 70 6f 69 6e 74 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ...endpoint..................... | 
| 1d20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67    70 74 65 6c 2d 6d 6f 64 65 6c 0a 20 20 20 20 20  | ...............gptel-model...... | 
| 1d40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65  | ..............................me | 
| 1d60 |  74 68 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | thod............................ | 
| 1d80 |  20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 2d    67 65 74 2d 61 70 69 2d 6b 65 79 29 29 29 29 29  | ........(gptel--get-api-key))))) | 
| 1da0 |  29 29 0a 20 20 20 20 28 70 72 6f 67 31 20 62 61    63 6b 65 6e 64 0a 20 20 20 20 20 20 28 73 65 74  | )).....(prog1.backend.......(set | 
| 1dc0 |  66 20 28 61 6c 69 73 74 2d 67 65 74 20 6e 61 6d    65 20 67 70 74 65 6c 2d 2d 6b 6e 6f 77 6e 2d 62  | f.(alist-get.name.gptel--known-b | 
| 1de0 |  61 63 6b 65 6e 64 73 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  | ackends........................n | 
| 1e00 |  69 6c 20 6e 69 6c 20 23 27 65 71 75 61 6c 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b  | il.nil.#'equal).............back | 
| 1e20 |  65 6e 64 29 29 29 29 0a 0a 28 70 72 6f 76 69 64    65 20 27 67 70 74 65 6c 2d 67 65 6d 69 6e 69 29  | end))))..(provide.'gptel-gemini) | 
| 1e40 |  0a 3b 3b 3b 20 67 70 74 65 6c 2d 67 65 6d 69 6e    69 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 0a 00  | .;;;.gptel-gemini.el.ends.here.. | 
| 1e60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1e80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1ea0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1ec0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1ee0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1f00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1f20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1f40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1f60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1f80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1fa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1fc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 1fe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2000 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 6f 70 65 6e 61 69  | gptel-20240424.2306/gptel-openai | 
| 2020 |  2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .el............................. | 
| 2040 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2060 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 2080 |  30 30 32 33 30 31 33 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 30 32 35 00 20 30 00 00 00  | 0023013.00000000000.015025..0... | 
| 20a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 20c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 20e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2100 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 2120 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 2140 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2160 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2180 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2200 |  3b 3b 3b 20 67 70 74 65 6c 2d 6f 70 65 6e 61 69    2e 65 6c 20 2d 2d 2d 20 20 43 68 61 74 47 50 54  | ;;;.gptel-openai.el.---..ChatGPT | 
| 2220 |  20 73 75 70 70 70 6f 72 74 20 66 6f 72 20 67 70    74 65 6c 20 20 2d 2a 2d 20 6c 65 78 69 63 61 6c  | .suppport.for.gptel..-*-.lexical | 
| 2240 |  2d 62 69 6e 64 69 6e 67 3a 20 74 3b 20 2d 2a 2d    0a 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28  | -binding:.t;.-*-..;;.Copyright.( | 
| 2260 |  43 29 20 32 30 32 33 20 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 0a 0a 3b 3b  | C).2023..Karthik.Chikmagalur..;; | 
| 2280 |  20 41 75 74 68 6f 72 3a 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 20 3c 6b 61  | .Author:.Karthik.Chikmagalur.<ka | 
| 22a0 |  72 74 68 69 6b 63 68 69 6b 6d 61 67 61 6c 75 72    40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 0a 3b 3b 20  | rthikchikmagalur@gmail.com>..;;. | 
| 22c0 |  54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20    66 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79  | This.program.is.free.software;.y | 
| 22e0 |  6f 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62    75 74 65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f  | ou.can.redistribute.it.and/or.mo | 
| 2300 |  64 69 66 79 0a 3b 3b 20 69 74 20 75 6e 64 65 72    20 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68  | dify.;;.it.under.the.terms.of.th | 
| 2320 |  65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75    62 6c 69 63 20 4c 69 63 65 6e 73 65 20 61 73 20  | e.GNU.General.Public.License.as. | 
| 2340 |  70 75 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20    74 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72  | published.by.;;.the.Free.Softwar | 
| 2360 |  65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69    74 68 65 72 20 76 65 72 73 69 6f 6e 20 33 20 6f  | e.Foundation,.either.version.3.o | 
| 2380 |  66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f    72 0a 3b 3b 20 28 61 74 20 79 6f 75 72 20 6f 70  | f.the.License,.or.;;.(at.your.op | 
| 23a0 |  74 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20    76 65 72 73 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69  | tion).any.later.version...;;.Thi | 
| 23c0 |  73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73    74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20  | s.program.is.distributed.in.the. | 
| 23e0 |  68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c    6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 3b 3b 20  | hope.that.it.will.be.useful,.;;. | 
| 2400 |  62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20    57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75  | but.WITHOUT.ANY.WARRANTY;.withou | 
| 2420 |  74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69    65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b  | t.even.the.implied.warranty.of.; | 
| 2440 |  3b 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54    59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52  | ;.MERCHANTABILITY.or.FITNESS.FOR | 
| 2460 |  20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55    52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a  | .A.PARTICULAR.PURPOSE...See.the. | 
| 2480 |  3b 3b 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50    75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f  | ;;.GNU.General.Public.License.fo | 
| 24a0 |  72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a    0a 3b 3b 20 59 6f 75 20 73 68 6f 75 6c 64 20 68  | r.more.details...;;.You.should.h | 
| 24c0 |  61 76 65 20 72 65 63 65 69 76 65 64 20 61 20 63    6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 47  | ave.received.a.copy.of.the.GNU.G | 
| 24e0 |  65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69    63 65 6e 73 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77  | eneral.Public.License.;;.along.w | 
| 2500 |  69 74 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d    2e 20 20 49 66 20 6e 6f 74 2c 20 73 65 65 20 3c  | ith.this.program...If.not,.see.< | 
| 2520 |  68 74 74 70 73 3a 2f 2f 77 77 77 2e 67 6e 75 2e    6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a  | https://www.gnu.org/licenses/>.. | 
| 2540 |  0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a    0a 0a 3b 3b 20 54 68 69 73 20 66 69 6c 65 20 61  | .;;;.Commentary:..;;.This.file.a | 
| 2560 |  64 64 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20    74 68 65 20 43 68 61 74 47 50 54 20 41 50 49 20  | dds.support.for.the.ChatGPT.API. | 
| 2580 |  74 6f 20 67 70 74 65 6c 0a 0a 3b 3b 3b 20 43 6f    64 65 3a 0a 28 72 65 71 75 69 72 65 20 27 63 6c  | to.gptel..;;;.Code:.(require.'cl | 
| 25a0 |  2d 67 65 6e 65 72 69 63 29 0a 28 65 76 61 6c 2d    77 68 65 6e 2d 63 6f 6d 70 69 6c 65 0a 20 20 28  | -generic).(eval-when-compile...( | 
| 25c0 |  72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 62 29    29 0a 28 72 65 71 75 69 72 65 20 27 6d 61 70 29  | require.'cl-lib)).(require.'map) | 
| 25e0 |  0a 0a 28 64 65 66 76 61 72 20 67 70 74 65 6c 2d    6d 6f 64 65 6c 29 0a 28 64 65 66 76 61 72 20 67  | ..(defvar.gptel-model).(defvar.g | 
| 2600 |  70 74 65 6c 2d 73 74 72 65 61 6d 29 0a 28 64 65    66 76 61 72 20 67 70 74 65 6c 2d 75 73 65 2d 63  | ptel-stream).(defvar.gptel-use-c | 
| 2620 |  75 72 6c 29 0a 28 64 65 66 76 61 72 20 67 70 74    65 6c 2d 62 61 63 6b 65 6e 64 29 0a 28 64 65 66  | url).(defvar.gptel-backend).(def | 
| 2640 |  76 61 72 20 67 70 74 65 6c 2d 74 65 6d 70 65 72    61 74 75 72 65 29 0a 28 64 65 66 76 61 72 20 67  | var.gptel-temperature).(defvar.g | 
| 2660 |  70 74 65 6c 2d 6d 61 78 2d 74 6f 6b 65 6e 73 29    0a 28 64 65 66 76 61 72 20 67 70 74 65 6c 2d 2d  | ptel-max-tokens).(defvar.gptel-- | 
| 2680 |  73 79 73 74 65 6d 2d 6d 65 73 73 61 67 65 29 0a    28 64 65 66 76 61 72 20 67 70 74 65 6c 2d 2d 6b  | system-message).(defvar.gptel--k | 
| 26a0 |  6e 6f 77 6e 2d 62 61 63 6b 65 6e 64 73 29 0a 28    64 65 66 76 61 72 20 6a 73 6f 6e 2d 6f 62 6a 65  | nown-backends).(defvar.json-obje | 
| 26c0 |  63 74 2d 74 79 70 65 29 0a 0a 28 64 65 63 6c 61    72 65 2d 66 75 6e 63 74 69 6f 6e 20 67 70 74 65  | ct-type)..(declare-function.gpte | 
| 26e0 |  6c 2d 2d 67 65 74 2d 61 70 69 2d 6b 65 79 20 22    67 70 74 65 6c 22 29 0a 28 64 65 63 6c 61 72 65  | l--get-api-key."gptel").(declare | 
| 2700 |  2d 66 75 6e 63 74 69 6f 6e 20 70 72 6f 70 2d 6d    61 74 63 68 2d 76 61 6c 75 65 20 22 74 65 78 74  | -function.prop-match-value."text | 
| 2720 |  2d 70 72 6f 70 65 72 74 79 2d 73 65 61 72 63 68    22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63  | -property-search").(declare-func | 
| 2740 |  74 69 6f 6e 20 74 65 78 74 2d 70 72 6f 70 65 72    74 79 2d 73 65 61 72 63 68 2d 62 61 63 6b 77 61  | tion.text-property-search-backwa | 
| 2760 |  72 64 20 22 74 65 78 74 2d 70 72 6f 70 65 72 74    79 2d 73 65 61 72 63 68 22 29 0a 28 64 65 63 6c  | rd."text-property-search").(decl | 
| 2780 |  61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 6a 73 6f    6e 2d 72 65 61 64 20 22 6a 73 6f 6e 22 29 0a 28  | are-function.json-read."json").( | 
| 27a0 |  64 65 63 6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e    20 67 70 74 65 6c 2d 70 72 6f 6d 70 74 2d 70 72  | declare-function.gptel-prompt-pr | 
| 27c0 |  65 66 69 78 2d 73 74 72 69 6e 67 20 22 67 70 74    65 6c 22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75  | efix-string."gptel").(declare-fu | 
| 27e0 |  6e 63 74 69 6f 6e 20 67 70 74 65 6c 2d 72 65 73    70 6f 6e 73 65 2d 70 72 65 66 69 78 2d 73 74 72  | nction.gptel-response-prefix-str | 
| 2800 |  69 6e 67 20 22 67 70 74 65 6c 22 29 0a 0a 28 64    65 66 6d 61 63 72 6f 20 67 70 74 65 6c 2d 2d 6a  | ing."gptel")..(defmacro.gptel--j | 
| 2820 |  73 6f 6e 2d 72 65 61 64 20 28 29 0a 20 20 28 69    66 20 28 66 62 6f 75 6e 64 70 20 27 6a 73 6f 6e  | son-read.()...(if.(fboundp.'json | 
| 2840 |  2d 70 61 72 73 65 2d 62 75 66 66 65 72 29 0a 20    20 20 20 20 20 60 28 6a 73 6f 6e 2d 70 61 72 73  | -parse-buffer).......`(json-pars | 
| 2860 |  65 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20    20 3a 6f 62 6a 65 63 74 2d 74 79 70 65 20 27 70  | e-buffer.........:object-type.'p | 
| 2880 |  6c 69 73 74 0a 20 20 20 20 20 20 20 20 3a 6e 75    6c 6c 2d 6f 62 6a 65 63 74 20 6e 69 6c 0a 20 20  | list.........:null-object.nil... | 
| 28a0 |  20 20 20 20 20 20 3a 66 61 6c 73 65 2d 6f 62 6a    65 63 74 20 3a 6a 73 6f 6e 2d 66 61 6c 73 65 29  | ......:false-object.:json-false) | 
| 28c0 |  0a 20 20 20 20 28 72 65 71 75 69 72 65 20 27 6a    73 6f 6e 29 0a 20 20 20 20 28 64 65 66 76 61 72  | .....(require.'json).....(defvar | 
| 28e0 |  20 6a 73 6f 6e 2d 6f 62 6a 65 63 74 2d 74 79 70    65 29 0a 20 20 20 20 28 64 65 63 6c 61 72 65 2d  | .json-object-type).....(declare- | 
| 2900 |  66 75 6e 63 74 69 6f 6e 20 6a 73 6f 6e 2d 72 65    61 64 20 22 6a 73 6f 6e 22 20 28 29 29 0a 20 20  | function.json-read."json".())... | 
| 2920 |  20 20 60 28 6c 65 74 20 28 28 6a 73 6f 6e 2d 6f    62 6a 65 63 74 2d 74 79 70 65 20 27 70 6c 69 73  | ..`(let.((json-object-type.'plis | 
| 2940 |  74 29 29 0a 20 20 20 20 20 20 28 6a 73 6f 6e 2d    72 65 61 64 29 29 29 29 0a 0a 28 64 65 66 6d 61  | t)).......(json-read))))..(defma | 
| 2960 |  63 72 6f 20 67 70 74 65 6c 2d 2d 6a 73 6f 6e 2d    65 6e 63 6f 64 65 20 28 6f 62 6a 65 63 74 29 0a  | cro.gptel--json-encode.(object). | 
| 2980 |  20 20 28 69 66 20 28 66 62 6f 75 6e 64 70 20 27    6a 73 6f 6e 2d 73 65 72 69 61 6c 69 7a 65 29 0a  | ..(if.(fboundp.'json-serialize). | 
| 29a0 |  20 20 20 20 20 20 60 28 6a 73 6f 6e 2d 73 65 72    69 61 6c 69 7a 65 20 2c 6f 62 6a 65 63 74 0a 20  | ......`(json-serialize.,object.. | 
| 29c0 |  20 20 20 20 20 20 20 3a 6e 75 6c 6c 2d 6f 62 6a    65 63 74 20 6e 69 6c 0a 20 20 20 20 20 20 20 20  | .......:null-object.nil......... | 
| 29e0 |  3a 66 61 6c 73 65 2d 6f 62 6a 65 63 74 20 3a 6a    73 6f 6e 2d 66 61 6c 73 65 29 0a 20 20 20 20 28  | :false-object.:json-false).....( | 
| 2a00 |  72 65 71 75 69 72 65 20 27 6a 73 6f 6e 29 0a 20    20 20 20 28 64 65 66 76 61 72 20 6a 73 6f 6e 2d  | require.'json).....(defvar.json- | 
| 2a20 |  66 61 6c 73 65 29 0a 20 20 20 20 28 64 65 63 6c    61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 6a 73 6f  | false).....(declare-function.jso | 
| 2a40 |  6e 2d 65 6e 63 6f 64 65 20 22 6a 73 6f 6e 22 20    28 6f 62 6a 65 63 74 29 29 0a 20 20 20 20 60 28  | n-encode."json".(object)).....`( | 
| 2a60 |  6c 65 74 20 28 28 6a 73 6f 6e 2d 66 61 6c 73 65    20 3a 6a 73 6f 6e 2d 66 61 6c 73 65 29 29 0a 20  | let.((json-false.:json-false)).. | 
| 2a80 |  20 20 20 20 20 28 6a 73 6f 6e 2d 65 6e 63 6f 64    65 20 2c 6f 62 6a 65 63 74 29 29 29 29 0a 0a 3b  | .....(json-encode.,object))))..; | 
| 2aa0 |  3b 3b 20 43 6f 6d 6d 6f 6e 20 62 61 63 6b 65 6e    64 20 73 74 72 75 63 74 20 66 6f 72 20 4c 4c 4d  | ;;.Common.backend.struct.for.LLM | 
| 2ac0 |  20 73 75 70 70 6f 72 74 0a 28 63 6c 2d 64 65 66    73 74 72 75 63 74 0a 20 20 20 20 28 67 70 74 65  | .support.(cl-defstruct.....(gpte | 
| 2ae0 |  6c 2d 62 61 63 6b 65 6e 64 20 28 3a 63 6f 6e 73    74 72 75 63 74 6f 72 20 67 70 74 65 6c 2d 2d 6d  | l-backend.(:constructor.gptel--m | 
| 2b00 |  61 6b 65 2d 62 61 63 6b 65 6e 64 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ake-backend).................... | 
| 2b20 |  28 3a 63 6f 70 69 65 72 20 67 70 74 65 6c 2d 2d    63 6f 70 79 2d 62 61 63 6b 65 6e 64 29 29 0a 20  | (:copier.gptel--copy-backend)).. | 
| 2b40 |  20 6e 61 6d 65 20 68 6f 73 74 20 68 65 61 64 65    72 20 70 72 6f 74 6f 63 6f 6c 20 73 74 72 65 61  | .name.host.header.protocol.strea | 
| 2b60 |  6d 0a 20 20 65 6e 64 70 6f 69 6e 74 20 6b 65 79    20 6d 6f 64 65 6c 73 20 75 72 6c 20 63 75 72 6c  | m...endpoint.key.models.url.curl | 
| 2b80 |  2d 61 72 67 73 29 0a 0a 3b 3b 3b 20 4f 70 65 6e    41 49 20 28 43 68 61 74 47 50 54 29 0a 28 63 6c  | -args)..;;;.OpenAI.(ChatGPT).(cl | 
| 2ba0 |  2d 64 65 66 73 74 72 75 63 74 20 28 67 70 74 65    6c 2d 6f 70 65 6e 61 69 20 28 3a 63 6f 6e 73 74  | -defstruct.(gptel-openai.(:const | 
| 2bc0 |  72 75 63 74 6f 72 20 67 70 74 65 6c 2d 2d 6d 61    6b 65 2d 6f 70 65 6e 61 69 29 0a 20 20 20 20 20  | ructor.gptel--make-openai)...... | 
| 2be0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 3a 63 6f 70 69 65 72 20  | .......................(:copier. | 
| 2c00 |  6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | nil)............................ | 
| 2c20 |  20 28 3a 69 6e 63 6c 75 64 65 20 67 70 74 65 6c    2d 62 61 63 6b 65 6e 64 29 29 29 0a 0a 28 63 6c  | .(:include.gptel-backend)))..(cl | 
| 2c40 |  2d 64 65 66 6d 65 74 68 6f 64 20 67 70 74 65 6c    2d 63 75 72 6c 2d 2d 70 61 72 73 65 2d 73 74 72  | -defmethod.gptel-curl--parse-str | 
| 2c60 |  65 61 6d 20 28 28 5f 62 61 63 6b 65 6e 64 20 67    70 74 65 6c 2d 6f 70 65 6e 61 69 29 20 5f 69 6e  | eam.((_backend.gptel-openai)._in | 
| 2c80 |  66 6f 29 0a 20 20 28 6c 65 74 2a 20 28 28 63 6f    6e 74 65 6e 74 2d 73 74 72 73 29 29 0a 20 20 20  | fo)...(let*.((content-strs)).... | 
| 2ca0 |  20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65    20 6e 69 6c 0a 20 20 20 20 20 20 20 20 28 77 68  | .(condition-case.nil.........(wh | 
| 2cc0 |  69 6c 65 20 28 72 65 2d 73 65 61 72 63 68 2d 66    6f 72 77 61 72 64 20 22 5e 64 61 74 61 3a 22 20  | ile.(re-search-forward."^data:". | 
| 2ce0 |  6e 69 6c 20 74 29 0a 20 20 20 20 20 20 20 20 20    20 28 73 61 76 65 2d 6d 61 74 63 68 2d 64 61 74  | nil.t)...........(save-match-dat | 
| 2d00 |  61 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 75    6e 6c 65 73 73 20 28 6c 6f 6f 6b 69 6e 67 2d 61  | a.............(unless.(looking-a | 
| 2d20 |  74 20 22 20 2a 5c 5c 5b 44 4f 4e 45 5c 5c 5d 22    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | t.".*\\[DONE\\]")............... | 
| 2d40 |  28 77 68 65 6e 2d 6c 65 74 2a 20 28 28 72 65 73    70 6f 6e 73 65 20 28 67 70 74 65 6c 2d 2d 6a 73  | (when-let*.((response.(gptel--js | 
| 2d60 |  6f 6e 2d 72 65 61 64 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | on-read))....................... | 
| 2d80 |  20 20 20 20 28 64 65 6c 74 61 20 28 6d 61 70 2d    6e 65 73 74 65 64 2d 65 6c 74 0a 20 20 20 20 20  | ....(delta.(map-nested-elt...... | 
| 2da0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  | .............................res | 
| 2dc0 |  70 6f 6e 73 65 20 27 28 3a 63 68 6f 69 63 65 73    20 30 20 3a 64 65 6c 74 61 29 29 29 0a 20 20 20  | ponse.'(:choices.0.:delta))).... | 
| 2de0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 74 65 6e 74 20  | .......................(content. | 
| 2e00 |  28 70 6c 69 73 74 2d 67 65 74 20 64 65 6c 74 61    20 3a 63 6f 6e 74 65 6e 74 29 29 29 0a 20 20 20  | (plist-get.delta.:content))).... | 
| 2e20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 75    73 68 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 65  | .............(push.content.conte | 
| 2e40 |  6e 74 2d 73 74 72 73 29 29 29 29 29 0a 20 20 20    20 20 20 28 65 72 72 6f 72 0a 20 20 20 20 20 20  | nt-strs))))).......(error....... | 
| 2e60 |  20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6d 61 74    63 68 2d 62 65 67 69 6e 6e 69 6e 67 20 30 29 29  | .(goto-char.(match-beginning.0)) | 
| 2e80 |  29 29 0a 20 20 20 20 28 61 70 70 6c 79 20 23 27    63 6f 6e 63 61 74 20 28 6e 72 65 76 65 72 73 65  | )).....(apply.#'concat.(nreverse | 
| 2ea0 |  20 63 6f 6e 74 65 6e 74 2d 73 74 72 73 29 29 29    29 0a 0a 28 63 6c 2d 64 65 66 6d 65 74 68 6f 64  | .content-strs))))..(cl-defmethod | 
| 2ec0 |  20 67 70 74 65 6c 2d 2d 70 61 72 73 65 2d 72 65    73 70 6f 6e 73 65 20 28 28 5f 62 61 63 6b 65 6e  | .gptel--parse-response.((_backen | 
| 2ee0 |  64 20 67 70 74 65 6c 2d 6f 70 65 6e 61 69 29 20    72 65 73 70 6f 6e 73 65 20 5f 69 6e 66 6f 29 0a  | d.gptel-openai).response._info). | 
| 2f00 |  20 20 28 6d 61 70 2d 6e 65 73 74 65 64 2d 65 6c    74 20 72 65 73 70 6f 6e 73 65 20 27 28 3a 63 68  | ..(map-nested-elt.response.'(:ch | 
| 2f20 |  6f 69 63 65 73 20 30 20 3a 6d 65 73 73 61 67 65    20 3a 63 6f 6e 74 65 6e 74 29 29 29 0a 0a 28 63  | oices.0.:message.:content)))..(c | 
| 2f40 |  6c 2d 64 65 66 6d 65 74 68 6f 64 20 67 70 74 65    6c 2d 2d 72 65 71 75 65 73 74 2d 64 61 74 61 20  | l-defmethod.gptel--request-data. | 
| 2f60 |  28 28 5f 62 61 63 6b 65 6e 64 20 67 70 74 65 6c    2d 6f 70 65 6e 61 69 29 20 70 72 6f 6d 70 74 73  | ((_backend.gptel-openai).prompts | 
| 2f80 |  29 0a 20 20 22 4a 53 4f 4e 20 65 6e 63 6f 64 65    20 50 52 4f 4d 50 54 53 20 66 6f 72 20 73 65 6e  | )..."JSON.encode.PROMPTS.for.sen | 
| 2fa0 |  64 69 6e 67 20 74 6f 20 43 68 61 74 47 50 54 2e    22 0a 20 20 28 6c 65 74 20 28 28 70 72 6f 6d 70  | ding.to.ChatGPT."...(let.((promp | 
| 2fc0 |  74 73 2d 70 6c 69 73 74 0a 20 20 20 20 20 20 20    20 20 60 28 3a 6d 6f 64 65 6c 20 2c 67 70 74 65  | ts-plist..........`(:model.,gpte | 
| 2fe0 |  6c 2d 6d 6f 64 65 6c 0a 20 20 20 20 20 20 20 20    20 20 20 3a 6d 65 73 73 61 67 65 73 20 5b 2c 40  | l-model............:messages.[,@ | 
| 3000 |  70 72 6f 6d 70 74 73 5d 0a 20 20 20 20 20 20 20    20 20 20 20 3a 73 74 72 65 61 6d 20 2c 28 6f 72  | prompts]............:stream.,(or | 
| 3020 |  20 28 61 6e 64 20 67 70 74 65 6c 2d 73 74 72 65    61 6d 20 67 70 74 65 6c 2d 75 73 65 2d 63 75 72  | .(and.gptel-stream.gptel-use-cur | 
| 3040 |  6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 67 70 74 65  | l..........................(gpte | 
| 3060 |  6c 2d 62 61 63 6b 65 6e 64 2d 73 74 72 65 61 6d    20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 29 29  | l-backend-stream.gptel-backend)) | 
| 3080 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 3a 6a 73 6f 6e 2d 66 61 6c 73  | ......................:json-fals | 
| 30a0 |  65 29 29 29 29 0a 20 20 20 20 28 77 68 65 6e 20    67 70 74 65 6c 2d 74 65 6d 70 65 72 61 74 75 72  | e)))).....(when.gptel-temperatur | 
| 30c0 |  65 0a 20 20 20 20 20 20 28 70 6c 69 73 74 2d 70    75 74 20 70 72 6f 6d 70 74 73 2d 70 6c 69 73 74  | e.......(plist-put.prompts-plist | 
| 30e0 |  20 3a 74 65 6d 70 65 72 61 74 75 72 65 20 67 70    74 65 6c 2d 74 65 6d 70 65 72 61 74 75 72 65 29  | .:temperature.gptel-temperature) | 
| 3100 |  29 0a 20 20 20 20 28 77 68 65 6e 20 67 70 74 65    6c 2d 6d 61 78 2d 74 6f 6b 65 6e 73 0a 20 20 20  | ).....(when.gptel-max-tokens.... | 
| 3120 |  20 20 20 28 70 6c 69 73 74 2d 70 75 74 20 70 72    6f 6d 70 74 73 2d 70 6c 69 73 74 20 3a 6d 61 78  | ...(plist-put.prompts-plist.:max | 
| 3140 |  5f 74 6f 6b 65 6e 73 20 67 70 74 65 6c 2d 6d 61    78 2d 74 6f 6b 65 6e 73 29 29 0a 20 20 20 20 70  | _tokens.gptel-max-tokens)).....p | 
| 3160 |  72 6f 6d 70 74 73 2d 70 6c 69 73 74 29 29 0a 0a    28 63 6c 2d 64 65 66 6d 65 74 68 6f 64 20 67 70  | rompts-plist))..(cl-defmethod.gp | 
| 3180 |  74 65 6c 2d 2d 70 61 72 73 65 2d 62 75 66 66 65    72 20 28 28 5f 62 61 63 6b 65 6e 64 20 67 70 74  | tel--parse-buffer.((_backend.gpt | 
| 31a0 |  65 6c 2d 6f 70 65 6e 61 69 29 20 26 6f 70 74 69    6f 6e 61 6c 20 6d 61 78 2d 65 6e 74 72 69 65 73  | el-openai).&optional.max-entries | 
| 31c0 |  29 0a 20 20 28 6c 65 74 20 28 28 70 72 6f 6d 70    74 73 29 20 28 70 72 6f 70 29 29 0a 20 20 20 20  | )...(let.((prompts).(prop))..... | 
| 31e0 |  28 77 68 69 6c 65 20 28 61 6e 64 0a 20 20 20 20    20 20 20 20 20 20 20 20 28 6f 72 20 28 6e 6f 74  | (while.(and.............(or.(not | 
| 3200 |  20 6d 61 78 2d 65 6e 74 72 69 65 73 29 20 28 3e    3d 20 6d 61 78 2d 65 6e 74 72 69 65 73 20 30 29  | .max-entries).(>=.max-entries.0) | 
| 3220 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73    65 74 71 20 70 72 6f 70 20 28 74 65 78 74 2d 70  | ).............(setq.prop.(text-p | 
| 3240 |  72 6f 70 65 72 74 79 2d 73 65 61 72 63 68 2d 62    61 63 6b 77 61 72 64 0a 20 20 20 20 20 20 20 20  | roperty-search-backward......... | 
| 3260 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    27 67 70 74 65 6c 20 27 72 65 73 70 6f 6e 73 65  | ................'gptel.'response | 
| 3280 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28  | .........................(when.( | 
| 32a0 |  67 65 74 2d 63 68 61 72 2d 70 72 6f 70 65 72 74    79 20 28 6d 61 78 20 28 70 6f 69 6e 74 2d 6d 69  | get-char-property.(max.(point-mi | 
| 32c0 |  6e 29 20 28 31 2d 20 28 70 6f 69 6e 74 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | n).(1-.(point)))................ | 
| 32e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 3300 |  20 20 27 67 70 74 65 6c 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..'gptel)....................... | 
| 3320 |  20 20 20 20 74 29 29 29 29 0a 20 20 20 20 20 20    28 70 75 73 68 20 28 6c 69 73 74 20 3a 72 6f 6c  | ....t)))).......(push.(list.:rol | 
| 3340 |  65 20 28 69 66 20 28 70 72 6f 70 2d 6d 61 74 63    68 2d 76 61 6c 75 65 20 70 72 6f 70 29 20 22 61  | e.(if.(prop-match-value.prop)."a | 
| 3360 |  73 73 69 73 74 61 6e 74 22 20 22 75 73 65 72 22    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ssistant"."user")............... | 
| 3380 |  20 20 20 20 3a 63 6f 6e 74 65 6e 74 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | ....:content...................( | 
| 33a0 |  73 74 72 69 6e 67 2d 74 72 69 6d 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | string-trim....................( | 
| 33c0 |  62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67    2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20 28  | buffer-substring-no-properties.( | 
| 33e0 |  70 72 6f 70 2d 6d 61 74 63 68 2d 62 65 67 69 6e    6e 69 6e 67 20 70 72 6f 70 29 0a 20 20 20 20 20  | prop-match-beginning.prop)...... | 
| 3400 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 3420 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70    72 6f 70 2d 6d 61 74 63 68 2d 65 6e 64 20 70 72  | ..............(prop-match-end.pr | 
| 3440 |  6f 70 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20  | op))....................(format. | 
| 3460 |  22 5b 5c 74 5c 72 5c 6e 20 5d 2a 5c 5c 28 3f 3a    25 73 5c 5c 29 3f 5b 5c 74 5c 72 5c 6e 20 5d 2a  | "[\t\r\n.]*\\(?:%s\\)?[\t\r\n.]* | 
| 3480 |  22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65  | "............................(re | 
| 34a0 |  67 65 78 70 2d 71 75 6f 74 65 20 28 67 70 74 65    6c 2d 70 72 6f 6d 70 74 2d 70 72 65 66 69 78 2d  | gexp-quote.(gptel-prompt-prefix- | 
| 34c0 |  73 74 72 69 6e 67 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f  | string)))....................(fo | 
| 34e0 |  72 6d 61 74 20 22 5b 5c 74 5c 72 5c 6e 20 5d 2a    5c 5c 28 3f 3a 25 73 5c 5c 29 3f 5b 5c 74 5c 72  | rmat."[\t\r\n.]*\\(?:%s\\)?[\t\r | 
| 3500 |  5c 6e 20 5d 2a 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | \n.]*".......................... | 
| 3520 |  20 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20    28 67 70 74 65 6c 2d 72 65 73 70 6f 6e 73 65 2d  | ..(regexp-quote.(gptel-response- | 
| 3540 |  70 72 65 66 69 78 2d 73 74 72 69 6e 67 29 29 29    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  | prefix-string))))).............p | 
| 3560 |  72 6f 6d 70 74 73 29 0a 20 20 20 20 20 20 28 61    6e 64 20 6d 61 78 2d 65 6e 74 72 69 65 73 20 28  | rompts).......(and.max-entries.( | 
| 3580 |  63 6c 2d 64 65 63 66 20 6d 61 78 2d 65 6e 74 72    69 65 73 29 29 29 0a 20 20 20 20 28 63 6f 6e 73  | cl-decf.max-entries))).....(cons | 
| 35a0 |  20 28 6c 69 73 74 20 3a 72 6f 6c 65 20 22 73 79    73 74 65 6d 22 0a 20 20 20 20 20 20 20 20 20 20  | .(list.:role."system"........... | 
| 35c0 |  20 20 20 20 20 20 3a 63 6f 6e 74 65 6e 74 20 67    70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65 73  | ......:content.gptel--system-mes | 
| 35e0 |  73 61 67 65 29 0a 20 20 20 20 20 20 20 20 20 20    70 72 6f 6d 70 74 73 29 29 29 0a 0a 3b 3b 3b 23  | sage)...........prompts)))..;;;# | 
| 3600 |  23 23 61 75 74 6f 6c 6f 61 64 0a 28 63 6c 2d 64    65 66 75 6e 20 67 70 74 65 6c 2d 6d 61 6b 65 2d  | ##autoload.(cl-defun.gptel-make- | 
| 3620 |  6f 70 65 6e 61 69 0a 20 20 20 20 28 6e 61 6d 65    20 26 6b 65 79 20 63 75 72 6c 2d 61 72 67 73 20  | openai.....(name.&key.curl-args. | 
| 3640 |  6d 6f 64 65 6c 73 20 73 74 72 65 61 6d 20 6b 65    79 0a 20 20 20 20 20 20 20 20 20 20 28 68 65 61  | models.stream.key...........(hea | 
| 3660 |  64 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 28    6c 61 6d 62 64 61 20 28 29 20 28 77 68 65 6e 2d  | der............(lambda.().(when- | 
| 3680 |  6c 65 74 20 28 6b 65 79 20 28 67 70 74 65 6c 2d    2d 67 65 74 2d 61 70 69 2d 6b 65 79 29 29 0a 20  | let.(key.(gptel--get-api-key)).. | 
| 36a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 60 28 28 22 41 75 74 68 6f 72 69 7a 61 74  | ..................`(("Authorizat | 
| 36c0 |  69 6f 6e 22 20 2e 20 2c 28 63 6f 6e 63 61 74 20    22 42 65 61 72 65 72 20 22 20 6b 65 79 29 29 29  | ion"...,(concat."Bearer.".key))) | 
| 36e0 |  29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 68    6f 73 74 20 22 61 70 69 2e 6f 70 65 6e 61 69 2e  | )))...........(host."api.openai. | 
| 3700 |  63 6f 6d 22 29 0a 20 20 20 20 20 20 20 20 20 20    28 70 72 6f 74 6f 63 6f 6c 20 22 68 74 74 70 73  | com")...........(protocol."https | 
| 3720 |  22 29 0a 20 20 20 20 20 20 20 20 20 20 28 65 6e    64 70 6f 69 6e 74 20 22 2f 76 31 2f 63 68 61 74  | ")...........(endpoint."/v1/chat | 
| 3740 |  2f 63 6f 6d 70 6c 65 74 69 6f 6e 73 22 29 29 0a    20 20 22 52 65 67 69 73 74 65 72 20 61 6e 20 4f  | /completions"))..."Register.an.O | 
| 3760 |  70 65 6e 41 49 20 41 50 49 2d 63 6f 6d 70 61 74    69 62 6c 65 20 62 61 63 6b 65 6e 64 20 66 6f 72  | penAI.API-compatible.backend.for | 
| 3780 |  20 67 70 74 65 6c 20 77 69 74 68 20 4e 41 4d 45    2e 0a 0a 4b 65 79 77 6f 72 64 20 61 72 67 75 6d  | .gptel.with.NAME...Keyword.argum | 
| 37a0 |  65 6e 74 73 3a 0a 0a 43 55 52 4c 2d 41 52 47 53    20 28 6f 70 74 69 6f 6e 61 6c 29 20 69 73 20 61  | ents:..CURL-ARGS.(optional).is.a | 
| 37c0 |  20 6c 69 73 74 20 6f 66 20 61 64 64 69 74 69 6f    6e 61 6c 20 43 75 72 6c 20 61 72 67 75 6d 65 6e  | .list.of.additional.Curl.argumen | 
| 37e0 |  74 73 2e 0a 0a 48 4f 53 54 20 28 6f 70 74 69 6f    6e 61 6c 29 20 69 73 20 74 68 65 20 41 50 49 20  | ts...HOST.(optional).is.the.API. | 
| 3800 |  68 6f 73 74 2c 20 74 79 70 69 63 61 6c 6c 79 20    5c 22 61 70 69 2e 6f 70 65 6e 61 69 2e 63 6f 6d  | host,.typically.\"api.openai.com | 
| 3820 |  5c 22 2e 0a 0a 4d 4f 44 45 4c 53 20 69 73 20 61    20 6c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62  | \"...MODELS.is.a.list.of.availab | 
| 3840 |  6c 65 20 6d 6f 64 65 6c 20 6e 61 6d 65 73 2e 0a    0a 53 54 52 45 41 4d 20 69 73 20 61 20 62 6f 6f  | le.model.names...STREAM.is.a.boo | 
| 3860 |  6c 65 61 6e 20 74 6f 20 74 6f 67 67 6c 65 20 73    74 72 65 61 6d 69 6e 67 20 72 65 73 70 6f 6e 73  | lean.to.toggle.streaming.respons | 
| 3880 |  65 73 2c 20 64 65 66 61 75 6c 74 73 20 74 6f 0a    66 61 6c 73 65 2e 0a 0a 50 52 4f 54 4f 43 4f 4c  | es,.defaults.to.false...PROTOCOL | 
| 38a0 |  20 28 6f 70 74 69 6f 6e 61 6c 29 20 73 70 65 63    69 66 69 65 73 20 74 68 65 20 70 72 6f 74 6f 63  | .(optional).specifies.the.protoc | 
| 38c0 |  6f 6c 2c 20 68 74 74 70 73 20 62 79 20 64 65 66    61 75 6c 74 2e 0a 0a 45 4e 44 50 4f 49 4e 54 20  | ol,.https.by.default...ENDPOINT. | 
| 38e0 |  28 6f 70 74 69 6f 6e 61 6c 29 20 69 73 20 74 68    65 20 41 50 49 20 65 6e 64 70 6f 69 6e 74 20 66  | (optional).is.the.API.endpoint.f | 
| 3900 |  6f 72 20 63 6f 6d 70 6c 65 74 69 6f 6e 73 2c 20    64 65 66 61 75 6c 74 73 20 74 6f 0a 5c 22 2f 76  | or.completions,.defaults.to.\"/v | 
| 3920 |  31 2f 63 68 61 74 2f 63 6f 6d 70 6c 65 74 69 6f    6e 73 5c 22 2e 0a 0a 48 45 41 44 45 52 20 28 6f  | 1/chat/completions\"...HEADER.(o | 
| 3940 |  70 74 69 6f 6e 61 6c 29 20 69 73 20 66 6f 72 20    61 64 64 69 74 69 6f 6e 61 6c 20 68 65 61 64 65  | ptional).is.for.additional.heade | 
| 3960 |  72 73 20 74 6f 20 73 65 6e 64 20 77 69 74 68 20    65 61 63 68 0a 72 65 71 75 65 73 74 2e 20 49 74  | rs.to.send.with.each.request..It | 
| 3980 |  20 73 68 6f 75 6c 64 20 62 65 20 61 6e 20 61 6c    69 73 74 20 6f 72 20 61 20 66 75 6e 63 74 69 6f  | .should.be.an.alist.or.a.functio | 
| 39a0 |  6e 20 74 68 61 74 20 72 65 74 75 6e 73 20 61 6e    0a 61 6c 69 73 74 2c 20 6c 69 6b 65 3a 0a 28 28  | n.that.retuns.an.alist,.like:.(( | 
| 39c0 |  5c 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 5c 22    20 2e 20 5c 22 61 70 70 6c 69 63 61 74 69 6f 6e  | \"Content-Type\"...\"application | 
| 39e0 |  2f 6a 73 6f 6e 5c 22 29 29 0a 0a 4b 45 59 20 28    6f 70 74 69 6f 6e 61 6c 29 20 69 73 20 61 20 76  | /json\"))..KEY.(optional).is.a.v | 
| 3a00 |  61 72 69 61 62 6c 65 20 77 68 6f 73 65 20 76 61    6c 75 65 20 69 73 20 74 68 65 20 41 50 49 20 6b  | ariable.whose.value.is.the.API.k | 
| 3a20 |  65 79 2c 20 6f 72 0a 66 75 6e 63 74 69 6f 6e 20    74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  | ey,.or.function.that.returns.the | 
| 3a40 |  20 6b 65 79 2e 22 0a 20 20 28 64 65 63 6c 61 72    65 20 28 69 6e 64 65 6e 74 20 31 29 29 0a 20 20  | .key."...(declare.(indent.1))... | 
| 3a60 |  28 6c 65 74 20 28 28 62 61 63 6b 65 6e 64 20 28    67 70 74 65 6c 2d 2d 6d 61 6b 65 2d 6f 70 65 6e  | (let.((backend.(gptel--make-open | 
| 3a80 |  61 69 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 3a 63 75 72 6c 2d 61 72 67 73 20  | ai...................:curl-args. | 
| 3aa0 |  63 75 72 6c 2d 61 72 67 73 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 3a 6e 61 6d  | curl-args...................:nam | 
| 3ac0 |  65 20 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 3a 68 6f 73 74 20 68  | e.name...................:host.h | 
| 3ae0 |  6f 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 3a 68 65 61 64 65 72 20 68 65  | ost...................:header.he | 
| 3b00 |  61 64 65 72 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 3a 6b 65 79 20 6b 65 79 0a  | ader...................:key.key. | 
| 3b20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 3a 6d 6f 64 65 6c 73 20 6d 6f 64 65 6c 73  | ..................:models.models | 
| 3b40 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3a 70 72 6f 74 6f 63 6f 6c 20 70 72 6f  | ...................:protocol.pro | 
| 3b60 |  74 6f 63 6f 6c 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3a 65 6e 64 70 6f 69 6e  | tocol...................:endpoin | 
| 3b80 |  74 20 65 6e 64 70 6f 69 6e 74 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 3a 73 74  | t.endpoint...................:st | 
| 3ba0 |  72 65 61 6d 20 73 74 72 65 61 6d 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 75  | ream.stream...................:u | 
| 3bc0 |  72 6c 20 28 69 66 20 70 72 6f 74 6f 63 6f 6c 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | rl.(if.protocol................. | 
| 3be0 |  20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63    61 74 20 70 72 6f 74 6f 63 6f 6c 20 22 3a 2f 2f  | ...........(concat.protocol.":// | 
| 3c00 |  22 20 68 6f 73 74 20 65 6e 64 70 6f 69 6e 74 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ".host.endpoint)................ | 
| 3c20 |  20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61    74 20 68 6f 73 74 20 65 6e 64 70 6f 69 6e 74 29  | ..........(concat.host.endpoint) | 
| 3c40 |  29 29 29 29 0a 20 20 20 20 28 70 72 6f 67 31 20    62 61 63 6b 65 6e 64 0a 20 20 20 20 20 20 28 73  | )))).....(prog1.backend.......(s | 
| 3c60 |  65 74 66 20 28 61 6c 69 73 74 2d 67 65 74 20 6e    61 6d 65 20 67 70 74 65 6c 2d 2d 6b 6e 6f 77 6e  | etf.(alist-get.name.gptel--known | 
| 3c80 |  2d 62 61 63 6b 65 6e 64 73 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -backends....................... | 
| 3ca0 |  20 6e 69 6c 20 6e 69 6c 20 23 27 65 71 75 61 6c    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .nil.nil.#'equal)............... | 
| 3cc0 |  20 20 20 20 62 61 63 6b 65 6e 64 29 29 29 29 0a    0a 3b 3b 3b 20 41 7a 75 72 65 0a 3b 3b 3b 23 23  | ....backend))))..;;;.Azure.;;;## | 
| 3ce0 |  23 61 75 74 6f 6c 6f 61 64 0a 28 63 6c 2d 64 65    66 75 6e 20 67 70 74 65 6c 2d 6d 61 6b 65 2d 61  | #autoload.(cl-defun.gptel-make-a | 
| 3d00 |  7a 75 72 65 0a 20 20 20 20 28 6e 61 6d 65 20 26    6b 65 79 20 63 75 72 6c 2d 61 72 67 73 20 68 6f  | zure.....(name.&key.curl-args.ho | 
| 3d20 |  73 74 0a 20 20 20 20 20 20 20 20 20 20 28 70 72    6f 74 6f 63 6f 6c 20 22 68 74 74 70 73 22 29 0a  | st...........(protocol."https"). | 
| 3d40 |  20 20 20 20 20 20 20 20 20 20 28 68 65 61 64 65    72 20 28 6c 61 6d 62 64 61 20 28 29 20 60 28 28  | ..........(header.(lambda.().`(( | 
| 3d60 |  22 61 70 69 2d 6b 65 79 22 20 2e 20 2c 28 67 70    74 65 6c 2d 2d 67 65 74 2d 61 70 69 2d 6b 65 79  | "api-key"...,(gptel--get-api-key | 
| 3d80 |  29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    28 6b 65 79 20 27 67 70 74 65 6c 2d 61 70 69 2d  | )))))...........(key.'gptel-api- | 
| 3da0 |  6b 65 79 29 0a 20 20 20 20 20 20 20 20 20 20 6d    6f 64 65 6c 73 20 73 74 72 65 61 6d 20 65 6e 64  | key)...........models.stream.end | 
| 3dc0 |  70 6f 69 6e 74 29 0a 20 20 22 52 65 67 69 73 74    65 72 20 61 6e 20 41 7a 75 72 65 20 62 61 63 6b  | point)..."Register.an.Azure.back | 
| 3de0 |  65 6e 64 20 66 6f 72 20 67 70 74 65 6c 20 77 69    74 68 20 4e 41 4d 45 2e 0a 0a 4b 65 79 77 6f 72  | end.for.gptel.with.NAME...Keywor | 
| 3e00 |  64 20 61 72 67 75 6d 65 6e 74 73 3a 0a 0a 43 55    52 4c 2d 41 52 47 53 20 28 6f 70 74 69 6f 6e 61  | d.arguments:..CURL-ARGS.(optiona | 
| 3e20 |  6c 29 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20    61 64 64 69 74 69 6f 6e 61 6c 20 43 75 72 6c 20  | l).is.a.list.of.additional.Curl. | 
| 3e40 |  61 72 67 75 6d 65 6e 74 73 2e 0a 0a 48 4f 53 54    20 69 73 20 74 68 65 20 41 50 49 20 68 6f 73 74  | arguments...HOST.is.the.API.host | 
| 3e60 |  2e 0a 0a 4d 4f 44 45 4c 53 20 69 73 20 61 20 6c    69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  | ...MODELS.is.a.list.of.available | 
| 3e80 |  20 6d 6f 64 65 6c 20 6e 61 6d 65 73 2e 0a 0a 53    54 52 45 41 4d 20 69 73 20 61 20 62 6f 6f 6c 65  | .model.names...STREAM.is.a.boole | 
| 3ea0 |  61 6e 20 74 6f 20 74 6f 67 67 6c 65 20 73 74 72    65 61 6d 69 6e 67 20 72 65 73 70 6f 6e 73 65 73  | an.to.toggle.streaming.responses | 
| 3ec0 |  2c 20 64 65 66 61 75 6c 74 73 20 74 6f 0a 66 61    6c 73 65 2e 0a 0a 50 52 4f 54 4f 43 4f 4c 20 28  | ,.defaults.to.false...PROTOCOL.( | 
| 3ee0 |  6f 70 74 69 6f 6e 61 6c 29 20 73 70 65 63 69 66    69 65 73 20 74 68 65 20 70 72 6f 74 6f 63 6f 6c  | optional).specifies.the.protocol | 
| 3f00 |  2c 20 68 74 74 70 73 20 62 79 20 64 65 66 61 75    6c 74 2e 0a 0a 45 4e 44 50 4f 49 4e 54 20 69 73  | ,.https.by.default...ENDPOINT.is | 
| 3f20 |  20 74 68 65 20 41 50 49 20 65 6e 64 70 6f 69 6e    74 20 66 6f 72 20 63 6f 6d 70 6c 65 74 69 6f 6e  | .the.API.endpoint.for.completion | 
| 3f40 |  73 2e 0a 0a 48 45 41 44 45 52 20 28 6f 70 74 69    6f 6e 61 6c 29 20 69 73 20 66 6f 72 20 61 64 64  | s...HEADER.(optional).is.for.add | 
| 3f60 |  69 74 69 6f 6e 61 6c 20 68 65 61 64 65 72 73 20    74 6f 20 73 65 6e 64 20 77 69 74 68 20 65 61 63  | itional.headers.to.send.with.eac | 
| 3f80 |  68 0a 72 65 71 75 65 73 74 2e 20 49 74 20 73 68    6f 75 6c 64 20 62 65 20 61 6e 20 61 6c 69 73 74  | h.request..It.should.be.an.alist | 
| 3fa0 |  20 6f 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74    68 61 74 20 72 65 74 75 6e 73 20 61 6e 0a 61 6c  | .or.a.function.that.retuns.an.al | 
| 3fc0 |  69 73 74 2c 20 6c 69 6b 65 3a 0a 28 28 5c 22 43    6f 6e 74 65 6e 74 2d 54 79 70 65 5c 22 20 2e 20  | ist,.like:.((\"Content-Type\"... | 
| 3fe0 |  5c 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73    6f 6e 5c 22 29 29 0a 0a 4b 45 59 20 28 6f 70 74  | \"application/json\"))..KEY.(opt | 
| 4000 |  69 6f 6e 61 6c 29 20 69 73 20 61 20 76 61 72 69    61 62 6c 65 20 77 68 6f 73 65 20 76 61 6c 75 65  | ional).is.a.variable.whose.value | 
| 4020 |  20 69 73 20 74 68 65 20 41 50 49 20 6b 65 79 2c    20 6f 72 0a 66 75 6e 63 74 69 6f 6e 20 74 68 61  | .is.the.API.key,.or.function.tha | 
| 4040 |  74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6b 65    79 2e 0a 0a 45 78 61 6d 70 6c 65 3a 0a 2d 2d 2d  | t.returns.the.key...Example:.--- | 
| 4060 |  2d 2d 2d 2d 0a 0a 28 67 70 74 65 6c 2d 6d 61 6b    65 2d 61 7a 75 72 65 0a 20 5c 22 41 7a 75 72 65  | ----..(gptel-make-azure..\"Azure | 
| 4080 |  2d 31 5c 22 0a 20 3a 70 72 6f 74 6f 63 6f 6c 20    5c 22 68 74 74 70 73 5c 22 0a 20 3a 68 6f 73 74  | -1\"..:protocol.\"https\"..:host | 
| 40a0 |  20 5c 22 52 45 53 4f 55 52 43 45 5f 4e 41 4d 45    2e 6f 70 65 6e 61 69 2e 61 7a 75 72 65 2e 63 6f  | .\"RESOURCE_NAME.openai.azure.co | 
| 40c0 |  6d 5c 22 0a 20 3a 65 6e 64 70 6f 69 6e 74 0a 20    5c 22 2f 6f 70 65 6e 61 69 2f 64 65 70 6c 6f 79  | m\"..:endpoint..\"/openai/deploy | 
| 40e0 |  6d 65 6e 74 73 2f 44 45 50 4c 4f 59 4d 45 4e 54    5f 4e 41 4d 45 2f 63 6f 6d 70 6c 65 74 69 6f 6e  | ments/DEPLOYMENT_NAME/completion | 
| 4100 |  73 3f 61 70 69 2d 76 65 72 73 69 6f 6e 3d 32 30    32 33 2d 30 35 2d 31 35 5c 22 0a 20 3a 73 74 72  | s?api-version=2023-05-15\"..:str | 
| 4120 |  65 61 6d 20 74 0a 20 3a 6d 6f 64 65 6c 73 20 5c    5c 3d 27 28 5c 22 67 70 74 2d 33 2e 35 2d 74 75  | eam.t..:models.\\='(\"gpt-3.5-tu | 
| 4140 |  72 62 6f 5c 22 20 5c 22 67 70 74 2d 34 5c 22 29    29 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69  | rbo\".\"gpt-4\"))"...(declare.(i | 
| 4160 |  6e 64 65 6e 74 20 31 29 29 0a 20 20 28 6c 65 74    20 28 28 62 61 63 6b 65 6e 64 20 28 67 70 74 65  | ndent.1))...(let.((backend.(gpte | 
| 4180 |  6c 2d 2d 6d 61 6b 65 2d 6f 70 65 6e 61 69 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | l--make-openai.................. | 
| 41a0 |  20 3a 63 75 72 6c 2d 61 72 67 73 20 63 75 72 6c    2d 61 72 67 73 0a 20 20 20 20 20 20 20 20 20 20  | .:curl-args.curl-args........... | 
| 41c0 |  20 20 20 20 20 20 20 20 3a 6e 61 6d 65 20 6e 61    6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ........:name.name.............. | 
| 41e0 |  20 20 20 20 20 3a 68 6f 73 74 20 68 6f 73 74 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .....:host.host................. | 
| 4200 |  20 20 3a 68 65 61 64 65 72 20 68 65 61 64 65 72    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..:header.header................ | 
| 4220 |  20 20 20 3a 6b 65 79 20 6b 65 79 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 6d  | ...:key.key...................:m | 
| 4240 |  6f 64 65 6c 73 20 6d 6f 64 65 6c 73 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a  | odels.models...................: | 
| 4260 |  70 72 6f 74 6f 63 6f 6c 20 70 72 6f 74 6f 63 6f    6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | protocol.protocol............... | 
| 4280 |  20 20 20 20 3a 65 6e 64 70 6f 69 6e 74 20 65 6e    64 70 6f 69 6e 74 0a 20 20 20 20 20 20 20 20 20  | ....:endpoint.endpoint.......... | 
| 42a0 |  20 20 20 20 20 20 20 20 20 3a 73 74 72 65 61 6d    20 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20  | .........:stream.stream......... | 
| 42c0 |  20 20 20 20 20 20 20 20 20 20 3a 75 72 6c 20 28    69 66 20 70 72 6f 74 6f 63 6f 6c 0a 20 20 20 20  | ..........:url.(if.protocol..... | 
| 42e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 70  | .......................(concat.p | 
| 4300 |  72 6f 74 6f 63 6f 6c 20 22 3a 2f 2f 22 20 68 6f    73 74 20 65 6e 64 70 6f 69 6e 74 29 0a 20 20 20  | rotocol."://".host.endpoint).... | 
| 4320 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 68 6f  | ......................(concat.ho | 
| 4340 |  73 74 20 65 6e 64 70 6f 69 6e 74 29 29 29 29 29    0a 20 20 20 20 28 70 72 6f 67 31 20 62 61 63 6b  | st.endpoint))))).....(prog1.back | 
| 4360 |  65 6e 64 0a 20 20 20 20 20 20 28 73 65 74 66 20    28 61 6c 69 73 74 2d 67 65 74 20 6e 61 6d 65 20  | end.......(setf.(alist-get.name. | 
| 4380 |  67 70 74 65 6c 2d 2d 6b 6e 6f 77 6e 2d 62 61 63    6b 65 6e 64 73 0a 20 20 20 20 20 20 20 20 20 20  | gptel--known-backends........... | 
| 43a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c    20 6e 69 6c 20 23 27 65 71 75 61 6c 29 0a 20 20  | .............nil.nil.#'equal)... | 
| 43c0 |  20 20 20 20 20 20 20 20 20 20 62 61 63 6b 65 6e    64 29 29 29 29 0a 0a 3b 3b 20 47 50 54 34 41 6c  | ..........backend))))..;;.GPT4Al | 
| 43e0 |  6c 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64    0a 28 64 65 66 61 6c 69 61 73 20 27 67 70 74 65  | l.;;;###autoload.(defalias.'gpte | 
| 4400 |  6c 2d 6d 61 6b 65 2d 67 70 74 34 61 6c 6c 20 27    67 70 74 65 6c 2d 6d 61 6b 65 2d 6f 70 65 6e 61  | l-make-gpt4all.'gptel-make-opena | 
| 4420 |  69 0a 20 20 22 52 65 67 69 73 74 65 72 20 61 20    47 50 54 34 41 6c 6c 20 62 61 63 6b 65 6e 64 20  | i..."Register.a.GPT4All.backend. | 
| 4440 |  66 6f 72 20 67 70 74 65 6c 20 77 69 74 68 20 4e    41 4d 45 2e 0a 0a 4b 65 79 77 6f 72 64 20 61 72  | for.gptel.with.NAME...Keyword.ar | 
| 4460 |  67 75 6d 65 6e 74 73 3a 0a 0a 43 55 52 4c 2d 41    52 47 53 20 28 6f 70 74 69 6f 6e 61 6c 29 20 69  | guments:..CURL-ARGS.(optional).i | 
| 4480 |  73 20 61 20 6c 69 73 74 20 6f 66 20 61 64 64 69    74 69 6f 6e 61 6c 20 43 75 72 6c 20 61 72 67 75  | s.a.list.of.additional.Curl.argu | 
| 44a0 |  6d 65 6e 74 73 2e 0a 0a 48 4f 53 54 20 69 73 20    77 68 65 72 65 20 47 50 54 34 41 6c 6c 20 72 75  | ments...HOST.is.where.GPT4All.ru | 
| 44c0 |  6e 73 20 28 77 69 74 68 20 70 6f 72 74 29 2c 20    74 79 70 69 63 61 6c 6c 79 20 6c 6f 63 61 6c 68  | ns.(with.port),.typically.localh | 
| 44e0 |  6f 73 74 3a 38 34 39 31 0a 0a 4d 4f 44 45 4c 53    20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 76  | ost:8491..MODELS.is.a.list.of.av | 
| 4500 |  61 69 6c 61 62 6c 65 20 6d 6f 64 65 6c 20 6e 61    6d 65 73 2e 0a 0a 53 54 52 45 41 4d 20 69 73 20  | ailable.model.names...STREAM.is. | 
| 4520 |  61 20 62 6f 6f 6c 65 61 6e 20 74 6f 20 74 6f 67    67 6c 65 20 73 74 72 65 61 6d 69 6e 67 20 72 65  | a.boolean.to.toggle.streaming.re | 
| 4540 |  73 70 6f 6e 73 65 73 2c 20 64 65 66 61 75 6c 74    73 20 74 6f 0a 66 61 6c 73 65 2e 0a 0a 50 52 4f  | sponses,.defaults.to.false...PRO | 
| 4560 |  54 4f 43 4f 4c 20 73 70 65 63 69 66 69 65 73 20    74 68 65 20 70 72 6f 74 6f 63 6f 6c 2c 20 68 74  | TOCOL.specifies.the.protocol,.ht | 
| 4580 |  74 70 73 20 62 79 20 64 65 66 61 75 6c 74 2e 0a    0a 45 4e 44 50 4f 49 4e 54 20 28 6f 70 74 69 6f  | tps.by.default...ENDPOINT.(optio | 
| 45a0 |  6e 61 6c 29 20 69 73 20 74 68 65 20 41 50 49 20    65 6e 64 70 6f 69 6e 74 20 66 6f 72 20 63 6f 6d  | nal).is.the.API.endpoint.for.com | 
| 45c0 |  70 6c 65 74 69 6f 6e 73 2c 20 64 65 66 61 75 6c    74 73 20 74 6f 0a 5c 22 2f 61 70 69 2f 76 31 2f  | pletions,.defaults.to.\"/api/v1/ | 
| 45e0 |  63 6f 6d 70 6c 65 74 69 6f 6e 73 5c 22 0a 0a 48    45 41 44 45 52 20 28 6f 70 74 69 6f 6e 61 6c 29  | completions\"..HEADER.(optional) | 
| 4600 |  20 69 73 20 66 6f 72 20 61 64 64 69 74 69 6f 6e    61 6c 20 68 65 61 64 65 72 73 20 74 6f 20 73 65  | .is.for.additional.headers.to.se | 
| 4620 |  6e 64 20 77 69 74 68 20 65 61 63 68 0a 72 65 71    75 65 73 74 2e 20 49 74 20 73 68 6f 75 6c 64 20  | nd.with.each.request..It.should. | 
| 4640 |  62 65 20 61 6e 20 61 6c 69 73 74 20 6f 72 20 61    20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72  | be.an.alist.or.a.function.that.r | 
| 4660 |  65 74 75 6e 73 20 61 6e 0a 61 6c 69 73 74 2c 20    6c 69 6b 65 3a 0a 28 28 5c 22 43 6f 6e 74 65 6e  | etuns.an.alist,.like:.((\"Conten | 
| 4680 |  74 2d 54 79 70 65 5c 22 20 2e 20 5c 22 61 70 70    6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 5c 22 29  | t-Type\"...\"application/json\") | 
| 46a0 |  29 0a 0a 4b 45 59 20 28 6f 70 74 69 6f 6e 61 6c    29 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20  | )..KEY.(optional).is.a.variable. | 
| 46c0 |  77 68 6f 73 65 20 76 61 6c 75 65 20 69 73 20 74    68 65 20 41 50 49 20 6b 65 79 2c 20 6f 72 0a 66  | whose.value.is.the.API.key,.or.f | 
| 46e0 |  75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 65 74    75 72 6e 73 20 74 68 65 20 6b 65 79 2e 20 54 68  | unction.that.returns.the.key..Th | 
| 4700 |  69 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20    6e 6f 74 20 72 65 71 75 69 72 65 64 20 66 6f 72  | is.is.typically.not.required.for | 
| 4720 |  0a 6c 6f 63 61 6c 20 6d 6f 64 65 6c 73 20 6c 69    6b 65 20 47 50 54 34 41 6c 6c 2e 0a 0a 45 78 61  | .local.models.like.GPT4All...Exa | 
| 4740 |  6d 70 6c 65 3a 0a 2d 2d 2d 2d 2d 2d 2d 0a 0a 28    67 70 74 65 6c 2d 6d 61 6b 65 2d 67 70 74 34 61  | mple:.-------..(gptel-make-gpt4a | 
| 4760 |  6c 6c 0a 20 5c 22 47 50 54 34 41 6c 6c 5c 22 0a    20 3a 70 72 6f 74 6f 63 6f 6c 20 5c 22 68 74 74  | ll..\"GPT4All\"..:protocol.\"htt | 
| 4780 |  70 5c 22 0a 20 3a 68 6f 73 74 20 5c 22 6c 6f 63    61 6c 68 6f 73 74 3a 34 38 39 31 5c 22 0a 20 3a  | p\"..:host.\"localhost:4891\"..: | 
| 47a0 |  6d 6f 64 65 6c 73 20 5c 5c 3d 27 28 5c 22 6d 69    73 74 72 61 6c 2d 37 62 2d 6f 70 65 6e 6f 72 63  | models.\\='(\"mistral-7b-openorc | 
| 47c0 |  61 2e 51 34 5f 30 2e 67 67 75 66 5c 22 29 29 22    29 0a 0a 28 70 72 6f 76 69 64 65 20 27 67 70 74  | a.Q4_0.gguf\"))")..(provide.'gpt | 
| 47e0 |  65 6c 2d 6f 70 65 6e 61 69 29 0a 3b 3b 3b 20 67    70 74 65 6c 2d 62 61 63 6b 65 6e 64 73 2e 65 6c  | el-openai).;;;.gptel-backends.el | 
| 4800 |  20 65 6e 64 73 20 68 65 72 65 0a 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ends.here...................... | 
| 4820 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4840 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4860 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4880 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 48a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 48c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 48e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4900 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4920 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4940 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4960 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4980 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 49a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 49c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 49e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4a00 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 6b 61 67 69 2e 65  | gptel-20240424.2306/gptel-kagi.e | 
| 4a20 |  6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | l............................... | 
| 4a40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4a60 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 4a80 |  30 30 31 36 31 33 32 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 34 34 37 31 00 20 30 00 00 00  | 0016132.00000000000.014471..0... | 
| 4aa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4ac0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4ae0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4b00 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 4b20 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 4b40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4b60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4b80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4ba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4bc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4be0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 4c00 |  3b 3b 3b 20 67 70 74 65 6c 2d 6b 61 67 69 2e 65    6c 20 2d 2d 2d 20 4b 61 67 69 20 73 75 70 70 6f  | ;;;.gptel-kagi.el.---.Kagi.suppo | 
| 4c20 |  72 74 20 66 6f 72 20 67 70 74 65 6c 20 20 20 20    20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d 62 69 6e  | rt.for.gptel.....-*-.lexical-bin | 
| 4c40 |  64 69 6e 67 3a 20 74 3b 20 2d 2a 2d 0a 0a 3b 3b    20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 32  | ding:.t;.-*-..;;.Copyright.(C).2 | 
| 4c60 |  30 32 33 20 20 4b 61 72 74 68 69 6b 20 43 68 69    6b 6d 61 67 61 6c 75 72 0a 0a 3b 3b 20 41 75 74  | 023..Karthik.Chikmagalur..;;.Aut | 
| 4c80 |  68 6f 72 3a 20 4b 61 72 74 68 69 6b 20 43 68 69    6b 6d 61 67 61 6c 75 72 20 3c 6b 61 72 74 68 69  | hor:.Karthik.Chikmagalur.<karthi | 
| 4ca0 |  6b 63 68 69 6b 6d 61 67 61 6c 75 72 40 67 6d 61    69 6c 2e 63 6f 6d 3e 0a 3b 3b 20 4b 65 79 77 6f  | kchikmagalur@gmail.com>.;;.Keywo | 
| 4cc0 |  72 64 73 3a 20 68 79 70 65 72 6d 65 64 69 61 0a    0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d  | rds:.hypermedia..;;.This.program | 
| 4ce0 |  20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61 72    65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73  | .is.free.software;.you.can.redis | 
| 4d00 |  74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f    72 20 6d 6f 64 69 66 79 0a 3b 3b 20 69 74 20 75  | tribute.it.and/or.modify.;;.it.u | 
| 4d20 |  6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20 6f    66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61  | nder.the.terms.of.the.GNU.Genera | 
| 4d40 |  6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65    20 61 73 20 70 75 62 6c 69 73 68 65 64 20 62 79  | l.Public.License.as.published.by | 
| 4d60 |  0a 3b 3b 20 74 68 65 20 46 72 65 65 20 53 6f 66    74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e  | .;;.the.Free.Software.Foundation | 
| 4d80 |  2c 20 65 69 74 68 65 72 20 76 65 72 73 69 6f 6e    20 33 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73  | ,.either.version.3.of.the.Licens | 
| 4da0 |  65 2c 20 6f 72 0a 3b 3b 20 28 61 74 20 79 6f 75    72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c 61  | e,.or.;;.(at.your.option).any.la | 
| 4dc0 |  74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 0a 3b 3b    20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73  | ter.version...;;.This.program.is | 
| 4de0 |  20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20    74 68 65 20 68 6f 70 65 20 74 68 61 74 20 69 74  | .distributed.in.the.hope.that.it | 
| 4e00 |  20 77 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c    0a 3b 3b 20 62 75 74 20 57 49 54 48 4f 55 54 20  | .will.be.useful,.;;.but.WITHOUT. | 
| 4e20 |  41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 77 69    74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 20 69  | ANY.WARRANTY;.without.even.the.i | 
| 4e40 |  6d 70 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20    6f 66 0a 3b 3b 20 4d 45 52 43 48 41 4e 54 41 42  | mplied.warranty.of.;;.MERCHANTAB | 
| 4e60 |  49 4c 49 54 59 20 6f 72 20 46 49 54 4e 45 53 53    20 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41  | ILITY.or.FITNESS.FOR.A.PARTICULA | 
| 4e80 |  52 20 50 55 52 50 4f 53 45 2e 20 20 53 65 65 20    74 68 65 0a 3b 3b 20 47 4e 55 20 47 65 6e 65 72  | R.PURPOSE...See.the.;;.GNU.Gener | 
| 4ea0 |  61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73    65 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69  | al.Public.License.for.more.detai | 
| 4ec0 |  6c 73 2e 0a 0a 3b 3b 20 59 6f 75 20 73 68 6f 75    6c 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64  | ls...;;.You.should.have.received | 
| 4ee0 |  20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47    4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69  | .a.copy.of.the.GNU.General.Publi | 
| 4f00 |  63 20 4c 69 63 65 6e 73 65 0a 3b 3b 20 61 6c 6f    6e 67 20 77 69 74 68 20 74 68 69 73 20 70 72 6f  | c.License.;;.along.with.this.pro | 
| 4f20 |  67 72 61 6d 2e 20 20 49 66 20 6e 6f 74 2c 20 73    65 65 20 3c 68 74 74 70 73 3a 2f 2f 77 77 77 2e  | gram...If.not,.see.<https://www. | 
| 4f40 |  67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73    2f 3e 2e 0a 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74  | gnu.org/licenses/>...;;;.Comment | 
| 4f60 |  61 72 79 3a 0a 0a 3b 3b 20 54 68 69 73 20 66 69    6c 65 20 61 64 64 73 20 73 75 70 70 6f 72 74 20  | ary:..;;.This.file.adds.support. | 
| 4f80 |  66 6f 72 20 74 68 65 20 4b 61 67 69 20 46 61 73    74 47 50 54 20 4c 4c 4d 20 41 50 49 20 74 6f 20  | for.the.Kagi.FastGPT.LLM.API.to. | 
| 4fa0 |  67 70 74 65 6c 0a 0a 3b 3b 3b 20 43 6f 64 65 3a    0a 28 72 65 71 75 69 72 65 20 27 67 70 74 65 6c  | gptel..;;;.Code:.(require.'gptel | 
| 4fc0 |  29 0a 28 72 65 71 75 69 72 65 20 27 63 6c 2d 67    65 6e 65 72 69 63 29 0a 28 65 76 61 6c 2d 77 68  | ).(require.'cl-generic).(eval-wh | 
| 4fe0 |  65 6e 2d 63 6f 6d 70 69 6c 65 0a 20 20 28 72 65    71 75 69 72 65 20 27 63 6c 2d 6c 69 62 29 29 0a  | en-compile...(require.'cl-lib)). | 
| 5000 |  0a 3b 3b 3b 20 4b 61 67 69 0a 28 63 6c 2d 64 65    66 73 74 72 75 63 74 20 28 67 70 74 65 6c 2d 6b  | .;;;.Kagi.(cl-defstruct.(gptel-k | 
| 5020 |  61 67 69 20 28 3a 63 6f 6e 73 74 72 75 63 74 6f    72 20 67 70 74 65 6c 2d 2d 6d 61 6b 65 2d 6b 61  | agi.(:constructor.gptel--make-ka | 
| 5040 |  67 69 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | gi)............................. | 
| 5060 |  28 3a 63 6f 70 69 65 72 20 6e 69 6c 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | (:copier.nil)................... | 
| 5080 |  20 20 20 20 20 20 20 20 20 20 28 3a 69 6e 63 6c    75 64 65 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e  | ..........(:include.gptel-backen | 
| 50a0 |  64 29 29 29 0a 0a 28 63 6c 2d 64 65 66 6d 65 74    68 6f 64 20 67 70 74 65 6c 2d 2d 70 61 72 73 65  | d)))..(cl-defmethod.gptel--parse | 
| 50c0 |  2d 72 65 73 70 6f 6e 73 65 20 28 28 5f 62 61 63    6b 65 6e 64 20 67 70 74 65 6c 2d 6b 61 67 69 29  | -response.((_backend.gptel-kagi) | 
| 50e0 |  20 72 65 73 70 6f 6e 73 65 20 69 6e 66 6f 29 0a    20 20 28 6c 65 74 2a 20 28 28 64 61 74 61 20 28  | .response.info)...(let*.((data.( | 
| 5100 |  70 6c 69 73 74 2d 67 65 74 20 72 65 73 70 6f 6e    73 65 20 3a 64 61 74 61 29 29 0a 20 20 20 20 20  | plist-get.response.:data))...... | 
| 5120 |  20 20 20 20 28 6f 75 74 70 75 74 20 28 70 6c 69    73 74 2d 67 65 74 20 64 61 74 61 20 3a 6f 75 74  | ....(output.(plist-get.data.:out | 
| 5140 |  70 75 74 29 29 0a 20 20 20 20 20 20 20 20 20 28    72 65 66 65 72 65 6e 63 65 73 20 28 70 6c 69 73  | put))..........(references.(plis | 
| 5160 |  74 2d 67 65 74 20 64 61 74 61 20 3a 72 65 66 65    72 65 6e 63 65 73 29 29 29 0a 20 20 20 20 28 77  | t-get.data.:references))).....(w | 
| 5180 |  68 65 6e 20 72 65 66 65 72 65 6e 63 65 73 0a 20    20 20 20 20 20 28 73 65 74 71 20 72 65 66 65 72  | hen.references.......(setq.refer | 
| 51a0 |  65 6e 63 65 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 63 6c 2d 6c 6f 6f 70 20 77 69 74 68 20  | ences.............(cl-loop.with. | 
| 51c0 |  6c 69 6e 6b 65 72 20 3d 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70  | linker.=......................(p | 
| 51e0 |  63 61 73 65 20 28 62 75 66 66 65 72 2d 6c 6f 63    61 6c 2d 76 61 6c 75 65 20 27 6d 61 6a 6f 72 2d  | case.(buffer-local-value.'major- | 
| 5200 |  6d 6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | mode............................ | 
| 5220 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 70 6c 69 73 74 2d 67 65 74 20  | .....................(plist-get. | 
| 5240 |  69 6e 66 6f 20 3a 62 75 66 66 65 72 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | info.:buffer)).................. | 
| 5260 |  20 20 20 20 20 20 28 27 6f 72 67 2d 6d 6f 64 65    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ......('org-mode................ | 
| 5280 |  20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61    20 28 74 65 78 74 20 75 72 6c 29 0a 20 20 20 20  | .........(lambda.(text.url)..... | 
| 52a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 5b  | ......................(format."[ | 
| 52c0 |  5b 25 73 5d 5b 25 73 5d 5d 22 20 75 72 6c 20 74    65 78 74 29 29 29 0a 20 20 20 20 20 20 20 20 20  | [%s][%s]]".url.text))).......... | 
| 52e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 27    6d 61 72 6b 64 6f 77 6e 2d 6d 6f 64 65 0a 20 20  | ..............('markdown-mode... | 
| 5300 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 74  | ......................(lambda.(t | 
| 5320 |  65 78 74 20 75 72 6c 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ext.url)........................ | 
| 5340 |  20 20 20 28 66 6f 72 6d 61 74 20 22 5b 25 73 5d    28 25 73 29 22 20 74 65 78 74 20 75 72 6c 29 29  | ...(format."[%s](%s)".text.url)) | 
| 5360 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 5f 20 28 6c 61 6d  | )........................(_.(lam | 
| 5380 |  62 64 61 20 28 74 65 78 74 20 75 72 6c 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | bda.(text.url).................. | 
| 53a0 |  20 20 20 20 20 20 20 20 20 20 20 28 62 75 74 74    6f 6e 69 7a 65 0a 20 20 20 20 20 20 20 20 20 20  | ...........(buttonize........... | 
| 53c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 74 65 78 74 20 28 6c 61 6d 62 64 61 20  | ...................text.(lambda. | 
| 53e0 |  28 64 61 74 61 29 20 28 62 72 6f 77 73 65 2d 75    72 6c 20 64 61 74 61 29 29 0a 20 20 20 20 20 20  | (data).(browse-url.data))....... | 
| 5400 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 75 72 6c 29 29 29 29 0a 20  | .......................url)))).. | 
| 5420 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 66 6f 72 20 72 65 66 20 61 63 72 6f  | ....................for.ref.acro | 
| 5440 |  73 73 20 72 65 66 65 72 65 6e 63 65 73 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ss.references................... | 
| 5460 |  20 20 20 66 6f 72 20 74 69 74 6c 65 20 3d 20 28    70 6c 69 73 74 2d 67 65 74 20 72 65 66 20 3a 74  | ...for.title.=.(plist-get.ref.:t | 
| 5480 |  69 74 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 73  | itle)......................for.s | 
| 54a0 |  6e 69 70 70 65 74 20 3d 20 28 70 6c 69 73 74 2d    67 65 74 20 72 65 66 20 3a 73 6e 69 70 70 65 74  | nippet.=.(plist-get.ref.:snippet | 
| 54c0 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 66 6f 72 20 75 72 6c 20 3d  | )......................for.url.= | 
| 54e0 |  20 28 70 6c 69 73 74 2d 67 65 74 20 72 65 66 20    3a 75 72 6c 29 0a 20 20 20 20 20 20 20 20 20 20  | .(plist-get.ref.:url)........... | 
| 5500 |  20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e    20 75 70 66 72 6f 6d 20 31 0a 20 20 20 20 20 20  | ...........for.n.upfrom.1....... | 
| 5520 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63    6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20  | ...............collect.......... | 
| 5540 |  20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e    63 61 74 20 28 66 6f 72 6d 61 74 20 22 5b 25 64  | ............(concat.(format."[%d | 
| 5560 |  5d 20 22 20 6e 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ].".n).......................... | 
| 5580 |  20 20 20 20 28 66 75 6e 63 61 6c 6c 20 6c 69 6e    6b 65 72 20 74 69 74 6c 65 20 75 72 6c 29 20 22  | ....(funcall.linker.title.url)." | 
| 55a0 |  3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | :."............................. | 
| 55c0 |  20 28 72 65 70 6c 61 63 65 2d 72 65 67 65 78 70    2d 69 6e 2d 73 74 72 69 6e 67 0a 20 20 20 20 20  | .(replace-regexp-in-string...... | 
| 55e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 22 3c 2f 3f 62 3e 22  | ........................."</?b>" | 
| 5600 |  20 22 2a 22 20 73 6e 69 70 70 65 74 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ."*".snippet)).................. | 
| 5620 |  20 20 20 20 69 6e 74 6f 20 72 65 66 2d 73 74 72    69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 20 20  | ....into.ref-strings............ | 
| 5640 |  20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c    79 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20  | ..........finally.return........ | 
| 5660 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63    6f 6e 63 61 74 20 22 5c 6e 5c 6e 22 20 28 6d 61  | ..............(concat."\n\n".(ma | 
| 5680 |  70 63 6f 6e 63 61 74 20 23 27 69 64 65 6e 74 69    74 79 20 72 65 66 2d 73 74 72 69 6e 67 73 20 22  | pconcat.#'identity.ref-strings." | 
| 56a0 |  5c 6e 22 29 29 29 29 29 0a 20 20 20 20 20 20 20    20 28 63 6f 6e 63 61 74 20 6f 75 74 70 75 74 20  | \n"))))).........(concat.output. | 
| 56c0 |  72 65 66 65 72 65 6e 63 65 73 29 29 29 0a 0a 28    63 6c 2d 64 65 66 6d 65 74 68 6f 64 20 67 70 74  | references)))..(cl-defmethod.gpt | 
| 56e0 |  65 6c 2d 2d 72 65 71 75 65 73 74 2d 64 61 74 61    20 28 28 5f 62 61 63 6b 65 6e 64 20 67 70 74 65  | el--request-data.((_backend.gpte | 
| 5700 |  6c 2d 6b 61 67 69 29 20 70 72 6f 6d 70 74 73 29    0a 20 20 22 4a 53 4f 4e 20 65 6e 63 6f 64 65 20  | l-kagi).prompts)..."JSON.encode. | 
| 5720 |  50 52 4f 4d 50 54 53 20 66 6f 72 20 4b 61 67 69    2e 22 0a 20 20 28 70 63 61 73 65 2d 65 78 68 61  | PROMPTS.for.Kagi."...(pcase-exha | 
| 5740 |  75 73 74 69 76 65 20 67 70 74 65 6c 2d 6d 6f 64    65 6c 0a 20 20 20 20 28 22 66 61 73 74 67 70 74  | ustive.gptel-model.....("fastgpt | 
| 5760 |  22 0a 20 20 20 20 20 60 28 2c 40 70 72 6f 6d 70    74 73 20 3a 77 65 62 5f 73 65 61 72 63 68 20 74  | "......`(,@prompts.:web_search.t | 
| 5780 |  20 3a 63 61 63 68 65 20 74 29 29 0a 20 20 20 20    28 28 61 6e 64 20 6d 6f 64 65 6c 20 28 67 75 61  | .:cache.t)).....((and.model.(gua | 
| 57a0 |  72 64 20 28 73 74 72 69 6e 67 2d 70 72 65 66 69    78 2d 70 20 22 73 75 6d 6d 61 72 69 7a 65 22 20  | rd.(string-prefix-p."summarize". | 
| 57c0 |  6d 6f 64 65 6c 29 29 29 0a 20 20 20 20 20 60 28    2c 40 70 72 6f 6d 70 74 73 20 3a 65 6e 67 69 6e  | model)))......`(,@prompts.:engin | 
| 57e0 |  65 20 2c 28 73 75 62 73 74 72 69 6e 67 20 6d 6f    64 65 6c 20 31 30 29 29 29 29 29 0a 0a 28 63 6c  | e.,(substring.model.10)))))..(cl | 
| 5800 |  2d 64 65 66 6d 65 74 68 6f 64 20 67 70 74 65 6c    2d 2d 70 61 72 73 65 2d 62 75 66 66 65 72 20 28  | -defmethod.gptel--parse-buffer.( | 
| 5820 |  28 5f 62 61 63 6b 65 6e 64 20 67 70 74 65 6c 2d    6b 61 67 69 29 20 26 6f 70 74 69 6f 6e 61 6c 20  | (_backend.gptel-kagi).&optional. | 
| 5840 |  5f 6d 61 78 2d 65 6e 74 72 69 65 73 29 0a 20 20    28 6c 65 74 20 28 28 75 72 6c 20 28 6f 72 20 28  | _max-entries)...(let.((url.(or.( | 
| 5860 |  74 68 69 6e 67 2d 61 74 2d 70 6f 69 6e 74 20 27    75 72 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20  | thing-at-point.'url)............ | 
| 5880 |  20 20 20 20 20 20 28 67 65 74 2d 74 65 78 74 2d    70 72 6f 70 65 72 74 79 20 28 70 6f 69 6e 74 29  | ......(get-text-property.(point) | 
| 58a0 |  20 27 73 68 72 2d 75 72 6c 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74  | .'shr-url)..................(get | 
| 58c0 |  2d 74 65 78 74 2d 70 72 6f 70 65 72 74 79 20 28    70 6f 69 6e 74 29 20 27 69 6d 61 67 65 2d 75 72  | -text-property.(point).'image-ur | 
| 58e0 |  6c 29 29 29 0a 20 20 20 20 20 20 20 20 3b 3b 20    28 66 69 6c 65 6e 61 6d 65 20 28 74 68 69 6e 67  | l))).........;;.(filename.(thing | 
| 5900 |  2d 61 74 2d 70 6f 69 6e 74 20 27 65 78 69 73 74    69 6e 67 2d 66 69 6c 65 6e 61 6d 65 29 29 20 3b  | -at-point.'existing-filename)).; | 
| 5920 |  6e 6f 20 66 69 6c 65 20 75 70 6c 6f 61 64 20 73    75 70 70 6f 72 74 20 79 65 74 0a 20 20 20 20 20  | no.file.upload.support.yet...... | 
| 5940 |  20 20 20 28 70 72 6f 70 20 28 74 65 78 74 2d 70    72 6f 70 65 72 74 79 2d 73 65 61 72 63 68 2d 62  | ...(prop.(text-property-search-b | 
| 5960 |  61 63 6b 77 61 72 64 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 27 67 70 74 65 6c 20 27 72  | ackward................'gptel.'r | 
| 5980 |  65 73 70 6f 6e 73 65 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 77 68 65 6e 20 28 67 65  | esponse................(when.(ge | 
| 59a0 |  74 2d 63 68 61 72 2d 70 72 6f 70 65 72 74 79 20    28 6d 61 78 20 28 70 6f 69 6e 74 2d 6d 69 6e 29  | t-char-property.(max.(point-min) | 
| 59c0 |  20 28 31 2d 20 28 70 6f 69 6e 74 29 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .(1-.(point))).................. | 
| 59e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 27 67 70 74 65 6c 29 0a 20  | .......................'gptel).. | 
| 5a00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    74 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 61  | ................t)))).....(if.(a | 
| 5a20 |  6e 64 20 75 72 6c 20 28 73 74 72 69 6e 67 2d 70    72 65 66 69 78 2d 70 20 22 73 75 6d 6d 61 72 69  | nd.url.(string-prefix-p."summari | 
| 5a40 |  7a 65 22 20 67 70 74 65 6c 2d 6d 6f 64 65 6c 29    29 0a 20 20 20 20 20 20 20 20 28 6c 69 73 74 20  | ze".gptel-model)).........(list. | 
| 5a60 |  3a 75 72 6c 20 75 72 6c 29 0a 20 20 20 20 20 20    28 69 66 20 28 61 6e 64 20 28 70 72 6f 70 2d 6d  | :url.url).......(if.(and.(prop-m | 
| 5a80 |  61 74 63 68 2d 70 20 70 72 6f 70 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f  | atch-p.prop)................(pro | 
| 5aa0 |  70 2d 6d 61 74 63 68 2d 76 61 6c 75 65 20 70 72    6f 70 29 29 0a 20 20 20 20 20 20 20 20 20 20 28  | p-match-value.prop))...........( | 
| 5ac0 |  75 73 65 72 2d 65 72 72 6f 72 20 22 4e 6f 20 75    73 65 72 20 70 72 6f 6d 70 74 20 66 6f 75 6e 64  | user-error."No.user.prompt.found | 
| 5ae0 |  21 22 29 0a 20 20 20 20 20 20 20 20 28 6c 65 74    20 28 28 70 72 6f 6d 70 74 73 0a 20 20 20 20 20  | !").........(let.((prompts...... | 
| 5b00 |  20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e    67 2d 74 72 69 6d 0a 20 20 20 20 20 20 20 20 20  | ..........(string-trim.......... | 
| 5b20 |  20 20 20 20 20 20 20 28 62 75 66 66 65 72 2d 73    75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70  | .......(buffer-substring-no-prop | 
| 5b40 |  65 72 74 69 65 73 20 28 70 72 6f 70 2d 6d 61 74    63 68 2d 62 65 67 69 6e 6e 69 6e 67 20 70 72 6f  | erties.(prop-match-beginning.pro | 
| 5b60 |  70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | p).............................. | 
| 5b80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 70 72 6f 70 2d 6d 61 74 63 68 2d 65  | ...................(prop-match-e | 
| 5ba0 |  6e 64 20 70 72 6f 70 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61  | nd.prop)).................(forma | 
| 5bc0 |  74 20 22 5b 5c 74 5c 72 5c 6e 20 5d 2a 5c 5c 28    3f 3a 25 73 5c 5c 29 3f 5b 5c 74 5c 72 5c 6e 20  | t."[\t\r\n.]*\\(?:%s\\)?[\t\r\n. | 
| 5be0 |  5d 2a 22 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 67  | ]*".........................(reg | 
| 5c00 |  65 78 70 2d 71 75 6f 74 65 20 28 67 70 74 65 6c    2d 70 72 6f 6d 70 74 2d 70 72 65 66 69 78 2d 73  | exp-quote.(gptel-prompt-prefix-s | 
| 5c20 |  74 72 69 6e 67 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74  | tring))).................(format | 
| 5c40 |  20 22 5b 5c 74 5c 72 5c 6e 20 5d 2a 5c 5c 28 3f    3a 25 73 5c 5c 29 3f 5b 5c 74 5c 72 5c 6e 20 5d  | ."[\t\r\n.]*\\(?:%s\\)?[\t\r\n.] | 
| 5c60 |  2a 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 72 65 67 65  | *".........................(rege | 
| 5c80 |  78 70 2d 71 75 6f 74 65 20 28 67 70 74 65 6c 2d    72 65 73 70 6f 6e 73 65 2d 70 72 65 66 69 78 2d  | xp-quote.(gptel-response-prefix- | 
| 5ca0 |  73 74 72 69 6e 67 29 29 29 29 29 29 0a 20 20 20    20 20 20 20 20 20 20 28 70 63 61 73 65 2d 65 78  | string))))))...........(pcase-ex | 
| 5cc0 |  68 61 75 73 74 69 76 65 20 67 70 74 65 6c 2d 6d    6f 64 65 6c 0a 20 20 20 20 20 20 20 20 20 20 20  | haustive.gptel-model............ | 
| 5ce0 |  20 28 22 66 61 73 74 67 70 74 22 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 70  | .("fastgpt"..............(setq.p | 
| 5d00 |  72 6f 6d 70 74 73 20 28 6c 69 73 74 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | rompts.(list.................... | 
| 5d20 |  20 20 20 20 20 20 20 20 20 3a 71 75 65 72 79 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .........:query................. | 
| 5d40 |  20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20    28 70 72 6f 70 2d 6d 61 74 63 68 2d 70 20 70 72  | ............(if.(prop-match-p.pr | 
| 5d60 |  6f 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | op)............................. | 
| 5d80 |  20 20 20 20 28 63 6f 6e 63 61 74 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ....(concat..................... | 
| 5da0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20    46 61 6b 65 20 61 20 73 79 73 74 65 6d 20 6d 65  | .............;;.Fake.a.system.me | 
| 5dc0 |  73 73 61 67 65 20 62 79 20 69 6e 63 6c 75 64 69    6e 67 20 69 74 20 69 6e 20 74 68 65 20 70 72 6f  | ssage.by.including.it.in.the.pro | 
| 5de0 |  6d 70 74 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | mpt............................. | 
| 5e00 |  20 20 20 20 20 67 70 74 65 6c 2d 2d 73 79 73 74    65 6d 2d 6d 65 73 73 61 67 65 20 22 5c 6e 5c 6e  | .....gptel--system-message."\n\n | 
| 5e20 |  22 20 70 72 6f 6d 70 74 73 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ".prompts)...................... | 
| 5e40 |  20 20 20 20 20 20 20 20 20 22 22 29 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 28 61 6e  | ........."")))).............((an | 
| 5e60 |  64 20 6d 6f 64 65 6c 20 28 67 75 61 72 64 20 28    73 74 72 69 6e 67 2d 70 72 65 66 69 78 2d 70 20  | d.model.(guard.(string-prefix-p. | 
| 5e80 |  22 73 75 6d 6d 61 72 69 7a 65 22 20 6d 6f 64 65    6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | "summarize".model)))............ | 
| 5ea0 |  20 20 3b 3b 20 49 66 20 74 68 65 20 65 6e 74 69    72 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  | ..;;.If.the.entire.contents.of.t | 
| 5ec0 |  68 65 20 70 72 6f 6d 70 74 20 6c 6f 6f 6b 73 20    6c 69 6b 65 20 61 20 75 72 6c 2c 20 73 65 6e 64  | he.prompt.looks.like.a.url,.send | 
| 5ee0 |  20 74 68 65 20 75 72 6c 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 73 65  | .the.url..............;;.Else.se | 
| 5f00 |  6e 64 20 74 68 65 20 74 65 78 74 20 6f 66 20 74    68 65 20 72 65 67 69 6f 6e 0a 20 20 20 20 20 20  | nd.the.text.of.the.region....... | 
| 5f20 |  20 20 20 20 20 20 20 28 73 65 74 71 20 70 72 6f    6d 70 74 73 0a 20 20 20 20 20 20 20 20 20 20 20  | .......(setq.prompts............ | 
| 5f40 |  20 20 20 20 20 20 20 20 28 69 66 2d 6c 65 74 20    28 28 28 70 72 6f 70 2d 6d 61 74 63 68 2d 70 20  | ........(if-let.(((prop-match-p. | 
| 5f60 |  70 72 6f 70 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | prop)).......................... | 
| 5f80 |  20 20 20 28 65 6e 67 69 6e 65 20 28 73 75 62 73    74 72 69 6e 67 20 6d 6f 64 65 6c 20 31 30 29 29  | ...(engine.(substring.model.10)) | 
| 5fa0 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 3b 3b 20 49 74 27 73  | )........................;;.It's | 
| 5fc0 |  20 61 20 72 65 67 69 6f 6e 20 6f 66 20 74 65 78    74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .a.region.of.text............... | 
| 5fe0 |  20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 3a    74 65 78 74 20 70 72 6f 6d 70 74 73 29 0a 20 20  | .........(list.:text.prompts)... | 
| 6000 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 22 22 29 29 29 29 0a 20 20 20 20 20 20  | ...................""))))....... | 
| 6020 |  20 20 20 20 70 72 6f 6d 70 74 73 29 29 29 29 29    0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64  | ....prompts)))))..;;;###autoload | 
| 6040 |  0a 28 63 6c 2d 64 65 66 75 6e 20 67 70 74 65 6c    2d 6d 61 6b 65 2d 6b 61 67 69 0a 20 20 20 20 28  | .(cl-defun.gptel-make-kagi.....( | 
| 6060 |  6e 61 6d 65 20 26 6b 65 79 20 63 75 72 6c 2d 61    72 67 73 20 73 74 72 65 61 6d 20 6b 65 79 0a 20  | name.&key.curl-args.stream.key.. | 
| 6080 |  20 20 20 20 20 20 20 20 20 28 68 6f 73 74 20 22    6b 61 67 69 2e 63 6f 6d 22 29 0a 20 20 20 20 20  | .........(host."kagi.com")...... | 
| 60a0 |  20 20 20 20 20 28 68 65 61 64 65 72 20 28 6c 61    6d 62 64 61 20 28 29 20 60 28 28 22 41 75 74 68  | .....(header.(lambda.().`(("Auth | 
| 60c0 |  6f 72 69 7a 61 74 69 6f 6e 22 20 2e 20 2c 28 63    6f 6e 63 61 74 20 22 42 6f 74 20 22 20 28 67 70  | orization"...,(concat."Bot.".(gp | 
| 60e0 |  74 65 6c 2d 2d 67 65 74 2d 61 70 69 2d 6b 65 79    29 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20  | tel--get-api-key)))))).......... | 
| 6100 |  20 28 6d 6f 64 65 6c 73 20 27 28 22 66 61 73 74    67 70 74 22 0a 20 20 20 20 20 20 20 20 20 20 20  | .(models.'("fastgpt"............ | 
| 6120 |  20 20 20 20 20 20 20 20 20 22 73 75 6d 6d 61 72    69 7a 65 3a 63 65 63 69 6c 22 20 22 73 75 6d 6d  | ........."summarize:cecil"."summ | 
| 6140 |  61 72 69 7a 65 3a 61 67 6e 65 73 22 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | arize:agnes".................... | 
| 6160 |  20 22 73 75 6d 6d 61 72 69 7a 65 3a 64 61 70 68    6e 65 22 20 22 73 75 6d 6d 61 72 69 7a 65 3a 6d  | ."summarize:daphne"."summarize:m | 
| 6180 |  75 72 69 65 6c 22 29 29 0a 20 20 20 20 20 20 20    20 20 20 28 70 72 6f 74 6f 63 6f 6c 20 22 68 74  | uriel"))...........(protocol."ht | 
| 61a0 |  74 70 73 22 29 0a 20 20 20 20 20 20 20 20 20 20    28 65 6e 64 70 6f 69 6e 74 20 22 2f 61 70 69 2f  | tps")...........(endpoint."/api/ | 
| 61c0 |  76 30 2f 22 29 29 0a 20 20 22 52 65 67 69 73 74    65 72 20 61 20 4b 61 67 69 20 46 61 73 74 47 50  | v0/"))..."Register.a.Kagi.FastGP | 
| 61e0 |  54 20 62 61 63 6b 65 6e 64 20 66 6f 72 20 67 70    74 65 6c 20 77 69 74 68 20 4e 41 4d 45 2e 0a 0a  | T.backend.for.gptel.with.NAME... | 
| 6200 |  4b 65 79 77 6f 72 64 20 61 72 67 75 6d 65 6e 74    73 3a 0a 0a 43 55 52 4c 2d 41 52 47 53 20 28 6f  | Keyword.arguments:..CURL-ARGS.(o | 
| 6220 |  70 74 69 6f 6e 61 6c 29 20 69 73 20 61 20 6c 69    73 74 20 6f 66 20 61 64 64 69 74 69 6f 6e 61 6c  | ptional).is.a.list.of.additional | 
| 6240 |  20 43 75 72 6c 20 61 72 67 75 6d 65 6e 74 73 2e    0a 0a 48 4f 53 54 20 69 73 20 74 68 65 20 4b 61  | .Curl.arguments...HOST.is.the.Ka | 
| 6260 |  67 69 20 68 6f 73 74 20 28 77 69 74 68 20 70 6f    72 74 29 2c 20 64 65 66 61 75 6c 74 73 20 74 6f  | gi.host.(with.port),.defaults.to | 
| 6280 |  20 5c 22 6b 61 67 69 2e 63 6f 6d 5c 22 2e 0a 0a    4d 4f 44 45 4c 53 20 69 73 20 61 20 6c 69 73 74  | .\"kagi.com\"...MODELS.is.a.list | 
| 62a0 |  20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 4b 61    67 69 20 6d 6f 64 65 6c 73 3a 20 6f 6e 6c 79 20  | .of.available.Kagi.models:.only. | 
| 62c0 |  66 61 73 74 67 70 74 20 69 73 20 73 75 70 70 6f    72 74 65 64 2e 0a 0a 53 54 52 45 41 4d 20 69 73  | fastgpt.is.supported...STREAM.is | 
| 62e0 |  20 61 20 62 6f 6f 6c 65 61 6e 20 74 6f 20 74 6f    67 67 6c 65 20 73 74 72 65 61 6d 69 6e 67 20 72  | .a.boolean.to.toggle.streaming.r | 
| 6300 |  65 73 70 6f 6e 73 65 73 2c 20 64 65 66 61 75 6c    74 73 20 74 6f 0a 66 61 6c 73 65 2e 20 20 4b 61  | esponses,.defaults.to.false...Ka | 
| 6320 |  67 69 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70    6f 72 74 20 61 20 73 74 72 65 61 6d 69 6e 67 20  | gi.does.not.support.a.streaming. | 
| 6340 |  41 50 49 20 79 65 74 2e 0a 0a 50 52 4f 54 4f 43    4f 4c 20 28 6f 70 74 69 6f 6e 61 6c 29 20 73 70  | API.yet...PROTOCOL.(optional).sp | 
| 6360 |  65 63 69 66 69 65 73 20 74 68 65 20 70 72 6f 74    6f 63 6f 6c 2c 20 68 74 74 70 73 20 62 79 20 64  | ecifies.the.protocol,.https.by.d | 
| 6380 |  65 66 61 75 6c 74 2e 0a 0a 45 4e 44 50 4f 49 4e    54 20 28 6f 70 74 69 6f 6e 61 6c 29 20 69 73 20  | efault...ENDPOINT.(optional).is. | 
| 63a0 |  74 68 65 20 41 50 49 20 65 6e 64 70 6f 69 6e 74    20 66 6f 72 20 63 6f 6d 70 6c 65 74 69 6f 6e 73  | the.API.endpoint.for.completions | 
| 63c0 |  2c 20 64 65 66 61 75 6c 74 73 20 74 6f 0a 5c 22    2f 61 70 69 2f 76 30 2f 66 61 73 74 67 70 74 5c  | ,.defaults.to.\"/api/v0/fastgpt\ | 
| 63e0 |  22 2e 0a 0a 48 45 41 44 45 52 20 28 6f 70 74 69    6f 6e 61 6c 29 20 69 73 20 66 6f 72 20 61 64 64  | "...HEADER.(optional).is.for.add | 
| 6400 |  69 74 69 6f 6e 61 6c 20 68 65 61 64 65 72 73 20    74 6f 20 73 65 6e 64 20 77 69 74 68 20 65 61 63  | itional.headers.to.send.with.eac | 
| 6420 |  68 0a 72 65 71 75 65 73 74 2e 20 20 49 74 20 73    68 6f 75 6c 64 20 62 65 20 61 6e 20 61 6c 69 73  | h.request...It.should.be.an.alis | 
| 6440 |  74 20 6f 72 20 61 20 66 75 6e 63 74 69 6f 6e 20    74 68 61 74 20 72 65 74 75 6e 73 20 61 6e 0a 61  | t.or.a.function.that.retuns.an.a | 
| 6460 |  6c 69 73 74 2c 20 6c 69 6b 65 3a 0a 28 28 5c 22    43 6f 6e 74 65 6e 74 2d 54 79 70 65 5c 22 20 2e  | list,.like:.((\"Content-Type\".. | 
| 6480 |  20 5c 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a    73 6f 6e 5c 22 29 29 0a 0a 4b 45 59 20 28 6f 70  | .\"application/json\"))..KEY.(op | 
| 64a0 |  74 69 6f 6e 61 6c 29 20 69 73 20 61 20 76 61 72    69 61 62 6c 65 20 77 68 6f 73 65 20 76 61 6c 75  | tional).is.a.variable.whose.valu | 
| 64c0 |  65 20 69 73 20 74 68 65 20 41 50 49 20 6b 65 79    2c 20 6f 72 0a 66 75 6e 63 74 69 6f 6e 20 74 68  | e.is.the.API.key,.or.function.th | 
| 64e0 |  61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6b    65 79 2e 0a 0a 45 78 61 6d 70 6c 65 3a 0a 2d 2d  | at.returns.the.key...Example:.-- | 
| 6500 |  2d 2d 2d 2d 2d 0a 0a 28 67 70 74 65 6c 2d 6d 61    6b 65 2d 6b 61 67 69 20 5c 22 4b 61 67 69 5c 22  | -----..(gptel-make-kagi.\"Kagi\" | 
| 6520 |  20 3a 6b 65 79 20 6d 79 2d 6b 61 67 69 2d 6b 65    79 29 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28  | .:key.my-kagi-key)"...(declare.( | 
| 6540 |  69 6e 64 65 6e 74 20 31 29 29 0a 20 20 73 74 72    65 61 6d 20 20 20 20 20 20 20 20 20 20 20 20 20  | indent.1))...stream............. | 
| 6560 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3b 53 69 6c 65 6e 63 65 20 62 79 74 65  | ...................;Silence.byte | 
| 6580 |  2d 63 6f 6d 70 69 6c 65 72 0a 20 20 28 6c 65 74    20 28 28 62 61 63 6b 65 6e 64 20 28 67 70 74 65  | -compiler...(let.((backend.(gpte | 
| 65a0 |  6c 2d 2d 6d 61 6b 65 2d 6b 61 67 69 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a  | l--make-kagi...................: | 
| 65c0 |  63 75 72 6c 2d 61 72 67 73 20 63 75 72 6c 2d 61    72 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  | curl-args.curl-args............. | 
| 65e0 |  20 20 20 20 20 20 3a 6e 61 6d 65 20 6e 61 6d 65    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ......:name.name................ | 
| 6600 |  20 20 20 3a 68 6f 73 74 20 68 6f 73 74 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ...:host.host................... | 
| 6620 |  3a 68 65 61 64 65 72 20 68 65 61 64 65 72 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | :header.header.................. | 
| 6640 |  20 3a 6b 65 79 20 6b 65 79 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 3a 6d 6f 64  | .:key.key...................:mod | 
| 6660 |  65 6c 73 20 6d 6f 64 65 6c 73 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 3a 70 72  | els.models...................:pr | 
| 6680 |  6f 74 6f 63 6f 6c 20 70 72 6f 74 6f 63 6f 6c 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | otocol.protocol................. | 
| 66a0 |  20 20 3a 65 6e 64 70 6f 69 6e 74 20 65 6e 64 70    6f 69 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20  | ..:endpoint.endpoint............ | 
| 66c0 |  20 20 20 20 20 20 20 3a 75 72 6c 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c  | .......:url...................(l | 
| 66e0 |  61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f  | ambda.().....................(co | 
| 6700 |  6e 63 61 74 20 70 72 6f 74 6f 63 6f 6c 20 22 3a    2f 2f 22 20 68 6f 73 74 20 65 6e 64 70 6f 69 6e  | ncat.protocol."://".host.endpoin | 
| 6720 |  74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69  | t.............................(i | 
| 6740 |  66 20 28 65 71 75 61 6c 20 67 70 74 65 6c 2d 6d    6f 64 65 6c 20 22 66 61 73 74 67 70 74 22 29 0a  | f.(equal.gptel-model."fastgpt"). | 
| 6760 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 6780 |  22 66 61 73 74 67 70 74 22 20 22 73 75 6d 6d 61    72 69 7a 65 22 29 29 29 29 29 29 0a 20 20 20 20  | "fastgpt"."summarize"))))))..... | 
| 67a0 |  28 70 72 6f 67 31 20 62 61 63 6b 65 6e 64 0a 20    20 20 20 20 20 28 73 65 74 66 20 28 61 6c 69 73  | (prog1.backend.......(setf.(alis | 
| 67c0 |  74 2d 67 65 74 20 6e 61 6d 65 20 67 70 74 65 6c    2d 2d 6b 6e 6f 77 6e 2d 62 61 63 6b 65 6e 64 73  | t-get.name.gptel--known-backends | 
| 67e0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 6e 69 6c 20 6e 69 6c 20  | ........................nil.nil. | 
| 6800 |  23 27 65 71 75 61 6c 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b 65  | #'equal)...................backe | 
| 6820 |  6e 64 29 29 29 29 0a 0a 28 70 72 6f 76 69 64 65    20 27 67 70 74 65 6c 2d 6b 61 67 69 29 0a 3b 3b  | nd))))..(provide.'gptel-kagi).;; | 
| 6840 |  3b 20 67 70 74 65 6c 2d 6b 61 67 69 2e 65 6c 20    65 6e 64 73 20 68 65 72 65 0a 00 00 00 00 00 00  | ;.gptel-kagi.el.ends.here....... | 
| 6860 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6880 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 68a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 68c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 68e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6900 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6920 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6940 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6960 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6980 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 69a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 69c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 69e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6a00 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 63 75 72 6c 2e 65  | gptel-20240424.2306/gptel-curl.e | 
| 6a20 |  6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | l............................... | 
| 6a40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6a60 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 6a80 |  30 30 34 37 30 36 37 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 34 35 33 36 00 20 30 00 00 00  | 0047067.00000000000.014536..0... | 
| 6aa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6ac0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6ae0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6b00 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 6b20 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 6b40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6b60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6b80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6ba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6bc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6be0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6c00 |  3b 3b 3b 20 67 70 74 65 6c 2d 63 75 72 6c 2e 65    6c 20 2d 2d 2d 20 43 75 72 6c 20 73 75 70 70 6f  | ;;;.gptel-curl.el.---.Curl.suppo | 
| 6c20 |  72 74 20 66 6f 72 20 47 50 54 65 6c 20 20 20 20    20 20 20 20 20 2d 2a 2d 20 6c 65 78 69 63 61 6c  | rt.for.GPTel.........-*-.lexical | 
| 6c40 |  2d 62 69 6e 64 69 6e 67 3a 20 74 3b 20 2d 2a 2d    0a 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28  | -binding:.t;.-*-..;;.Copyright.( | 
| 6c60 |  43 29 20 32 30 32 33 20 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 0a 0a 3b 3b  | C).2023..Karthik.Chikmagalur..;; | 
| 6c80 |  20 41 75 74 68 6f 72 3a 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 3b 3b 20 3c  | .Author:.Karthik.Chikmagalur;;.< | 
| 6ca0 |  6b 61 72 74 68 69 6b 63 68 69 6b 6d 61 67 61 6c    75 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 3b 3b  | karthikchikmagalur@gmail.com>.;; | 
| 6cc0 |  20 4b 65 79 77 6f 72 64 73 3a 20 63 6f 6e 76 65    6e 69 65 6e 63 65 0a 0a 3b 3b 20 53 50 44 58 2d  | .Keywords:.convenience..;;.SPDX- | 
| 6ce0 |  4c 69 63 65 6e 73 65 2d 49 64 65 6e 74 69 66 69    65 72 3a 20 47 50 4c 2d 33 2e 30 2d 6f 72 2d 6c  | License-Identifier:.GPL-3.0-or-l | 
| 6d00 |  61 74 65 72 0a 0a 3b 3b 20 54 68 69 73 20 70 72    6f 67 72 61 6d 20 69 73 20 66 72 65 65 20 73 6f  | ater..;;.This.program.is.free.so | 
| 6d20 |  66 74 77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20    72 65 64 69 73 74 72 69 62 75 74 65 20 69 74 20  | ftware;.you.can.redistribute.it. | 
| 6d40 |  61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b    20 69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65  | and/or.modify.;;.it.under.the.te | 
| 6d60 |  72 6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 47    65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69  | rms.of.the.GNU.General.Public.Li | 
| 6d80 |  63 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68    65 64 20 62 79 0a 3b 3b 20 74 68 65 20 46 72 65  | cense.as.published.by.;;.the.Fre | 
| 6da0 |  65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64    61 74 69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65  | e.Software.Foundation,.either.ve | 
| 6dc0 |  72 73 69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c    69 63 65 6e 73 65 2c 20 6f 72 0a 3b 3b 20 28 61  | rsion.3.of.the.License,.or.;;.(a | 
| 6de0 |  74 20 79 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61    6e 79 20 6c 61 74 65 72 20 76 65 72 73 69 6f 6e  | t.your.option).any.later.version | 
| 6e00 |  2e 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72    61 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65  | ...;;.This.program.is.distribute | 
| 6e20 |  64 20 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68    61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73  | d.in.the.hope.that.it.will.be.us | 
| 6e40 |  65 66 75 6c 2c 0a 3b 3b 20 62 75 74 20 57 49 54    48 4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54  | eful,.;;.but.WITHOUT.ANY.WARRANT | 
| 6e60 |  59 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20    74 68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72  | Y;.without.even.the.implied.warr | 
| 6e80 |  61 6e 74 79 20 6f 66 0a 3b 3b 20 4d 45 52 43 48    41 4e 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49  | anty.of.;;.MERCHANTABILITY.or.FI | 
| 6ea0 |  54 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54    49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20  | TNESS.FOR.A.PARTICULAR.PURPOSE.. | 
| 6ec0 |  20 53 65 65 20 74 68 65 0a 3b 3b 20 47 4e 55 20    47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c  | .See.the.;;.GNU.General.Public.L | 
| 6ee0 |  69 63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20    64 65 74 61 69 6c 73 2e 0a 0a 3b 3b 20 59 6f 75  | icense.for.more.details...;;.You | 
| 6f00 |  20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63    65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20  | .should.have.received.a.copy.of. | 
| 6f20 |  74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20    50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b  | the.GNU.General.Public.License.; | 
| 6f40 |  3b 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69    73 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e  | ;.along.with.this.program...If.n | 
| 6f60 |  6f 74 2c 20 73 65 65 20 3c 68 74 74 70 73 3a 2f    2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63  | ot,.see.<https://www.gnu.org/lic | 
| 6f80 |  65 6e 73 65 73 2f 3e 2e 0a 0a 3b 3b 3b 20 43 6f    6d 6d 65 6e 74 61 72 79 3a 0a 0a 3b 3b 20 43 75  | enses/>...;;;.Commentary:..;;.Cu | 
| 6fa0 |  72 6c 20 73 75 70 70 6f 72 74 20 66 6f 72 20 47    50 54 65 6c 2e 20 20 55 74 69 6c 69 74 79 20 66  | rl.support.for.GPTel...Utility.f | 
| 6fc0 |  75 6e 63 74 69 6f 6e 73 2e 0a 0a 3b 3b 3b 20 43    6f 64 65 3a 0a 0a 28 72 65 71 75 69 72 65 20 27  | unctions...;;;.Code:..(require.' | 
| 6fe0 |  67 70 74 65 6c 29 0a 0a 28 65 76 61 6c 2d 77 68    65 6e 2d 63 6f 6d 70 69 6c 65 0a 20 20 28 72 65  | gptel)..(eval-when-compile...(re | 
| 7000 |  71 75 69 72 65 20 27 63 6c 2d 6c 69 62 29 0a 20    20 28 72 65 71 75 69 72 65 20 27 73 75 62 72 2d  | quire.'cl-lib)...(require.'subr- | 
| 7020 |  78 29 29 0a 28 72 65 71 75 69 72 65 20 27 6d 61    70 29 0a 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e  | x)).(require.'map)..(declare-fun | 
| 7040 |  63 74 69 6f 6e 20 6a 73 6f 6e 2d 72 65 61 64 20    22 6a 73 6f 6e 22 20 28 29 29 0a 28 64 65 66 76  | ction.json-read."json".()).(defv | 
| 7060 |  61 72 20 6a 73 6f 6e 2d 6f 62 6a 65 63 74 2d 74    79 70 65 29 0a 0a 28 64 65 63 6c 61 72 65 2d 66  | ar.json-object-type)..(declare-f | 
| 7080 |  75 6e 63 74 69 6f 6e 20 67 70 74 65 6c 2d 2d 73    74 72 65 61 6d 2d 63 6f 6e 76 65 72 74 2d 6d 61  | unction.gptel--stream-convert-ma | 
| 70a0 |  72 6b 64 6f 77 6e 2d 3e 6f 72 67 20 22 67 70 74    65 6c 2d 6f 72 67 22 29 0a 0a 28 64 65 66 63 6f  | rkdown->org."gptel-org")..(defco | 
| 70c0 |  6e 73 74 20 67 70 74 65 6c 2d 63 75 72 6c 2d 2d    63 6f 6d 6d 6f 6e 2d 61 72 67 73 0a 20 20 28 69  | nst.gptel-curl--common-args...(i | 
| 70e0 |  66 20 28 6d 65 6d 71 20 73 79 73 74 65 6d 2d 74    79 70 65 20 27 28 77 69 6e 64 6f 77 73 2d 6e 74  | f.(memq.system-type.'(windows-nt | 
| 7100 |  20 6d 73 2d 64 6f 73 29 29 0a 20 20 20 20 20 20    27 28 22 2d 2d 64 69 73 61 62 6c 65 22 20 22 2d  | .ms-dos)).......'("--disable"."- | 
| 7120 |  2d 6c 6f 63 61 74 69 6f 6e 22 20 22 2d 2d 73 69    6c 65 6e 74 22 20 22 2d 58 50 4f 53 54 22 0a 20  | -location"."--silent"."-XPOST".. | 
| 7140 |  20 20 20 20 20 20 20 22 2d 79 33 30 30 22 20 22    2d 59 31 22 20 22 2d 44 2d 22 29 0a 20 20 20 20  | ......."-y300"."-Y1"."-D-")..... | 
| 7160 |  27 28 22 2d 2d 64 69 73 61 62 6c 65 22 20 22 2d    2d 6c 6f 63 61 74 69 6f 6e 22 20 22 2d 2d 73 69  | '("--disable"."--location"."--si | 
| 7180 |  6c 65 6e 74 22 20 22 2d 2d 63 6f 6d 70 72 65 73    73 65 64 22 0a 20 20 20 20 20 20 22 2d 58 50 4f  | lent"."--compressed"......."-XPO | 
| 71a0 |  53 54 22 20 22 2d 79 33 30 30 22 20 22 2d 59 31    22 20 22 2d 44 2d 22 29 29 0a 20 20 22 41 72 67  | ST"."-y300"."-Y1"."-D-"))..."Arg | 
| 71c0 |  75 6d 65 6e 74 73 20 61 6c 77 61 79 73 20 70 61    73 73 65 64 20 74 6f 20 43 75 72 6c 20 66 6f 72  | uments.always.passed.to.Curl.for | 
| 71e0 |  20 67 70 74 65 6c 20 71 75 65 72 69 65 73 2e 22    29 0a 0a 28 64 65 66 76 61 72 20 67 70 74 65 6c  | .gptel.queries.")..(defvar.gptel | 
| 7200 |  2d 63 75 72 6c 2d 2d 70 72 6f 63 65 73 73 2d 61    6c 69 73 74 20 6e 69 6c 0a 20 20 22 41 6c 69 73  | -curl--process-alist.nil..."Alis | 
| 7220 |  74 20 6f 66 20 61 63 74 69 76 65 20 47 50 54 65    6c 20 63 75 72 6c 20 72 65 71 75 65 73 74 73 2e  | t.of.active.GPTel.curl.requests. | 
| 7240 |  22 29 0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c    2d 63 75 72 6c 2d 2d 67 65 74 2d 61 72 67 73 20  | ")..(defun.gptel-curl--get-args. | 
| 7260 |  28 64 61 74 61 20 74 6f 6b 65 6e 29 0a 20 20 22    50 72 6f 64 75 63 65 20 6c 69 73 74 20 6f 66 20  | (data.token)..."Produce.list.of. | 
| 7280 |  61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 63 61    6c 6c 69 6e 67 20 43 75 72 6c 2e 0a 0a 52 45 51  | arguments.for.calling.Curl...REQ | 
| 72a0 |  55 45 53 54 2d 44 41 54 41 20 69 73 20 74 68 65    20 64 61 74 61 20 74 6f 20 73 65 6e 64 2c 20 54  | UEST-DATA.is.the.data.to.send,.T | 
| 72c0 |  4f 4b 45 4e 20 69 73 20 61 20 75 6e 69 71 75 65    20 69 64 65 6e 74 69 66 69 65 72 2e 22 0a 20 20  | OKEN.is.a.unique.identifier."... | 
| 72e0 |  28 6c 65 74 2a 20 28 28 75 72 6c 20 28 6c 65 74    20 28 28 62 61 63 6b 65 6e 64 2d 75 72 6c 20 28  | (let*.((url.(let.((backend-url.( | 
| 7300 |  67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 2d 75 72    6c 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 29  | gptel-backend-url.gptel-backend) | 
| 7320 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 69 66 20 28 66 75 6e 63  | )).....................(if.(func | 
| 7340 |  74 69 6f 6e 70 20 62 61 63 6b 65 6e 64 2d 75 72    6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | tionp.backend-url).............. | 
| 7360 |  20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63    61 6c 6c 20 62 61 63 6b 65 6e 64 2d 75 72 6c 29  | ...........(funcall.backend-url) | 
| 7380 |  20 62 61 63 6b 65 6e 64 2d 75 72 6c 29 29 29 0a    20 20 20 20 20 20 20 20 20 28 64 61 74 61 2d 6a  | .backend-url)))..........(data-j | 
| 73a0 |  73 6f 6e 20 28 65 6e 63 6f 64 65 2d 63 6f 64 69    6e 67 2d 73 74 72 69 6e 67 20 28 67 70 74 65 6c  | son.(encode-coding-string.(gptel | 
| 73c0 |  2d 2d 6a 73 6f 6e 2d 65 6e 63 6f 64 65 20 64 61    74 61 29 20 27 75 74 66 2d 38 29 29 0a 20 20 20  | --json-encode.data).'utf-8)).... | 
| 73e0 |  20 20 20 20 20 20 28 68 65 61 64 65 72 73 0a 20    20 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64  | ......(headers...........(append | 
| 7400 |  20 27 28 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70    65 22 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f  | .'(("Content-Type"..."applicatio | 
| 7420 |  6e 2f 6a 73 6f 6e 22 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65  | n/json"))...................(whe | 
| 7440 |  6e 2d 6c 65 74 20 28 28 68 65 61 64 65 72 20 28    67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 2d 68 65  | n-let.((header.(gptel-backend-he | 
| 7460 |  61 64 65 72 20 67 70 74 65 6c 2d 62 61 63 6b 65    6e 64 29 29 29 0a 20 20 20 20 20 20 20 20 20 20  | ader.gptel-backend)))........... | 
| 7480 |  20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 66    75 6e 63 74 69 6f 6e 70 20 68 65 61 64 65 72 29  | ..........(if.(functionp.header) | 
| 74a0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c  | .........................(funcal | 
| 74c0 |  6c 20 68 65 61 64 65 72 29 20 68 65 61 64 65 72    29 29 29 29 29 0a 20 20 20 20 28 77 68 65 6e 20  | l.header).header))))).....(when. | 
| 74e0 |  67 70 74 65 6c 2d 6c 6f 67 2d 6c 65 76 65 6c 0a    20 20 20 20 20 20 28 77 68 65 6e 20 28 65 71 20  | gptel-log-level.......(when.(eq. | 
| 7500 |  67 70 74 65 6c 2d 6c 6f 67 2d 6c 65 76 65 6c 20    27 64 65 62 75 67 29 0a 20 20 20 20 20 20 20 20  | gptel-log-level.'debug)......... | 
| 7520 |  28 67 70 74 65 6c 2d 2d 6c 6f 67 20 28 67 70 74    65 6c 2d 2d 6a 73 6f 6e 2d 65 6e 63 6f 64 65 0a  | (gptel--log.(gptel--json-encode. | 
| 7540 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 6d 61 70 63 61 72 20 28 6c 61  | .....................(mapcar.(la | 
| 7560 |  6d 62 64 61 20 28 70 61 69 72 29 20 28 63 6f 6e    73 20 28 69 6e 74 65 72 6e 20 28 63 61 72 20 70  | mbda.(pair).(cons.(intern.(car.p | 
| 7580 |  61 69 72 29 29 20 28 63 64 72 20 70 61 69 72 29    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | air)).(cdr.pair))).............. | 
| 75a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    68 65 61 64 65 72 73 29 29 0a 20 20 20 20 20 20  | ................headers))....... | 
| 75c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72    65 71 75 65 73 74 20 68 65 61 64 65 72 73 22 29  | .............."request.headers") | 
| 75e0 |  29 0a 20 20 20 20 20 20 28 67 70 74 65 6c 2d 2d    6c 6f 67 20 64 61 74 61 2d 6a 73 6f 6e 20 22 72  | ).......(gptel--log.data-json."r | 
| 7600 |  65 71 75 65 73 74 20 62 6f 64 79 22 29 29 0a 20    20 20 20 28 61 70 70 65 6e 64 0a 20 20 20 20 20  | equest.body")).....(append...... | 
| 7620 |  67 70 74 65 6c 2d 63 75 72 6c 2d 2d 63 6f 6d 6d    6f 6e 2d 61 72 67 73 0a 20 20 20 20 20 28 67 70  | gptel-curl--common-args......(gp | 
| 7640 |  74 65 6c 2d 62 61 63 6b 65 6e 64 2d 63 75 72 6c    2d 61 72 67 73 20 67 70 74 65 6c 2d 62 61 63 6b  | tel-backend-curl-args.gptel-back | 
| 7660 |  65 6e 64 29 0a 20 20 20 20 20 28 6c 69 73 74 20    28 66 6f 72 6d 61 74 20 22 2d 77 28 25 73 20 2e  | end)......(list.(format."-w(%s.. | 
| 7680 |  20 25 25 7b 73 69 7a 65 5f 68 65 61 64 65 72 7d    29 22 20 74 6f 6b 65 6e 29 29 0a 20 20 20 20 20  | .%%{size_header})".token))...... | 
| 76a0 |  28 69 66 20 28 6c 65 6e 67 74 68 3c 20 64 61 74    61 2d 6a 73 6f 6e 20 67 70 74 65 6c 2d 63 75 72  | (if.(length<.data-json.gptel-cur | 
| 76c0 |  6c 2d 66 69 6c 65 2d 73 69 7a 65 2d 74 68 72 65    73 68 6f 6c 64 29 0a 20 20 20 20 20 20 20 20 20  | l-file-size-threshold).......... | 
| 76e0 |  28 6c 69 73 74 20 28 66 6f 72 6d 61 74 20 22 2d    64 25 73 22 20 64 61 74 61 2d 6a 73 6f 6e 29 29  | (list.(format."-d%s".data-json)) | 
| 7700 |  0a 20 20 20 20 20 20 20 28 6c 65 74 72 65 63 0a    20 20 20 20 20 20 20 20 20 20 20 28 28 74 65 6d  | ........(letrec............((tem | 
| 7720 |  70 2d 66 69 6c 65 6e 61 6d 65 20 28 6d 61 6b 65    2d 74 65 6d 70 2d 66 69 6c 65 20 22 67 70 74 65  | p-filename.(make-temp-file."gpte | 
| 7740 |  6c 2d 63 75 72 6c 2d 64 61 74 61 22 20 6e 69 6c    20 22 2e 6a 73 6f 6e 22 20 64 61 74 61 2d 6a 73  | l-curl-data".nil.".json".data-js | 
| 7760 |  6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 28 63 6c 65 61 6e 75 70 2d 66 6e 20 28 6c 61  | on)).............(cleanup-fn.(la | 
| 7780 |  6d 62 64 61 20 28 26 72 65 73 74 20 5f 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | mbda.(&rest._).................. | 
| 77a0 |  20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28    66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 74 65  | .........(when.(file-exists-p.te | 
| 77c0 |  6d 70 2d 66 69 6c 65 6e 61 6d 65 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | mp-filename).................... | 
| 77e0 |  20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65    2d 66 69 6c 65 20 74 65 6d 70 2d 66 69 6c 65 6e  | .........(delete-file.temp-filen | 
| 7800 |  61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ame)............................ | 
| 7820 |  20 28 72 65 6d 6f 76 65 2d 68 6f 6f 6b 20 27 67    70 74 65 6c 2d 70 6f 73 74 2d 72 65 73 70 6f 6e  | .(remove-hook.'gptel-post-respon | 
| 7840 |  73 65 2d 66 75 6e 63 74 69 6f 6e 73 20 63 6c 65    61 6e 75 70 2d 66 6e 29 29 29 29 29 0a 20 20 20  | se-functions.cleanup-fn))))).... | 
| 7860 |  20 20 20 20 20 20 28 61 64 64 2d 68 6f 6f 6b 20    27 67 70 74 65 6c 2d 70 6f 73 74 2d 72 65 73 70  | ......(add-hook.'gptel-post-resp | 
| 7880 |  6f 6e 73 65 2d 66 75 6e 63 74 69 6f 6e 73 20 63    6c 65 61 6e 75 70 2d 66 6e 29 0a 20 20 20 20 20  | onse-functions.cleanup-fn)...... | 
| 78a0 |  20 20 20 20 28 6c 69 73 74 20 22 2d 2d 64 61 74    61 2d 62 69 6e 61 72 79 22 0a 20 20 20 20 20 20  | ....(list."--data-binary"....... | 
| 78c0 |  20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74    20 22 40 25 73 22 20 74 65 6d 70 2d 66 69 6c 65  | .........(format."@%s".temp-file | 
| 78e0 |  6e 61 6d 65 29 29 29 29 0a 20 20 20 20 20 28 77    68 65 6e 20 28 6e 6f 74 20 28 73 74 72 69 6e 67  | name))))......(when.(not.(string | 
| 7900 |  2d 65 6d 70 74 79 2d 70 20 67 70 74 65 6c 2d 70    72 6f 78 79 29 29 0a 20 20 20 20 20 20 20 28 6c  | -empty-p.gptel-proxy))........(l | 
| 7920 |  69 73 74 20 22 2d 2d 70 72 6f 78 79 22 20 67 70    74 65 6c 2d 70 72 6f 78 79 0a 20 20 20 20 20 20  | ist."--proxy".gptel-proxy....... | 
| 7940 |  20 20 20 20 20 20 20 22 2d 2d 70 72 6f 78 79 2d    6e 65 67 6f 74 69 61 74 65 22 0a 20 20 20 20 20  | ......."--proxy-negotiate"...... | 
| 7960 |  20 20 20 20 20 20 20 20 22 2d 2d 70 72 6f 78 79    2d 75 73 65 72 22 20 22 3a 22 29 29 0a 20 20 20  | ........"--proxy-user".":")).... | 
| 7980 |  20 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 28    6b 65 79 20 2e 20 76 61 6c 29 20 69 6e 20 68 65  | ..(cl-loop.for.(key...val).in.he | 
| 79a0 |  61 64 65 72 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 63 6f 6c 6c 65 63 74 20 28 66 6f 72  | aders...............collect.(for | 
| 79c0 |  6d 61 74 20 22 2d 48 25 73 3a 20 25 73 22 20 6b    65 79 20 76 61 6c 29 29 0a 20 20 20 20 20 28 6c  | mat."-H%s:.%s".key.val))......(l | 
| 79e0 |  69 73 74 20 75 72 6c 29 29 29 29 0a 0a 3b 3b 54    4f 44 4f 3a 20 54 68 65 20 3a 74 72 61 6e 73 66  | ist.url))))..;;TODO:.The.:transf | 
| 7a00 |  6f 72 6d 65 72 20 61 72 67 75 6d 65 6e 74 20 68    65 72 65 20 69 73 20 61 6e 20 61 6c 74 65 72 6e  | ormer.argument.here.is.an.altern | 
| 7a20 |  61 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69    6f 6e 20 6f 66 0a 3b 3b 60 67 70 74 65 6c 2d 72  | ate.implementation.of.;;`gptel-r | 
| 7a40 |  65 73 70 6f 6e 73 65 2d 66 69 6c 74 65 72 2d 66    75 6e 63 74 69 6f 6e 73 27 2e 20 54 68 65 20 74  | esponse-filter-functions'..The.t | 
| 7a60 |  77 6f 20 6e 65 65 64 20 74 6f 20 62 65 20 75 6e    69 66 69 65 64 2e 0a 3b 3b 3b 23 23 23 61 75 74  | wo.need.to.be.unified..;;;###aut | 
| 7a80 |  6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 67 70 74    65 6c 2d 63 75 72 6c 2d 67 65 74 2d 72 65 73 70  | oload.(defun.gptel-curl-get-resp | 
| 7aa0 |  6f 6e 73 65 20 28 69 6e 66 6f 20 26 6f 70 74 69    6f 6e 61 6c 20 63 61 6c 6c 62 61 63 6b 29 0a 20  | onse.(info.&optional.callback).. | 
| 7ac0 |  20 22 52 65 74 72 69 65 76 65 20 72 65 73 70 6f    6e 73 65 20 74 6f 20 70 72 6f 6d 70 74 20 69 6e  | ."Retrieve.response.to.prompt.in | 
| 7ae0 |  20 49 4e 46 4f 2e 0a 0a 49 4e 46 4f 20 69 73 20    61 20 70 6c 69 73 74 20 77 69 74 68 20 74 68 65  | .INFO...INFO.is.a.plist.with.the | 
| 7b00 |  20 66 6f 6c 6c 6f 77 69 6e 67 20 6b 65 79 73 3a    0a 2d 20 3a 64 61 74 61 20 28 74 68 65 20 64 61  | .following.keys:.-.:data.(the.da | 
| 7b20 |  74 61 20 62 65 69 6e 67 20 73 65 6e 74 29 0a 2d    20 3a 62 75 66 66 65 72 20 28 74 68 65 20 67 70  | ta.being.sent).-.:buffer.(the.gp | 
| 7b40 |  74 65 6c 20 62 75 66 66 65 72 29 0a 2d 20 3a 70    6f 73 69 74 69 6f 6e 20 28 6d 61 72 6b 65 72 20  | tel.buffer).-.:position.(marker. | 
| 7b60 |  61 74 20 77 68 69 63 68 20 74 6f 20 69 6e 73 65    72 74 20 74 68 65 20 72 65 73 70 6f 6e 73 65 29  | at.which.to.insert.the.response) | 
| 7b80 |  2e 0a 0a 43 61 6c 6c 20 43 41 4c 4c 42 41 43 4b    20 77 69 74 68 20 74 68 65 20 72 65 73 70 6f 6e  | ...Call.CALLBACK.with.the.respon | 
| 7ba0 |  73 65 20 61 6e 64 20 49 4e 46 4f 20 61 66 74 65    72 77 61 72 64 73 2e 20 20 49 66 20 6f 6d 69 74  | se.and.INFO.afterwards...If.omit | 
| 7bc0 |  74 65 64 0a 74 68 65 20 72 65 73 70 6f 6e 73 65    20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74  | ted.the.response.is.inserted.int | 
| 7be0 |  6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75    66 66 65 72 20 61 66 74 65 72 20 70 6f 69 6e 74  | o.the.current.buffer.after.point | 
| 7c00 |  2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 74 6f 6b    65 6e 20 28 6d 64 35 20 28 66 6f 72 6d 61 74 20  | ."...(let*.((token.(md5.(format. | 
| 7c20 |  22 25 73 25 73 25 73 25 73 22 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | "%s%s%s%s"...................... | 
| 7c40 |  20 20 20 20 20 20 20 20 28 72 61 6e 64 6f 6d 29    20 28 65 6d 61 63 73 2d 70 69 64 29 20 28 75 73  | ........(random).(emacs-pid).(us | 
| 7c60 |  65 72 2d 66 75 6c 6c 2d 6e 61 6d 65 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | er-full-name)................... | 
| 7c80 |  20 20 20 20 20 20 20 20 20 20 20 28 72 65 63 65    6e 74 2d 6b 65 79 73 29 29 29 29 0a 20 20 20 20  | ...........(recent-keys))))..... | 
| 7ca0 |  20 20 20 20 20 28 61 72 67 73 20 28 67 70 74 65    6c 2d 63 75 72 6c 2d 2d 67 65 74 2d 61 72 67 73  | .....(args.(gptel-curl--get-args | 
| 7cc0 |  20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e 66 6f    20 3a 64 61 74 61 29 20 74 6f 6b 65 6e 29 29 0a  | .(plist-get.info.:data).token)). | 
| 7ce0 |  20 20 20 20 20 20 20 20 20 28 73 74 72 65 61 6d    20 28 61 6e 64 20 67 70 74 65 6c 2d 73 74 72 65  | .........(stream.(and.gptel-stre | 
| 7d00 |  61 6d 20 28 67 70 74 65 6c 2d 62 61 63 6b 65 6e    64 2d 73 74 72 65 61 6d 20 67 70 74 65 6c 2d 62  | am.(gptel-backend-stream.gptel-b | 
| 7d20 |  61 63 6b 65 6e 64 29 29 29 0a 20 20 20 20 20 20    20 20 20 28 70 72 6f 63 65 73 73 20 28 61 70 70  | ackend)))..........(process.(app | 
| 7d40 |  6c 79 20 23 27 73 74 61 72 74 2d 70 72 6f 63 65    73 73 20 22 67 70 74 65 6c 2d 63 75 72 6c 22 0a  | ly.#'start-process."gptel-curl". | 
| 7d60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 67 65 6e 65 72 61  | .........................(genera | 
| 7d80 |  74 65 2d 6e 65 77 2d 62 75 66 66 65 72 20 22 2a    67 70 74 65 6c 2d 63 75 72 6c 2a 22 29 20 22 63  | te-new-buffer."*gptel-curl*")."c | 
| 7da0 |  75 72 6c 22 20 61 72 67 73 29 29 29 0a 20 20 20    20 28 77 68 65 6e 20 28 65 71 20 67 70 74 65 6c  | url".args))).....(when.(eq.gptel | 
| 7dc0 |  2d 6c 6f 67 2d 6c 65 76 65 6c 20 27 64 65 62 75    67 29 0a 20 20 20 20 20 20 28 67 70 74 65 6c 2d  | -log-level.'debug).......(gptel- | 
| 7de0 |  2d 6c 6f 67 20 28 6d 61 70 63 6f 6e 63 61 74 20    23 27 73 68 65 6c 6c 2d 71 75 6f 74 65 2d 61 72  | -log.(mapconcat.#'shell-quote-ar | 
| 7e00 |  67 75 6d 65 6e 74 20 28 63 6f 6e 73 20 22 63 75    72 6c 22 20 61 72 67 73 29 20 22 20 5c 5c 5c 6e  | gument.(cons."curl".args).".\\\n | 
| 7e20 |  22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 22 72 65 71 75 65 73 74 20 43 75  | ")..................."request.Cu | 
| 7e40 |  72 6c 20 63 6f 6d 6d 61 6e 64 22 20 27 6e 6f 2d    6a 73 6f 6e 29 29 0a 20 20 20 20 28 77 69 74 68  | rl.command".'no-json)).....(with | 
| 7e60 |  2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20    28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20  | -current-buffer.(process-buffer. | 
| 7e80 |  70 72 6f 63 65 73 73 29 0a 20 20 20 20 20 20 28    73 65 74 2d 70 72 6f 63 65 73 73 2d 71 75 65 72  | process).......(set-process-quer | 
| 7ea0 |  79 2d 6f 6e 2d 65 78 69 74 2d 66 6c 61 67 20 70    72 6f 63 65 73 73 20 6e 69 6c 29 0a 20 20 20 20  | y-on-exit-flag.process.nil)..... | 
| 7ec0 |  20 20 28 73 65 74 66 20 28 61 6c 69 73 74 2d 67    65 74 20 70 72 6f 63 65 73 73 20 67 70 74 65 6c  | ..(setf.(alist-get.process.gptel | 
| 7ee0 |  2d 63 75 72 6c 2d 2d 70 72 6f 63 65 73 73 2d 61    6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20  | -curl--process-alist)........... | 
| 7f00 |  20 20 28 6e 63 6f 6e 63 20 28 6c 69 73 74 20 3a    74 6f 6b 65 6e 20 74 6f 6b 65 6e 0a 20 20 20 20  | ..(nconc.(list.:token.token..... | 
| 7f20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 3b 3b 20 46 49 58 4d 45 20 60 61  | .....................;;.FIXME.`a | 
| 7f40 |  72 65 66 27 20 62 72 65 61 6b 73 20 60 63 6c 2d    73 74 72 75 63 74 27 20 61 62 73 74 72 61 63 74  | ref'.breaks.`cl-struct'.abstract | 
| 7f60 |  69 6f 6e 20 62 6f 75 6e 64 61 72 79 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ion.boundary.................... | 
| 7f80 |  20 20 20 20 20 20 3b 3b 20 46 49 58 4d 45 20 60    63 6c 2d 2d 67 65 6e 65 72 69 63 2d 6d 65 74 68  | ......;;.FIXME.`cl--generic-meth | 
| 7fa0 |  6f 64 27 20 69 73 20 61 6e 20 69 6e 74 65 72 6e    61 6c 20 60 63 6c 2d 73 74 72 75 63 74 27 0a 20  | od'.is.an.internal.`cl-struct'.. | 
| 7fc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3a 70 61 72 73 65 72 20  | ........................:parser. | 
| 7fe0 |  28 63 6c 2d 2d 67 65 6e 65 72 69 63 2d 6d 65 74    68 6f 64 2d 66 75 6e 63 74 69 6f 6e 0a 20 20 20  | (cl--generic-method-function.... | 
| 8000 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | ...............................( | 
| 8020 |  69 66 20 73 74 72 65 61 6d 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | if.stream....................... | 
| 8040 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 63 6c 2d 66 69 6e 64 2d 6d 65 74 68 6f 64 0a  | ................(cl-find-method. | 
| 8060 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 8080 |  20 20 20 20 20 20 20 27 67 70 74 65 6c 2d 63 75    72 6c 2d 2d 70 61 72 73 65 2d 73 74 72 65 61 6d  | .......'gptel-curl--parse-stream | 
| 80a0 |  20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .nil............................ | 
| 80c0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73    74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ............(list............... | 
| 80e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 61 72 65 66 20  | ..........................(aref. | 
| 8100 |  28 62 75 66 66 65 72 2d 6c 6f 63 61 6c 2d 76 61    6c 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  | (buffer-local-value............. | 
| 8120 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 8140 |  20 20 20 27 67 70 74 65 6c 2d 62 61 63 6b 65 6e    64 20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e 66  | ...'gptel-backend.(plist-get.inf | 
| 8160 |  6f 20 3a 62 75 66 66 65 72 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | o.:buffer))..................... | 
| 8180 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 30 29 20 74 29 29  | ..........................0).t)) | 
| 81a0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 81c0 |  20 20 20 20 20 28 63 6c 2d 66 69 6e 64 2d 6d 65    74 68 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20  | .....(cl-find-method............ | 
| 81e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 27 67 70 74 65 6c  | ..........................'gptel | 
| 8200 |  2d 2d 70 61 72 73 65 2d 72 65 73 70 6f 6e 73 65    20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20 20 20  | --parse-response.nil............ | 
| 8220 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 0a  | ..........................(list. | 
| 8240 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 8260 |  20 20 20 20 20 20 28 61 72 65 66 20 28 62 75 66    66 65 72 2d 6c 6f 63 61 6c 2d 76 61 6c 75 65 0a  | ......(aref.(buffer-local-value. | 
| 8280 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 82a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 27 67 70    74 65 6c 2d 62 61 63 6b 65 6e 64 20 28 70 6c 69  | .............'gptel-backend.(pli | 
| 82c0 |  73 74 2d 67 65 74 20 69 6e 66 6f 20 3a 62 75 66    66 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20  | st-get.info.:buffer))........... | 
| 82e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 8300 |  20 20 30 29 20 74 20 74 29 29 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..0).t.t)))).................... | 
| 8320 |  20 20 20 20 20 20 3a 63 61 6c 6c 62 61 63 6b 20    28 6f 72 20 63 61 6c 6c 62 61 63 6b 0a 20 20 20  | ......:callback.(or.callback.... | 
| 8340 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 8360 |  20 20 20 20 28 69 66 20 73 74 72 65 61 6d 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ....(if.stream.................. | 
| 8380 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 23 27 67 70 74 65  | ..........................#'gpte | 
| 83a0 |  6c 2d 63 75 72 6c 2d 2d 73 74 72 65 61 6d 2d 69    6e 73 65 72 74 2d 72 65 73 70 6f 6e 73 65 0a 20  | l-curl--stream-insert-response.. | 
| 83c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 83e0 |  20 20 20 20 20 20 20 20 23 27 67 70 74 65 6c 2d    2d 69 6e 73 65 72 74 2d 72 65 73 70 6f 6e 73 65  | ........#'gptel--insert-response | 
| 8400 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 3a 74 72 61  | ))..........................:tra | 
| 8420 |  6e 73 66 6f 72 6d 65 72 20 28 77 68 65 6e 20 28    65 71 20 28 62 75 66 66 65 72 2d 6c 6f 63 61 6c  | nsformer.(when.(eq.(buffer-local | 
| 8440 |  2d 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -value.......................... | 
| 8460 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 27 6d 61 6a 6f 72 2d 6d  | ........................'major-m | 
| 8480 |  6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ode............................. | 
| 84a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 70 6c 69 73 74 2d 67 65 74 20  | .....................(plist-get. | 
| 84c0 |  69 6e 66 6f 20 3a 62 75 66 66 65 72 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | info.:buffer)).................. | 
| 84e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27  | ...............................' | 
| 8500 |  6f 72 67 2d 6d 6f 64 65 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | org-mode)....................... | 
| 8520 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 67 70 74 65 6c 2d 2d 73 74 72 65 61 6d  | ..................(gptel--stream | 
| 8540 |  2d 63 6f 6e 76 65 72 74 2d 6d 61 72 6b 64 6f 77    6e 2d 3e 6f 72 67 29 29 29 0a 20 20 20 20 20 20  | -convert-markdown->org)))....... | 
| 8560 |  20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 66    6f 29 29 0a 20 20 20 20 20 20 28 69 66 20 73 74  | .............info)).......(if.st | 
| 8580 |  72 65 61 6d 0a 20 20 20 20 20 20 20 20 20 20 28    70 72 6f 67 6e 20 28 73 65 74 2d 70 72 6f 63 65  | ream...........(progn.(set-proce | 
| 85a0 |  73 73 2d 73 65 6e 74 69 6e 65 6c 20 70 72 6f 63    65 73 73 20 23 27 67 70 74 65 6c 2d 63 75 72 6c  | ss-sentinel.process.#'gptel-curl | 
| 85c0 |  2d 2d 73 74 72 65 61 6d 2d 63 6c 65 61 6e 75 70    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | --stream-cleanup)............... | 
| 85e0 |  20 20 20 28 73 65 74 2d 70 72 6f 63 65 73 73 2d    66 69 6c 74 65 72 20 70 72 6f 63 65 73 73 20 23  | ...(set-process-filter.process.# | 
| 8600 |  27 67 70 74 65 6c 2d 63 75 72 6c 2d 2d 73 74 72    65 61 6d 2d 66 69 6c 74 65 72 29 29 0a 20 20 20  | 'gptel-curl--stream-filter)).... | 
| 8620 |  20 20 20 20 20 28 73 65 74 2d 70 72 6f 63 65 73    73 2d 73 65 6e 74 69 6e 65 6c 20 70 72 6f 63 65  | .....(set-process-sentinel.proce | 
| 8640 |  73 73 20 23 27 67 70 74 65 6c 2d 63 75 72 6c 2d    2d 73 65 6e 74 69 6e 65 6c 29 29 29 29 29 0a 0a  | ss.#'gptel-curl--sentinel))))).. | 
| 8660 |  28 64 65 66 75 6e 20 67 70 74 65 6c 2d 63 75 72    6c 2d 2d 6c 6f 67 2d 72 65 73 70 6f 6e 73 65 20  | (defun.gptel-curl--log-response. | 
| 8680 |  28 70 72 6f 63 2d 62 75 66 20 70 72 6f 63 2d 69    6e 66 6f 29 0a 20 20 22 50 61 72 73 65 20 72 65  | (proc-buf.proc-info)..."Parse.re | 
| 86a0 |  73 70 6f 6e 73 65 20 62 75 66 66 65 72 20 50 52    4f 43 2d 42 55 46 20 61 6e 64 20 6c 6f 67 20 72  | sponse.buffer.PROC-BUF.and.log.r | 
| 86c0 |  65 73 70 6f 6e 73 65 2e 0a 0a 50 52 4f 43 2d 49    4e 46 4f 20 69 73 20 74 68 65 20 70 6c 69 73 74  | esponse...PROC-INFO.is.the.plist | 
| 86e0 |  20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 72 6f 63    65 73 73 20 6d 65 74 61 64 61 74 61 2e 22 0a 20  | .containing.process.metadata.".. | 
| 8700 |  20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62    75 66 66 65 72 20 70 72 6f 63 2d 62 75 66 0a 20  | .(with-current-buffer.proc-buf.. | 
| 8720 |  20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69    6f 6e 0a 20 20 20 20 20 20 28 67 6f 74 6f 2d 63  | ...(save-excursion.......(goto-c | 
| 8740 |  68 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29    0a 20 20 20 20 20 20 28 77 68 65 6e 20 28 72 65  | har.(point-min)).......(when.(re | 
| 8760 |  2d 73 65 61 72 63 68 2d 66 6f 72 77 61 72 64 20    22 0d 3f 5c 6e 0d 3f 5c 6e 22 20 6e 69 6c 20 74  | -search-forward.".?\n.?\n".nil.t | 
| 8780 |  29 0a 20 20 20 20 20 20 20 20 28 77 68 65 6e 20    28 65 71 20 67 70 74 65 6c 2d 6c 6f 67 2d 6c 65  | ).........(when.(eq.gptel-log-le | 
| 87a0 |  76 65 6c 20 27 64 65 62 75 67 29 0a 20 20 20 20    20 20 20 20 20 20 28 67 70 74 65 6c 2d 2d 6c 6f  | vel.'debug)...........(gptel--lo | 
| 87c0 |  67 20 28 67 70 74 65 6c 2d 2d 6a 73 6f 6e 2d 65    6e 63 6f 64 65 0a 20 20 20 20 20 20 20 20 20 20  | g.(gptel--json-encode........... | 
| 87e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 75    66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 2d 6e  | .............(buffer-substring-n | 
| 8800 |  6f 2d 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | o-properties.................... | 
| 8820 |  20 20 20 20 20 28 70 6f 69 6e 74 2d 6d 69 6e 29    20 28 31 2d 20 28 70 6f 69 6e 74 29 29 29 29 0a  | .....(point-min).(1-.(point)))). | 
| 8840 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 22 72 65 73 70 6f 6e 73 65 20  | ......................"response. | 
| 8860 |  68 65 61 64 65 72 73 22 29 29 0a 20 20 20 20 20    20 20 20 28 6c 65 74 20 28 28 70 20 28 70 6f 69  | headers")).........(let.((p.(poi | 
| 8880 |  6e 74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    28 77 68 65 6e 20 28 73 65 61 72 63 68 2d 66 6f  | nt)))...........(when.(search-fo | 
| 88a0 |  72 77 61 72 64 20 28 70 6c 69 73 74 2d 67 65 74    20 70 72 6f 63 2d 69 6e 66 6f 20 3a 74 6f 6b 65  | rward.(plist-get.proc-info.:toke | 
| 88c0 |  6e 29 20 6e 69 6c 20 74 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72  | n).nil.t).............(goto-char | 
| 88e0 |  20 28 31 2d 20 28 6d 61 74 63 68 2d 62 65 67 69    6e 6e 69 6e 67 20 30 29 29 29 0a 20 20 20 20 20  | .(1-.(match-beginning.0)))...... | 
| 8900 |  20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 2d 6c    6f 67 20 28 62 75 66 66 65 72 2d 73 75 62 73 74  | .......(gptel--log.(buffer-subst | 
| 8920 |  72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69    65 73 20 70 20 28 70 6f 69 6e 74 29 29 0a 20 20  | ring-no-properties.p.(point))... | 
| 8940 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 22 72 65 73 70 6f 6e 73 65 20  | ......................"response. | 
| 8960 |  62 6f 64 79 22 29 29 29 29 29 29 29 0a 0a 28 64    65 66 75 6e 20 67 70 74 65 6c 2d 61 62 6f 72 74  | body")))))))..(defun.gptel-abort | 
| 8980 |  20 28 62 75 66 29 0a 20 20 22 53 74 6f 70 20 61    6e 79 20 61 63 74 69 76 65 20 67 70 74 65 6c 20  | .(buf)..."Stop.any.active.gptel. | 
| 89a0 |  70 72 6f 63 65 73 73 20 61 73 73 6f 63 69 61 74    65 64 20 77 69 74 68 20 62 75 66 66 65 72 20 42  | process.associated.with.buffer.B | 
| 89c0 |  55 46 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74    69 76 65 20 28 6c 69 73 74 20 28 63 75 72 72 65  | UF."...(interactive.(list.(curre | 
| 89e0 |  6e 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 28    75 6e 6c 65 73 73 20 67 70 74 65 6c 2d 75 73 65  | nt-buffer)))...(unless.gptel-use | 
| 8a00 |  2d 63 75 72 6c 0a 20 20 20 20 28 75 73 65 72 2d    65 72 72 6f 72 20 22 43 61 6e 6e 6f 74 20 73 74  | -curl.....(user-error."Cannot.st | 
| 8a20 |  6f 70 20 61 20 60 75 72 6c 2d 72 65 74 72 69 65    76 65 27 20 72 65 71 75 65 73 74 21 22 29 29 0a  | op.a.`url-retrieve'.request!")). | 
| 8a40 |  20 20 28 69 66 2d 6c 65 74 2a 20 28 28 70 72 6f    63 2d 61 74 74 72 73 0a 20 20 20 20 20 20 20 20  | ..(if-let*.((proc-attrs......... | 
| 8a60 |  20 20 20 20 28 63 6c 2d 66 69 6e 64 2d 69 66 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61  | ....(cl-find-if..............(la | 
| 8a80 |  6d 62 64 61 20 28 70 72 6f 63 2d 6c 69 73 74 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | mbda.(proc-list)................ | 
| 8aa0 |  28 65 71 20 28 70 6c 69 73 74 2d 67 65 74 20 28    63 64 72 20 70 72 6f 63 2d 6c 69 73 74 29 20 3a  | (eq.(plist-get.(cdr.proc-list).: | 
| 8ac0 |  62 75 66 66 65 72 29 20 62 75 66 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 67 70 74 65 6c  | buffer).buf))..............gptel | 
| 8ae0 |  2d 63 75 72 6c 2d 2d 70 72 6f 63 65 73 73 2d 61    6c 69 73 74 29 29 0a 20 20 20 20 20 20 20 20 20  | -curl--process-alist)).......... | 
| 8b00 |  20 20 20 28 70 72 6f 63 20 28 63 61 72 20 70 72    6f 63 2d 61 74 74 72 73 29 29 29 0a 20 20 20 20  | ...(proc.(car.proc-attrs)))..... | 
| 8b20 |  20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 20 20    20 28 73 65 74 66 20 28 61 6c 69 73 74 2d 67 65  | ..(progn.........(setf.(alist-ge | 
| 8b40 |  74 20 70 72 6f 63 20 67 70 74 65 6c 2d 63 75 72    6c 2d 2d 70 72 6f 63 65 73 73 2d 61 6c 69 73 74  | t.proc.gptel-curl--process-alist | 
| 8b60 |  20 6e 69 6c 20 27 72 65 6d 6f 76 65 29 20 6e 69    6c 29 0a 20 20 20 20 20 20 20 20 28 73 65 74 2d  | .nil.'remove).nil).........(set- | 
| 8b80 |  70 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e 65 6c    20 70 72 6f 63 20 23 27 69 67 6e 6f 72 65 29 0a  | process-sentinel.proc.#'ignore). | 
| 8ba0 |  20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d    70 72 6f 63 65 73 73 20 70 72 6f 63 29 0a 20 20  | ........(delete-process.proc)... | 
| 8bc0 |  20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66    65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66  | ......(kill-buffer.(process-buff | 
| 8be0 |  65 72 20 70 72 6f 63 29 29 0a 20 20 20 20 20 20    20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d  | er.proc)).........(with-current- | 
| 8c00 |  62 75 66 66 65 72 20 62 75 66 0a 20 20 20 20 20    20 20 20 20 20 28 77 68 65 6e 20 67 70 74 65 6c  | buffer.buf...........(when.gptel | 
| 8c20 |  2d 6d 6f 64 65 20 28 67 70 74 65 6c 2d 2d 75 70    64 61 74 65 2d 73 74 61 74 75 73 20 20 22 20 52  | -mode.(gptel--update-status..".R | 
| 8c40 |  65 61 64 79 22 20 27 73 75 63 63 65 73 73 29 29    29 0a 20 20 20 20 20 20 20 20 28 6d 65 73 73 61  | eady".'success))).........(messa | 
| 8c60 |  67 65 20 22 53 74 6f 70 70 65 64 20 67 70 74 65    6c 20 72 65 71 75 65 73 74 20 69 6e 20 62 75 66  | ge."Stopped.gptel.request.in.buf | 
| 8c80 |  66 65 72 20 25 53 22 20 28 62 75 66 66 65 72 2d    6e 61 6d 65 20 62 75 66 29 29 29 0a 20 20 20 20  | fer.%S".(buffer-name.buf)))..... | 
| 8ca0 |  28 6d 65 73 73 61 67 65 20 22 4e 6f 20 67 70 74    65 6c 20 72 65 71 75 65 73 74 20 61 73 73 6f 63  | (message."No.gptel.request.assoc | 
| 8cc0 |  69 61 74 65 64 20 77 69 74 68 20 62 75 66 66 65    72 20 25 53 22 20 28 62 75 66 66 65 72 2d 6e 61  | iated.with.buffer.%S".(buffer-na | 
| 8ce0 |  6d 65 20 62 75 66 29 29 29 29 0a 0a 3b 3b 20 54    4f 44 4f 3a 20 53 65 70 61 72 61 74 65 20 75 73  | me.buf))))..;;.TODO:.Separate.us | 
| 8d00 |  65 72 2d 6d 65 73 73 61 67 69 6e 67 20 66 72 6f    6d 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 0a  | er-messaging.from.this.function. | 
| 8d20 |  28 64 65 66 75 6e 20 67 70 74 65 6c 2d 63 75 72    6c 2d 2d 73 74 72 65 61 6d 2d 63 6c 65 61 6e 75  | (defun.gptel-curl--stream-cleanu | 
| 8d40 |  70 20 28 70 72 6f 63 65 73 73 20 5f 73 74 61 74    75 73 29 0a 20 20 22 50 72 6f 63 65 73 73 20 73  | p.(process._status)..."Process.s | 
| 8d60 |  65 6e 74 69 6e 65 6c 20 66 6f 72 20 47 50 54 65    6c 20 63 75 72 6c 20 72 65 71 75 65 73 74 73 2e  | entinel.for.GPTel.curl.requests. | 
| 8d80 |  0a 0a 50 52 4f 43 45 53 53 20 61 6e 64 20 5f 53    54 41 54 55 53 20 61 72 65 20 70 72 6f 63 65 73  | ..PROCESS.and._STATUS.are.proces | 
| 8da0 |  73 20 70 61 72 61 6d 65 74 65 72 73 2e 22 0a 20    20 28 6c 65 74 20 28 28 70 72 6f 63 2d 62 75 66  | s.parameters."...(let.((proc-buf | 
| 8dc0 |  20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72    20 70 72 6f 63 65 73 73 29 29 29 0a 20 20 20 20  | .(process-buffer.process)))..... | 
| 8de0 |  28 6c 65 74 2a 20 28 28 69 6e 66 6f 20 28 61 6c    69 73 74 2d 67 65 74 20 70 72 6f 63 65 73 73 20  | (let*.((info.(alist-get.process. | 
| 8e00 |  67 70 74 65 6c 2d 63 75 72 6c 2d 2d 70 72 6f 63    65 73 73 2d 61 6c 69 73 74 29 29 0a 20 20 20 20  | gptel-curl--process-alist))..... | 
| 8e20 |  20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 62 75    66 66 65 72 20 28 70 6c 69 73 74 2d 67 65 74 20  | .......(gptel-buffer.(plist-get. | 
| 8e40 |  69 6e 66 6f 20 3a 62 75 66 66 65 72 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 28 62 61 63 6b 65  | info.:buffer))............(backe | 
| 8e60 |  6e 64 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20    20 20 20 20 28 67 70 74 65 6c 2d 62 61 63 6b 65  | nd-name.............(gptel-backe | 
| 8e80 |  6e 64 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 28 62 75 66 66 65 72 2d 6c 6f 63  | nd-name..............(buffer-loc | 
| 8ea0 |  61 6c 2d 76 61 6c 75 65 20 27 67 70 74 65 6c 2d    62 61 63 6b 65 6e 64 20 67 70 74 65 6c 2d 62 75  | al-value.'gptel-backend.gptel-bu | 
| 8ec0 |  66 66 65 72 29 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 28 74 72 61 63 6b 69 6e 67 2d 6d 61 72  | ffer)))............(tracking-mar | 
| 8ee0 |  6b 65 72 20 28 70 6c 69 73 74 2d 67 65 74 20 69    6e 66 6f 20 3a 74 72 61 63 6b 69 6e 67 2d 6d 61  | ker.(plist-get.info.:tracking-ma | 
| 8f00 |  72 6b 65 72 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 28 73 74 61 72 74 2d 6d 61 72 6b 65 72 20  | rker))............(start-marker. | 
| 8f20 |  28 70 6c 69 73 74 2d 67 65 74 20 69 6e 66 6f 20    3a 70 6f 73 69 74 69 6f 6e 29 29 0a 20 20 20 20  | (plist-get.info.:position))..... | 
| 8f40 |  20 20 20 20 20 20 20 28 68 74 74 70 2d 73 74 61    74 75 73 20 28 70 6c 69 73 74 2d 67 65 74 20 69  | .......(http-status.(plist-get.i | 
| 8f60 |  6e 66 6f 20 3a 68 74 74 70 2d 73 74 61 74 75 73    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 68  | nfo.:http-status))............(h | 
| 8f80 |  74 74 70 2d 6d 73 67 20 28 70 6c 69 73 74 2d 67    65 74 20 69 6e 66 6f 20 3a 73 74 61 74 75 73 29  | ttp-msg.(plist-get.info.:status) | 
| 8fa0 |  29 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 67    70 74 65 6c 2d 6c 6f 67 2d 6c 65 76 65 6c 20 28  | )).......(when.gptel-log-level.( | 
| 8fc0 |  67 70 74 65 6c 2d 63 75 72 6c 2d 2d 6c 6f 67 2d    72 65 73 70 6f 6e 73 65 20 70 72 6f 63 2d 62 75  | gptel-curl--log-response.proc-bu | 
| 8fe0 |  66 20 69 6e 66 6f 29 29 20 3b 6c 6f 67 67 69 6e    67 0a 20 20 20 20 20 20 28 69 66 20 28 6d 65 6d  | f.info)).;logging.......(if.(mem | 
| 9000 |  62 65 72 20 68 74 74 70 2d 73 74 61 74 75 73 20    27 28 22 32 30 30 22 20 22 31 30 30 22 29 29 20  | ber.http-status.'("200"."100")). | 
| 9020 |  3b 46 69 6e 69 73 68 20 68 61 6e 64 6c 69 6e 67    20 72 65 73 70 6f 6e 73 65 0a 20 20 20 20 20 20  | ;Finish.handling.response....... | 
| 9040 |  20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e    74 2d 62 75 66 66 65 72 20 67 70 74 65 6c 2d 62  | ....(with-current-buffer.gptel-b | 
| 9060 |  75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 69 66 20 28 6e 6f 74 20 74 72 61 63 6b  | uffer.............(if.(not.track | 
| 9080 |  69 6e 67 2d 6d 61 72 6b 65 72 29 20 20 20 3b 45    6d 70 74 79 20 72 65 73 70 6f 6e 73 65 0a 20 20  | ing-marker)...;Empty.response... | 
| 90a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77    68 65 6e 20 67 70 74 65 6c 2d 6d 6f 64 65 20 28  | ..............(when.gptel-mode.( | 
| 90c0 |  67 70 74 65 6c 2d 2d 75 70 64 61 74 65 2d 73 74    61 74 75 73 20 22 20 45 6d 70 74 79 20 72 65 73  | gptel--update-status.".Empty.res | 
| 90e0 |  70 6f 6e 73 65 22 20 27 73 75 63 63 65 73 73 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ponse".'success))............... | 
| 9100 |  28 70 75 6c 73 65 2d 6d 6f 6d 65 6e 74 61 72 79    2d 68 69 67 68 6c 69 67 68 74 2d 72 65 67 69 6f  | (pulse-momentary-highlight-regio | 
| 9120 |  6e 20 73 74 61 72 74 2d 6d 61 72 6b 65 72 20 74    72 61 63 6b 69 6e 67 2d 6d 61 72 6b 65 72 29 0a  | n.start-marker.tracking-marker). | 
| 9140 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77    68 65 6e 20 67 70 74 65 6c 2d 6d 6f 64 65 0a 20  | ..............(when.gptel-mode.. | 
| 9160 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 20 28  | ...............(save-excursion.( | 
| 9180 |  67 6f 74 6f 2d 63 68 61 72 20 74 72 61 63 6b 69    6e 67 2d 6d 61 72 6b 65 72 29 0a 20 20 20 20 20  | goto-char.tracking-marker)...... | 
| 91a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65  | ...........................(inse | 
| 91c0 |  72 74 20 22 5c 6e 5c 6e 22 20 28 67 70 74 65 6c    2d 70 72 6f 6d 70 74 2d 70 72 65 66 69 78 2d 73  | rt."\n\n".(gptel-prompt-prefix-s | 
| 91e0 |  74 72 69 6e 67 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d  | tring))).................(gptel- | 
| 9200 |  2d 75 70 64 61 74 65 2d 73 74 61 74 75 73 20 20    22 20 52 65 61 64 79 22 20 27 73 75 63 63 65 73  | -update-status..".Ready".'succes | 
| 9220 |  73 29 29 29 29 0a 20 20 20 20 20 20 20 20 3b 3b    20 4f 72 20 43 61 70 74 75 72 65 20 65 72 72 6f  | s)))).........;;.Or.Capture.erro | 
| 9240 |  72 20 6d 65 73 73 61 67 65 0a 20 20 20 20 20 20    20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d  | r.message.........(with-current- | 
| 9260 |  62 75 66 66 65 72 20 70 72 6f 63 2d 62 75 66 0a    20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d  | buffer.proc-buf...........(goto- | 
| 9280 |  63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29    29 0a 20 20 20 20 20 20 20 20 20 20 28 73 65 61  | char.(point-max))...........(sea | 
| 92a0 |  72 63 68 2d 62 61 63 6b 77 61 72 64 20 28 70 6c    69 73 74 2d 67 65 74 20 69 6e 66 6f 20 3a 74 6f  | rch-backward.(plist-get.info.:to | 
| 92c0 |  6b 65 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20    28 62 61 63 6b 77 61 72 64 2d 63 68 61 72 29 0a  | ken))...........(backward-char). | 
| 92e0 |  20 20 20 20 20 20 20 20 20 20 28 70 63 61 73 65    2d 6c 65 74 2a 20 28 28 60 28 2c 5f 20 2e 20 2c  | ..........(pcase-let*.((`(,_..., | 
| 9300 |  68 65 61 64 65 72 2d 73 69 7a 65 29 20 28 72 65    61 64 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66  | header-size).(read.(current-buff | 
| 9320 |  65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65  | er)))........................(re | 
| 9340 |  73 70 6f 6e 73 65 20 28 70 72 6f 67 6e 20 28 67    6f 74 6f 2d 63 68 61 72 20 68 65 61 64 65 72 2d  | sponse.(progn.(goto-char.header- | 
| 9360 |  73 69 7a 65 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | size)........................... | 
| 9380 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63    6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 6e 69  | ..............(condition-case.ni | 
| 93a0 |  6c 20 28 67 70 74 65 6c 2d 2d 6a 73 6f 6e 2d 72    65 61 64 29 0a 20 20 20 20 20 20 20 20 20 20 20  | l.(gptel--json-read)............ | 
| 93c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | ...............................( | 
| 93e0 |  65 72 72 6f 72 20 27 6a 73 6f 6e 2d 72 65 61 64    2d 65 72 72 6f 72 29 29 29 29 0a 20 20 20 20 20  | error.'json-read-error))))...... | 
| 9400 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 65 72 72 6f 72 2d 64 61 74 61 20 28 70  | ..................(error-data.(p | 
| 9420 |  6c 69 73 74 2d 67 65 74 20 72 65 73 70 6f 6e 73    65 20 3a 65 72 72 6f 72 29 29 29 0a 20 20 20 20  | list-get.response.:error)))..... | 
| 9440 |  20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f  | ........(cond..............(erro | 
| 9460 |  72 2d 64 61 74 61 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 69 66 20 28 73 74 72 69 6e 67  | r-data...............(if.(string | 
| 9480 |  70 20 65 72 72 6f 72 2d 64 61 74 61 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | p.error-data)................... | 
| 94a0 |  28 6d 65 73 73 61 67 65 20 22 25 73 20 65 72 72    6f 72 3a 20 28 25 73 29 20 25 73 22 20 62 61 63  | (message."%s.error:.(%s).%s".bac | 
| 94c0 |  6b 65 6e 64 2d 6e 61 6d 65 20 68 74 74 70 2d 6d    73 67 20 65 72 72 6f 72 2d 64 61 74 61 29 0a 20  | kend-name.http-msg.error-data).. | 
| 94e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    77 68 65 6e 2d 6c 65 74 20 28 28 65 72 72 6f 72  | ...............(when-let.((error | 
| 9500 |  2d 6d 73 67 20 28 70 6c 69 73 74 2d 67 65 74 20    65 72 72 6f 72 2d 64 61 74 61 20 3a 6d 65 73 73  | -msg.(plist-get.error-data.:mess | 
| 9520 |  61 67 65 29 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6d 65 73 73  | age))).....................(mess | 
| 9540 |  61 67 65 20 22 25 73 20 65 72 72 6f 72 3a 20 28    25 73 29 20 25 73 22 20 62 61 63 6b 65 6e 64 2d  | age."%s.error:.(%s).%s".backend- | 
| 9560 |  6e 61 6d 65 20 68 74 74 70 2d 6d 73 67 20 65 72    72 6f 72 2d 6d 73 67 29 29 0a 20 20 20 20 20 20  | name.http-msg.error-msg))....... | 
| 9580 |  20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 2d    6c 65 74 20 28 28 65 72 72 6f 72 2d 74 79 70 65  | ..........(when-let.((error-type | 
| 95a0 |  20 28 70 6c 69 73 74 2d 67 65 74 20 65 72 72 6f    72 2d 64 61 74 61 20 3a 74 79 70 65 29 29 29 0a  | .(plist-get.error-data.:type))). | 
| 95c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 73 65 74 71 20 68 74 74 70 2d 6d  | ....................(setq.http-m | 
| 95e0 |  73 67 20 28 63 6f 6e 63 61 74 20 22 28 22 20 20    68 74 74 70 2d 6d 73 67 20 22 29 20 22 20 28 73  | sg.(concat."("..http-msg.").".(s | 
| 9600 |  74 72 69 6e 67 2d 74 72 69 6d 20 65 72 72 6f 72    2d 74 79 70 65 29 29 29 29 29 29 0a 20 20 20 20  | tring-trim.error-type))))))..... | 
| 9620 |  20 20 20 20 20 20 20 20 20 28 28 65 71 20 72 65    73 70 6f 6e 73 65 20 27 6a 73 6f 6e 2d 72 65 61  | .........((eq.response.'json-rea | 
| 9640 |  64 2d 65 72 72 6f 72 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20  | d-error)...............(message. | 
| 9660 |  22 25 73 20 65 72 72 6f 72 20 28 25 73 29 3a 20    4d 61 6c 66 6f 72 6d 65 64 20 4a 53 4f 4e 20 69  | "%s.error.(%s):.Malformed.JSON.i | 
| 9680 |  6e 20 72 65 73 70 6f 6e 73 65 2e 22 20 62 61 63    6b 65 6e 64 2d 6e 61 6d 65 20 68 74 74 70 2d 6d  | n.response.".backend-name.http-m | 
| 96a0 |  73 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 28 74 20 28 6d 65 73 73 61 67 65 20 22 25  | sg))..............(t.(message."% | 
| 96c0 |  73 20 65 72 72 6f 72 20 28 25 73 29 3a 20 43 6f    75 6c 64 20 6e 6f 74 20 70 61 72 73 65 20 48 54  | s.error.(%s):.Could.not.parse.HT | 
| 96e0 |  54 50 20 72 65 73 70 6f 6e 73 65 2e 22 20 62 61    63 6b 65 6e 64 2d 6e 61 6d 65 20 68 74 74 70 2d  | TP.response.".backend-name.http- | 
| 9700 |  6d 73 67 29 29 29 29 29 0a 20 20 20 20 20 20 20    20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62  | msg))))).........(with-current-b | 
| 9720 |  75 66 66 65 72 20 67 70 74 65 6c 2d 62 75 66 66    65 72 0a 20 20 20 20 20 20 20 20 20 20 28 77 68  | uffer.gptel-buffer...........(wh | 
| 9740 |  65 6e 20 67 70 74 65 6c 2d 6d 6f 64 65 0a 20 20    20 20 20 20 20 20 20 20 20 20 28 67 70 74 65 6c  | en.gptel-mode.............(gptel | 
| 9760 |  2d 2d 75 70 64 61 74 65 2d 73 74 61 74 75 73 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f  | --update-status..............(fo | 
| 9780 |  72 6d 61 74 20 22 20 52 65 73 70 6f 6e 73 65 20    45 72 72 6f 72 3a 20 25 73 22 20 68 74 74 70 2d  | rmat.".Response.Error:.%s".http- | 
| 97a0 |  6d 73 67 29 20 27 65 72 72 6f 72 29 29 29 29 0a    20 20 20 20 20 20 3b 3b 20 52 75 6e 20 68 6f 6f  | msg).'error)))).......;;.Run.hoo | 
| 97c0 |  6b 20 69 6e 20 76 69 73 69 62 6c 65 20 77 69 6e    64 6f 77 20 74 6f 20 73 65 74 20 77 69 6e 64 6f  | k.in.visible.window.to.set.windo | 
| 97e0 |  77 2d 70 6f 69 6e 74 2c 20 42 55 47 20 23 32 36    39 0a 20 20 20 20 20 20 28 69 66 2d 6c 65 74 20  | w-point,.BUG.#269.......(if-let. | 
| 9800 |  28 28 67 70 74 65 6c 2d 77 69 6e 64 6f 77 20 28    67 65 74 2d 62 75 66 66 65 72 2d 77 69 6e 64 6f  | ((gptel-window.(get-buffer-windo | 
| 9820 |  77 20 67 70 74 65 6c 2d 62 75 66 66 65 72 20 27    76 69 73 69 62 6c 65 29 29 29 0a 20 20 20 20 20  | w.gptel-buffer.'visible)))...... | 
| 9840 |  20 20 20 20 20 28 77 69 74 68 2d 73 65 6c 65 63    74 65 64 2d 77 69 6e 64 6f 77 20 67 70 74 65 6c  | .....(with-selected-window.gptel | 
| 9860 |  2d 77 69 6e 64 6f 77 0a 20 20 20 20 20 20 20 20    20 20 20 20 28 72 75 6e 2d 68 6f 6f 6b 2d 77 69  | -window.............(run-hook-wi | 
| 9880 |  74 68 2d 61 72 67 73 20 27 67 70 74 65 6c 2d 70    6f 73 74 2d 72 65 73 70 6f 6e 73 65 2d 66 75 6e  | th-args.'gptel-post-response-fun | 
| 98a0 |  63 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ctions.......................... | 
| 98c0 |  20 20 20 20 20 20 20 28 6d 61 72 6b 65 72 2d 70    6f 73 69 74 69 6f 6e 20 73 74 61 72 74 2d 6d 61  | .......(marker-position.start-ma | 
| 98e0 |  72 6b 65 72 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | rker)........................... | 
| 9900 |  20 20 20 20 20 20 28 6d 61 72 6b 65 72 2d 70 6f    73 69 74 69 6f 6e 20 28 6f 72 20 74 72 61 63 6b  | ......(marker-position.(or.track | 
| 9920 |  69 6e 67 2d 6d 61 72 6b 65 72 20 73 74 61 72 74    2d 6d 61 72 6b 65 72 29 29 29 29 0a 20 20 20 20  | ing-marker.start-marker))))..... | 
| 9940 |  20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e    74 2d 62 75 66 66 65 72 20 67 70 74 65 6c 2d 62  | ....(with-current-buffer.gptel-b | 
| 9960 |  75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20    28 72 75 6e 2d 68 6f 6f 6b 2d 77 69 74 68 2d 61  | uffer...........(run-hook-with-a | 
| 9980 |  72 67 73 20 27 67 70 74 65 6c 2d 70 6f 73 74 2d    72 65 73 70 6f 6e 73 65 2d 66 75 6e 63 74 69 6f  | rgs.'gptel-post-response-functio | 
| 99a0 |  6e 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ns.............................. | 
| 99c0 |  20 28 6d 61 72 6b 65 72 2d 70 6f 73 69 74 69 6f    6e 20 73 74 61 72 74 2d 6d 61 72 6b 65 72 29 0a  | .(marker-position.start-marker). | 
| 99e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d  | ..............................(m | 
| 9a00 |  61 72 6b 65 72 2d 70 6f 73 69 74 69 6f 6e 20 28    6f 72 20 74 72 61 63 6b 69 6e 67 2d 6d 61 72 6b  | arker-position.(or.tracking-mark | 
| 9a20 |  65 72 20 73 74 61 72 74 2d 6d 61 72 6b 65 72 29    29 29 29 29 29 0a 20 20 20 20 28 73 65 74 66 20  | er.start-marker)))))).....(setf. | 
| 9a40 |  28 61 6c 69 73 74 2d 67 65 74 20 70 72 6f 63 65    73 73 20 67 70 74 65 6c 2d 63 75 72 6c 2d 2d 70  | (alist-get.process.gptel-curl--p | 
| 9a60 |  72 6f 63 65 73 73 2d 61 6c 69 73 74 20 6e 69 6c    20 27 72 65 6d 6f 76 65 29 20 6e 69 6c 29 0a 20  | rocess-alist.nil.'remove).nil).. | 
| 9a80 |  20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20    70 72 6f 63 2d 62 75 66 29 29 29 0a 0a 28 64 65  | ...(kill-buffer.proc-buf)))..(de | 
| 9aa0 |  66 75 6e 20 67 70 74 65 6c 2d 63 75 72 6c 2d 2d    73 74 72 65 61 6d 2d 69 6e 73 65 72 74 2d 72 65  | fun.gptel-curl--stream-insert-re | 
| 9ac0 |  73 70 6f 6e 73 65 20 28 72 65 73 70 6f 6e 73 65    20 69 6e 66 6f 29 0a 20 20 22 49 6e 73 65 72 74  | sponse.(response.info)..."Insert | 
| 9ae0 |  20 73 74 72 65 61 6d 69 6e 67 20 52 45 53 50 4f    4e 53 45 20 66 72 6f 6d 20 61 6e 20 4c 4c 4d 20  | .streaming.RESPONSE.from.an.LLM. | 
| 9b00 |  69 6e 74 6f 20 74 68 65 20 67 70 74 65 6c 20 62    75 66 66 65 72 2e 0a 0a 49 4e 46 4f 20 69 73 20  | into.the.gptel.buffer...INFO.is. | 
| 9b20 |  61 20 6d 75 74 61 62 6c 65 20 70 6c 69 73 74 20    63 6f 6e 74 61 69 6e 69 6e 67 20 69 6e 66 6f 72  | a.mutable.plist.containing.infor | 
| 9b40 |  6d 61 74 69 6f 6e 20 72 65 6c 65 76 61 6e 74 20    74 6f 20 74 68 69 73 20 62 75 66 66 65 72 2e 0a  | mation.relevant.to.this.buffer.. | 
| 9b60 |  53 65 65 20 60 67 70 74 65 6c 2d 2d 75 72 6c 2d    67 65 74 2d 72 65 73 70 6f 6e 73 65 27 20 66 6f  | See.`gptel--url-get-response'.fo | 
| 9b80 |  72 20 64 65 74 61 69 6c 73 2e 22 0a 20 20 28 6c    65 74 20 28 28 73 74 61 72 74 2d 6d 61 72 6b 65  | r.details."...(let.((start-marke | 
| 9ba0 |  72 20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e 66    6f 20 3a 70 6f 73 69 74 69 6f 6e 29 29 0a 20 20  | r.(plist-get.info.:position))... | 
| 9bc0 |  20 20 20 20 20 20 28 74 72 61 63 6b 69 6e 67 2d    6d 61 72 6b 65 72 20 28 70 6c 69 73 74 2d 67 65  | ......(tracking-marker.(plist-ge | 
| 9be0 |  74 20 69 6e 66 6f 20 3a 74 72 61 63 6b 69 6e 67    2d 6d 61 72 6b 65 72 29 29 0a 20 20 20 20 20 20  | t.info.:tracking-marker))....... | 
| 9c00 |  20 20 28 74 72 61 6e 73 66 6f 72 6d 65 72 20 28    70 6c 69 73 74 2d 67 65 74 20 69 6e 66 6f 20 3a  | ..(transformer.(plist-get.info.: | 
| 9c20 |  74 72 61 6e 73 66 6f 72 6d 65 72 29 29 29 0a 20    20 20 20 28 77 68 65 6e 20 72 65 73 70 6f 6e 73  | transformer))).....(when.respons | 
| 9c40 |  65 0a 20 20 20 20 20 20 20 20 28 77 69 74 68 2d    63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28  | e.........(with-current-buffer.( | 
| 9c60 |  6d 61 72 6b 65 72 2d 62 75 66 66 65 72 20 73 74    61 72 74 2d 6d 61 72 6b 65 72 29 0a 20 20 20 20  | marker-buffer.start-marker)..... | 
| 9c80 |  20 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75    72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20  | ......(save-excursion........... | 
| 9ca0 |  20 20 28 75 6e 6c 65 73 73 20 74 72 61 63 6b 69    6e 67 2d 6d 61 72 6b 65 72 0a 20 20 20 20 20 20  | ..(unless.tracking-marker....... | 
| 9cc0 |  20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 2d    75 70 64 61 74 65 2d 73 74 61 74 75 73 20 22 20  | ........(gptel--update-status.". | 
| 9ce0 |  54 79 70 69 6e 67 2e 2e 2e 22 20 27 73 75 63 63    65 73 73 29 0a 20 20 20 20 20 20 20 20 20 20 20  | Typing...".'success)............ | 
| 9d00 |  20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 73 74    61 72 74 2d 6d 61 72 6b 65 72 29 0a 20 20 20 20  | ...(goto-char.start-marker)..... | 
| 9d20 |  20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73    73 20 28 6f 72 20 28 62 6f 62 70 29 20 28 70 6c  | ..........(unless.(or.(bobp).(pl | 
| 9d40 |  69 73 74 2d 67 65 74 20 69 6e 66 6f 20 3a 69 6e    2d 70 6c 61 63 65 29 29 0a 20 20 20 20 20 20 20  | ist-get.info.:in-place))........ | 
| 9d60 |  20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74    20 22 5c 6e 5c 6e 22 29 0a 20 20 20 20 20 20 20  | .........(insert."\n\n")........ | 
| 9d80 |  20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 67    70 74 65 6c 2d 6d 6f 64 65 0a 20 20 20 20 20 20  | .........(when.gptel-mode....... | 
| 9da0 |  20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 50    75 74 20 70 72 65 66 69 78 20 62 65 66 6f 72 65  | ............;;.Put.prefix.before | 
| 9dc0 |  20 41 49 20 72 65 73 70 6f 6e 73 65 2e 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .AI.response.................... | 
| 9de0 |  28 69 6e 73 65 72 74 20 28 67 70 74 65 6c 2d 72    65 73 70 6f 6e 73 65 2d 70 72 65 66 69 78 2d 73  | (insert.(gptel-response-prefix-s | 
| 9e00 |  74 72 69 6e 67 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 6d 6f 76 65 2d 6d  | tring))).................(move-m | 
| 9e20 |  61 72 6b 65 72 20 73 74 61 72 74 2d 6d 61 72 6b    65 72 20 28 70 6f 69 6e 74 29 29 29 0a 20 20 20  | arker.start-marker.(point))).... | 
| 9e40 |  20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71    20 74 72 61 63 6b 69 6e 67 2d 6d 61 72 6b 65 72  | ...........(setq.tracking-marker | 
| 9e60 |  20 28 73 65 74 2d 6d 61 72 6b 65 72 20 28 6d 61    6b 65 2d 6d 61 72 6b 65 72 29 20 28 70 6f 69 6e  | .(set-marker.(make-marker).(poin | 
| 9e80 |  74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 73 65 74 2d 6d 61 72 6b 65 72 2d 69  | t)))...............(set-marker-i | 
| 9ea0 |  6e 73 65 72 74 69 6f 6e 2d 74 79 70 65 20 74 72    61 63 6b 69 6e 67 2d 6d 61 72 6b 65 72 20 74 29  | nsertion-type.tracking-marker.t) | 
| 9ec0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    70 6c 69 73 74 2d 70 75 74 20 69 6e 66 6f 20 3a  | ...............(plist-put.info.: | 
| 9ee0 |  74 72 61 63 6b 69 6e 67 2d 6d 61 72 6b 65 72 20    74 72 61 63 6b 69 6e 67 2d 6d 61 72 6b 65 72 29  | tracking-marker.tracking-marker) | 
| 9f00 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 0a 20    20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e  | )..........................(when | 
| 9f20 |  20 74 72 61 6e 73 66 6f 72 6d 65 72 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71  | .transformer...............(setq | 
| 9f40 |  20 72 65 73 70 6f 6e 73 65 20 28 66 75 6e 63 61    6c 6c 20 74 72 61 6e 73 66 6f 72 6d 65 72 20 72  | .response.(funcall.transformer.r | 
| 9f60 |  65 73 70 6f 6e 73 65 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20  | esponse)))...................... | 
| 9f80 |  20 20 20 20 28 70 75 74 2d 74 65 78 74 2d 70 72    6f 70 65 72 74 79 0a 20 20 20 20 20 20 20 20 20  | ....(put-text-property.......... | 
| 9fa0 |  20 20 20 20 30 20 28 6c 65 6e 67 74 68 20 72 65    73 70 6f 6e 73 65 29 20 27 67 70 74 65 6c 20 27  | ....0.(length.response).'gptel.' | 
| 9fc0 |  72 65 73 70 6f 6e 73 65 20 72 65 73 70 6f 6e 73    65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  | response.response).............( | 
| 9fe0 |  67 6f 74 6f 2d 63 68 61 72 20 74 72 61 63 6b 69    6e 67 2d 6d 61 72 6b 65 72 29 0a 20 20 20 20 20  | goto-char.tracking-marker)...... | 
| a000 |  20 20 20 20 20 20 20 3b 3b 20 28 72 75 6e 2d 68    6f 6f 6b 73 20 27 67 70 74 65 6c 2d 70 72 65 2d  | .......;;.(run-hooks.'gptel-pre- | 
| a020 |  73 74 72 65 61 6d 2d 68 6f 6f 6b 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74  | stream-hook).............(insert | 
| a040 |  20 72 65 73 70 6f 6e 73 65 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 28 72 75 6e 2d 68 6f 6f 6b  | .response).............(run-hook | 
| a060 |  73 20 27 67 70 74 65 6c 2d 70 6f 73 74 2d 73 74    72 65 61 6d 2d 68 6f 6f 6b 29 29 29 29 29 29 0a  | s.'gptel-post-stream-hook)))))). | 
| a080 |  0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 63 75    72 6c 2d 2d 73 74 72 65 61 6d 2d 66 69 6c 74 65  | .(defun.gptel-curl--stream-filte | 
| a0a0 |  72 20 28 70 72 6f 63 65 73 73 20 6f 75 74 70 75    74 29 0a 20 20 28 6c 65 74 2a 20 28 28 70 72 6f  | r.(process.output)...(let*.((pro | 
| a0c0 |  63 2d 69 6e 66 6f 20 28 61 6c 69 73 74 2d 67 65    74 20 70 72 6f 63 65 73 73 20 67 70 74 65 6c 2d  | c-info.(alist-get.process.gptel- | 
| a0e0 |  63 75 72 6c 2d 2d 70 72 6f 63 65 73 73 2d 61 6c    69 73 74 29 29 29 0a 20 20 20 20 28 77 69 74 68  | curl--process-alist))).....(with | 
| a100 |  2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20    28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20  | -current-buffer.(process-buffer. | 
| a120 |  70 72 6f 63 65 73 73 29 0a 20 20 20 20 20 20 3b    3b 20 49 6e 73 65 72 74 20 6f 75 74 70 75 74 0a  | process).......;;.Insert.output. | 
| a140 |  20 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75    72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 28 67  | ......(save-excursion.........(g | 
| a160 |  6f 74 6f 2d 63 68 61 72 20 28 70 72 6f 63 65 73    73 2d 6d 61 72 6b 20 70 72 6f 63 65 73 73 29 29  | oto-char.(process-mark.process)) | 
| a180 |  0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74    20 6f 75 74 70 75 74 29 0a 20 20 20 20 20 20 20  | .........(insert.output)........ | 
| a1a0 |  20 28 73 65 74 2d 6d 61 72 6b 65 72 20 28 70 72    6f 63 65 73 73 2d 6d 61 72 6b 20 70 72 6f 63 65  | .(set-marker.(process-mark.proce | 
| a1c0 |  73 73 29 20 28 70 6f 69 6e 74 29 29 29 0a 20 20    20 20 20 20 0a 20 20 20 20 20 20 3b 3b 20 46 69  | ss).(point)))..............;;.Fi | 
| a1e0 |  6e 64 20 48 54 54 50 20 73 74 61 74 75 73 0a 20    20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 70 6c  | nd.HTTP.status.......(unless.(pl | 
| a200 |  69 73 74 2d 67 65 74 20 70 72 6f 63 2d 69 6e 66    6f 20 3a 68 74 74 70 2d 73 74 61 74 75 73 29 0a  | ist-get.proc-info.:http-status). | 
| a220 |  20 20 20 20 20 20 20 20 28 73 61 76 65 2d 65 78    63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20  | ........(save-excursion......... | 
| a240 |  20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f    69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20 20 20  | ..(goto-char.(point-min))....... | 
| a260 |  20 20 20 20 28 77 68 65 6e 2d 6c 65 74 2a 20 28    28 28 6e 6f 74 20 28 3d 20 28 6c 69 6e 65 2d 65  | ....(when-let*.(((not.(=.(line-e | 
| a280 |  6e 64 2d 70 6f 73 69 74 69 6f 6e 29 20 28 70 6f    69 6e 74 2d 6d 61 78 29 29 29 29 0a 20 20 20 20  | nd-position).(point-max))))..... | 
| a2a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 68 74 74 70 2d 6d 73 67 20 28 62 75 66  | ..................(http-msg.(buf | 
| a2c0 |  66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 6c    69 6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d 70 6f  | fer-substring.(line-beginning-po | 
| a2e0 |  73 69 74 69 6f 6e 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | sition)......................... | 
| a300 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 69 6e 65 2d  | ..........................(line- | 
| a320 |  65 6e 64 2d 70 6f 73 69 74 69 6f 6e 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | end-position)))................. | 
| a340 |  20 20 20 20 20 20 28 68 74 74 70 2d 73 74 61 74    75 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ......(http-status.............. | 
| a360 |  20 20 20 20 20 20 20 20 20 20 28 73 61 76 65 2d    6d 61 74 63 68 2d 64 61 74 61 0a 20 20 20 20 20  | ..........(save-match-data...... | 
| a380 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 61 6e 64 20 28 73 74 72 69 6e 67  | ....................(and.(string | 
| a3a0 |  2d 6d 61 74 63 68 20 22 48 54 54 50 2f 5b 2e 30    2d 39 5d 2b 20 2b 5c 5c 28 5b 30 2d 39 5d 2b 5c  | -match."HTTP/[.0-9]+.+\\([0-9]+\ | 
| a3c0 |  5c 29 22 20 68 74 74 70 2d 6d 73 67 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | \)".http-msg)................... | 
| a3e0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 74    63 68 2d 73 74 72 69 6e 67 20 31 20 68 74 74 70  | ............(match-string.1.http | 
| a400 |  2d 6d 73 67 29 29 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 70 6c 69 73 74 2d 70 75 74  | -msg))))).............(plist-put | 
| a420 |  20 70 72 6f 63 2d 69 6e 66 6f 20 3a 68 74 74 70    2d 73 74 61 74 75 73 20 68 74 74 70 2d 73 74 61  | .proc-info.:http-status.http-sta | 
| a440 |  74 75 73 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 28 70 6c 69 73 74 2d 70 75 74 20 70 72 6f 63  | tus).............(plist-put.proc | 
| a460 |  2d 69 6e 66 6f 20 3a 73 74 61 74 75 73 20 28 73    74 72 69 6e 67 2d 74 72 69 6d 20 68 74 74 70 2d  | -info.:status.(string-trim.http- | 
| a480 |  6d 73 67 29 29 29 29 0a 20 20 20 20 20 20 20 20    3b 3b 20 48 61 6e 64 6c 65 20 72 65 61 64 2d 6f  | msg)))).........;;.Handle.read-o | 
| a4a0 |  6e 6c 79 20 67 70 74 65 6c 20 62 75 66 66 65 72    0a 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28  | nly.gptel.buffer.........(when.( | 
| a4c0 |  77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66    66 65 72 20 28 70 6c 69 73 74 2d 67 65 74 20 70  | with-current-buffer.(plist-get.p | 
| a4e0 |  72 6f 63 2d 69 6e 66 6f 20 3a 62 75 66 66 65 72    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | roc-info.:buffer)............... | 
| a500 |  20 20 28 6f 72 20 62 75 66 66 65 72 2d 72 65 61    64 2d 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20 20  | ..(or.buffer-read-only.......... | 
| a520 |  20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 2d    63 68 61 72 2d 70 72 6f 70 65 72 74 79 20 28 70  | ...........(get-char-property.(p | 
| a540 |  6c 69 73 74 2d 67 65 74 20 70 72 6f 63 2d 69 6e    66 6f 20 3a 70 6f 73 69 74 69 6f 6e 29 20 27 72  | list-get.proc-info.:position).'r | 
| a560 |  65 61 64 2d 6f 6e 6c 79 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 22  | ead-only)))...........(message." | 
| a580 |  42 75 66 66 65 72 20 69 73 20 72 65 61 64 20 6f    6e 6c 79 2c 20 64 69 73 70 6c 61 79 69 6e 67 20  | Buffer.is.read.only,.displaying. | 
| a5a0 |  72 65 70 6c 79 20 69 6e 20 62 75 66 66 65 72 20    5c 22 2a 4c 4c 4d 20 72 65 73 70 6f 6e 73 65 2a  | reply.in.buffer.\"*LLM.response* | 
| a5c0 |  5c 22 22 29 0a 20 20 20 20 20 20 20 20 20 20 28    64 69 73 70 6c 61 79 2d 62 75 66 66 65 72 0a 20  | \"")...........(display-buffer.. | 
| a5e0 |  20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d    63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28  | ..........(with-current-buffer.( | 
| a600 |  67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74    65 20 22 2a 4c 4c 4d 20 72 65 73 70 6f 6e 73 65  | get-buffer-create."*LLM.response | 
| a620 |  2a 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 28 76 69 73 75 61 6c 2d 6c 69 6e 65 2d 6d 6f  | *")..............(visual-line-mo | 
| a640 |  64 65 20 31 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70  | de.1)..............(goto-char.(p | 
| a660 |  6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 28 6d 6f 76 65 2d 6d 61  | oint-max))..............(move-ma | 
| a680 |  72 6b 65 72 20 28 70 6c 69 73 74 2d 67 65 74 20    70 72 6f 63 2d 69 6e 66 6f 20 3a 70 6f 73 69 74  | rker.(plist-get.proc-info.:posit | 
| a6a0 |  69 6f 6e 29 20 28 70 6f 69 6e 74 29 20 28 63 75    72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20  | ion).(point).(current-buffer)).. | 
| a6c0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 63 75 72    72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20 20  | ............(current-buffer))... | 
| a6e0 |  20 20 20 20 20 20 20 20 20 27 28 28 64 69 73 70    6c 61 79 2d 62 75 66 66 65 72 2d 72 65 75 73 65  | .........'((display-buffer-reuse | 
| a700 |  2d 77 69 6e 64 6f 77 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 64 69 73 70 6c 61 79 2d 62 75  | -window...............display-bu | 
| a720 |  66 66 65 72 2d 70 6f 70 2d 75 70 2d 77 69 6e 64    6f 77 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | ffer-pop-up-window)............. | 
| a740 |  20 28 72 65 75 73 61 62 6c 65 2d 66 72 61 6d 65    73 20 2e 20 76 69 73 69 62 6c 65 29 29 29 29 0a  | .(reusable-frames...visible)))). | 
| a760 |  20 20 20 20 20 20 20 20 3b 3b 20 52 75 6e 20 70    72 65 2d 72 65 73 70 6f 6e 73 65 20 68 6f 6f 6b  | ........;;.Run.pre-response.hook | 
| a780 |  0a 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28    61 6e 64 20 28 6d 65 6d 62 65 72 20 28 70 6c 69  | .........(when.(and.(member.(pli | 
| a7a0 |  73 74 2d 67 65 74 20 70 72 6f 63 2d 69 6e 66 6f    20 3a 68 74 74 70 2d 73 74 61 74 75 73 29 20 27  | st-get.proc-info.:http-status).' | 
| a7c0 |  28 22 32 30 30 22 20 22 31 30 30 22 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ("200"."100")).................. | 
| a7e0 |  20 20 67 70 74 65 6c 2d 70 72 65 2d 72 65 73 70    6f 6e 73 65 2d 68 6f 6f 6b 29 0a 20 20 20 20 20  | ..gptel-pre-response-hook)...... | 
| a800 |  20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65    6e 74 2d 62 75 66 66 65 72 20 28 6d 61 72 6b 65  | .....(with-current-buffer.(marke | 
| a820 |  72 2d 62 75 66 66 65 72 20 28 70 6c 69 73 74 2d    67 65 74 20 70 72 6f 63 2d 69 6e 66 6f 20 3a 70  | r-buffer.(plist-get.proc-info.:p | 
| a840 |  6f 73 69 74 69 6f 6e 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 72 75 6e 2d 68 6f 6f 6b 73  | osition)).............(run-hooks | 
| a860 |  20 27 67 70 74 65 6c 2d 70 72 65 2d 72 65 73 70    6f 6e 73 65 2d 68 6f 6f 6b 29 29 29 29 0a 20 20  | .'gptel-pre-response-hook))))... | 
| a880 |  20 20 20 20 0a 20 20 20 20 20 20 28 77 68 65 6e    2d 6c 65 74 20 28 28 68 74 74 70 2d 6d 73 67 20  | ...........(when-let.((http-msg. | 
| a8a0 |  28 70 6c 69 73 74 2d 67 65 74 20 70 72 6f 63 2d    69 6e 66 6f 20 3a 73 74 61 74 75 73 29 29 0a 20  | (plist-get.proc-info.:status)).. | 
| a8c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 68 74 74 70 2d 73 74 61 74 75 73 20 28 70 6c  | ................(http-status.(pl | 
| a8e0 |  69 73 74 2d 67 65 74 20 70 72 6f 63 2d 69 6e 66    6f 20 3a 68 74 74 70 2d 73 74 61 74 75 73 29 29  | ist-get.proc-info.:http-status)) | 
| a900 |  29 0a 20 20 20 20 20 20 20 20 3b 3b 20 46 69 6e    64 20 64 61 74 61 20 63 68 75 6e 6b 28 73 29 20  | ).........;;.Find.data.chunk(s). | 
| a920 |  61 6e 64 20 72 75 6e 20 63 61 6c 6c 62 61 63 6b    0a 20 20 20 20 20 20 20 20 3b 3b 20 46 49 58 4d  | and.run.callback.........;;.FIXM | 
| a940 |  45 20 48 61 6e 64 6c 65 20 74 68 65 20 63 61 73    65 20 77 68 65 72 65 20 48 54 54 50 20 31 30 30  | E.Handle.the.case.where.HTTP.100 | 
| a960 |  20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20    48 54 54 50 20 28 6e 6f 74 20 32 30 30 29 20 42  | .is.followed.by.HTTP.(not.200).B | 
| a980 |  55 47 20 23 31 39 34 0a 20 20 20 20 20 20 20 20    28 77 68 65 6e 2d 6c 65 74 20 28 28 28 6d 65 6d  | UG.#194.........(when-let.(((mem | 
| a9a0 |  62 65 72 20 68 74 74 70 2d 73 74 61 74 75 73 20    27 28 22 32 30 30 22 20 22 31 30 30 22 29 29 29  | ber.http-status.'("200"."100"))) | 
| a9c0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 72 65 73 70 6f 6e 73 65 20 28 66  | ....................(response.(f | 
| a9e0 |  75 6e 63 61 6c 6c 20 28 70 6c 69 73 74 2d 67 65    74 20 70 72 6f 63 2d 69 6e 66 6f 20 3a 70 61 72  | uncall.(plist-get.proc-info.:par | 
| aa00 |  73 65 72 29 20 6e 69 6c 20 70 72 6f 63 2d 69 6e    66 6f 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | ser).nil.proc-info))............ | 
| aa20 |  20 20 20 20 20 20 20 20 28 28 6e 6f 74 20 28 65    71 75 61 6c 20 72 65 73 70 6f 6e 73 65 20 22 22  | ........((not.(equal.response."" | 
| aa40 |  29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28    66 75 6e 63 61 6c 6c 20 28 6f 72 20 28 70 6c 69  | ))))...........(funcall.(or.(pli | 
| aa60 |  73 74 2d 67 65 74 20 70 72 6f 63 2d 69 6e 66 6f    20 3a 63 61 6c 6c 62 61 63 6b 29 0a 20 20 20 20  | st-get.proc-info.:callback)..... | 
| aa80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 23 27 67 70 74 65 6c 2d 63 75 72 6c 2d  | ...................#'gptel-curl- | 
| aaa0 |  2d 73 74 72 65 61 6d 2d 69 6e 73 65 72 74 2d 72    65 73 70 6f 6e 73 65 29 0a 20 20 20 20 20 20 20  | -stream-insert-response)........ | 
| aac0 |  20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 70    6f 6e 73 65 20 70 72 6f 63 2d 69 6e 66 6f 29 29  | ............response.proc-info)) | 
| aae0 |  29 29 29 29 0a 0a 28 63 6c 2d 64 65 66 67 65 6e    65 72 69 63 20 67 70 74 65 6c 2d 63 75 72 6c 2d  | ))))..(cl-defgeneric.gptel-curl- | 
| ab00 |  2d 70 61 72 73 65 2d 73 74 72 65 61 6d 20 28 62    61 63 6b 65 6e 64 20 70 72 6f 63 2d 69 6e 66 6f  | -parse-stream.(backend.proc-info | 
| ab20 |  29 0a 20 20 22 53 74 72 65 61 6d 20 70 61 72 73    65 72 20 66 6f 72 20 67 70 74 65 6c 2d 63 75 72  | )..."Stream.parser.for.gptel-cur | 
| ab40 |  6c 2e 0a 0a 49 6d 70 6c 65 6d 65 6e 74 61 74 69    6f 6e 73 20 6f 66 20 74 68 69 73 20 66 75 6e 63  | l...Implementations.of.this.func | 
| ab60 |  74 69 6f 6e 20 72 75 6e 20 61 73 20 70 61 72 74    20 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73 0a  | tion.run.as.part.of.the.process. | 
| ab80 |  66 69 6c 74 65 72 20 66 6f 72 20 74 68 65 20 61    63 74 69 76 65 20 71 75 65 72 79 2c 20 61 6e 64  | filter.for.the.active.query,.and | 
| aba0 |  20 72 65 74 75 72 6e 20 70 61 72 74 69 61 6c 20    72 65 73 70 6f 6e 73 65 73 20 66 72 6f 6d 0a 74  | .return.partial.responses.from.t | 
| abc0 |  68 65 20 4c 4c 4d 2e 0a 0a 42 41 43 4b 45 4e 44    20 69 73 20 74 68 65 20 4c 4c 4d 20 62 61 63 6b  | he.LLM...BACKEND.is.the.LLM.back | 
| abe0 |  65 6e 64 20 69 6e 20 75 73 65 2e 0a 0a 50 52 4f    43 2d 49 4e 46 4f 20 69 73 20 61 20 70 6c 69 73  | end.in.use...PROC-INFO.is.a.plis | 
| ac00 |  74 20 77 69 74 68 20 70 72 6f 63 65 73 73 20 69    6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 6f  | t.with.process.information.and.o | 
| ac20 |  74 68 65 72 20 63 6f 6e 74 65 78 74 2e 0a 53 65    65 20 60 67 70 74 65 6c 2d 63 75 72 6c 2d 2d 67  | ther.context..See.`gptel-curl--g | 
| ac40 |  65 74 2d 72 65 73 70 6f 6e 73 65 27 20 66 6f 72    20 69 74 73 20 63 6f 6e 74 65 6e 74 73 2e 22 29  | et-response'.for.its.contents.") | 
| ac60 |  0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 63    75 72 6c 2d 2d 73 65 6e 74 69 6e 65 6c 20 28 70  | ..(defun.gptel-curl--sentinel.(p | 
| ac80 |  72 6f 63 65 73 73 20 5f 73 74 61 74 75 73 29 0a    20 20 22 50 72 6f 63 65 73 73 20 73 65 6e 74 69  | rocess._status)..."Process.senti | 
| aca0 |  6e 65 6c 20 66 6f 72 20 67 70 74 65 6c 20 63 75    72 6c 20 72 65 71 75 65 73 74 73 2e 0a 0a 50 52  | nel.for.gptel.curl.requests...PR | 
| acc0 |  4f 43 45 53 53 20 61 6e 64 20 5f 53 54 41 54 55    53 20 61 72 65 20 70 72 6f 63 65 73 73 20 70 61  | OCESS.and._STATUS.are.process.pa | 
| ace0 |  72 61 6d 65 74 65 72 73 2e 22 0a 20 20 28 6c 65    74 20 28 28 70 72 6f 63 2d 62 75 66 20 28 70 72  | rameters."...(let.((proc-buf.(pr | 
| ad00 |  6f 63 65 73 73 2d 62 75 66 66 65 72 20 70 72 6f    63 65 73 73 29 29 29 0a 20 20 20 20 28 77 68 65  | ocess-buffer.process))).....(whe | 
| ad20 |  6e 2d 6c 65 74 2a 20 28 28 28 65 71 20 28 70 72    6f 63 65 73 73 2d 73 74 61 74 75 73 20 70 72 6f  | n-let*.(((eq.(process-status.pro | 
| ad40 |  63 65 73 73 29 20 27 65 78 69 74 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70  | cess).'exit)).................(p | 
| ad60 |  72 6f 63 2d 69 6e 66 6f 20 28 61 6c 69 73 74 2d    67 65 74 20 70 72 6f 63 65 73 73 20 67 70 74 65  | roc-info.(alist-get.process.gpte | 
| ad80 |  6c 2d 63 75 72 6c 2d 2d 70 72 6f 63 65 73 73 2d    61 6c 69 73 74 29 29 0a 20 20 20 20 20 20 20 20  | l-curl--process-alist))......... | 
| ada0 |  20 20 20 20 20 20 20 20 28 70 72 6f 63 2d 63 61    6c 6c 62 61 63 6b 20 28 70 6c 69 73 74 2d 67 65  | ........(proc-callback.(plist-ge | 
| adc0 |  74 20 70 72 6f 63 2d 69 6e 66 6f 20 3a 63 61 6c    6c 62 61 63 6b 29 29 29 0a 20 20 20 20 20 20 28  | t.proc-info.:callback))).......( | 
| ade0 |  77 68 65 6e 20 67 70 74 65 6c 2d 6c 6f 67 2d 6c    65 76 65 6c 20 28 67 70 74 65 6c 2d 63 75 72 6c  | when.gptel-log-level.(gptel-curl | 
| ae00 |  2d 2d 6c 6f 67 2d 72 65 73 70 6f 6e 73 65 20 70    72 6f 63 2d 62 75 66 20 70 72 6f 63 2d 69 6e 66  | --log-response.proc-buf.proc-inf | 
| ae20 |  6f 29 29 20 3b 6c 6f 67 67 69 6e 67 0a 20 20 20    20 20 20 28 70 63 61 73 65 2d 6c 65 74 20 28 28  | o)).;logging.......(pcase-let.(( | 
| ae40 |  60 28 2c 72 65 73 70 6f 6e 73 65 20 2c 68 74 74    70 2d 6d 73 67 20 2c 65 72 72 6f 72 29 0a 20 20  | `(,response.,http-msg.,error)... | 
| ae60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62  | .................(with-current-b | 
| ae80 |  75 66 66 65 72 20 70 72 6f 63 2d 62 75 66 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | uffer.proc-buf.................. | 
| aea0 |  20 20 20 20 28 67 70 74 65 6c 2d 63 75 72 6c 2d    2d 70 61 72 73 65 2d 72 65 73 70 6f 6e 73 65 20  | ....(gptel-curl--parse-response. | 
| aec0 |  70 72 6f 63 2d 69 6e 66 6f 29 29 29 29 0a 20 20    20 20 20 20 20 20 28 70 6c 69 73 74 2d 70 75 74  | proc-info)))).........(plist-put | 
| aee0 |  20 70 72 6f 63 2d 69 6e 66 6f 20 3a 73 74 61 74    75 73 20 68 74 74 70 2d 6d 73 67 29 0a 20 20 20  | .proc-info.:status.http-msg).... | 
| af00 |  20 20 20 20 20 28 77 68 65 6e 20 65 72 72 6f 72    20 28 70 6c 69 73 74 2d 70 75 74 20 70 72 6f 63  | .....(when.error.(plist-put.proc | 
| af20 |  2d 69 6e 66 6f 20 3a 65 72 72 6f 72 20 65 72 72    6f 72 29 29 0a 20 20 20 20 20 20 20 20 28 66 75  | -info.:error.error)).........(fu | 
| af40 |  6e 63 61 6c 6c 20 70 72 6f 63 2d 63 61 6c 6c 62    61 63 6b 20 72 65 73 70 6f 6e 73 65 20 70 72 6f  | ncall.proc-callback.response.pro | 
| af60 |  63 2d 69 6e 66 6f 29 29 29 0a 20 20 20 20 28 73    65 74 66 20 28 61 6c 69 73 74 2d 67 65 74 20 70  | c-info))).....(setf.(alist-get.p | 
| af80 |  72 6f 63 65 73 73 20 67 70 74 65 6c 2d 63 75 72    6c 2d 2d 70 72 6f 63 65 73 73 2d 61 6c 69 73 74  | rocess.gptel-curl--process-alist | 
| afa0 |  20 6e 69 6c 20 27 72 65 6d 6f 76 65 29 20 6e 69    6c 29 0a 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66  | .nil.'remove).nil).....(kill-buf | 
| afc0 |  66 65 72 20 70 72 6f 63 2d 62 75 66 29 29 29 0a    0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 63 75  | fer.proc-buf)))..(defun.gptel-cu | 
| afe0 |  72 6c 2d 2d 70 61 72 73 65 2d 72 65 73 70 6f 6e    73 65 20 28 70 72 6f 63 2d 69 6e 66 6f 29 0a 20  | rl--parse-response.(proc-info).. | 
| b000 |  20 22 50 61 72 73 65 20 74 68 65 20 62 75 66 66    65 72 20 42 55 46 20 77 69 74 68 20 63 75 72 6c  | ."Parse.the.buffer.BUF.with.curl | 
| b020 |  27 73 20 72 65 73 70 6f 6e 73 65 2e 0a 0a 50 52    4f 43 2d 49 4e 46 4f 20 69 73 20 61 20 70 6c 69  | 's.response...PROC-INFO.is.a.pli | 
| b040 |  73 74 20 77 69 74 68 20 63 6f 6e 74 65 78 74 75    61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 22  | st.with.contextual.information." | 
| b060 |  0a 20 20 28 6c 65 74 20 28 28 74 6f 6b 65 6e 20    28 70 6c 69 73 74 2d 67 65 74 20 70 72 6f 63 2d  | ...(let.((token.(plist-get.proc- | 
| b080 |  69 6e 66 6f 20 3a 74 6f 6b 65 6e 29 29 0a 20 20    20 20 20 20 20 20 28 70 61 72 73 65 72 20 28 70  | info.:token)).........(parser.(p | 
| b0a0 |  6c 69 73 74 2d 67 65 74 20 70 72 6f 63 2d 69 6e    66 6f 20 3a 70 61 72 73 65 72 29 29 29 0a 20 20  | list-get.proc-info.:parser)))... | 
| b0c0 |  20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f    69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 28 73  | ..(goto-char.(point-max)).....(s | 
| b0e0 |  65 61 72 63 68 2d 62 61 63 6b 77 61 72 64 20 74    6f 6b 65 6e 29 0a 20 20 20 20 28 62 61 63 6b 77  | earch-backward.token).....(backw | 
| b100 |  61 72 64 2d 63 68 61 72 29 0a 20 20 20 20 28 70    63 61 73 65 2d 6c 65 74 2a 20 28 28 60 28 2c 5f  | ard-char).....(pcase-let*.((`(,_ | 
| b120 |  20 2e 20 2c 68 65 61 64 65 72 2d 73 69 7a 65 29    20 28 72 65 61 64 20 28 63 75 72 72 65 6e 74 2d  | ...,header-size).(read.(current- | 
| b140 |  62 75 66 66 65 72 29 29 29 29 0a 20 20 20 20 20    20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69  | buffer)))).......(goto-char.(poi | 
| b160 |  6e 74 2d 6d 69 6e 29 29 0a 0a 20 20 20 20 20 20    28 69 66 2d 6c 65 74 2a 20 28 28 68 74 74 70 2d  | nt-min))........(if-let*.((http- | 
| b180 |  6d 73 67 20 28 73 74 72 69 6e 67 2d 74 72 69 6d    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | msg.(string-trim................ | 
| b1a0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 62 75 66    66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 6c  | ............(buffer-substring.(l | 
| b1c0 |  69 6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d 70 6f    73 69 74 69 6f 6e 29 0a 20 20 20 20 20 20 20 20  | ine-beginning-position)......... | 
| b1e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| b200 |  20 20 20 20 20 28 6c 69 6e 65 2d 65 6e 64 2d 70    6f 73 69 74 69 6f 6e 29 29 29 29 0a 20 20 20 20  | .....(line-end-position))))..... | 
| b220 |  20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74    70 2d 73 74 61 74 75 73 0a 20 20 20 20 20 20 20  | ............(http-status........ | 
| b240 |  20 20 20 20 20 20 20 20 20 20 28 73 61 76 65 2d    6d 61 74 63 68 2d 64 61 74 61 0a 20 20 20 20 20  | ..........(save-match-data...... | 
| b260 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61    6e 64 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68  | ..............(and.(string-match | 
| b280 |  20 22 48 54 54 50 2f 5b 2e 30 2d 39 5d 2b 20 2b    5c 5c 28 5b 30 2d 39 5d 2b 5c 5c 29 22 20 68 74  | ."HTTP/[.0-9]+.+\\([0-9]+\\)".ht | 
| b2a0 |  74 70 2d 6d 73 67 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | tp-msg)......................... | 
| b2c0 |  28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20    68 74 74 70 2d 6d 73 67 29 29 29 29 0a 20 20 20  | (match-string.1.http-msg)))).... | 
| b2e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65    73 70 6f 6e 73 65 20 28 70 72 6f 67 6e 20 28 67  | .............(response.(progn.(g | 
| b300 |  6f 74 6f 2d 63 68 61 72 20 68 65 61 64 65 72 2d    73 69 7a 65 29 0a 20 20 20 20 20 20 20 20 20 20  | oto-char.header-size)........... | 
| b320 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f  | .......................(conditio | 
| b340 |  6e 2d 63 61 73 65 20 6e 69 6c 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | n-case.nil...................... | 
| b360 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 67 70 74 65 6c 2d 2d 6a 73 6f 6e 2d 72 65 61  | ................(gptel--json-rea | 
| b380 |  64 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | d).............................. | 
| b3a0 |  20 20 20 20 20 20 28 65 72 72 6f 72 20 27 6a 73    6f 6e 2d 72 65 61 64 2d 65 72 72 6f 72 29 29 29  | ......(error.'json-read-error))) | 
| b3c0 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f    6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 3b 3b  | ))...........(cond............;; | 
| b3e0 |  20 46 49 58 4d 45 20 48 61 6e 64 6c 65 20 74 68    65 20 63 61 73 65 20 77 68 65 72 65 20 48 54 54  | .FIXME.Handle.the.case.where.HTT | 
| b400 |  50 20 31 30 30 20 69 73 20 66 6f 6c 6c 6f 77 65    64 20 62 79 20 48 54 54 50 20 28 6e 6f 74 20 32  | P.100.is.followed.by.HTTP.(not.2 | 
| b420 |  30 30 29 20 42 55 47 20 23 31 39 34 0a 20 20 20    20 20 20 20 20 20 20 20 28 28 6d 65 6d 62 65 72  | 00).BUG.#194............((member | 
| b440 |  20 68 74 74 70 2d 73 74 61 74 75 73 20 27 28 22    32 30 30 22 20 22 31 30 30 22 29 29 0a 20 20 20  | .http-status.'("200"."100")).... | 
| b460 |  20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 28    73 74 72 69 6e 67 2d 74 72 69 6d 0a 20 20 20 20  | .........(list.(string-trim..... | 
| b480 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    66 75 6e 63 61 6c 6c 20 70 61 72 73 65 72 20 6e  | ...............(funcall.parser.n | 
| b4a0 |  69 6c 20 72 65 73 70 6f 6e 73 65 20 70 72 6f 63    2d 69 6e 66 6f 29 29 0a 20 20 20 20 20 20 20 20  | il.response.proc-info))......... | 
| b4c0 |  20 20 20 20 20 20 20 20 20 20 68 74 74 70 2d 6d    73 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | ..........http-msg))............ | 
| b4e0 |  28 28 70 6c 69 73 74 2d 67 65 74 20 72 65 73 70    6f 6e 73 65 20 3a 65 72 72 6f 72 29 0a 20 20 20  | ((plist-get.response.:error).... | 
| b500 |  20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28    28 65 72 72 6f 72 2d 64 61 74 61 20 28 70 6c 69  | .........(let*.((error-data.(pli | 
| b520 |  73 74 2d 67 65 74 20 72 65 73 70 6f 6e 73 65 20    3a 65 72 72 6f 72 29 29 0a 20 20 20 20 20 20 20  | st-get.response.:error))........ | 
| b540 |  20 20 20 20 20 20 20 20 20 20 20 20 28 65 72 72    6f 72 2d 6d 73 67 20 28 70 6c 69 73 74 2d 67 65  | ............(error-msg.(plist-ge | 
| b560 |  74 20 65 72 72 6f 72 2d 64 61 74 61 20 3a 6d 65    73 73 61 67 65 29 29 0a 20 20 20 20 20 20 20 20  | t.error-data.:message))......... | 
| b580 |  20 20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f    72 2d 74 79 70 65 20 28 70 6c 69 73 74 2d 67 65  | ...........(error-type.(plist-ge | 
| b5a0 |  74 20 65 72 72 6f 72 2d 64 61 74 61 20 3a 74 79    70 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | t.error-data.:type))............ | 
| b5c0 |  20 20 20 20 20 20 20 20 28 62 61 63 6b 65 6e 64    2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20  | ........(backend-name........... | 
| b5e0 |  20 20 20 20 20 20 20 20 20 20 28 67 70 74 65 6c    2d 62 61 63 6b 65 6e 64 2d 6e 61 6d 65 0a 20 20  | ..........(gptel-backend-name... | 
| b600 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 62 75 66 66 65 72 2d 6c 6f 63 61 6c  | ...................(buffer-local | 
| b620 |  2d 76 61 6c 75 65 20 27 67 70 74 65 6c 2d 62 61    63 6b 65 6e 64 20 28 70 6c 69 73 74 2d 67 65 74  | -value.'gptel-backend.(plist-get | 
| b640 |  20 70 72 6f 63 2d 69 6e 66 6f 20 3a 62 75 66 66    65 72 29 29 29 29 29 0a 20 20 20 20 20 20 20 20  | .proc-info.:buffer)))))......... | 
| b660 |  20 20 20 20 20 20 28 69 66 20 28 73 74 72 69 6e    67 70 20 65 72 72 6f 72 2d 64 61 74 61 29 0a 20  | ......(if.(stringp.error-data).. | 
| b680 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 70 72 6f 67 6e 20 28 6d 65 73 73 61 67 65  | .................(progn.(message | 
| b6a0 |  20 22 25 73 20 65 72 72 6f 72 3a 20 28 25 73 29    20 25 73 22 20 62 61 63 6b 65 6e 64 2d 6e 61 6d  | ."%s.error:.(%s).%s".backend-nam | 
| b6c0 |  65 20 68 74 74 70 2d 6d 73 67 20 65 72 72 6f 72    2d 64 61 74 61 29 0a 20 20 20 20 20 20 20 20 20  | e.http-msg.error-data).......... | 
| b6e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 73 65 74 71 20 65 72 72 6f 72 2d 6d 73 67 20  | ................(setq.error-msg. | 
| b700 |  28 73 74 72 69 6e 67 2d 74 72 69 6d 20 65 72 72    6f 72 2d 64 61 74 61 29 29 29 0a 20 20 20 20 20  | (string-trim.error-data)))...... | 
| b720 |  20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e    20 28 73 74 72 69 6e 67 70 20 65 72 72 6f 72 2d  | ...........(when.(stringp.error- | 
| b740 |  6d 73 67 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20  | msg)...................(message. | 
| b760 |  22 25 73 20 65 72 72 6f 72 3a 20 28 25 73 29 20    25 73 22 20 62 61 63 6b 65 6e 64 2d 6e 61 6d 65  | "%s.error:.(%s).%s".backend-name | 
| b780 |  20 68 74 74 70 2d 6d 73 67 20 28 73 74 72 69 6e    67 2d 74 72 69 6d 20 65 72 72 6f 72 2d 6d 73 67  | .http-msg.(string-trim.error-msg | 
| b7a0 |  29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 77 68 65 6e 20 65 72 72 6f 72 2d  | ))).................(when.error- | 
| b7c0 |  74 79 70 65 20 28 73 65 74 71 20 68 74 74 70 2d    6d 73 67 20 28 63 6f 6e 63 61 74 20 22 28 22 20  | type.(setq.http-msg.(concat."(". | 
| b7e0 |  20 68 74 74 70 2d 6d 73 67 20 22 29 20 22 20 28    73 74 72 69 6e 67 2d 74 72 69 6d 20 65 72 72 6f  | .http-msg.").".(string-trim.erro | 
| b800 |  72 2d 74 79 70 65 29 29 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20  | r-type)))))...............(list. | 
| b820 |  6e 69 6c 20 28 63 6f 6e 63 61 74 20 22 28 22 20    68 74 74 70 2d 6d 73 67 20 22 29 20 22 20 28 6f  | nil.(concat."(".http-msg.").".(o | 
| b840 |  72 20 65 72 72 6f 72 2d 6d 73 67 20 22 22 29 29    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28  | r.error-msg."")))))............( | 
| b860 |  28 65 71 20 72 65 73 70 6f 6e 73 65 20 27 6a 73    6f 6e 2d 72 65 61 64 2d 65 72 72 6f 72 29 0a 20  | (eq.response.'json-read-error).. | 
| b880 |  20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74    20 6e 69 6c 20 28 63 6f 6e 63 61 74 20 22 28 22  | ...........(list.nil.(concat."(" | 
| b8a0 |  20 68 74 74 70 2d 6d 73 67 20 22 29 20 4d 61 6c    66 6f 72 6d 65 64 20 4a 53 4f 4e 20 69 6e 20 72  | .http-msg.").Malformed.JSON.in.r | 
| b8c0 |  65 73 70 6f 6e 73 65 2e 22 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 22 4d 61  | esponse.")..................."Ma | 
| b8e0 |  6c 66 6f 72 6d 65 64 20 4a 53 4f 4e 20 69 6e 20    72 65 73 70 6f 6e 73 65 22 29 29 0a 20 20 20 20  | lformed.JSON.in.response"))..... | 
| b900 |  20 20 20 20 20 20 20 28 74 20 28 6c 69 73 74 20    6e 69 6c 20 28 63 6f 6e 63 61 74 20 22 28 22 20  | .......(t.(list.nil.(concat."(". | 
| b920 |  68 74 74 70 2d 6d 73 67 20 22 29 20 43 6f 75 6c    64 20 6e 6f 74 20 70 61 72 73 65 20 48 54 54 50  | http-msg.").Could.not.parse.HTTP | 
| b940 |  20 72 65 73 70 6f 6e 73 65 2e 22 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .response.").................... | 
| b960 |  20 22 43 6f 75 6c 64 20 6e 6f 74 20 70 61 72 73    65 20 48 54 54 50 20 72 65 73 70 6f 6e 73 65 2e  | ."Could.not.parse.HTTP.response. | 
| b980 |  22 29 29 29 0a 20 20 20 20 20 20 20 20 28 6c 69    73 74 20 6e 69 6c 20 28 63 6f 6e 63 61 74 20 22  | "))).........(list.nil.(concat." | 
| b9a0 |  28 22 20 68 74 74 70 2d 6d 73 67 20 22 29 20 43    6f 75 6c 64 20 6e 6f 74 20 70 61 72 73 65 20 48  | (".http-msg.").Could.not.parse.H | 
| b9c0 |  54 54 50 20 72 65 73 70 6f 6e 73 65 2e 22 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43  | TTP.response.")..............."C | 
| b9e0 |  6f 75 6c 64 20 6e 6f 74 20 70 61 72 73 65 20 48    54 54 50 20 72 65 73 70 6f 6e 73 65 2e 22 29 29  | ould.not.parse.HTTP.response.")) | 
| ba00 |  29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20 27 67    70 74 65 6c 2d 63 75 72 6c 29 0a 3b 3b 3b 20 67  | )))..(provide.'gptel-curl).;;;.g | 
| ba20 |  70 74 65 6c 2d 63 75 72 6c 2e 65 6c 20 65 6e 64    73 20 68 65 72 65 0a 00 00 00 00 00 00 00 00 00  | ptel-curl.el.ends.here.......... | 
| ba40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| ba60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| ba80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| baa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bac0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bae0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bb00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bb20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bb40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bb60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bb80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bbc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bbe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bc00 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2e 65 6c 00 00 00 00  | gptel-20240424.2306/gptel.el.... | 
| bc20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bc40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bc60 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| bc80 |  30 31 34 36 36 31 31 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 33 35 36 36 00 20 30 00 00 00  | 0146611.00000000000.013566..0... | 
| bca0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bcc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bce0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bd00 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| bd20 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| bd40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bd60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bd80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bda0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bdc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| bde0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| be00 |  3b 3b 3b 20 67 70 74 65 6c 2e 65 6c 20 2d 2d 2d    20 49 6e 74 65 72 61 63 74 20 77 69 74 68 20 43  | ;;;.gptel.el.---.Interact.with.C | 
| be20 |  68 61 74 47 50 54 20 6f 72 20 6f 74 68 65 72 20    4c 4c 4d 73 20 20 20 20 20 2d 2a 2d 20 6c 65 78  | hatGPT.or.other.LLMs.....-*-.lex | 
| be40 |  69 63 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 74 3b    20 2d 2a 2d 0a 0a 3b 3b 20 43 6f 70 79 72 69 67  | ical-binding:.t;.-*-..;;.Copyrig | 
| be60 |  68 74 20 28 43 29 20 32 30 32 33 20 20 4b 61 72    74 68 69 6b 20 43 68 69 6b 6d 61 67 61 6c 75 72  | ht.(C).2023..Karthik.Chikmagalur | 
| be80 |  0a 0a 3b 3b 20 41 75 74 68 6f 72 3a 20 4b 61 72    74 68 69 6b 20 43 68 69 6b 6d 61 67 61 6c 75 72  | ..;;.Author:.Karthik.Chikmagalur | 
| bea0 |  0a 3b 3b 20 56 65 72 73 69 6f 6e 3a 20 30 2e 38    2e 35 0a 3b 3b 20 50 61 63 6b 61 67 65 2d 52 65  | .;;.Version:.0.8.5.;;.Package-Re | 
| bec0 |  71 75 69 72 65 73 3a 20 28 28 65 6d 61 63 73 20    22 32 37 2e 31 22 29 20 28 74 72 61 6e 73 69 65  | quires:.((emacs."27.1").(transie | 
| bee0 |  6e 74 20 22 30 2e 34 2e 30 22 29 20 28 63 6f 6d    70 61 74 20 22 32 39 2e 31 2e 34 2e 31 22 29 29  | nt."0.4.0").(compat."29.1.4.1")) | 
| bf00 |  0a 3b 3b 20 4b 65 79 77 6f 72 64 73 3a 20 63 6f    6e 76 65 6e 69 65 6e 63 65 0a 3b 3b 20 55 52 4c  | .;;.Keywords:.convenience.;;.URL | 
| bf20 |  3a 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62    2e 63 6f 6d 2f 6b 61 72 74 68 69 6e 6b 2f 67 70  | :.https://github.com/karthink/gp | 
| bf40 |  74 65 6c 0a 0a 3b 3b 20 53 50 44 58 2d 4c 69 63    65 6e 73 65 2d 49 64 65 6e 74 69 66 69 65 72 3a  | tel..;;.SPDX-License-Identifier: | 
| bf60 |  20 47 50 4c 2d 33 2e 30 2d 6f 72 2d 6c 61 74 65    72 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72  | .GPL-3.0-or-later..;;.This.progr | 
| bf80 |  61 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77    61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64  | am.is.free.software;.you.can.red | 
| bfa0 |  69 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64    2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20 69 74  | istribute.it.and/or.modify.;;.it | 
| bfc0 |  20 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73    20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65  | .under.the.terms.of.the.GNU.Gene | 
| bfe0 |  72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e    73 65 20 61 73 20 70 75 62 6c 69 73 68 65 64 20  | ral.Public.License.as.published. | 
| c000 |  62 79 0a 3b 3b 20 74 68 65 20 46 72 65 65 20 53    6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69  | by.;;.the.Free.Software.Foundati | 
| c020 |  6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72 73 69    6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69 63 65  | on,.either.version.3.of.the.Lice | 
| c040 |  6e 73 65 2c 20 6f 72 0a 3b 3b 20 28 61 74 20 79    6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20  | nse,.or.;;.(at.your.option).any. | 
| c060 |  6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 0a    3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20  | later.version...;;.This.program. | 
| c080 |  69 73 20 64 69 73 74 72 69 62 75 74 65 64 20 69    6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74 20  | is.distributed.in.the.hope.that. | 
| c0a0 |  69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66 75    6c 2c 0a 3b 3b 20 62 75 74 20 57 49 54 48 4f 55  | it.will.be.useful,.;;.but.WITHOU | 
| c0c0 |  54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20    77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65  | T.ANY.WARRANTY;.without.even.the | 
| c0e0 |  20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e 74    79 20 6f 66 0a 3b 3b 20 4d 45 52 43 48 41 4e 54  | .implied.warranty.of.;;.MERCHANT | 
| c100 |  41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e 45    53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 55  | ABILITY.or.FITNESS.FOR.A.PARTICU | 
| c120 |  4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53 65    65 20 74 68 65 0a 3b 3b 20 47 4e 55 20 47 65 6e  | LAR.PURPOSE...See.the.;;.GNU.Gen | 
| c140 |  65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65    6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65 74  | eral.Public.License.for.more.det | 
| c160 |  61 69 6c 73 2e 0a 0a 3b 3b 20 59 6f 75 20 73 68    6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 69 76  | ails...;;.You.should.have.receiv | 
| c180 |  65 64 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65    20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62  | ed.a.copy.of.the.GNU.General.Pub | 
| c1a0 |  6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b 3b 20 61    6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73 20 70  | lic.License.;;.along.with.this.p | 
| c1c0 |  72 6f 67 72 61 6d 2e 20 20 49 66 20 6e 6f 74 2c    20 73 65 65 20 3c 68 74 74 70 73 3a 2f 2f 77 77  | rogram...If.not,.see.<https://ww | 
| c1e0 |  77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e 73    65 73 2f 3e 2e 0a 0a 3b 3b 20 54 68 69 73 20 66  | w.gnu.org/licenses/>...;;.This.f | 
| c200 |  69 6c 65 20 69 73 20 4e 4f 54 20 70 61 72 74 20    6f 66 20 47 4e 55 20 45 6d 61 63 73 2e 0a 0a 3b  | ile.is.NOT.part.of.GNU.Emacs...; | 
| c220 |  3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 0a    3b 3b 20 67 70 74 65 6c 20 69 73 20 61 20 73 69  | ;;.Commentary:..;;.gptel.is.a.si | 
| c240 |  6d 70 6c 65 20 4c 61 72 67 65 20 4c 61 6e 67 75    61 67 65 20 4d 6f 64 65 6c 20 63 68 61 74 20 63  | mple.Large.Language.Model.chat.c | 
| c260 |  6c 69 65 6e 74 2c 20 77 69 74 68 20 73 75 70 70    6f 72 74 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  | lient,.with.support.for.multiple | 
| c280 |  20 6d 6f 64 65 6c 73 2f 62 61 63 6b 65 6e 64 73    2e 0a 3b 3b 0a 3b 3b 20 67 70 74 65 6c 20 73 75  | .models/backends..;;.;;.gptel.su | 
| c2a0 |  70 70 6f 72 74 73 0a 3b 3b 0a 3b 3b 20 2d 20 54    68 65 20 73 65 72 76 69 63 65 73 20 43 68 61 74  | pports.;;.;;.-.The.services.Chat | 
| c2c0 |  47 50 54 2c 20 41 7a 75 72 65 2c 20 47 65 6d 69    6e 69 2c 20 41 6e 74 68 72 6f 70 69 63 20 41 49  | GPT,.Azure,.Gemini,.Anthropic.AI | 
| c2e0 |  2c 20 41 6e 79 73 63 61 6c 65 2c 20 54 6f 67 65    74 68 65 72 2e 61 69 2c 0a 3b 3b 20 20 20 50 65  | ,.Anyscale,.Together.ai,.;;...Pe | 
| c300 |  72 70 6c 65 78 69 74 79 2c 20 61 6e 64 20 4b 61    67 69 20 28 46 61 73 74 47 50 54 20 26 20 53 75  | rplexity,.and.Kagi.(FastGPT.&.Su | 
| c320 |  6d 6d 61 72 69 7a 65 72 29 0a 3b 3b 20 2d 20 4c    6f 63 61 6c 20 6d 6f 64 65 6c 73 20 76 69 61 20  | mmarizer).;;.-.Local.models.via. | 
| c340 |  4f 6c 6c 61 6d 61 2c 20 4c 6c 61 6d 61 2e 63 70    70 2c 20 4c 6c 61 6d 61 66 69 6c 65 73 20 6f 72  | Ollama,.Llama.cpp,.Llamafiles.or | 
| c360 |  20 47 50 54 34 41 6c 6c 0a 3b 3b 0a 3b 3b 20 20    41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 61 6e  | .GPT4All.;;.;;..Additionally,.an | 
| c380 |  79 20 4c 4c 4d 20 73 65 72 76 69 63 65 20 28 6c    6f 63 61 6c 20 6f 72 20 72 65 6d 6f 74 65 29 20  | y.LLM.service.(local.or.remote). | 
| c3a0 |  74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 6e    0a 3b 3b 20 20 4f 70 65 6e 41 49 2d 63 6f 6d 70  | that.provides.an.;;..OpenAI-comp | 
| c3c0 |  61 74 69 62 6c 65 20 41 50 49 20 69 73 20 73 75    70 70 6f 72 74 65 64 2e 0a 3b 3b 0a 3b 3b 20 46  | atible.API.is.supported..;;.;;.F | 
| c3e0 |  65 61 74 75 72 65 73 3a 0a 3b 3b 20 2d 20 49 74    e2 80 99 73 20 61 73 79 6e 63 20 61 6e 64 20 66  | eatures:.;;.-.It...s.async.and.f | 
| c400 |  61 73 74 2c 20 73 74 72 65 61 6d 73 20 72 65 73    70 6f 6e 73 65 73 2e 0a 3b 3b 20 2d 20 49 6e 74  | ast,.streams.responses..;;.-.Int | 
| c420 |  65 72 61 63 74 20 77 69 74 68 20 4c 4c 4d 73 20    66 72 6f 6d 20 61 6e 79 77 68 65 72 65 20 69 6e  | eract.with.LLMs.from.anywhere.in | 
| c440 |  20 45 6d 61 63 73 20 28 61 6e 79 20 62 75 66 66    65 72 2c 20 73 68 65 6c 6c 2c 20 6d 69 6e 69 62  | .Emacs.(any.buffer,.shell,.minib | 
| c460 |  75 66 66 65 72 2c 0a 3b 3b 20 20 20 77 68 65 72    65 76 65 72 29 0a 3b 3b 20 2d 20 4c 4c 4d 20 72  | uffer,.;;...wherever).;;.-.LLM.r | 
| c480 |  65 73 70 6f 6e 73 65 73 20 61 72 65 20 69 6e 20    4d 61 72 6b 64 6f 77 6e 20 6f 72 20 4f 72 67 20  | esponses.are.in.Markdown.or.Org. | 
| c4a0 |  6d 61 72 6b 75 70 2e 0a 3b 3b 20 2d 20 53 75 70    70 6f 72 74 73 20 63 6f 6e 76 65 72 73 61 74 69  | markup..;;.-.Supports.conversati | 
| c4c0 |  6f 6e 73 20 61 6e 64 20 6d 75 6c 74 69 70 6c 65    20 69 6e 64 65 70 65 6e 64 65 6e 74 20 73 65 73  | ons.and.multiple.independent.ses | 
| c4e0 |  73 69 6f 6e 73 2e 0a 3b 3b 20 2d 20 53 61 76 65    20 63 68 61 74 73 20 61 73 20 72 65 67 75 6c 61  | sions..;;.-.Save.chats.as.regula | 
| c500 |  72 20 4d 61 72 6b 64 6f 77 6e 2f 4f 72 67 2f 54    65 78 74 20 66 69 6c 65 73 20 61 6e 64 20 72 65  | r.Markdown/Org/Text.files.and.re | 
| c520 |  73 75 6d 65 20 74 68 65 6d 20 6c 61 74 65 72 2e    0a 3b 3b 20 2d 20 59 6f 75 20 63 61 6e 20 67 6f  | sume.them.later..;;.-.You.can.go | 
| c540 |  20 62 61 63 6b 20 61 6e 64 20 65 64 69 74 20 79    6f 75 72 20 70 72 65 76 69 6f 75 73 20 70 72 6f  | .back.and.edit.your.previous.pro | 
| c560 |  6d 70 74 73 20 6f 72 20 4c 4c 4d 20 72 65 73 70    6f 6e 73 65 73 20 77 68 65 6e 0a 3b 3b 20 20 20  | mpts.or.LLM.responses.when.;;... | 
| c580 |  63 6f 6e 74 69 6e 75 69 6e 67 20 61 20 63 6f 6e    76 65 72 73 61 74 69 6f 6e 2e 20 20 54 68 65 73  | continuing.a.conversation...Thes | 
| c5a0 |  65 20 77 69 6c 6c 20 62 65 20 66 65 64 20 62 61    63 6b 20 74 6f 20 74 68 65 20 6d 6f 64 65 6c 2e  | e.will.be.fed.back.to.the.model. | 
| c5c0 |  0a 3b 3b 0a 3b 3b 20 52 65 71 75 69 72 65 6d 65    6e 74 73 20 66 6f 72 20 43 68 61 74 47 50 54 2c  | .;;.;;.Requirements.for.ChatGPT, | 
| c5e0 |  20 41 7a 75 72 65 2c 20 47 65 6d 69 6e 69 20 6f    72 20 4b 61 67 69 3a 0a 3b 3b 0a 3b 3b 20 2d 20  | .Azure,.Gemini.or.Kagi:.;;.;;.-. | 
| c600 |  59 6f 75 20 6e 65 65 64 20 61 6e 20 61 70 70 72    6f 70 72 69 61 74 65 20 41 50 49 20 6b 65 79 2e  | You.need.an.appropriate.API.key. | 
| c620 |  20 20 53 65 74 20 74 68 65 20 76 61 72 69 61 62    6c 65 20 60 67 70 74 65 6c 2d 61 70 69 2d 6b 65  | ..Set.the.variable.`gptel-api-ke | 
| c640 |  79 27 20 74 6f 20 74 68 65 0a 3b 3b 20 20 20 6b    65 79 20 6f 72 20 74 6f 20 61 20 66 75 6e 63 74  | y'.to.the.;;...key.or.to.a.funct | 
| c660 |  69 6f 6e 20 6f 66 20 6e 6f 20 61 72 67 75 6d 65    6e 74 73 20 74 68 61 74 20 72 65 74 75 72 6e 73  | ion.of.no.arguments.that.returns | 
| c680 |  20 74 68 65 20 6b 65 79 2e 20 20 28 49 74 20 74    72 69 65 73 20 74 6f 0a 3b 3b 20 20 20 75 73 65  | .the.key...(It.tries.to.;;...use | 
| c6a0 |  20 60 61 75 74 68 2d 73 6f 75 72 63 65 27 20 62    79 20 64 65 66 61 75 6c 74 29 0a 3b 3b 0a 3b 3b  | .`auth-source'.by.default).;;.;; | 
| c6c0 |  20 2d 20 46 6f 72 20 41 7a 75 72 65 3a 20 64 65    66 69 6e 65 20 61 20 67 70 74 65 6c 2d 62 61 63  | .-.For.Azure:.define.a.gptel-bac | 
| c6e0 |  6b 65 6e 64 20 77 69 74 68 20 60 67 70 74 65 6c    2d 6d 61 6b 65 2d 61 7a 75 72 65 27 2c 20 77 68  | kend.with.`gptel-make-azure',.wh | 
| c700 |  69 63 68 20 73 65 65 2e 0a 3b 3b 20 2d 20 46 6f    72 20 47 65 6d 69 6e 69 3a 20 64 65 66 69 6e 65  | ich.see..;;.-.For.Gemini:.define | 
| c720 |  20 61 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64    20 77 69 74 68 20 60 67 70 74 65 6c 2d 6d 61 6b  | .a.gptel-backend.with.`gptel-mak | 
| c740 |  65 2d 67 65 6d 69 6e 69 27 2c 20 77 68 69 63 68    20 73 65 65 2e 0a 3b 3b 20 2d 20 46 6f 72 20 41  | e-gemini',.which.see..;;.-.For.A | 
| c760 |  6e 74 68 72 6f 70 69 63 20 28 43 6c 61 75 64 65    29 3a 20 64 65 66 69 6e 65 20 61 20 67 70 74 65  | nthropic.(Claude):.define.a.gpte | 
| c780 |  6c 2d 62 61 63 6b 65 6e 64 20 77 69 74 68 20 60    67 70 74 65 6c 2d 6d 61 6b 65 2d 61 6e 74 68 72  | l-backend.with.`gptel-make-anthr | 
| c7a0 |  6f 70 69 63 27 2c 0a 3b 3b 20 20 20 77 68 69 63    68 20 73 65 65 0a 3b 3b 20 2d 20 46 6f 72 20 4b  | opic',.;;...which.see.;;.-.For.K | 
| c7c0 |  61 67 69 3a 20 64 65 66 69 6e 65 20 61 20 67 70    74 65 6c 2d 62 61 63 6b 65 6e 64 20 77 69 74 68  | agi:.define.a.gptel-backend.with | 
| c7e0 |  20 60 67 70 74 65 6c 2d 6d 61 6b 65 2d 6b 61 67    69 27 2c 20 77 68 69 63 68 20 73 65 65 2e 0a 3b  | .`gptel-make-kagi',.which.see..; | 
| c800 |  3b 0a 3b 3b 20 46 6f 72 20 6c 6f 63 61 6c 20 6d    6f 64 65 6c 73 20 75 73 69 6e 67 20 4f 6c 6c 61  | ;.;;.For.local.models.using.Olla | 
| c820 |  6d 61 2c 20 4c 6c 61 6d 61 2e 63 70 70 20 6f 72    20 47 50 54 34 41 6c 6c 3a 0a 3b 3b 0a 3b 3b 20  | ma,.Llama.cpp.or.GPT4All:.;;.;;. | 
| c840 |  2d 20 54 68 65 20 6d 6f 64 65 6c 20 68 61 73 20    74 6f 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e  | -.The.model.has.to.be.running.on | 
| c860 |  20 61 6e 20 61 63 63 65 73 73 69 62 6c 65 20 61    64 64 72 65 73 73 20 28 6f 72 20 6c 6f 63 61 6c  | .an.accessible.address.(or.local | 
| c880 |  68 6f 73 74 29 0a 3b 3b 20 2d 20 44 65 66 69 6e    65 20 61 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e  | host).;;.-.Define.a.gptel-backen | 
| c8a0 |  64 20 77 69 74 68 20 60 67 70 74 65 6c 2d 6d 61    6b 65 2d 6f 6c 6c 61 6d 61 27 20 6f 72 20 60 67  | d.with.`gptel-make-ollama'.or.`g | 
| c8c0 |  70 74 65 6c 2d 6d 61 6b 65 2d 67 70 74 34 61 6c    6c 27 2c 0a 3b 3b 20 20 20 77 68 69 63 68 20 73  | ptel-make-gpt4all',.;;...which.s | 
| c8e0 |  65 65 2e 0a 3b 3b 0a 3b 3b 20 43 6f 6e 73 75 6c    74 20 74 68 65 20 70 61 63 6b 61 67 65 20 52 45  | ee..;;.;;.Consult.the.package.RE | 
| c900 |  41 44 4d 45 20 66 6f 72 20 65 78 61 6d 70 6c 65    73 20 61 6e 64 20 6d 6f 72 65 20 68 65 6c 70 20  | ADME.for.examples.and.more.help. | 
| c920 |  77 69 74 68 20 63 6f 6e 66 69 67 75 72 69 6e 67    0a 3b 3b 20 62 61 63 6b 65 6e 64 73 2e 0a 3b 3b  | with.configuring.;;.backends..;; | 
| c940 |  0a 3b 3b 20 55 73 61 67 65 3a 0a 3b 3b 0a 3b 3b    20 67 70 74 65 6c 20 63 61 6e 20 62 65 20 75 73  | .;;.Usage:.;;.;;.gptel.can.be.us | 
| c960 |  65 64 20 69 6e 20 61 6e 79 20 62 75 66 66 65 72    20 6f 72 20 69 6e 20 61 20 64 65 64 69 63 61 74  | ed.in.any.buffer.or.in.a.dedicat | 
| c980 |  65 64 20 63 68 61 74 20 62 75 66 66 65 72 2e 20    20 54 68 65 0a 3b 3b 20 69 6e 74 65 72 61 63 74  | ed.chat.buffer...The.;;.interact | 
| c9a0 |  69 6f 6e 20 6d 6f 64 65 6c 20 69 73 20 73 69 6d    70 6c 65 3a 20 54 79 70 65 20 69 6e 20 61 20 71  | ion.model.is.simple:.Type.in.a.q | 
| c9c0 |  75 65 72 79 20 61 6e 64 20 74 68 65 20 72 65 73    70 6f 6e 73 65 20 77 69 6c 6c 20 62 65 0a 3b 3b  | uery.and.the.response.will.be.;; | 
| c9e0 |  20 69 6e 73 65 72 74 65 64 20 62 65 6c 6f 77 2e    20 20 59 6f 75 20 63 61 6e 20 63 6f 6e 74 69 6e  | .inserted.below...You.can.contin | 
| ca00 |  75 65 20 74 68 65 20 63 6f 6e 76 65 72 73 61 74    69 6f 6e 20 62 79 20 74 79 70 69 6e 67 20 62 65  | ue.the.conversation.by.typing.be | 
| ca20 |  6c 6f 77 20 74 68 65 0a 3b 3b 20 72 65 73 70 6f    6e 73 65 2e 0a 3b 3b 0a 3b 3b 20 54 6f 20 75 73  | low.the.;;.response..;;.;;.To.us | 
| ca40 |  65 20 74 68 69 73 20 69 6e 20 61 6e 79 20 62 75    66 66 65 72 3a 0a 3b 3b 0a 3b 3b 20 2d 20 43 61  | e.this.in.any.buffer:.;;.;;.-.Ca | 
| ca60 |  6c 6c 20 60 67 70 74 65 6c 2d 73 65 6e 64 27 20    74 6f 20 73 65 6e 64 20 74 68 65 20 74 65 78 74  | ll.`gptel-send'.to.send.the.text | 
| ca80 |  20 75 70 20 74 6f 20 74 68 65 20 63 75 72 73 6f    72 2e 20 20 53 65 6c 65 63 74 20 61 20 72 65 67  | .up.to.the.cursor...Select.a.reg | 
| caa0 |  69 6f 6e 20 74 6f 0a 3b 3b 20 20 20 73 65 6e 64    20 6f 6e 6c 79 20 74 68 65 20 72 65 67 69 6f 6e  | ion.to.;;...send.only.the.region | 
| cac0 |  2e 0a 3b 3b 0a 3b 3b 20 2d 20 59 6f 75 20 63 61    6e 20 73 65 6c 65 63 74 20 70 72 65 76 69 6f 75  | ..;;.;;.-.You.can.select.previou | 
| cae0 |  73 20 70 72 6f 6d 70 74 73 20 61 6e 64 20 72 65    73 70 6f 6e 73 65 73 20 74 6f 0a 3b 3b 20 20 20  | s.prompts.and.responses.to.;;... | 
| cb00 |  63 6f 6e 74 69 6e 75 65 20 74 68 65 20 63 6f 6e    76 65 72 73 61 74 69 6f 6e 2e 0a 3b 3b 0a 3b 3b  | continue.the.conversation..;;.;; | 
| cb20 |  20 2d 20 43 61 6c 6c 20 60 67 70 74 65 6c 2d 73    65 6e 64 27 20 77 69 74 68 20 61 20 70 72 65 66  | .-.Call.`gptel-send'.with.a.pref | 
| cb40 |  69 78 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61    63 63 65 73 73 20 61 20 6d 65 6e 75 20 77 68 65  | ix.argument.to.access.a.menu.whe | 
| cb60 |  72 65 20 79 6f 75 20 63 61 6e 20 73 65 74 0a 3b    3b 20 20 20 79 6f 75 72 20 62 61 63 6b 65 6e 64  | re.you.can.set.;;...your.backend | 
| cb80 |  2c 20 6d 6f 64 65 6c 20 61 6e 64 20 6f 74 68 65    72 20 70 61 72 61 6d 65 74 65 72 73 2c 20 6f 72  | ,.model.and.other.parameters,.or | 
| cba0 |  20 74 6f 20 72 65 64 69 72 65 63 74 20 74 68 65    0a 3b 3b 20 20 20 70 72 6f 6d 70 74 2f 72 65 73  | .to.redirect.the.;;...prompt/res | 
| cbc0 |  70 6f 6e 73 65 2e 0a 3b 3b 0a 3b 3b 20 54 6f 20    75 73 65 20 74 68 69 73 20 69 6e 20 61 20 64 65  | ponse..;;.;;.To.use.this.in.a.de | 
| cbe0 |  64 69 63 61 74 65 64 20 62 75 66 66 65 72 3a 0a    3b 3b 20 2d 20 4d 2d 78 20 67 70 74 65 6c 3a 20  | dicated.buffer:.;;.-.M-x.gptel:. | 
| cc00 |  53 74 61 72 74 20 61 20 63 68 61 74 20 73 65 73    73 69 6f 6e 0a 3b 3b 20 2d 20 43 2d 75 20 4d 2d  | Start.a.chat.session.;;.-.C-u.M- | 
| cc20 |  78 20 67 70 74 65 6c 3a 20 53 74 61 72 74 20 61    6e 6f 74 68 65 72 20 73 65 73 73 69 6f 6e 20 6f  | x.gptel:.Start.another.session.o | 
| cc40 |  72 20 6d 75 6c 74 69 70 6c 65 20 69 6e 64 65 70    65 6e 64 65 6e 74 20 63 68 61 74 20 73 65 73 73  | r.multiple.independent.chat.sess | 
| cc60 |  69 6f 6e 73 0a 3b 3b 0a 3b 3b 20 2d 20 49 6e 20    74 68 65 20 63 68 61 74 20 73 65 73 73 69 6f 6e  | ions.;;.;;.-.In.the.chat.session | 
| cc80 |  3a 20 50 72 65 73 73 20 60 43 2d 63 20 52 45 54    27 20 28 60 67 70 74 65 6c 2d 73 65 6e 64 27 29  | :.Press.`C-c.RET'.(`gptel-send') | 
| cca0 |  20 74 6f 20 73 65 6e 64 20 79 6f 75 72 20 70 72    6f 6d 70 74 2e 0a 3b 3b 20 20 20 55 73 65 20 61  | .to.send.your.prompt..;;...Use.a | 
| ccc0 |  20 70 72 65 66 69 78 20 61 72 67 75 6d 65 6e 74    20 28 60 43 2d 75 20 43 2d 63 20 52 45 54 27 29  | .prefix.argument.(`C-u.C-c.RET') | 
| cce0 |  20 74 6f 20 61 63 63 65 73 73 20 61 20 6d 65 6e    75 2e 20 20 49 6e 20 74 68 69 73 20 6d 65 6e 75  | .to.access.a.menu...In.this.menu | 
| cd00 |  20 79 6f 75 0a 3b 3b 20 20 20 63 61 6e 20 73 65    74 20 63 68 61 74 20 70 61 72 61 6d 65 74 65 72  | .you.;;...can.set.chat.parameter | 
| cd20 |  73 20 6c 69 6b 65 20 74 68 65 20 73 79 73 74 65    6d 20 64 69 72 65 63 74 69 76 65 73 2c 20 61 63  | s.like.the.system.directives,.ac | 
| cd40 |  74 69 76 65 20 62 61 63 6b 65 6e 64 20 6f 72 0a    3b 3b 20 20 20 6d 6f 64 65 6c 2c 20 6f 72 20 63  | tive.backend.or.;;...model,.or.c | 
| cd60 |  68 6f 6f 73 65 20 74 6f 20 72 65 64 69 72 65 63    74 20 74 68 65 20 69 6e 70 75 74 20 6f 72 20 6f  | hoose.to.redirect.the.input.or.o | 
| cd80 |  75 74 70 75 74 20 65 6c 73 65 77 68 65 72 65 20    28 73 75 63 68 20 61 73 20 74 6f 20 74 68 65 0a  | utput.elsewhere.(such.as.to.the. | 
| cda0 |  3b 3b 20 20 20 6b 69 6c 6c 20 72 69 6e 67 29 2e    0a 3b 3b 0a 3b 3b 20 2d 20 59 6f 75 20 63 61 6e  | ;;...kill.ring)..;;.;;.-.You.can | 
| cdc0 |  20 73 61 76 65 20 74 68 69 73 20 62 75 66 66 65    72 20 74 6f 20 61 20 66 69 6c 65 2e 20 20 57 68  | .save.this.buffer.to.a.file...Wh | 
| cde0 |  65 6e 20 6f 70 65 6e 69 6e 67 20 74 68 69 73 20    66 69 6c 65 2c 20 74 75 72 6e 69 6e 67 20 6f 6e  | en.opening.this.file,.turning.on | 
| ce00 |  0a 3b 3b 20 20 20 60 67 70 74 65 6c 2d 6d 6f 64    65 27 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 72 65  | .;;...`gptel-mode'.will.allow.re | 
| ce20 |  73 75 6d 69 6e 67 20 74 68 65 20 63 6f 6e 76 65    72 73 61 74 69 6f 6e 2e 0a 3b 3b 0a 3b 3b 20 46  | suming.the.conversation..;;.;;.F | 
| ce40 |  69 6e 61 6c 6c 79 2c 20 67 70 74 65 6c 20 6f 66    66 65 72 73 20 61 20 67 65 6e 65 72 61 6c 20 70  | inally,.gptel.offers.a.general.p | 
| ce60 |  75 72 70 6f 73 65 20 41 50 49 20 66 6f 72 20 77    72 69 74 69 6e 67 20 4c 4c 4d 20 69 6e 65 72 61  | urpose.API.for.writing.LLM.inera | 
| ce80 |  63 74 69 6f 6e 73 0a 3b 3b 20 74 68 61 74 20 73    75 69 74 20 68 6f 77 20 79 6f 75 20 77 6f 72 6b  | ctions.;;.that.suit.how.you.work | 
| cea0 |  2c 20 73 65 65 20 60 67 70 74 65 6c 2d 72 65 71    75 65 73 74 27 2e 0a 0a 3b 3b 3b 20 43 6f 64 65  | ,.see.`gptel-request'...;;;.Code | 
| cec0 |  3a 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63 74    69 6f 6e 20 6d 61 72 6b 64 6f 77 6e 2d 6d 6f 64  | :.(declare-function.markdown-mod | 
| cee0 |  65 20 22 6d 61 72 6b 64 6f 77 6e 2d 6d 6f 64 65    22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63  | e."markdown-mode").(declare-func | 
| cf00 |  74 69 6f 6e 20 67 70 74 65 6c 2d 63 75 72 6c 2d    67 65 74 2d 72 65 73 70 6f 6e 73 65 20 22 67 70  | tion.gptel-curl-get-response."gp | 
| cf20 |  74 65 6c 2d 63 75 72 6c 22 29 0a 28 64 65 63 6c    61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 67 70 74  | tel-curl").(declare-function.gpt | 
| cf40 |  65 6c 2d 6d 65 6e 75 20 22 67 70 74 65 6c 2d 74    72 61 6e 73 69 65 6e 74 22 29 0a 28 64 65 63 6c  | el-menu."gptel-transient").(decl | 
| cf60 |  61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 67 70 74    65 6c 2d 73 79 73 74 65 6d 2d 70 72 6f 6d 70 74  | are-function.gptel-system-prompt | 
| cf80 |  20 22 67 70 74 65 6c 2d 74 72 61 6e 73 69 65 6e    74 22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e  | ."gptel-transient").(declare-fun | 
| cfa0 |  63 74 69 6f 6e 20 70 75 6c 73 65 2d 6d 6f 6d 65    6e 74 61 72 79 2d 68 69 67 68 6c 69 67 68 74 2d  | ction.pulse-momentary-highlight- | 
| cfc0 |  72 65 67 69 6f 6e 20 22 70 75 6c 73 65 22 29 0a    0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63 74 69  | region."pulse")..(declare-functi | 
| cfe0 |  6f 6e 20 65 64 69 66 66 2d 6d 61 6b 65 2d 63 6c    6f 6e 65 64 2d 62 75 66 66 65 72 20 22 65 64 69  | on.ediff-make-cloned-buffer."edi | 
| d000 |  66 66 2d 75 74 69 6c 22 29 0a 28 64 65 63 6c 61    72 65 2d 66 75 6e 63 74 69 6f 6e 20 65 64 69 66  | ff-util").(declare-function.edif | 
| d020 |  66 2d 72 65 67 69 6f 6e 73 2d 69 6e 74 65 72 6e    61 6c 20 22 65 64 69 66 66 22 29 0a 0a 28 64 65  | f-regions-internal."ediff")..(de | 
| d040 |  63 6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 67    70 74 65 6c 2d 6f 72 67 2d 2d 63 72 65 61 74 65  | clare-function.gptel-org--create | 
| d060 |  2d 70 72 6f 6d 70 74 20 22 67 70 74 65 6c 2d 6f    72 67 22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75  | -prompt."gptel-org").(declare-fu | 
| d080 |  6e 63 74 69 6f 6e 20 67 70 74 65 6c 2d 6f 72 67    2d 73 65 74 2d 74 6f 70 69 63 20 22 67 70 74 65  | nction.gptel-org-set-topic."gpte | 
| d0a0 |  6c 2d 6f 72 67 22 29 0a 28 64 65 63 6c 61 72 65    2d 66 75 6e 63 74 69 6f 6e 20 67 70 74 65 6c 2d  | l-org").(declare-function.gptel- | 
| d0c0 |  6f 72 67 2d 2d 73 61 76 65 2d 73 74 61 74 65 20    22 67 70 74 65 6c 2d 6f 72 67 22 29 0a 28 64 65  | org--save-state."gptel-org").(de | 
| d0e0 |  63 6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 67    70 74 65 6c 2d 6f 72 67 2d 2d 72 65 73 74 6f 72  | clare-function.gptel-org--restor | 
| d100 |  65 2d 73 74 61 74 65 20 22 67 70 74 65 6c 2d 6f    72 67 22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75  | e-state."gptel-org").(declare-fu | 
| d120 |  6e 63 74 69 6f 6e 20 67 70 74 65 6c 2d 2d 73 74    72 65 61 6d 2d 63 6f 6e 76 65 72 74 2d 6d 61 72  | nction.gptel--stream-convert-mar | 
| d140 |  6b 64 6f 77 6e 2d 3e 6f 72 67 20 22 67 70 74 65    6c 2d 6f 72 67 22 29 0a 28 64 65 63 6c 61 72 65  | kdown->org."gptel-org").(declare | 
| d160 |  2d 66 75 6e 63 74 69 6f 6e 20 67 70 74 65 6c 2d    2d 63 6f 6e 76 65 72 74 2d 6d 61 72 6b 64 6f 77  | -function.gptel--convert-markdow | 
| d180 |  6e 2d 3e 6f 72 67 20 22 67 70 74 65 6c 2d 6f 72    67 22 29 0a 28 64 65 66 69 6e 65 2d 6f 62 73 6f  | n->org."gptel-org").(define-obso | 
| d1a0 |  6c 65 74 65 2d 66 75 6e 63 74 69 6f 6e 2d 61 6c    69 61 73 0a 20 20 27 67 70 74 65 6c 2d 73 65 74  | lete-function-alias...'gptel-set | 
| d1c0 |  2d 74 6f 70 69 63 20 27 67 70 74 65 6c 2d 6f 72    67 2d 73 65 74 2d 74 6f 70 69 63 20 22 30 2e 37  | -topic.'gptel-org-set-topic."0.7 | 
| d1e0 |  2e 35 22 29 0a 0a 28 65 76 61 6c 2d 77 68 65 6e    2d 63 6f 6d 70 69 6c 65 0a 20 20 28 72 65 71 75  | .5")..(eval-when-compile...(requ | 
| d200 |  69 72 65 20 27 73 75 62 72 2d 78 29 0a 20 20 28    72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 62 29  | ire.'subr-x)...(require.'cl-lib) | 
| d220 |  29 0a 28 72 65 71 75 69 72 65 20 27 63 6f 6d 70    61 74 20 6e 69 6c 20 74 29 0a 28 72 65 71 75 69  | ).(require.'compat.nil.t).(requi | 
| d240 |  72 65 20 27 75 72 6c 29 0a 28 72 65 71 75 69 72    65 20 27 6d 61 70 29 0a 28 72 65 71 75 69 72 65  | re.'url).(require.'map).(require | 
| d260 |  20 27 74 65 78 74 2d 70 72 6f 70 65 72 74 79 2d    73 65 61 72 63 68 29 0a 28 72 65 71 75 69 72 65  | .'text-property-search).(require | 
| d280 |  20 27 63 6c 2d 67 65 6e 65 72 69 63 29 0a 28 72    65 71 75 69 72 65 20 27 67 70 74 65 6c 2d 6f 70  | .'cl-generic).(require.'gptel-op | 
| d2a0 |  65 6e 61 69 29 0a 0a 28 77 69 74 68 2d 65 76 61    6c 2d 61 66 74 65 72 2d 6c 6f 61 64 20 27 6f 72  | enai)..(with-eval-after-load.'or | 
| d2c0 |  67 0a 20 20 28 72 65 71 75 69 72 65 20 27 67 70    74 65 6c 2d 6f 72 67 29 29 0a 0a 0c 0a 3b 3b 20  | g...(require.'gptel-org))....;;. | 
| d2e0 |  55 73 65 72 20 6f 70 74 69 6f 6e 73 0a 0a 28 64    65 66 67 72 6f 75 70 20 67 70 74 65 6c 20 6e 69  | User.options..(defgroup.gptel.ni | 
| d300 |  6c 0a 20 20 22 49 6e 74 65 72 61 63 74 20 77 69    74 68 20 4c 4c 4d 73 20 66 72 6f 6d 20 61 6e 79  | l..."Interact.with.LLMs.from.any | 
| d320 |  77 68 65 72 65 20 69 6e 20 45 6d 61 63 73 2e 22    0a 20 20 3a 67 72 6f 75 70 20 27 68 79 70 65 72  | where.in.Emacs."...:group.'hyper | 
| d340 |  6d 65 64 69 61 29 0a 0a 3b 3b 20 28 64 65 66 63    75 73 74 6f 6d 20 67 70 74 65 6c 2d 68 6f 73 74  | media)..;;.(defcustom.gptel-host | 
| d360 |  20 22 61 70 69 2e 6f 70 65 6e 61 69 2e 63 6f 6d    22 0a 3b 3b 20 20 20 22 54 68 65 20 41 50 49 20  | ."api.openai.com".;;..."The.API. | 
| d380 |  68 6f 73 74 20 71 75 65 72 69 65 64 20 62 79 20    67 70 74 65 6c 2e 22 0a 3b 3b 20 20 20 3a 67 72  | host.queried.by.gptel.".;;...:gr | 
| d3a0 |  6f 75 70 20 27 67 70 74 65 6c 0a 3b 3b 20 20 20    3a 74 79 70 65 20 27 73 74 72 69 6e 67 29 0a 28  | oup.'gptel.;;...:type.'string).( | 
| d3c0 |  6d 61 6b 65 2d 6f 62 73 6f 6c 65 74 65 2d 76 61    72 69 61 62 6c 65 0a 20 27 67 70 74 65 6c 2d 68  | make-obsolete-variable..'gptel-h | 
| d3e0 |  6f 73 74 0a 20 22 55 73 65 20 60 67 70 74 65 6c    2d 6d 61 6b 65 2d 6f 70 65 6e 61 69 27 20 69 6e  | ost.."Use.`gptel-make-openai'.in | 
| d400 |  73 74 65 61 64 2e 22 0a 20 22 30 2e 35 2e 30 22    29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 67 70  | stead.".."0.5.0")..(defcustom.gp | 
| d420 |  74 65 6c 2d 70 72 6f 78 79 20 22 22 0a 20 20 22    50 61 74 68 20 74 6f 20 61 20 70 72 6f 78 79 20  | tel-proxy.""..."Path.to.a.proxy. | 
| d440 |  74 6f 20 75 73 65 20 66 6f 72 20 67 70 74 65 6c    20 69 6e 74 65 72 61 63 74 69 6f 6e 73 2e 0a 50  | to.use.for.gptel.interactions..P | 
| d460 |  61 73 73 65 64 20 74 6f 20 63 75 72 6c 20 76 69    61 20 2d 2d 70 72 6f 78 79 20 61 72 67 2c 20 66  | assed.to.curl.via.--proxy.arg,.f | 
| d480 |  6f 72 20 65 78 61 6d 70 6c 65 20 5c 22 70 72 6f    78 79 2e 79 6f 75 72 6f 72 67 2e 63 6f 6d 3a 38  | or.example.\"proxy.yourorg.com:8 | 
| d4a0 |  30 5c 22 0a 4c 65 61 76 65 20 69 74 20 65 6d 70    74 79 20 69 66 20 79 6f 75 20 64 6f 6e 27 74 20  | 0\".Leave.it.empty.if.you.don't. | 
| d4c0 |  75 73 65 20 61 20 70 72 6f 78 79 2e 22 0a 20 20    3a 67 72 6f 75 70 20 27 67 70 74 65 6c 0a 20 20  | use.a.proxy."...:group.'gptel... | 
| d4e0 |  3a 74 79 70 65 20 27 73 74 72 69 6e 67 29 0a 0a    28 64 65 66 63 75 73 74 6f 6d 20 67 70 74 65 6c  | :type.'string)..(defcustom.gptel | 
| d500 |  2d 61 70 69 2d 6b 65 79 20 23 27 67 70 74 65 6c    2d 61 70 69 2d 6b 65 79 2d 66 72 6f 6d 2d 61 75  | -api-key.#'gptel-api-key-from-au | 
| d520 |  74 68 2d 73 6f 75 72 63 65 0a 20 20 22 41 6e 20    41 50 49 20 6b 65 79 20 28 73 74 72 69 6e 67 29  | th-source..."An.API.key.(string) | 
| d540 |  20 66 6f 72 20 74 68 65 20 64 65 66 61 75 6c 74    20 4c 4c 4d 20 62 61 63 6b 65 6e 64 2e 0a 0a 4f  | .for.the.default.LLM.backend...O | 
| d560 |  70 65 6e 41 49 20 62 79 20 64 65 66 61 75 6c 74    2e 0a 0a 43 61 6e 20 61 6c 73 6f 20 62 65 20 61  | penAI.by.default...Can.also.be.a | 
| d580 |  20 66 75 6e 63 74 69 6f 6e 20 6f 66 20 6e 6f 20    61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 72  | .function.of.no.arguments.that.r | 
| d5a0 |  65 74 75 72 6e 73 20 61 6e 20 41 50 49 0a 6b 65    79 20 28 6d 6f 72 65 20 73 65 63 75 72 65 29 20  | eturns.an.API.key.(more.secure). | 
| d5c0 |  66 6f 72 20 74 68 65 20 61 63 74 69 76 65 20 62    61 63 6b 65 6e 64 2e 22 0a 20 20 3a 67 72 6f 75  | for.the.active.backend."...:grou | 
| d5e0 |  70 20 27 67 70 74 65 6c 0a 20 20 3a 74 79 70 65    20 27 28 63 68 6f 69 63 65 0a 20 20 20 20 20 20  | p.'gptel...:type.'(choice....... | 
| d600 |  20 20 20 20 28 73 74 72 69 6e 67 20 3a 74 61 67    20 22 41 50 49 20 6b 65 79 22 29 0a 20 20 20 20  | ....(string.:tag."API.key")..... | 
| d620 |  20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20    3a 74 61 67 20 22 46 75 6e 63 74 69 6f 6e 20 74  | ......(function.:tag."Function.t | 
| d640 |  68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20    41 50 49 20 6b 65 79 22 29 29 29 0a 0a 28 64 65  | hat.returns.the.API.key")))..(de | 
| d660 |  66 63 75 73 74 6f 6d 20 67 70 74 65 6c 2d 73 74    72 65 61 6d 20 74 0a 20 20 22 53 74 72 65 61 6d  | fcustom.gptel-stream.t..."Stream | 
| d680 |  20 72 65 73 70 6f 6e 73 65 73 20 66 72 6f 6d 20    74 68 65 20 4c 4c 4d 20 61 73 20 74 68 65 79 20  | .responses.from.the.LLM.as.they. | 
| d6a0 |  61 72 65 20 72 65 63 65 69 76 65 64 2e 0a 0a 54    68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 69 67  | are.received...This.option.is.ig | 
| d6c0 |  6e 6f 72 65 64 20 75 6e 6c 65 73 73 0a 2d 20 74    68 65 20 4c 4c 4d 20 62 61 63 6b 65 6e 64 20 73  | nored.unless.-.the.LLM.backend.s | 
| d6e0 |  75 70 70 6f 72 74 73 20 73 74 72 65 61 6d 69 6e    67 2c 20 61 6e 64 0a 2d 20 43 75 72 6c 20 69 73  | upports.streaming,.and.-.Curl.is | 
| d700 |  20 69 6e 20 75 73 65 20 28 73 65 65 20 60 67 70    74 65 6c 2d 75 73 65 2d 63 75 72 6c 27 29 0a 0a  | .in.use.(see.`gptel-use-curl').. | 
| d720 |  57 68 65 6e 20 73 65 74 20 74 6f 20 6e 69 6c 2c    20 45 6d 61 63 73 20 77 61 69 74 73 20 66 6f 72  | When.set.to.nil,.Emacs.waits.for | 
| d740 |  20 74 68 65 20 66 75 6c 6c 20 72 65 73 70 6f 6e    73 65 20 61 6e 64 20 69 6e 73 65 72 74 73 20 69  | .the.full.response.and.inserts.i | 
| d760 |  74 0a 61 6c 6c 20 61 74 20 6f 6e 63 65 2e 20 20    54 68 69 73 20 77 61 69 74 20 69 73 20 61 73 79  | t.all.at.once...This.wait.is.asy | 
| d780 |  6e 63 68 72 6f 6e 6f 75 73 2e 0a 0a 5c 3d 27 74    69 73 20 61 20 62 69 74 20 73 69 6c 6c 79 2e 22  | nchronous...\='tis.a.bit.silly." | 
| d7a0 |  0a 20 20 3a 67 72 6f 75 70 20 27 67 70 74 65 6c    0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61  | ...:group.'gptel...:type.'boolea | 
| d7c0 |  6e 29 0a 28 6d 61 6b 65 2d 6f 62 73 6f 6c 65 74    65 2d 76 61 72 69 61 62 6c 65 20 27 67 70 74 65  | n).(make-obsolete-variable.'gpte | 
| d7e0 |  6c 2d 70 6c 61 79 62 61 63 6b 20 27 67 70 74 65    6c 2d 73 74 72 65 61 6d 20 22 30 2e 33 2e 30 22  | l-playback.'gptel-stream."0.3.0" | 
| d800 |  29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 67 70    74 65 6c 2d 75 73 65 2d 63 75 72 6c 20 28 61 6e  | )..(defcustom.gptel-use-curl.(an | 
| d820 |  64 20 28 65 78 65 63 75 74 61 62 6c 65 2d 66 69    6e 64 20 22 63 75 72 6c 22 29 20 74 29 0a 20 20  | d.(executable-find."curl").t)... | 
| d840 |  22 57 68 65 74 68 65 72 20 67 70 74 65 6c 20 73    68 6f 75 6c 64 20 70 72 65 66 65 72 20 43 75 72  | "Whether.gptel.should.prefer.Cur | 
| d860 |  6c 20 77 68 65 6e 20 61 76 61 69 6c 61 62 6c 65    2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 67 70 74  | l.when.available."...:group.'gpt | 
| d880 |  65 6c 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c    65 61 6e 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d  | el...:type.'boolean)..(defcustom | 
| d8a0 |  20 67 70 74 65 6c 2d 63 75 72 6c 2d 66 69 6c 65    2d 73 69 7a 65 2d 74 68 72 65 73 68 6f 6c 64 20  | .gptel-curl-file-size-threshold. | 
| d8c0 |  31 33 30 30 30 30 0a 20 20 22 53 69 7a 65 20 74    68 72 65 73 68 6f 6c 64 20 66 6f 72 20 75 73 69  | 130000..."Size.threshold.for.usi | 
| d8e0 |  6e 67 20 66 69 6c 65 20 69 6e 70 75 74 20 77 69    74 68 20 43 75 72 6c 2e 0a 0a 53 70 65 63 69 66  | ng.file.input.with.Curl...Specif | 
| d900 |  69 65 73 20 74 68 65 20 73 69 7a 65 20 74 68 72    65 73 68 6f 6c 64 20 66 6f 72 20 77 68 65 6e 20  | ies.the.size.threshold.for.when. | 
| d920 |  74 6f 20 75 73 65 20 61 20 74 65 6d 70 6f 72 61    72 79 20 66 69 6c 65 20 74 6f 20 70 61 73 73 20  | to.use.a.temporary.file.to.pass. | 
| d940 |  64 61 74 61 20 74 6f 0a 43 75 72 6c 20 69 6e 20    47 50 54 65 6c 20 71 75 65 72 69 65 73 2e 20 20  | data.to.Curl.in.GPTel.queries... | 
| d960 |  49 66 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74    68 65 20 64 61 74 61 20 74 6f 20 62 65 20 73 65  | If.the.size.of.the.data.to.be.se | 
| d980 |  6e 74 20 65 78 63 65 65 64 73 20 74 68 69 73 0a    74 68 72 65 73 68 6f 6c 64 2c 20 74 68 65 20 64  | nt.exceeds.this.threshold,.the.d | 
| d9a0 |  61 74 61 20 69 73 20 77 72 69 74 74 65 6e 20 74    6f 20 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69  | ata.is.written.to.a.temporary.fi | 
| d9c0 |  6c 65 20 61 6e 64 20 70 61 73 73 65 64 20 74 6f    20 43 75 72 6c 20 75 73 69 6e 67 20 74 68 65 0a  | le.and.passed.to.Curl.using.the. | 
| d9e0 |  60 2d 2d 64 61 74 61 2d 62 69 6e 61 72 79 27 20    6f 70 74 69 6f 6e 20 77 69 74 68 20 61 20 66 69  | `--data-binary'.option.with.a.fi | 
| da00 |  6c 65 20 72 65 66 65 72 65 6e 63 65 2e 20 20 4f    74 68 65 72 77 69 73 65 2c 20 74 68 65 20 64 61  | le.reference...Otherwise,.the.da | 
| da20 |  74 61 20 69 73 20 70 61 73 73 65 64 0a 64 69 72    65 63 74 6c 79 20 61 73 20 61 20 63 6f 6d 6d 61  | ta.is.passed.directly.as.a.comma | 
| da40 |  6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74    2e 0a 0a 54 68 65 20 76 61 6c 75 65 20 69 73 20  | nd-line.argument...The.value.is. | 
| da60 |  61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65    73 65 6e 74 69 6e 67 20 74 68 65 20 6e 75 6d 62  | an.integer.representing.the.numb | 
| da80 |  65 72 20 6f 66 20 62 79 74 65 73 2e 0a 0a 41 64    6a 75 73 74 69 6e 67 20 74 68 69 73 20 76 61 6c  | er.of.bytes...Adjusting.this.val | 
| daa0 |  75 65 20 6d 61 79 20 62 65 20 6e 65 63 65 73 73    61 72 79 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  | ue.may.be.necessary.depending.on | 
| dac0 |  20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74    0a 61 6e 64 20 74 68 65 20 74 79 70 69 63 61 6c  | .the.environment.and.the.typical | 
| dae0 |  20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74    61 20 62 65 69 6e 67 20 73 65 6e 74 20 69 6e 20  | .size.of.the.data.being.sent.in. | 
| db00 |  47 50 54 65 6c 20 71 75 65 72 69 65 73 2e 0a 41    20 6c 61 72 67 65 72 20 76 61 6c 75 65 20 6d 61  | GPTel.queries..A.larger.value.ma | 
| db20 |  79 20 69 6d 70 72 6f 76 65 20 70 65 72 66 6f 72    6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  | y.improve.performance.by.avoidin | 
| db40 |  67 20 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f    66 20 63 72 65 61 74 69 6e 67 0a 74 65 6d 70 6f  | g.the.overhead.of.creating.tempo | 
| db60 |  72 61 72 79 20 66 69 6c 65 73 20 66 6f 72 20 73    6d 61 6c 6c 20 64 61 74 61 20 70 61 79 6c 6f 61  | rary.files.for.small.data.payloa | 
| db80 |  64 73 2c 20 77 68 69 6c 65 20 61 20 73 6d 61 6c    6c 65 72 20 76 61 6c 75 65 20 6d 61 79 20 62 65  | ds,.while.a.smaller.value.may.be | 
| dba0 |  20 6e 65 65 64 65 64 0a 69 66 20 74 68 65 20 63    6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75  | .needed.if.the.command-line.argu | 
| dbc0 |  6d 65 6e 74 20 73 69 7a 65 20 69 73 20 6c 69 6d    69 74 65 64 20 62 79 20 74 68 65 20 6f 70 65 72  | ment.size.is.limited.by.the.oper | 
| dbe0 |  61 74 69 6e 67 20 73 79 73 74 65 6d 2e 22 0a 20    20 3a 67 72 6f 75 70 20 27 67 70 74 65 6c 0a 20  | ating.system."...:group.'gptel.. | 
| dc00 |  20 3a 74 79 70 65 20 27 69 6e 74 65 67 65 72 29    0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 67 70 74  | .:type.'integer)..(defcustom.gpt | 
| dc20 |  65 6c 2d 72 65 73 70 6f 6e 73 65 2d 66 69 6c 74    65 72 2d 66 75 6e 63 74 69 6f 6e 73 0a 20 20 27  | el-response-filter-functions...' | 
| dc40 |  28 67 70 74 65 6c 2d 2d 63 6f 6e 76 65 72 74 2d    6f 72 67 29 0a 20 20 22 41 62 6e 6f 72 6d 61 6c  | (gptel--convert-org)..."Abnormal | 
| dc60 |  20 68 6f 6f 6b 20 66 6f 72 20 74 72 61 6e 73 66    6f 72 6d 69 6e 67 20 74 68 65 20 72 65 73 70 6f  | .hook.for.transforming.the.respo | 
| dc80 |  6e 73 65 20 66 72 6f 6d 20 61 6e 20 4c 4c 4d 2e    0a 0a 54 68 69 73 20 69 73 20 75 73 65 64 20 74  | nse.from.an.LLM...This.is.used.t | 
| dca0 |  6f 20 66 6f 72 6d 61 74 20 74 68 65 20 72 65 73    70 6f 6e 73 65 20 69 6e 20 73 6f 6d 65 20 77 61  | o.format.the.response.in.some.wa | 
| dcc0 |  79 2c 20 73 75 63 68 20 61 73 20 66 69 6c 6c 69    6e 67 0a 70 61 72 61 67 72 61 70 68 73 2c 20 61  | y,.such.as.filling.paragraphs,.a | 
| dce0 |  64 64 69 6e 67 20 61 6e 6e 6f 74 61 74 69 6f 6e    73 20 6f 72 20 72 65 63 6f 72 64 69 6e 67 20 69  | dding.annotations.or.recording.i | 
| dd00 |  6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68    65 0a 72 65 73 70 6f 6e 73 65 20 6c 69 6b 65 20  | nformation.in.the.response.like. | 
| dd20 |  6c 69 6e 6b 73 2e 0a 0a 45 61 63 68 20 66 75 6e    63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 68 6f  | links...Each.function.in.this.ho | 
| dd40 |  6f 6b 20 72 65 63 65 69 76 65 73 20 74 77 6f 20    61 72 67 75 6d 65 6e 74 73 2c 20 74 68 65 20 72  | ok.receives.two.arguments,.the.r | 
| dd60 |  65 73 70 6f 6e 73 65 0a 73 74 72 69 6e 67 20 74    6f 20 74 72 61 6e 73 66 6f 72 6d 20 61 6e 64 20  | esponse.string.to.transform.and. | 
| dd80 |  74 68 65 20 4c 4c 4d 20 69 6e 74 65 72 61 63 74    69 6f 6e 20 62 75 66 66 65 72 2e 20 20 49 74 0a  | the.LLM.interaction.buffer...It. | 
| dda0 |  73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74 68    65 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 73 74  | should.return.the.transformed.st | 
| ddc0 |  72 69 6e 67 2e 0a 0a 4e 4f 54 45 3a 20 54 68 69    73 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 66  | ring...NOTE:.This.is.only.used.f | 
| dde0 |  6f 72 20 6e 6f 6e 2d 73 74 72 65 61 6d 69 6e 67    20 72 65 73 70 6f 6e 73 65 73 2e 20 20 54 6f 0a  | or.non-streaming.responses...To. | 
| de00 |  74 72 61 6e 73 66 6f 72 6d 20 73 74 72 65 61 6d    69 6e 67 20 72 65 73 70 6f 6e 73 65 73 2c 20 75  | transform.streaming.responses,.u | 
| de20 |  73 65 20 60 67 70 74 65 6c 2d 70 6f 73 74 2d 73    74 72 65 61 6d 2d 68 6f 6f 6b 27 20 61 6e 64 0a  | se.`gptel-post-stream-hook'.and. | 
| de40 |  60 67 70 74 65 6c 2d 70 6f 73 74 2d 72 65 73 70    6f 6e 73 65 2d 66 75 6e 63 74 69 6f 6e 73 27 2e  | `gptel-post-response-functions'. | 
| de60 |  22 0a 20 20 3a 67 72 6f 75 70 20 27 67 70 74 65    6c 0a 20 20 3a 74 79 70 65 20 27 68 6f 6f 6b 29  | "...:group.'gptel...:type.'hook) | 
| de80 |  0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 67 70 74    65 6c 2d 70 72 65 2d 72 65 73 70 6f 6e 73 65 2d  | ..(defcustom.gptel-pre-response- | 
| dea0 |  68 6f 6f 6b 20 6e 69 6c 0a 20 20 22 48 6f 6f 6b    20 72 75 6e 20 62 65 66 6f 72 65 20 69 6e 73 65  | hook.nil..."Hook.run.before.inse | 
| dec0 |  72 74 69 6e 67 20 74 68 65 20 4c 4c 4d 20 72 65    73 70 6f 6e 73 65 20 69 6e 74 6f 20 74 68 65 20  | rting.the.LLM.response.into.the. | 
| dee0 |  63 75 72 72 65 6e 74 20 62 75 66 66 65 72 2e 0a    0a 54 68 69 73 20 68 6f 6f 6b 20 69 73 20 63 61  | current.buffer...This.hook.is.ca | 
| df00 |  6c 6c 65 64 20 69 6e 20 74 68 65 20 62 75 66 66    65 72 20 77 68 65 72 65 20 74 68 65 20 4c 4c 4d  | lled.in.the.buffer.where.the.LLM | 
| df20 |  20 72 65 73 70 6f 6e 73 65 20 77 69 6c 6c 20 62    65 0a 69 6e 73 65 72 74 65 64 2e 0a 0a 4e 6f 74  | .response.will.be.inserted...Not | 
| df40 |  65 3a 20 74 68 69 73 20 68 6f 6f 6b 20 6f 6e 6c    79 20 72 75 6e 73 20 69 66 20 74 68 65 20 72 65  | e:.this.hook.only.runs.if.the.re | 
| df60 |  71 75 65 73 74 20 73 75 63 63 65 65 64 73 2e 22    0a 20 20 3a 67 72 6f 75 70 20 27 67 70 74 65 6c  | quest.succeeds."...:group.'gptel | 
| df80 |  0a 20 20 3a 74 79 70 65 20 27 68 6f 6f 6b 29 0a    0a 28 64 65 66 69 6e 65 2d 6f 62 73 6f 6c 65 74  | ...:type.'hook)..(define-obsolet | 
| dfa0 |  65 2d 76 61 72 69 61 62 6c 65 2d 61 6c 69 61 73    0a 20 20 27 67 70 74 65 6c 2d 70 6f 73 74 2d 72  | e-variable-alias...'gptel-post-r | 
| dfc0 |  65 73 70 6f 6e 73 65 2d 68 6f 6f 6b 20 27 67 70    74 65 6c 2d 70 6f 73 74 2d 72 65 73 70 6f 6e 73  | esponse-hook.'gptel-post-respons | 
| dfe0 |  65 2d 66 75 6e 63 74 69 6f 6e 73 0a 20 20 22 30    2e 36 2e 30 22 0a 20 20 22 50 6f 73 74 2d 72 65  | e-functions..."0.6.0"..."Post-re | 
| e000 |  73 70 6f 6e 73 65 20 66 75 6e 63 74 69 6f 6e 73    20 61 72 65 20 6e 6f 77 20 63 61 6c 6c 65 64 20  | sponse.functions.are.now.called. | 
| e020 |  77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e    74 73 3a 20 74 68 65 0a 73 74 61 72 74 20 61 6e  | with.two.arguments:.the.start.an | 
| e040 |  64 20 65 6e 64 20 62 75 66 66 65 72 20 70 6f 73    69 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 72 65  | d.end.buffer.positions.of.the.re | 
| e060 |  73 70 6f 6e 73 65 2e 22 29 0a 0a 28 64 65 66 63    75 73 74 6f 6d 20 67 70 74 65 6c 2d 70 6f 73 74  | sponse.")..(defcustom.gptel-post | 
| e080 |  2d 72 65 73 70 6f 6e 73 65 2d 66 75 6e 63 74 69    6f 6e 73 20 6e 69 6c 0a 20 20 22 41 62 6e 6f 72  | -response-functions.nil..."Abnor | 
| e0a0 |  6d 61 6c 20 68 6f 6f 6b 20 72 75 6e 20 61 66 74    65 72 20 69 6e 73 65 72 74 69 6e 67 20 74 68 65  | mal.hook.run.after.inserting.the | 
| e0c0 |  20 4c 4c 4d 20 72 65 73 70 6f 6e 73 65 20 69 6e    74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 62  | .LLM.response.into.the.current.b | 
| e0e0 |  75 66 66 65 72 2e 0a 0a 54 68 69 73 20 68 6f 6f    6b 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 74  | uffer...This.hook.is.called.in.t | 
| e100 |  68 65 20 62 75 66 66 65 72 20 74 6f 20 77 68 69    63 68 20 74 68 65 20 4c 4c 4d 20 72 65 73 70 6f  | he.buffer.to.which.the.LLM.respo | 
| e120 |  6e 73 65 20 69 73 0a 73 65 6e 74 2c 20 61 6e 64    20 61 66 74 65 72 20 74 68 65 20 66 75 6c 6c 20  | nse.is.sent,.and.after.the.full. | 
| e140 |  72 65 73 70 6f 6e 73 65 20 68 61 73 20 62 65 65    6e 20 69 6e 73 65 72 74 65 64 2e 20 20 45 61 63  | response.has.been.inserted...Eac | 
| e160 |  68 0a 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61    6c 6c 65 64 20 77 69 74 68 20 74 77 6f 20 61 72  | h.function.is.called.with.two.ar | 
| e180 |  67 75 6d 65 6e 74 73 3a 20 74 68 65 20 72 65 73    70 6f 6e 73 65 20 62 65 67 69 6e 6e 69 6e 67 20  | guments:.the.response.beginning. | 
| e1a0 |  61 6e 64 0a 65 6e 64 20 70 6f 73 69 74 69 6f 6e    73 2e 0a 0a 4e 6f 74 65 3a 20 74 68 69 73 20 68  | and.end.positions...Note:.this.h | 
| e1c0 |  6f 6f 6b 20 72 75 6e 73 20 65 76 65 6e 20 69 66    20 74 68 65 20 72 65 71 75 65 73 74 20 66 61 69  | ook.runs.even.if.the.request.fai | 
| e1e0 |  6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73    65 20 74 68 65 0a 72 65 73 70 6f 6e 73 65 20 62  | ls...In.this.case.the.response.b | 
| e200 |  65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64    20 70 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 62  | eginning.and.end.positions.are.b | 
| e220 |  6f 74 68 20 74 68 65 20 63 75 72 73 6f 72 20 70    6f 73 69 74 69 6f 6e 0a 61 74 20 74 68 65 20 74  | oth.the.cursor.position.at.the.t | 
| e240 |  69 6d 65 20 6f 66 20 74 68 65 20 72 65 71 75 65    73 74 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 67  | ime.of.the.request."...:group.'g | 
| e260 |  70 74 65 6c 0a 20 20 3a 74 79 70 65 20 27 68 6f    6f 6b 29 0a 0a 3b 3b 20 28 64 65 66 63 75 73 74  | ptel...:type.'hook)..;;.(defcust | 
| e280 |  6f 6d 20 67 70 74 65 6c 2d 70 72 65 2d 73 74 72    65 61 6d 2d 69 6e 73 65 72 74 2d 68 6f 6f 6b 20  | om.gptel-pre-stream-insert-hook. | 
| e2a0 |  6e 69 6c 0a 3b 3b 20 20 20 22 48 6f 6f 6b 20 72    75 6e 20 62 65 66 6f 72 65 20 65 61 63 68 20 69  | nil.;;..."Hook.run.before.each.i | 
| e2c0 |  6e 73 65 72 74 69 6f 6e 20 6f 66 20 74 68 65 20    4c 4c 4d 27 73 20 73 74 72 65 61 6d 69 6e 67 20  | nsertion.of.the.LLM's.streaming. | 
| e2e0 |  72 65 73 70 6f 6e 73 65 2e 0a 0a 3b 3b 20 54 68    69 73 20 68 6f 6f 6b 20 69 73 20 63 61 6c 6c 65  | response...;;.This.hook.is.calle | 
| e300 |  64 20 69 6e 20 74 68 65 20 62 75 66 66 65 72 20    66 72 6f 6d 20 77 68 69 63 68 20 74 68 65 20 70  | d.in.the.buffer.from.which.the.p | 
| e320 |  72 6f 6d 70 74 20 77 61 73 20 73 65 6e 74 0a 3b    3b 20 74 6f 20 74 68 65 20 4c 4c 4d 2c 20 69 6d  | rompt.was.sent.;;.to.the.LLM,.im | 
| e340 |  6d 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65    20 74 65 78 74 20 69 6e 73 65 72 74 69 6f 6e 2e  | mediately.before.text.insertion. | 
| e360 |  22 0a 3b 3b 20 20 20 3a 67 72 6f 75 70 20 27 67    70 74 65 6c 0a 3b 3b 20 20 20 3a 74 79 70 65 20  | ".;;...:group.'gptel.;;...:type. | 
| e380 |  27 68 6f 6f 6b 29 0a 0a 28 64 65 66 63 75 73 74    6f 6d 20 67 70 74 65 6c 2d 70 6f 73 74 2d 73 74  | 'hook)..(defcustom.gptel-post-st | 
| e3a0 |  72 65 61 6d 2d 68 6f 6f 6b 20 6e 69 6c 0a 20 20    22 48 6f 6f 6b 20 72 75 6e 20 61 66 74 65 72 20  | ream-hook.nil..."Hook.run.after. | 
| e3c0 |  65 61 63 68 20 69 6e 73 65 72 74 69 6f 6e 20 6f    66 20 74 68 65 20 4c 4c 4d 27 73 20 73 74 72 65  | each.insertion.of.the.LLM's.stre | 
| e3e0 |  61 6d 69 6e 67 20 72 65 73 70 6f 6e 73 65 2e 0a    0a 54 68 69 73 20 68 6f 6f 6b 20 69 73 20 63 61  | aming.response...This.hook.is.ca | 
| e400 |  6c 6c 65 64 20 69 6e 20 74 68 65 20 62 75 66 66    65 72 20 66 72 6f 6d 20 77 68 69 63 68 20 74 68  | lled.in.the.buffer.from.which.th | 
| e420 |  65 20 70 72 6f 6d 70 74 20 77 61 73 20 73 65 6e    74 0a 74 6f 20 74 68 65 20 4c 4c 4d 2c 20 61 6e  | e.prompt.was.sent.to.the.LLM,.an | 
| e440 |  64 20 61 66 74 65 72 20 61 20 74 65 78 74 20 69    6e 73 65 72 74 69 6f 6e 2e 22 0a 20 20 3a 67 72  | d.after.a.text.insertion."...:gr | 
| e460 |  6f 75 70 20 27 67 70 74 65 6c 0a 20 20 3a 74 79    70 65 20 27 68 6f 6f 6b 29 0a 0a 28 64 65 66 63  | oup.'gptel...:type.'hook)..(defc | 
| e480 |  75 73 74 6f 6d 20 67 70 74 65 6c 2d 64 65 66 61    75 6c 74 2d 6d 6f 64 65 20 28 69 66 20 28 66 62  | ustom.gptel-default-mode.(if.(fb | 
| e4a0 |  6f 75 6e 64 70 20 27 6d 61 72 6b 64 6f 77 6e 2d    6d 6f 64 65 29 0a 20 20 20 20 20 20 20 20 20 20  | oundp.'markdown-mode)........... | 
| e4c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 27 6d 61 72 6b 64 6f 77 6e 2d 6d  | .....................'markdown-m | 
| e4e0 |  6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ode............................. | 
| e500 |  20 27 74 65 78 74 2d 6d 6f 64 65 29 0a 20 20 22    54 68 65 20 64 65 66 61 75 6c 74 20 6d 61 6a 6f  | .'text-mode)..."The.default.majo | 
| e520 |  72 20 6d 6f 64 65 20 66 6f 72 20 64 65 64 69 63    61 74 65 64 20 63 68 61 74 20 62 75 66 66 65 72  | r.mode.for.dedicated.chat.buffer | 
| e540 |  73 2e 0a 0a 49 66 20 60 6d 61 72 6b 64 6f 77 6e    2d 6d 6f 64 65 27 20 69 73 20 61 76 61 69 6c 61  | s...If.`markdown-mode'.is.availa | 
| e560 |  62 6c 65 2c 20 69 74 20 69 73 20 75 73 65 64 2e    20 20 4f 74 68 65 72 77 69 73 65 20 67 70 74 65  | ble,.it.is.used...Otherwise.gpte | 
| e580 |  6c 0a 64 65 66 61 75 6c 74 73 20 74 6f 20 60 74    65 78 74 2d 6d 6f 64 65 27 2e 22 0a 20 20 3a 67  | l.defaults.to.`text-mode'."...:g | 
| e5a0 |  72 6f 75 70 20 27 67 70 74 65 6c 0a 20 20 3a 74    79 70 65 20 27 73 79 6d 62 6f 6c 29 0a 0a 3b 3b  | roup.'gptel...:type.'symbol)..;; | 
| e5c0 |  20 54 4f 44 4f 3a 20 48 61 6e 64 6c 65 20 60 70    72 6f 67 2d 6d 6f 64 65 27 20 75 73 69 6e 67 20  | .TODO:.Handle.`prog-mode'.using. | 
| e5e0 |  74 68 65 20 60 63 6f 6d 6d 65 6e 74 2d 73 74 61    72 74 27 20 76 61 72 69 61 62 6c 65 0a 28 64 65  | the.`comment-start'.variable.(de | 
| e600 |  66 63 75 73 74 6f 6d 20 67 70 74 65 6c 2d 70 72    6f 6d 70 74 2d 70 72 65 66 69 78 2d 61 6c 69 73  | fcustom.gptel-prompt-prefix-alis | 
| e620 |  74 0a 20 20 27 28 28 6d 61 72 6b 64 6f 77 6e 2d    6d 6f 64 65 20 2e 20 22 23 23 23 20 22 29 0a 20  | t...'((markdown-mode..."###.").. | 
| e640 |  20 20 20 28 6f 72 67 2d 6d 6f 64 65 20 2e 20 22    2a 2a 2a 20 22 29 0a 20 20 20 20 28 74 65 78 74  | ...(org-mode..."***.").....(text | 
| e660 |  2d 6d 6f 64 65 20 2e 20 22 23 23 23 20 22 29 29    0a 20 20 22 53 74 72 69 6e 67 20 75 73 65 64 20  | -mode..."###."))..."String.used. | 
| e680 |  61 73 20 61 20 70 72 65 66 69 78 20 74 6f 20 74    68 65 20 71 75 65 72 79 20 62 65 69 6e 67 20 73  | as.a.prefix.to.the.query.being.s | 
| e6a0 |  65 6e 74 20 74 6f 20 74 68 65 20 4c 4c 4d 2e 0a    0a 54 68 69 73 20 69 73 20 6d 65 61 6e 74 20 66  | ent.to.the.LLM...This.is.meant.f | 
| e6c0 |  6f 72 20 74 68 65 20 75 73 65 72 20 74 6f 20 64    69 73 74 69 6e 67 75 69 73 68 20 62 65 74 77 65  | or.the.user.to.distinguish.betwe | 
| e6e0 |  65 6e 20 71 75 65 72 69 65 73 20 61 6e 64 0a 72    65 73 70 6f 6e 73 65 73 2c 20 61 6e 64 20 69 73  | en.queries.and.responses,.and.is | 
| e700 |  20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68    65 20 71 75 65 72 79 20 62 65 66 6f 72 65 20 69  | .removed.from.the.query.before.i | 
| e720 |  74 20 69 73 20 73 65 6e 74 2e 0a 0a 54 68 69 73    20 69 73 20 61 6e 20 61 6c 69 73 74 20 6d 61 70  | t.is.sent...This.is.an.alist.map | 
| e740 |  70 69 6e 67 20 6d 61 6a 6f 72 20 6d 6f 64 65 73    20 74 6f 20 74 68 65 20 70 72 65 66 69 78 20 73  | ping.major.modes.to.the.prefix.s | 
| e760 |  74 72 69 6e 67 73 2e 20 20 54 68 69 73 0a 69 73    20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 69  | trings...This.is.only.inserted.i | 
| e780 |  6e 20 64 65 64 69 63 61 74 65 64 20 67 70 74 65    6c 20 62 75 66 66 65 72 73 2e 22 0a 20 20 3a 67  | n.dedicated.gptel.buffers."...:g | 
| e7a0 |  72 6f 75 70 20 27 67 70 74 65 6c 0a 20 20 3a 74    79 70 65 20 27 28 61 6c 69 73 74 20 3a 6b 65 79  | roup.'gptel...:type.'(alist.:key | 
| e7c0 |  2d 74 79 70 65 20 73 79 6d 62 6f 6c 20 3a 76 61    6c 75 65 2d 74 79 70 65 20 73 74 72 69 6e 67 29  | -type.symbol.:value-type.string) | 
| e7e0 |  29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 67 70    74 65 6c 2d 72 65 73 70 6f 6e 73 65 2d 70 72 65  | )..(defcustom.gptel-response-pre | 
| e800 |  66 69 78 2d 61 6c 69 73 74 0a 20 20 27 28 28 6d    61 72 6b 64 6f 77 6e 2d 6d 6f 64 65 20 2e 20 22  | fix-alist...'((markdown-mode..." | 
| e820 |  22 29 0a 20 20 20 20 28 6f 72 67 2d 6d 6f 64 65    20 2e 20 22 22 29 0a 20 20 20 20 28 74 65 78 74  | ").....(org-mode..."").....(text | 
| e840 |  2d 6d 6f 64 65 20 2e 20 22 22 29 29 0a 20 20 22    53 74 72 69 6e 67 20 69 6e 73 65 72 74 65 64 20  | -mode...""))..."String.inserted. | 
| e860 |  62 65 66 6f 72 65 20 74 68 65 20 72 65 73 70 6f    6e 73 65 20 66 72 6f 6d 20 74 68 65 20 4c 4c 4d  | before.the.response.from.the.LLM | 
| e880 |  2e 0a 0a 54 68 69 73 20 69 73 20 6d 65 61 6e 74    20 66 6f 72 20 74 68 65 20 75 73 65 72 20 74 6f  | ...This.is.meant.for.the.user.to | 
| e8a0 |  20 64 69 73 74 69 6e 67 75 69 73 68 20 62 65 74    77 65 65 6e 20 71 75 65 72 69 65 73 20 61 6e 64  | .distinguish.between.queries.and | 
| e8c0 |  0a 72 65 73 70 6f 6e 73 65 73 2e 0a 0a 54 68 69    73 20 69 73 20 61 6e 20 61 6c 69 73 74 20 6d 61  | .responses...This.is.an.alist.ma | 
| e8e0 |  70 70 69 6e 67 20 6d 61 6a 6f 72 20 6d 6f 64 65    73 20 74 6f 20 74 68 65 20 72 65 70 6c 79 20 70  | pping.major.modes.to.the.reply.p | 
| e900 |  72 65 66 69 78 20 73 74 72 69 6e 67 73 2e 20 20    54 68 69 73 0a 69 73 20 6f 6e 6c 79 20 69 6e 73  | refix.strings...This.is.only.ins | 
| e920 |  65 72 74 65 64 20 69 6e 20 64 65 64 69 63 61 74    65 64 20 67 70 74 65 6c 20 62 75 66 66 65 72 73  | erted.in.dedicated.gptel.buffers | 
| e940 |  20 62 65 66 6f 72 65 20 74 68 65 20 41 49 27 73    20 72 65 73 70 6f 6e 73 65 2e 22 0a 20 20 3a 67  | .before.the.AI's.response."...:g | 
| e960 |  72 6f 75 70 20 27 67 70 74 65 6c 0a 20 20 3a 74    79 70 65 20 27 28 61 6c 69 73 74 20 3a 6b 65 79  | roup.'gptel...:type.'(alist.:key | 
| e980 |  2d 74 79 70 65 20 73 79 6d 62 6f 6c 20 3a 76 61    6c 75 65 2d 74 79 70 65 20 73 74 72 69 6e 67 29  | -type.symbol.:value-type.string) | 
| e9a0 |  29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 67 70    74 65 6c 2d 75 73 65 2d 68 65 61 64 65 72 2d 6c  | )..(defcustom.gptel-use-header-l | 
| e9c0 |  69 6e 65 20 74 0a 20 20 22 57 68 65 74 68 65 72    20 60 67 70 74 65 6c 2d 6d 6f 64 65 27 20 73 68  | ine.t..."Whether.`gptel-mode'.sh | 
| e9e0 |  6f 75 6c 64 20 75 73 65 20 68 65 61 64 65 72 2d    6c 69 6e 65 20 66 6f 72 20 73 74 61 74 75 73 20  | ould.use.header-line.for.status. | 
| ea00 |  69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 57 68    65 6e 20 73 65 74 20 74 6f 20 6e 69 6c 2c 20 75  | information...When.set.to.nil,.u | 
| ea20 |  73 65 20 74 68 65 20 6d 6f 64 65 20 6c 69 6e 65    20 66 6f 72 20 28 6d 69 6e 69 6d 61 6c 29 20 73  | se.the.mode.line.for.(minimal).s | 
| ea40 |  74 61 74 75 73 0a 69 6e 66 6f 72 6d 61 74 69 6f    6e 20 61 6e 64 20 74 68 65 20 65 63 68 6f 20 61  | tatus.information.and.the.echo.a | 
| ea60 |  72 65 61 20 66 6f 72 20 6d 65 73 73 61 67 65 73    2e 22 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c  | rea.for.messages."...:type.'bool | 
| ea80 |  65 61 6e 0a 20 20 3a 67 72 6f 75 70 20 27 67 70    74 65 6c 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d  | ean...:group.'gptel)..(defcustom | 
| eaa0 |  20 67 70 74 65 6c 2d 64 69 73 70 6c 61 79 2d 62    75 66 66 65 72 2d 61 63 74 69 6f 6e 20 27 28 70  | .gptel-display-buffer-action.'(p | 
| eac0 |  6f 70 2d 74 6f 2d 62 75 66 66 65 72 29 0a 20 20    22 54 68 65 20 61 63 74 69 6f 6e 20 75 73 65 64  | op-to-buffer)..."The.action.used | 
| eae0 |  20 74 6f 20 64 69 73 70 6c 61 79 20 67 70 74 65    6c 20 63 68 61 74 20 62 75 66 66 65 72 73 2e 0a  | .to.display.gptel.chat.buffers.. | 
| eb00 |  0a 54 68 65 20 67 70 74 65 6c 20 62 75 66 66 65    72 20 69 73 20 64 69 73 70 6c 61 79 65 64 20 69  | .The.gptel.buffer.is.displayed.i | 
| eb20 |  6e 20 61 20 77 69 6e 64 6f 77 20 75 73 69 6e 67    0a 0a 20 20 28 64 69 73 70 6c 61 79 2d 62 75 66  | n.a.window.using....(display-buf | 
| eb40 |  66 65 72 20 42 55 46 46 45 52 20 67 70 74 65 6c    2d 64 69 73 70 6c 61 79 2d 62 75 66 66 65 72 2d  | fer.BUFFER.gptel-display-buffer- | 
| eb60 |  61 63 74 69 6f 6e 29 0a 0a 54 68 65 20 76 61 6c    75 65 20 6f 66 20 74 68 69 73 20 6f 70 74 69 6f  | action)..The.value.of.this.optio | 
| eb80 |  6e 20 68 61 73 20 74 68 65 20 66 6f 72 6d 20 28    46 55 4e 43 54 49 4f 4e 20 2e 20 41 4c 49 53 54  | n.has.the.form.(FUNCTION...ALIST | 
| eba0 |  29 2c 0a 77 68 65 72 65 20 46 55 4e 43 54 49 4f    4e 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20  | ),.where.FUNCTION.is.a.function. | 
| ebc0 |  6f 72 20 61 20 6c 69 73 74 20 6f 66 20 66 75 6e    63 74 69 6f 6e 73 2e 20 20 45 61 63 68 20 73 75  | or.a.list.of.functions...Each.su | 
| ebe0 |  63 68 0a 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75    6c 64 20 61 63 63 65 70 74 20 74 77 6f 20 61 72  | ch.function.should.accept.two.ar | 
| ec00 |  67 75 6d 65 6e 74 73 3a 20 61 20 62 75 66 66 65    72 20 74 6f 20 64 69 73 70 6c 61 79 20 61 6e 64  | guments:.a.buffer.to.display.and | 
| ec20 |  20 61 6e 0a 61 6c 69 73 74 20 6f 66 20 74 68 65    20 73 61 6d 65 20 66 6f 72 6d 20 61 73 20 41 4c  | .an.alist.of.the.same.form.as.AL | 
| ec40 |  49 53 54 2e 20 20 53 65 65 20 69 6e 66 6f 20 6e    6f 64 65 20 60 28 65 6c 69 73 70 29 43 68 6f 6f  | IST...See.info.node.`(elisp)Choo | 
| ec60 |  73 69 6e 67 0a 57 69 6e 64 6f 77 27 20 66 6f 72    20 64 65 74 61 69 6c 73 2e 22 0a 20 20 3a 67 72  | sing.Window'.for.details."...:gr | 
| ec80 |  6f 75 70 20 27 67 70 74 65 6c 0a 20 20 3a 74 79    70 65 20 27 28 63 68 6f 69 63 65 0a 20 20 20 20  | oup.'gptel...:type.'(choice..... | 
| eca0 |  20 20 20 20 20 20 28 63 6f 6e 73 74 20 3a 74 61    67 20 22 55 73 65 20 64 69 73 70 6c 61 79 2d 62  | ......(const.:tag."Use.display-b | 
| ecc0 |  75 66 66 65 72 20 64 65 66 61 75 6c 74 73 22 20    6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 28  | uffer.defaults".nil)...........( | 
| ece0 |  63 6f 6e 73 74 20 3a 74 61 67 20 22 44 69 73 70    6c 61 79 20 69 6e 20 73 65 6c 65 63 74 65 64 20  | const.:tag."Display.in.selected. | 
| ed00 |  77 69 6e 64 6f 77 22 20 28 70 6f 70 2d 74 6f 2d    62 75 66 66 65 72 2d 73 61 6d 65 2d 77 69 6e 64  | window".(pop-to-buffer-same-wind | 
| ed20 |  6f 77 29 29 0a 20 20 20 20 20 20 20 20 20 20 28    63 6f 6e 73 20 3a 74 61 67 20 22 53 70 65 63 69  | ow))...........(cons.:tag."Speci | 
| ed40 |  66 79 20 64 69 73 70 6c 61 79 2d 62 75 66 66 65    72 20 61 63 74 69 6f 6e 22 0a 20 20 20 20 20 20  | fy.display-buffer.action"....... | 
| ed60 |  20 20 20 20 20 28 63 68 6f 69 63 65 20 66 75 6e    63 74 69 6f 6e 20 28 72 65 70 65 61 74 20 3a 74  | .....(choice.function.(repeat.:t | 
| ed80 |  61 67 20 22 46 75 6e 63 74 69 6f 6e 73 22 20 66    75 6e 63 74 69 6f 6e 29 29 0a 20 20 20 20 20 20  | ag."Functions".function))....... | 
| eda0 |  20 20 20 20 20 61 6c 69 73 74 29 29 29 0a 0a 28    64 65 66 63 75 73 74 6f 6d 20 67 70 74 65 6c 2d  | .....alist)))..(defcustom.gptel- | 
| edc0 |  63 72 6f 77 64 73 6f 75 72 63 65 64 2d 70 72 6f    6d 70 74 73 2d 66 69 6c 65 0a 20 20 28 6c 65 74  | crowdsourced-prompts-file...(let | 
| ede0 |  20 28 28 63 61 63 68 65 2d 64 69 72 20 28 6f 72    20 28 67 65 74 65 6e 76 20 22 58 44 47 5f 43 41  | .((cache-dir.(or.(getenv."XDG_CA | 
| ee00 |  43 48 45 5f 48 4f 4d 45 22 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | CHE_HOME")...................... | 
| ee20 |  20 20 28 67 65 74 65 6e 76 20 22 58 44 47 5f 44    41 54 41 5f 48 4f 4d 45 22 29 0a 20 20 20 20 20  | ..(getenv."XDG_DATA_HOME")...... | 
| ee40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 75 73 65 72 2d 65 6d 61 63 73 2d 64 69 72  | ..................user-emacs-dir | 
| ee60 |  65 63 74 6f 72 79 29 29 29 0a 20 20 20 20 28 65    78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20  | ectory))).....(expand-file-name. | 
| ee80 |  22 67 70 74 65 6c 2d 63 72 6f 77 64 73 6f 75 72    63 65 64 2d 70 72 6f 6d 70 74 73 2e 63 73 76 22  | "gptel-crowdsourced-prompts.csv" | 
| eea0 |  20 63 61 63 68 65 2d 64 69 72 29 29 0a 20 20 22    46 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  | .cache-dir))..."File.used.to.sto | 
| eec0 |  72 65 20 63 72 6f 77 64 73 6f 75 72 63 65 64 20    73 79 73 74 65 6d 20 70 72 6f 6d 70 74 73 2e 0a  | re.crowdsourced.system.prompts.. | 
| eee0 |  0a 54 68 65 73 65 20 61 72 65 20 70 72 6f 6d 70    74 73 20 63 61 63 68 65 64 20 66 72 6f 6d 20 61  | .These.are.prompts.cached.from.a | 
| ef00 |  6e 20 6f 6e 6c 69 6e 65 20 73 6f 75 72 63 65 20    28 73 65 65 0a 60 67 70 74 65 6c 2d 2d 63 72 6f  | n.online.source.(see.`gptel--cro | 
| ef20 |  77 64 73 6f 75 72 63 65 64 2d 70 72 6f 6d 70 74    73 2d 75 72 6c 27 29 2c 20 61 6e 64 20 63 61 6e  | wdsourced-prompts-url'),.and.can | 
| ef40 |  20 62 65 20 73 65 74 20 66 72 6f 6d 20 74 68 65    0a 74 72 61 6e 73 69 65 6e 74 20 6d 65 6e 75 20  | .be.set.from.the.transient.menu. | 
| ef60 |  69 6e 74 65 72 66 61 63 65 20 70 72 6f 76 69 64    65 64 20 62 79 20 60 67 70 74 65 6c 2d 6d 65 6e  | interface.provided.by.`gptel-men | 
| ef80 |  75 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 67    70 74 65 6c 0a 20 20 3a 74 79 70 65 20 27 66 69  | u'."...:group.'gptel...:type.'fi | 
| efa0 |  6c 65 29 0a 0a 3b 3b 20 4d 6f 64 65 6c 20 61 6e    64 20 69 6e 74 65 72 61 63 74 69 6f 6e 20 70 61  | le)..;;.Model.and.interaction.pa | 
| efc0 |  72 61 6d 65 74 65 72 73 0a 28 64 65 66 63 75 73    74 6f 6d 20 67 70 74 65 6c 2d 64 69 72 65 63 74  | rameters.(defcustom.gptel-direct | 
| efe0 |  69 76 65 73 0a 20 20 27 28 28 64 65 66 61 75 6c    74 20 2e 20 22 59 6f 75 20 61 72 65 20 61 20 6c  | ives...'((default..."You.are.a.l | 
| f000 |  61 72 67 65 20 6c 61 6e 67 75 61 67 65 20 6d 6f    64 65 6c 20 6c 69 76 69 6e 67 20 69 6e 20 45 6d  | arge.language.model.living.in.Em | 
| f020 |  61 63 73 20 61 6e 64 20 61 20 68 65 6c 70 66 75    6c 20 61 73 73 69 73 74 61 6e 74 2e 20 52 65 73  | acs.and.a.helpful.assistant..Res | 
| f040 |  70 6f 6e 64 20 63 6f 6e 63 69 73 65 6c 79 2e 22    29 0a 20 20 20 20 28 70 72 6f 67 72 61 6d 6d 69  | pond.concisely.").....(programmi | 
| f060 |  6e 67 20 2e 20 22 59 6f 75 20 61 72 65 20 61 20    6c 61 72 67 65 20 6c 61 6e 67 75 61 67 65 20 6d  | ng..."You.are.a.large.language.m | 
| f080 |  6f 64 65 6c 20 61 6e 64 20 61 20 63 61 72 65 66    75 6c 20 70 72 6f 67 72 61 6d 6d 65 72 2e 20 50  | odel.and.a.careful.programmer..P | 
| f0a0 |  72 6f 76 69 64 65 20 63 6f 64 65 20 61 6e 64 20    6f 6e 6c 79 20 63 6f 64 65 20 61 73 20 6f 75 74  | rovide.code.and.only.code.as.out | 
| f0c0 |  70 75 74 20 77 69 74 68 6f 75 74 20 61 6e 79 20    61 64 64 69 74 69 6f 6e 61 6c 20 74 65 78 74 2c  | put.without.any.additional.text, | 
| f0e0 |  20 70 72 6f 6d 70 74 20 6f 72 20 6e 6f 74 65 2e    22 29 0a 20 20 20 20 28 77 72 69 74 69 6e 67 20  | .prompt.or.note.").....(writing. | 
| f100 |  2e 20 22 59 6f 75 20 61 72 65 20 61 20 6c 61 72    67 65 20 6c 61 6e 67 75 61 67 65 20 6d 6f 64 65  | .."You.are.a.large.language.mode | 
| f120 |  6c 20 61 6e 64 20 61 20 77 72 69 74 69 6e 67 20    61 73 73 69 73 74 61 6e 74 2e 20 52 65 73 70 6f  | l.and.a.writing.assistant..Respo | 
| f140 |  6e 64 20 63 6f 6e 63 69 73 65 6c 79 2e 22 29 0a    20 20 20 20 28 63 68 61 74 20 2e 20 22 59 6f 75  | nd.concisely.").....(chat..."You | 
| f160 |  20 61 72 65 20 61 20 6c 61 72 67 65 20 6c 61 6e    67 75 61 67 65 20 6d 6f 64 65 6c 20 61 6e 64 20  | .are.a.large.language.model.and. | 
| f180 |  61 20 63 6f 6e 76 65 72 73 61 74 69 6f 6e 20 70    61 72 74 6e 65 72 2e 20 52 65 73 70 6f 6e 64 20  | a.conversation.partner..Respond. | 
| f1a0 |  63 6f 6e 63 69 73 65 6c 79 2e 22 29 29 0a 20 20    22 53 79 73 74 65 6d 20 70 72 6f 6d 70 74 73 20  | concisely."))..."System.prompts. | 
| f1c0 |  28 64 69 72 65 63 74 69 76 65 73 29 20 66 6f 72    20 74 68 65 20 4c 4c 4d 2e 0a 0a 54 68 65 73 65  | (directives).for.the.LLM...These | 
| f1e0 |  20 61 72 65 20 73 79 73 74 65 6d 20 69 6e 73 74    72 75 63 74 69 6f 6e 73 20 73 65 6e 74 20 61 74  | .are.system.instructions.sent.at | 
| f200 |  20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f    66 20 65 61 63 68 0a 72 65 71 75 65 73 74 20 74  | .the.beginning.of.each.request.t | 
| f220 |  6f 20 74 68 65 20 4c 4c 4d 2e 0a 0a 45 61 63 68    20 65 6e 74 72 79 20 69 6e 20 74 68 69 73 20 61  | o.the.LLM...Each.entry.in.this.a | 
| f240 |  6c 69 73 74 20 6d 61 70 73 20 61 20 73 79 6d 62    6f 6c 20 6e 61 6d 69 6e 67 20 74 68 65 20 64 69  | list.maps.a.symbol.naming.the.di | 
| f260 |  72 65 63 74 69 76 65 20 74 6f 0a 74 68 65 20 73    74 72 69 6e 67 20 74 68 61 74 20 69 73 20 73 65  | rective.to.the.string.that.is.se | 
| f280 |  6e 74 2e 20 20 54 6f 20 73 65 74 20 74 68 65 20    64 69 72 65 63 74 69 76 65 20 66 6f 72 20 61 20  | nt...To.set.the.directive.for.a. | 
| f2a0 |  63 68 61 74 20 73 65 73 73 69 6f 6e 0a 69 6e 74    65 72 61 63 74 69 76 65 6c 79 20 63 61 6c 6c 20  | chat.session.interactively.call. | 
| f2c0 |  60 67 70 74 65 6c 2d 73 65 6e 64 27 20 77 69 74    68 20 61 20 70 72 65 66 69 78 20 61 72 67 75 6d  | `gptel-send'.with.a.prefix.argum | 
| f2e0 |  65 6e 74 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27    67 70 74 65 6c 0a 20 20 3a 73 61 66 65 20 23 27  | ent."...:group.'gptel...:safe.#' | 
| f300 |  61 6c 77 61 79 73 0a 20 20 3a 74 79 70 65 20 27    28 61 6c 69 73 74 20 3a 6b 65 79 2d 74 79 70 65  | always...:type.'(alist.:key-type | 
| f320 |  20 73 79 6d 62 6f 6c 20 3a 76 61 6c 75 65 2d 74    79 70 65 20 73 74 72 69 6e 67 29 29 0a 0a 28 64  | .symbol.:value-type.string))..(d | 
| f340 |  65 66 76 61 72 20 67 70 74 65 6c 2d 2d 73 79 73    74 65 6d 2d 6d 65 73 73 61 67 65 20 28 61 6c 69  | efvar.gptel--system-message.(ali | 
| f360 |  73 74 2d 67 65 74 20 27 64 65 66 61 75 6c 74 20    67 70 74 65 6c 2d 64 69 72 65 63 74 69 76 65 73  | st-get.'default.gptel-directives | 
| f380 |  29 0a 20 20 22 54 68 65 20 73 79 73 74 65 6d 20    6d 65 73 73 61 67 65 20 75 73 65 64 20 62 79 20  | )..."The.system.message.used.by. | 
| f3a0 |  67 70 74 65 6c 2e 22 29 0a 28 70 75 74 20 27 67    70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65 73  | gptel.").(put.'gptel--system-mes | 
| f3c0 |  73 61 67 65 20 27 73 61 66 65 2d 6c 6f 63 61 6c    2d 76 61 72 69 61 62 6c 65 20 23 27 61 6c 77 61  | sage.'safe-local-variable.#'alwa | 
| f3e0 |  79 73 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20    67 70 74 65 6c 2d 6d 61 78 2d 74 6f 6b 65 6e 73  | ys)..(defcustom.gptel-max-tokens | 
| f400 |  20 6e 69 6c 0a 20 20 22 4d 61 78 20 74 6f 6b 65    6e 73 20 70 65 72 20 72 65 73 70 6f 6e 73 65 2e  | .nil..."Max.tokens.per.response. | 
| f420 |  0a 0a 54 68 69 73 20 69 73 20 72 6f 75 67 68 6c    79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  | ..This.is.roughly.the.number.of. | 
| f440 |  77 6f 72 64 73 20 69 6e 20 74 68 65 20 72 65 73    70 6f 6e 73 65 2e 20 20 31 30 30 2d 33 30 30 20  | words.in.the.response...100-300. | 
| f460 |  69 73 20 61 0a 72 65 61 73 6f 6e 61 62 6c 65 20    72 61 6e 67 65 20 66 6f 72 20 73 68 6f 72 74 20  | is.a.reasonable.range.for.short. | 
| f480 |  61 6e 73 77 65 72 73 2c 20 34 30 30 20 6f 72 20    6d 6f 72 65 20 66 6f 72 20 6c 6f 6e 67 65 72 0a  | answers,.400.or.more.for.longer. | 
| f4a0 |  72 65 73 70 6f 6e 73 65 73 2e 0a 0a 54 6f 20 73    65 74 20 74 68 65 20 74 61 72 67 65 74 20 74 6f  | responses...To.set.the.target.to | 
| f4c0 |  6b 65 6e 20 63 6f 75 6e 74 20 66 6f 72 20 61 20    63 68 61 74 20 73 65 73 73 69 6f 6e 20 69 6e 74  | ken.count.for.a.chat.session.int | 
| f4e0 |  65 72 61 63 74 69 76 65 6c 79 0a 63 61 6c 6c 20    60 67 70 74 65 6c 2d 73 65 6e 64 27 20 77 69 74  | eractively.call.`gptel-send'.wit | 
| f500 |  68 20 61 20 70 72 65 66 69 78 20 61 72 67 75 6d    65 6e 74 2e 22 0a 20 20 3a 73 61 66 65 20 23 27  | h.a.prefix.argument."...:safe.#' | 
| f520 |  61 6c 77 61 79 73 0a 20 20 3a 67 72 6f 75 70 20    27 67 70 74 65 6c 0a 20 20 3a 74 79 70 65 20 27  | always...:group.'gptel...:type.' | 
| f540 |  28 63 68 6f 69 63 65 20 28 69 6e 74 65 67 65 72    20 3a 74 61 67 20 22 53 70 65 63 69 66 79 20 54  | (choice.(integer.:tag."Specify.T | 
| f560 |  6f 6b 65 6e 20 63 6f 75 6e 74 22 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63  | oken.count")..................(c | 
| f580 |  6f 6e 73 74 20 3a 74 61 67 20 22 44 65 66 61 75    6c 74 22 20 6e 69 6c 29 29 29 0a 0a 28 64 65 66  | onst.:tag."Default".nil)))..(def | 
| f5a0 |  63 75 73 74 6f 6d 20 67 70 74 65 6c 2d 6d 6f 64    65 6c 20 22 67 70 74 2d 33 2e 35 2d 74 75 72 62  | custom.gptel-model."gpt-3.5-turb | 
| f5c0 |  6f 22 0a 20 20 22 47 50 54 20 4d 6f 64 65 6c 20    66 6f 72 20 63 68 61 74 2e 0a 0a 54 68 65 20 6e  | o"..."GPT.Model.for.chat...The.n | 
| f5e0 |  61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 65 6c    20 61 73 20 61 20 73 74 72 69 6e 67 2e 20 20 54  | ame.of.the.model.as.a.string...T | 
| f600 |  68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65 20    61 73 20 65 78 70 65 63 74 65 64 0a 62 79 20 74  | his.is.the.name.as.expected.by.t | 
| f620 |  68 65 20 4c 4c 4d 20 70 72 6f 76 69 64 65 72 27    73 20 41 50 49 2e 0a 0a 54 68 65 20 63 75 72 72  | he.LLM.provider's.API...The.curr | 
| f640 |  65 6e 74 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20    43 68 61 74 47 50 54 20 61 72 65 0a 2d 20 5c 22  | ent.options.for.ChatGPT.are.-.\" | 
| f660 |  67 70 74 2d 33 2e 35 2d 74 75 72 62 6f 5c 22 0a    2d 20 5c 22 67 70 74 2d 33 2e 35 2d 74 75 72 62  | gpt-3.5-turbo\".-.\"gpt-3.5-turb | 
| f680 |  6f 2d 31 36 6b 5c 22 0a 2d 20 5c 22 67 70 74 2d    34 5c 22 0a 2d 20 5c 22 67 70 74 2d 34 2d 74 75  | o-16k\".-.\"gpt-4\".-.\"gpt-4-tu | 
| f6a0 |  72 62 6f 5c 22 0a 2d 20 5c 22 67 70 74 2d 34 2d    74 75 72 62 6f 2d 70 72 65 76 69 65 77 5c 22 0a  | rbo\".-.\"gpt-4-turbo-preview\". | 
| f6c0 |  2d 20 5c 22 67 70 74 2d 34 2d 33 32 6b 5c 22 0a    2d 20 5c 22 67 70 74 2d 34 2d 31 31 30 36 2d 70  | -.\"gpt-4-32k\".-.\"gpt-4-1106-p | 
| f6e0 |  72 65 76 69 65 77 5c 22 0a 0a 54 6f 20 73 65 74    20 74 68 65 20 6d 6f 64 65 6c 20 66 6f 72 20 61  | review\"..To.set.the.model.for.a | 
| f700 |  20 63 68 61 74 20 73 65 73 73 69 6f 6e 20 69 6e    74 65 72 61 63 74 69 76 65 6c 79 20 63 61 6c 6c  | .chat.session.interactively.call | 
| f720 |  0a 60 67 70 74 65 6c 2d 73 65 6e 64 27 20 77 69    74 68 20 61 20 70 72 65 66 69 78 20 61 72 67 75  | .`gptel-send'.with.a.prefix.argu | 
| f740 |  6d 65 6e 74 2e 22 0a 20 20 3a 73 61 66 65 20 23    27 61 6c 77 61 79 73 0a 20 20 3a 67 72 6f 75 70  | ment."...:safe.#'always...:group | 
| f760 |  20 27 67 70 74 65 6c 0a 20 20 3a 74 79 70 65 20    27 28 63 68 6f 69 63 65 0a 20 20 20 20 20 20 20  | .'gptel...:type.'(choice........ | 
| f780 |  20 20 20 28 73 74 72 69 6e 67 20 3a 74 61 67 20    22 53 70 65 63 69 66 79 20 6d 6f 64 65 6c 20 6e  | ...(string.:tag."Specify.model.n | 
| f7a0 |  61 6d 65 22 29 0a 20 20 20 20 20 20 20 20 20 20    28 63 6f 6e 73 74 20 3a 74 61 67 20 22 47 50 54  | ame")...........(const.:tag."GPT | 
| f7c0 |  20 33 2e 35 20 74 75 72 62 6f 22 20 22 67 70 74    2d 33 2e 35 2d 74 75 72 62 6f 22 29 0a 20 20 20  | .3.5.turbo"."gpt-3.5-turbo").... | 
| f7e0 |  20 20 20 20 20 20 20 28 63 6f 6e 73 74 20 3a 74    61 67 20 22 47 50 54 20 33 2e 35 20 74 75 72 62  | .......(const.:tag."GPT.3.5.turb | 
| f800 |  6f 20 31 36 6b 22 20 22 67 70 74 2d 33 2e 35 2d    74 75 72 62 6f 2d 31 36 6b 22 29 0a 20 20 20 20  | o.16k"."gpt-3.5-turbo-16k")..... | 
| f820 |  20 20 20 20 20 20 28 63 6f 6e 73 74 20 3a 74 61    67 20 22 47 50 54 20 34 22 20 22 67 70 74 2d 34  | ......(const.:tag."GPT.4"."gpt-4 | 
| f840 |  22 29 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f    6e 73 74 20 3a 74 61 67 20 22 47 50 54 20 34 20  | ")...........(const.:tag."GPT.4. | 
| f860 |  74 75 72 62 6f 22 20 22 67 70 74 2d 34 2d 74 75    72 62 6f 22 29 0a 20 20 20 20 20 20 20 20 20 20  | turbo"."gpt-4-turbo")........... | 
| f880 |  28 63 6f 6e 73 74 20 3a 74 61 67 20 22 47 50 54    20 34 20 74 75 72 62 6f 20 28 70 72 65 76 69 65  | (const.:tag."GPT.4.turbo.(previe | 
| f8a0 |  77 29 22 20 22 67 70 74 2d 34 2d 74 75 72 62 6f    2d 70 72 65 76 69 65 77 22 29 0a 20 20 20 20 20  | w)"."gpt-4-turbo-preview")...... | 
| f8c0 |  20 20 20 20 20 28 63 6f 6e 73 74 20 3a 74 61 67    20 22 47 50 54 20 34 20 33 32 6b 22 20 22 67 70  | .....(const.:tag."GPT.4.32k"."gp | 
| f8e0 |  74 2d 34 2d 33 32 6b 22 29 0a 20 20 20 20 20 20    20 20 20 20 28 63 6f 6e 73 74 20 3a 74 61 67 20  | t-4-32k")...........(const.:tag. | 
| f900 |  22 47 50 54 20 34 20 31 31 30 36 20 28 70 72 65    76 69 65 77 29 22 20 22 67 70 74 2d 34 2d 31 31  | "GPT.4.1106.(preview)"."gpt-4-11 | 
| f920 |  30 36 2d 70 72 65 76 69 65 77 22 29 29 29 0a 0a    28 64 65 66 63 75 73 74 6f 6d 20 67 70 74 65 6c  | 06-preview")))..(defcustom.gptel | 
| f940 |  2d 74 65 6d 70 65 72 61 74 75 72 65 20 31 2e 30    0a 20 20 22 5c 22 54 65 6d 70 65 72 61 74 75 72  | -temperature.1.0..."\"Temperatur | 
| f960 |  65 5c 22 20 6f 66 20 74 68 65 20 4c 4c 4d 20 72    65 73 70 6f 6e 73 65 2e 0a 0a 54 68 69 73 20 69  | e\".of.the.LLM.response...This.i | 
| f980 |  73 20 61 20 6e 75 6d 62 65 72 20 62 65 74 77 65    65 6e 20 30 2e 30 20 61 6e 64 20 32 2e 30 20 74  | s.a.number.between.0.0.and.2.0.t | 
| f9a0 |  68 61 74 20 63 6f 6e 74 72 6f 6c 73 20 74 68 65    20 72 61 6e 64 6f 6d 6e 65 73 73 0a 6f 66 20 74  | hat.controls.the.randomness.of.t | 
| f9c0 |  68 65 20 72 65 73 70 6f 6e 73 65 2c 20 77 69 74    68 20 32 2e 30 20 62 65 69 6e 67 20 74 68 65 20  | he.response,.with.2.0.being.the. | 
| f9e0 |  6d 6f 73 74 20 72 61 6e 64 6f 6d 2e 0a 0a 54 6f    20 73 65 74 20 74 68 65 20 74 65 6d 70 65 72 61  | most.random...To.set.the.tempera | 
| fa00 |  74 75 72 65 20 66 6f 72 20 61 20 63 68 61 74 20    73 65 73 73 69 6f 6e 20 69 6e 74 65 72 61 63 74  | ture.for.a.chat.session.interact | 
| fa20 |  69 76 65 6c 79 20 63 61 6c 6c 0a 60 67 70 74 65    6c 2d 73 65 6e 64 27 20 77 69 74 68 20 61 20 70  | ively.call.`gptel-send'.with.a.p | 
| fa40 |  72 65 66 69 78 20 61 72 67 75 6d 65 6e 74 2e 22    0a 20 20 3a 73 61 66 65 20 23 27 61 6c 77 61 79  | refix.argument."...:safe.#'alway | 
| fa60 |  73 0a 20 20 3a 67 72 6f 75 70 20 27 67 70 74 65    6c 0a 20 20 3a 74 79 70 65 20 27 6e 75 6d 62 65  | s...:group.'gptel...:type.'numbe | 
| fa80 |  72 29 0a 0a 28 64 65 66 76 61 72 20 67 70 74 65    6c 2d 2d 6b 6e 6f 77 6e 2d 62 61 63 6b 65 6e 64  | r)..(defvar.gptel--known-backend | 
| faa0 |  73 20 6e 69 6c 0a 20 20 22 41 6c 69 73 74 20 6f    66 20 4c 4c 4d 20 62 61 63 6b 65 6e 64 73 20 6b  | s.nil..."Alist.of.LLM.backends.k | 
| fac0 |  6e 6f 77 6e 20 74 6f 20 67 70 74 65 6c 2e 0a 0a    54 68 69 73 20 69 73 20 61 6e 20 61 6c 69 73 74  | nown.to.gptel...This.is.an.alist | 
| fae0 |  20 6d 61 70 70 69 6e 67 20 75 73 65 72 2d 70 72    6f 76 69 64 65 64 20 6e 61 6d 65 73 20 74 6f 20  | .mapping.user-provided.names.to. | 
| fb00 |  62 61 63 6b 65 6e 64 20 73 74 72 75 63 74 73 2c    0a 73 65 65 20 60 67 70 74 65 6c 2d 62 61 63 6b  | backend.structs,.see.`gptel-back | 
| fb20 |  65 6e 64 27 2e 0a 0a 59 6f 75 20 63 61 6e 20 68    61 76 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  | end'...You.can.have.more.than.on | 
| fb40 |  65 20 62 61 63 6b 65 6e 64 20 70 6f 69 6e 74 69    6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 72  | e.backend.pointing.to.the.same.r | 
| fb60 |  65 73 6f 75 72 63 65 0a 77 69 74 68 20 64 69 66    66 65 72 69 6e 67 20 73 65 74 74 69 6e 67 73 2e  | esource.with.differing.settings. | 
| fb80 |  22 29 0a 0a 28 64 65 66 76 61 72 20 67 70 74 65    6c 2d 2d 6f 70 65 6e 61 69 0a 20 20 28 67 70 74  | ")..(defvar.gptel--openai...(gpt | 
| fba0 |  65 6c 2d 6d 61 6b 65 2d 6f 70 65 6e 61 69 0a 20    20 20 22 43 68 61 74 47 50 54 22 0a 20 20 20 3a  | el-make-openai...."ChatGPT"....: | 
| fbc0 |  6b 65 79 20 27 67 70 74 65 6c 2d 61 70 69 2d 6b    65 79 0a 20 20 20 3a 73 74 72 65 61 6d 20 74 0a  | key.'gptel-api-key....:stream.t. | 
| fbe0 |  20 20 20 3a 6d 6f 64 65 6c 73 20 27 28 22 67 70    74 2d 33 2e 35 2d 74 75 72 62 6f 22 20 22 67 70  | ...:models.'("gpt-3.5-turbo"."gp | 
| fc00 |  74 2d 33 2e 35 2d 74 75 72 62 6f 2d 31 36 6b 22    20 22 67 70 74 2d 34 22 20 22 67 70 74 2d 34 2d  | t-3.5-turbo-16k"."gpt-4"."gpt-4- | 
| fc20 |  74 75 72 62 6f 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 22 67 70 74 2d 34 2d 74 75 72 62 6f  | turbo".............."gpt-4-turbo | 
| fc40 |  2d 70 72 65 76 69 65 77 22 20 22 67 70 74 2d 34    2d 33 32 6b 22 20 22 67 70 74 2d 34 2d 31 31 30  | -preview"."gpt-4-32k"."gpt-4-110 | 
| fc60 |  36 2d 70 72 65 76 69 65 77 22 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 22 67 70 74 2d 34 2d 30  | 6-preview".............."gpt-4-0 | 
| fc80 |  31 32 35 2d 70 72 65 76 69 65 77 22 29 29 29 0a    0a 28 64 65 66 63 75 73 74 6f 6d 20 67 70 74 65  | 125-preview")))..(defcustom.gpte | 
| fca0 |  6c 2d 62 61 63 6b 65 6e 64 20 67 70 74 65 6c 2d    2d 6f 70 65 6e 61 69 0a 20 20 22 4c 4c 4d 20 62  | l-backend.gptel--openai..."LLM.b | 
| fcc0 |  61 63 6b 65 6e 64 20 74 6f 20 75 73 65 2e 0a 0a    54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  | ackend.to.use...This.is.the.defa | 
| fce0 |  75 6c 74 20 5c 22 62 61 63 6b 65 6e 64 5c 22 2c    20 61 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 79  | ult.\"backend\",.an.object.of.ty | 
| fd00 |  70 65 0a 60 67 70 74 65 6c 2d 62 61 63 6b 65 6e    64 27 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f  | pe.`gptel-backend'.containing.co | 
| fd20 |  6e 6e 65 63 74 69 6f 6e 2c 20 61 75 74 68 65 6e    74 69 63 61 74 69 6f 6e 20 61 6e 64 20 6d 6f 64  | nnection,.authentication.and.mod | 
| fd40 |  65 6c 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a    0a 41 20 62 61 63 6b 65 6e 64 20 66 6f 72 20 43  | el.information...A.backend.for.C | 
| fd60 |  68 61 74 47 50 54 20 69 73 20 70 72 65 2d 64 65    66 69 6e 65 64 20 62 79 20 67 70 74 65 6c 2e 20  | hatGPT.is.pre-defined.by.gptel.. | 
| fd80 |  20 42 61 63 6b 65 6e 64 73 20 66 6f 72 0a 6f 74    68 65 72 20 4c 4c 4d 20 70 72 6f 76 69 64 65 72  | .Backends.for.other.LLM.provider | 
| fda0 |  73 20 28 6c 6f 63 61 6c 20 6f 72 20 72 65 6d 6f    74 65 29 20 6d 61 79 20 62 65 20 63 6f 6e 73 74  | s.(local.or.remote).may.be.const | 
| fdc0 |  72 75 63 74 65 64 20 75 73 69 6e 67 0a 6f 6e 65    20 6f 66 20 74 68 65 20 61 76 61 69 6c 61 62 6c  | ructed.using.one.of.the.availabl | 
| fde0 |  65 20 62 61 63 6b 65 6e 64 20 63 72 65 61 74 69    6f 6e 20 66 75 6e 63 74 69 6f 6e 73 3a 0a 2d 20  | e.backend.creation.functions:.-. | 
| fe00 |  60 67 70 74 65 6c 2d 6d 61 6b 65 2d 6f 70 65 6e    61 69 27 0a 2d 20 60 67 70 74 65 6c 2d 6d 61 6b  | `gptel-make-openai'.-.`gptel-mak | 
| fe20 |  65 2d 61 7a 75 72 65 27 0a 2d 20 60 67 70 74 65    6c 2d 6d 61 6b 65 2d 6f 6c 6c 61 6d 61 27 0a 2d  | e-azure'.-.`gptel-make-ollama'.- | 
| fe40 |  20 60 67 70 74 65 6c 2d 6d 61 6b 65 2d 67 70 74    34 61 6c 6c 27 0a 2d 20 60 67 70 74 65 6c 2d 6d  | .`gptel-make-gpt4all'.-.`gptel-m | 
| fe60 |  61 6b 65 2d 67 65 6d 69 6e 69 27 0a 53 65 65 20    74 68 65 69 72 20 64 6f 63 75 6d 65 6e 74 61 74  | ake-gemini'.See.their.documentat | 
| fe80 |  69 6f 6e 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66    6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 74 68 65  | ion.for.more.information.and.the | 
| fea0 |  20 70 61 63 6b 61 67 65 0a 52 45 41 44 4d 45 20    66 6f 72 20 65 78 61 6d 70 6c 65 73 2e 22 0a 20  | .package.README.for.examples.".. | 
| fec0 |  20 3a 73 61 66 65 20 23 27 61 6c 77 61 79 73 0a    20 20 3a 67 72 6f 75 70 20 27 67 70 74 65 6c 0a  | .:safe.#'always...:group.'gptel. | 
| fee0 |  20 20 3a 74 79 70 65 20 60 28 63 68 6f 69 63 65    0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73  | ..:type.`(choice...........(cons | 
| ff00 |  74 20 3a 74 61 67 20 22 43 68 61 74 47 50 54 22    20 2c 67 70 74 65 6c 2d 2d 6f 70 65 6e 61 69 29  | t.:tag."ChatGPT".,gptel--openai) | 
| ff20 |  0a 20 20 20 20 20 20 20 20 20 20 28 72 65 73 74    72 69 63 74 65 64 2d 73 65 78 70 20 3a 6d 61 74  | ...........(restricted-sexp.:mat | 
| ff40 |  63 68 2d 61 6c 74 65 72 6e 61 74 69 76 65 73 20    28 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 2d 70  | ch-alternatives.(gptel-backend-p | 
| ff60 |  20 27 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20    20 20 3a 74 61 67 20 22 4f 74 68 65 72 20 62 61  | .'nil)............:tag."Other.ba | 
| ff80 |  63 6b 65 6e 64 22 29 29 29 0a 0a 28 64 65 66 76    61 72 20 67 70 74 65 6c 2d 65 78 70 65 72 74 2d  | ckend")))..(defvar.gptel-expert- | 
| ffa0 |  63 6f 6d 6d 61 6e 64 73 20 6e 69 6c 0a 20 20 22    57 68 65 74 68 65 72 20 65 78 70 65 72 69 6d 65  | commands.nil..."Whether.experime | 
| ffc0 |  6e 74 61 6c 20 67 70 74 65 6c 20 6f 70 74 69 6f    6e 73 20 73 68 6f 75 6c 64 20 62 65 20 65 6e 61  | ntal.gptel.options.should.be.ena | 
| ffe0 |  62 6c 65 64 2e 0a 0a 54 68 69 73 20 6f 70 65 6e    73 20 75 70 20 61 64 76 61 6e 63 65 64 20 6f 70  | bled...This.opens.up.advanced.op | 
| 10000 |  74 69 6f 6e 73 20 69 6e 20 60 67 70 74 65 6c 2d    6d 65 6e 75 27 2e 22 29 0a 0a 28 64 65 66 76 61  | tions.in.`gptel-menu'.")..(defva | 
| 10020 |  72 2d 6c 6f 63 61 6c 20 67 70 74 65 6c 2d 2d 62    6f 75 6e 64 73 20 6e 69 6c 29 0a 28 70 75 74 20  | r-local.gptel--bounds.nil).(put. | 
| 10040 |  27 67 70 74 65 6c 2d 2d 62 6f 75 6e 64 73 20 27    73 61 66 65 2d 6c 6f 63 61 6c 2d 76 61 72 69 61  | 'gptel--bounds.'safe-local-varia | 
| 10060 |  62 6c 65 20 23 27 61 6c 77 61 79 73 29 0a 0a 28    64 65 66 76 61 72 20 67 70 74 65 6c 2d 2d 6e 75  | ble.#'always)..(defvar.gptel--nu | 
| 10080 |  6d 2d 6d 65 73 73 61 67 65 73 2d 74 6f 2d 73 65    6e 64 20 6e 69 6c 29 0a 28 70 75 74 20 27 67 70  | m-messages-to-send.nil).(put.'gp | 
| 100a0 |  74 65 6c 2d 2d 6e 75 6d 2d 6d 65 73 73 61 67 65    73 2d 74 6f 2d 73 65 6e 64 20 27 73 61 66 65 2d  | tel--num-messages-to-send.'safe- | 
| 100c0 |  6c 6f 63 61 6c 2d 76 61 72 69 61 62 6c 65 20 23    27 61 6c 77 61 79 73 29 0a 0a 28 64 65 66 63 75  | local-variable.#'always)..(defcu | 
| 100e0 |  73 74 6f 6d 20 67 70 74 65 6c 2d 6c 6f 67 2d 6c    65 76 65 6c 20 6e 69 6c 0a 20 20 22 4c 6f 67 67  | stom.gptel-log-level.nil..."Logg | 
| 10100 |  69 6e 67 20 6c 65 76 65 6c 20 66 6f 72 20 67 70    74 65 6c 2e 0a 0a 54 68 69 73 20 69 73 20 6f 6e  | ing.level.for.gptel...This.is.on | 
| 10120 |  65 20 6f 66 20 6e 69 6c 20 6f 72 20 74 68 65 20    73 79 6d 62 6f 6c 73 20 69 6e 66 6f 20 61 6e 64  | e.of.nil.or.the.symbols.info.and | 
| 10140 |  20 64 65 62 75 67 3a 0a 0a 6e 69 6c 3a 20 44 6f    6e 27 74 20 6c 6f 67 20 72 65 73 70 6f 6e 73 65  | .debug:..nil:.Don't.log.response | 
| 10160 |  73 0a 69 6e 66 6f 3a 20 4c 6f 67 20 72 65 71 75    65 73 74 20 61 6e 64 20 72 65 73 70 6f 6e 73 65  | s.info:.Log.request.and.response | 
| 10180 |  20 62 6f 64 69 65 73 0a 64 65 62 75 67 3a 20 4c    6f 67 20 72 65 71 75 65 73 74 2f 72 65 73 70 6f  | .bodies.debug:.Log.request/respo | 
| 101a0 |  6e 73 65 20 62 6f 64 69 65 73 2c 20 68 65 61 64    65 72 73 20 61 6e 64 20 61 6c 6c 20 6f 74 68 65  | nse.bodies,.headers.and.all.othe | 
| 101c0 |  72 0a 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74    69 6f 6e 20 73 65 74 74 69 6e 67 73 2e 0a 0a 57  | r........connection.settings...W | 
| 101e0 |  68 65 6e 20 6e 6f 6e 2d 6e 69 6c 2c 20 69 6e 66    6f 72 6d 61 74 69 6f 6e 20 69 73 20 6c 6f 67 67  | hen.non-nil,.information.is.logg | 
| 10200 |  65 64 20 74 6f 20 60 67 70 74 65 6c 2d 2d 6c 6f    67 2d 62 75 66 66 65 72 2d 6e 61 6d 65 27 2c 0a  | ed.to.`gptel--log-buffer-name',. | 
| 10220 |  77 68 69 63 68 20 73 65 65 2e 22 0a 20 20 3a 67    72 6f 75 70 20 27 67 70 74 65 6c 0a 20 20 3a 74  | which.see."...:group.'gptel...:t | 
| 10240 |  79 70 65 20 27 28 63 68 6f 69 63 65 0a 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 73 74 20 3a 74  | ype.'(choice...........(const.:t | 
| 10260 |  61 67 20 22 4e 6f 20 6c 6f 67 67 69 6e 67 22 20    6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 28  | ag."No.logging".nil)...........( | 
| 10280 |  63 6f 6e 73 74 20 3a 74 61 67 20 22 4c 69 6d 69    74 65 64 22 20 69 6e 66 6f 29 0a 20 20 20 20 20  | const.:tag."Limited".info)...... | 
| 102a0 |  20 20 20 20 20 28 63 6f 6e 73 74 20 3a 74 61 67    20 22 46 75 6c 6c 22 20 64 65 62 75 67 29 29 29  | .....(const.:tag."Full".debug))) | 
| 102c0 |  0a 28 6d 61 6b 65 2d 6f 62 73 6f 6c 65 74 65 2d    76 61 72 69 61 62 6c 65 0a 20 27 67 70 74 65 6c  | .(make-obsolete-variable..'gptel | 
| 102e0 |  2d 2d 64 65 62 75 67 20 27 67 70 74 65 6c 2d 6c    6f 67 2d 6c 65 76 65 6c 20 22 30 2e 36 2e 35 22  | --debug.'gptel-log-level."0.6.5" | 
| 10300 |  29 0a 0a 28 64 65 66 76 61 72 2d 6c 6f 63 61 6c    20 67 70 74 65 6c 2d 2d 6f 6c 64 2d 68 65 61 64  | )..(defvar-local.gptel--old-head | 
| 10320 |  65 72 2d 6c 69 6e 65 20 6e 69 6c 29 0a 0a 0c 0a    3b 3b 20 55 74 69 6c 69 74 79 20 66 75 6e 63 74  | er-line.nil)....;;.Utility.funct | 
| 10340 |  69 6f 6e 73 0a 0a 28 64 65 66 75 6e 20 67 70 74    65 6c 2d 61 70 69 2d 6b 65 79 2d 66 72 6f 6d 2d  | ions..(defun.gptel-api-key-from- | 
| 10360 |  61 75 74 68 2d 73 6f 75 72 63 65 20 28 26 6f 70    74 69 6f 6e 61 6c 20 68 6f 73 74 20 75 73 65 72  | auth-source.(&optional.host.user | 
| 10380 |  29 0a 20 20 22 4c 6f 6f 6b 75 70 20 61 70 69 20    6b 65 79 20 69 6e 20 74 68 65 20 61 75 74 68 20  | )..."Lookup.api.key.in.the.auth. | 
| 103a0 |  73 6f 75 72 63 65 2e 0a 42 79 20 64 65 66 61 75    6c 74 2c 20 74 68 65 20 4c 4c 4d 20 68 6f 73 74  | source..By.default,.the.LLM.host | 
| 103c0 |  20 66 6f 72 20 74 68 65 20 61 63 74 69 76 65 20    62 61 63 6b 65 6e 64 20 69 73 20 75 73 65 64 20  | .for.the.active.backend.is.used. | 
| 103e0 |  61 73 20 48 4f 53 54 2c 0a 61 6e 64 20 5c 22 61    70 69 6b 65 79 5c 22 20 61 73 20 55 53 45 52 2e  | as.HOST,.and.\"apikey\".as.USER. | 
| 10400 |  22 0a 20 20 28 69 66 2d 6c 65 74 20 28 28 73 65    63 72 65 74 0a 20 20 20 20 20 20 20 20 20 20 20  | "...(if-let.((secret............ | 
| 10420 |  20 28 70 6c 69 73 74 2d 67 65 74 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 63 61 72 20 28 61  | .(plist-get..............(car.(a | 
| 10440 |  75 74 68 2d 73 6f 75 72 63 65 2d 73 65 61 72 63    68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | uth-source-search............... | 
| 10460 |  20 20 20 20 20 3a 68 6f 73 74 20 28 6f 72 20 68    6f 73 74 20 28 67 70 74 65 6c 2d 62 61 63 6b 65  | .....:host.(or.host.(gptel-backe | 
| 10480 |  6e 64 2d 68 6f 73 74 20 67 70 74 65 6c 2d 62 61    63 6b 65 6e 64 29 29 0a 20 20 20 20 20 20 20 20  | nd-host.gptel-backend))......... | 
| 104a0 |  20 20 20 20 20 20 20 20 20 20 20 3a 75 73 65 72    20 28 6f 72 20 75 73 65 72 20 22 61 70 69 6b 65  | ...........:user.(or.user."apike | 
| 104c0 |  79 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 3a 72 65 71 75 69 72 65 20  | y")....................:require. | 
| 104e0 |  27 28 3a 73 65 63 72 65 74 29 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | '(:secret))).................... | 
| 10500 |  20 20 20 20 20 20 20 20 20 20 20 3a 73 65 63 72    65 74 29 29 29 0a 20 20 20 20 20 20 28 69 66 20  | ...........:secret))).......(if. | 
| 10520 |  28 66 75 6e 63 74 69 6f 6e 70 20 73 65 63 72 65    74 29 0a 20 20 20 20 20 20 20 20 20 20 28 65 6e  | (functionp.secret)...........(en | 
| 10540 |  63 6f 64 65 2d 63 6f 64 69 6e 67 2d 73 74 72 69    6e 67 20 28 66 75 6e 63 61 6c 6c 20 73 65 63 72  | code-coding-string.(funcall.secr | 
| 10560 |  65 74 29 20 27 75 74 66 2d 38 29 0a 20 20 20 20    20 20 20 20 73 65 63 72 65 74 29 0a 20 20 20 20  | et).'utf-8).........secret)..... | 
| 10580 |  28 75 73 65 72 2d 65 72 72 6f 72 20 22 4e 6f 20    60 67 70 74 65 6c 2d 61 70 69 2d 6b 65 79 27 20  | (user-error."No.`gptel-api-key'. | 
| 105a0 |  66 6f 75 6e 64 20 69 6e 20 74 68 65 20 61 75 74    68 20 73 6f 75 72 63 65 22 29 29 29 0a 0a 3b 3b  | found.in.the.auth.source")))..;; | 
| 105c0 |  20 46 49 58 4d 45 20 53 68 6f 75 6c 64 20 77 65    20 75 74 66 2d 38 20 65 6e 63 6f 64 65 20 74 68  | .FIXME.Should.we.utf-8.encode.th | 
| 105e0 |  65 20 61 70 69 2d 6b 65 79 20 68 65 72 65 3f 0a    28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d 67 65  | e.api-key.here?.(defun.gptel--ge | 
| 10600 |  74 2d 61 70 69 2d 6b 65 79 20 28 26 6f 70 74 69    6f 6e 61 6c 20 6b 65 79 29 0a 20 20 22 47 65 74  | t-api-key.(&optional.key)..."Get | 
| 10620 |  20 61 70 69 20 6b 65 79 20 66 72 6f 6d 20 4b 45    59 2c 20 6f 72 20 66 72 6f 6d 20 60 67 70 74 65  | .api.key.from.KEY,.or.from.`gpte | 
| 10640 |  6c 2d 61 70 69 2d 6b 65 79 27 2e 22 0a 20 20 28    77 68 65 6e 2d 6c 65 74 2a 20 28 28 6b 65 79 2d  | l-api-key'."...(when-let*.((key- | 
| 10660 |  73 79 6d 20 28 6f 72 20 6b 65 79 20 28 67 70 74    65 6c 2d 62 61 63 6b 65 6e 64 2d 6b 65 79 20 67  | sym.(or.key.(gptel-backend-key.g | 
| 10680 |  70 74 65 6c 2d 62 61 63 6b 65 6e 64 29 29 29 29    0a 20 20 20 20 28 63 6c 2d 74 79 70 65 63 61 73  | ptel-backend)))).....(cl-typecas | 
| 106a0 |  65 20 6b 65 79 2d 73 79 6d 0a 20 20 20 20 20 20    28 66 75 6e 63 74 69 6f 6e 20 28 66 75 6e 63 61  | e.key-sym.......(function.(funca | 
| 106c0 |  6c 6c 20 6b 65 79 2d 73 79 6d 29 29 0a 20 20 20    20 20 20 28 73 74 72 69 6e 67 20 6b 65 79 2d 73  | ll.key-sym)).......(string.key-s | 
| 106e0 |  79 6d 29 0a 20 20 20 20 20 20 28 73 79 6d 62 6f    6c 20 28 69 66 2d 6c 65 74 20 28 28 76 61 6c 20  | ym).......(symbol.(if-let.((val. | 
| 10700 |  28 73 79 6d 62 6f 6c 2d 76 61 6c 75 65 20 6b 65    79 2d 73 79 6d 29 29 29 0a 20 20 20 20 20 20 20  | (symbol-value.key-sym)))........ | 
| 10720 |  20 20 20 20 20 20 20 20 20 20 20 28 67 70 74 65    6c 2d 2d 67 65 74 2d 61 70 69 2d 6b 65 79 0a 20  | ...........(gptel--get-api-key.. | 
| 10740 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 73 79 6d 62 6f 6c 2d 76 61 6c 75 65 20  | ..................(symbol-value. | 
| 10760 |  6b 65 79 2d 73 79 6d 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f 72  | key-sym)).................(error | 
| 10780 |  20 22 60 67 70 74 65 6c 2d 61 70 69 2d 6b 65 79    27 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 22 29  | ."`gptel-api-key'.is.not.valid") | 
| 107a0 |  29 29 0a 20 20 20 20 20 20 28 74 20 28 65 72 72    6f 72 20 22 60 67 70 74 65 6c 2d 61 70 69 2d 6b  | )).......(t.(error."`gptel-api-k | 
| 107c0 |  65 79 27 20 69 73 20 6e 6f 74 20 76 61 6c 69 64    22 29 29 29 29 29 0a 0a 28 64 65 66 73 75 62 73  | ey'.is.not.valid")))))..(defsubs | 
| 107e0 |  74 20 67 70 74 65 6c 2d 2d 6e 75 6d 62 65 72 69    7a 65 20 28 76 61 6c 29 0a 20 20 22 45 6e 73 75  | t.gptel--numberize.(val)..."Ensu | 
| 10800 |  72 65 20 56 41 4c 20 69 73 20 61 20 6e 75 6d 62    65 72 2e 22 0a 20 20 28 69 66 20 28 73 74 72 69  | re.VAL.is.a.number."...(if.(stri | 
| 10820 |  6e 67 70 20 76 61 6c 29 20 28 73 74 72 69 6e 67    2d 74 6f 2d 6e 75 6d 62 65 72 20 76 61 6c 29 20  | ngp.val).(string-to-number.val). | 
| 10840 |  76 61 6c 29 29 0a 0a 28 64 65 66 75 6e 20 67 70    74 65 6c 2d 61 75 74 6f 2d 73 63 72 6f 6c 6c 20  | val))..(defun.gptel-auto-scroll. | 
| 10860 |  28 29 0a 20 20 22 53 63 72 6f 6c 6c 20 77 69 6e    64 6f 77 20 69 66 20 4c 4c 4d 20 72 65 73 70 6f  | ()..."Scroll.window.if.LLM.respo | 
| 10880 |  6e 73 65 20 63 6f 6e 74 69 6e 75 65 73 20 62 65    6c 6f 77 20 76 69 65 77 70 6f 72 74 2e 0a 0a 4e  | nse.continues.below.viewport...N | 
| 108a0 |  6f 74 65 3a 20 54 68 69 73 20 77 69 6c 6c 20 6d    6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 2e 22  | ote:.This.will.move.the.cursor." | 
| 108c0 |  0a 20 20 28 77 68 65 6e 2d 6c 65 74 2a 20 28 28    77 69 6e 20 28 67 65 74 2d 62 75 66 66 65 72 2d  | ...(when-let*.((win.(get-buffer- | 
| 108e0 |  77 69 6e 64 6f 77 20 28 63 75 72 72 65 6e 74 2d    62 75 66 66 65 72 29 20 27 76 69 73 69 62 6c 65  | window.(current-buffer).'visible | 
| 10900 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 28 6e 6f 74 20 28 70 6f 73 2d 76 69 73 69  | ))...............((not.(pos-visi | 
| 10920 |  62 6c 65 2d 69 6e 2d 77 69 6e 64 6f 77 2d 70 20    28 70 6f 69 6e 74 29 20 77 69 6e 29 29 29 0a 20  | ble-in-window-p.(point).win))).. | 
| 10940 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 63    72 6f 6c 6c 2d 65 72 72 6f 72 2d 74 6f 70 2d 62  | .............(scroll-error-top-b | 
| 10960 |  6f 74 74 6f 6d 20 74 29 29 0a 20 20 20 20 28 63    6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 6e 69  | ottom.t)).....(condition-case.ni | 
| 10980 |  6c 0a 20 20 20 20 20 20 20 20 28 77 69 74 68 2d    73 65 6c 65 63 74 65 64 2d 77 69 6e 64 6f 77 20  | l.........(with-selected-window. | 
| 109a0 |  77 69 6e 0a 20 20 20 20 20 20 20 20 20 20 28 73    63 72 6f 6c 6c 2d 75 70 2d 63 6f 6d 6d 61 6e 64  | win...........(scroll-up-command | 
| 109c0 |  29 29 0a 20 20 20 20 20 20 28 65 72 72 6f 72 20    6e 69 6c 29 29 29 29 0a 0a 28 64 65 66 75 6e 20  | )).......(error.nil))))..(defun. | 
| 109e0 |  67 70 74 65 6c 2d 62 65 67 69 6e 6e 69 6e 67 2d    6f 66 2d 72 65 73 70 6f 6e 73 65 20 28 26 6f 70  | gptel-beginning-of-response.(&op | 
| 10a00 |  74 69 6f 6e 61 6c 20 5f 20 5f 20 61 72 67 29 0a    20 20 22 4d 6f 76 65 20 70 6f 69 6e 74 20 74 6f  | tional._._.arg)..."Move.point.to | 
| 10a20 |  20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f    66 20 74 68 65 20 4c 4c 4d 20 72 65 73 70 6f 6e  | .the.beginning.of.the.LLM.respon | 
| 10a40 |  73 65 20 41 52 47 20 74 69 6d 65 73 2e 22 0a 20    20 28 69 6e 74 65 72 61 63 74 69 76 65 20 22 70  | se.ARG.times."...(interactive."p | 
| 10a60 |  22 29 0a 20 20 3b 3b 20 46 49 58 4d 45 3a 20 4f    6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 61 72  | ")...;;.FIXME:.Only.works.for.ar | 
| 10a80 |  67 20 3d 3d 20 31 0a 20 20 28 67 70 74 65 6c 2d    65 6e 64 2d 6f 66 2d 72 65 73 70 6f 6e 73 65 20  | g.==.1...(gptel-end-of-response. | 
| 10aa0 |  6e 69 6c 20 6e 69 6c 20 28 2d 20 28 6f 72 20 61    72 67 20 31 29 29 29 29 0a 0a 28 64 65 66 75 6e  | nil.nil.(-.(or.arg.1))))..(defun | 
| 10ac0 |  20 67 70 74 65 6c 2d 65 6e 64 2d 6f 66 2d 72 65    73 70 6f 6e 73 65 20 28 26 6f 70 74 69 6f 6e 61  | .gptel-end-of-response.(&optiona | 
| 10ae0 |  6c 20 5f 20 5f 20 61 72 67 29 0a 20 20 22 4d 6f    76 65 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  | l._._.arg)..."Move.point.to.the. | 
| 10b00 |  65 6e 64 20 6f 66 20 74 68 65 20 4c 4c 4d 20 72    65 73 70 6f 6e 73 65 20 41 52 47 20 74 69 6d 65  | end.of.the.LLM.response.ARG.time | 
| 10b20 |  73 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69    76 65 20 28 6c 69 73 74 20 6e 69 6c 20 6e 69 6c  | s."...(interactive.(list.nil.nil | 
| 10b40 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 70 72 65 66 69 78 2d 6e 75  | ......................(prefix-nu | 
| 10b60 |  6d 65 72 69 63 2d 76 61 6c 75 65 20 63 75 72 72    65 6e 74 2d 70 72 65 66 69 78 2d 61 72 67 29 29  | meric-value.current-prefix-arg)) | 
| 10b80 |  29 0a 20 20 28 75 6e 6c 65 73 73 20 61 72 67 20    28 73 65 74 71 20 61 72 67 20 31 29 29 0a 20 20  | )...(unless.arg.(setq.arg.1))... | 
| 10ba0 |  28 6c 65 74 20 28 28 73 65 61 72 63 68 20 28 69    66 20 28 3e 20 61 72 67 20 30 29 0a 20 20 20 20  | (let.((search.(if.(>.arg.0)..... | 
| 10bc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    23 27 74 65 78 74 2d 70 72 6f 70 65 72 74 79 2d  | ................#'text-property- | 
| 10be0 |  73 65 61 72 63 68 2d 66 6f 72 77 61 72 64 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | search-forward.................. | 
| 10c00 |  20 23 27 74 65 78 74 2d 70 72 6f 70 65 72 74 79    2d 73 65 61 72 63 68 2d 62 61 63 6b 77 61 72 64  | .#'text-property-search-backward | 
| 10c20 |  29 29 29 0a 20 20 20 20 28 64 6f 74 69 6d 65 73    20 28 5f 20 28 61 62 73 20 61 72 67 29 29 0a 20  | ))).....(dotimes.(_.(abs.arg)).. | 
| 10c40 |  20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65    61 72 63 68 20 27 67 70 74 65 6c 20 27 72 65 73  | .....(funcall.search.'gptel.'res | 
| 10c60 |  70 6f 6e 73 65 20 74 29 0a 20 20 20 20 20 20 28    69 66 20 28 3e 20 61 72 67 20 30 29 0a 20 20 20  | ponse.t).......(if.(>.arg.0).... | 
| 10c80 |  20 20 20 20 20 20 20 28 77 68 65 6e 20 28 6c 6f    6f 6b 69 6e 67 2d 61 74 20 28 63 6f 6e 63 61 74  | .......(when.(looking-at.(concat | 
| 10ca0 |  20 22 5c 6e 5c 5c 7b 31 2c 32 5c 5c 7d 22 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ."\n\\{1,2\\}".................. | 
| 10cc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65  | ...................(regexp-quote | 
| 10ce0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 10d00 |  20 20 20 20 20 20 28 67 70 74 65 6c 2d 70 72 6f    6d 70 74 2d 70 72 65 66 69 78 2d 73 74 72 69 6e  | ......(gptel-prompt-prefix-strin | 
| 10d20 |  67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | g))............................. | 
| 10d40 |  20 20 20 20 20 20 20 20 22 3f 22 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d  | ........"?")).............(goto- | 
| 10d60 |  63 68 61 72 20 28 6d 61 74 63 68 2d 65 6e 64 20    30 29 29 29 0a 20 20 20 20 20 20 20 20 28 77 68  | char.(match-end.0))).........(wh | 
| 10d80 |  65 6e 20 28 6c 6f 6f 6b 69 6e 67 2d 62 61 63 6b    20 28 63 6f 6e 63 61 74 20 28 72 65 67 65 78 70  | en.(looking-back.(concat.(regexp | 
| 10da0 |  2d 71 75 6f 74 65 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -quote.......................... | 
| 10dc0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 67 70 74    65 6c 2d 72 65 73 70 6f 6e 73 65 2d 70 72 65 66  | ............(gptel-response-pref | 
| 10de0 |  69 78 2d 73 74 72 69 6e 67 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ix-string))..................... | 
| 10e00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    22 3f 22 29 0a 20 20 20 20 20 20 20 20 20 20 20  | ................"?")............ | 
| 10e20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20  | .................(point-min))... | 
| 10e40 |  20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68    61 72 20 28 6d 61 74 63 68 2d 62 65 67 69 6e 6e  | ........(goto-char.(match-beginn | 
| 10e60 |  69 6e 67 20 30 29 29 29 29 29 29 29 0a 0a 28 64    65 66 6d 61 63 72 6f 20 67 70 74 65 6c 2d 2d 61  | ing.0)))))))..(defmacro.gptel--a | 
| 10e80 |  74 2d 77 6f 72 64 2d 65 6e 64 20 28 26 72 65 73    74 20 62 6f 64 79 29 0a 20 20 22 45 78 65 63 75  | t-word-end.(&rest.body)..."Execu | 
| 10ea0 |  74 65 20 42 4f 44 59 20 61 74 20 65 6e 64 20 6f    66 20 74 68 65 20 63 75 72 72 65 6e 74 20 77 6f  | te.BODY.at.end.of.the.current.wo | 
| 10ec0 |  72 64 20 6f 72 20 70 75 6e 63 74 75 61 74 69 6f    6e 2e 22 0a 20 20 60 28 73 61 76 65 2d 65 78 63  | rd.or.punctuation."...`(save-exc | 
| 10ee0 |  75 72 73 69 6f 6e 0a 20 20 20 20 20 28 73 6b 69    70 2d 73 79 6e 74 61 78 2d 66 6f 72 77 61 72 64  | ursion......(skip-syntax-forward | 
| 10f00 |  20 22 77 2e 22 29 0a 20 20 20 20 20 2c 40 62 6f    64 79 29 29 0a 0a 28 64 65 66 75 6e 20 67 70 74  | ."w.")......,@body))..(defun.gpt | 
| 10f20 |  65 6c 2d 70 72 6f 6d 70 74 2d 70 72 65 66 69 78    2d 73 74 72 69 6e 67 20 28 29 0a 20 20 28 6f 72  | el-prompt-prefix-string.()...(or | 
| 10f40 |  20 28 61 6c 69 73 74 2d 67 65 74 20 6d 61 6a 6f    72 2d 6d 6f 64 65 20 67 70 74 65 6c 2d 70 72 6f  | .(alist-get.major-mode.gptel-pro | 
| 10f60 |  6d 70 74 2d 70 72 65 66 69 78 2d 61 6c 69 73 74    29 20 22 22 29 29 0a 0a 28 64 65 66 75 6e 20 67  | mpt-prefix-alist).""))..(defun.g | 
| 10f80 |  70 74 65 6c 2d 72 65 73 70 6f 6e 73 65 2d 70 72    65 66 69 78 2d 73 74 72 69 6e 67 20 28 29 0a 20  | ptel-response-prefix-string.().. | 
| 10fa0 |  20 28 6f 72 20 28 61 6c 69 73 74 2d 67 65 74 20    6d 61 6a 6f 72 2d 6d 6f 64 65 20 67 70 74 65 6c  | .(or.(alist-get.major-mode.gptel | 
| 10fc0 |  2d 72 65 73 70 6f 6e 73 65 2d 70 72 65 66 69 78    2d 61 6c 69 73 74 29 20 22 22 29 29 0a 0a 28 64  | -response-prefix-alist).""))..(d | 
| 10fe0 |  65 66 76 61 72 2d 6c 6f 63 61 6c 20 67 70 74 65    6c 2d 2d 62 61 63 6b 65 6e 64 2d 6e 61 6d 65 20  | efvar-local.gptel--backend-name. | 
| 11000 |  6e 69 6c 0a 20 20 22 53 74 6f 72 65 20 74 6f 20    70 65 72 73 69 73 74 20 62 61 63 6b 65 6e 64 20  | nil..."Store.to.persist.backend. | 
| 11020 |  6e 61 6d 65 20 61 63 72 6f 73 73 20 45 6d 61 63    73 20 73 65 73 73 69 6f 6e 73 2e 0a 0a 4e 6f 74  | name.across.Emacs.sessions...Not | 
| 11040 |  65 3a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73    20 76 61 72 69 61 62 6c 65 20 64 6f 65 73 20 6e  | e:.Changing.this.variable.does.n | 
| 11060 |  6f 74 20 61 66 66 65 63 74 20 67 70 74 65 6c 5c    5c 3d 27 73 20 62 65 68 61 76 69 6f 72 0a 69 6e  | ot.affect.gptel\\='s.behavior.in | 
| 11080 |  20 61 6e 79 20 77 61 79 2e 22 29 0a 28 70 75 74    20 27 67 70 74 65 6c 2d 2d 62 61 63 6b 65 6e 64  | .any.way.").(put.'gptel--backend | 
| 110a0 |  2d 6e 61 6d 65 20 27 73 61 66 65 2d 6c 6f 63 61    6c 2d 76 61 72 69 61 62 6c 65 20 23 27 61 6c 77  | -name.'safe-local-variable.#'alw | 
| 110c0 |  61 79 73 29 0a 0a 28 64 65 66 75 6e 20 67 70 74    65 6c 2d 2d 67 65 74 2d 62 75 66 66 65 72 2d 62  | ays)..(defun.gptel--get-buffer-b | 
| 110e0 |  6f 75 6e 64 73 20 28 29 0a 20 20 22 52 65 74 75    72 6e 20 74 68 65 20 67 70 74 65 6c 20 72 65 73  | ounds.()..."Return.the.gptel.res | 
| 11100 |  70 6f 6e 73 65 20 62 6f 75 6e 64 61 72 69 65 73    20 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 61  | ponse.boundaries.in.the.buffer.a | 
| 11120 |  73 20 61 6e 20 61 6c 69 73 74 2e 22 0a 20 20 28    73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20  | s.an.alist."...(save-excursion.. | 
| 11140 |  20 20 20 28 73 61 76 65 2d 72 65 73 74 72 69 63    74 69 6f 6e 0a 20 20 20 20 20 20 28 77 69 64 65  | ...(save-restriction.......(wide | 
| 11160 |  6e 29 0a 20 20 20 20 20 20 28 67 6f 74 6f 2d 63    68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29  | n).......(goto-char.(point-max)) | 
| 11180 |  0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 72    6f 70 29 20 28 62 6f 75 6e 64 73 29 29 0a 20 20  | .......(let.((prop).(bounds))... | 
| 111a0 |  20 20 20 20 20 20 28 77 68 69 6c 65 20 28 73 65    74 71 20 70 72 6f 70 20 28 74 65 78 74 2d 70 72  | ......(while.(setq.prop.(text-pr | 
| 111c0 |  6f 70 65 72 74 79 2d 73 65 61 72 63 68 2d 62 61    63 6b 77 61 72 64 0a 20 20 20 20 20 20 20 20 20  | operty-search-backward.......... | 
| 111e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 27 67 70 74 65 6c 20 27 72 65 73 70 6f 6e  | ..................'gptel.'respon | 
| 11200 |  73 65 20 74 29 29 0a 20 20 20 20 20 20 20 20 20    20 28 70 75 73 68 20 28 63 6f 6e 73 20 28 70 72  | se.t))...........(push.(cons.(pr | 
| 11220 |  6f 70 2d 6d 61 74 63 68 2d 62 65 67 69 6e 6e 69    6e 67 20 70 72 6f 70 29 0a 20 20 20 20 20 20 20  | op-match-beginning.prop)........ | 
| 11240 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    70 72 6f 70 2d 6d 61 74 63 68 2d 65 6e 64 20 70  | ...............(prop-match-end.p | 
| 11260 |  72 6f 70 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 62 6f 75 6e 64 73 29 29 0a 20  | rop)).................bounds)).. | 
| 11280 |  20 20 20 20 20 20 20 62 6f 75 6e 64 73 29 29 29    29 0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d  | .......bounds))))..(defun.gptel- | 
| 112a0 |  2d 67 65 74 2d 62 6f 75 6e 64 73 20 28 29 0a 20    20 22 52 65 74 75 72 6e 20 74 68 65 20 67 70 74  | -get-bounds.()..."Return.the.gpt | 
| 112c0 |  65 6c 20 72 65 73 70 6f 6e 73 65 20 62 6f 75 6e    64 61 72 69 65 73 20 61 72 6f 75 6e 64 20 70 6f  | el.response.boundaries.around.po | 
| 112e0 |  69 6e 74 2e 22 0a 20 20 28 6c 65 74 20 28 70 72    6f 70 29 0a 20 20 20 20 28 73 61 76 65 2d 65 78  | int."...(let.(prop).....(save-ex | 
| 11300 |  63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 28 77    68 65 6e 20 28 74 65 78 74 2d 70 72 6f 70 65 72  | cursion.......(when.(text-proper | 
| 11320 |  74 79 2d 73 65 61 72 63 68 2d 62 61 63 6b 77 61    72 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ty-search-backward.............. | 
| 11340 |  27 67 70 74 65 6c 20 27 72 65 73 70 6f 6e 73 65    20 74 29 0a 20 20 20 20 20 20 20 20 28 77 68 65  | 'gptel.'response.t).........(whe | 
| 11360 |  6e 20 28 73 65 74 71 20 70 72 6f 70 20 28 74 65    78 74 2d 70 72 6f 70 65 72 74 79 2d 73 65 61 72  | n.(setq.prop.(text-property-sear | 
| 11380 |  63 68 2d 66 6f 72 77 61 72 64 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ch-forward...................... | 
| 113a0 |  20 20 20 20 20 27 67 70 74 65 6c 20 27 72 65 73    70 6f 6e 73 65 20 74 29 29 0a 20 20 20 20 20 20  | .....'gptel.'response.t))....... | 
| 113c0 |  20 20 20 20 28 63 6f 6e 73 20 28 70 72 6f 70 2d    6d 61 74 63 68 2d 62 65 67 69 6e 6e 69 6e 67 20  | ....(cons.(prop-match-beginning. | 
| 113e0 |  70 72 6f 70 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f  | prop).......................(pro | 
| 11400 |  70 2d 6d 61 74 63 68 2d 65 6e 64 20 70 72 6f 70    29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20  | p-match-end.prop)))))))..(defun. | 
| 11420 |  67 70 74 65 6c 2d 2d 69 6e 2d 72 65 73 70 6f 6e    73 65 2d 70 20 28 26 6f 70 74 69 6f 6e 61 6c 20  | gptel--in-response-p.(&optional. | 
| 11440 |  70 74 29 0a 20 20 22 43 68 65 63 6b 20 69 66 20    70 6f 73 69 74 69 6f 6e 20 50 54 20 69 73 20 69  | pt)..."Check.if.position.PT.is.i | 
| 11460 |  6e 73 69 64 65 20 61 20 67 70 74 65 6c 20 72 65    73 70 6f 6e 73 65 2e 22 0a 20 20 28 67 65 74 2d  | nside.a.gptel.response."...(get- | 
| 11480 |  63 68 61 72 2d 70 72 6f 70 65 72 74 79 20 28 6f    72 20 70 74 20 28 70 6f 69 6e 74 29 29 20 27 67  | char-property.(or.pt.(point)).'g | 
| 114a0 |  70 74 65 6c 29 29 0a 0a 28 64 65 66 75 6e 20 67    70 74 65 6c 2d 2d 61 74 2d 72 65 73 70 6f 6e 73  | ptel))..(defun.gptel--at-respons | 
| 114c0 |  65 2d 68 69 73 74 6f 72 79 2d 70 20 28 26 6f 70    74 69 6f 6e 61 6c 20 70 74 29 0a 20 20 22 43 68  | e-history-p.(&optional.pt)..."Ch | 
| 114e0 |  65 63 6b 20 69 66 20 67 70 74 65 6c 20 72 65 73    70 6f 6e 73 65 20 61 74 20 70 6f 73 69 74 69 6f  | eck.if.gptel.response.at.positio | 
| 11500 |  6e 20 50 54 20 68 61 73 20 76 61 72 69 61 6e 74    73 2e 22 0a 20 20 28 67 65 74 2d 63 68 61 72 2d  | n.PT.has.variants."...(get-char- | 
| 11520 |  70 72 6f 70 65 72 74 79 20 28 6f 72 20 70 74 20    28 70 6f 69 6e 74 29 29 20 27 67 70 74 65 6c 2d  | property.(or.pt.(point)).'gptel- | 
| 11540 |  68 69 73 74 6f 72 79 29 29 0a 0a 0c 0a 3b 3b 20    4c 6f 67 67 69 6e 67 0a 0a 28 64 65 66 63 6f 6e  | history))....;;.Logging..(defcon | 
| 11560 |  73 74 20 67 70 74 65 6c 2d 2d 6c 6f 67 2d 62 75    66 66 65 72 2d 6e 61 6d 65 20 22 2a 67 70 74 65  | st.gptel--log-buffer-name."*gpte | 
| 11580 |  6c 2d 6c 6f 67 2a 22 0a 20 20 22 4c 6f 67 20 62    75 66 66 65 72 20 66 6f 72 20 67 70 74 65 6c 2e  | l-log*"..."Log.buffer.for.gptel. | 
| 115a0 |  22 29 0a 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e    63 74 69 6f 6e 20 6a 73 6f 6e 2d 70 72 65 74 74  | ")..(declare-function.json-prett | 
| 115c0 |  79 2d 70 72 69 6e 74 20 22 6a 73 6f 6e 22 29 0a    0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d 6c  | y-print."json")..(defun.gptel--l | 
| 115e0 |  6f 67 20 28 64 61 74 61 20 26 6f 70 74 69 6f 6e    61 6c 20 74 79 70 65 20 6e 6f 2d 6a 73 6f 6e 29  | og.(data.&optional.type.no-json) | 
| 11600 |  0a 20 20 22 4c 6f 67 20 44 41 54 41 20 74 6f 20    60 67 70 74 65 6c 2d 2d 6c 6f 67 2d 62 75 66 66  | ..."Log.DATA.to.`gptel--log-buff | 
| 11620 |  65 72 2d 6e 61 6d 65 27 2e 0a 0a 54 59 50 45 20    69 73 20 61 20 6c 61 62 65 6c 20 66 6f 72 20 64  | er-name'...TYPE.is.a.label.for.d | 
| 11640 |  61 74 61 20 62 65 69 6e 67 20 6c 6f 67 67 65 64    2e 20 20 44 41 54 41 20 69 73 20 61 73 73 75 6d  | ata.being.logged...DATA.is.assum | 
| 11660 |  65 64 20 74 6f 20 62 65 0a 56 61 6c 69 64 20 4a    53 4f 4e 20 75 6e 6c 65 73 73 20 4e 4f 2d 4a 53  | ed.to.be.Valid.JSON.unless.NO-JS | 
| 11680 |  4f 4e 20 69 73 20 74 2e 22 0a 20 20 28 77 69 74    68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72  | ON.is.t."...(with-current-buffer | 
| 116a0 |  20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65    61 74 65 20 67 70 74 65 6c 2d 2d 6c 6f 67 2d 62  | .(get-buffer-create.gptel--log-b | 
| 116c0 |  75 66 66 65 72 2d 6e 61 6d 65 29 0a 20 20 20 20    28 6c 65 74 20 28 28 70 20 28 67 6f 74 6f 2d 63  | uffer-name).....(let.((p.(goto-c | 
| 116e0 |  68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29    29 29 0a 20 20 20 20 20 20 28 75 6e 6c 65 73 73  | har.(point-max)))).......(unless | 
| 11700 |  20 28 62 6f 62 70 29 20 28 69 6e 73 65 72 74 20    22 5c 6e 22 29 29 0a 20 20 20 20 20 20 28 69 6e  | .(bobp).(insert."\n")).......(in | 
| 11720 |  73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 7b 5c    22 67 70 74 65 6c 5c 22 3a 20 5c 22 25 73 5c 22  | sert.(format."{\"gptel\":.\"%s\" | 
| 11740 |  2c 20 22 20 28 6f 72 20 74 79 70 65 20 22 6e 6f    6e 65 22 29 29 0a 20 20 20 20 20 20 20 20 20 20  | ,.".(or.type."none"))........... | 
| 11760 |  20 20 20 20 28 66 6f 72 6d 61 74 2d 74 69 6d 65    2d 73 74 72 69 6e 67 20 22 5c 22 74 69 6d 65 73  | ....(format-time-string."\"times | 
| 11780 |  74 61 6d 70 5c 22 3a 20 5c 22 25 59 2d 25 6d 2d    25 64 20 25 48 3a 25 4d 3a 25 53 5c 22 7d 5c 6e  | tamp\":.\"%Y-%m-%d.%H:%M:%S\"}\n | 
| 117a0 |  22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 64 61 74 61 29 0a 20 20 20 20 20 20 28 75 6e  | ")...............data).......(un | 
| 117c0 |  6c 65 73 73 20 6e 6f 2d 6a 73 6f 6e 20 28 69 67    6e 6f 72 65 2d 65 72 72 6f 72 73 20 28 6a 73 6f  | less.no-json.(ignore-errors.(jso | 
| 117e0 |  6e 2d 70 72 65 74 74 79 2d 70 72 69 6e 74 20 70    20 28 70 6f 69 6e 74 29 29 29 29 29 29 29 0a 0a  | n-pretty-print.p.(point))))))).. | 
| 11800 |  0c 0a 3b 3b 20 53 61 76 69 6e 67 20 61 6e 64 20    72 65 73 74 6f 72 69 6e 67 20 73 74 61 74 65 0a  | ..;;.Saving.and.restoring.state. | 
| 11820 |  0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d 72    65 73 74 6f 72 65 2d 73 74 61 74 65 20 28 29 0a  | .(defun.gptel--restore-state.(). | 
| 11840 |  20 20 22 52 65 73 74 6f 72 65 20 67 70 74 65 6c    20 73 74 61 74 65 20 77 68 65 6e 20 74 75 72 6e  | .."Restore.gptel.state.when.turn | 
| 11860 |  69 6e 67 20 6f 6e 20 60 67 70 74 65 6c 2d 6d 6f    64 65 27 2e 22 0a 20 20 28 77 68 65 6e 20 28 62  | ing.on.`gptel-mode'."...(when.(b | 
| 11880 |  75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d 65 29    0a 20 20 20 20 28 70 63 61 73 65 20 6d 61 6a 6f  | uffer-file-name).....(pcase.majo | 
| 118a0 |  72 2d 6d 6f 64 65 0a 20 20 20 20 20 20 28 27 6f    72 67 2d 6d 6f 64 65 0a 20 20 20 20 20 20 20 28  | r-mode.......('org-mode........( | 
| 118c0 |  72 65 71 75 69 72 65 20 27 67 70 74 65 6c 2d 6f    72 67 29 0a 20 20 20 20 20 20 20 28 67 70 74 65  | require.'gptel-org)........(gpte | 
| 118e0 |  6c 2d 6f 72 67 2d 2d 72 65 73 74 6f 72 65 2d 73    74 61 74 65 29 29 0a 20 20 20 20 20 20 28 5f 20  | l-org--restore-state)).......(_. | 
| 11900 |  28 77 68 65 6e 20 67 70 74 65 6c 2d 2d 62 6f 75    6e 64 73 0a 20 20 20 20 20 20 20 20 20 20 20 28  | (when.gptel--bounds............( | 
| 11920 |  6d 61 70 63 20 28 70 63 61 73 65 2d 6c 61 6d 62    64 61 20 28 60 28 2c 62 65 67 20 2e 20 2c 65 6e  | mapc.(pcase-lambda.(`(,beg...,en | 
| 11940 |  64 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 75  | d))..........................(pu | 
| 11960 |  74 2d 74 65 78 74 2d 70 72 6f 70 65 72 74 79 20    62 65 67 20 65 6e 64 20 27 67 70 74 65 6c 20 27  | t-text-property.beg.end.'gptel.' | 
| 11980 |  72 65 73 70 6f 6e 73 65 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 67 70 74 65  | response))..................gpte | 
| 119a0 |  6c 2d 2d 62 6f 75 6e 64 73 29 0a 20 20 20 20 20    20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 22  | l--bounds)............(message." | 
| 119c0 |  67 70 74 65 6c 20 63 68 61 74 20 72 65 73 74 6f    72 65 64 2e 22 29 29 0a 20 20 20 20 20 20 20 20  | gptel.chat.restored."))......... | 
| 119e0 |  20 28 77 68 65 6e 20 67 70 74 65 6c 2d 2d 62 61    63 6b 65 6e 64 2d 6e 61 6d 65 0a 20 20 20 20 20  | .(when.gptel--backend-name...... | 
| 11a00 |  20 20 20 20 20 20 28 69 66 2d 6c 65 74 20 28 28    62 61 63 6b 65 6e 64 20 28 61 6c 69 73 74 2d 67  | ......(if-let.((backend.(alist-g | 
| 11a20 |  65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | et.............................. | 
| 11a40 |  20 67 70 74 65 6c 2d 2d 62 61 63 6b 65 6e 64 2d    6e 61 6d 65 20 67 70 74 65 6c 2d 2d 6b 6e 6f 77  | .gptel--backend-name.gptel--know | 
| 11a60 |  6e 2d 62 61 63 6b 65 6e 64 73 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | n-backends...................... | 
| 11a80 |  20 20 20 20 20 20 20 20 20 6e 69 6c 20 6e 69 6c    20 23 27 65 71 75 61 6c 29 29 29 0a 20 20 20 20  | .........nil.nil.#'equal)))..... | 
| 11aa0 |  20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71    2d 6c 6f 63 61 6c 20 67 70 74 65 6c 2d 62 61 63  | ...........(setq-local.gptel-bac | 
| 11ac0 |  6b 65 6e 64 20 62 61 63 6b 65 6e 64 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6d 65 73 73  | kend.backend)..............(mess | 
| 11ae0 |  61 67 65 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 73 75 62 73 74 69 74 75 74 65 2d 63  | age................(substitute-c | 
| 11b00 |  6f 6d 6d 61 6e 64 2d 6b 65 79 73 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e  | ommand-keys.................(con | 
| 11b20 |  63 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f 74 20  | cat.................."Could.not. | 
| 11b40 |  61 63 74 69 76 61 74 65 20 67 70 74 65 6c 20 62    61 63 6b 65 6e 64 20 5c 22 25 73 5c 22 21 20 20  | activate.gptel.backend.\"%s\"!.. | 
| 11b60 |  22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 22 53 77 69 74 63 68 20 62 61 63 6b 65  | ".................."Switch.backe | 
| 11b80 |  6e 64 73 20 77 69 74 68 20 5c 5c 5b 75 6e 69 76    65 72 73 61 6c 2d 61 72 67 75 6d 65 6e 74 5d 20  | nds.with.\\[universal-argument]. | 
| 11ba0 |  5c 5c 5b 67 70 74 65 6c 2d 73 65 6e 64 5d 22 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | \\[gptel-send]"................. | 
| 11bc0 |  20 22 20 62 65 66 6f 72 65 20 75 73 69 6e 67 20    67 70 74 65 6c 2e 22 29 29 0a 20 20 20 20 20 20  | .".before.using.gptel."))....... | 
| 11be0 |  20 20 20 20 20 20 20 20 20 67 70 74 65 6c 2d 2d    62 61 63 6b 65 6e 64 2d 6e 61 6d 65 29 29 29 29  | .........gptel--backend-name)))) | 
| 11c00 |  29 29 29 0a 0a 28 64 65 66 75 6e 20 67 70 74 65    6c 2d 2d 73 61 76 65 2d 73 74 61 74 65 20 28 29  | )))..(defun.gptel--save-state.() | 
| 11c20 |  0a 20 20 22 57 72 69 74 65 20 74 68 65 20 67 70    74 65 6c 20 73 74 61 74 65 20 74 6f 20 74 68 65  | ..."Write.the.gptel.state.to.the | 
| 11c40 |  20 62 75 66 66 65 72 2e 0a 0a 54 68 69 73 20 73    61 76 65 73 20 63 68 61 74 20 6d 65 74 61 64 61  | .buffer...This.saves.chat.metada | 
| 11c60 |  74 61 20 77 68 65 6e 20 77 72 69 74 69 6e 67 20    74 68 65 20 62 75 66 66 65 72 20 74 6f 20 64 69  | ta.when.writing.the.buffer.to.di | 
| 11c80 |  73 6b 2e 20 20 54 6f 0a 72 65 73 74 6f 72 65 20    61 20 63 68 61 74 20 73 65 73 73 69 6f 6e 2c 20  | sk...To.restore.a.chat.session,. | 
| 11ca0 |  74 75 72 6e 20 6f 6e 20 60 67 70 74 65 6c 2d 6d    6f 64 65 27 20 61 66 74 65 72 20 6f 70 65 6e 69  | turn.on.`gptel-mode'.after.openi | 
| 11cc0 |  6e 67 20 74 68 65 0a 66 69 6c 65 2e 22 0a 20 20    28 70 63 61 73 65 20 6d 61 6a 6f 72 2d 6d 6f 64  | ng.the.file."...(pcase.major-mod | 
| 11ce0 |  65 0a 20 20 20 20 28 27 6f 72 67 2d 6d 6f 64 65    0a 20 20 20 20 20 28 72 65 71 75 69 72 65 20 27  | e.....('org-mode......(require.' | 
| 11d00 |  67 70 74 65 6c 2d 6f 72 67 29 0a 20 20 20 20 20    28 67 70 74 65 6c 2d 6f 72 67 2d 2d 73 61 76 65  | gptel-org)......(gptel-org--save | 
| 11d20 |  2d 73 74 61 74 65 29 29 0a 20 20 20 20 28 5f 20    28 6c 65 74 20 28 28 70 72 69 6e 74 2d 65 73 63  | -state)).....(_.(let.((print-esc | 
| 11d40 |  61 70 65 2d 6e 65 77 6c 69 6e 65 73 20 74 29 29    0a 20 20 20 20 20 20 20 20 20 28 73 61 76 65 2d  | ape-newlines.t))..........(save- | 
| 11d60 |  65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20    20 20 20 20 20 28 73 61 76 65 2d 72 65 73 74 72  | excursion............(save-restr | 
| 11d80 |  69 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 28 61 64 64 2d 66 69 6c 65 2d 6c 6f  | iction..............(add-file-lo | 
| 11da0 |  63 61 6c 2d 76 61 72 69 61 62 6c 65 20 27 67 70    74 65 6c 2d 6d 6f 64 65 6c 20 67 70 74 65 6c 2d  | cal-variable.'gptel-model.gptel- | 
| 11dc0 |  6d 6f 64 65 6c 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 28 61 64 64 2d 66 69 6c 65 2d 6c 6f  | model)..............(add-file-lo | 
| 11de0 |  63 61 6c 2d 76 61 72 69 61 62 6c 65 20 27 67 70    74 65 6c 2d 2d 62 61 63 6b 65 6e 64 2d 6e 61 6d  | cal-variable.'gptel--backend-nam | 
| 11e00 |  65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | e............................... | 
| 11e20 |  20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 62    61 63 6b 65 6e 64 2d 6e 61 6d 65 20 67 70 74 65  | ........(gptel-backend-name.gpte | 
| 11e40 |  6c 2d 62 61 63 6b 65 6e 64 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73  | l-backend))..............(unless | 
| 11e60 |  20 28 65 71 75 61 6c 20 28 64 65 66 61 75 6c 74    2d 76 61 6c 75 65 20 27 67 70 74 65 6c 2d 74 65  | .(equal.(default-value.'gptel-te | 
| 11e80 |  6d 70 65 72 61 74 75 72 65 29 20 67 70 74 65 6c    2d 74 65 6d 70 65 72 61 74 75 72 65 29 0a 20 20  | mperature).gptel-temperature)... | 
| 11ea0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 64    64 2d 66 69 6c 65 2d 6c 6f 63 61 6c 2d 76 61 72  | .............(add-file-local-var | 
| 11ec0 |  69 61 62 6c 65 20 27 67 70 74 65 6c 2d 74 65 6d    70 65 72 61 74 75 72 65 20 67 70 74 65 6c 2d 74  | iable.'gptel-temperature.gptel-t | 
| 11ee0 |  65 6d 70 65 72 61 74 75 72 65 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73  | emperature))..............(unles | 
| 11f00 |  73 20 28 73 74 72 69 6e 67 3d 20 28 64 65 66 61    75 6c 74 2d 76 61 6c 75 65 20 27 67 70 74 65 6c  | s.(string=.(default-value.'gptel | 
| 11f20 |  2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73 61 67 65    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | --system-message)............... | 
| 11f40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    67 70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65  | ................gptel--system-me | 
| 11f60 |  73 73 61 67 65 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 61 64 64 2d 66 69 6c 65 2d  | ssage)................(add-file- | 
| 11f80 |  6c 6f 63 61 6c 2d 76 61 72 69 61 62 6c 65 20 27    67 70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65  | local-variable.'gptel--system-me | 
| 11fa0 |  73 73 61 67 65 20 67 70 74 65 6c 2d 2d 73 79 73    74 65 6d 2d 6d 65 73 73 61 67 65 29 29 0a 20 20  | ssage.gptel--system-message))... | 
| 11fc0 |  20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e    20 67 70 74 65 6c 2d 6d 61 78 2d 74 6f 6b 65 6e  | ...........(when.gptel-max-token | 
| 11fe0 |  73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 61 64 64 2d 66 69 6c 65 2d 6c 6f 63 61 6c  | s................(add-file-local | 
| 12000 |  2d 76 61 72 69 61 62 6c 65 20 27 67 70 74 65 6c    2d 6d 61 78 2d 74 6f 6b 65 6e 73 20 67 70 74 65  | -variable.'gptel-max-tokens.gpte | 
| 12020 |  6c 2d 6d 61 78 2d 74 6f 6b 65 6e 73 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 28 61 64 64  | l-max-tokens))..............(add | 
| 12040 |  2d 66 69 6c 65 2d 6c 6f 63 61 6c 2d 76 61 72 69    61 62 6c 65 20 27 67 70 74 65 6c 2d 2d 62 6f 75  | -file-local-variable.'gptel--bou | 
| 12060 |  6e 64 73 20 28 67 70 74 65 6c 2d 2d 67 65 74 2d    62 75 66 66 65 72 2d 62 6f 75 6e 64 73 29 29 29  | nds.(gptel--get-buffer-bounds))) | 
| 12080 |  29 29 29 29 29 0a 0a 0c 0a 3b 3b 20 4d 69 6e 6f    72 20 6d 6f 64 65 20 61 6e 64 20 55 49 0a 0a 3b  | )))))....;;.Minor.mode.and.UI..; | 
| 120a0 |  3b 20 4e 4f 54 45 3a 20 49 74 27 73 20 6e 6f 74    20 63 6c 65 61 72 20 74 68 61 74 20 74 68 69 73  | ;.NOTE:.It's.not.clear.that.this | 
| 120c0 |  20 69 73 20 74 68 65 20 62 65 73 74 20 73 74 72    61 74 65 67 79 3a 0a 28 61 64 64 2d 74 6f 2d 6c  | .is.the.best.strategy:.(add-to-l | 
| 120e0 |  69 73 74 20 27 74 65 78 74 2d 70 72 6f 70 65 72    74 79 2d 64 65 66 61 75 6c 74 2d 6e 6f 6e 73 74  | ist.'text-property-default-nonst | 
| 12100 |  69 63 6b 79 20 27 28 67 70 74 65 6c 20 2e 20 74    29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f  | icky.'(gptel...t))..;;;###autolo | 
| 12120 |  61 64 0a 28 64 65 66 69 6e 65 2d 6d 69 6e 6f 72    2d 6d 6f 64 65 20 67 70 74 65 6c 2d 6d 6f 64 65  | ad.(define-minor-mode.gptel-mode | 
| 12140 |  0a 20 20 22 4d 69 6e 6f 72 20 6d 6f 64 65 20 66    6f 72 20 69 6e 74 65 72 61 63 74 69 6e 67 20 77  | ..."Minor.mode.for.interacting.w | 
| 12160 |  69 74 68 20 4c 4c 4d 73 2e 22 0a 20 20 3a 6c 69    67 68 74 65 72 20 22 20 47 50 54 22 0a 20 20 3a  | ith.LLMs."...:lighter.".GPT"...: | 
| 12180 |  6b 65 79 6d 61 70 0a 20 20 28 6c 65 74 20 28 28    6d 61 70 20 28 6d 61 6b 65 2d 73 70 61 72 73 65  | keymap...(let.((map.(make-sparse | 
| 121a0 |  2d 6b 65 79 6d 61 70 29 29 29 0a 20 20 20 20 28    64 65 66 69 6e 65 2d 6b 65 79 20 6d 61 70 20 28  | -keymap))).....(define-key.map.( | 
| 121c0 |  6b 62 64 20 22 43 2d 63 20 52 45 54 22 29 20 23    27 67 70 74 65 6c 2d 73 65 6e 64 29 0a 20 20 20  | kbd."C-c.RET").#'gptel-send).... | 
| 121e0 |  20 6d 61 70 29 0a 20 20 28 69 66 20 67 70 74 65    6c 2d 6d 6f 64 65 0a 20 20 20 20 20 20 28 70 72  | .map)...(if.gptel-mode.......(pr | 
| 12200 |  6f 67 6e 0a 20 20 20 20 20 20 20 20 28 75 6e 6c    65 73 73 20 28 6d 65 6d 71 20 6d 61 6a 6f 72 2d  | ogn.........(unless.(memq.major- | 
| 12220 |  6d 6f 64 65 20 27 28 6f 72 67 2d 6d 6f 64 65 20    6d 61 72 6b 64 6f 77 6e 2d 6d 6f 64 65 20 74 65  | mode.'(org-mode.markdown-mode.te | 
| 12240 |  78 74 2d 6d 6f 64 65 29 29 0a 20 20 20 20 20 20    20 20 20 20 28 67 70 74 65 6c 2d 6d 6f 64 65 20  | xt-mode))...........(gptel-mode. | 
| 12260 |  2d 31 29 0a 20 20 20 20 20 20 20 20 20 20 28 75    73 65 72 2d 65 72 72 6f 72 20 28 66 6f 72 6d 61  | -1)...........(user-error.(forma | 
| 12280 |  74 20 22 60 67 70 74 65 6c 2d 6d 6f 64 65 27 20    69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  | t."`gptel-mode'.is.not.supported | 
| 122a0 |  20 69 6e 20 60 25 73 27 2e 22 20 6d 61 6a 6f 72    2d 6d 6f 64 65 29 29 29 0a 20 20 20 20 20 20 20  | .in.`%s'.".major-mode)))........ | 
| 122c0 |  20 28 61 64 64 2d 68 6f 6f 6b 20 27 62 65 66 6f    72 65 2d 73 61 76 65 2d 68 6f 6f 6b 20 23 27 67  | .(add-hook.'before-save-hook.#'g | 
| 122e0 |  70 74 65 6c 2d 2d 73 61 76 65 2d 73 74 61 74 65    20 6e 69 6c 20 74 29 0a 20 20 20 20 20 20 20 20  | ptel--save-state.nil.t)......... | 
| 12300 |  28 67 70 74 65 6c 2d 2d 72 65 73 74 6f 72 65 2d    73 74 61 74 65 29 0a 20 20 20 20 20 20 20 20 28  | (gptel--restore-state).........( | 
| 12320 |  69 66 20 67 70 74 65 6c 2d 75 73 65 2d 68 65 61    64 65 72 2d 6c 69 6e 65 0a 20 20 20 20 20 20 20  | if.gptel-use-header-line........ | 
| 12340 |  20 20 20 28 73 65 74 71 20 67 70 74 65 6c 2d 2d    6f 6c 64 2d 68 65 61 64 65 72 2d 6c 69 6e 65 20  | ...(setq.gptel--old-header-line. | 
| 12360 |  68 65 61 64 65 72 2d 6c 69 6e 65 2d 66 6f 72 6d    61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | header-line-format.............. | 
| 12380 |  20 20 20 68 65 61 64 65 72 2d 6c 69 6e 65 2d 66    6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20  | ...header-line-format........... | 
| 123a0 |  20 20 20 20 20 20 28 6c 69 73 74 20 27 28 3a 65    76 61 6c 20 28 63 6f 6e 63 61 74 20 28 70 72 6f  | ......(list.'(:eval.(concat.(pro | 
| 123c0 |  70 65 72 74 69 7a 65 20 22 20 22 20 27 64 69 73    70 6c 61 79 20 27 28 73 70 61 63 65 20 3a 61 6c  | pertize.".".'display.'(space.:al | 
| 123e0 |  69 67 6e 2d 74 6f 20 30 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ign-to.0))...................... | 
| 12400 |  20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61    74 20 22 25 73 22 20 28 67 70 74 65 6c 2d 62 61  | ..........(format."%s".(gptel-ba | 
| 12420 |  63 6b 65 6e 64 2d 6e 61 6d 65 20 67 70 74 65 6c    2d 62 61 63 6b 65 6e 64 29 29 29 29 0a 20 20 20  | ckend-name.gptel-backend)))).... | 
| 12440 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 70 72 6f 70 65 72 74 69 7a 65 20 22  | ...................(propertize." | 
| 12460 |  20 52 65 61 64 79 22 20 27 66 61 63 65 20 27 73    75 63 63 65 73 73 29 0a 20 20 20 20 20 20 20 20  | .Ready".'face.'success)......... | 
| 12480 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28    3a 65 76 61 6c 0a 20 20 20 20 20 20 20 20 20 20  | ..............'(:eval........... | 
| 124a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c    65 74 20 28 28 73 79 73 74 65 6d 0a 20 20 20 20  | ..............(let.((system..... | 
| 124c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d  | ...........................(form | 
| 124e0 |  61 74 20 22 5b 50 72 6f 6d 70 74 3a 20 25 73 5d    22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | at."[Prompt:.%s]"............... | 
| 12500 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 6f 72 20 28 63 61 72 2d 73 61 66 65 20  | ..................(or.(car-safe. | 
| 12520 |  28 72 61 73 73 6f 63 20 67 70 74 65 6c 2d 2d 73    79 73 74 65 6d 2d 6d 65 73 73 61 67 65 20 67 70  | (rassoc.gptel--system-message.gp | 
| 12540 |  74 65 6c 2d 64 69 72 65 63 74 69 76 65 73 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | tel-directives))................ | 
| 12560 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 74 72 75 6e 63 61 74 65 2d 73 74 72 69  | ..................(truncate-stri | 
| 12580 |  6e 67 2d 74 6f 2d 77 69 64 74 68 20 67 70 74 65    6c 2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73 61 67  | ng-to-width.gptel--system-messag | 
| 125a0 |  65 20 31 35 20 6e 69 6c 20 6e 69 6c 20 74 29 29    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | e.15.nil.nil.t)))))............. | 
| 125c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f    6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 20  | .............(concat............ | 
| 125e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    70 72 6f 70 65 72 74 69 7a 65 0a 20 20 20 20 20  | ...............(propertize...... | 
| 12600 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 22 20 22 20 27 64 69 73 70 6c  | ......................".".'displ | 
| 12620 |  61 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28  | ay............................`( | 
| 12640 |  73 70 61 63 65 20 3a 61 6c 69 67 6e 2d 74 6f 20    28 2d 20 72 69 67 68 74 20 2c 28 2b 20 32 20 28  | space.:align-to.(-.right.,(+.2.( | 
| 12660 |  6c 65 6e 67 74 68 20 67 70 74 65 6c 2d 6d 6f 64    65 6c 29 20 28 6c 65 6e 67 74 68 20 73 79 73 74  | length.gptel-model).(length.syst | 
| 12680 |  65 6d 29 29 29 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | em)))))......................... | 
| 126a0 |  20 20 28 70 72 6f 70 65 72 74 69 7a 65 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..(propertize................... | 
| 126c0 |  20 20 20 20 20 20 20 20 20 28 62 75 74 74 6f 6e    69 7a 65 20 73 79 73 74 65 6d 0a 20 20 20 20 20  | .........(buttonize.system...... | 
| 126e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28  | .......................(lambda.( | 
| 12700 |  26 72 65 73 74 20 5f 29 20 28 67 70 74 65 6c 2d    73 79 73 74 65 6d 2d 70 72 6f 6d 70 74 29 29 29  | &rest._).(gptel-system-prompt))) | 
| 12720 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 27 6d 6f 75  | ............................'mou | 
| 12740 |  73 65 2d 66 61 63 65 20 27 68 69 67 68 6c 69 67    68 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | se-face.'highlight.............. | 
| 12760 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 68    65 6c 70 2d 65 63 68 6f 0a 20 20 20 20 20 20 20  | ..............'help-echo........ | 
| 12780 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 22 53 79 73 74 65 6d 20 6d 65 73 73  | ...................."System.mess | 
| 127a0 |  61 67 65 20 66 6f 72 20 62 75 66 66 65 72 22 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | age.for.buffer")................ | 
| 127c0 |  20 20 20 20 20 20 20 20 20 20 20 22 20 22 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ...........".".................. | 
| 127e0 |  20 20 20 20 20 20 20 20 20 28 70 72 6f 70 65 72    74 69 7a 65 0a 20 20 20 20 20 20 20 20 20 20 20  | .........(propertize............ | 
| 12800 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 62 75 74 74 6f 6e 69 7a 65 20 28 63 6f 6e 63  | ................(buttonize.(conc | 
| 12820 |  61 74 20 22 5b 22 20 67 70 74 65 6c 2d 6d 6f 64    65 6c 20 22 5d 22 29 0a 20 20 20 20 20 20 20 20  | at."[".gptel-model."]")......... | 
| 12840 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 6c 61 6d 62 64 61 20 28 26 72 65  | ....................(lambda.(&re | 
| 12860 |  73 74 20 5f 29 20 28 67 70 74 65 6c 2d 6d 65 6e    75 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | st._).(gptel-menu)))............ | 
| 12880 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    27 6d 6f 75 73 65 2d 66 61 63 65 20 27 68 69 67  | ................'mouse-face.'hig | 
| 128a0 |  68 6c 69 67 68 74 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | hlight.......................... | 
| 128c0 |  20 20 27 68 65 6c 70 2d 65 63 68 6f 20 22 47 50    54 20 6d 6f 64 65 6c 20 69 6e 20 75 73 65 22 29  | ..'help-echo."GPT.model.in.use") | 
| 128e0 |  29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    28 73 65 74 71 20 6d 6f 64 65 2d 6c 69 6e 65 2d  | )))))...........(setq.mode-line- | 
| 12900 |  70 72 6f 63 65 73 73 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 27 28 3a 65 76 61 6c 20  | process.................'(:eval. | 
| 12920 |  28 63 6f 6e 63 61 74 20 22 20 22 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | (concat."."..................... | 
| 12940 |  20 20 20 20 20 28 62 75 74 74 6f 6e 69 7a 65 20    67 70 74 65 6c 2d 6d 6f 64 65 6c 0a 20 20 20 20  | .....(buttonize.gptel-model..... | 
| 12960 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20  | ........................(lambda. | 
| 12980 |  28 26 72 65 73 74 20 5f 29 20 28 67 70 74 65 6c    2d 6d 65 6e 75 29 29 29 29 29 29 29 29 0a 20 20  | (&rest._).(gptel-menu))))))))... | 
| 129a0 |  20 20 28 69 66 20 67 70 74 65 6c 2d 75 73 65 2d    68 65 61 64 65 72 2d 6c 69 6e 65 0a 20 20 20 20  | ..(if.gptel-use-header-line..... | 
| 129c0 |  20 20 20 20 28 73 65 74 71 20 68 65 61 64 65 72    2d 6c 69 6e 65 2d 66 6f 72 6d 61 74 20 67 70 74  | ....(setq.header-line-format.gpt | 
| 129e0 |  65 6c 2d 2d 6f 6c 64 2d 68 65 61 64 65 72 2d 6c    69 6e 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  | el--old-header-line............. | 
| 12a00 |  20 20 67 70 74 65 6c 2d 2d 6f 6c 64 2d 68 65 61    64 65 72 2d 6c 69 6e 65 20 6e 69 6c 29 0a 20 20  | ..gptel--old-header-line.nil)... | 
| 12a20 |  20 20 20 20 28 73 65 74 71 20 6d 6f 64 65 2d 6c    69 6e 65 2d 70 72 6f 63 65 73 73 20 6e 69 6c 29  | ....(setq.mode-line-process.nil) | 
| 12a40 |  29 29 29 0a 0a 28 64 65 66 75 6e 20 67 70 74 65    6c 2d 2d 75 70 64 61 74 65 2d 73 74 61 74 75 73  | )))..(defun.gptel--update-status | 
| 12a60 |  20 28 26 6f 70 74 69 6f 6e 61 6c 20 6d 73 67 20    66 61 63 65 29 0a 20 20 22 55 70 64 61 74 65 20  | .(&optional.msg.face)..."Update. | 
| 12a80 |  73 74 61 74 75 73 20 4d 53 47 20 69 6e 20 46 41    43 45 2e 22 0a 20 20 28 77 68 65 6e 20 67 70 74  | status.MSG.in.FACE."...(when.gpt | 
| 12aa0 |  65 6c 2d 6d 6f 64 65 0a 20 20 20 20 28 69 66 20    67 70 74 65 6c 2d 75 73 65 2d 68 65 61 64 65 72  | el-mode.....(if.gptel-use-header | 
| 12ac0 |  2d 6c 69 6e 65 0a 20 20 20 20 20 20 20 20 28 61    6e 64 20 28 63 6f 6e 73 70 20 68 65 61 64 65 72  | -line.........(and.(consp.header | 
| 12ae0 |  2d 6c 69 6e 65 2d 66 6f 72 6d 61 74 29 0a 20 20    20 20 20 20 20 20 20 20 20 28 73 65 74 66 20 28  | -line-format)............(setf.( | 
| 12b00 |  6e 74 68 20 31 20 68 65 61 64 65 72 2d 6c 69 6e    65 2d 66 6f 72 6d 61 74 29 0a 20 20 20 20 20 20  | nth.1.header-line-format)....... | 
| 12b20 |  20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 70    65 72 74 69 7a 65 20 6d 73 67 20 27 66 61 63 65  | ...........(propertize.msg.'face | 
| 12b40 |  20 66 61 63 65 29 29 29 0a 20 20 20 20 20 20 28    69 66 20 28 6d 65 6d 62 65 72 20 6d 73 67 20 27  | .face))).......(if.(member.msg.' | 
| 12b60 |  28 22 20 54 79 70 69 6e 67 2e 2e 2e 22 20 22 20    57 61 69 74 69 6e 67 2e 2e 2e 22 29 29 0a 20 20  | (".Typing...".".Waiting..."))... | 
| 12b80 |  20 20 20 20 20 20 20 20 28 73 65 74 71 20 6d 6f    64 65 2d 6c 69 6e 65 2d 70 72 6f 63 65 73 73 20  | ........(setq.mode-line-process. | 
| 12ba0 |  28 70 72 6f 70 65 72 74 69 7a 65 20 6d 73 67 20    27 66 61 63 65 20 66 61 63 65 29 29 0a 20 20 20  | (propertize.msg.'face.face)).... | 
| 12bc0 |  20 20 20 20 20 28 73 65 74 71 20 6d 6f 64 65 2d    6c 69 6e 65 2d 70 72 6f 63 65 73 73 0a 20 20 20  | .....(setq.mode-line-process.... | 
| 12be0 |  20 20 20 20 20 20 20 20 20 20 20 27 28 3a 65 76    61 6c 20 28 63 6f 6e 63 61 74 20 22 20 22 0a 20  | ...........'(:eval.(concat.".".. | 
| 12c00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 62 75 74 74 6f 6e 69 7a 65  | ......................(buttonize | 
| 12c20 |  20 67 70 74 65 6c 2d 6d 6f 64 65 6c 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .gptel-model.................... | 
| 12c40 |  20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61    20 28 26 72 65 73 74 20 5f 29 20 28 67 70 74 65  | .........(lambda.(&rest._).(gpte | 
| 12c60 |  6c 2d 6d 65 6e 75 29 29 29 29 29 29 0a 20 20 20    20 20 20 20 20 28 6d 65 73 73 61 67 65 20 28 70  | l-menu)))))).........(message.(p | 
| 12c80 |  72 6f 70 65 72 74 69 7a 65 20 6d 73 67 20 27 66    61 63 65 20 66 61 63 65 29 29 29 29 0a 20 20 20  | ropertize.msg.'face.face)))).... | 
| 12ca0 |  20 28 66 6f 72 63 65 2d 6d 6f 64 65 2d 6c 69 6e    65 2d 75 70 64 61 74 65 29 29 29 0a 0a 0c 0a 3b  | .(force-mode-line-update)))....; | 
| 12cc0 |  3b 20 53 65 6e 64 20 71 75 65 72 69 65 73 2c 20    68 61 6e 64 6c 65 20 72 65 73 70 6f 6e 73 65 73  | ;.Send.queries,.handle.responses | 
| 12ce0 |  0a 28 63 6c 2d 64 65 66 75 6e 20 67 70 74 65 6c    2d 72 65 71 75 65 73 74 0a 20 20 20 20 28 26 6f  | .(cl-defun.gptel-request.....(&o | 
| 12d00 |  70 74 69 6f 6e 61 6c 20 70 72 6f 6d 70 74 20 26    6b 65 79 20 63 61 6c 6c 62 61 63 6b 0a 20 20 20  | ptional.prompt.&key.callback.... | 
| 12d20 |  20 20 20 20 20 20 20 20 20 20 20 20 28 62 75 66    66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 66  | ............(buffer.(current-buf | 
| 12d40 |  66 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 70 6f 73 69 74 69 6f 6e 20 63 6f  | fer))................position.co | 
| 12d60 |  6e 74 65 78 74 20 64 72 79 2d 72 75 6e 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74  | ntext.dry-run................(st | 
| 12d80 |  72 65 61 6d 20 6e 69 6c 29 20 28 69 6e 2d 70 6c    61 63 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 20  | ream.nil).(in-place.nil)........ | 
| 12da0 |  20 20 20 20 20 20 20 20 28 73 79 73 74 65 6d 20    67 70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65  | ........(system.gptel--system-me | 
| 12dc0 |  73 73 61 67 65 29 29 0a 20 20 22 52 65 71 75 65    73 74 20 61 20 72 65 73 70 6f 6e 73 65 20 66 72  | ssage))..."Request.a.response.fr | 
| 12de0 |  6f 6d 20 74 68 65 20 60 67 70 74 65 6c 2d 62 61    63 6b 65 6e 64 27 20 66 6f 72 20 50 52 4f 4d 50  | om.the.`gptel-backend'.for.PROMP | 
| 12e00 |  54 2e 0a 0a 54 68 65 20 72 65 71 75 65 73 74 20    69 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 2c  | T...The.request.is.asynchronous, | 
| 12e20 |  20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d    6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e  | .the.function.immediately.return | 
| 12e40 |  73 0a 77 69 74 68 20 74 68 65 20 64 61 74 61 20    74 68 61 74 20 77 61 73 20 73 65 6e 74 2e 0a 0a  | s.with.the.data.that.was.sent... | 
| 12e60 |  4e 6f 74 65 3a 20 54 68 69 73 20 66 75 6e 63 74    69 6f 6e 20 69 73 20 6e 6f 74 20 66 75 6c 6c 79  | Note:.This.function.is.not.fully | 
| 12e80 |  20 73 65 6c 66 2d 63 6f 6e 74 61 69 6e 65 64 2e    20 20 43 6f 6e 73 69 64 65 72 0a 6c 65 74 2d 62  | .self-contained...Consider.let-b | 
| 12ea0 |  69 6e 64 69 6e 67 20 74 68 65 20 70 61 72 61 6d    65 74 65 72 73 20 60 67 70 74 65 6c 2d 62 61 63  | inding.the.parameters.`gptel-bac | 
| 12ec0 |  6b 65 6e 64 27 20 61 6e 64 20 60 67 70 74 65 6c    2d 6d 6f 64 65 6c 27 0a 61 72 6f 75 6e 64 20 63  | kend'.and.`gptel-model'.around.c | 
| 12ee0 |  61 6c 6c 73 20 74 6f 20 69 74 20 61 73 20 72 65    71 75 69 72 65 64 2e 0a 0a 49 66 20 50 52 4f 4d  | alls.to.it.as.required...If.PROM | 
| 12f00 |  50 54 20 69 73 0a 2d 20 61 20 73 74 72 69 6e 67    2c 20 69 74 20 69 73 20 75 73 65 64 20 74 6f 20  | PT.is.-.a.string,.it.is.used.to. | 
| 12f20 |  63 72 65 61 74 65 20 61 20 66 75 6c 6c 20 70 72    6f 6d 70 74 20 73 75 69 74 61 62 6c 65 20 66 6f  | create.a.full.prompt.suitable.fo | 
| 12f40 |  72 0a 20 20 73 65 6e 64 69 6e 67 20 74 6f 20 74    68 65 20 4c 4c 4d 2e 0a 2d 20 6e 69 6c 20 62 75  | r...sending.to.the.LLM..-.nil.bu | 
| 12f60 |  74 20 72 65 67 69 6f 6e 20 69 73 20 61 63 74 69    76 65 2c 20 74 68 65 20 72 65 67 69 6f 6e 20 63  | t.region.is.active,.the.region.c | 
| 12f80 |  6f 6e 74 65 6e 74 73 20 61 72 65 20 75 73 65 64    2e 0a 2d 20 6e 69 6c 2c 20 74 68 65 20 63 75 72  | ontents.are.used..-.nil,.the.cur | 
| 12fa0 |  72 65 6e 74 20 62 75 66 66 65 72 27 73 20 63 6f    6e 74 65 6e 74 73 20 75 70 20 74 6f 20 28 70 6f  | rent.buffer's.contents.up.to.(po | 
| 12fc0 |  69 6e 74 29 20 61 72 65 20 75 73 65 64 2e 0a 20    20 50 72 65 76 69 6f 75 73 20 72 65 73 70 6f 6e  | int).are.used....Previous.respon | 
| 12fe0 |  73 65 73 20 66 72 6f 6d 20 74 68 65 20 4c 4c 4d    20 61 72 65 20 69 64 65 6e 74 69 66 69 65 64 20  | ses.from.the.LLM.are.identified. | 
| 13000 |  61 73 20 72 65 73 70 6f 6e 73 65 73 2e 0a 2d 20    41 20 6c 69 73 74 20 6f 66 20 70 6c 69 73 74 73  | as.responses..-.A.list.of.plists | 
| 13020 |  2c 20 69 74 20 69 73 20 75 73 65 64 20 61 73 20    69 73 2e 0a 0a 4b 65 79 77 6f 72 64 20 61 72 67  | ,.it.is.used.as.is...Keyword.arg | 
| 13040 |  75 6d 65 6e 74 73 3a 0a 0a 43 41 4c 4c 42 41 43    4b 2c 20 69 66 20 73 75 70 70 6c 69 65 64 2c 20  | uments:..CALLBACK,.if.supplied,. | 
| 13060 |  69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 66    20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20  | is.a.function.of.two.arguments,. | 
| 13080 |  63 61 6c 6c 65 64 0a 77 69 74 68 20 74 68 65 20    52 45 53 50 4f 4e 53 45 20 28 61 20 73 74 72 69  | called.with.the.RESPONSE.(a.stri | 
| 130a0 |  6e 67 29 20 61 6e 64 20 49 4e 46 4f 20 28 61 20    70 6c 69 73 74 29 3a 0a 0a 20 28 63 61 6c 6c 62  | ng).and.INFO.(a.plist):...(callb | 
| 130c0 |  61 63 6b 20 52 45 53 50 4f 4e 53 45 20 49 4e 46    4f 29 0a 0a 52 45 53 50 4f 4e 53 45 20 69 73 20  | ack.RESPONSE.INFO)..RESPONSE.is. | 
| 130e0 |  6e 69 6c 20 69 66 20 74 68 65 72 65 20 77 61 73    20 6e 6f 20 72 65 73 70 6f 6e 73 65 20 6f 72 20  | nil.if.there.was.no.response.or. | 
| 13100 |  61 6e 20 65 72 72 6f 72 2e 0a 0a 54 68 65 20 49    4e 46 4f 20 70 6c 69 73 74 20 68 61 73 20 28 61  | an.error...The.INFO.plist.has.(a | 
| 13120 |  74 20 6c 65 61 73 74 29 20 74 68 65 20 66 6f 6c    6c 6f 77 69 6e 67 20 6b 65 79 73 3a 0a 3a 64 61  | t.least).the.following.keys:.:da | 
| 13140 |  74 61 20 20 20 20 20 20 20 20 20 2d 20 54 68 65    20 72 65 71 75 65 73 74 20 64 61 74 61 20 69 6e  | ta.........-.The.request.data.in | 
| 13160 |  63 6c 75 64 65 64 20 77 69 74 68 20 74 68 65 20    71 75 65 72 79 0a 3a 70 6f 73 69 74 69 6f 6e 20  | cluded.with.the.query.:position. | 
| 13180 |  20 20 20 20 2d 20 6d 61 72 6b 65 72 20 61 74 20    74 68 65 20 70 6f 69 6e 74 20 74 68 65 20 72 65  | ....-.marker.at.the.point.the.re | 
| 131a0 |  71 75 65 73 74 20 77 61 73 20 73 65 6e 74 2c 20    75 6e 6c 65 73 73 0a 20 20 20 20 20 20 20 20 20  | quest.was.sent,.unless.......... | 
| 131c0 |  20 20 20 20 20 20 20 50 4f 53 49 54 49 4f 4e 20    69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3a 62  | .......POSITION.is.specified..:b | 
| 131e0 |  75 66 66 65 72 20 20 20 20 20 20 20 2d 20 54 68    65 20 62 75 66 66 65 72 20 63 75 72 72 65 6e 74  | uffer.......-.The.buffer.current | 
| 13200 |  20 77 68 65 6e 20 74 68 65 20 72 65 71 75 65 73    74 20 77 61 73 20 73 65 6e 74 2c 0a 20 20 20 20  | .when.the.request.was.sent,..... | 
| 13220 |  20 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c 65    73 73 20 42 55 46 46 45 52 20 69 73 20 73 70 65  | ............unless.BUFFER.is.spe | 
| 13240 |  63 69 66 69 65 64 2e 0a 3a 73 74 61 74 75 73 20    20 20 20 20 20 20 2d 20 53 68 6f 72 74 20 73 74  | cified..:status.......-.Short.st | 
| 13260 |  72 69 6e 67 20 64 65 73 63 72 69 62 69 6e 67 20    74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  | ring.describing.the.result.of.th | 
| 13280 |  65 20 72 65 71 75 65 73 74 0a 0a 45 78 61 6d 70    6c 65 20 6f 66 20 61 20 63 61 6c 6c 62 61 63 6b  | e.request..Example.of.a.callback | 
| 132a0 |  20 74 68 61 74 20 6d 65 73 73 61 67 65 73 20 74    68 65 20 75 73 65 72 20 77 69 74 68 20 74 68 65  | .that.messages.the.user.with.the | 
| 132c0 |  20 72 65 73 70 6f 6e 73 65 0a 61 6e 64 20 69 6e    66 6f 3a 0a 0a 20 28 6c 61 6d 62 64 61 20 28 72  | .response.and.info:...(lambda.(r | 
| 132e0 |  65 73 70 6f 6e 73 65 20 69 6e 66 6f 29 0a 20 20    28 69 66 20 72 65 73 70 6f 6e 73 65 0a 20 20 20  | esponse.info)...(if.response.... | 
| 13300 |  20 20 20 28 6c 65 74 20 28 28 70 6f 73 6e 20 28    6d 61 72 6b 65 72 2d 70 6f 73 69 74 69 6f 6e 20  | ...(let.((posn.(marker-position. | 
| 13320 |  28 70 6c 69 73 74 2d 67 65 74 20 69 6e 66 6f 20    3a 70 6f 73 69 74 69 6f 6e 29 29 29 0a 20 20 20  | (plist-get.info.:position))).... | 
| 13340 |  20 20 20 20 20 20 20 20 20 28 62 75 66 20 20 28    62 75 66 66 65 72 2d 6e 61 6d 65 20 28 70 6c 69  | .........(buf..(buffer-name.(pli | 
| 13360 |  73 74 2d 67 65 74 20 69 6e 66 6f 20 3a 62 75 66    66 65 72 29 29 29 29 0a 20 20 20 20 20 20 20 20  | st-get.info.:buffer))))......... | 
| 13380 |  28 6d 65 73 73 61 67 65 20 5c 22 52 65 73 70 6f    6e 73 65 20 66 6f 72 20 72 65 71 75 65 73 74 20  | (message.\"Response.for.request. | 
| 133a0 |  66 72 6f 6d 20 25 53 20 61 74 20 25 64 3a 20 25    73 5c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  | from.%S.at.%d:.%s\"............. | 
| 133c0 |  20 20 20 20 20 62 75 66 20 70 6f 73 6e 20 72 65    73 70 6f 6e 73 65 29 29 0a 20 20 20 20 28 6d 65  | .....buf.posn.response)).....(me | 
| 133e0 |  73 73 61 67 65 20 5c 22 67 70 74 65 6c 2d 72 65    71 75 65 73 74 20 66 61 69 6c 65 64 20 77 69 74  | ssage.\"gptel-request.failed.wit | 
| 13400 |  68 20 6d 65 73 73 61 67 65 3a 20 25 73 5c 22 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 6c  | h.message:.%s\"..............(pl | 
| 13420 |  69 73 74 2d 67 65 74 20 69 6e 66 6f 20 3a 73 74    61 74 75 73 29 29 29 29 0a 0a 4f 72 2c 20 66 6f  | ist-get.info.:status))))..Or,.fo | 
| 13440 |  72 20 6a 75 73 74 20 74 68 65 20 72 65 73 70 6f    6e 73 65 3a 0a 0a 20 28 6c 61 6d 62 64 61 20 28  | r.just.the.response:...(lambda.( | 
| 13460 |  72 65 73 70 6f 6e 73 65 20 5f 29 0a 20 20 3b 3b    20 44 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69  | response._)...;;.Do.something.wi | 
| 13480 |  74 68 20 72 65 73 70 6f 6e 73 65 0a 20 20 28 6d    65 73 73 61 67 65 20 28 72 6f 74 31 33 2d 73 74  | th.response...(message.(rot13-st | 
| 134a0 |  72 69 6e 67 20 72 65 73 70 6f 6e 73 65 29 29 29    0a 0a 49 66 20 43 41 4c 4c 42 41 43 4b 20 69 73  | ring.response)))..If.CALLBACK.is | 
| 134c0 |  20 6f 6d 69 74 74 65 64 2c 20 74 68 65 20 72 65    73 70 6f 6e 73 65 20 69 73 20 69 6e 73 65 72 74  | .omitted,.the.response.is.insert | 
| 134e0 |  65 64 20 61 74 20 74 68 65 20 70 6f 69 6e 74 20    74 68 65 0a 72 65 71 75 65 73 74 20 77 61 73 20  | ed.at.the.point.the.request.was. | 
| 13500 |  73 65 6e 74 2e 0a 0a 42 55 46 46 45 52 20 61 6e    64 20 50 4f 53 49 54 49 4f 4e 20 61 72 65 20 74  | sent...BUFFER.and.POSITION.are.t | 
| 13520 |  68 65 20 62 75 66 66 65 72 20 61 6e 64 20 70 6f    73 69 74 69 6f 6e 20 28 69 6e 74 65 67 65 72 20  | he.buffer.and.position.(integer. | 
| 13540 |  6f 72 0a 6d 61 72 6b 65 72 29 20 61 74 20 77 68    69 63 68 20 74 68 65 20 72 65 73 70 6f 6e 73 65  | or.marker).at.which.the.response | 
| 13560 |  20 69 73 20 69 6e 73 65 72 74 65 64 2e 20 20 49    66 20 61 20 43 41 4c 4c 42 41 43 4b 20 69 73 0a  | .is.inserted...If.a.CALLBACK.is. | 
| 13580 |  73 70 65 63 69 66 69 65 64 2c 20 6e 6f 20 72 65    73 70 6f 6e 73 65 20 69 73 20 69 6e 73 65 72 74  | specified,.no.response.is.insert | 
| 135a0 |  65 64 20 61 6e 64 20 74 68 65 73 65 20 61 72 67    75 6d 65 6e 74 73 20 61 72 65 0a 69 67 6e 6f 72  | ed.and.these.arguments.are.ignor | 
| 135c0 |  65 64 2c 20 62 75 74 20 74 68 65 79 20 61 72 65    20 73 74 69 6c 6c 20 61 76 61 69 6c 61 62 6c 65  | ed,.but.they.are.still.available | 
| 135e0 |  20 69 6e 20 74 68 65 20 49 4e 46 4f 20 70 6c 69    73 74 20 70 61 73 73 65 64 0a 74 6f 20 43 41 4c  | .in.the.INFO.plist.passed.to.CAL | 
| 13600 |  4c 42 41 43 4b 20 66 6f 72 20 79 6f 75 20 74 6f    20 75 73 65 2e 0a 0a 42 55 46 46 45 52 20 64 65  | LBACK.for.you.to.use...BUFFER.de | 
| 13620 |  66 61 75 6c 74 73 20 74 6f 20 74 68 65 20 63 75    72 72 65 6e 74 20 62 75 66 66 65 72 2c 20 61 6e  | faults.to.the.current.buffer,.an | 
| 13640 |  64 20 50 4f 53 49 54 49 4f 4e 20 74 6f 20 74 68    65 20 76 61 6c 75 65 0a 6f 66 20 28 70 6f 69 6e  | d.POSITION.to.the.value.of.(poin | 
| 13660 |  74 29 20 6f 72 20 28 72 65 67 69 6f 6e 2d 65 6e    64 29 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  | t).or.(region-end),.depending.on | 
| 13680 |  20 77 68 65 74 68 65 72 20 74 68 65 20 72 65 67    69 6f 6e 20 69 73 0a 61 63 74 69 76 65 2e 0a 0a  | .whether.the.region.is.active... | 
| 136a0 |  43 4f 4e 54 45 58 54 20 69 73 20 61 6e 79 20 61    64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 20 6e  | CONTEXT.is.any.additional.data.n | 
| 136c0 |  65 65 64 65 64 20 66 6f 72 20 74 68 65 20 63 61    6c 6c 62 61 63 6b 20 74 6f 20 72 75 6e 2e 20 49  | eeded.for.the.callback.to.run..I | 
| 136e0 |  74 0a 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e    20 74 68 65 20 49 4e 46 4f 20 61 72 67 75 6d 65  | t.is.included.in.the.INFO.argume | 
| 13700 |  6e 74 20 74 6f 20 74 68 65 20 63 61 6c 6c 62 61    63 6b 2e 0a 0a 53 59 53 54 45 4d 20 69 73 20 74  | nt.to.the.callback...SYSTEM.is.t | 
| 13720 |  68 65 20 73 79 73 74 65 6d 20 6d 65 73 73 61 67    65 20 28 63 68 61 74 20 64 69 72 65 63 74 69 76  | he.system.message.(chat.directiv | 
| 13740 |  65 29 20 73 65 6e 74 20 74 6f 20 74 68 65 20 4c    4c 4d 2e 20 49 66 0a 6f 6d 69 74 74 65 64 2c 20  | e).sent.to.the.LLM..If.omitted,. | 
| 13760 |  74 68 65 20 76 61 6c 75 65 20 6f 66 20 60 67 70    74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73  | the.value.of.`gptel--system-mess | 
| 13780 |  61 67 65 27 20 66 6f 72 20 74 68 65 20 63 75 72    72 65 6e 74 0a 62 75 66 66 65 72 20 69 73 20 75  | age'.for.the.current.buffer.is.u | 
| 137a0 |  73 65 64 2e 0a 0a 54 68 65 20 66 6f 6c 6c 6f 77    69 6e 67 20 6b 65 79 77 6f 72 64 73 20 61 72 65  | sed...The.following.keywords.are | 
| 137c0 |  20 6d 61 69 6e 6c 79 20 66 6f 72 20 69 6e 74 65    72 6e 61 6c 20 75 73 65 3a 0a 0a 49 4e 2d 50 4c  | .mainly.for.internal.use:..IN-PL | 
| 137e0 |  41 43 45 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e    20 75 73 65 64 20 62 79 20 74 68 65 20 64 65 66  | ACE.is.a.boolean.used.by.the.def | 
| 13800 |  61 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20 77 68    65 6e 20 69 6e 73 65 72 74 69 6e 67 0a 74 68 65  | ault.callback.when.inserting.the | 
| 13820 |  20 72 65 73 70 6f 6e 73 65 20 74 6f 20 64 65 74    65 72 6d 69 6e 65 20 69 66 20 64 65 6c 69 6d 69  | .response.to.determine.if.delimi | 
| 13840 |  74 65 72 73 20 61 72 65 20 6e 65 65 64 65 64 20    62 65 74 77 65 65 6e 20 74 68 65 0a 70 72 6f 6d  | ters.are.needed.between.the.prom | 
| 13860 |  70 74 20 61 6e 64 20 74 68 65 20 72 65 73 70 6f    6e 73 65 2e 0a 0a 53 54 52 45 41 4d 20 69 73 20  | pt.and.the.response...STREAM.is. | 
| 13880 |  61 20 62 6f 6f 6c 65 61 6e 20 74 68 61 74 20 64    65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65  | a.boolean.that.determines.if.the | 
| 138a0 |  20 72 65 73 70 6f 6e 73 65 20 73 68 6f 75 6c 64    20 62 65 0a 73 74 72 65 61 6d 65 64 2c 20 61 73  | .response.should.be.streamed,.as | 
| 138c0 |  20 69 6e 20 60 67 70 74 65 6c 2d 73 74 72 65 61    6d 27 2e 20 44 6f 20 6e 6f 74 20 73 65 74 20 74  | .in.`gptel-stream'..Do.not.set.t | 
| 138e0 |  68 69 73 20 69 66 20 79 6f 75 20 61 72 65 0a 73    70 65 63 69 66 79 69 6e 67 20 61 20 63 75 73 74  | his.if.you.are.specifying.a.cust | 
| 13900 |  6f 6d 20 43 41 4c 4c 42 41 43 4b 21 0a 0a 49 66    20 44 52 59 2d 52 55 4e 20 69 73 20 6e 6f 6e 2d  | om.CALLBACK!..If.DRY-RUN.is.non- | 
| 13920 |  6e 69 6c 2c 20 63 6f 6e 73 74 72 75 63 74 20 61    6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 66 75  | nil,.construct.and.return.the.fu | 
| 13940 |  6c 6c 0a 71 75 65 72 79 20 64 61 74 61 20 61 73    20 75 73 75 61 6c 2c 20 62 75 74 20 64 6f 20 6e  | ll.query.data.as.usual,.but.do.n | 
| 13960 |  6f 74 20 73 65 6e 64 20 74 68 65 20 72 65 71 75    65 73 74 2e 0a 0a 4d 6f 64 65 6c 20 70 61 72 61  | ot.send.the.request...Model.para | 
| 13980 |  6d 65 74 65 72 73 20 63 61 6e 20 62 65 20 6c 65    74 2d 62 6f 75 6e 64 20 61 72 6f 75 6e 64 20 63  | meters.can.be.let-bound.around.c | 
| 139a0 |  61 6c 6c 73 20 74 6f 20 74 68 69 73 20 66 75 6e    63 74 69 6f 6e 2e 22 0a 20 20 28 64 65 63 6c 61  | alls.to.this.function."...(decla | 
| 139c0 |  72 65 20 28 69 6e 64 65 6e 74 20 31 29 29 0a 20    20 28 6c 65 74 2a 20 28 28 67 70 74 65 6c 2d 2d  | re.(indent.1))...(let*.((gptel-- | 
| 139e0 |  73 79 73 74 65 6d 2d 6d 65 73 73 61 67 65 20 73    79 73 74 65 6d 29 0a 20 20 20 20 20 20 20 20 20  | system-message.system).......... | 
| 13a00 |  28 67 70 74 65 6c 2d 73 74 72 65 61 6d 20 73 74    72 65 61 6d 29 0a 20 20 20 20 20 20 20 20 20 28  | (gptel-stream.stream)..........( | 
| 13a20 |  73 74 61 72 74 2d 6d 61 72 6b 65 72 0a 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20  | start-marker...........(cond.... | 
| 13a40 |  20 20 20 20 20 20 20 20 28 28 6e 75 6c 6c 20 70    6f 73 69 74 69 6f 6e 29 0a 20 20 20 20 20 20 20  | ........((null.position)........ | 
| 13a60 |  20 20 20 20 20 28 69 66 20 28 75 73 65 2d 72 65    67 69 6f 6e 2d 70 29 0a 20 20 20 20 20 20 20 20  | .....(if.(use-region-p)......... | 
| 13a80 |  20 20 20 20 20 20 20 20 28 73 65 74 2d 6d 61 72    6b 65 72 20 28 6d 61 6b 65 2d 6d 61 72 6b 65 72  | ........(set-marker.(make-marker | 
| 13aa0 |  29 20 28 72 65 67 69 6f 6e 2d 65 6e 64 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67  | ).(region-end))...............(g | 
| 13ac0 |  70 74 65 6c 2d 2d 61 74 2d 77 6f 72 64 2d 65 6e    64 20 28 70 6f 69 6e 74 2d 6d 61 72 6b 65 72 29  | ptel--at-word-end.(point-marker) | 
| 13ae0 |  29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28    28 6d 61 72 6b 65 72 70 20 70 6f 73 69 74 69 6f  | )))............((markerp.positio | 
| 13b00 |  6e 29 20 70 6f 73 69 74 69 6f 6e 29 0a 20 20 20    20 20 20 20 20 20 20 20 28 28 69 6e 74 65 67 65  | n).position)............((intege | 
| 13b20 |  72 70 20 70 6f 73 69 74 69 6f 6e 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 28 73 65 74 2d 6d 61  | rp.position).............(set-ma | 
| 13b40 |  72 6b 65 72 20 28 6d 61 6b 65 2d 6d 61 72 6b 65    72 29 20 70 6f 73 69 74 69 6f 6e 20 62 75 66 66  | rker.(make-marker).position.buff | 
| 13b60 |  65 72 29 29 29 29 0a 20 20 20 20 20 20 20 20 20    28 66 75 6c 6c 2d 70 72 6f 6d 70 74 0a 20 20 20  | er))))..........(full-prompt.... | 
| 13b80 |  20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20    20 20 20 20 20 20 20 20 28 28 6e 75 6c 6c 20 70  | .......(cond............((null.p | 
| 13ba0 |  72 6f 6d 70 74 29 20 28 67 70 74 65 6c 2d 2d 63    72 65 61 74 65 2d 70 72 6f 6d 70 74 20 73 74 61  | rompt).(gptel--create-prompt.sta | 
| 13bc0 |  72 74 2d 6d 61 72 6b 65 72 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 28 28 73 74 72 69 6e 67 70  | rt-marker))............((stringp | 
| 13be0 |  20 70 72 6f 6d 70 74 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 3b 3b 20 46 49 58 4d 45 20 44 65  | .prompt).............;;.FIXME.De | 
| 13c00 |  61 72 20 72 65 61 64 65 72 2c 20 77 65 6c 63 6f    6d 65 20 74 6f 20 4a 61 6e 6b 20 43 69 74 79 3a  | ar.reader,.welcome.to.Jank.City: | 
| 13c20 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69    74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20  | .............(with-temp-buffer.. | 
| 13c40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65    74 20 28 28 67 70 74 65 6c 2d 6d 6f 64 65 6c 20  | .............(let.((gptel-model. | 
| 13c60 |  28 62 75 66 66 65 72 2d 6c 6f 63 61 6c 2d 76 61    6c 75 65 20 27 67 70 74 65 6c 2d 6d 6f 64 65 6c  | (buffer-local-value.'gptel-model | 
| 13c80 |  20 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67  | .buffer)).....................(g | 
| 13ca0 |  70 74 65 6c 2d 62 61 63 6b 65 6e 64 20 28 62 75    66 66 65 72 2d 6c 6f 63 61 6c 2d 76 61 6c 75 65  | ptel-backend.(buffer-local-value | 
| 13cc0 |  20 27 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 20    62 75 66 66 65 72 29 29 29 0a 20 20 20 20 20 20  | .'gptel-backend.buffer)))....... | 
| 13ce0 |  20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72    74 20 70 72 6f 6d 70 74 29 0a 20 20 20 20 20 20  | ..........(insert.prompt)....... | 
| 13d00 |  20 20 20 20 20 20 20 20 20 20 28 67 70 74 65 6c    2d 2d 63 72 65 61 74 65 2d 70 72 6f 6d 70 74 29  | ..........(gptel--create-prompt) | 
| 13d20 |  29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28    28 63 6f 6e 73 70 20 70 72 6f 6d 70 74 29 20 70  | )))............((consp.prompt).p | 
| 13d40 |  72 6f 6d 70 74 29 29 29 0a 20 20 20 20 20 20 20    20 20 28 72 65 71 75 65 73 74 2d 64 61 74 61 20  | rompt)))..........(request-data. | 
| 13d60 |  28 67 70 74 65 6c 2d 2d 72 65 71 75 65 73 74 2d    64 61 74 61 20 67 70 74 65 6c 2d 62 61 63 6b 65  | (gptel--request-data.gptel-backe | 
| 13d80 |  6e 64 20 66 75 6c 6c 2d 70 72 6f 6d 70 74 29 29    0a 20 20 20 20 20 20 20 20 20 28 69 6e 66 6f 20  | nd.full-prompt))..........(info. | 
| 13da0 |  28 6c 69 73 74 20 3a 64 61 74 61 20 72 65 71 75    65 73 74 2d 64 61 74 61 0a 20 20 20 20 20 20 20  | (list.:data.request-data........ | 
| 13dc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 62    75 66 66 65 72 20 62 75 66 66 65 72 0a 20 20 20  | ..............:buffer.buffer.... | 
| 13de0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 3a 70 6f 73 69 74 69 6f 6e 20 73 74 61 72  | ..................:position.star | 
| 13e00 |  74 2d 6d 61 72 6b 65 72 29 29 29 0a 20 20 20 20    28 77 68 65 6e 20 63 6f 6e 74 65 78 74 20 28 70  | t-marker))).....(when.context.(p | 
| 13e20 |  6c 69 73 74 2d 70 75 74 20 69 6e 66 6f 20 3a 63    6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 29 29  | list-put.info.:context.context)) | 
| 13e40 |  0a 20 20 20 20 28 77 68 65 6e 20 69 6e 2d 70 6c    61 63 65 20 28 70 6c 69 73 74 2d 70 75 74 20 69  | .....(when.in-place.(plist-put.i | 
| 13e60 |  6e 66 6f 20 3a 69 6e 2d 70 6c 61 63 65 20 69 6e    2d 70 6c 61 63 65 29 29 0a 20 20 20 20 28 75 6e  | nfo.:in-place.in-place)).....(un | 
| 13e80 |  6c 65 73 73 20 64 72 79 2d 72 75 6e 0a 20 20 20    20 20 20 28 66 75 6e 63 61 6c 6c 20 28 69 66 20  | less.dry-run.......(funcall.(if. | 
| 13ea0 |  67 70 74 65 6c 2d 75 73 65 2d 63 75 72 6c 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | gptel-use-curl.................. | 
| 13ec0 |  20 20 23 27 67 70 74 65 6c 2d 63 75 72 6c 2d 67    65 74 2d 72 65 73 70 6f 6e 73 65 20 23 27 67 70  | ..#'gptel-curl-get-response.#'gp | 
| 13ee0 |  74 65 6c 2d 2d 75 72 6c 2d 67 65 74 2d 72 65 73    70 6f 6e 73 65 29 0a 20 20 20 20 20 20 20 20 20  | tel--url-get-response).......... | 
| 13f00 |  20 20 20 20 20 20 69 6e 66 6f 20 63 61 6c 6c 62    61 63 6b 29 29 0a 20 20 20 20 72 65 71 75 65 73  | ......info.callback)).....reques | 
| 13f20 |  74 2d 64 61 74 61 29 29 0a 0a 3b 3b 20 54 4f 44    4f 3a 20 48 61 6e 64 6c 65 20 6d 75 6c 74 69 70  | t-data))..;;.TODO:.Handle.multip | 
| 13f40 |  6c 65 20 72 65 71 75 65 73 74 73 28 23 31 35 29    2e 20 28 4f 6e 6c 79 20 6f 6e 65 20 72 65 71 75  | le.requests(#15)..(Only.one.requ | 
| 13f60 |  65 73 74 20 66 72 6f 6d 20 6f 6e 65 20 62 75 66    66 65 72 20 61 74 20 61 20 74 69 6d 65 3f 29 0a  | est.from.one.buffer.at.a.time?). | 
| 13f80 |  3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28    64 65 66 75 6e 20 67 70 74 65 6c 2d 73 65 6e 64  | ;;;###autoload.(defun.gptel-send | 
| 13fa0 |  20 28 26 6f 70 74 69 6f 6e 61 6c 20 61 72 67 29    0a 20 20 22 53 75 62 6d 69 74 20 74 68 69 73 20  | .(&optional.arg)..."Submit.this. | 
| 13fc0 |  70 72 6f 6d 70 74 20 74 6f 20 74 68 65 20 63 75    72 72 65 6e 74 20 4c 4c 4d 20 62 61 63 6b 65 6e  | prompt.to.the.current.LLM.backen | 
| 13fe0 |  64 2e 0a 0a 42 79 20 64 65 66 61 75 6c 74 2c 20    74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  | d...By.default,.the.contents.of. | 
| 14000 |  74 68 65 20 62 75 66 66 65 72 20 75 70 20 74 6f    20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 73 69  | the.buffer.up.to.the.cursor.posi | 
| 14020 |  74 69 6f 6e 0a 61 72 65 20 73 65 6e 74 2e 20 20    49 66 20 74 68 65 20 72 65 67 69 6f 6e 20 69 73  | tion.are.sent...If.the.region.is | 
| 14040 |  20 61 63 74 69 76 65 2c 20 69 74 73 20 63 6f 6e    74 65 6e 74 73 20 61 72 65 20 73 65 6e 74 0a 69  | .active,.its.contents.are.sent.i | 
| 14060 |  6e 73 74 65 61 64 2e 0a 0a 54 68 65 20 72 65 73    70 6f 6e 73 65 20 66 72 6f 6d 20 74 68 65 20 4c  | nstead...The.response.from.the.L | 
| 14080 |  4c 4d 20 69 73 20 69 6e 73 65 72 74 65 64 20 62    65 6c 6f 77 20 74 68 65 20 63 75 72 73 6f 72 20  | LM.is.inserted.below.the.cursor. | 
| 140a0 |  70 6f 73 69 74 69 6f 6e 0a 61 74 20 74 68 65 20    74 69 6d 65 20 6f 66 20 73 65 6e 64 69 6e 67 2e  | position.at.the.time.of.sending. | 
| 140c0 |  20 20 54 6f 20 63 68 61 6e 67 65 20 74 68 69 73    20 62 65 68 61 76 69 6f 72 20 6f 72 20 6d 6f 64  | ..To.change.this.behavior.or.mod | 
| 140e0 |  65 6c 0a 70 61 72 61 6d 65 74 65 72 73 2c 20 75    73 65 20 70 72 65 66 69 78 20 61 72 67 20 41 52  | el.parameters,.use.prefix.arg.AR | 
| 14100 |  47 20 61 63 74 69 76 61 74 65 20 61 20 74 72 61    6e 73 69 65 6e 74 20 6d 65 6e 75 20 77 69 74 68  | G.activate.a.transient.menu.with | 
| 14120 |  0a 6d 6f 72 65 20 6f 70 74 69 6f 6e 73 20 69 6e    73 74 65 61 64 2e 0a 0a 54 68 69 73 20 63 6f 6d  | .more.options.instead...This.com | 
| 14140 |  6d 61 6e 64 20 69 73 20 61 73 79 6e 63 68 72 6f    6e 6f 75 73 2c 20 79 6f 75 20 63 61 6e 20 63 6f  | mand.is.asynchronous,.you.can.co | 
| 14160 |  6e 74 69 6e 75 65 20 74 6f 20 75 73 65 20 45 6d    61 63 73 20 77 68 69 6c 65 0a 77 61 69 74 69 6e  | ntinue.to.use.Emacs.while.waitin | 
| 14180 |  67 20 66 6f 72 20 74 68 65 20 72 65 73 70 6f 6e    73 65 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74  | g.for.the.response."...(interact | 
| 141a0 |  69 76 65 20 22 50 22 29 0a 20 20 28 69 66 20 28    61 6e 64 20 61 72 67 20 28 72 65 71 75 69 72 65  | ive."P")...(if.(and.arg.(require | 
| 141c0 |  20 27 67 70 74 65 6c 2d 74 72 61 6e 73 69 65 6e    74 20 6e 69 6c 20 74 29 29 0a 20 20 20 20 20 20  | .'gptel-transient.nil.t))....... | 
| 141e0 |  28 63 61 6c 6c 2d 69 6e 74 65 72 61 63 74 69 76    65 6c 79 20 23 27 67 70 74 65 6c 2d 6d 65 6e 75  | (call-interactively.#'gptel-menu | 
| 14200 |  29 0a 20 20 28 6d 65 73 73 61 67 65 20 22 51 75    65 72 79 69 6e 67 20 25 73 2e 2e 2e 22 20 28 67  | )...(message."Querying.%s...".(g | 
| 14220 |  70 74 65 6c 2d 62 61 63 6b 65 6e 64 2d 6e 61 6d    65 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 29  | ptel-backend-name.gptel-backend) | 
| 14240 |  29 0a 20 20 28 67 70 74 65 6c 2d 2d 73 61 6e 69    74 69 7a 65 2d 6d 6f 64 65 6c 29 0a 20 20 28 67  | )...(gptel--sanitize-model)...(g | 
| 14260 |  70 74 65 6c 2d 72 65 71 75 65 73 74 20 6e 69 6c    20 3a 73 74 72 65 61 6d 20 67 70 74 65 6c 2d 73  | ptel-request.nil.:stream.gptel-s | 
| 14280 |  74 72 65 61 6d 29 0a 20 20 28 67 70 74 65 6c 2d    2d 75 70 64 61 74 65 2d 73 74 61 74 75 73 20 22  | tream)...(gptel--update-status." | 
| 142a0 |  20 57 61 69 74 69 6e 67 2e 2e 2e 22 20 27 77 61    72 6e 69 6e 67 29 29 29 0a 0a 28 64 65 63 6c 61  | .Waiting...".'warning)))..(decla | 
| 142c0 |  72 65 2d 66 75 6e 63 74 69 6f 6e 20 6a 73 6f 6e    2d 70 72 65 74 74 79 2d 70 72 69 6e 74 2d 62 75  | re-function.json-pretty-print-bu | 
| 142e0 |  66 66 65 72 20 22 6a 73 6f 6e 22 29 0a 28 64 65    66 75 6e 20 67 70 74 65 6c 2d 2d 69 6e 73 70 65  | ffer."json").(defun.gptel--inspe | 
| 14300 |  63 74 2d 71 75 65 72 79 20 28 72 65 71 75 65 73    74 2d 64 61 74 61 20 26 6f 70 74 69 6f 6e 61 6c  | ct-query.(request-data.&optional | 
| 14320 |  20 61 72 67 29 0a 20 20 22 53 68 6f 77 20 52 45    51 55 45 53 54 2d 44 41 54 41 2c 20 74 68 65 20  | .arg)..."Show.REQUEST-DATA,.the. | 
| 14340 |  66 75 6c 6c 20 4c 4c 4d 20 71 75 65 72 79 20 74    6f 20 62 65 20 73 65 6e 74 2c 20 69 6e 20 61 20  | full.LLM.query.to.be.sent,.in.a. | 
| 14360 |  62 75 66 66 65 72 2e 0a 0a 54 68 69 73 20 66 75    6e 63 74 69 6f 6e 73 20 61 73 20 61 20 64 72 79  | buffer...This.functions.as.a.dry | 
| 14380 |  20 72 75 6e 20 6f 66 20 60 67 70 74 65 6c 2d 73    65 6e 64 27 2e 20 20 49 66 20 41 52 47 20 69 73  | .run.of.`gptel-send'...If.ARG.is | 
| 143a0 |  0a 74 68 65 20 73 79 6d 62 6f 6c 20 6a 73 6f 6e    2c 20 73 68 6f 77 20 74 68 65 20 65 6e 63 6f 64  | .the.symbol.json,.show.the.encod | 
| 143c0 |  65 64 20 4a 53 4f 4e 20 71 75 65 72 79 20 69 6e    73 74 65 61 64 20 6f 66 20 74 68 65 20 6c 69 73  | ed.JSON.query.instead.of.the.lis | 
| 143e0 |  70 0a 73 74 72 75 63 74 75 72 65 20 67 70 74 65    6c 20 75 73 65 73 2e 22 0a 20 20 28 77 69 74 68  | p.structure.gptel.uses."...(with | 
| 14400 |  2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20    28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61  | -current-buffer.(get-buffer-crea | 
| 14420 |  74 65 20 22 2a 67 70 74 65 6c 2d 71 75 65 72 79    2a 22 29 0a 20 20 20 20 28 6c 65 74 20 28 28 73  | te."*gptel-query*").....(let.((s | 
| 14440 |  74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 20 28    63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29  | tandard-output.(current-buffer)) | 
| 14460 |  0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 68 69    62 69 74 2d 72 65 61 64 2d 6f 6e 6c 79 20 74 29  | ...........(inhibit-read-only.t) | 
| 14480 |  29 0a 20 20 20 20 20 20 28 62 75 66 66 65 72 2d    64 69 73 61 62 6c 65 2d 75 6e 64 6f 29 0a 20 20  | ).......(buffer-disable-undo)... | 
| 144a0 |  20 20 20 20 28 65 72 61 73 65 2d 62 75 66 66 65    72 29 0a 20 20 20 20 20 20 28 69 66 20 28 65 71  | ....(erase-buffer).......(if.(eq | 
| 144c0 |  20 61 72 67 20 27 6a 73 6f 6e 29 0a 20 20 20 20    20 20 20 20 20 20 28 70 72 6f 67 6e 20 28 66 75  | .arg.'json)...........(progn.(fu | 
| 144e0 |  6e 64 61 6d 65 6e 74 61 6c 2d 6d 6f 64 65 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ndamental-mode)................. | 
| 14500 |  20 28 69 6e 73 65 72 74 20 28 67 70 74 65 6c 2d    2d 6a 73 6f 6e 2d 65 6e 63 6f 64 65 20 72 65 71  | .(insert.(gptel--json-encode.req | 
| 14520 |  75 65 73 74 2d 64 61 74 61 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 6a 73  | uest-data))..................(js | 
| 14540 |  6f 6e 2d 70 72 65 74 74 79 2d 70 72 69 6e 74 2d    62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20 20  | on-pretty-print-buffer))........ | 
| 14560 |  20 28 6c 69 73 70 2d 64 61 74 61 2d 6d 6f 64 65    29 0a 20 20 20 20 20 20 20 20 28 70 72 69 6e 31  | .(lisp-data-mode).........(prin1 | 
| 14580 |  20 72 65 71 75 65 73 74 2d 64 61 74 61 29 0a 20    20 20 20 20 20 20 20 28 70 70 2d 62 75 66 66 65  | .request-data).........(pp-buffe | 
| 145a0 |  72 29 29 0a 20 20 20 20 20 20 28 67 6f 74 6f 2d    63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29  | r)).......(goto-char.(point-min) | 
| 145c0 |  29 0a 20 20 20 20 20 20 28 76 69 65 77 2d 6d 6f    64 65 20 31 29 0a 20 20 20 20 20 20 28 64 69 73  | ).......(view-mode.1).......(dis | 
| 145e0 |  70 6c 61 79 2d 62 75 66 66 65 72 20 28 63 75 72    72 65 6e 74 2d 62 75 66 66 65 72 29 20 67 70 74  | play-buffer.(current-buffer).gpt | 
| 14600 |  65 6c 2d 64 69 73 70 6c 61 79 2d 62 75 66 66 65    72 2d 61 63 74 69 6f 6e 29 29 29 29 0a 0a 28 64  | el-display-buffer-action))))..(d | 
| 14620 |  65 66 75 6e 20 67 70 74 65 6c 2d 2d 69 6e 73 65    72 74 2d 72 65 73 70 6f 6e 73 65 20 28 72 65 73  | efun.gptel--insert-response.(res | 
| 14640 |  70 6f 6e 73 65 20 69 6e 66 6f 29 0a 20 20 22 49    6e 73 65 72 74 20 74 68 65 20 4c 4c 4d 20 52 45  | ponse.info)..."Insert.the.LLM.RE | 
| 14660 |  53 50 4f 4e 53 45 20 69 6e 74 6f 20 74 68 65 20    67 70 74 65 6c 20 62 75 66 66 65 72 2e 0a 0a 49  | SPONSE.into.the.gptel.buffer...I | 
| 14680 |  4e 46 4f 20 69 73 20 61 20 70 6c 69 73 74 20 63    6f 6e 74 61 69 6e 69 6e 67 20 69 6e 66 6f 72 6d  | NFO.is.a.plist.containing.inform | 
| 146a0 |  61 74 69 6f 6e 20 72 65 6c 65 76 61 6e 74 20 74    6f 20 74 68 69 73 20 62 75 66 66 65 72 2e 0a 53  | ation.relevant.to.this.buffer..S | 
| 146c0 |  65 65 20 60 67 70 74 65 6c 2d 2d 75 72 6c 2d 67    65 74 2d 72 65 73 70 6f 6e 73 65 27 20 66 6f 72  | ee.`gptel--url-get-response'.for | 
| 146e0 |  20 64 65 74 61 69 6c 73 2e 22 0a 20 20 28 6c 65    74 2a 20 28 28 73 74 61 74 75 73 2d 73 74 72 20  | .details."...(let*.((status-str. | 
| 14700 |  20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e 66 6f    20 3a 73 74 61 74 75 73 29 29 0a 20 20 20 20 20  | .(plist-get.info.:status))...... | 
| 14720 |  20 20 20 20 28 67 70 74 65 6c 2d 62 75 66 66 65    72 20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e 66  | ....(gptel-buffer.(plist-get.inf | 
| 14740 |  6f 20 3a 62 75 66 66 65 72 29 29 0a 20 20 20 20    20 20 20 20 20 28 73 74 61 72 74 2d 6d 61 72 6b  | o.:buffer))..........(start-mark | 
| 14760 |  65 72 20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e    66 6f 20 3a 70 6f 73 69 74 69 6f 6e 29 29 0a 20  | er.(plist-get.info.:position)).. | 
| 14780 |  20 20 20 20 20 20 20 20 72 65 73 70 6f 6e 73 65    2d 62 65 67 20 72 65 73 70 6f 6e 73 65 2d 65 6e  | ........response-beg.response-en | 
| 147a0 |  64 29 0a 20 20 20 20 3b 3b 20 48 61 6e 64 6c 65    20 72 65 61 64 2d 6f 6e 6c 79 20 62 75 66 66 65  | d).....;;.Handle.read-only.buffe | 
| 147c0 |  72 73 0a 20 20 20 20 28 77 68 65 6e 20 28 77 69    74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65  | rs.....(when.(with-current-buffe | 
| 147e0 |  72 20 67 70 74 65 6c 2d 62 75 66 66 65 72 0a 20    20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 62  | r.gptel-buffer.............(or.b | 
| 14800 |  75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | uffer-read-only................. | 
| 14820 |  28 67 65 74 2d 63 68 61 72 2d 70 72 6f 70 65 72    74 79 20 73 74 61 72 74 2d 6d 61 72 6b 65 72 20  | (get-char-property.start-marker. | 
| 14840 |  27 72 65 61 64 2d 6f 6e 6c 79 29 29 29 0a 20 20    20 20 20 20 28 6d 65 73 73 61 67 65 20 22 42 75  | 'read-only))).......(message."Bu | 
| 14860 |  66 66 65 72 20 69 73 20 72 65 61 64 20 6f 6e 6c    79 2c 20 64 69 73 70 6c 61 79 69 6e 67 20 72 65  | ffer.is.read.only,.displaying.re | 
| 14880 |  70 6c 79 20 69 6e 20 62 75 66 66 65 72 20 5c 22    2a 4c 4c 4d 20 72 65 73 70 6f 6e 73 65 2a 5c 22  | ply.in.buffer.\"*LLM.response*\" | 
| 148a0 |  22 29 0a 20 20 20 20 20 20 28 64 69 73 70 6c 61    79 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20  | ").......(display-buffer........ | 
| 148c0 |  28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75    66 66 65 72 20 28 67 65 74 2d 62 75 66 66 65 72  | (with-current-buffer.(get-buffer | 
| 148e0 |  2d 63 72 65 61 74 65 20 22 2a 4c 4c 4d 20 72 65    73 70 6f 6e 73 65 2a 22 29 0a 20 20 20 20 20 20  | -create."*LLM.response*")....... | 
| 14900 |  20 20 20 28 76 69 73 75 61 6c 2d 6c 69 6e 65 2d    6d 6f 64 65 20 31 29 0a 20 20 20 20 20 20 20 20  | ...(visual-line-mode.1)......... | 
| 14920 |  20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69    6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 20 20 20  | .(goto-char.(point-max))........ | 
| 14940 |  20 20 28 6d 6f 76 65 2d 6d 61 72 6b 65 72 20 73    74 61 72 74 2d 6d 61 72 6b 65 72 20 28 70 6f 69  | ..(move-marker.start-marker.(poi | 
| 14960 |  6e 74 29 20 28 63 75 72 72 65 6e 74 2d 62 75 66    66 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 28  | nt).(current-buffer))..........( | 
| 14980 |  63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29    0a 20 20 20 20 20 20 20 27 28 28 64 69 73 70 6c  | current-buffer))........'((displ | 
| 149a0 |  61 79 2d 62 75 66 66 65 72 2d 72 65 75 73 65 2d    77 69 6e 64 6f 77 0a 20 20 20 20 20 20 20 20 20  | ay-buffer-reuse-window.......... | 
| 149c0 |  20 64 69 73 70 6c 61 79 2d 62 75 66 66 65 72 2d    70 6f 70 2d 75 70 2d 77 69 6e 64 6f 77 29 0a 20  | .display-buffer-pop-up-window).. | 
| 149e0 |  20 20 20 20 20 20 20 20 28 72 65 75 73 61 62 6c    65 2d 66 72 61 6d 65 73 20 2e 20 76 69 73 69 62  | ........(reusable-frames...visib | 
| 14a00 |  6c 65 29 29 29 29 0a 20 20 20 20 3b 3b 20 49 6e    73 65 72 74 20 72 65 73 70 6f 6e 73 65 20 61 6e  | le)))).....;;.Insert.response.an | 
| 14a20 |  64 20 73 74 61 74 75 73 20 6d 65 73 73 61 67 65    2f 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20  | d.status.message/error.message.. | 
| 14a40 |  20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74    2d 62 75 66 66 65 72 20 67 70 74 65 6c 2d 62 75  | ...(with-current-buffer.gptel-bu | 
| 14a60 |  66 66 65 72 0a 20 20 20 20 20 20 28 69 66 20 72    65 73 70 6f 6e 73 65 0a 20 20 20 20 20 20 20 20  | ffer.......(if.response......... | 
| 14a80 |  20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 20 20    20 20 20 20 20 28 73 65 74 71 20 72 65 73 70 6f  | ..(progn.............(setq.respo | 
| 14aa0 |  6e 73 65 20 28 67 70 74 65 6c 2d 2d 74 72 61 6e    73 66 6f 72 6d 2d 72 65 73 70 6f 6e 73 65 0a 20  | nse.(gptel--transform-response.. | 
| 14ac0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65  | ..............................re | 
| 14ae0 |  73 70 6f 6e 73 65 20 67 70 74 65 6c 2d 62 75 66    66 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20  | sponse.gptel-buffer))........... | 
| 14b00 |  20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f    6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..(save-excursion............... | 
| 14b20 |  28 70 75 74 2d 74 65 78 74 2d 70 72 6f 70 65 72    74 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | (put-text-property.............. | 
| 14b40 |  20 20 30 20 28 6c 65 6e 67 74 68 20 72 65 73 70    6f 6e 73 65 29 20 27 67 70 74 65 6c 20 27 72 65  | ..0.(length.response).'gptel.'re | 
| 14b60 |  73 70 6f 6e 73 65 20 72 65 73 70 6f 6e 73 65 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | sponse.response)...............( | 
| 14b80 |  77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66    66 65 72 20 28 6d 61 72 6b 65 72 2d 62 75 66 66  | with-current-buffer.(marker-buff | 
| 14ba0 |  65 72 20 73 74 61 72 74 2d 6d 61 72 6b 65 72 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | er.start-marker)................ | 
| 14bc0 |  20 28 67 6f 74 6f 2d 63 68 61 72 20 73 74 61 72    74 2d 6d 61 72 6b 65 72 29 0a 20 20 20 20 20 20  | .(goto-char.start-marker)....... | 
| 14be0 |  20 20 20 20 20 20 20 20 20 20 28 72 75 6e 2d 68    6f 6f 6b 73 20 27 67 70 74 65 6c 2d 70 72 65 2d  | ..........(run-hooks.'gptel-pre- | 
| 14c00 |  72 65 73 70 6f 6e 73 65 2d 68 6f 6f 6b 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | response-hook).................( | 
| 14c20 |  75 6e 6c 65 73 73 20 28 6f 72 20 28 62 6f 62 70    29 20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e 66  | unless.(or.(bobp).(plist-get.inf | 
| 14c40 |  6f 20 3a 69 6e 2d 70 6c 61 63 65 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | o.:in-place))................... | 
| 14c60 |  28 69 6e 73 65 72 74 20 22 5c 6e 5c 6e 22 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | (insert."\n\n")................. | 
| 14c80 |  20 20 28 77 68 65 6e 20 67 70 74 65 6c 2d 6d 6f    64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..(when.gptel-mode.............. | 
| 14ca0 |  20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28    67 70 74 65 6c 2d 72 65 73 70 6f 6e 73 65 2d 70  | .......(insert.(gptel-response-p | 
| 14cc0 |  72 65 66 69 78 2d 73 74 72 69 6e 67 29 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | refix-string))))................ | 
| 14ce0 |  20 28 73 65 74 71 20 72 65 73 70 6f 6e 73 65 2d    62 65 67 20 28 70 6f 69 6e 74 29 29 20 3b 53 61  | .(setq.response-beg.(point)).;Sa | 
| 14d00 |  76 65 20 72 65 73 70 6f 6e 73 65 20 73 74 61 72    74 20 70 6f 73 69 74 69 6f 6e 0a 20 20 20 20 20  | ve.response.start.position...... | 
| 14d20 |  20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65    72 74 20 72 65 73 70 6f 6e 73 65 29 0a 20 20 20  | ...........(insert.response).... | 
| 14d40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65    74 71 20 72 65 73 70 6f 6e 73 65 2d 65 6e 64 20  | .............(setq.response-end. | 
| 14d60 |  28 70 6f 69 6e 74 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 70 75 6c 73 65 2d  | (point)).................(pulse- | 
| 14d80 |  6d 6f 6d 65 6e 74 61 72 79 2d 68 69 67 68 6c 69    67 68 74 2d 72 65 67 69 6f 6e 20 72 65 73 70 6f  | momentary-highlight-region.respo | 
| 14da0 |  6e 73 65 2d 62 65 67 20 72 65 73 70 6f 6e 73 65    2d 65 6e 64 29 0a 20 20 20 20 20 20 20 20 20 20  | nse-beg.response-end)........... | 
| 14dc0 |  20 20 20 20 20 20 28 77 68 65 6e 20 67 70 74 65    6c 2d 6d 6f 64 65 20 28 69 6e 73 65 72 74 20 22  | ......(when.gptel-mode.(insert." | 
| 14de0 |  5c 6e 5c 6e 22 20 28 67 70 74 65 6c 2d 70 72 6f    6d 70 74 2d 70 72 65 66 69 78 2d 73 74 72 69 6e  | \n\n".(gptel-prompt-prefix-strin | 
| 14e00 |  67 29 29 29 29 20 3b 53 61 76 65 20 72 65 73 70    6f 6e 73 65 20 65 6e 64 20 70 6f 73 69 74 69 6f  | g)))).;Save.response.end.positio | 
| 14e20 |  6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 77 68 65 6e 20 67 70 74 65 6c 2d 6d 6f 64 65  | n...............(when.gptel-mode | 
| 14e40 |  20 28 67 70 74 65 6c 2d 2d 75 70 64 61 74 65 2d    73 74 61 74 75 73 20 22 20 52 65 61 64 79 22 20  | .(gptel--update-status.".Ready". | 
| 14e60 |  27 73 75 63 63 65 73 73 29 29 29 29 0a 20 20 20    20 20 20 20 20 28 67 70 74 65 6c 2d 2d 75 70 64  | 'success)))).........(gptel--upd | 
| 14e80 |  61 74 65 2d 73 74 61 74 75 73 0a 20 20 20 20 20    20 20 20 20 28 66 6f 72 6d 61 74 20 22 20 52 65  | ate-status..........(format.".Re | 
| 14ea0 |  73 70 6f 6e 73 65 20 45 72 72 6f 72 3a 20 25 73    22 20 73 74 61 74 75 73 2d 73 74 72 29 20 27 65  | sponse.Error:.%s".status-str).'e | 
| 14ec0 |  72 72 6f 72 29 0a 20 20 20 20 20 20 20 20 28 6d    65 73 73 61 67 65 20 22 67 70 74 65 6c 20 72 65  | rror).........(message."gptel.re | 
| 14ee0 |  73 70 6f 6e 73 65 20 65 72 72 6f 72 3a 20 28 25    73 29 20 25 73 22 0a 20 20 20 20 20 20 20 20 20  | sponse.error:.(%s).%s".......... | 
| 14f00 |  20 20 20 20 20 20 20 20 73 74 61 74 75 73 2d 73    74 72 20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e  | ........status-str.(plist-get.in | 
| 14f20 |  66 6f 20 3a 65 72 72 6f 72 29 29 29 29 0a 20 20    20 20 3b 3b 20 52 75 6e 20 68 6f 6f 6b 20 69 6e  | fo.:error)))).....;;.Run.hook.in | 
| 14f40 |  20 76 69 73 69 62 6c 65 20 77 69 6e 64 6f 77 20    74 6f 20 73 65 74 20 77 69 6e 64 6f 77 2d 70 6f  | .visible.window.to.set.window-po | 
| 14f60 |  69 6e 74 2c 20 42 55 47 20 23 32 36 39 0a 20 20    20 20 28 69 66 2d 6c 65 74 20 28 28 67 70 74 65  | int,.BUG.#269.....(if-let.((gpte | 
| 14f80 |  6c 2d 77 69 6e 64 6f 77 20 28 67 65 74 2d 62 75    66 66 65 72 2d 77 69 6e 64 6f 77 20 67 70 74 65  | l-window.(get-buffer-window.gpte | 
| 14fa0 |  6c 2d 62 75 66 66 65 72 20 27 76 69 73 69 62 6c    65 29 29 29 0a 20 20 20 20 20 20 20 20 28 77 69  | l-buffer.'visible))).........(wi | 
| 14fc0 |  74 68 2d 73 65 6c 65 63 74 65 64 2d 77 69 6e 64    6f 77 20 67 70 74 65 6c 2d 77 69 6e 64 6f 77 0a  | th-selected-window.gptel-window. | 
| 14fe0 |  20 20 20 20 20 20 20 20 20 20 28 72 75 6e 2d 68    6f 6f 6b 2d 77 69 74 68 2d 61 72 67 73 20 27 67  | ..........(run-hook-with-args.'g | 
| 15000 |  70 74 65 6c 2d 70 6f 73 74 2d 72 65 73 70 6f 6e    73 65 2d 66 75 6e 63 74 69 6f 6e 73 20 72 65 73  | ptel-post-response-functions.res | 
| 15020 |  70 6f 6e 73 65 2d 62 65 67 20 72 65 73 70 6f 6e    73 65 2d 65 6e 64 29 29 0a 20 20 20 20 20 20 28  | ponse-beg.response-end)).......( | 
| 15040 |  77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66    66 65 72 20 67 70 74 65 6c 2d 62 75 66 66 65 72  | with-current-buffer.gptel-buffer | 
| 15060 |  0a 20 20 20 20 20 20 20 20 28 72 75 6e 2d 68 6f    6f 6b 2d 77 69 74 68 2d 61 72 67 73 20 27 67 70  | .........(run-hook-with-args.'gp | 
| 15080 |  74 65 6c 2d 70 6f 73 74 2d 72 65 73 70 6f 6e 73    65 2d 66 75 6e 63 74 69 6f 6e 73 20 72 65 73 70  | tel-post-response-functions.resp | 
| 150a0 |  6f 6e 73 65 2d 62 65 67 20 72 65 73 70 6f 6e 73    65 2d 65 6e 64 29 29 29 29 29 0a 0a 28 64 65 66  | onse-beg.response-end)))))..(def | 
| 150c0 |  75 6e 20 67 70 74 65 6c 2d 2d 63 72 65 61 74 65    2d 70 72 6f 6d 70 74 20 28 26 6f 70 74 69 6f 6e  | un.gptel--create-prompt.(&option | 
| 150e0 |  61 6c 20 70 72 6f 6d 70 74 2d 65 6e 64 29 0a 20    20 22 52 65 74 75 72 6e 20 61 20 66 75 6c 6c 20  | al.prompt-end)..."Return.a.full. | 
| 15100 |  63 6f 6e 76 65 72 73 61 74 69 6f 6e 20 70 72 6f    6d 70 74 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e  | conversation.prompt.from.the.con | 
| 15120 |  74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 62 75    66 66 65 72 2e 0a 0a 49 66 20 60 67 70 74 65 6c  | tents.of.this.buffer...If.`gptel | 
| 15140 |  2d 2d 6e 75 6d 2d 6d 65 73 73 61 67 65 73 2d 74    6f 2d 73 65 6e 64 27 20 69 73 20 73 65 74 2c 20  | --num-messages-to-send'.is.set,. | 
| 15160 |  6c 69 6d 69 74 20 74 6f 20 74 68 61 74 20 6d 61    6e 79 0a 72 65 63 65 6e 74 20 65 78 63 68 61 6e  | limit.to.that.many.recent.exchan | 
| 15180 |  67 65 73 2e 0a 0a 49 66 20 74 68 65 20 72 65 67    69 6f 6e 20 69 73 20 61 63 74 69 76 65 20 6c 69  | ges...If.the.region.is.active.li | 
| 151a0 |  6d 69 74 20 74 68 65 20 70 72 6f 6d 70 74 20 74    6f 20 74 68 65 20 72 65 67 69 6f 6e 20 63 6f 6e  | mit.the.prompt.to.the.region.con | 
| 151c0 |  74 65 6e 74 73 0a 69 6e 73 74 65 61 64 2e 0a 0a    49 66 20 50 52 4f 4d 50 54 2d 45 4e 44 20 28 61  | tents.instead...If.PROMPT-END.(a | 
| 151e0 |  20 6d 61 72 6b 65 72 29 20 69 73 20 70 72 6f 76    69 64 65 64 2c 20 65 6e 64 20 74 68 65 20 70 72  | .marker).is.provided,.end.the.pr | 
| 15200 |  6f 6d 70 74 20 63 6f 6e 74 65 6e 74 73 0a 74 68    65 72 65 2e 22 0a 20 20 28 73 61 76 65 2d 65 78  | ompt.contents.there."...(save-ex | 
| 15220 |  63 75 72 73 69 6f 6e 0a 20 20 20 20 28 73 61 76    65 2d 72 65 73 74 72 69 63 74 69 6f 6e 0a 20 20  | cursion.....(save-restriction... | 
| 15240 |  20 20 20 20 28 6c 65 74 20 28 28 6d 61 78 2d 65    6e 74 72 69 65 73 20 28 61 6e 64 20 67 70 74 65  | ....(let.((max-entries.(and.gpte | 
| 15260 |  6c 2d 2d 6e 75 6d 2d 6d 65 73 73 61 67 65 73 2d    74 6f 2d 73 65 6e 64 0a 20 20 20 20 20 20 20 20  | l--num-messages-to-send......... | 
| 15280 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 2a 20 32 20 67 70 74 65 6c  | ......................(*.2.gptel | 
| 152a0 |  2d 2d 6e 75 6d 2d 6d 65 73 73 61 67 65 73 2d 74    6f 2d 73 65 6e 64 29 29 29 29 0a 20 20 20 20 20  | --num-messages-to-send))))...... | 
| 152c0 |  20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 20    20 20 28 28 75 73 65 2d 72 65 67 69 6f 6e 2d 70  | ...(cond..........((use-region-p | 
| 152e0 |  29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 4e    61 72 72 6f 77 20 74 6f 20 72 65 67 69 6f 6e 0a  | )...........;;.Narrow.to.region. | 
| 15300 |  20 20 20 20 20 20 20 20 20 20 28 6e 61 72 72 6f    77 2d 74 6f 2d 72 65 67 69 6f 6e 20 28 72 65 67  | ..........(narrow-to-region.(reg | 
| 15320 |  69 6f 6e 2d 62 65 67 69 6e 6e 69 6e 67 29 20 28    72 65 67 69 6f 6e 2d 65 6e 64 29 29 0a 20 20 20  | ion-beginning).(region-end)).... | 
| 15340 |  20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61    72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20  | .......(goto-char.(point-max)).. | 
| 15360 |  20 20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d    2d 70 61 72 73 65 2d 62 75 66 66 65 72 20 67 70  | .........(gptel--parse-buffer.gp | 
| 15380 |  74 65 6c 2d 62 61 63 6b 65 6e 64 20 6d 61 78 2d    65 6e 74 72 69 65 73 29 29 0a 20 20 20 20 20 20  | tel-backend.max-entries))....... | 
| 153a0 |  20 20 20 28 28 64 65 72 69 76 65 64 2d 6d 6f 64    65 2d 70 20 27 6f 72 67 2d 6d 6f 64 65 29 0a 20  | ...((derived-mode-p.'org-mode).. | 
| 153c0 |  20 20 20 20 20 20 20 20 20 28 72 65 71 75 69 72    65 20 27 67 70 74 65 6c 2d 6f 72 67 29 0a 20 20  | .........(require.'gptel-org)... | 
| 153e0 |  20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 6f    72 67 2d 2d 63 72 65 61 74 65 2d 70 72 6f 6d 70  | ........(gptel-org--create-promp | 
| 15400 |  74 20 28 6f 72 20 70 72 6f 6d 70 74 2d 65 6e 64    20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 0a  | t.(or.prompt-end.(point-max)))). | 
| 15420 |  20 20 20 20 20 20 20 20 20 28 74 20 28 67 6f 74    6f 2d 63 68 61 72 20 28 6f 72 20 70 72 6f 6d 70  | .........(t.(goto-char.(or.promp | 
| 15440 |  74 2d 65 6e 64 20 28 70 6f 69 6e 74 2d 6d 61 78    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | t-end.(point-max)))............. | 
| 15460 |  28 67 70 74 65 6c 2d 2d 70 61 72 73 65 2d 62 75    66 66 65 72 20 67 70 74 65 6c 2d 62 61 63 6b 65  | (gptel--parse-buffer.gptel-backe | 
| 15480 |  6e 64 20 6d 61 78 2d 65 6e 74 72 69 65 73 29 29    29 29 29 29 29 0a 0a 28 63 6c 2d 64 65 66 67 65  | nd.max-entries)))))))..(cl-defge | 
| 154a0 |  6e 65 72 69 63 20 67 70 74 65 6c 2d 2d 70 61 72    73 65 2d 62 75 66 66 65 72 20 28 62 61 63 6b 65  | neric.gptel--parse-buffer.(backe | 
| 154c0 |  6e 64 20 6d 61 78 2d 65 6e 74 72 69 65 73 29 0a    20 20 22 50 61 72 73 65 20 63 75 72 72 65 6e 74  | nd.max-entries)..."Parse.current | 
| 154e0 |  20 62 75 66 66 65 72 20 62 61 63 6b 77 61 72 64    73 20 66 72 6f 6d 20 70 6f 69 6e 74 20 61 6e 64  | .buffer.backwards.from.point.and | 
| 15500 |  20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f    66 20 70 72 6f 6d 70 74 73 2e 0a 0a 42 41 43 4b  | .return.a.list.of.prompts...BACK | 
| 15520 |  45 4e 44 20 69 73 20 74 68 65 20 4c 4c 4d 20 62    61 63 6b 65 6e 64 20 69 6e 20 75 73 65 2e 0a 0a  | END.is.the.LLM.backend.in.use... | 
| 15540 |  4d 41 58 2d 45 4e 54 52 49 45 53 20 69 73 20 74    68 65 20 6e 75 6d 62 65 72 20 6f 66 20 71 75 65  | MAX-ENTRIES.is.the.number.of.que | 
| 15560 |  72 69 65 73 2f 72 65 73 70 6f 6e 73 65 73 20 74    6f 20 69 6e 63 6c 75 64 65 20 66 6f 72 0a 63 6f  | ries/responses.to.include.for.co | 
| 15580 |  6e 74 65 78 62 74 2e 22 29 0a 0a 28 63 6c 2d 64    65 66 67 65 6e 65 72 69 63 20 67 70 74 65 6c 2d  | ntexbt.")..(cl-defgeneric.gptel- | 
| 155a0 |  2d 72 65 71 75 65 73 74 2d 64 61 74 61 20 28 62    61 63 6b 65 6e 64 20 70 72 6f 6d 70 74 73 29 0a  | -request-data.(backend.prompts). | 
| 155c0 |  20 20 22 47 65 6e 65 72 61 74 65 20 61 20 70 6c    69 73 74 20 6f 66 20 61 6c 6c 20 64 61 74 61 20  | .."Generate.a.plist.of.all.data. | 
| 155e0 |  66 6f 72 20 61 6e 20 4c 4c 4d 20 71 75 65 72 79    2e 0a 0a 42 41 43 4b 45 4e 44 20 69 73 20 74 68  | for.an.LLM.query...BACKEND.is.th | 
| 15600 |  65 20 4c 4c 4d 20 62 61 63 6b 65 6e 64 20 69 6e    20 75 73 65 2e 0a 0a 50 52 4f 4d 50 54 53 20 69  | e.LLM.backend.in.use...PROMPTS.i | 
| 15620 |  73 20 74 68 65 20 70 6c 69 73 74 20 6f 66 20 70    72 65 76 69 6f 75 73 20 75 73 65 72 20 71 75 65  | s.the.plist.of.previous.user.que | 
| 15640 |  72 69 65 73 20 61 6e 64 20 4c 4c 4d 20 72 65 73    70 6f 6e 73 65 73 2e 22 29 0a 0a 3b 3b 20 54 4f  | ries.and.LLM.responses.")..;;.TO | 
| 15660 |  44 4f 3a 20 55 73 65 20 60 72 75 6e 2d 68 6f 6f    6b 2d 77 72 61 70 70 65 64 27 20 77 69 74 68 20  | DO:.Use.`run-hook-wrapped'.with. | 
| 15680 |  61 6e 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 69    6e 73 74 65 61 64 20 74 6f 20 68 61 6e 64 6c 65  | an.accumulator.instead.to.handle | 
| 156a0 |  0a 3b 3b 20 62 75 66 66 65 72 2d 6c 6f 63 61 6c    20 68 6f 6f 6b 73 2c 20 65 74 63 2e 0a 28 64 65  | .;;.buffer-local.hooks,.etc..(de | 
| 156c0 |  66 75 6e 20 67 70 74 65 6c 2d 2d 74 72 61 6e 73    66 6f 72 6d 2d 72 65 73 70 6f 6e 73 65 20 28 63  | fun.gptel--transform-response.(c | 
| 156e0 |  6f 6e 74 65 6e 74 2d 73 74 72 20 62 75 66 66 65    72 29 0a 20 20 22 46 69 6c 74 65 72 20 43 4f 4e  | ontent-str.buffer)..."Filter.CON | 
| 15700 |  54 45 4e 54 2d 53 54 52 20 74 68 72 6f 75 67 68    20 60 67 70 74 65 6c 2d 72 65 73 70 6f 6e 73 65  | TENT-STR.through.`gptel-response | 
| 15720 |  2d 66 69 6c 74 65 72 2d 66 75 6e 63 74 69 6f 6e    73 60 2e 0a 0a 42 55 46 46 45 52 20 69 73 20 70  | -filter-functions`...BUFFER.is.p | 
| 15740 |  61 73 73 65 64 20 61 6c 6f 6e 67 20 77 69 74 68    20 43 4f 4e 54 45 4e 54 2d 53 54 52 20 74 6f 20  | assed.along.with.CONTENT-STR.to. | 
| 15760 |  65 61 63 68 20 66 75 6e 63 74 69 6f 6e 20 69 6e    20 74 68 69 73 0a 68 6f 6f 6b 2e 22 0a 20 20 28  | each.function.in.this.hook."...( | 
| 15780 |  6c 65 74 20 28 28 66 69 6c 74 65 72 65 64 2d 73    74 72 20 63 6f 6e 74 65 6e 74 2d 73 74 72 29 29  | let.((filtered-str.content-str)) | 
| 157a0 |  0a 20 20 20 20 28 64 6f 6c 69 73 74 20 28 66 69    6c 74 65 72 2d 66 75 6e 63 20 67 70 74 65 6c 2d  | .....(dolist.(filter-func.gptel- | 
| 157c0 |  72 65 73 70 6f 6e 73 65 2d 66 69 6c 74 65 72 2d    66 75 6e 63 74 69 6f 6e 73 20 66 69 6c 74 65 72  | response-filter-functions.filter | 
| 157e0 |  65 64 2d 73 74 72 29 0a 20 20 20 20 20 20 28 63    6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 6e 69  | ed-str).......(condition-case.ni | 
| 15800 |  6c 0a 20 20 20 20 20 20 20 20 20 20 28 77 68 65    6e 20 28 66 75 6e 63 74 69 6f 6e 70 20 66 69 6c  | l...........(when.(functionp.fil | 
| 15820 |  74 65 72 2d 66 75 6e 63 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 73 65 74 71 20 66 69 6c 74  | ter-func).............(setq.filt | 
| 15840 |  65 72 65 64 2d 73 74 72 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63  | ered-str...................(func | 
| 15860 |  61 6c 6c 20 66 69 6c 74 65 72 2d 66 75 6e 63 20    66 69 6c 74 65 72 65 64 2d 73 74 72 20 62 75 66  | all.filter-func.filtered-str.buf | 
| 15880 |  66 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 28    65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 28  | fer))).........(error..........( | 
| 158a0 |  64 69 73 70 6c 61 79 2d 77 61 72 6e 69 6e 67 20    27 28 67 70 74 65 6c 20 66 69 6c 74 65 72 2d 66  | display-warning.'(gptel.filter-f | 
| 158c0 |  75 6e 63 74 69 6f 6e 73 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | unctions)....................... | 
| 158e0 |  20 20 20 20 28 66 6f 72 6d 61 74 20 22 46 75 6e    63 74 69 6f 6e 20 25 53 20 72 65 74 75 72 6e 65  | ....(format."Function.%S.returne | 
| 15900 |  64 20 61 6e 20 65 72 72 6f 72 22 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | d.an.error"..................... | 
| 15920 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69    6c 74 65 72 2d 66 75 6e 63 29 29 29 29 29 29 29  | ..............filter-func))))))) | 
| 15940 |  0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d    63 6f 6e 76 65 72 74 2d 6f 72 67 20 28 63 6f 6e  | ..(defun.gptel--convert-org.(con | 
| 15960 |  74 65 6e 74 20 62 75 66 66 65 72 29 0a 20 20 22    54 72 61 6e 73 66 6f 72 6d 20 43 4f 4e 54 45 4e  | tent.buffer)..."Transform.CONTEN | 
| 15980 |  54 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 72    65 71 75 69 72 65 64 20 6d 61 6a 6f 72 2d 6d 6f  | T.according.to.required.major-mo | 
| 159a0 |  64 65 2e 0a 0a 43 75 72 72 65 6e 74 6c 79 20 6f    6e 6c 79 20 60 6f 72 67 2d 6d 6f 64 65 27 20 69  | de...Currently.only.`org-mode'.i | 
| 159c0 |  73 20 68 61 6e 64 6c 65 64 2e 0a 0a 42 55 46 46    45 52 20 69 73 20 74 68 65 20 4c 4c 4d 20 69 6e  | s.handled...BUFFER.is.the.LLM.in | 
| 159e0 |  74 65 72 61 63 74 69 6f 6e 20 62 75 66 66 65 72    2e 22 0a 20 20 28 70 63 61 73 65 20 28 62 75 66  | teraction.buffer."...(pcase.(buf | 
| 15a00 |  66 65 72 2d 6c 6f 63 61 6c 2d 76 61 6c 75 65 20    27 6d 61 6a 6f 72 2d 6d 6f 64 65 20 62 75 66 66  | fer-local-value.'major-mode.buff | 
| 15a20 |  65 72 29 0a 20 20 20 20 28 27 6f 72 67 2d 6d 6f    64 65 20 28 67 70 74 65 6c 2d 2d 63 6f 6e 76 65  | er).....('org-mode.(gptel--conve | 
| 15a40 |  72 74 2d 6d 61 72 6b 64 6f 77 6e 2d 3e 6f 72 67    20 63 6f 6e 74 65 6e 74 29 29 0a 20 20 20 20 28  | rt-markdown->org.content)).....( | 
| 15a60 |  5f 20 63 6f 6e 74 65 6e 74 29 29 29 0a 0a 28 64    65 66 75 6e 20 67 70 74 65 6c 2d 2d 75 72 6c 2d  | _.content)))..(defun.gptel--url- | 
| 15a80 |  67 65 74 2d 72 65 73 70 6f 6e 73 65 20 28 69 6e    66 6f 20 26 6f 70 74 69 6f 6e 61 6c 20 63 61 6c  | get-response.(info.&optional.cal | 
| 15aa0 |  6c 62 61 63 6b 29 0a 20 20 22 46 65 74 63 68 20    72 65 73 70 6f 6e 73 65 20 74 6f 20 70 72 6f 6d  | lback)..."Fetch.response.to.prom | 
| 15ac0 |  70 74 20 69 6e 20 49 4e 46 4f 20 66 72 6f 6d 20    74 68 65 20 4c 4c 4d 2e 0a 0a 49 4e 46 4f 20 69  | pt.in.INFO.from.the.LLM...INFO.i | 
| 15ae0 |  73 20 61 20 70 6c 69 73 74 20 77 69 74 68 20 74    68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6b 65 79  | s.a.plist.with.the.following.key | 
| 15b00 |  73 3a 0a 2d 20 3a 64 61 74 61 20 20 20 20 20 28    74 68 65 20 64 61 74 61 20 62 65 69 6e 67 20 73  | s:.-.:data.....(the.data.being.s | 
| 15b20 |  65 6e 74 29 0a 2d 20 3a 62 75 66 66 65 72 20 20    20 28 74 68 65 20 67 70 74 65 6c 20 62 75 66 66  | ent).-.:buffer...(the.gptel.buff | 
| 15b40 |  65 72 29 0a 2d 20 3a 70 6f 73 69 74 69 6f 6e 20    28 6d 61 72 6b 65 72 20 61 74 20 77 68 69 63 68  | er).-.:position.(marker.at.which | 
| 15b60 |  20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 72    65 73 70 6f 6e 73 65 29 2e 0a 0a 43 61 6c 6c 20  | .to.insert.the.response)...Call. | 
| 15b80 |  43 41 4c 4c 42 41 43 4b 20 77 69 74 68 20 74 68    65 20 72 65 73 70 6f 6e 73 65 20 61 6e 64 20 49  | CALLBACK.with.the.response.and.I | 
| 15ba0 |  4e 46 4f 20 61 66 74 65 72 77 61 72 64 73 2e 20    20 49 66 20 6f 6d 69 74 74 65 64 0a 74 68 65 20  | NFO.afterwards...If.omitted.the. | 
| 15bc0 |  72 65 73 70 6f 6e 73 65 20 69 73 20 69 6e 73 65    72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 63 75  | response.is.inserted.into.the.cu | 
| 15be0 |  72 72 65 6e 74 20 62 75 66 66 65 72 20 61 66 74    65 72 20 70 6f 69 6e 74 2e 22 0a 20 20 28 6c 65  | rrent.buffer.after.point."...(le | 
| 15c00 |  74 2a 20 28 28 69 6e 68 69 62 69 74 2d 6d 65 73    73 61 67 65 20 74 29 0a 20 20 20 20 20 20 20 20  | t*.((inhibit-message.t)......... | 
| 15c20 |  20 28 6d 65 73 73 61 67 65 2d 6c 6f 67 2d 6d 61    78 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20  | .(message-log-max.nil).......... | 
| 15c40 |  28 62 61 63 6b 65 6e 64 20 67 70 74 65 6c 2d 62    61 63 6b 65 6e 64 29 0a 20 20 20 20 20 20 20 20  | (backend.gptel-backend)......... | 
| 15c60 |  20 28 75 72 6c 2d 72 65 71 75 65 73 74 2d 6d 65    74 68 6f 64 20 22 50 4f 53 54 22 29 0a 20 20 20  | .(url-request-method."POST").... | 
| 15c80 |  20 20 20 20 20 20 28 75 72 6c 2d 72 65 71 75 65    73 74 2d 65 78 74 72 61 2d 68 65 61 64 65 72 73  | ......(url-request-extra-headers | 
| 15ca0 |  0a 20 20 20 20 20 20 20 20 20 20 28 61 70 70 65    6e 64 20 27 28 28 22 43 6f 6e 74 65 6e 74 2d 54  | ...........(append.'(("Content-T | 
| 15cc0 |  79 70 65 22 20 2e 20 22 61 70 70 6c 69 63 61 74    69 6f 6e 2f 6a 73 6f 6e 22 29 29 0a 20 20 20 20  | ype"..."application/json"))..... | 
| 15ce0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77    68 65 6e 2d 6c 65 74 20 28 28 68 65 61 64 65 72  | ..............(when-let.((header | 
| 15d00 |  20 28 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 2d    68 65 61 64 65 72 20 67 70 74 65 6c 2d 62 61 63  | .(gptel-backend-header.gptel-bac | 
| 15d20 |  6b 65 6e 64 29 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20  | kend))).....................(if. | 
| 15d40 |  28 66 75 6e 63 74 69 6f 6e 70 20 68 65 61 64 65    72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | (functionp.header).............. | 
| 15d60 |  20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63    61 6c 6c 20 68 65 61 64 65 72 29 20 68 65 61 64  | ...........(funcall.header).head | 
| 15d80 |  65 72 29 29 29 29 0a 20 20 20 20 20 20 20 20 28    75 72 6c 2d 72 65 71 75 65 73 74 2d 64 61 74 61  | er)))).........(url-request-data | 
| 15da0 |  0a 20 20 20 20 20 20 20 20 20 28 65 6e 63 6f 64    65 2d 63 6f 64 69 6e 67 2d 73 74 72 69 6e 67 0a  | ..........(encode-coding-string. | 
| 15dc0 |  20 20 20 20 20 20 20 20 20 20 28 67 70 74 65 6c    2d 2d 6a 73 6f 6e 2d 65 6e 63 6f 64 65 20 28 70  | ..........(gptel--json-encode.(p | 
| 15de0 |  6c 69 73 74 2d 67 65 74 20 69 6e 66 6f 20 3a 64    61 74 61 29 29 0a 20 20 20 20 20 20 20 20 20 20  | list-get.info.:data))........... | 
| 15e00 |  27 75 74 66 2d 38 29 29 29 0a 20 20 20 20 28 77    68 65 6e 20 67 70 74 65 6c 2d 6c 6f 67 2d 6c 65  | 'utf-8))).....(when.gptel-log-le | 
| 15e20 |  76 65 6c 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 3b 6c 6f 67 67 69 6e 67 0a 20 20 20 20 20  | vel...............;logging...... | 
| 15e40 |  20 28 77 68 65 6e 20 28 65 71 20 67 70 74 65 6c    2d 6c 6f 67 2d 6c 65 76 65 6c 20 27 64 65 62 75  | .(when.(eq.gptel-log-level.'debu | 
| 15e60 |  67 29 0a 20 20 20 20 20 20 20 20 28 67 70 74 65    6c 2d 2d 6c 6f 67 20 28 67 70 74 65 6c 2d 2d 6a  | g).........(gptel--log.(gptel--j | 
| 15e80 |  73 6f 6e 2d 65 6e 63 6f 64 65 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | son-encode...................... | 
| 15ea0 |  28 6d 61 70 63 61 72 20 28 6c 61 6d 62 64 61 20    28 70 61 69 72 29 20 28 63 6f 6e 73 20 28 69 6e  | (mapcar.(lambda.(pair).(cons.(in | 
| 15ec0 |  74 65 72 6e 20 28 63 61 72 20 70 61 69 72 29 29    20 28 63 64 72 20 70 61 69 72 29 29 29 0a 20 20  | tern.(car.pair)).(cdr.pair)))... | 
| 15ee0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 75 72 6c 2d 72  | ...........................url-r | 
| 15f00 |  65 71 75 65 73 74 2d 65 78 74 72 61 2d 68 65 61    64 65 72 73 29 29 0a 20 20 20 20 20 20 20 20 20  | equest-extra-headers)).......... | 
| 15f20 |  20 20 20 20 20 20 20 20 20 20 20 22 72 65 71 75    65 73 74 20 68 65 61 64 65 72 73 22 29 29 0a 20  | ..........."request.headers")).. | 
| 15f40 |  20 20 20 20 20 28 67 70 74 65 6c 2d 2d 6c 6f 67    20 75 72 6c 2d 72 65 71 75 65 73 74 2d 64 61 74  | .....(gptel--log.url-request-dat | 
| 15f60 |  61 20 22 72 65 71 75 65 73 74 20 62 6f 64 79 22    29 29 0a 20 20 20 20 28 75 72 6c 2d 72 65 74 72  | a."request.body")).....(url-retr | 
| 15f80 |  69 65 76 65 20 28 6c 65 74 20 28 28 62 61 63 6b    65 6e 64 2d 75 72 6c 20 28 67 70 74 65 6c 2d 62  | ieve.(let.((backend-url.(gptel-b | 
| 15fa0 |  61 63 6b 65 6e 64 2d 75 72 6c 20 67 70 74 65 6c    2d 62 61 63 6b 65 6e 64 29 29 29 0a 20 20 20 20  | ackend-url.gptel-backend)))..... | 
| 15fc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 69 66 20 28 66 75 6e 63 74 69 6f 6e 70 20 62  | ................(if.(functionp.b | 
| 15fe0 |  61 63 6b 65 6e 64 2d 75 72 6c 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ackend-url)..................... | 
| 16000 |  20 20 20 20 28 66 75 6e 63 61 6c 6c 20 62 61 63    6b 65 6e 64 2d 75 72 6c 29 20 62 61 63 6b 65 6e  | ....(funcall.backend-url).backen | 
| 16020 |  64 2d 75 72 6c 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64  | d-url))...................(lambd | 
| 16040 |  61 20 28 5f 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 70 63 61 73 65  | a.(_).....................(pcase | 
| 16060 |  2d 6c 65 74 20 28 28 60 28 2c 72 65 73 70 6f 6e    73 65 20 2c 68 74 74 70 2d 6d 73 67 20 2c 65 72  | -let.((`(,response.,http-msg.,er | 
| 16080 |  72 6f 72 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ror)............................ | 
| 160a0 |  20 20 20 20 20 20 28 67 70 74 65 6c 2d 2d 75 72    6c 2d 70 61 72 73 65 2d 72 65 73 70 6f 6e 73 65  | ......(gptel--url-parse-response | 
| 160c0 |  20 62 61 63 6b 65 6e 64 20 28 63 75 72 72 65 6e    74 2d 62 75 66 66 65 72 29 29 29 29 0a 20 20 20  | .backend.(current-buffer)))).... | 
| 160e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 70 6c 69 73 74 2d 70 75 74 20 69 6e  | ...................(plist-put.in | 
| 16100 |  66 6f 20 3a 73 74 61 74 75 73 20 68 74 74 70 2d    6d 73 67 29 0a 20 20 20 20 20 20 20 20 20 20 20  | fo.:status.http-msg)............ | 
| 16120 |  20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e    20 65 72 72 6f 72 20 28 70 6c 69 73 74 2d 70 75  | ...........(when.error.(plist-pu | 
| 16140 |  74 20 69 6e 66 6f 20 3a 65 72 72 6f 72 20 65 72    72 6f 72 29 29 0a 20 20 20 20 20 20 20 20 20 20  | t.info.:error.error))........... | 
| 16160 |  20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e    63 61 6c 6c 20 28 6f 72 20 63 61 6c 6c 62 61 63  | ............(funcall.(or.callbac | 
| 16180 |  6b 20 23 27 67 70 74 65 6c 2d 2d 69 6e 73 65 72    74 2d 72 65 73 70 6f 6e 73 65 29 0a 20 20 20 20  | k.#'gptel--insert-response)..... | 
| 161a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 72 65 73 70 6f  | ...........................respo | 
| 161c0 |  6e 73 65 20 69 6e 66 6f 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | nse.info)....................... | 
| 161e0 |  28 6b 69 6c 6c 2d 62 75 66 66 65 72 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | (kill-buffer)))................. | 
| 16200 |  20 20 6e 69 6c 20 74 20 6e 69 6c 29 29 29 0a 0a    28 63 6c 2d 64 65 66 67 65 6e 65 72 69 63 20 67  | ..nil.t.nil)))..(cl-defgeneric.g | 
| 16220 |  70 74 65 6c 2d 2d 70 61 72 73 65 2d 72 65 73 70    6f 6e 73 65 20 28 62 61 63 6b 65 6e 64 20 72 65  | ptel--parse-response.(backend.re | 
| 16240 |  73 70 6f 6e 73 65 20 70 72 6f 63 2d 69 6e 66 6f    29 0a 20 20 22 52 65 73 70 6f 6e 73 65 20 65 78  | sponse.proc-info)..."Response.ex | 
| 16260 |  74 72 61 63 74 6f 72 20 66 6f 72 20 4c 4c 4d 20    72 65 71 75 65 73 74 73 2e 0a 0a 42 41 43 4b 45  | tractor.for.LLM.requests...BACKE | 
| 16280 |  4e 44 20 69 73 20 74 68 65 20 4c 4c 4d 20 62 61    63 6b 65 6e 64 20 69 6e 20 75 73 65 2e 0a 0a 52  | ND.is.the.LLM.backend.in.use...R | 
| 162a0 |  45 53 50 4f 4e 53 45 20 69 73 20 74 68 65 20 70    61 72 73 65 64 20 4a 53 4f 4e 20 6f 66 20 74 68  | ESPONSE.is.the.parsed.JSON.of.th | 
| 162c0 |  65 20 72 65 73 70 6f 6e 73 65 2c 20 61 73 20 61    20 70 6c 69 73 74 2e 0a 0a 50 52 4f 43 2d 49 4e  | e.response,.as.a.plist...PROC-IN | 
| 162e0 |  46 4f 20 69 73 20 61 20 70 6c 69 73 74 20 77 69    74 68 20 70 72 6f 63 65 73 73 20 69 6e 66 6f 72  | FO.is.a.plist.with.process.infor | 
| 16300 |  6d 61 74 69 6f 6e 20 61 6e 64 20 6f 74 68 65 72    20 63 6f 6e 74 65 78 74 2e 0a 53 65 65 20 60 67  | mation.and.other.context..See.`g | 
| 16320 |  70 74 65 6c 2d 63 75 72 6c 2d 2d 67 65 74 2d 72    65 73 70 6f 6e 73 65 27 20 66 6f 72 20 69 74 73  | ptel-curl--get-response'.for.its | 
| 16340 |  20 63 6f 6e 74 65 6e 74 73 2e 22 29 0a 0a 28 64    65 66 76 61 72 20 75 72 6c 2d 68 74 74 70 2d 65  | .contents.")..(defvar.url-http-e | 
| 16360 |  6e 64 2d 6f 66 2d 68 65 61 64 65 72 73 29 0a 28    64 65 66 76 61 72 20 75 72 6c 2d 68 74 74 70 2d  | nd-of-headers).(defvar.url-http- | 
| 16380 |  72 65 73 70 6f 6e 73 65 2d 73 74 61 74 75 73 29    0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d 75  | response-status).(defun.gptel--u | 
| 163a0 |  72 6c 2d 70 61 72 73 65 2d 72 65 73 70 6f 6e 73    65 20 28 62 61 63 6b 65 6e 64 20 72 65 73 70 6f  | rl-parse-response.(backend.respo | 
| 163c0 |  6e 73 65 2d 62 75 66 66 65 72 29 0a 20 20 22 50    61 72 73 65 20 72 65 73 70 6f 6e 73 65 20 66 72  | nse-buffer)..."Parse.response.fr | 
| 163e0 |  6f 6d 20 42 41 43 4b 45 4e 44 20 69 6e 20 52 45    53 50 4f 4e 53 45 2d 42 55 46 46 45 52 2e 22 0a  | om.BACKEND.in.RESPONSE-BUFFER.". | 
| 16400 |  20 20 28 77 68 65 6e 20 28 62 75 66 66 65 72 2d    6c 69 76 65 2d 70 20 72 65 73 70 6f 6e 73 65 2d  | ..(when.(buffer-live-p.response- | 
| 16420 |  62 75 66 66 65 72 29 0a 20 20 20 20 28 77 69 74    68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72  | buffer).....(with-current-buffer | 
| 16440 |  20 72 65 73 70 6f 6e 73 65 2d 62 75 66 66 65 72    0a 20 20 20 20 20 20 28 77 68 65 6e 20 67 70 74  | .response-buffer.......(when.gpt | 
| 16460 |  65 6c 2d 6c 6f 67 2d 6c 65 76 65 6c 20 20 20 20    20 20 20 20 20 20 20 20 20 3b 6c 6f 67 67 69 6e  | el-log-level.............;loggin | 
| 16480 |  67 0a 20 20 20 20 20 20 20 20 28 73 61 76 65 2d    65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20  | g.........(save-excursion....... | 
| 164a0 |  20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 75    72 6c 2d 68 74 74 70 2d 65 6e 64 2d 6f 66 2d 68  | ....(goto-char.url-http-end-of-h | 
| 164c0 |  65 61 64 65 72 73 29 0a 20 20 20 20 20 20 20 20    20 20 28 77 68 65 6e 20 28 65 71 20 67 70 74 65  | eaders)...........(when.(eq.gpte | 
| 164e0 |  6c 2d 6c 6f 67 2d 6c 65 76 65 6c 20 27 64 65 62    75 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | l-log-level.'debug)............. | 
| 16500 |  28 67 70 74 65 6c 2d 2d 6c 6f 67 20 28 67 70 74    65 6c 2d 2d 6a 73 6f 6e 2d 65 6e 63 6f 64 65 20  | (gptel--log.(gptel--json-encode. | 
| 16520 |  28 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e    67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20  | (buffer-substring-no-properties. | 
| 16540 |  28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69    6e 74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20  | (point-min).(point)))........... | 
| 16560 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72    65 73 70 6f 6e 73 65 20 68 65 61 64 65 72 73 22  | .............."response.headers" | 
| 16580 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 28 67 70    74 65 6c 2d 2d 6c 6f 67 20 28 62 75 66 66 65 72  | ))...........(gptel--log.(buffer | 
| 165a0 |  2d 73 75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70 72    6f 70 65 72 74 69 65 73 20 28 70 6f 69 6e 74 29  | -substring-no-properties.(point) | 
| 165c0 |  20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .(point-max))................... | 
| 165e0 |  20 20 20 20 22 72 65 73 70 6f 6e 73 65 20 62 6f    64 79 22 29 29 29 0a 20 20 20 20 20 20 28 69 66  | ...."response.body"))).......(if | 
| 16600 |  2d 6c 65 74 2a 20 28 28 68 74 74 70 2d 6d 73 67    20 28 73 74 72 69 6e 67 2d 74 72 69 6d 20 28 62  | -let*.((http-msg.(string-trim.(b | 
| 16620 |  75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20    28 6c 69 6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d  | uffer-substring.(line-beginning- | 
| 16640 |  70 6f 73 69 74 69 6f 6e 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | position)....................... | 
| 16660 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 16680 |  20 20 20 28 6c 69 6e 65 2d 65 6e 64 2d 70 6f 73    69 74 69 6f 6e 29 29 29 29 0a 20 20 20 20 20 20  | ...(line-end-position))))....... | 
| 166a0 |  20 20 20 20 20 20 20 20 20 20 28 72 65 73 70 6f    6e 73 65 20 28 70 72 6f 67 6e 20 28 67 6f 74 6f  | ..........(response.(progn.(goto | 
| 166c0 |  2d 63 68 61 72 20 75 72 6c 2d 68 74 74 70 2d 65    6e 64 2d 6f 66 2d 68 65 61 64 65 72 73 29 0a 20  | -char.url-http-end-of-headers).. | 
| 166e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 16700 |  28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20    6e 69 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20  | (condition-case.nil............. | 
| 16720 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d  | .........................(gptel- | 
| 16740 |  2d 6a 73 6f 6e 2d 72 65 61 64 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -json-read)..................... | 
| 16760 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    65 72 72 6f 72 20 27 6a 73 6f 6e 2d 72 65 61 64  | ...............(error.'json-read | 
| 16780 |  2d 65 72 72 6f 72 29 29 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20  | -error)))))...........(cond..... | 
| 167a0 |  20 20 20 20 20 20 20 20 3b 3b 20 46 49 58 4d 45    20 48 61 6e 64 6c 65 20 74 68 65 20 63 61 73 65  | ........;;.FIXME.Handle.the.case | 
| 167c0 |  20 77 68 65 72 65 20 48 54 54 50 20 31 30 30 20    69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 48  | .where.HTTP.100.is.followed.by.H | 
| 167e0 |  54 54 50 20 28 6e 6f 74 20 32 30 30 29 20 42 55    47 20 23 31 39 34 0a 20 20 20 20 20 20 20 20 20  | TTP.(not.200).BUG.#194.......... | 
| 16800 |  20 20 28 28 6f 72 20 28 6d 65 6d 71 20 75 72 6c    2d 68 74 74 70 2d 72 65 73 70 6f 6e 73 65 2d 73  | ..((or.(memq.url-http-response-s | 
| 16820 |  74 61 74 75 73 20 27 28 32 30 30 20 31 30 30 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | tatus.'(200.100))............... | 
| 16840 |  20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 2d    70 20 22 5c 5c 28 3f 3a 31 5c 5c 7c 32 5c 5c 29  | ..(string-match-p."\\(?:1\\|2\\) | 
| 16860 |  30 30 20 4f 4b 22 20 68 74 74 70 2d 6d 73 67 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c  | 00.OK".http-msg)).............(l | 
| 16880 |  69 73 74 20 28 73 74 72 69 6e 67 2d 74 72 69 6d    20 28 67 70 74 65 6c 2d 2d 70 61 72 73 65 2d 72  | ist.(string-trim.(gptel--parse-r | 
| 168a0 |  65 73 70 6f 6e 73 65 20 62 61 63 6b 65 6e 64 20    72 65 73 70 6f 6e 73 65 0a 20 20 20 20 20 20 20  | esponse.backend.response........ | 
| 168c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 168e0 |  20 20 20 20 20 20 60 28 3a 62 75 66 66 65 72 20    2c 72 65 73 70 6f 6e 73 65 2d 62 75 66 66 65 72  | ......`(:buffer.,response-buffer | 
| 16900 |  29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 68 74 74 70 2d 6d 73 67 29  | )))....................http-msg) | 
| 16920 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 28 28 70    6c 69 73 74 2d 67 65 74 20 72 65 73 70 6f 6e 73  | )............((plist-get.respons | 
| 16940 |  65 20 3a 65 72 72 6f 72 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 65 72  | e.:error).............(let*.((er | 
| 16960 |  72 6f 72 2d 64 61 74 61 20 28 70 6c 69 73 74 2d    67 65 74 20 72 65 73 70 6f 6e 73 65 20 3a 65 72  | ror-data.(plist-get.response.:er | 
| 16980 |  72 6f 72 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 65 72 72 6f 72 2d  | ror))....................(error- | 
| 169a0 |  6d 73 67 20 28 70 6c 69 73 74 2d 67 65 74 20 65    72 72 6f 72 2d 64 61 74 61 20 3a 6d 65 73 73 61  | msg.(plist-get.error-data.:messa | 
| 169c0 |  67 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 65 72 72 6f 72 2d 74  | ge))....................(error-t | 
| 169e0 |  79 70 65 20 28 70 6c 69 73 74 2d 67 65 74 20 65    72 72 6f 72 2d 64 61 74 61 20 3a 74 79 70 65 29  | ype.(plist-get.error-data.:type) | 
| 16a00 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 62 61 63 6b 65 6e 64 2d 6e 61  | )....................(backend-na | 
| 16a20 |  6d 65 20 28 67 70 74 65 6c 2d 62 61 63 6b 65 6e    64 2d 6e 61 6d 65 20 62 61 63 6b 65 6e 64 29 29  | me.(gptel-backend-name.backend)) | 
| 16a40 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 69 66 20 28 73 74 72 69 6e 67 70 20 65 72 72  | )...............(if.(stringp.err | 
| 16a60 |  6f 72 2d 64 61 74 61 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67  | or-data)...................(prog | 
| 16a80 |  6e 20 28 6d 65 73 73 61 67 65 20 22 25 73 20 65    72 72 6f 72 3a 20 28 25 73 29 20 25 73 22 20 62  | n.(message."%s.error:.(%s).%s".b | 
| 16aa0 |  61 63 6b 65 6e 64 2d 6e 61 6d 65 20 68 74 74 70    2d 6d 73 67 20 65 72 72 6f 72 2d 64 61 74 61 29  | ackend-name.http-msg.error-data) | 
| 16ac0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20  | ..........................(setq. | 
| 16ae0 |  65 72 72 6f 72 2d 6d 73 67 20 28 73 74 72 69 6e    67 2d 74 72 69 6d 20 65 72 72 6f 72 2d 64 61 74  | error-msg.(string-trim.error-dat | 
| 16b00 |  61 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 77 68 65 6e 20 28 73 74 72 69  | a))).................(when.(stri | 
| 16b20 |  6e 67 70 20 65 72 72 6f 72 2d 6d 73 67 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ngp.error-msg).................. | 
| 16b40 |  20 28 6d 65 73 73 61 67 65 20 22 25 73 20 65 72    72 6f 72 3a 20 28 25 73 29 20 25 73 22 20 62 61  | .(message."%s.error:.(%s).%s".ba | 
| 16b60 |  63 6b 65 6e 64 2d 6e 61 6d 65 20 68 74 74 70 2d    6d 73 67 20 28 73 74 72 69 6e 67 2d 74 72 69 6d  | ckend-name.http-msg.(string-trim | 
| 16b80 |  20 65 72 72 6f 72 2d 6d 73 67 29 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77  | .error-msg))).................(w | 
| 16ba0 |  68 65 6e 20 65 72 72 6f 72 2d 74 79 70 65 20 28    73 65 74 71 20 68 74 74 70 2d 6d 73 67 20 28 63  | hen.error-type.(setq.http-msg.(c | 
| 16bc0 |  6f 6e 63 61 74 20 22 28 22 20 20 68 74 74 70 2d    6d 73 67 20 22 29 20 22 20 28 73 74 72 69 6e 67  | oncat."("..http-msg.").".(string | 
| 16be0 |  2d 74 72 69 6d 20 65 72 72 6f 72 2d 74 79 70 65    29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20  | -trim.error-type)))))........... | 
| 16c00 |  20 20 20 20 28 6c 69 73 74 20 6e 69 6c 20 28 63    6f 6e 63 61 74 20 22 28 22 20 68 74 74 70 2d 6d  | ....(list.nil.(concat."(".http-m | 
| 16c20 |  73 67 20 22 29 20 22 20 28 6f 72 20 65 72 72 6f    72 2d 6d 73 67 20 22 22 29 29 29 29 29 0a 20 20  | sg.").".(or.error-msg."")))))... | 
| 16c40 |  20 20 20 20 20 20 20 20 20 28 28 65 71 20 72 65    73 70 6f 6e 73 65 20 27 6a 73 6f 6e 2d 72 65 61  | .........((eq.response.'json-rea | 
| 16c60 |  64 2d 65 72 72 6f 72 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 28 6c 69 73 74 20 6e 69 6c 20 28  | d-error).............(list.nil.( | 
| 16c80 |  63 6f 6e 63 61 74 20 22 28 22 20 68 74 74 70 2d    6d 73 67 20 22 29 20 4d 61 6c 66 6f 72 6d 65 64  | concat."(".http-msg.").Malformed | 
| 16ca0 |  20 4a 53 4f 4e 20 69 6e 20 72 65 73 70 6f 6e 73    65 2e 22 29 20 22 6a 73 6f 6e 2d 72 65 61 64 2d  | .JSON.in.response.")."json-read- | 
| 16cc0 |  65 72 72 6f 72 22 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 28 74 20 28 6c 69 73 74 20 6e 69 6c  | error"))............(t.(list.nil | 
| 16ce0 |  20 28 63 6f 6e 63 61 74 20 22 28 22 20 68 74 74    70 2d 6d 73 67 20 22 29 20 43 6f 75 6c 64 20 6e  | .(concat."(".http-msg.").Could.n | 
| 16d00 |  6f 74 20 70 61 72 73 65 20 48 54 54 50 20 72 65    73 70 6f 6e 73 65 2e 22 29 0a 20 20 20 20 20 20  | ot.parse.HTTP.response.")....... | 
| 16d20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43    6f 75 6c 64 20 6e 6f 74 20 70 61 72 73 65 20 48  | .............."Could.not.parse.H | 
| 16d40 |  54 54 50 20 72 65 73 70 6f 6e 73 65 2e 22 29 29    29 0a 20 20 20 20 20 20 20 20 28 6c 69 73 74 20  | TTP.response."))).........(list. | 
| 16d60 |  6e 69 6c 20 28 63 6f 6e 63 61 74 20 22 28 22 20    68 74 74 70 2d 6d 73 67 20 22 29 20 43 6f 75 6c  | nil.(concat."(".http-msg.").Coul | 
| 16d80 |  64 20 6e 6f 74 20 70 61 72 73 65 20 48 54 54 50    20 72 65 73 70 6f 6e 73 65 2e 22 29 0a 20 20 20  | d.not.parse.HTTP.response.").... | 
| 16da0 |  20 20 20 20 20 20 20 20 20 20 20 22 43 6f 75 6c    64 20 6e 6f 74 20 70 61 72 73 65 20 48 54 54 50  | ..........."Could.not.parse.HTTP | 
| 16dc0 |  20 72 65 73 70 6f 6e 73 65 2e 22 29 29 29 29 29    0a 0a 28 63 6c 2d 64 65 66 75 6e 20 67 70 74 65  | .response.")))))..(cl-defun.gpte | 
| 16de0 |  6c 2d 2d 73 61 6e 69 74 69 7a 65 2d 6d 6f 64 65    6c 20 28 26 6b 65 79 20 28 62 61 63 6b 65 6e 64  | l--sanitize-model.(&key.(backend | 
| 16e00 |  20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .gptel-backend)................. | 
| 16e20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6d 6f 64 65 6c 20 67 70 74  | ......................(model.gpt | 
| 16e40 |  65 6c 2d 6d 6f 64 65 6c 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | el-model)....................... | 
| 16e60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 73 68 6f 6f 73 68 20 74 29 29 0a 20 20 22 43  | ................(shoosh.t))..."C | 
| 16e80 |  68 65 63 6b 20 69 66 20 4d 4f 44 45 4c 20 69 73    20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 42 41  | heck.if.MODEL.is.available.in.BA | 
| 16ea0 |  43 4b 45 4e 44 2c 20 61 64 6a 75 73 74 20 61 63    63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 49 66 20 53  | CKEND,.adjust.accordingly...If.S | 
| 16ec0 |  48 4f 4f 53 48 20 69 73 20 74 72 75 65 2c 20 64    6f 6e 27 74 20 69 73 73 75 65 20 61 20 77 61 72  | HOOSH.is.true,.don't.issue.a.war | 
| 16ee0 |  6e 69 6e 67 2e 22 0a 20 20 28 6c 65 74 2a 20 28    28 61 76 61 69 6c 61 62 6c 65 20 28 67 70 74 65  | ning."...(let*.((available.(gpte | 
| 16f00 |  6c 2d 62 61 63 6b 65 6e 64 2d 6d 6f 64 65 6c 73    20 62 61 63 6b 65 6e 64 29 29 29 0a 20 20 20 20  | l-backend-models.backend)))..... | 
| 16f20 |  28 75 6e 6c 65 73 73 20 28 6d 65 6d 62 65 72 20    6d 6f 64 65 6c 20 61 76 61 69 6c 61 62 6c 65 29  | (unless.(member.model.available) | 
| 16f40 |  0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 66 61    6c 6c 62 61 63 6b 20 28 63 61 72 20 61 76 61 69  | .......(let.((fallback.(car.avai | 
| 16f60 |  6c 61 62 6c 65 29 29 29 0a 20 20 20 20 20 20 20    20 28 75 6e 6c 65 73 73 20 73 68 6f 6f 73 68 0a  | lable))).........(unless.shoosh. | 
| 16f80 |  20 20 20 20 20 20 20 20 20 20 28 64 69 73 70 6c    61 79 2d 77 61 72 6e 69 6e 67 0a 20 20 20 20 20  | ..........(display-warning...... | 
| 16fa0 |  20 20 20 20 20 20 27 67 70 74 65 6c 0a 20 20 20    20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20  | ......'gptel............(format. | 
| 16fc0 |  28 63 6f 6e 63 61 74 20 22 50 72 65 66 65 72 72    65 64 20 60 67 70 74 65 6c 2d 6d 6f 64 65 6c 27  | (concat."Preferred.`gptel-model' | 
| 16fe0 |  20 5c 22 25 73 5c 22 20 6e 6f 74 22 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .\"%s\".not".................... | 
| 17000 |  20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74    65 64 20 69 6e 20 5c 22 25 73 5c 22 2c 20 75 73  | ........"supported.in.\"%s\",.us | 
| 17020 |  69 6e 67 20 5c 22 25 73 5c 22 20 69 6e 73 74 65    61 64 22 29 0a 20 20 20 20 20 20 20 20 20 20 20  | ing.\"%s\".instead")............ | 
| 17040 |  20 20 20 20 20 20 20 20 6d 6f 64 65 6c 20 28 67    70 74 65 6c 2d 62 61 63 6b 65 6e 64 2d 6e 61 6d  | ........model.(gptel-backend-nam | 
| 17060 |  65 20 62 61 63 6b 65 6e 64 29 20 66 61 6c 6c 62    61 63 6b 29 29 29 0a 20 20 20 20 20 20 20 20 28  | e.backend).fallback))).........( | 
| 17080 |  73 65 74 71 2d 6c 6f 63 61 6c 20 67 70 74 65 6c    2d 6d 6f 64 65 6c 20 66 61 6c 6c 62 61 63 6b 29  | setq-local.gptel-model.fallback) | 
| 170a0 |  29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f    6c 6f 61 64 0a 28 64 65 66 75 6e 20 67 70 74 65  | ))))..;;;###autoload.(defun.gpte | 
| 170c0 |  6c 20 28 6e 61 6d 65 20 26 6f 70 74 69 6f 6e 61    6c 20 5f 20 69 6e 69 74 69 61 6c 20 69 6e 74 65  | l.(name.&optional._.initial.inte | 
| 170e0 |  72 61 63 74 69 76 65 70 29 0a 20 20 22 53 77 69    74 63 68 20 74 6f 20 6f 72 20 73 74 61 72 74 20  | ractivep)..."Switch.to.or.start. | 
| 17100 |  61 20 63 68 61 74 20 73 65 73 73 69 6f 6e 20 77    69 74 68 20 4e 41 4d 45 2e 0a 0a 57 69 74 68 20  | a.chat.session.with.NAME...With. | 
| 17120 |  61 20 70 72 65 66 69 78 20 61 72 67 2c 20 71 75    65 72 79 20 66 6f 72 20 61 20 28 6e 65 77 29 20  | a.prefix.arg,.query.for.a.(new). | 
| 17140 |  73 65 73 73 69 6f 6e 20 6e 61 6d 65 2e 0a 0a 41    73 6b 20 66 6f 72 20 41 50 49 2d 4b 45 59 20 69  | session.name...Ask.for.API-KEY.i | 
| 17160 |  66 20 60 67 70 74 65 6c 2d 61 70 69 2d 6b 65 79    27 20 69 73 20 75 6e 73 65 74 2e 0a 0a 49 66 20  | f.`gptel-api-key'.is.unset...If. | 
| 17180 |  72 65 67 69 6f 6e 20 69 73 20 61 63 74 69 76 65    2c 20 75 73 65 20 69 74 20 61 73 20 74 68 65 20  | region.is.active,.use.it.as.the. | 
| 171a0 |  49 4e 49 54 49 41 4c 20 70 72 6f 6d 70 74 2e 20    20 52 65 74 75 72 6e 73 20 74 68 65 0a 62 75 66  | INITIAL.prompt...Returns.the.buf | 
| 171c0 |  66 65 72 20 63 72 65 61 74 65 64 20 6f 72 20 73    77 69 74 63 68 65 64 20 74 6f 2e 0a 0a 49 4e 54  | fer.created.or.switched.to...INT | 
| 171e0 |  45 52 41 43 54 49 56 45 50 20 69 73 20 74 20 77    68 65 6e 20 67 70 74 65 6c 20 69 73 20 63 61 6c  | ERACTIVEP.is.t.when.gptel.is.cal | 
| 17200 |  6c 65 64 20 69 6e 74 65 72 61 63 74 69 76 65 6c    79 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69  | led.interactively."...(interacti | 
| 17220 |  76 65 0a 20 20 20 28 6c 65 74 2a 20 28 28 62 61    63 6b 65 6e 64 20 28 64 65 66 61 75 6c 74 2d 76  | ve....(let*.((backend.(default-v | 
| 17240 |  61 6c 75 65 20 27 67 70 74 65 6c 2d 62 61 63 6b    65 6e 64 29 29 0a 20 20 20 20 20 20 20 20 20 20  | alue.'gptel-backend))........... | 
| 17260 |  28 62 61 63 6b 65 6e 64 2d 6e 61 6d 65 0a 20 20    20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74  | (backend-name............(format | 
| 17280 |  20 22 2a 25 73 2a 22 20 28 67 70 74 65 6c 2d 62    61 63 6b 65 6e 64 2d 6e 61 6d 65 20 62 61 63 6b  | ."*%s*".(gptel-backend-name.back | 
| 172a0 |  65 6e 64 29 29 29 29 0a 20 20 20 20 20 28 6c 69    73 74 20 28 69 66 20 63 75 72 72 65 6e 74 2d 70  | end))))......(list.(if.current-p | 
| 172c0 |  72 65 66 69 78 2d 61 72 67 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 72 65 61 64 2d 73  | refix-arg................(read-s | 
| 172e0 |  74 72 69 6e 67 20 22 53 65 73 73 69 6f 6e 20 6e    61 6d 65 3a 20 22 0a 20 20 20 20 20 20 20 20 20  | tring."Session.name:.".......... | 
| 17300 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 67 65 6e 65 72 61 74 65 2d 6e 65 77  | ...................(generate-new | 
| 17320 |  2d 62 75 66 66 65 72 2d 6e 61 6d 65 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -buffer-name.................... | 
| 17340 |  20 20 20 20 20 20 20 20 20 20 62 61 63 6b 65 6e    64 2d 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20  | ..........backend-name))........ | 
| 17360 |  20 20 20 20 20 20 62 61 63 6b 65 6e 64 2d 6e 61    6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 28  | ......backend-name)............( | 
| 17380 |  63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 6e    69 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | condition-case.nil.............. | 
| 173a0 |  20 20 28 67 70 74 65 6c 2d 2d 67 65 74 2d 61 70    69 2d 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20  | ..(gptel--get-api-key........... | 
| 173c0 |  20 20 20 20 20 20 28 67 70 74 65 6c 2d 62 61 63    6b 65 6e 64 2d 6b 65 79 20 62 61 63 6b 65 6e 64  | ......(gptel-backend-key.backend | 
| 173e0 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    28 28 65 72 72 6f 72 20 75 73 65 72 2d 65 72 72  | ))..............((error.user-err | 
| 17400 |  6f 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 73 65 74 71 20 67 70 74 65 6c 2d 61 70  | or)...............(setq.gptel-ap | 
| 17420 |  69 2d 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 72 65 61 64 2d  | i-key.....................(read- | 
| 17440 |  70 61 73 73 77 64 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72  | passwd......................(for | 
| 17460 |  6d 61 74 20 22 25 73 20 41 50 49 20 6b 65 79 3a    20 22 20 62 61 63 6b 65 6e 64 2d 6e 61 6d 65 29  | mat."%s.API.key:.".backend-name) | 
| 17480 |  29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    28 61 6e 64 20 28 75 73 65 2d 72 65 67 69 6f 6e  | ))))............(and.(use-region | 
| 174a0 |  2d 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 62 75 66 66 65 72 2d 73 75 62 73  | -p).................(buffer-subs | 
| 174c0 |  74 72 69 6e 67 20 28 72 65 67 69 6f 6e 2d 62 65    67 69 6e 6e 69 6e 67 29 0a 20 20 20 20 20 20 20  | tring.(region-beginning)........ | 
| 174e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 72 65 67 69  | ...........................(regi | 
| 17500 |  6f 6e 2d 65 6e 64 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 74 29 29 29 0a 20 20 28 77 69 74  | on-end)))............t)))...(wit | 
| 17520 |  68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72    20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65  | h-current-buffer.(get-buffer-cre | 
| 17540 |  61 74 65 20 6e 61 6d 65 29 0a 20 20 20 20 28 63    6f 6e 64 20 3b 53 65 74 20 6d 61 6a 6f 72 20 6d  | ate.name).....(cond.;Set.major.m | 
| 17560 |  6f 64 65 0a 20 20 20 20 20 28 28 65 71 20 6d 61    6a 6f 72 2d 6d 6f 64 65 20 67 70 74 65 6c 2d 64  | ode......((eq.major-mode.gptel-d | 
| 17580 |  65 66 61 75 6c 74 2d 6d 6f 64 65 29 29 0a 20 20    20 20 20 28 28 65 71 20 67 70 74 65 6c 2d 64 65  | efault-mode))......((eq.gptel-de | 
| 175a0 |  66 61 75 6c 74 2d 6d 6f 64 65 20 27 74 65 78 74    2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 28 74 65  | fault-mode.'text-mode).......(te | 
| 175c0 |  78 74 2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 28    76 69 73 75 61 6c 2d 6c 69 6e 65 2d 6d 6f 64 65  | xt-mode).......(visual-line-mode | 
| 175e0 |  20 31 29 29 0a 20 20 20 20 20 28 74 20 28 66 75    6e 63 61 6c 6c 20 67 70 74 65 6c 2d 64 65 66 61  | .1))......(t.(funcall.gptel-defa | 
| 17600 |  75 6c 74 2d 6d 6f 64 65 29 29 29 0a 20 20 20 20    28 67 70 74 65 6c 2d 2d 73 61 6e 69 74 69 7a 65  | ult-mode))).....(gptel--sanitize | 
| 17620 |  2d 6d 6f 64 65 6c 20 3a 62 61 63 6b 65 6e 64 20    28 64 65 66 61 75 6c 74 2d 76 61 6c 75 65 20 27  | -model.:backend.(default-value.' | 
| 17640 |  67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | gptel-backend).................. | 
| 17660 |  20 20 20 20 20 20 20 20 20 20 3a 6d 6f 64 65 6c    20 28 64 65 66 61 75 6c 74 2d 76 61 6c 75 65 20  | ..........:model.(default-value. | 
| 17680 |  27 67 70 74 65 6c 2d 6d 6f 64 65 6c 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | 'gptel-model)................... | 
| 176a0 |  20 20 20 20 20 20 20 20 20 3a 73 68 6f 6f 73 68    20 6e 69 6c 29 0a 20 20 20 20 28 75 6e 6c 65 73  | .........:shoosh.nil).....(unles | 
| 176c0 |  73 20 67 70 74 65 6c 2d 6d 6f 64 65 20 28 67 70    74 65 6c 2d 6d 6f 64 65 20 31 29 29 0a 20 20 20  | s.gptel-mode.(gptel-mode.1)).... | 
| 176e0 |  20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69    6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 28 73 6b  | .(goto-char.(point-max)).....(sk | 
| 17700 |  69 70 2d 63 68 61 72 73 2d 62 61 63 6b 77 61 72    64 20 22 5c 74 5c 72 5c 6e 22 29 0a 20 20 20 20  | ip-chars-backward."\t\r\n")..... | 
| 17720 |  28 69 66 20 28 62 6f 62 70 29 20 28 69 6e 73 65    72 74 20 28 6f 72 20 69 6e 69 74 69 61 6c 20 28  | (if.(bobp).(insert.(or.initial.( | 
| 17740 |  67 70 74 65 6c 2d 70 72 6f 6d 70 74 2d 70 72 65    66 69 78 2d 73 74 72 69 6e 67 29 29 29 29 0a 20  | gptel-prompt-prefix-string)))).. | 
| 17760 |  20 20 20 28 77 68 65 6e 20 69 6e 74 65 72 61 63    74 69 76 65 70 0a 20 20 20 20 20 20 28 64 69 73  | ...(when.interactivep.......(dis | 
| 17780 |  70 6c 61 79 2d 62 75 66 66 65 72 20 28 63 75 72    72 65 6e 74 2d 62 75 66 66 65 72 29 20 67 70 74  | play-buffer.(current-buffer).gpt | 
| 177a0 |  65 6c 2d 64 69 73 70 6c 61 79 2d 62 75 66 66 65    72 2d 61 63 74 69 6f 6e 29 0a 20 20 20 20 20 20  | el-display-buffer-action)....... | 
| 177c0 |  28 6d 65 73 73 61 67 65 20 22 53 65 6e 64 20 79    6f 75 72 20 71 75 65 72 79 20 77 69 74 68 20 25  | (message."Send.your.query.with.% | 
| 177e0 |  73 21 22 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 73 75 62 73 74 69 74 75 74 65 2d 63  | s!"................(substitute-c | 
| 17800 |  6f 6d 6d 61 6e 64 2d 6b 65 79 73 20 22 5c 5c 5b    67 70 74 65 6c 2d 73 65 6e 64 5d 22 29 29 29 0a  | ommand-keys."\\[gptel-send]"))). | 
| 17820 |  20 20 20 20 28 63 75 72 72 65 6e 74 2d 62 75 66    66 65 72 29 29 29 0a 0a 0c 0a 3b 3b 20 52 65 73  | ....(current-buffer)))....;;.Res | 
| 17840 |  70 6f 6e 73 65 20 74 77 65 61 6b 69 6e 67 20 63    6f 6d 6d 61 6e 64 73 0a 0a 28 64 65 66 75 6e 20  | ponse.tweaking.commands..(defun. | 
| 17860 |  67 70 74 65 6c 2d 2d 61 74 74 61 63 68 2d 72 65    73 70 6f 6e 73 65 2d 68 69 73 74 6f 72 79 20 28  | gptel--attach-response-history.( | 
| 17880 |  68 69 73 74 6f 72 79 20 26 6f 70 74 69 6f 6e 61    6c 20 62 75 66 29 0a 20 20 22 41 74 74 61 63 68  | history.&optional.buf)..."Attach | 
| 178a0 |  20 48 49 53 54 4f 52 59 20 74 6f 20 74 68 65 20    6e 65 78 74 20 67 70 74 65 6c 20 72 65 73 70 6f  | .HISTORY.to.the.next.gptel.respo | 
| 178c0 |  6e 73 65 20 69 6e 20 62 75 66 66 65 72 20 42 55    46 2e 0a 0a 48 49 53 54 4f 52 59 20 69 73 20 61  | nse.in.buffer.BUF...HISTORY.is.a | 
| 178e0 |  20 6c 69 73 74 20 6f 66 20 73 74 72 69 6e 67 73    20 74 79 70 69 63 61 6c 6c 79 20 63 6f 6e 74 61  | .list.of.strings.typically.conta | 
| 17900 |  69 6e 69 6e 67 20 74 65 78 74 20 72 65 70 6c 61    63 65 64 0a 62 79 20 67 70 74 65 6c 2e 20 20 42  | ining.text.replaced.by.gptel...B | 
| 17920 |  55 46 20 69 73 20 74 68 65 20 63 75 72 72 65 6e    74 20 62 75 66 66 65 72 20 69 66 20 6e 6f 74 20  | UF.is.the.current.buffer.if.not. | 
| 17940 |  73 70 65 63 69 66 69 65 64 2e 0a 0a 54 68 69 73    20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 69 6e  | specified...This.is.used.to.main | 
| 17960 |  74 61 69 6e 20 76 61 72 69 61 6e 74 73 20 6f 66    20 70 72 6f 6d 70 74 73 20 6f 72 20 72 65 73 70  | tain.variants.of.prompts.or.resp | 
| 17980 |  6f 6e 73 65 73 20 74 6f 20 64 69 66 66 0a 61 67    61 69 6e 73 74 20 69 66 20 72 65 71 75 69 72 65  | onses.to.diff.against.if.require | 
| 179a0 |  64 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72    65 6e 74 2d 62 75 66 66 65 72 20 28 6f 72 20 62  | d."...(with-current-buffer.(or.b | 
| 179c0 |  75 66 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66    65 72 29 29 0a 20 20 20 20 28 6c 65 74 72 65 63  | uf.(current-buffer)).....(letrec | 
| 179e0 |  20 28 28 67 70 74 65 6c 2d 2d 61 74 74 61 63 68    2d 61 66 74 65 72 0a 20 20 20 20 20 20 20 20 20  | .((gptel--attach-after.......... | 
| 17a00 |  20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 62 20    65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | .....(lambda.(b.e).............. | 
| 17a20 |  20 20 20 28 70 75 74 2d 74 65 78 74 2d 70 72 6f    70 65 72 74 79 20 62 20 65 20 27 67 70 74 65 6c  | ...(put-text-property.b.e.'gptel | 
| 17a40 |  2d 68 69 73 74 6f 72 79 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -history........................ | 
| 17a60 |  20 20 20 20 20 20 20 20 20 20 20 20 28 61 70 70    65 6e 64 20 28 65 6e 73 75 72 65 2d 6c 69 73 74  | ............(append.(ensure-list | 
| 17a80 |  20 68 69 73 74 6f 72 79 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .history)....................... | 
| 17aa0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 67 65 74 2d 63 68 61 72 2d 70  | .....................(get-char-p | 
| 17ac0 |  72 6f 70 65 72 74 79 20 28 31 2d 20 65 29 20 27    67 70 74 65 6c 2d 68 69 73 74 6f 72 79 29 29 29  | roperty.(1-.e).'gptel-history))) | 
| 17ae0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 72 65 6d 6f 76 65 2d 68 6f 6f 6b 20 27 67  | .................(remove-hook.'g | 
| 17b00 |  70 74 65 6c 2d 70 6f 73 74 2d 72 65 73 70 6f 6e    73 65 2d 66 75 6e 63 74 69 6f 6e 73 0a 20 20 20  | ptel-post-response-functions.... | 
| 17b20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 67 70 74 65 6c 2d  | ..........................gptel- | 
| 17b40 |  2d 61 74 74 61 63 68 2d 61 66 74 65 72 20 27 6c    6f 63 61 6c 29 29 29 29 0a 20 20 20 20 20 20 28  | -attach-after.'local)))).......( | 
| 17b60 |  61 64 64 2d 68 6f 6f 6b 20 27 67 70 74 65 6c 2d    70 6f 73 74 2d 72 65 73 70 6f 6e 73 65 2d 66 75  | add-hook.'gptel-post-response-fu | 
| 17b80 |  6e 63 74 69 6f 6e 73 20 67 70 74 65 6c 2d 2d 61    74 74 61 63 68 2d 61 66 74 65 72 0a 20 20 20 20  | nctions.gptel--attach-after..... | 
| 17ba0 |  20 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c 20    27 6c 6f 63 61 6c 29 29 29 29 0a 0a 28 64 65 66  | ............nil.'local))))..(def | 
| 17bc0 |  75 6e 20 67 70 74 65 6c 2d 2d 65 64 69 66 66 20    28 26 6f 70 74 69 6f 6e 61 6c 20 61 72 67 20 62  | un.gptel--ediff.(&optional.arg.b | 
| 17be0 |  6f 75 6e 64 73 2d 66 75 6e 63 29 0a 20 20 22 45    64 69 66 66 20 72 65 73 70 6f 6e 73 65 20 61 74  | ounds-func)..."Ediff.response.at | 
| 17c00 |  20 70 6f 69 6e 74 20 61 67 61 69 6e 73 74 20 70    72 65 76 69 6f 75 73 20 67 70 74 65 6c 20 72 65  | .point.against.previous.gptel.re | 
| 17c20 |  73 70 6f 6e 73 65 73 2e 0a 0a 49 66 20 70 72 65    66 69 78 20 41 52 47 20 69 73 20 6e 6f 6e 2d 6e  | sponses...If.prefix.ARG.is.non-n | 
| 17c40 |  69 6c 2c 20 73 65 6c 65 63 74 20 74 68 65 20 70    72 65 76 69 6f 75 73 20 72 65 73 70 6f 6e 73 65  | il,.select.the.previous.response | 
| 17c60 |  20 74 6f 20 65 64 69 66 66 0a 61 67 61 69 6e 73    74 20 69 6e 74 65 72 61 63 74 69 76 65 6c 79 2e  | .to.ediff.against.interactively. | 
| 17c80 |  0a 0a 49 66 20 73 70 65 63 69 66 69 65 64 2c 20    75 73 65 20 42 4f 55 4e 44 53 2d 46 55 4e 43 20  | ..If.specified,.use.BOUNDS-FUNC. | 
| 17ca0 |  74 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 62    6f 75 6e 64 73 20 6f 66 20 74 68 65 0a 72 65 73  | to.compute.the.bounds.of.the.res | 
| 17cc0 |  70 6f 6e 73 65 20 61 74 20 70 6f 69 6e 74 2e 20    20 54 68 69 73 20 63 61 6e 20 62 65 20 75 73 65  | ponse.at.point...This.can.be.use | 
| 17ce0 |  64 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 64 64    69 74 69 6f 6e 61 6c 0a 63 6f 6e 74 65 78 74 20  | d.to.include.additional.context. | 
| 17d00 |  66 6f 72 20 74 68 65 20 65 64 69 66 66 20 73 65    73 73 69 6f 6e 2e 22 0a 20 20 28 69 6e 74 65 72  | for.the.ediff.session."...(inter | 
| 17d20 |  61 63 74 69 76 65 20 22 50 22 29 0a 20 20 28 77    68 65 6e 20 28 67 70 74 65 6c 2d 2d 61 74 2d 72  | active."P")...(when.(gptel--at-r | 
| 17d40 |  65 73 70 6f 6e 73 65 2d 68 69 73 74 6f 72 79 2d    70 29 0a 20 20 20 20 28 70 63 61 73 65 2d 6c 65  | esponse-history-p).....(pcase-le | 
| 17d60 |  74 2a 20 28 28 60 28 2c 62 65 67 20 2e 20 2c 65    6e 64 29 20 28 66 75 6e 63 61 6c 6c 20 28 6f 72  | t*.((`(,beg...,end).(funcall.(or | 
| 17d80 |  20 62 6f 75 6e 64 73 2d 66 75 6e 63 20 23 27 67    70 74 65 6c 2d 2d 67 65 74 2d 62 6f 75 6e 64 73  | .bounds-func.#'gptel--get-bounds | 
| 17da0 |  29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 70 72 65 76 2d 72 65 73 70 6f  | )))..................(prev-respo | 
| 17dc0 |  6e 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 69 66 20 61 72 67 0a 20 20  | nse...................(if.arg... | 
| 17de0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6f 6d 70 6c 65 74 69 6e 67 2d  | ....................(completing- | 
| 17e00 |  72 65 61 64 20 22 43 68 6f 6f 73 65 20 72 65 73    70 6f 6e 73 65 20 76 61 72 69 61 6e 74 20 74 6f  | read."Choose.response.variant.to | 
| 17e20 |  20 64 69 66 66 20 61 67 61 69 6e 73 74 3a 20 22    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .diff.against:."................ | 
| 17e40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 67 65 74 2d 63 68 61  | ........................(get-cha | 
| 17e60 |  72 2d 70 72 6f 70 65 72 74 79 20 28 70 6f 69 6e    74 29 20 27 67 70 74 65 6c 2d 68 69 73 74 6f 72  | r-property.(point).'gptel-histor | 
| 17e80 |  79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | y).............................. | 
| 17ea0 |  20 20 20 20 20 20 20 20 20 20 6e 69 6c 20 74 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..........nil.t)................ | 
| 17ec0 |  20 20 20 20 20 28 63 61 72 2d 73 61 66 65 20 28    67 65 74 2d 63 68 61 72 2d 70 72 6f 70 65 72 74  | .....(car-safe.(get-char-propert | 
| 17ee0 |  79 20 28 70 6f 69 6e 74 29 20 27 67 70 74 65 6c    2d 68 69 73 74 6f 72 79 29 29 29 29 0a 20 20 20  | y.(point).'gptel-history)))).... | 
| 17f00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62    75 66 66 65 72 2d 6d 6f 64 65 20 6d 61 6a 6f 72  | ..............(buffer-mode.major | 
| 17f20 |  2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 62 75 66 6e 61 6d 65  | -mode)..................(bufname | 
| 17f40 |  20 28 62 75 66 66 65 72 2d 6e 61 6d 65 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .(buffer-name))................. | 
| 17f60 |  20 28 60 28 2c 6e 65 77 2d 62 75 66 20 2c 6e 65    77 2d 62 65 67 20 2c 6e 65 77 2d 65 6e 64 29 0a  | .(`(,new-buf.,new-beg.,new-end). | 
| 17f80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d  | ..................(with-current- | 
| 17fa0 |  62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65  | buffer.......................(ge | 
| 17fc0 |  74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20    28 63 6f 6e 63 61 74 20 62 75 66 6e 61 6d 65 20  | t-buffer-create.(concat.bufname. | 
| 17fe0 |  22 2d 50 52 45 56 49 4f 55 53 2d 2a 22 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | "-PREVIOUS-*"))................. | 
| 18000 |  20 20 20 20 28 6c 65 74 20 28 28 69 6e 68 69 62    69 74 2d 72 65 61 64 2d 6f 6e 6c 79 20 74 29 29  | ....(let.((inhibit-read-only.t)) | 
| 18020 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 65 72 61 73 65 2d 62 75  | .......................(erase-bu | 
| 18040 |  66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c  | ffer).......................(del | 
| 18060 |  61 79 2d 6d 6f 64 65 2d 68 6f 6f 6b 73 20 28 66    75 6e 63 61 6c 6c 20 62 75 66 66 65 72 2d 6d 6f  | ay-mode-hooks.(funcall.buffer-mo | 
| 18080 |  64 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 76 69 73 75  | de)).......................(visu | 
| 180a0 |  61 6c 2d 6c 69 6e 65 2d 6d 6f 64 65 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | al-line-mode)................... | 
| 180c0 |  20 20 20 20 28 69 6e 73 65 72 74 20 70 72 65 76    2d 72 65 73 70 6f 6e 73 65 29 0a 20 20 20 20 20  | ....(insert.prev-response)...... | 
| 180e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69  | .................(goto-char.(poi | 
| 18100 |  6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | nt-min)).......................( | 
| 18120 |  6c 69 73 74 20 28 63 75 72 72 65 6e 74 2d 62 75    66 66 65 72 29 20 28 70 6f 69 6e 74 2d 6d 69 6e  | list.(current-buffer).(point-min | 
| 18140 |  29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29    29 29 0a 20 20 20 20 20 20 28 75 6e 6c 65 73 73  | ).(point-max)))))).......(unless | 
| 18160 |  20 70 72 65 76 2d 72 65 73 70 6f 6e 73 65 20 28    75 73 65 72 2d 65 72 72 6f 72 20 22 67 70 74 65  | .prev-response.(user-error."gpte | 
| 18180 |  6c 20 72 65 73 70 6f 6e 73 65 20 69 73 20 61 64    64 69 74 69 76 65 3a 20 6e 6f 20 63 68 61 6e 67  | l.response.is.additive:.no.chang | 
| 181a0 |  65 73 20 74 6f 20 65 64 69 66 66 22 29 29 0a 20    20 20 20 20 20 28 72 65 71 75 69 72 65 20 27 65  | es.to.ediff")).......(require.'e | 
| 181c0 |  64 69 66 66 29 0a 20 20 20 20 20 20 28 6c 65 74    72 65 63 20 28 28 63 77 63 20 28 63 75 72 72 65  | diff).......(letrec.((cwc.(curre | 
| 181e0 |  6e 74 2d 77 69 6e 64 6f 77 2d 63 6f 6e 66 69 67    75 72 61 74 69 6f 6e 29 29 0a 20 20 20 20 20 20  | nt-window-configuration))....... | 
| 18200 |  20 20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d    2d 65 64 69 66 66 2d 72 65 73 74 6f 72 65 0a 20  | .........(gptel--ediff-restore.. | 
| 18220 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20  | ...............(lambda.()....... | 
| 18240 |  20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65    6e 20 28 77 69 6e 64 6f 77 2d 63 6f 6e 66 69 67  | ............(when.(window-config | 
| 18260 |  75 72 61 74 69 6f 6e 2d 70 20 63 77 63 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | uration-p.cwc).................. | 
| 18280 |  20 20 20 28 73 65 74 2d 77 69 6e 64 6f 77 2d 63    6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 77 63  | ...(set-window-configuration.cwc | 
| 182a0 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65  | ))...................(kill-buffe | 
| 182c0 |  72 20 28 67 65 74 2d 62 75 66 66 65 72 20 28 63    6f 6e 63 61 74 20 62 75 66 6e 61 6d 65 20 22 2d  | r.(get-buffer.(concat.bufname."- | 
| 182e0 |  50 52 45 56 49 4f 55 53 2d 2a 22 29 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | PREVIOUS-*"))).................. | 
| 18300 |  20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 28 67    65 74 2d 62 75 66 66 65 72 20 28 63 6f 6e 63 61  | .(kill-buffer.(get-buffer.(conca | 
| 18320 |  74 20 62 75 66 6e 61 6d 65 20 22 2d 43 55 52 52    45 4e 54 2d 2a 22 29 29 29 0a 20 20 20 20 20 20  | t.bufname."-CURRENT-*")))....... | 
| 18340 |  20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 6d    6f 76 65 2d 68 6f 6f 6b 20 27 65 64 69 66 66 2d  | ............(remove-hook.'ediff- | 
| 18360 |  71 75 69 74 2d 68 6f 6f 6b 20 67 70 74 65 6c 2d    2d 65 64 69 66 66 2d 72 65 73 74 6f 72 65 29 29  | quit-hook.gptel--ediff-restore)) | 
| 18380 |  29 29 0a 20 20 20 20 20 20 20 20 28 61 64 64 2d    68 6f 6f 6b 20 27 65 64 69 66 66 2d 71 75 69 74  | )).........(add-hook.'ediff-quit | 
| 183a0 |  2d 68 6f 6f 6b 20 67 70 74 65 6c 2d 2d 65 64 69    66 66 2d 72 65 73 74 6f 72 65 29 0a 20 20 20 20  | -hook.gptel--ediff-restore)..... | 
| 183c0 |  20 20 20 20 28 61 70 70 6c 79 0a 20 20 20 20 20    20 20 20 20 23 27 65 64 69 66 66 2d 72 65 67 69  | ....(apply..........#'ediff-regi | 
| 183e0 |  6f 6e 73 2d 69 6e 74 65 72 6e 61 6c 0a 20 20 20    20 20 20 20 20 20 28 67 65 74 2d 62 75 66 66 65  | ons-internal..........(get-buffe | 
| 18400 |  72 20 28 65 64 69 66 66 2d 6d 61 6b 65 2d 63 6c    6f 6e 65 64 2d 62 75 66 66 65 72 20 28 63 75 72  | r.(ediff-make-cloned-buffer.(cur | 
| 18420 |  72 65 6e 74 2d 62 75 66 66 65 72 29 20 22 2d 43    55 52 52 45 4e 54 2d 2a 22 29 29 0a 20 20 20 20  | rent-buffer)."-CURRENT-*"))..... | 
| 18440 |  20 20 20 20 20 62 65 67 20 65 6e 64 20 6e 65 77    2d 62 75 66 20 6e 65 77 2d 62 65 67 20 6e 65 77  | .....beg.end.new-buf.new-beg.new | 
| 18460 |  2d 65 6e 64 0a 20 20 20 20 20 20 20 20 20 6e 69    6c 0a 20 20 20 20 20 20 20 20 20 28 6c 69 73 74  | -end..........nil..........(list | 
| 18480 |  20 27 65 64 69 66 66 2d 72 65 67 69 6f 6e 73 2d    77 6f 72 64 77 69 73 65 20 27 77 6f 72 64 2d 77  | .'ediff-regions-wordwise.'word-w | 
| 184a0 |  69 73 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 20    20 20 3b 3b 20 28 69 66 20 28 74 72 61 6e 73 69  | ise.nil)..........;;.(if.(transi | 
| 184c0 |  65 6e 74 2d 61 72 67 2d 76 61 6c 75 65 20 22 2d    77 22 20 61 72 67 73 29 0a 20 20 20 20 20 20 20  | ent-arg-value."-w".args)........ | 
| 184e0 |  20 20 3b 3b 20 20 20 20 20 28 6c 69 73 74 20 27    65 64 69 66 66 2d 72 65 67 69 6f 6e 73 2d 77 6f  | ..;;.....(list.'ediff-regions-wo | 
| 18500 |  72 64 77 69 73 65 20 27 77 6f 72 64 2d 77 69 73    65 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20  | rdwise.'word-wise.nil).......... | 
| 18520 |  3b 3b 20 20 20 28 6c 69 73 74 20 27 65 64 69 66    66 2d 72 65 67 69 6f 6e 73 2d 6c 69 6e 65 77 69  | ;;...(list.'ediff-regions-linewi | 
| 18540 |  73 65 20 6e 69 6c 20 6e 69 6c 29 29 0a 20 20 20    20 20 20 20 20 20 29 29 29 29 29 0a 0a 28 64 65  | se.nil.nil))..........)))))..(de | 
| 18560 |  66 75 6e 20 67 70 74 65 6c 2d 2d 6d 61 72 6b 2d    72 65 73 70 6f 6e 73 65 20 28 29 0a 20 20 22 4d  | fun.gptel--mark-response.()..."M | 
| 18580 |  61 72 6b 20 67 70 74 65 6c 20 72 65 73 70 6f 6e    73 65 20 61 74 20 70 6f 69 6e 74 2c 20 69 66 20  | ark.gptel.response.at.point,.if. | 
| 185a0 |  61 6e 79 2e 22 0a 20 20 28 69 6e 74 65 72 61 63    74 69 76 65 29 0a 20 20 28 75 6e 6c 65 73 73 20  | any."...(interactive)...(unless. | 
| 185c0 |  28 67 70 74 65 6c 2d 2d 69 6e 2d 72 65 73 70 6f    6e 73 65 2d 70 29 20 28 75 73 65 72 2d 65 72 72  | (gptel--in-response-p).(user-err | 
| 185e0 |  6f 72 20 22 4e 6f 20 67 70 74 65 6c 20 72 65 73    70 6f 6e 73 65 20 61 74 20 70 6f 69 6e 74 22 29  | or."No.gptel.response.at.point") | 
| 18600 |  29 0a 20 20 28 70 63 61 73 65 2d 6c 65 74 2a 20    28 28 60 28 2c 62 65 67 20 2e 20 2c 65 6e 64 29  | )...(pcase-let*.((`(,beg...,end) | 
| 18620 |  20 28 67 70 74 65 6c 2d 2d 67 65 74 2d 62 6f 75    6e 64 73 29 29 29 0a 20 20 20 20 28 67 6f 74 6f  | .(gptel--get-bounds))).....(goto | 
| 18640 |  2d 63 68 61 72 20 62 65 67 29 20 28 70 75 73 68    2d 6d 61 72 6b 29 20 28 67 6f 74 6f 2d 63 68 61  | -char.beg).(push-mark).(goto-cha | 
| 18660 |  72 20 65 6e 64 29 20 28 61 63 74 69 76 61 74 65    2d 6d 61 72 6b 29 29 29 0a 0a 28 64 65 66 75 6e  | r.end).(activate-mark)))..(defun | 
| 18680 |  20 67 70 74 65 6c 2d 2d 70 72 65 76 69 6f 75 73    2d 76 61 72 69 61 6e 74 20 28 26 6f 70 74 69 6f  | .gptel--previous-variant.(&optio | 
| 186a0 |  6e 61 6c 20 61 72 67 29 0a 20 20 22 53 77 69 74    63 68 20 74 6f 20 70 72 65 76 69 6f 75 73 20 67  | nal.arg)..."Switch.to.previous.g | 
| 186c0 |  70 74 65 6c 2d 72 65 73 70 6f 6e 73 65 20 61 74    20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 66 20  | ptel-response.at.this.point,.if. | 
| 186e0 |  69 74 20 65 78 69 73 74 73 2e 22 0a 20 20 28 69    6e 74 65 72 61 63 74 69 76 65 20 22 70 22 29 0a  | it.exists."...(interactive."p"). | 
| 18700 |  20 20 28 70 63 61 73 65 2d 6c 65 74 2a 20 28 28    60 28 2c 62 65 67 20 2e 20 2c 65 6e 64 29 20 28  | ..(pcase-let*.((`(,beg...,end).( | 
| 18720 |  67 70 74 65 6c 2d 2d 67 65 74 2d 62 6f 75 6e 64    73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | gptel--get-bounds))............. | 
| 18740 |  20 20 20 28 68 69 73 74 6f 72 79 20 28 67 65 74    2d 63 68 61 72 2d 70 72 6f 70 65 72 74 79 20 28  | ...(history.(get-char-property.( | 
| 18760 |  70 6f 69 6e 74 29 20 27 67 70 74 65 6c 2d 68 69    73 74 6f 72 79 29 29 0a 20 20 20 20 20 20 20 20  | point).'gptel-history))......... | 
| 18780 |  20 20 20 20 20 20 20 28 61 6c 74 2d 72 65 73 70    6f 6e 73 65 20 28 63 61 72 2d 73 61 66 65 20 68  | .......(alt-response.(car-safe.h | 
| 187a0 |  69 73 74 6f 72 79 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 6f 66 66 73 65 74 29  | istory))................(offset) | 
| 187c0 |  29 0a 20 20 20 20 28 75 6e 6c 65 73 73 20 28 61    6e 64 20 68 69 73 74 6f 72 79 20 61 6c 74 2d 72  | ).....(unless.(and.history.alt-r | 
| 187e0 |  65 73 70 6f 6e 73 65 29 0a 20 20 20 20 20 20 28    75 73 65 72 2d 65 72 72 6f 72 20 22 4e 6f 20 76  | esponse).......(user-error."No.v | 
| 18800 |  61 72 69 61 6e 74 20 72 65 73 70 6f 6e 73 65 73    20 61 76 61 69 6c 61 62 6c 65 22 29 29 0a 20 20  | ariant.responses.available"))... | 
| 18820 |  20 20 28 69 66 20 28 3e 20 61 72 67 20 30 29 0a    20 20 20 20 20 20 20 20 28 73 65 74 71 20 68 69  | ..(if.(>.arg.0).........(setq.hi | 
| 18840 |  73 74 6f 72 79 20 28 61 70 70 65 6e 64 20 28 63    64 72 20 68 69 73 74 6f 72 79 29 0a 20 20 20 20  | story.(append.(cdr.history)..... | 
| 18860 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20  | ..........................(list. | 
| 18880 |  28 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e    67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20  | (buffer-substring-no-properties. | 
| 188a0 |  62 65 67 20 65 6e 64 29 29 29 29 0a 20 20 20 20    20 20 28 73 65 74 71 0a 20 20 20 20 20 20 20 61  | beg.end)))).......(setq........a | 
| 188c0 |  6c 74 2d 72 65 73 70 6f 6e 73 65 20 28 63 61 72    20 28 6c 61 73 74 20 68 69 73 74 6f 72 79 29 29  | lt-response.(car.(last.history)) | 
| 188e0 |  0a 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 20    28 63 6f 6e 73 20 28 62 75 66 66 65 72 2d 73 75  | ........history.(cons.(buffer-su | 
| 18900 |  62 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65    72 74 69 65 73 20 62 65 67 20 65 6e 64 29 0a 20  | bstring-no-properties.beg.end).. | 
| 18920 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 6e 62 75 74 6c 61 73 74 20 68 69  | ....................(nbutlast.hi | 
| 18940 |  73 74 6f 72 79 29 29 29 29 0a 20 20 20 20 28 61    64 64 2d 74 65 78 74 2d 70 72 6f 70 65 72 74 69  | story)))).....(add-text-properti | 
| 18960 |  65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    30 20 28 6c 65 6e 67 74 68 20 61 6c 74 2d 72 65  | es..............0.(length.alt-re | 
| 18980 |  73 70 6f 6e 73 65 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 60 28 67 70 74 65 6c 20 72 65 73  | sponse)..............`(gptel.res | 
| 189a0 |  70 6f 6e 73 65 20 67 70 74 65 6c 2d 68 69 73 74    6f 72 79 20 2c 68 69 73 74 6f 72 79 29 0a 20 20  | ponse.gptel-history.,history)... | 
| 189c0 |  20 20 20 20 20 20 20 20 20 20 20 61 6c 74 2d 72    65 73 70 6f 6e 73 65 29 0a 20 20 20 20 28 73 65  | ...........alt-response).....(se | 
| 189e0 |  74 71 20 6f 66 66 73 65 74 20 28 6d 69 6e 20 28    2d 20 28 70 6f 69 6e 74 29 20 62 65 67 29 20 28  | tq.offset.(min.(-.(point).beg).( | 
| 18a00 |  31 2d 20 28 6c 65 6e 67 74 68 20 61 6c 74 2d 72    65 73 70 6f 6e 73 65 29 29 29 29 0a 20 20 20 20  | 1-.(length.alt-response))))..... | 
| 18a20 |  28 64 65 6c 65 74 65 2d 72 65 67 69 6f 6e 20 62    65 67 20 65 6e 64 29 0a 20 20 20 20 28 69 6e 73  | (delete-region.beg.end).....(ins | 
| 18a40 |  65 72 74 20 61 6c 74 2d 72 65 73 70 6f 6e 73 65    29 0a 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72  | ert.alt-response).....(goto-char | 
| 18a60 |  20 28 2b 20 62 65 67 20 6f 66 66 73 65 74 29 29    0a 20 20 20 20 28 70 75 6c 73 65 2d 6d 6f 6d 65  | .(+.beg.offset)).....(pulse-mome | 
| 18a80 |  6e 74 61 72 79 2d 68 69 67 68 6c 69 67 68 74 2d    72 65 67 69 6f 6e 20 62 65 67 20 28 2b 20 62 65  | ntary-highlight-region.beg.(+.be | 
| 18aa0 |  67 20 28 6c 65 6e 67 74 68 20 61 6c 74 2d 72 65    73 70 6f 6e 73 65 29 29 29 29 29 0a 0a 28 64 65  | g.(length.alt-response)))))..(de | 
| 18ac0 |  66 75 6e 20 67 70 74 65 6c 2d 2d 6e 65 78 74 2d    76 61 72 69 61 6e 74 20 28 26 6f 70 74 69 6f 6e  | fun.gptel--next-variant.(&option | 
| 18ae0 |  61 6c 20 61 72 67 29 0a 20 20 22 53 77 69 74 63    68 20 74 6f 20 6e 65 78 74 20 67 70 74 65 6c 2d  | al.arg)..."Switch.to.next.gptel- | 
| 18b00 |  72 65 73 70 6f 6e 73 65 20 61 74 20 74 68 69 73    20 70 6f 69 6e 74 2c 20 69 66 20 69 74 20 65 78  | response.at.this.point,.if.it.ex | 
| 18b20 |  69 73 74 73 2e 22 0a 20 20 28 69 6e 74 65 72 61    63 74 69 76 65 20 22 70 22 29 0a 20 20 28 67 70  | ists."...(interactive."p")...(gp | 
| 18b40 |  74 65 6c 2d 2d 70 72 65 76 69 6f 75 73 2d 76 61    72 69 61 6e 74 20 28 2d 20 61 72 67 29 29 29 0a  | tel--previous-variant.(-.arg))). | 
| 18b60 |  0a 28 70 72 6f 76 69 64 65 20 27 67 70 74 65 6c    29 0a 3b 3b 3b 20 67 70 74 65 6c 2e 65 6c 20 65  | .(provide.'gptel).;;;.gptel.el.e | 
| 18b80 |  6e 64 73 20 68 65 72 65 0a 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | nds.here........................ | 
| 18ba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18bc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18be0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18c00 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 74 72 61 6e 73 69  | gptel-20240424.2306/gptel-transi | 
| 18c20 |  65 6e 74 2e 65 6c 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ent.el.......................... | 
| 18c40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18c60 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 18c80 |  30 31 31 30 30 32 32 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 35 35 36 00 20 30 00 00 00  | 0110022.00000000000.015556..0... | 
| 18ca0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18cc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18ce0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18d00 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 18d20 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 18d40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18d60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18d80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18da0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18dc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18de0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 18e00 |  3b 3b 3b 20 67 70 74 65 6c 2d 74 72 61 6e 73 69    65 6e 74 2e 65 6c 20 2d 2d 2d 20 54 72 61 6e 73  | ;;;.gptel-transient.el.---.Trans | 
| 18e20 |  69 65 6e 74 20 6d 65 6e 75 20 66 6f 72 20 47 50    54 65 6c 20 20 2d 2a 2d 20 6c 65 78 69 63 61 6c  | ient.menu.for.GPTel..-*-.lexical | 
| 18e40 |  2d 62 69 6e 64 69 6e 67 3a 20 74 3b 20 2d 2a 2d    0a 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28  | -binding:.t;.-*-..;;.Copyright.( | 
| 18e60 |  43 29 20 32 30 32 33 20 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 0a 0a 3b 3b  | C).2023..Karthik.Chikmagalur..;; | 
| 18e80 |  20 41 75 74 68 6f 72 3a 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 20 3c 6b 61  | .Author:.Karthik.Chikmagalur.<ka | 
| 18ea0 |  72 74 68 69 6b 63 68 69 6b 6d 61 67 61 6c 75 72    40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 3b 3b 20 4b  | rthikchikmagalur@gmail.com>.;;.K | 
| 18ec0 |  65 79 77 6f 72 64 73 3a 20 63 6f 6e 76 65 6e 69    65 6e 63 65 0a 0a 3b 3b 20 53 50 44 58 2d 4c 69  | eywords:.convenience..;;.SPDX-Li | 
| 18ee0 |  63 65 6e 73 65 2d 49 64 65 6e 74 69 66 69 65 72    3a 20 47 50 4c 2d 33 2e 30 2d 6f 72 2d 6c 61 74  | cense-Identifier:.GPL-3.0-or-lat | 
| 18f00 |  65 72 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67    72 61 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74  | er..;;.This.program.is.free.soft | 
| 18f20 |  77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65    64 69 73 74 72 69 62 75 74 65 20 69 74 20 61 6e  | ware;.you.can.redistribute.it.an | 
| 18f40 |  64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20 69    74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d  | d/or.modify.;;.it.under.the.term | 
| 18f60 |  73 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e    65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65  | s.of.the.GNU.General.Public.Lice | 
| 18f80 |  6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65 64    20 62 79 0a 3b 3b 20 74 68 65 20 46 72 65 65 20  | nse.as.published.by.;;.the.Free. | 
| 18fa0 |  53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74    69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72 73  | Software.Foundation,.either.vers | 
| 18fc0 |  69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69 63    65 6e 73 65 2c 20 6f 72 0a 3b 3b 20 28 61 74 20  | ion.3.of.the.License,.or.;;.(at. | 
| 18fe0 |  79 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79    20 6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a  | your.option).any.later.version.. | 
| 19000 |  0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d    20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20  | .;;.This.program.is.distributed. | 
| 19020 |  69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74    20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66  | in.the.hope.that.it.will.be.usef | 
| 19040 |  75 6c 2c 0a 3b 3b 20 62 75 74 20 57 49 54 48 4f    55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b  | ul,.;;.but.WITHOUT.ANY.WARRANTY; | 
| 19060 |  20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68    65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e  | .without.even.the.implied.warran | 
| 19080 |  74 79 20 6f 66 0a 3b 3b 20 4d 45 52 43 48 41 4e    54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  | ty.of.;;.MERCHANTABILITY.or.FITN | 
| 190a0 |  45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43    55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  | ESS.FOR.A.PARTICULAR.PURPOSE...S | 
| 190c0 |  65 65 20 74 68 65 0a 3b 3b 20 47 4e 55 20 47 65    6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63  | ee.the.;;.GNU.General.Public.Lic | 
| 190e0 |  65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65    74 61 69 6c 73 2e 0a 0a 3b 3b 20 59 6f 75 20 73  | ense.for.more.details...;;.You.s | 
| 19100 |  68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 69    76 65 64 20 61 20 63 6f 70 79 20 6f 66 20 74 68  | hould.have.received.a.copy.of.th | 
| 19120 |  65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75    62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b 3b 20  | e.GNU.General.Public.License.;;. | 
| 19140 |  61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73 20    70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e 6f 74  | along.with.this.program...If.not | 
| 19160 |  2c 20 73 65 65 20 3c 68 74 74 70 73 3a 2f 2f 77    77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e  | ,.see.<https://www.gnu.org/licen | 
| 19180 |  73 65 73 2f 3e 2e 0a 0a 3b 3b 3b 20 43 6f 6d 6d    65 6e 74 61 72 79 3a 0a 0a 3b 3b 0a 0a 3b 3b 3b  | ses/>...;;;.Commentary:..;;..;;; | 
| 191a0 |  20 43 6f 64 65 3a 0a 28 72 65 71 75 69 72 65 20    27 63 6c 2d 6c 69 62 29 0a 28 72 65 71 75 69 72  | .Code:.(require.'cl-lib).(requir | 
| 191c0 |  65 20 27 67 70 74 65 6c 29 0a 28 72 65 71 75 69    72 65 20 27 74 72 61 6e 73 69 65 6e 74 29 0a 0a  | e.'gptel).(require.'transient).. | 
| 191e0 |  28 64 65 63 6c 61 72 65 2d 66 75 6e 63 74 69 6f    6e 20 65 64 69 66 66 2d 72 65 67 69 6f 6e 73 2d  | (declare-function.ediff-regions- | 
| 19200 |  69 6e 74 65 72 6e 61 6c 20 22 65 64 69 66 66 22    29 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63 74  | internal."ediff").(declare-funct | 
| 19220 |  69 6f 6e 20 65 64 69 66 66 2d 6d 61 6b 65 2d 63    6c 6f 6e 65 64 2d 62 75 66 66 65 72 20 22 65 64  | ion.ediff-make-cloned-buffer."ed | 
| 19240 |  69 66 66 2d 75 74 69 6c 73 22 29 0a 0a 0c 0a 3b    3b 20 2a 20 48 65 6c 70 65 72 20 66 75 6e 63 74  | iff-utils")....;;.*.Helper.funct | 
| 19260 |  69 6f 6e 73 20 61 6e 64 20 76 61 72 73 0a 0a 28    64 65 66 76 61 72 20 67 70 74 65 6c 2d 2d 73 65  | ions.and.vars..(defvar.gptel--se | 
| 19280 |  74 2d 62 75 66 66 65 72 2d 6c 6f 63 61 6c 6c 79    20 6e 69 6c 0a 20 20 22 53 65 74 20 6d 6f 64 65  | t-buffer-locally.nil..."Set.mode | 
| 192a0 |  6c 20 70 61 72 61 6d 65 74 65 72 73 20 66 72 6f    6d 20 60 67 70 74 65 6c 2d 6d 65 6e 75 27 20 62  | l.parameters.from.`gptel-menu'.b | 
| 192c0 |  75 66 66 65 72 2d 6c 6f 63 61 6c 6c 79 2e 0a 0a    41 66 66 65 63 74 73 20 74 68 65 20 73 79 73 74  | uffer-locally...Affects.the.syst | 
| 192e0 |  65 6d 20 6d 65 73 73 61 67 65 20 74 6f 6f 2e 22    29 0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d  | em.message.too.")..(defun.gptel- | 
| 19300 |  2d 73 65 74 2d 77 69 74 68 2d 73 63 6f 70 65 20    28 73 79 6d 20 76 61 6c 75 65 20 26 6f 70 74 69  | -set-with-scope.(sym.value.&opti | 
| 19320 |  6f 6e 61 6c 20 73 63 6f 70 65 29 0a 20 20 22 53    65 74 20 53 59 4d 42 4f 4c 27 73 20 73 79 6d 62  | onal.scope)..."Set.SYMBOL's.symb | 
| 19340 |  6f 6c 2d 76 61 6c 75 65 20 74 6f 20 56 41 4c 55    45 20 77 69 74 68 20 53 43 4f 50 45 2e 0a 0a 49  | ol-value.to.VALUE.with.SCOPE...I | 
| 19360 |  66 20 53 43 4f 50 45 20 69 73 20 6e 6f 6e 2d 6e    69 6c 2c 20 73 65 74 20 69 74 20 62 75 66 66 65  | f.SCOPE.is.non-nil,.set.it.buffe | 
| 19380 |  72 2d 6c 6f 63 61 6c 6c 79 2c 20 65 6c 73 65 20    63 6c 65 61 72 20 61 6e 79 0a 62 75 66 66 65 72  | r-locally,.else.clear.any.buffer | 
| 193a0 |  2d 6c 6f 63 61 6c 20 76 61 6c 75 65 20 61 6e 64    20 73 65 74 20 69 74 73 20 64 65 66 61 75 6c 74  | -local.value.and.set.its.default | 
| 193c0 |  20 67 6c 6f 62 61 6c 20 76 61 6c 75 65 2e 22 0a    20 20 28 69 66 20 73 63 6f 70 65 0a 20 20 20 20  | .global.value."...(if.scope..... | 
| 193e0 |  20 20 28 73 65 74 20 28 6d 61 6b 65 2d 6c 6f 63    61 6c 2d 76 61 72 69 61 62 6c 65 20 73 79 6d 29  | ..(set.(make-local-variable.sym) | 
| 19400 |  20 76 61 6c 75 65 29 0a 20 20 20 20 28 6b 69 6c    6c 2d 6c 6f 63 61 6c 2d 76 61 72 69 61 62 6c 65  | .value).....(kill-local-variable | 
| 19420 |  20 73 79 6d 29 0a 20 20 20 20 28 73 65 74 20 73    79 6d 20 76 61 6c 75 65 29 29 29 0a 0a 28 64 65  | .sym).....(set.sym.value)))..(de | 
| 19440 |  66 75 6e 20 67 70 74 65 6c 2d 2d 67 65 74 2d 64    69 72 65 63 74 69 76 65 20 28 61 72 67 73 29 0a  | fun.gptel--get-directive.(args). | 
| 19460 |  20 20 22 46 69 6e 64 20 74 68 65 20 61 64 64 69    74 69 6f 6e 61 6c 20 64 69 72 65 63 74 69 76 65  | .."Find.the.additional.directive | 
| 19480 |  20 69 6e 20 74 68 65 20 74 72 61 6e 73 69 65 6e    74 20 41 52 47 53 2e 0a 0a 4d 65 61 6e 74 20 74  | .in.the.transient.ARGS...Meant.t | 
| 194a0 |  6f 20 62 65 20 63 61 6c 6c 65 64 20 77 68 65 6e    20 60 67 70 74 65 6c 2d 6d 65 6e 75 27 20 69 73  | o.be.called.when.`gptel-menu'.is | 
| 194c0 |  20 61 63 74 69 76 65 2e 22 0a 20 20 28 63 6c 2d    73 6f 6d 65 20 28 6c 61 6d 62 64 61 20 28 73 29  | .active."...(cl-some.(lambda.(s) | 
| 194e0 |  20 28 61 6e 64 20 28 73 74 72 69 6e 67 70 20 73    29 20 28 73 74 72 69 6e 67 2d 70 72 65 66 69 78  | .(and.(stringp.s).(string-prefix | 
| 19500 |  2d 70 20 22 3a 22 20 73 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -p.":".s)....................... | 
| 19520 |  20 28 63 6f 6e 63 61 74 20 22 5c 6e 5c 6e 22 20    28 73 75 62 73 74 72 69 6e 67 20 73 20 31 29 29  | .(concat."\n\n".(substring.s.1)) | 
| 19540 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 61 72 67 73 29 29 0a 0a 28 64 65  | ))...................args))..(de | 
| 19560 |  66 75 6e 20 67 70 74 65 6c 2d 2d 69 6e 73 74 72    75 63 74 69 6f 6e 73 2d 6d 61 6b 65 2d 6f 76 65  | fun.gptel--instructions-make-ove | 
| 19580 |  72 6c 61 79 20 28 74 65 78 74 20 26 6f 70 74 69    6f 6e 61 6c 20 6f 76 29 0a 20 20 22 54 4f 44 4f  | rlay.(text.&optional.ov)..."TODO | 
| 195a0 |  22 0a 20 20 28 73 61 76 65 2d 65 78 63 75 72 73    69 6f 6e 0a 20 20 20 20 28 63 6f 6e 64 0a 20 20  | "...(save-excursion.....(cond... | 
| 195c0 |  20 20 20 28 28 75 73 65 2d 72 65 67 69 6f 6e 2d    70 29 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 72  | ...((use-region-p).(goto-char.(r | 
| 195e0 |  65 67 69 6f 6e 2d 62 65 67 69 6e 6e 69 6e 67 29    29 29 0a 20 20 20 20 20 28 28 67 70 74 65 6c 2d  | egion-beginning)))......((gptel- | 
| 19600 |  2d 69 6e 2d 72 65 73 70 6f 6e 73 65 2d 70 29 20    28 67 70 74 65 6c 2d 62 65 67 69 6e 6e 69 6e 67  | -in-response-p).(gptel-beginning | 
| 19620 |  2d 6f 66 2d 72 65 73 70 6f 6e 73 65 29 29 0a 20    20 20 20 20 28 74 20 28 74 65 78 74 2d 70 72 6f  | -of-response))......(t.(text-pro | 
| 19640 |  70 65 72 74 79 2d 73 65 61 72 63 68 2d 62 61 63    6b 77 61 72 64 20 27 67 70 74 65 6c 20 27 72 65  | perty-search-backward.'gptel.'re | 
| 19660 |  73 70 6f 6e 73 65 29 29 29 0a 20 20 20 20 28 73    6b 69 70 2d 63 68 61 72 73 2d 66 6f 72 77 61 72  | sponse))).....(skip-chars-forwar | 
| 19680 |  64 20 22 5c 6e 20 5c 74 22 29 0a 20 20 20 20 28    69 66 20 28 61 6e 64 20 6f 76 20 28 6f 76 65 72  | d."\n.\t").....(if.(and.ov.(over | 
| 196a0 |  6c 61 79 70 20 6f 76 29 29 0a 20 20 20 20 20 20    20 20 28 6d 6f 76 65 2d 6f 76 65 72 6c 61 79 20  | layp.ov)).........(move-overlay. | 
| 196c0 |  6f 76 20 28 70 6f 69 6e 74 29 20 28 70 6f 69 6e    74 29 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66  | ov.(point).(point).(current-buff | 
| 196e0 |  65 72 29 29 0a 20 20 20 20 20 20 28 73 65 74 71    20 6f 76 20 28 6d 61 6b 65 2d 6f 76 65 72 6c 61  | er)).......(setq.ov.(make-overla | 
| 19700 |  79 20 28 70 6f 69 6e 74 29 20 28 70 6f 69 6e 74    29 20 6e 69 6c 20 74 29 29 29 0a 20 20 20 20 28  | y.(point).(point).nil.t))).....( | 
| 19720 |  6f 76 65 72 6c 61 79 2d 70 75 74 20 6f 76 20 27    62 65 66 6f 72 65 2d 73 74 72 69 6e 67 20 6e 69  | overlay-put.ov.'before-string.ni | 
| 19740 |  6c 29 0a 20 20 20 20 3b 3b 20 28 75 6e 6c 65 73    73 20 28 6f 72 20 28 62 6f 62 70 29 20 28 65 71  | l).....;;.(unless.(or.(bobp).(eq | 
| 19760 |  20 28 63 68 61 72 2d 62 65 66 6f 72 65 29 20 22    5c 6e 22 29 29 0a 20 20 20 20 3b 3b 20 20 20 28  | .(char-before)."\n")).....;;...( | 
| 19780 |  6f 76 65 72 6c 61 79 2d 70 75 74 20 6f 76 20 27    62 65 66 6f 72 65 2d 73 74 72 69 6e 67 20 28 70  | overlay-put.ov.'before-string.(p | 
| 197a0 |  72 6f 70 65 72 74 69 7a 65 20 22 5c 6e 22 20 27    66 6f 6e 74 2d 6c 6f 63 6b 2d 66 61 63 65 20 27  | ropertize."\n".'font-lock-face.' | 
| 197c0 |  73 68 61 64 6f 77 29 29 29 0a 20 20 20 20 28 6f    76 65 72 6c 61 79 2d 70 75 74 20 6f 76 20 27 63  | shadow))).....(overlay-put.ov.'c | 
| 197e0 |  61 74 65 67 6f 72 79 20 27 67 70 74 65 6c 29 0a    20 20 20 20 28 6f 76 65 72 6c 61 79 2d 70 75 74  | ategory.'gptel).....(overlay-put | 
| 19800 |  0a 20 20 20 20 20 6f 76 20 27 61 66 74 65 72 2d    73 74 72 69 6e 67 0a 20 20 20 20 20 28 63 6f 6e  | ......ov.'after-string......(con | 
| 19820 |  63 61 74 0a 20 20 20 20 20 20 28 70 72 6f 70 65    72 74 69 7a 65 20 28 63 6f 6e 63 61 74 20 22 47  | cat.......(propertize.(concat."G | 
| 19840 |  50 54 45 4c 3a 20 22 20 74 65 78 74 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | PTEL:.".text)................... | 
| 19860 |  27 66 6f 6e 74 2d 6c 6f 63 6b 2d 66 61 63 65 20    27 28 3a 69 6e 68 65 72 69 74 20 73 68 61 64 6f  | 'font-lock-face.'(:inherit.shado | 
| 19880 |  77 20 3a 62 6f 78 20 74 29 29 0a 20 20 20 20 20    20 22 5c 6e 22 29 29 0a 20 20 20 20 6f 76 29 29  | w.:box.t))......."\n")).....ov)) | 
| 198a0 |  0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d    74 72 61 6e 73 69 65 6e 74 2d 72 65 61 64 2d 76  | ..(defun.gptel--transient-read-v | 
| 198c0 |  61 72 69 61 62 6c 65 20 28 70 72 6f 6d 70 74 20    69 6e 69 74 69 61 6c 2d 69 6e 70 75 74 20 68 69  | ariable.(prompt.initial-input.hi | 
| 198e0 |  73 74 6f 72 79 29 0a 20 20 22 52 65 61 64 20 76    61 6c 75 65 20 66 72 6f 6d 20 6d 69 6e 69 62 75  | story)..."Read.value.from.minibu | 
| 19900 |  66 66 65 72 20 61 6e 64 20 69 6e 74 65 72 70 72    65 74 20 74 68 65 20 72 65 73 75 6c 74 20 61 73  | ffer.and.interpret.the.result.as | 
| 19920 |  20 61 20 4c 69 73 70 20 6f 62 6a 65 63 74 2e 0a    0a 50 52 4f 4d 50 54 2c 20 49 4e 49 54 49 41 4c  | .a.Lisp.object...PROMPT,.INITIAL | 
| 19940 |  2d 49 4e 50 55 54 20 61 6e 64 20 48 49 53 54 4f    52 59 20 61 72 65 20 61 73 20 69 6e 20 74 68 65  | -INPUT.and.HISTORY.are.as.in.the | 
| 19960 |  20 54 72 61 6e 73 69 65 6e 74 20 72 65 61 64 65    72 0a 64 6f 63 75 6d 65 6e 74 69 6f 6e 2e 22 0a  | .Transient.reader.documention.". | 
| 19980 |  20 20 28 69 67 6e 6f 72 65 2d 65 72 72 6f 72 73    0a 20 20 20 20 28 72 65 61 64 2d 66 72 6f 6d 2d  | ..(ignore-errors.....(read-from- | 
| 199a0 |  6d 69 6e 69 62 75 66 66 65 72 20 70 72 6f 6d 70    74 20 69 6e 69 74 69 61 6c 2d 69 6e 70 75 74 20  | minibuffer.prompt.initial-input. | 
| 199c0 |  72 65 61 64 2d 65 78 70 72 65 73 73 69 6f 6e 2d    6d 61 70 20 74 20 68 69 73 74 6f 72 79 29 29 29  | read-expression-map.t.history))) | 
| 199e0 |  0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d    72 65 66 61 63 74 6f 72 2d 6f 72 2d 72 65 77 72  | ..(defun.gptel--refactor-or-rewr | 
| 19a00 |  69 74 65 20 28 29 0a 20 20 22 52 65 77 72 69 74    65 20 73 68 6f 75 6c 64 20 62 65 20 72 65 66 61  | ite.()..."Rewrite.should.be.refa | 
| 19a20 |  63 74 6f 72 65 64 20 69 6e 74 6f 20 72 65 66 61    63 74 6f 72 2e 0a 0a 4f 72 20 69 73 20 69 74 20  | ctored.into.refactor...Or.is.it. | 
| 19a40 |  74 68 65 20 6f 74 68 65 72 20 77 61 79 20 61 72    6f 75 6e 64 3f 22 0a 20 20 28 69 66 20 28 64 65  | the.other.way.around?"...(if.(de | 
| 19a60 |  72 69 76 65 64 2d 6d 6f 64 65 2d 70 20 27 70 72    6f 67 2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 22  | rived-mode-p.'prog-mode)......." | 
| 19a80 |  52 65 66 61 63 74 6f 72 22 20 22 52 65 77 72 69    74 65 22 29 29 0a 0a 28 64 65 66 76 61 72 2d 6c  | Refactor"."Rewrite"))..(defvar-l | 
| 19aa0 |  6f 63 61 6c 20 67 70 74 65 6c 2d 2d 72 65 77 72    69 74 65 2d 6d 65 73 73 61 67 65 20 6e 69 6c 29  | ocal.gptel--rewrite-message.nil) | 
| 19ac0 |  0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d 72    65 77 72 69 74 65 2d 6d 65 73 73 61 67 65 20 28  | .(defun.gptel--rewrite-message.( | 
| 19ae0 |  29 0a 20 20 22 53 65 74 20 61 20 67 65 6e 65 72    69 63 20 72 65 66 61 63 74 6f 72 2f 72 65 77 72  | )..."Set.a.generic.refactor/rewr | 
| 19b00 |  69 74 65 20 6d 65 73 73 61 67 65 20 66 6f 72 20    74 68 65 20 62 75 66 66 65 72 2e 22 0a 20 20 28  | ite.message.for.the.buffer."...( | 
| 19b20 |  69 66 20 28 64 65 72 69 76 65 64 2d 6d 6f 64 65    2d 70 20 27 70 72 6f 67 2d 6d 6f 64 65 29 0a 20  | if.(derived-mode-p.'prog-mode).. | 
| 19b40 |  20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 59 6f    75 20 61 72 65 20 61 20 25 73 20 70 72 6f 67 72  | .....(format."You.are.a.%s.progr | 
| 19b60 |  61 6d 6d 65 72 2e 20 52 65 66 61 63 74 6f 72 20    74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  | ammer..Refactor.the.following.co | 
| 19b80 |  64 65 2e 20 47 65 6e 65 72 61 74 65 20 6f 6e 6c    79 20 63 6f 64 65 2c 20 6e 6f 20 65 78 70 6c 61  | de..Generate.only.code,.no.expla | 
| 19ba0 |  6e 61 74 69 6f 6e 2e 22 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 74 68 72 65 61 64 2d 6c  | nation."...............(thread-l | 
| 19bc0 |  61 73 74 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65    20 6d 61 6a 6f 72 2d 6d 6f 64 65 29 0a 20 20 20  | ast.(symbol-name.major-mode).... | 
| 19be0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d  | ........................(string- | 
| 19c00 |  72 65 6d 6f 76 65 2d 73 75 66 66 69 78 20 22 2d    6d 6f 64 65 22 29 0a 20 20 20 20 20 20 20 20 20  | remove-suffix."-mode").......... | 
| 19c20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 73 74 72 69 6e 67 2d 72 65 6d 6f 76 65  | ..................(string-remove | 
| 19c40 |  2d 73 75 66 66 69 78 20 22 2d 74 73 22 29 29 29    0a 20 20 20 20 28 66 6f 72 6d 61 74 20 22 59 6f  | -suffix."-ts"))).....(format."Yo | 
| 19c60 |  75 20 61 72 65 20 61 20 70 72 6f 73 65 20 65 64    69 74 6f 72 2e 20 52 65 77 72 69 74 65 20 74 68  | u.are.a.prose.editor..Rewrite.th | 
| 19c80 |  65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74    20 74 6f 20 62 65 20 6d 6f 72 65 20 70 72 6f 66  | e.following.text.to.be.more.prof | 
| 19ca0 |  65 73 73 69 6f 6e 61 6c 2e 22 29 29 29 0a 0a 28    64 65 66 76 61 72 20 67 70 74 65 6c 2d 2d 63 72  | essional.")))..(defvar.gptel--cr | 
| 19cc0 |  6f 77 64 73 6f 75 72 63 65 64 2d 70 72 6f 6d 70    74 73 2d 75 72 6c 0a 20 20 22 68 74 74 70 73 3a  | owdsourced-prompts-url..."https: | 
| 19ce0 |  2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 66 2f 61    77 65 73 6f 6d 65 2d 63 68 61 74 67 70 74 2d 70  | //github.com/f/awesome-chatgpt-p | 
| 19d00 |  72 6f 6d 70 74 73 2f 72 61 77 2f 6d 61 69 6e 2f    70 72 6f 6d 70 74 73 2e 63 73 76 22 0a 20 20 22  | rompts/raw/main/prompts.csv"..." | 
| 19d20 |  55 52 4c 20 66 6f 72 20 63 72 6f 77 64 73 6f 75    72 63 65 64 20 4c 4c 4d 20 73 79 73 74 65 6d 20  | URL.for.crowdsourced.LLM.system. | 
| 19d40 |  70 72 6f 6d 70 74 73 2e 22 29 0a 0a 28 64 65 66    76 61 72 20 67 70 74 65 6c 2d 2d 63 72 6f 77 64  | prompts.")..(defvar.gptel--crowd | 
| 19d60 |  73 6f 75 72 63 65 64 2d 70 72 6f 6d 70 74 73 0a    20 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62  | sourced-prompts...(make-hash-tab | 
| 19d80 |  6c 65 20 3a 74 65 73 74 20 23 27 65 71 75 61 6c    29 0a 20 20 22 43 72 6f 77 64 73 6f 75 72 63 65  | le.:test.#'equal)..."Crowdsource | 
| 19da0 |  64 20 4c 4c 4d 20 73 79 73 74 65 6d 20 70 72 6f    6d 70 74 73 2e 22 29 0a 0a 28 64 65 66 75 6e 20  | d.LLM.system.prompts.")..(defun. | 
| 19dc0 |  67 70 74 65 6c 2d 2d 63 72 6f 77 64 73 6f 75 72    63 65 64 2d 70 72 6f 6d 70 74 73 20 28 29 0a 20  | gptel--crowdsourced-prompts.().. | 
| 19de0 |  20 22 41 63 71 75 69 72 65 20 61 6e 64 20 72 65    61 64 20 63 72 6f 77 64 73 6f 75 72 63 65 64 20  | ."Acquire.and.read.crowdsourced. | 
| 19e00 |  4c 4c 4d 20 73 79 73 74 65 6d 20 70 72 6f 6d 70    74 73 2e 0a 0a 54 68 65 73 65 20 61 72 65 20 73  | LLM.system.prompts...These.are.s | 
| 19e20 |  74 6f 72 65 64 20 69 6e 20 74 68 65 20 76 61 72    69 61 62 6c 65 20 60 67 70 74 65 6c 2d 2d 63 72  | tored.in.the.variable.`gptel--cr | 
| 19e40 |  6f 77 64 73 6f 75 72 63 65 64 2d 70 72 6f 6d 70    74 73 27 2c 0a 77 68 69 63 68 20 73 65 65 2e 22  | owdsourced-prompts',.which.see." | 
| 19e60 |  0a 20 20 28 77 68 65 6e 20 28 68 61 73 68 2d 74    61 62 6c 65 2d 70 20 67 70 74 65 6c 2d 2d 63 72  | ...(when.(hash-table-p.gptel--cr | 
| 19e80 |  6f 77 64 73 6f 75 72 63 65 64 2d 70 72 6f 6d 70    74 73 29 0a 20 20 20 20 28 77 68 65 6e 20 28 68  | owdsourced-prompts).....(when.(h | 
| 19ea0 |  61 73 68 2d 74 61 62 6c 65 2d 65 6d 70 74 79 2d    70 20 67 70 74 65 6c 2d 2d 63 72 6f 77 64 73 6f  | ash-table-empty-p.gptel--crowdso | 
| 19ec0 |  75 72 63 65 64 2d 70 72 6f 6d 70 74 73 29 0a 20    20 20 20 20 20 28 75 6e 6c 65 73 73 20 67 70 74  | urced-prompts).......(unless.gpt | 
| 19ee0 |  65 6c 2d 63 72 6f 77 64 73 6f 75 72 63 65 64 2d    70 72 6f 6d 70 74 73 2d 66 69 6c 65 0a 20 20 20  | el-crowdsourced-prompts-file.... | 
| 19f00 |  20 20 20 20 20 28 72 75 6e 2d 61 74 2d 74 69 6d    65 20 30 20 6e 69 6c 20 23 27 67 70 74 65 6c 2d  | .....(run-at-time.0.nil.#'gptel- | 
| 19f20 |  73 79 73 74 65 6d 2d 70 72 6f 6d 70 74 29 0a 20    20 20 20 20 20 20 20 28 75 73 65 72 2d 65 72 72  | system-prompt).........(user-err | 
| 19f40 |  6f 72 20 22 4e 6f 20 63 72 6f 77 64 73 6f 75 72    63 65 64 20 70 72 6f 6d 70 74 73 20 61 76 61 69  | or."No.crowdsourced.prompts.avai | 
| 19f60 |  6c 61 62 6c 65 22 29 29 0a 20 20 20 20 20 20 28    75 6e 6c 65 73 73 20 28 61 6e 64 20 28 66 69 6c  | lable")).......(unless.(and.(fil | 
| 19f80 |  65 2d 65 78 69 73 74 73 2d 70 20 67 70 74 65 6c    2d 63 72 6f 77 64 73 6f 75 72 63 65 64 2d 70 72  | e-exists-p.gptel-crowdsourced-pr | 
| 19fa0 |  6f 6d 70 74 73 2d 66 69 6c 65 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | ompts-file)....................( | 
| 19fc0 |  74 69 6d 65 2d 6c 65 73 73 2d 70 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | time-less-p..................... | 
| 19fe0 |  28 74 69 6d 65 2d 73 75 62 74 72 61 63 74 20 28    63 75 72 72 65 6e 74 2d 74 69 6d 65 29 20 28 64  | (time-subtract.(current-time).(d | 
| 1a000 |  61 79 73 2d 74 6f 2d 74 69 6d 65 20 31 34 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ays-to-time.14))................ | 
| 1a020 |  20 20 20 20 20 28 66 69 6c 65 2d 61 74 74 72 69    62 75 74 65 2d 6d 6f 64 69 66 69 63 61 74 69 6f  | .....(file-attribute-modificatio | 
| 1a040 |  6e 2d 74 69 6d 65 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 66 69 6c  | n-time......................(fil | 
| 1a060 |  65 2d 61 74 74 72 69 62 75 74 65 73 20 67 70 74    65 6c 2d 63 72 6f 77 64 73 6f 75 72 63 65 64 2d  | e-attributes.gptel-crowdsourced- | 
| 1a080 |  70 72 6f 6d 70 74 73 2d 66 69 6c 65 29 29 29 29    0a 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28  | prompts-file)))).........(when.( | 
| 1a0a0 |  79 2d 6f 72 2d 6e 2d 70 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 0a  | y-or-n-p................(concat. | 
| 1a0c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    22 46 65 74 63 68 20 63 72 6f 77 64 73 6f 75 72  | ................"Fetch.crowdsour | 
| 1a0e0 |  63 65 64 20 73 79 73 74 65 6d 20 70 72 6f 6d 70    74 73 20 66 72 6f 6d 20 22 0a 20 20 20 20 20 20  | ced.system.prompts.from."....... | 
| 1a100 |  20 20 20 20 20 20 20 20 20 20 28 70 72 6f 70 65    72 74 69 7a 65 20 22 68 74 74 70 73 3a 2f 2f 67  | ..........(propertize."https://g | 
| 1a120 |  69 74 68 75 62 2e 63 6f 6d 2f 66 2f 61 77 65 73    6f 6d 65 2d 63 68 61 74 67 70 74 2d 70 72 6f 6d  | ithub.com/f/awesome-chatgpt-prom | 
| 1a140 |  70 74 73 22 20 27 66 61 63 65 20 27 6c 69 6e 6b    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | pts".'face.'link)............... | 
| 1a160 |  20 20 22 3f 22 29 29 0a 20 20 20 20 20 20 20 20    20 20 3b 3b 20 46 65 74 63 68 20 66 69 6c 65 0a  | .."?"))...........;;.Fetch.file. | 
| 1a180 |  20 20 20 20 20 20 20 20 20 20 28 6d 65 73 73 61    67 65 20 22 46 65 74 63 68 69 6e 67 20 70 72 6f  | ..........(message."Fetching.pro | 
| 1a1a0 |  6d 70 74 73 2e 2e 2e 22 29 0a 20 20 20 20 20 20    20 20 20 20 28 6c 65 74 20 28 28 64 69 72 20 28  | mpts...")...........(let.((dir.( | 
| 1a1c0 |  66 69 6c 65 2d 6e 61 6d 65 2d 64 69 72 65 63 74    6f 72 79 20 67 70 74 65 6c 2d 63 72 6f 77 64 73  | file-name-directory.gptel-crowds | 
| 1a1e0 |  6f 75 72 63 65 64 2d 70 72 6f 6d 70 74 73 2d 66    69 6c 65 29 29 29 0a 20 20 20 20 20 20 20 20 20  | ourced-prompts-file))).......... | 
| 1a200 |  20 20 20 28 75 6e 6c 65 73 73 20 28 66 69 6c 65    2d 65 78 69 73 74 73 2d 70 20 64 69 72 29 20 28  | ...(unless.(file-exists-p.dir).( | 
| 1a220 |  6d 6b 64 69 72 20 64 69 72 20 27 63 72 65 61 74    65 2d 70 61 72 65 6e 74 73 29 29 0a 20 20 20 20  | mkdir.dir.'create-parents))..... | 
| 1a240 |  20 20 20 20 20 20 20 20 28 69 66 20 28 75 72 6c    2d 63 6f 70 79 2d 66 69 6c 65 20 67 70 74 65 6c  | ........(if.(url-copy-file.gptel | 
| 1a260 |  2d 2d 63 72 6f 77 64 73 6f 75 72 63 65 64 2d 70    72 6f 6d 70 74 73 2d 75 72 6c 0a 20 20 20 20 20  | --crowdsourced-prompts-url...... | 
| 1a280 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 67 70 74 65 6c 2d  | ..........................gptel- | 
| 1a2a0 |  63 72 6f 77 64 73 6f 75 72 63 65 64 2d 70 72 6f    6d 70 74 73 2d 66 69 6c 65 0a 20 20 20 20 20 20  | crowdsourced-prompts-file....... | 
| 1a2c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 27 6f 6b 2d 69 66 2d  | .........................'ok-if- | 
| 1a2e0 |  61 6c 72 65 61 64 79 2d 65 78 69 73 74 73 29 0a    09 09 28 6d 65 73 73 61 67 65 20 22 46 65 74 63  | already-exists)...(message."Fetc | 
| 1a300 |  68 69 6e 67 20 70 72 6f 6d 70 74 73 2e 2e 2e 20    64 6f 6e 65 2e 22 29 0a 20 20 20 20 20 20 20 20  | hing.prompts....done.")......... | 
| 1a320 |  20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 22    43 6f 75 6c 64 20 6e 6f 74 20 72 65 74 72 69 65  | ......(message."Could.not.retrie | 
| 1a340 |  76 65 20 6e 65 77 20 70 72 6f 6d 70 74 73 2e 22    29 29 29 29 29 0a 20 20 20 20 20 20 28 69 66 20  | ve.new.prompts."))))).......(if. | 
| 1a360 |  28 6e 6f 74 20 28 66 69 6c 65 2d 72 65 61 64 61    62 6c 65 2d 70 20 67 70 74 65 6c 2d 63 72 6f 77  | (not.(file-readable-p.gptel-crow | 
| 1a380 |  64 73 6f 75 72 63 65 64 2d 70 72 6f 6d 70 74 73    2d 66 69 6c 65 29 29 0a 20 20 20 20 20 20 20 20  | dsourced-prompts-file))......... | 
| 1a3a0 |  20 20 28 70 72 6f 67 6e 20 28 6d 65 73 73 61 67    65 20 22 4e 6f 20 63 72 6f 77 64 73 6f 75 72 63  | ..(progn.(message."No.crowdsourc | 
| 1a3c0 |  65 64 20 70 72 6f 6d 70 74 73 20 61 76 61 69 6c    61 62 6c 65 22 29 0a 20 20 20 20 20 20 20 20 20  | ed.prompts.available").......... | 
| 1a3e0 |  20 20 20 20 20 20 20 20 28 63 61 6c 6c 2d 69 6e    74 65 72 61 63 74 69 76 65 6c 79 20 23 27 67 70  | ........(call-interactively.#'gp | 
| 1a400 |  74 65 6c 2d 73 79 73 74 65 6d 2d 70 72 6f 6d 70    74 29 29 0a 20 20 20 20 20 20 20 20 28 77 69 74  | tel-system-prompt)).........(wit | 
| 1a420 |  68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20    20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 2d  | h-temp-buffer...........(insert- | 
| 1a440 |  66 69 6c 65 2d 63 6f 6e 74 65 6e 74 73 20 67 70    74 65 6c 2d 63 72 6f 77 64 73 6f 75 72 63 65 64  | file-contents.gptel-crowdsourced | 
| 1a460 |  2d 70 72 6f 6d 70 74 73 2d 66 69 6c 65 29 0a 20    20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63  | -prompts-file)...........(goto-c | 
| 1a480 |  68 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29    0a 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 77  | har.(point-min))...........(forw | 
| 1a4a0 |  61 72 64 2d 6c 69 6e 65 20 31 29 0a 20 20 20 20    20 20 20 20 20 20 28 77 68 69 6c 65 20 28 6e 6f  | ard-line.1)...........(while.(no | 
| 1a4c0 |  74 20 28 65 6f 62 70 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 77 68 65 6e 2d 6c 65 74 20  | t.(eobp)).............(when-let. | 
| 1a4e0 |  28 28 61 63 74 20 28 72 65 61 64 20 28 63 75 72    72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 29 0a  | ((act.(read.(current-buffer)))). | 
| 1a500 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66    6f 72 77 61 72 64 2d 63 68 61 72 29 0a 20 20 20  | ..............(forward-char).... | 
| 1a520 |  20 20 20 20 20 20 20 20 20 20 20 28 73 61 76 65    2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20  | ...........(save-excursion...... | 
| 1a540 |  20 20 20 20 20 20 20 20 20 20 20 28 77 68 69 6c    65 20 28 72 65 2d 73 65 61 72 63 68 2d 66 6f 72  | ...........(while.(re-search-for | 
| 1a560 |  77 61 72 64 20 22 5c 22 5c 22 22 20 28 6c 69 6e    65 2d 65 6e 64 2d 70 6f 73 69 74 69 6f 6e 29 20  | ward."\"\"".(line-end-position). | 
| 1a580 |  74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 72 65 70 6c 61 63 65 2d 6d 61  | t)...................(replace-ma | 
| 1a5a0 |  74 63 68 20 22 5c 5c 5c 5c 5c 22 22 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77  | tch."\\\\\"")))...............(w | 
| 1a5c0 |  68 65 6e 2d 6c 65 74 20 28 28 70 72 6f 6d 70 74    20 28 72 65 61 64 20 28 63 75 72 72 65 6e 74 2d  | hen-let.((prompt.(read.(current- | 
| 1a5e0 |  62 75 66 66 65 72 29 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 70 75 74 68  | buffer)))).................(puth | 
| 1a600 |  61 73 68 20 61 63 74 20 70 72 6f 6d 70 74 20 67    70 74 65 6c 2d 2d 63 72 6f 77 64 73 6f 75 72 63  | ash.act.prompt.gptel--crowdsourc | 
| 1a620 |  65 64 2d 70 72 6f 6d 70 74 73 29 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 28 66 6f 72 77 61  | ed-prompts))).............(forwa | 
| 1a640 |  72 64 2d 6c 69 6e 65 20 31 29 29 29 29 29 0a 20    20 20 20 67 70 74 65 6c 2d 2d 63 72 6f 77 64 73  | rd-line.1))))).....gptel--crowds | 
| 1a660 |  6f 75 72 63 65 64 2d 70 72 6f 6d 70 74 73 29 29    0a 0a 0c 0a 3b 3b 20 2a 20 54 72 61 6e 73 69 65  | ourced-prompts))....;;.*.Transie | 
| 1a680 |  6e 74 20 63 6c 61 73 73 65 73 20 61 6e 64 20 6d    65 74 68 6f 64 73 20 66 6f 72 20 67 70 74 65 6c  | nt.classes.and.methods.for.gptel | 
| 1a6a0 |  0a 0a 28 64 65 66 63 6c 61 73 73 20 67 70 74 65    6c 2d 2d 73 77 69 74 63 68 65 73 20 28 74 72 61  | ..(defclass.gptel--switches.(tra | 
| 1a6c0 |  6e 73 69 65 6e 74 2d 6c 69 73 70 2d 76 61 72 69    61 62 6c 65 29 0a 20 20 28 28 64 69 73 70 6c 61  | nsient-lisp-variable)...((displa | 
| 1a6e0 |  79 2d 69 66 2d 74 72 75 65 20 3a 69 6e 69 74 61    72 67 20 3a 64 69 73 70 6c 61 79 2d 69 66 2d 74  | y-if-true.:initarg.:display-if-t | 
| 1a700 |  72 75 65 20 3a 69 6e 69 74 66 6f 72 6d 20 22 66    6f 72 20 74 68 69 73 20 62 75 66 66 65 72 22 29  | rue.:initform."for.this.buffer") | 
| 1a720 |  0a 20 20 20 28 64 69 73 70 6c 61 79 2d 69 66 2d    66 61 6c 73 65 20 3a 69 6e 69 74 61 72 67 20 3a  | ....(display-if-false.:initarg.: | 
| 1a740 |  64 69 73 70 6c 61 79 2d 69 66 2d 66 61 6c 73 65    20 3a 69 6e 69 74 66 6f 72 6d 20 22 67 6c 6f 62  | display-if-false.:initform."glob | 
| 1a760 |  61 6c 6c 79 22 29 29 0a 20 20 22 42 6f 6f 6c 65    61 6e 20 6c 69 73 70 20 76 61 72 69 61 62 6c 65  | ally"))..."Boolean.lisp.variable | 
| 1a780 |  20 63 6c 61 73 73 20 66 6f 72 20 67 70 74 65 6c    2d 74 72 61 6e 73 69 65 6e 74 2e 22 29 0a 0a 28  | .class.for.gptel-transient.")..( | 
| 1a7a0 |  63 6c 2d 64 65 66 6d 65 74 68 6f 64 20 74 72 61    6e 73 69 65 6e 74 2d 69 6e 66 69 78 2d 72 65 61  | cl-defmethod.transient-infix-rea | 
| 1a7c0 |  64 20 28 28 6f 62 6a 20 67 70 74 65 6c 2d 2d 73    77 69 74 63 68 65 73 29 29 0a 20 20 22 43 79 63  | d.((obj.gptel--switches))..."Cyc | 
| 1a7e0 |  6c 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 6d    75 74 75 61 6c 6c 79 20 65 78 63 6c 75 73 69 76  | le.through.the.mutually.exclusiv | 
| 1a800 |  65 20 73 77 69 74 63 68 65 73 2e 22 0a 20 20 28    6e 6f 74 20 28 6f 72 65 66 20 6f 62 6a 20 76 61  | e.switches."...(not.(oref.obj.va | 
| 1a820 |  6c 75 65 29 29 29 0a 0a 28 63 6c 2d 64 65 66 6d    65 74 68 6f 64 20 74 72 61 6e 73 69 65 6e 74 2d  | lue)))..(cl-defmethod.transient- | 
| 1a840 |  66 6f 72 6d 61 74 2d 76 61 6c 75 65 20 28 28 6f    62 6a 20 67 70 74 65 6c 2d 2d 73 77 69 74 63 68  | format-value.((obj.gptel--switch | 
| 1a860 |  65 73 29 29 0a 20 20 28 77 69 74 68 2d 73 6c 6f    74 73 20 28 76 61 6c 75 65 20 64 69 73 70 6c 61  | es))...(with-slots.(value.displa | 
| 1a880 |  79 2d 69 66 2d 74 72 75 65 20 64 69 73 70 6c 61    79 2d 69 66 2d 66 61 6c 73 65 29 20 6f 62 6a 0a  | y-if-true.display-if-false).obj. | 
| 1a8a0 |  20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20    20 20 20 20 20 28 70 72 6f 70 65 72 74 69 7a 65  | ......(format........(propertize | 
| 1a8c0 |  20 22 28 25 73 29 22 20 27 66 61 63 65 20 27 74    72 61 6e 73 69 65 6e 74 2d 64 65 6c 69 6d 69 74  | ."(%s)".'face.'transient-delimit | 
| 1a8e0 |  65 72 29 0a 20 20 20 20 20 20 20 28 63 6f 6e 63    61 74 0a 20 20 20 20 20 20 20 20 28 70 72 6f 70  | er)........(concat.........(prop | 
| 1a900 |  65 72 74 69 7a 65 20 64 69 73 70 6c 61 79 2d 69    66 2d 66 61 6c 73 65 0a 20 20 20 20 20 20 20 20  | ertize.display-if-false......... | 
| 1a920 |  20 20 20 20 20 20 20 20 20 20 20 20 27 66 61 63    65 20 28 69 66 20 76 61 6c 75 65 20 27 74 72 61  | ............'face.(if.value.'tra | 
| 1a940 |  6e 73 69 65 6e 74 2d 69 6e 61 63 74 69 76 65 2d    76 61 6c 75 65 20 27 74 72 61 6e 73 69 65 6e 74  | nsient-inactive-value.'transient | 
| 1a960 |  2d 76 61 6c 75 65 29 29 0a 20 20 20 20 20 20 20    20 28 70 72 6f 70 65 72 74 69 7a 65 20 22 7c 22  | -value)).........(propertize."|" | 
| 1a980 |  20 27 66 61 63 65 20 27 74 72 61 6e 73 69 65 6e    74 2d 64 65 6c 69 6d 69 74 65 72 29 0a 20 20 20  | .'face.'transient-delimiter).... | 
| 1a9a0 |  20 20 20 20 20 28 70 72 6f 70 65 72 74 69 7a 65    20 64 69 73 70 6c 61 79 2d 69 66 2d 74 72 75 65  | .....(propertize.display-if-true | 
| 1a9c0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 27 66 61 63 65 20 28 69 66 20 76  | .....................'face.(if.v | 
| 1a9e0 |  61 6c 75 65 20 27 74 72 61 6e 73 69 65 6e 74 2d    76 61 6c 75 65 20 27 74 72 61 6e 73 69 65 6e 74  | alue.'transient-value.'transient | 
| 1aa00 |  2d 69 6e 61 63 74 69 76 65 2d 76 61 6c 75 65 29    29 29 29 29 29 0a 0a 28 64 65 66 63 6c 61 73 73  | -inactive-value))))))..(defclass | 
| 1aa20 |  20 67 70 74 65 6c 2d 6c 69 73 70 2d 76 61 72 69    61 62 6c 65 20 28 74 72 61 6e 73 69 65 6e 74 2d  | .gptel-lisp-variable.(transient- | 
| 1aa40 |  6c 69 73 70 2d 76 61 72 69 61 62 6c 65 29 0a 20    20 28 28 64 69 73 70 6c 61 79 2d 6e 69 6c 20 3a  | lisp-variable)...((display-nil.: | 
| 1aa60 |  69 6e 69 74 61 72 67 20 3a 64 69 73 70 6c 61 79    2d 6e 69 6c 29 29 0a 20 20 22 4c 69 73 70 20 76  | initarg.:display-nil))..."Lisp.v | 
| 1aa80 |  61 72 69 61 62 6c 65 73 20 74 68 61 74 20 73 68    6f 77 20 3a 64 69 73 70 6c 61 79 2d 6e 69 6c 20  | ariables.that.show.:display-nil. | 
| 1aaa0 |  69 6e 73 74 65 61 64 20 6f 66 20 6e 69 6c 2e 22    29 0a 0a 28 63 6c 2d 64 65 66 6d 65 74 68 6f 64  | instead.of.nil.")..(cl-defmethod | 
| 1aac0 |  20 74 72 61 6e 73 69 65 6e 74 2d 66 6f 72 6d 61    74 2d 76 61 6c 75 65 0a 20 20 28 28 6f 62 6a 20  | .transient-format-value...((obj. | 
| 1aae0 |  67 70 74 65 6c 2d 6c 69 73 70 2d 76 61 72 69 61    62 6c 65 29 29 0a 20 20 28 70 72 6f 70 65 72 74  | gptel-lisp-variable))...(propert | 
| 1ab00 |  69 7a 65 20 28 70 72 69 6e 31 2d 74 6f 2d 73 74    72 69 6e 67 20 28 6f 72 20 28 6f 72 65 66 20 6f  | ize.(prin1-to-string.(or.(oref.o | 
| 1ab20 |  62 6a 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | bj.value)....................... | 
| 1ab40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 72    65 66 20 6f 62 6a 20 64 69 73 70 6c 61 79 2d 6e  | .............(oref.obj.display-n | 
| 1ab60 |  69 6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 27 66 61 63 65 20 27 74 72 61 6e 73  | il)))...............'face.'trans | 
| 1ab80 |  69 65 6e 74 2d 76 61 6c 75 65 29 29 0a 0a 28 63    6c 2d 64 65 66 6d 65 74 68 6f 64 20 74 72 61 6e  | ient-value))..(cl-defmethod.tran | 
| 1aba0 |  73 69 65 6e 74 2d 69 6e 66 69 78 2d 73 65 74 20    28 28 6f 62 6a 20 67 70 74 65 6c 2d 6c 69 73 70  | sient-infix-set.((obj.gptel-lisp | 
| 1abc0 |  2d 76 61 72 69 61 62 6c 65 29 20 76 61 6c 75 65    29 0a 20 20 28 66 75 6e 63 61 6c 6c 20 28 6f 72  | -variable).value)...(funcall.(or | 
| 1abe0 |  65 66 20 6f 62 6a 20 73 65 74 2d 76 61 6c 75 65    29 0a 20 20 20 20 20 20 20 20 20 20 20 28 6f 72  | ef.obj.set-value)............(or | 
| 1ac00 |  65 66 20 6f 62 6a 20 76 61 72 69 61 62 6c 65 29    0a 20 20 20 20 20 20 20 20 20 20 20 28 6f 73 65  | ef.obj.variable)............(ose | 
| 1ac20 |  74 20 6f 62 6a 20 76 61 6c 75 65 20 76 61 6c 75    65 29 0a 20 20 20 20 20 20 20 20 20 20 20 67 70  | t.obj.value.value)............gp | 
| 1ac40 |  74 65 6c 2d 2d 73 65 74 2d 62 75 66 66 65 72 2d    6c 6f 63 61 6c 6c 79 29 29 0a 0a 28 64 65 66 63  | tel--set-buffer-locally))..(defc | 
| 1ac60 |  6c 61 73 73 20 67 70 74 65 6c 2d 70 72 6f 76 69    64 65 72 2d 76 61 72 69 61 62 6c 65 20 28 74 72  | lass.gptel-provider-variable.(tr | 
| 1ac80 |  61 6e 73 69 65 6e 74 2d 6c 69 73 70 2d 76 61 72    69 61 62 6c 65 29 0a 20 20 28 28 6d 6f 64 65 6c  | ansient-lisp-variable)...((model | 
| 1aca0 |  20 20 20 20 20 20 20 3a 69 6e 69 74 61 72 67 20    3a 6d 6f 64 65 6c 29 0a 20 20 20 28 6d 6f 64 65  | .......:initarg.:model)....(mode | 
| 1acc0 |  6c 2d 76 61 6c 75 65 20 3a 69 6e 69 74 61 72 67    20 3a 6d 6f 64 65 6c 2d 76 61 6c 75 65 29 0a 20  | l-value.:initarg.:model-value).. | 
| 1ace0 |  20 20 28 61 6c 77 61 79 73 2d 72 65 61 64 20 3a    69 6e 69 74 66 6f 72 6d 20 74 29 0a 20 20 20 28  | ..(always-read.:initform.t)....( | 
| 1ad00 |  73 65 74 2d 76 61 6c 75 65 20 3a 69 6e 69 74 61    72 67 20 3a 73 65 74 2d 76 61 6c 75 65 20 3a 69  | set-value.:initarg.:set-value.:i | 
| 1ad20 |  6e 69 74 66 6f 72 6d 20 23 27 73 65 74 29 29 0a    20 20 22 43 6c 61 73 73 20 75 73 65 64 20 66 6f  | nitform.#'set))..."Class.used.fo | 
| 1ad40 |  72 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 73    2e 22 29 0a 0a 28 63 6c 2d 64 65 66 6d 65 74 68  | r.gptel-backends.")..(cl-defmeth | 
| 1ad60 |  6f 64 20 74 72 61 6e 73 69 65 6e 74 2d 66 6f 72    6d 61 74 2d 76 61 6c 75 65 20 28 28 6f 62 6a 20  | od.transient-format-value.((obj. | 
| 1ad80 |  67 70 74 65 6c 2d 70 72 6f 76 69 64 65 72 2d 76    61 72 69 61 62 6c 65 29 29 0a 20 20 28 70 72 6f  | gptel-provider-variable))...(pro | 
| 1ada0 |  70 65 72 74 69 7a 65 20 28 63 6f 6e 63 61 74 20    28 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 2d 6e  | pertize.(concat.(gptel-backend-n | 
| 1adc0 |  61 6d 65 20 28 6f 72 65 66 20 6f 62 6a 20 76 61    6c 75 65 29 29 20 22 3a 22 0a 20 20 20 20 20 20  | ame.(oref.obj.value)).":"....... | 
| 1ade0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 62 75 66 66 65 72 2d 6c 6f 63 61 6c 2d 76 61  | ................(buffer-local-va | 
| 1ae00 |  6c 75 65 20 28 6f 72 65 66 20 6f 62 6a 20 6d 6f    64 65 6c 29 20 74 72 61 6e 73 69 65 6e 74 2d 2d  | lue.(oref.obj.model).transient-- | 
| 1ae20 |  6f 72 69 67 69 6e 61 6c 2d 62 75 66 66 65 72 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | original-buffer))............... | 
| 1ae40 |  27 66 61 63 65 20 27 74 72 61 6e 73 69 65 6e 74    2d 76 61 6c 75 65 29 29 0a 0a 28 63 6c 2d 64 65  | 'face.'transient-value))..(cl-de | 
| 1ae60 |  66 6d 65 74 68 6f 64 20 74 72 61 6e 73 69 65 6e    74 2d 69 6e 66 69 78 2d 73 65 74 20 28 28 6f 62  | fmethod.transient-infix-set.((ob | 
| 1ae80 |  6a 20 67 70 74 65 6c 2d 70 72 6f 76 69 64 65 72    2d 76 61 72 69 61 62 6c 65 29 20 76 61 6c 75 65  | j.gptel-provider-variable).value | 
| 1aea0 |  29 0a 20 20 28 70 63 61 73 65 2d 6c 65 74 20 28    28 60 28 2c 62 61 63 6b 65 6e 64 2d 76 61 6c 75  | )...(pcase-let.((`(,backend-valu | 
| 1aec0 |  65 20 2c 6d 6f 64 65 6c 2d 76 61 6c 75 65 29 20    76 61 6c 75 65 29 29 0a 20 20 20 20 28 66 75 6e  | e.,model-value).value)).....(fun | 
| 1aee0 |  63 61 6c 6c 20 28 6f 72 65 66 20 6f 62 6a 20 73    65 74 2d 76 61 6c 75 65 29 0a 20 20 20 20 20 20  | call.(oref.obj.set-value)....... | 
| 1af00 |  20 20 20 20 20 20 20 28 6f 72 65 66 20 6f 62 6a    20 76 61 72 69 61 62 6c 65 29 0a 20 20 20 20 20  | .......(oref.obj.variable)...... | 
| 1af20 |  20 20 20 20 20 20 20 20 28 6f 73 65 74 20 6f 62    6a 20 76 61 6c 75 65 20 62 61 63 6b 65 6e 64 2d  | ........(oset.obj.value.backend- | 
| 1af40 |  76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 67 70 74 65 6c 2d 2d 73 65 74 2d 62  | value)..............gptel--set-b | 
| 1af60 |  75 66 66 65 72 2d 6c 6f 63 61 6c 6c 79 29 0a 20    20 20 20 28 66 75 6e 63 61 6c 6c 20 28 6f 72 65  | uffer-locally).....(funcall.(ore | 
| 1af80 |  66 20 6f 62 6a 20 73 65 74 2d 76 61 6c 75 65 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f  | f.obj.set-value)..............(o | 
| 1afa0 |  72 65 66 20 6f 62 6a 20 6d 6f 64 65 6c 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6f 73 65  | ref.obj.model)..............(ose | 
| 1afc0 |  74 20 6f 62 6a 20 6d 6f 64 65 6c 2d 76 61 6c 75    65 20 6d 6f 64 65 6c 2d 76 61 6c 75 65 29 0a 20  | t.obj.model-value.model-value).. | 
| 1afe0 |  20 20 20 20 20 20 20 20 20 20 20 20 67 70 74 65    6c 2d 2d 73 65 74 2d 62 75 66 66 65 72 2d 6c 6f  | ............gptel--set-buffer-lo | 
| 1b000 |  63 61 6c 6c 79 29 29 29 0a 0a 28 64 65 66 63 6c    61 73 73 20 67 70 74 65 6c 2d 6f 70 74 69 6f 6e  | cally)))..(defclass.gptel-option | 
| 1b020 |  2d 6f 76 65 72 6c 61 69 64 20 28 74 72 61 6e 73    69 65 6e 74 2d 6f 70 74 69 6f 6e 29 0a 20 20 28  | -overlaid.(transient-option)...( | 
| 1b040 |  28 64 69 73 70 6c 61 79 2d 6e 69 6c 20 3a 69 6e    69 74 61 72 67 20 3a 64 69 73 70 6c 61 79 2d 6e  | (display-nil.:initarg.:display-n | 
| 1b060 |  69 6c 29 0a 20 20 20 28 6f 76 65 72 6c 61 79 20    3a 69 6e 69 74 61 72 67 20 3a 6f 76 65 72 6c 61  | il)....(overlay.:initarg.:overla | 
| 1b080 |  79 29 29 0a 20 20 22 54 72 61 6e 73 69 65 6e 74    20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 6f 76 65  | y))..."Transient.options.for.ove | 
| 1b0a0 |  72 6c 61 79 73 20 64 69 73 70 6c 61 79 65 64 20    69 6e 20 74 68 65 20 77 6f 72 6b 69 6e 67 20 62  | rlays.displayed.in.the.working.b | 
| 1b0c0 |  75 66 66 65 72 2e 22 29 0a 0a 28 63 6c 2d 64 65    66 6d 65 74 68 6f 64 20 74 72 61 6e 73 69 65 6e  | uffer.")..(cl-defmethod.transien | 
| 1b0e0 |  74 2d 66 6f 72 6d 61 74 2d 76 61 6c 75 65 20 28    28 6f 62 6a 20 67 70 74 65 6c 2d 6f 70 74 69 6f  | t-format-value.((obj.gptel-optio | 
| 1b100 |  6e 2d 6f 76 65 72 6c 61 69 64 29 29 0a 20 20 22    73 65 74 20 75 70 20 74 68 65 20 69 6e 2d 62 75  | n-overlaid))..."set.up.the.in-bu | 
| 1b120 |  66 66 65 72 20 6f 76 65 72 6c 61 79 20 66 6f 72    20 61 64 64 69 74 69 6f 6e 61 6c 20 64 69 72 65  | ffer.overlay.for.additional.dire | 
| 1b140 |  63 74 69 76 65 2c 20 61 20 73 74 72 69 6e 67 2e    0a 0a 41 6c 73 6f 20 66 6f 72 6d 61 74 20 69 74  | ctive,.a.string...Also.format.it | 
| 1b160 |  73 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 54    72 61 6e 73 69 65 6e 74 20 6d 65 6e 75 2e 22 0a  | s.value.in.the.Transient.menu.". | 
| 1b180 |  20 20 28 6c 65 74 20 28 28 76 61 6c 75 65 20 28    6f 72 65 66 20 6f 62 6a 20 76 61 6c 75 65 29 29  | ..(let.((value.(oref.obj.value)) | 
| 1b1a0 |  0a 20 20 20 20 20 20 20 20 28 6f 76 20 20 20 20    28 6f 72 65 66 20 6f 62 6a 20 6f 76 65 72 6c 61  | .........(ov....(oref.obj.overla | 
| 1b1c0 |  79 29 29 0a 20 20 20 20 20 20 20 20 28 61 72 67    75 6d 65 6e 74 20 28 6f 72 65 66 20 6f 62 6a 20  | y)).........(argument.(oref.obj. | 
| 1b1e0 |  61 72 67 75 6d 65 6e 74 29 29 29 0a 20 20 20 20    3b 3b 20 4d 61 6b 69 6e 67 20 61 6e 20 6f 76 65  | argument))).....;;.Making.an.ove | 
| 1b200 |  72 6c 61 79 0a 20 20 20 20 28 69 66 20 28 6f 72    20 28 6e 6f 74 20 76 61 6c 75 65 29 20 28 73 74  | rlay.....(if.(or.(not.value).(st | 
| 1b220 |  72 69 6e 67 2d 65 6d 70 74 79 2d 70 20 76 61 6c    75 65 29 29 0a 20 20 20 20 20 20 20 20 28 77 68  | ring-empty-p.value)).........(wh | 
| 1b240 |  65 6e 20 6f 76 20 28 64 65 6c 65 74 65 2d 6f 76    65 72 6c 61 79 20 6f 76 29 29 0a 20 20 20 20 20  | en.ov.(delete-overlay.ov))...... | 
| 1b260 |  20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62    75 66 66 65 72 20 74 72 61 6e 73 69 65 6e 74 2d  | .(with-current-buffer.transient- | 
| 1b280 |  2d 6f 72 69 67 69 6e 61 6c 2d 62 75 66 66 65 72    0a 20 20 20 20 20 20 20 20 28 6f 73 65 74 20 6f  | -original-buffer.........(oset.o | 
| 1b2a0 |  62 6a 20 6f 76 65 72 6c 61 79 20 28 67 70 74 65    6c 2d 2d 69 6e 73 74 72 75 63 74 69 6f 6e 73 2d  | bj.overlay.(gptel--instructions- | 
| 1b2c0 |  6d 61 6b 65 2d 6f 76 65 72 6c 61 79 20 76 61 6c    75 65 20 6f 76 29 29 29 0a 20 20 20 20 20 20 28  | make-overlay.value.ov))).......( | 
| 1b2e0 |  6c 65 74 72 65 63 20 28 28 6f 76 2d 63 6c 65 61    72 2d 68 6f 6f 6b 0a 20 20 20 20 20 20 20 20 20  | letrec.((ov-clear-hook.......... | 
| 1b300 |  20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28    29 20 28 77 68 65 6e 2d 6c 65 74 2a 20 28 28 6f  | .......(lambda.().(when-let*.((o | 
| 1b320 |  76 20 28 6f 72 65 66 20 6f 62 6a 20 6f 76 65 72    6c 61 79 29 29 0a 20 20 20 20 20 20 20 20 20 20  | v.(oref.obj.overlay))........... | 
| 1b340 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 28 6f 76 65 72 6c 61  | ........................((overla | 
| 1b360 |  79 70 20 6f 76 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | yp.ov)))........................ | 
| 1b380 |  20 28 72 65 6d 6f 76 65 2d 68 6f 6f 6b 20 27 74    72 61 6e 73 69 65 6e 74 2d 65 78 69 74 2d 68 6f  | .(remove-hook.'transient-exit-ho | 
| 1b3a0 |  6f 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ok.............................. | 
| 1b3c0 |  20 20 20 20 20 20 20 20 6f 76 2d 63 6c 65 61 72    2d 68 6f 6f 6b 29 0a 20 20 20 20 20 20 20 20 20  | ........ov-clear-hook).......... | 
| 1b3e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    64 65 6c 65 74 65 2d 6f 76 65 72 6c 61 79 20 6f  | ...............(delete-overlay.o | 
| 1b400 |  76 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 28    61 64 64 2d 68 6f 6f 6b 20 27 74 72 61 6e 73 69  | v))))).........(add-hook.'transi | 
| 1b420 |  65 6e 74 2d 65 78 69 74 2d 68 6f 6f 6b 20 6f 76    2d 63 6c 65 61 72 2d 68 6f 6f 6b 29 29 29 0a 20  | ent-exit-hook.ov-clear-hook))).. | 
| 1b440 |  20 20 20 3b 3b 20 55 70 64 61 74 69 6e 67 20 74    72 61 6e 73 69 65 6e 74 20 6d 65 6e 75 20 64 69  | ...;;.Updating.transient.menu.di | 
| 1b460 |  73 70 6c 61 79 0a 20 20 20 20 28 69 66 20 76 61    6c 75 65 0a 20 20 20 20 20 20 20 20 28 70 72 6f  | splay.....(if.value.........(pro | 
| 1b480 |  70 65 72 74 69 7a 65 20 28 63 6f 6e 63 61 74 20    61 72 67 75 6d 65 6e 74 20 28 74 72 75 6e 63 61  | pertize.(concat.argument.(trunca | 
| 1b4a0 |  74 65 2d 73 74 72 69 6e 67 2d 74 6f 2d 77 69 64    74 68 20 76 61 6c 75 65 20 32 35 20 6e 69 6c 20  | te-string-to-width.value.25.nil. | 
| 1b4c0 |  6e 69 6c 20 22 2e 2e 2e 22 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | nil."..."))..................... | 
| 1b4e0 |  27 66 61 63 65 20 27 74 72 61 6e 73 69 65 6e 74    2d 76 61 6c 75 65 29 0a 20 20 20 20 20 20 28 70  | 'face.'transient-value).......(p | 
| 1b500 |  72 6f 70 65 72 74 69 7a 65 0a 20 20 20 20 20 20    20 28 63 6f 6e 63 61 74 20 22 28 22 20 28 73 79  | ropertize........(concat."(".(sy | 
| 1b520 |  6d 62 6f 6c 2d 6e 61 6d 65 20 28 6f 72 65 66 20    6f 62 6a 20 64 69 73 70 6c 61 79 2d 6e 69 6c 29  | mbol-name.(oref.obj.display-nil) | 
| 1b540 |  29 20 22 29 22 29 0a 20 20 20 20 20 20 20 27 66    61 63 65 20 27 74 72 61 6e 73 69 65 6e 74 2d 69  | ).")")........'face.'transient-i | 
| 1b560 |  6e 61 63 74 69 76 65 2d 76 61 6c 75 65 29 29 29    29 0a 0a 0c 0a 3b 3b 20 2a 20 54 72 61 6e 73 69  | nactive-value))))....;;.*.Transi | 
| 1b580 |  65 6e 74 20 50 72 65 66 69 78 65 73 0a 0a 28 64    65 66 69 6e 65 2d 6f 62 73 6f 6c 65 74 65 2d 66  | ent.Prefixes..(define-obsolete-f | 
| 1b5a0 |  75 6e 63 74 69 6f 6e 2d 61 6c 69 61 73 20 27 67    70 74 65 6c 2d 73 65 6e 64 2d 6d 65 6e 75 20 27  | unction-alias.'gptel-send-menu.' | 
| 1b5c0 |  67 70 74 65 6c 2d 6d 65 6e 75 20 22 30 2e 33 2e    32 22 29 0a 0a 3b 3b 20 42 55 47 3a 20 54 68 65  | gptel-menu."0.3.2")..;;.BUG:.The | 
| 1b5e0 |  20 60 3a 69 6e 63 6f 6d 70 61 74 69 62 6c 65 27    20 73 70 65 63 20 64 6f 65 73 6e 27 74 20 77 6f  | .`:incompatible'.spec.doesn't.wo | 
| 1b600 |  72 6b 20 69 66 20 74 68 65 72 65 27 73 20 61 20    60 3a 64 65 73 63 72 69 70 74 69 6f 6e 27 20 62  | rk.if.there's.a.`:description'.b | 
| 1b620 |  65 6c 6f 77 20 69 74 2e 0a 3b 3b 3b 23 23 23 61    75 74 6f 6c 6f 61 64 20 28 61 75 74 6f 6c 6f 61  | elow.it..;;;###autoload.(autoloa | 
| 1b640 |  64 20 27 67 70 74 65 6c 2d 6d 65 6e 75 20 22 67    70 74 65 6c 2d 74 72 61 6e 73 69 65 6e 74 22 20  | d.'gptel-menu."gptel-transient". | 
| 1b660 |  6e 69 6c 20 74 29 0a 28 74 72 61 6e 73 69 65 6e    74 2d 64 65 66 69 6e 65 2d 70 72 65 66 69 78 20  | nil.t).(transient-define-prefix. | 
| 1b680 |  67 70 74 65 6c 2d 6d 65 6e 75 20 28 29 0a 20 20    22 43 68 61 6e 67 65 20 70 61 72 61 6d 65 74 65  | gptel-menu.()..."Change.paramete | 
| 1b6a0 |  72 73 20 6f 66 20 70 72 6f 6d 70 74 20 74 6f 20    73 65 6e 64 20 74 6f 20 74 68 65 20 4c 4c 4d 2e  | rs.of.prompt.to.send.to.the.LLM. | 
| 1b6c0 |  22 0a 20 20 3b 3b 20 3a 69 6e 63 6f 6d 70 61 74    69 62 6c 65 20 27 28 28 22 2d 6d 22 20 22 2d 6e  | "...;;.:incompatible.'(("-m"."-n | 
| 1b6e0 |  22 20 22 2d 6b 22 20 22 2d 65 22 29 29 0a 20 20    5b 3a 64 65 73 63 72 69 70 74 69 6f 6e 0a 20 20  | "."-k"."-e"))...[:description... | 
| 1b700 |  20 28 6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20    20 28 73 74 72 69 6e 67 2d 72 65 70 6c 61 63 65  | .(lambda.()......(string-replace | 
| 1b720 |  0a 20 20 20 20 20 20 22 5c 6e 22 20 22 e2 ae 90    20 22 0a 20 20 20 20 20 20 28 74 72 75 6e 63 61  | ......."\n"."....".......(trunca | 
| 1b740 |  74 65 2d 73 74 72 69 6e 67 2d 74 6f 2d 77 69 64    74 68 0a 20 20 20 20 20 20 20 67 70 74 65 6c 2d  | te-string-to-width........gptel- | 
| 1b760 |  2d 73 79 73 74 65 6d 2d 6d 65 73 73 61 67 65 20    28 6d 61 78 20 28 2d 20 28 77 69 6e 64 6f 77 2d  | -system-message.(max.(-.(window- | 
| 1b780 |  77 69 64 74 68 29 20 31 32 29 20 31 34 29 20 6e    69 6c 20 6e 69 6c 20 74 29 29 29 0a 20 20 20 5b  | width).12).14).nil.nil.t)))....[ | 
| 1b7a0 |  22 22 0a 20 20 20 20 22 49 6e 73 74 72 75 63 74    69 6f 6e 73 22 0a 20 20 20 20 28 22 73 22 20 22  | ""....."Instructions".....("s"." | 
| 1b7c0 |  53 65 74 20 73 79 73 74 65 6d 20 6d 65 73 73 61    67 65 22 20 67 70 74 65 6c 2d 73 79 73 74 65 6d  | Set.system.message".gptel-system | 
| 1b7e0 |  2d 70 72 6f 6d 70 74 20 3a 74 72 61 6e 73 69 65    6e 74 20 74 29 0a 20 20 20 20 28 67 70 74 65 6c  | -prompt.:transient.t).....(gptel | 
| 1b800 |  2d 2d 69 6e 66 69 78 2d 61 64 64 2d 64 69 72 65    63 74 69 76 65 29 5d 5d 0a 20 20 5b 5b 22 4d 6f  | --infix-add-directive)]]...[["Mo | 
| 1b820 |  64 65 6c 20 50 61 72 61 6d 65 74 65 72 73 22 0a    20 20 20 20 3a 70 61 64 2d 6b 65 79 73 20 74 0a  | del.Parameters".....:pad-keys.t. | 
| 1b840 |  20 20 20 20 28 67 70 74 65 6c 2d 2d 69 6e 66 69    78 2d 76 61 72 69 61 62 6c 65 2d 73 63 6f 70 65  | ....(gptel--infix-variable-scope | 
| 1b860 |  29 0a 20 20 20 20 28 67 70 74 65 6c 2d 2d 69 6e    66 69 78 2d 70 72 6f 76 69 64 65 72 29 0a 20 20  | ).....(gptel--infix-provider)... | 
| 1b880 |  20 20 28 67 70 74 65 6c 2d 2d 69 6e 66 69 78 2d    6d 61 78 2d 74 6f 6b 65 6e 73 29 0a 20 20 20 20  | ..(gptel--infix-max-tokens)..... | 
| 1b8a0 |  28 67 70 74 65 6c 2d 2d 69 6e 66 69 78 2d 6e 75    6d 2d 6d 65 73 73 61 67 65 73 2d 74 6f 2d 73 65  | (gptel--infix-num-messages-to-se | 
| 1b8c0 |  6e 64 29 0a 20 20 20 20 28 67 70 74 65 6c 2d 2d    69 6e 66 69 78 2d 74 65 6d 70 65 72 61 74 75 72  | nd).....(gptel--infix-temperatur | 
| 1b8e0 |  65 20 3a 69 66 20 28 6c 61 6d 62 64 61 20 28 29    20 67 70 74 65 6c 2d 65 78 70 65 72 74 2d 63 6f  | e.:if.(lambda.().gptel-expert-co | 
| 1b900 |  6d 6d 61 6e 64 73 29 29 5d 0a 20 20 20 5b 22 50    72 6f 6d 70 74 20 66 72 6f 6d 22 0a 20 20 20 20  | mmands))]....["Prompt.from"..... | 
| 1b920 |  28 22 6d 22 20 22 4d 69 6e 69 62 75 66 66 65 72    20 69 6e 73 74 65 61 64 22 20 22 6d 22 29 0a 20  | ("m"."Minibuffer.instead"."m").. | 
| 1b940 |  20 20 20 28 22 79 22 20 22 4b 69 6c 6c 2d 72 69    6e 67 20 69 6e 73 74 65 61 64 22 20 22 79 22 29  | ...("y"."Kill-ring.instead"."y") | 
| 1b960 |  0a 20 20 20 20 22 22 0a 20 20 20 20 28 22 69 22    20 22 52 65 73 70 6f 6e 64 20 69 6e 20 70 6c 61  | ....."".....("i"."Respond.in.pla | 
| 1b980 |  63 65 22 20 22 69 22 29 5d 0a 20 20 20 20 5b 22    52 65 73 70 6f 6e 73 65 20 74 6f 22 0a 20 20 20  | ce"."i")].....["Response.to".... | 
| 1b9a0 |  20 28 22 65 22 20 22 45 63 68 6f 20 61 72 65 61    20 69 6e 73 74 65 61 64 22 20 22 65 22 29 0a 20  | .("e"."Echo.area.instead"."e").. | 
| 1b9c0 |  20 20 20 28 22 67 22 20 22 67 70 74 65 6c 20 73    65 73 73 69 6f 6e 22 20 22 67 22 0a 20 20 20 20  | ...("g"."gptel.session"."g"..... | 
| 1b9e0 |  20 3a 63 6c 61 73 73 20 74 72 61 6e 73 69 65 6e    74 2d 6f 70 74 69 6f 6e 0a 20 20 20 20 20 3a 70  | .:class.transient-option......:p | 
| 1ba00 |  72 6f 6d 70 74 20 22 45 78 69 73 74 69 6e 67 20    6f 72 20 6e 65 77 20 67 70 74 65 6c 20 73 65 73  | rompt."Existing.or.new.gptel.ses | 
| 1ba20 |  73 69 6f 6e 3a 20 22 0a 20 20 20 20 20 3a 72 65    61 64 65 72 0a 20 20 20 20 20 28 6c 61 6d 62 64  | sion:."......:reader......(lambd | 
| 1ba40 |  61 20 28 70 72 6f 6d 70 74 20 5f 20 5f 68 69 73    74 6f 72 79 29 0a 20 20 20 20 20 20 20 28 72 65  | a.(prompt._._history)........(re | 
| 1ba60 |  61 64 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20    20 20 70 72 6f 6d 70 74 20 28 67 65 6e 65 72 61  | ad-buffer.........prompt.(genera | 
| 1ba80 |  74 65 2d 6e 65 77 2d 62 75 66 66 65 72 2d 6e 61    6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | te-new-buffer-name.............. | 
| 1baa0 |  20 20 20 28 63 6f 6e 63 61 74 20 22 2a 22 20 28    67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 2d 6e 61  | ...(concat."*".(gptel-backend-na | 
| 1bac0 |  6d 65 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64    29 20 22 2a 22 29 29 0a 20 20 20 20 20 20 20 20  | me.gptel-backend)."*"))......... | 
| 1bae0 |  6e 69 6c 20 28 6c 61 6d 62 64 61 20 28 62 75 66    2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20  | nil.(lambda.(buf-name).......... | 
| 1bb00 |  20 20 20 20 20 28 69 66 20 28 63 6f 6e 73 70 20    62 75 66 2d 6e 61 6d 65 29 20 28 73 65 74 71 20  | .....(if.(consp.buf-name).(setq. | 
| 1bb20 |  62 75 66 2d 6e 61 6d 65 20 28 63 61 72 20 62 75    66 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 20 20  | buf-name.(car.buf-name)))....... | 
| 1bb40 |  20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 62    75 66 20 28 67 65 74 2d 62 75 66 66 65 72 20 62  | ........(let.((buf.(get-buffer.b | 
| 1bb60 |  75 66 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 61 6e 64 20  | uf-name))).................(and. | 
| 1bb80 |  28 62 75 66 66 65 72 2d 6c 6f 63 61 6c 2d 76 61    6c 75 65 20 27 67 70 74 65 6c 2d 6d 6f 64 65 20  | (buffer-local-value.'gptel-mode. | 
| 1bba0 |  62 75 66 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6e 6f 74 20 28  | buf)......................(not.( | 
| 1bbc0 |  65 71 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66    65 72 29 20 62 75 66 29 29 29 29 29 29 29 29 0a  | eq.(current-buffer).buf)))))))). | 
| 1bbe0 |  20 20 20 20 28 22 62 22 20 22 41 6e 79 20 62 75    66 66 65 72 22 20 22 62 22 0a 20 20 20 20 20 3a  | ....("b"."Any.buffer"."b"......: | 
| 1bc00 |  63 6c 61 73 73 20 74 72 61 6e 73 69 65 6e 74 2d    6f 70 74 69 6f 6e 0a 20 20 20 20 20 3a 70 72 6f  | class.transient-option......:pro | 
| 1bc20 |  6d 70 74 20 22 4f 75 74 70 75 74 20 74 6f 20 62    75 66 66 65 72 3a 20 22 0a 20 20 20 20 20 3a 72  | mpt."Output.to.buffer:."......:r | 
| 1bc40 |  65 61 64 65 72 0a 20 20 20 20 20 28 6c 61 6d 62    64 61 20 28 70 72 6f 6d 70 74 20 5f 20 5f 68 69  | eader......(lambda.(prompt._._hi | 
| 1bc60 |  73 74 6f 72 79 29 0a 20 20 20 20 20 20 20 28 72    65 61 64 2d 62 75 66 66 65 72 20 70 72 6f 6d 70  | story)........(read-buffer.promp | 
| 1bc80 |  74 20 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 28    6f 74 68 65 72 2d 62 75 66 66 65 72 29 29 20 6e  | t.(buffer-name.(other-buffer)).n | 
| 1bca0 |  69 6c 29 29 29 0a 20 20 20 20 28 22 6b 22 20 22    4b 69 6c 6c 2d 72 69 6e 67 22 20 22 6b 22 29 5d  | il))).....("k"."Kill-ring"."k")] | 
| 1bcc0 |  5d 0a 20 20 5b 5b 22 53 65 6e 64 22 0a 20 20 20    20 28 67 70 74 65 6c 2d 2d 73 75 66 66 69 78 2d  | ]...[["Send".....(gptel--suffix- | 
| 1bce0 |  73 65 6e 64 29 0a 20 20 20 20 28 22 4d 2d 52 45    54 22 20 22 52 65 67 65 6e 65 72 61 74 65 22 20  | send).....("M-RET"."Regenerate". | 
| 1bd00 |  67 70 74 65 6c 2d 2d 72 65 67 65 6e 65 72 61 74    65 20 3a 69 66 20 67 70 74 65 6c 2d 2d 69 6e 2d  | gptel--regenerate.:if.gptel--in- | 
| 1bd20 |  72 65 73 70 6f 6e 73 65 2d 70 29 5d 0a 20 20 20    5b 3a 64 65 73 63 72 69 70 74 69 6f 6e 20 67 70  | response-p)]....[:description.gp | 
| 1bd40 |  74 65 6c 2d 2d 72 65 66 61 63 74 6f 72 2d 6f 72    2d 72 65 77 72 69 74 65 0a 20 20 20 20 3a 69 66  | tel--refactor-or-rewrite.....:if | 
| 1bd60 |  20 75 73 65 2d 72 65 67 69 6f 6e 2d 70 0a 20 20    20 20 28 22 72 22 0a 20 20 20 20 20 3b 3b 46 49  | .use-region-p.....("r"......;;FI | 
| 1bd80 |  58 4d 45 3a 20 54 72 61 6e 73 69 65 6e 74 20 63    6f 6d 70 6c 61 69 6e 73 20 69 66 20 49 20 75 73  | XME:.Transient.complains.if.I.us | 
| 1bda0 |  65 20 60 67 70 74 65 6c 2d 2d 72 65 66 61 63 74    6f 72 2d 6f 72 2d 72 65 77 72 69 74 65 27 20 68  | e.`gptel--refactor-or-rewrite'.h | 
| 1bdc0 |  65 72 65 2e 20 49 74 0a 20 20 20 20 20 3b 3b 72    65 61 64 73 20 74 68 69 73 20 66 75 6e 63 74 69  | ere..It......;;reads.this.functi | 
| 1bde0 |  6f 6e 20 61 73 20 61 20 73 75 66 66 69 78 20 69    6e 73 74 65 61 64 20 6f 66 20 61 20 66 75 6e 63  | on.as.a.suffix.instead.of.a.func | 
| 1be00 |  74 69 6f 6e 20 74 68 61 74 20 72 65 74 75 72 6e    73 20 74 68 65 0a 20 20 20 20 20 3b 3b 64 65 73  | tion.that.returns.the......;;des | 
| 1be20 |  63 72 69 70 74 69 6f 6e 2e 0a 20 20 20 20 20 28    6c 61 6d 62 64 61 20 28 29 20 28 69 66 20 28 64  | cription.......(lambda.().(if.(d | 
| 1be40 |  65 72 69 76 65 64 2d 6d 6f 64 65 2d 70 20 27 70    72 6f 67 2d 6d 6f 64 65 29 0a 20 20 20 20 20 20  | erived-mode-p.'prog-mode)....... | 
| 1be60 |  20 20 20 20 20 20 20 20 20 22 52 65 66 61 63 74    6f 72 22 20 22 52 65 77 72 69 74 65 22 29 29 0a  | ........."Refactor"."Rewrite")). | 
| 1be80 |  20 20 20 20 20 67 70 74 65 6c 2d 72 65 77 72 69    74 65 2d 6d 65 6e 75 29 5d 0a 20 20 20 5b 22 54  | .....gptel-rewrite-menu)]....["T | 
| 1bea0 |  77 65 61 6b 20 52 65 73 70 6f 6e 73 65 22 20 3a    69 66 20 67 70 74 65 6c 2d 2d 69 6e 2d 72 65 73  | weak.Response".:if.gptel--in-res | 
| 1bec0 |  70 6f 6e 73 65 2d 70 20 3a 70 61 64 2d 6b 65 79    73 20 74 0a 20 20 20 20 28 22 53 50 43 22 20 22  | ponse-p.:pad-keys.t.....("SPC"." | 
| 1bee0 |  4d 61 72 6b 22 20 67 70 74 65 6c 2d 2d 6d 61 72    6b 2d 72 65 73 70 6f 6e 73 65 29 0a 20 20 20 20  | Mark".gptel--mark-response)..... | 
| 1bf00 |  28 22 50 22 20 22 50 72 65 76 69 6f 75 73 20 76    61 72 69 61 6e 74 22 20 67 70 74 65 6c 2d 2d 70  | ("P"."Previous.variant".gptel--p | 
| 1bf20 |  72 65 76 69 6f 75 73 2d 76 61 72 69 61 6e 74 0a    20 20 20 20 20 3a 69 66 20 67 70 74 65 6c 2d 2d  | revious-variant......:if.gptel-- | 
| 1bf40 |  61 74 2d 72 65 73 70 6f 6e 73 65 2d 68 69 73 74    6f 72 79 2d 70 0a 20 20 20 20 20 3a 74 72 61 6e  | at-response-history-p......:tran | 
| 1bf60 |  73 69 65 6e 74 20 74 29 0a 20 20 20 20 28 22 4e    22 20 22 4e 65 78 74 20 76 61 72 69 61 6e 74 22  | sient.t).....("N"."Next.variant" | 
| 1bf80 |  20 67 70 74 65 6c 2d 2d 70 72 65 76 69 6f 75 73    2d 76 61 72 69 61 6e 74 0a 20 20 20 20 20 3a 69  | .gptel--previous-variant......:i | 
| 1bfa0 |  66 20 67 70 74 65 6c 2d 2d 61 74 2d 72 65 73 70    6f 6e 73 65 2d 68 69 73 74 6f 72 79 2d 70 0a 20  | f.gptel--at-response-history-p.. | 
| 1bfc0 |  20 20 20 20 3a 74 72 61 6e 73 69 65 6e 74 20 74    29 0a 20 20 20 20 28 22 45 22 20 22 45 64 69 66  | ....:transient.t).....("E"."Edif | 
| 1bfe0 |  66 20 70 72 65 76 69 6f 75 73 22 20 67 70 74 65    6c 2d 2d 65 64 69 66 66 0a 20 20 20 20 20 3a 69  | f.previous".gptel--ediff......:i | 
| 1c000 |  66 20 67 70 74 65 6c 2d 2d 61 74 2d 72 65 73 70    6f 6e 73 65 2d 68 69 73 74 6f 72 79 2d 70 29 5d  | f.gptel--at-response-history-p)] | 
| 1c020 |  0a 20 20 20 5b 22 44 72 79 20 52 75 6e 22 20 3a    69 66 20 28 6c 61 6d 62 64 61 20 28 29 20 28 6f  | ....["Dry.Run".:if.(lambda.().(o | 
| 1c040 |  72 20 67 70 74 65 6c 2d 6c 6f 67 2d 6c 65 76 65    6c 20 67 70 74 65 6c 2d 65 78 70 65 72 74 2d 63  | r.gptel-log-level.gptel-expert-c | 
| 1c060 |  6f 6d 6d 61 6e 64 73 29 29 0a 20 20 20 20 28 22    49 22 20 22 49 6e 73 70 65 63 74 20 71 75 65 72  | ommands)).....("I"."Inspect.quer | 
| 1c080 |  79 20 28 4c 69 73 70 29 22 0a 20 20 20 20 20 28    6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20  | y.(Lisp)"......(lambda.()....... | 
| 1c0a0 |  20 22 49 6e 73 70 65 63 74 20 74 68 65 20 71 75    65 72 79 20 74 68 61 74 20 77 69 6c 6c 20 62 65  | ."Inspect.the.query.that.will.be | 
| 1c0c0 |  20 73 65 6e 74 20 61 73 20 61 20 6c 69 73 70 20    6f 62 6a 65 63 74 2e 22 0a 20 20 20 20 20 20 20  | .sent.as.a.lisp.object."........ | 
| 1c0e0 |  28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20    20 20 20 20 20 28 67 70 74 65 6c 2d 2d 73 61 6e  | (interactive)........(gptel--san | 
| 1c100 |  69 74 69 7a 65 2d 6d 6f 64 65 6c 29 0a 20 20 20    20 20 20 20 28 67 70 74 65 6c 2d 2d 69 6e 73 70  | itize-model)........(gptel--insp | 
| 1c120 |  65 63 74 2d 71 75 65 72 79 0a 20 20 20 20 20 20    20 20 28 67 70 74 65 6c 2d 2d 73 75 66 66 69 78  | ect-query.........(gptel--suffix | 
| 1c140 |  2d 73 65 6e 64 0a 20 20 20 20 20 20 20 20 20 28    63 6f 6e 73 20 22 49 22 20 28 74 72 61 6e 73 69  | -send..........(cons."I".(transi | 
| 1c160 |  65 6e 74 2d 61 72 67 73 20 74 72 61 6e 73 69 65    6e 74 2d 63 75 72 72 65 6e 74 2d 63 6f 6d 6d 61  | ent-args.transient-current-comma | 
| 1c180 |  6e 64 29 29 29 29 29 29 0a 20 20 20 20 28 22 4a    22 20 22 49 6e 73 70 65 63 74 20 71 75 65 72 79  | nd)))))).....("J"."Inspect.query | 
| 1c1a0 |  20 28 4a 53 4f 4e 29 22 0a 20 20 20 20 20 28 6c    61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 20  | .(JSON)"......(lambda.()........ | 
| 1c1c0 |  22 49 6e 73 70 65 63 74 20 74 68 65 20 71 75 65    72 79 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  | "Inspect.the.query.that.will.be. | 
| 1c1e0 |  73 65 6e 74 20 61 73 20 61 20 4a 53 4f 4e 20 6f    62 6a 65 63 74 2e 22 0a 20 20 20 20 20 20 20 28  | sent.as.a.JSON.object."........( | 
| 1c200 |  69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 20    20 20 20 20 28 67 70 74 65 6c 2d 2d 73 61 6e 69  | interactive)........(gptel--sani | 
| 1c220 |  74 69 7a 65 2d 6d 6f 64 65 6c 29 0a 20 20 20 20    20 20 20 28 67 70 74 65 6c 2d 2d 69 6e 73 70 65  | tize-model)........(gptel--inspe | 
| 1c240 |  63 74 2d 71 75 65 72 79 0a 20 20 20 20 20 20 20    20 28 67 70 74 65 6c 2d 2d 73 75 66 66 69 78 2d  | ct-query.........(gptel--suffix- | 
| 1c260 |  73 65 6e 64 0a 20 20 20 20 20 20 20 20 20 28 63    6f 6e 73 20 22 49 22 20 28 74 72 61 6e 73 69 65  | send..........(cons."I".(transie | 
| 1c280 |  6e 74 2d 61 72 67 73 20 74 72 61 6e 73 69 65 6e    74 2d 63 75 72 72 65 6e 74 2d 63 6f 6d 6d 61 6e  | nt-args.transient-current-comman | 
| 1c2a0 |  64 29 29 29 0a 20 20 20 20 20 20 20 20 27 6a 73    6f 6e 29 29 29 5d 5d 0a 20 20 28 69 6e 74 65 72  | d))).........'json)))]]...(inter | 
| 1c2c0 |  61 63 74 69 76 65 29 0a 20 20 28 67 70 74 65 6c    2d 2d 73 61 6e 69 74 69 7a 65 2d 6d 6f 64 65 6c  | active)...(gptel--sanitize-model | 
| 1c2e0 |  29 0a 20 20 28 74 72 61 6e 73 69 65 6e 74 2d 73    65 74 75 70 20 27 67 70 74 65 6c 2d 6d 65 6e 75  | )...(transient-setup.'gptel-menu | 
| 1c300 |  29 29 0a 0a 3b 3b 20 2a 2a 20 50 72 65 66 69 78    20 66 6f 72 20 73 65 74 74 69 6e 67 20 74 68 65  | ))..;;.**.Prefix.for.setting.the | 
| 1c320 |  20 73 79 73 74 65 6d 20 70 72 6f 6d 70 74 2e 0a    28 64 65 66 75 6e 20 67 70 74 65 6c 2d 73 79 73  | .system.prompt..(defun.gptel-sys | 
| 1c340 |  74 65 6d 2d 70 72 6f 6d 70 74 2d 2d 73 65 74 75    70 20 28 5f 29 0a 20 20 22 53 65 74 20 75 70 20  | tem-prompt--setup.(_)..."Set.up. | 
| 1c360 |  73 75 66 66 69 78 65 73 20 66 6f 72 20 73 79 73    74 65 6d 20 70 72 6f 6d 70 74 2e 22 0a 20 20 28  | suffixes.for.system.prompt."...( | 
| 1c380 |  74 72 61 6e 73 69 65 6e 74 2d 70 61 72 73 65 2d    73 75 66 66 69 78 65 73 0a 20 20 20 27 67 70 74  | transient-parse-suffixes....'gpt | 
| 1c3a0 |  65 6c 2d 73 79 73 74 65 6d 2d 70 72 6f 6d 70 74    0a 20 20 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72  | el-system-prompt....(cl-loop.for | 
| 1c3c0 |  20 28 74 79 70 65 20 2e 20 70 72 6f 6d 70 74 29    20 69 6e 20 67 70 74 65 6c 2d 64 69 72 65 63 74  | .(type...prompt).in.gptel-direct | 
| 1c3e0 |  69 76 65 73 0a 20 20 20 20 20 20 20 3b 3b 20 41    76 6f 69 64 20 63 6c 61 73 68 65 73 20 77 69 74  | ives........;;.Avoid.clashes.wit | 
| 1c400 |  68 20 74 68 65 20 63 75 73 74 6f 6d 20 64 69 72    65 63 74 69 76 65 20 6b 65 79 0a 20 20 20 20 20  | h.the.custom.directive.key...... | 
| 1c420 |  20 20 77 69 74 68 20 75 6e 75 73 65 64 2d 6b 65    79 73 20 3d 20 28 64 65 6c 65 74 65 20 3f 73 20  | ..with.unused-keys.=.(delete.?s. | 
| 1c440 |  28 6e 75 6d 62 65 72 2d 73 65 71 75 65 6e 63 65    20 3f 61 20 3f 7a 29 29 0a 20 20 20 20 20 20 20  | (number-sequence.?a.?z))........ | 
| 1c460 |  77 69 74 68 20 77 69 64 74 68 20 3d 20 28 77 69    6e 64 6f 77 2d 77 69 64 74 68 29 0a 20 20 20 20  | with.width.=.(window-width)..... | 
| 1c480 |  20 20 20 66 6f 72 20 6e 61 6d 65 20 3d 20 28 73    79 6d 62 6f 6c 2d 6e 61 6d 65 20 74 79 70 65 29  | ...for.name.=.(symbol-name.type) | 
| 1c4a0 |  0a 20 20 20 20 20 20 20 66 6f 72 20 6b 65 79 20    3d 20 28 73 65 71 2d 66 69 6e 64 20 28 6c 61 6d  | ........for.key.=.(seq-find.(lam | 
| 1c4c0 |  62 64 61 20 28 6b 29 20 28 6d 65 6d 62 65 72 20    6b 20 75 6e 75 73 65 64 2d 6b 65 79 73 29 29 20  | bda.(k).(member.k.unused-keys)). | 
| 1c4e0 |  6e 61 6d 65 20 28 73 65 71 2d 66 69 72 73 74 20    75 6e 75 73 65 64 2d 6b 65 79 73 29 29 0a 20 20  | name.(seq-first.unused-keys))... | 
| 1c500 |  20 20 20 20 20 64 6f 20 28 73 65 74 71 20 75 6e    75 73 65 64 2d 6b 65 79 73 20 28 64 65 6c 65 74  | .....do.(setq.unused-keys.(delet | 
| 1c520 |  65 20 6b 65 79 20 75 6e 75 73 65 64 2d 6b 65 79    73 29 29 0a 20 20 20 20 20 20 20 3b 3b 20 54 68  | e.key.unused-keys))........;;.Th | 
| 1c540 |  65 20 65 78 70 6c 69 63 69 74 20 64 65 63 6c 61    72 61 74 69 6f 6e 20 22 3a 74 72 61 6e 73 69 65  | e.explicit.declaration.":transie | 
| 1c560 |  6e 74 20 74 72 61 6e 73 69 65 6e 74 2d 2d 64 6f    2d 72 65 74 75 72 6e 22 20 68 65 72 65 0a 20 20  | nt.transient--do-return".here... | 
| 1c580 |  20 20 20 20 20 3b 3b 20 61 70 70 65 61 72 73 20    74 6f 20 62 65 20 72 65 71 75 69 72 65 64 20 66  | .....;;.appears.to.be.required.f | 
| 1c5a0 |  6f 72 20 54 72 61 6e 73 69 65 6e 74 20 76 30 2e    35 20 61 6e 64 20 75 70 2e 20 20 57 69 74 68 6f  | or.Transient.v0.5.and.up...Witho | 
| 1c5c0 |  75 74 20 69 74 2c 20 74 68 65 73 65 0a 20 20 20    20 20 20 20 3b 3b 20 61 72 65 20 74 72 65 61 74  | ut.it,.these........;;.are.treat | 
| 1c5e0 |  65 64 20 61 73 20 73 75 66 66 69 78 65 73 20 77    68 65 6e 20 69 6e 76 6f 6b 69 6e 67 20 60 67 70  | ed.as.suffixes.when.invoking.`gp | 
| 1c600 |  74 65 6c 2d 73 79 73 74 65 6d 2d 70 72 6f 6d 70    74 27 20 64 69 72 65 63 74 6c 79 2c 0a 20 20 20  | tel-system-prompt'.directly,.... | 
| 1c620 |  20 20 20 20 3b 3b 20 61 6e 64 20 69 6e 66 69 78    65 73 20 77 68 65 6e 20 67 6f 69 6e 67 20 74 68  | ....;;.and.infixes.when.going.th | 
| 1c640 |  72 6f 75 67 68 20 60 67 70 74 65 6c 2d 6d 65 6e    75 27 2e 0a 20 20 20 20 20 20 20 3b 3b 20 54 4f  | rough.`gptel-menu'.........;;.TO | 
| 1c660 |  44 4f 3a 20 52 61 69 73 65 20 61 6e 20 69 73 73    75 65 20 77 69 74 68 20 54 72 61 6e 73 69 65 6e  | DO:.Raise.an.issue.with.Transien | 
| 1c680 |  74 2e 0a 20 20 20 20 20 20 20 63 6f 6c 6c 65 63    74 20 28 6c 69 73 74 20 28 6b 65 79 2d 64 65 73  | t.........collect.(list.(key-des | 
| 1c6a0 |  63 72 69 70 74 69 6f 6e 20 28 6c 69 73 74 20 6b    65 79 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | cription.(list.key))............ | 
| 1c6c0 |  20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61    74 20 28 63 61 70 69 74 61 6c 69 7a 65 20 6e 61  | ..........(concat.(capitalize.na | 
| 1c6e0 |  6d 65 29 20 22 20 22 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | me)."."......................... | 
| 1c700 |  20 20 20 20 20 28 70 72 6f 70 65 72 74 69 7a 65    20 22 20 22 20 27 64 69 73 70 6c 61 79 20 27 28  | .....(propertize.".".'display.'( | 
| 1c720 |  73 70 61 63 65 20 3a 61 6c 69 67 6e 2d 74 6f 20    32 30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | space.:align-to.20))............ | 
| 1c740 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 70 72 6f 70 65 72 74 69 7a 65 0a 20 20  | ..................(propertize... | 
| 1c760 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e  | ............................(con | 
| 1c780 |  63 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | cat............................. | 
| 1c7a0 |  20 20 20 22 28 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..."(".......................... | 
| 1c7c0 |  20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 72 65    70 6c 61 63 65 0a 20 20 20 20 20 20 20 20 20 20  | ......(string-replace........... | 
| 1c7e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 22 5c 6e 22 20 22 20 22 0a 20  | ......................"\n".".".. | 
| 1c800 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | ...............................( | 
| 1c820 |  74 72 75 6e 63 61 74 65 2d 73 74 72 69 6e 67 2d    74 6f 2d 77 69 64 74 68 20 70 72 6f 6d 70 74 20  | truncate-string-to-width.prompt. | 
| 1c840 |  28 2d 20 77 69 64 74 68 20 33 30 29 20 6e 69 6c    20 6e 69 6c 20 74 29 29 0a 20 20 20 20 20 20 20  | (-.width.30).nil.nil.t))........ | 
| 1c860 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 22 29 22 29 0a 20 20 20  | ........................")").... | 
| 1c880 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 27 66 61 63 65  | ...........................'face | 
| 1c8a0 |  20 27 73 68 61 64 6f 77 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .'shadow))...................... | 
| 1c8c0 |  60 28 6c 61 6d 62 64 61 20 28 29 20 28 69 6e 74    65 72 61 63 74 69 76 65 29 0a 20 20 20 20 20 20  | `(lambda.().(interactive)....... | 
| 1c8e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 6d 65 73 73 61 67 65 20 22 44 69 72 65  | ..................(message."Dire | 
| 1c900 |  63 74 69 76 65 3a 20 25 73 22 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ctive:.%s"...................... | 
| 1c920 |  20 20 20 20 2c 28 73 74 72 69 6e 67 2d 72 65 70    6c 61 63 65 20 22 5c 6e 22 20 22 e2 ae 90 20 22  | ....,(string-replace."\n"."...." | 
| 1c940 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 75  | ............................(tru | 
| 1c960 |  6e 63 61 74 65 2d 73 74 72 69 6e 67 2d 74 6f 2d    77 69 64 74 68 20 70 72 6f 6d 70 74 20 31 30 30  | ncate-string-to-width.prompt.100 | 
| 1c980 |  20 6e 69 6c 20 6e 69 6c 20 74 29 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .nil.nil.t)))................... | 
| 1c9a0 |  20 20 20 20 20 20 28 67 70 74 65 6c 2d 2d 73 65    74 2d 77 69 74 68 2d 73 63 6f 70 65 20 27 67 70  | ......(gptel--set-with-scope.'gp | 
| 1c9c0 |  74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73    61 67 65 20 2c 70 72 6f 6d 70 74 0a 20 20 20 20  | tel--system-message.,prompt..... | 
| 1c9e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 67 70 74 65 6c 2d 2d 73 65 74 2d  | .....................gptel--set- | 
| 1ca00 |  62 75 66 66 65 72 2d 6c 6f 63 61 6c 6c 79 29 29    0a 09 09 20 20 20 20 20 3a 74 72 61 6e 73 69 65  | buffer-locally))........:transie | 
| 1ca20 |  6e 74 20 27 74 72 61 6e 73 69 65 6e 74 2d 2d 64    6f 2d 72 65 74 75 72 6e 29 0a 20 20 20 20 20 20  | nt.'transient--do-return)....... | 
| 1ca40 |  20 69 6e 74 6f 20 70 72 6f 6d 70 74 2d 73 75 66    66 69 78 65 73 0a 20 20 20 20 20 20 20 66 69 6e  | .into.prompt-suffixes........fin | 
| 1ca60 |  61 6c 6c 79 20 72 65 74 75 72 6e 0a 20 20 20 20    20 20 20 28 6e 63 6f 6e 63 0a 20 20 20 20 20 20  | ally.return........(nconc....... | 
| 1ca80 |  20 20 70 72 6f 6d 70 74 2d 73 75 66 66 69 78 65    73 0a 20 20 20 20 20 20 20 20 28 6c 69 73 74 20  | ..prompt-suffixes.........(list. | 
| 1caa0 |  28 6c 69 73 74 20 22 53 50 43 22 20 22 50 69 63    6b 20 63 72 6f 77 64 73 6f 75 72 63 65 64 20 70  | (list."SPC"."Pick.crowdsourced.p | 
| 1cac0 |  72 6f 6d 70 74 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 27 67 70 74 65  | rompt".....................'gpte | 
| 1cae0 |  6c 2d 2d 72 65 61 64 2d 63 72 6f 77 64 73 6f 75    72 63 65 64 2d 70 72 6f 6d 70 74 0a 09 09 20 20  | l--read-crowdsourced-prompt..... | 
| 1cb00 |  20 20 3b 3b 20 4e 4f 54 45 3a 20 51 75 69 74 74    69 6e 67 20 74 68 65 20 63 6f 6d 70 6c 65 74 69  | ..;;.NOTE:.Quitting.the.completi | 
| 1cb20 |  6e 67 20 72 65 61 64 20 77 68 65 6e 20 70 69 63    6b 69 6e 67 20 61 0a 09 09 20 20 20 20 3b 3b 20  | ng.read.when.picking.a.......;;. | 
| 1cb40 |  63 72 6f 77 64 73 6f 75 72 63 65 64 20 70 72 6f    6d 70 74 20 77 69 6c 6c 20 63 61 75 73 65 20 74  | crowdsourced.prompt.will.cause.t | 
| 1cb60 |  68 65 20 74 72 61 6e 73 69 65 6e 74 20 74 6f 20    65 78 69 74 0a 09 09 20 20 20 20 3b 3b 20 69 6e  | he.transient.to.exit.......;;.in | 
| 1cb80 |  73 74 65 61 64 20 6f 66 20 72 65 74 75 72 6e 69    6e 67 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d  | stead.of.returning.to.the.system | 
| 1cba0 |  20 70 72 6f 6d 70 74 20 6d 65 6e 75 2e 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .prompt.menu.................... | 
| 1cbc0 |  20 20 3a 74 72 61 6e 73 69 65 6e 74 20 27 74 72    61 6e 73 69 65 6e 74 2d 2d 64 6f 2d 65 78 69 74  | ..:transient.'transient--do-exit | 
| 1cbe0 |  29 29 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75    74 6f 6c 6f 61 64 20 28 61 75 74 6f 6c 6f 61 64  | ))))))..;;;###autoload.(autoload | 
| 1cc00 |  20 27 67 70 74 65 6c 2d 73 79 73 74 65 6d 2d 70    72 6f 6d 70 74 20 22 67 70 74 65 6c 2d 74 72 61  | .'gptel-system-prompt."gptel-tra | 
| 1cc20 |  6e 73 69 65 6e 74 22 20 6e 69 6c 20 74 29 0a 28    74 72 61 6e 73 69 65 6e 74 2d 64 65 66 69 6e 65  | nsient".nil.t).(transient-define | 
| 1cc40 |  2d 70 72 65 66 69 78 20 67 70 74 65 6c 2d 73 79    73 74 65 6d 2d 70 72 6f 6d 70 74 20 28 29 0a 20  | -prefix.gptel-system-prompt.().. | 
| 1cc60 |  20 22 53 65 74 20 74 68 65 20 4c 4c 4d 20 73 79    73 74 65 6d 20 6d 65 73 73 61 67 65 20 66 6f 72  | ."Set.the.LLM.system.message.for | 
| 1cc80 |  20 4c 4c 4d 20 69 6e 74 65 72 61 63 74 69 6f 6e    73 20 69 6e 20 74 68 69 73 20 62 75 66 66 65 72  | .LLM.interactions.in.this.buffer | 
| 1cca0 |  2e 0a 0a 54 68 65 20 5c 22 73 79 73 74 65 6d 20    6d 65 73 73 61 67 65 5c 22 20 65 73 74 61 62 6c  | ...The.\"system.message\".establ | 
| 1ccc0 |  69 73 68 65 73 20 64 69 72 65 63 74 69 76 65 73    20 66 6f 72 20 74 68 65 20 63 68 61 74 0a 73 65  | ishes.directives.for.the.chat.se | 
| 1cce0 |  73 73 69 6f 6e 20 61 6e 64 20 6d 6f 64 69 66 69    65 73 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  | ssion.and.modifies.the.behavior. | 
| 1cd00 |  6f 66 20 74 68 65 20 4c 4c 4d 2e 20 53 6f 6d 65    20 65 78 61 6d 70 6c 65 73 20 6f 66 0a 73 79 73  | of.the.LLM..Some.examples.of.sys | 
| 1cd20 |  74 65 6d 20 70 72 6f 6d 70 74 73 20 61 72 65 3a    0a 0a 59 6f 75 20 61 72 65 20 61 20 68 65 6c 70  | tem.prompts.are:..You.are.a.help | 
| 1cd40 |  66 75 6c 20 61 73 73 69 73 74 61 6e 74 2e 20 41    6e 73 77 65 72 20 61 73 20 63 6f 6e 63 69 73 65  | ful.assistant..Answer.as.concise | 
| 1cd60 |  6c 79 20 61 73 20 70 6f 73 73 69 62 6c 65 2e 0a    52 65 70 6c 79 20 6f 6e 6c 79 20 77 69 74 68 20  | ly.as.possible..Reply.only.with. | 
| 1cd80 |  73 68 65 6c 6c 20 63 6f 6d 6d 61 6e 64 73 20 61    6e 64 20 6e 6f 20 70 72 6f 73 65 2e 0a 59 6f 75  | shell.commands.and.no.prose..You | 
| 1cda0 |  20 61 72 65 20 61 20 70 6f 65 74 2e 20 52 65 70    6c 79 20 6f 6e 6c 79 20 69 6e 20 76 65 72 73 65  | .are.a.poet..Reply.only.in.verse | 
| 1cdc0 |  2e 0a 0a 4d 6f 72 65 20 65 78 74 65 6e 73 69 76    65 20 73 79 73 74 65 6d 20 6d 65 73 73 61 67 65  | ...More.extensive.system.message | 
| 1cde0 |  73 20 63 61 6e 20 62 65 20 75 73 65 66 75 6c 20    66 6f 72 20 73 70 65 63 69 66 69 63 20 74 61 73  | s.can.be.useful.for.specific.tas | 
| 1ce00 |  6b 73 2e 0a 0a 43 75 73 74 6f 6d 69 7a 65 20 60    67 70 74 65 6c 2d 64 69 72 65 63 74 69 76 65 73  | ks...Customize.`gptel-directives | 
| 1ce20 |  27 20 66 6f 72 20 74 61 73 6b 2d 73 70 65 63 69    66 69 63 20 70 72 6f 6d 70 74 73 2e 22 0a 20 20  | '.for.task-specific.prompts."... | 
| 1ce40 |  5b 3a 64 65 73 63 72 69 70 74 69 6f 6e 0a 20 20    20 28 6c 61 6d 62 64 61 20 28 29 20 28 73 74 72  | [:description....(lambda.().(str | 
| 1ce60 |  69 6e 67 2d 72 65 70 6c 61 63 65 0a 20 20 20 20    20 20 20 20 20 20 22 5c 6e 22 20 22 e2 ae 90 20  | ing-replace..........."\n".".... | 
| 1ce80 |  22 0a 20 20 20 20 20 20 20 20 20 20 28 74 72 75    6e 63 61 74 65 2d 73 74 72 69 6e 67 2d 74 6f 2d  | "...........(truncate-string-to- | 
| 1cea0 |  77 69 64 74 68 0a 20 20 20 20 20 20 20 20 20 20    20 67 70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d  | width............gptel--system-m | 
| 1cec0 |  65 73 73 61 67 65 20 28 6d 61 78 20 28 2d 20 28    77 69 6e 64 6f 77 2d 77 69 64 74 68 29 20 31 32  | essage.(max.(-.(window-width).12 | 
| 1cee0 |  29 20 31 34 29 20 6e 69 6c 20 6e 69 6c 20 74 29    29 29 0a 20 20 20 5b 28 67 70 74 65 6c 2d 2d 73  | ).14).nil.nil.t)))....[(gptel--s | 
| 1cf00 |  75 66 66 69 78 2d 73 79 73 74 65 6d 2d 6d 65 73    73 61 67 65 29 5d 0a 20 20 20 5b 28 67 70 74 65  | uffix-system-message)]....[(gpte | 
| 1cf20 |  6c 2d 2d 69 6e 66 69 78 2d 76 61 72 69 61 62 6c    65 2d 73 63 6f 70 65 29 5d 5d 0a 20 20 20 5b 3a  | l--infix-variable-scope)]]....[: | 
| 1cf40 |  63 6c 61 73 73 20 74 72 61 6e 73 69 65 6e 74 2d    63 6f 6c 75 6d 6e 0a 20 20 20 20 3a 73 65 74 75  | class.transient-column.....:setu | 
| 1cf60 |  70 2d 63 68 69 6c 64 72 65 6e 20 67 70 74 65 6c    2d 73 79 73 74 65 6d 2d 70 72 6f 6d 70 74 2d 2d  | p-children.gptel-system-prompt-- | 
| 1cf80 |  73 65 74 75 70 0a 20 20 20 20 3a 70 61 64 2d 6b    65 79 73 20 74 5d 29 0a 0a 3b 3b 20 2a 2a 20 50  | setup.....:pad-keys.t])..;;.**.P | 
| 1cfa0 |  72 65 66 69 78 20 66 6f 72 20 72 65 77 72 69 74    69 6e 67 2f 72 65 66 61 63 74 6f 72 69 6e 67 0a  | refix.for.rewriting/refactoring. | 
| 1cfc0 |  0a 28 74 72 61 6e 73 69 65 6e 74 2d 64 65 66 69    6e 65 2d 70 72 65 66 69 78 20 67 70 74 65 6c 2d  | .(transient-define-prefix.gptel- | 
| 1cfe0 |  72 65 77 72 69 74 65 2d 6d 65 6e 75 20 28 29 0a    20 20 22 52 65 77 72 69 74 65 20 6f 72 20 72 65  | rewrite-menu.()..."Rewrite.or.re | 
| 1d000 |  66 61 63 74 6f 72 20 74 65 78 74 20 72 65 67 69    6f 6e 20 75 73 69 6e 67 20 61 6e 20 4c 4c 4d 2e  | factor.text.region.using.an.LLM. | 
| 1d020 |  22 0a 20 20 5b 3a 64 65 73 63 72 69 70 74 69 6f    6e 0a 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a  | "...[:description....(lambda.(). | 
| 1d040 |  20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 44 69    72 65 63 74 69 76 65 3a 20 20 25 73 22 0a 20 20  | .....(format."Directive:..%s"... | 
| 1d060 |  20 20 20 20 20 20 20 20 20 20 20 28 74 72 75 6e    63 61 74 65 2d 73 74 72 69 6e 67 2d 74 6f 2d 77  | ...........(truncate-string-to-w | 
| 1d080 |  69 64 74 68 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 6f 72 20 67 70 74 65 6c 2d 2d 72 65  | idth...............(or.gptel--re | 
| 1d0a0 |  77 72 69 74 65 2d 6d 65 73 73 61 67 65 20 28 67    70 74 65 6c 2d 2d 72 65 77 72 69 74 65 2d 6d 65  | write-message.(gptel--rewrite-me | 
| 1d0c0 |  73 73 61 67 65 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6d 61 78 20 28 2d 20 28 77  | ssage))...............(max.(-.(w | 
| 1d0e0 |  69 6e 64 6f 77 2d 77 69 64 74 68 29 20 31 34 29    20 32 30 29 20 6e 69 6c 20 6e 69 6c 20 74 29 29  | indow-width).14).20).nil.nil.t)) | 
| 1d100 |  29 0a 20 20 20 28 67 70 74 65 6c 2d 2d 69 6e 66    69 78 2d 72 65 77 72 69 74 65 2d 70 72 6f 6d 70  | )....(gptel--infix-rewrite-promp | 
| 1d120 |  74 29 5d 0a 20 20 5b 5b 3a 64 65 73 63 72 69 70    74 69 6f 6e 20 22 44 69 66 66 20 4f 70 74 69 6f  | t)]...[[:description."Diff.Optio | 
| 1d140 |  6e 73 22 0a 20 20 20 28 22 2d 77 22 20 22 57 6f    72 64 77 69 73 65 20 64 69 66 66 22 20 22 2d 77  | ns"....("-w"."Wordwise.diff"."-w | 
| 1d160 |  22 29 5d 0a 20 20 20 5b 3a 64 65 73 63 72 69 70    74 69 6f 6e 0a 20 20 20 20 28 6c 61 6d 62 64 61  | ")]....[:description.....(lambda | 
| 1d180 |  20 28 29 20 28 69 66 20 28 64 65 72 69 76 65 64    2d 6d 6f 64 65 2d 70 20 27 70 72 6f 67 2d 6d 6f  | .().(if.(derived-mode-p.'prog-mo | 
| 1d1a0 |  64 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 22 52 65 66 61 63 74 6f 72 22 20 22 52 65  | de)..............."Refactor"."Re | 
| 1d1c0 |  77 72 69 74 65 22 29 29 0a 20 20 20 20 28 67 70    74 65 6c 2d 2d 73 75 66 66 69 78 2d 72 65 77 72  | write")).....(gptel--suffix-rewr | 
| 1d1e0 |  69 74 65 29 0a 20 20 20 20 28 67 70 74 65 6c 2d    2d 73 75 66 66 69 78 2d 72 65 77 72 69 74 65 2d  | ite).....(gptel--suffix-rewrite- | 
| 1d200 |  61 6e 64 2d 72 65 70 6c 61 63 65 29 0a 20 20 20    20 28 67 70 74 65 6c 2d 2d 73 75 66 66 69 78 2d  | and-replace).....(gptel--suffix- | 
| 1d220 |  72 65 77 72 69 74 65 2d 61 6e 64 2d 65 64 69 66    66 29 5d 5d 0a 20 20 28 69 6e 74 65 72 61 63 74  | rewrite-and-ediff)]]...(interact | 
| 1d240 |  69 76 65 29 0a 20 20 28 75 6e 6c 65 73 73 20 67    70 74 65 6c 2d 2d 72 65 77 72 69 74 65 2d 6d 65  | ive)...(unless.gptel--rewrite-me | 
| 1d260 |  73 73 61 67 65 0a 20 20 20 20 28 73 65 74 71 20    67 70 74 65 6c 2d 2d 72 65 77 72 69 74 65 2d 6d  | ssage.....(setq.gptel--rewrite-m | 
| 1d280 |  65 73 73 61 67 65 20 28 67 70 74 65 6c 2d 2d 72    65 77 72 69 74 65 2d 6d 65 73 73 61 67 65 29 29  | essage.(gptel--rewrite-message)) | 
| 1d2a0 |  29 0a 20 20 28 74 72 61 6e 73 69 65 6e 74 2d 73    65 74 75 70 20 27 67 70 74 65 6c 2d 72 65 77 72  | )...(transient-setup.'gptel-rewr | 
| 1d2c0 |  69 74 65 2d 6d 65 6e 75 29 29 0a 0a 0c 0a 3b 3b    20 2a 20 54 72 61 6e 73 69 65 6e 74 20 49 6e 66  | ite-menu))....;;.*.Transient.Inf | 
| 1d2e0 |  69 78 65 73 0a 0a 3b 3b 20 2a 2a 20 49 6e 66 69    78 65 73 20 66 6f 72 20 6d 6f 64 65 6c 20 70 61  | ixes..;;.**.Infixes.for.model.pa | 
| 1d300 |  72 61 6d 65 74 65 72 73 0a 0a 28 74 72 61 6e 73    69 65 6e 74 2d 64 65 66 69 6e 65 2d 69 6e 66 69  | rameters..(transient-define-infi | 
| 1d320 |  78 20 67 70 74 65 6c 2d 2d 69 6e 66 69 78 2d 76    61 72 69 61 62 6c 65 2d 73 63 6f 70 65 20 28 29  | x.gptel--infix-variable-scope.() | 
| 1d340 |  0a 20 20 22 53 65 74 20 67 70 74 65 6c 27 73 20    6d 6f 64 65 6c 20 70 61 72 61 6d 65 74 65 72 73  | ..."Set.gptel's.model.parameters | 
| 1d360 |  20 61 6e 64 20 73 79 73 74 65 6d 20 6d 65 73 73    61 67 65 20 69 6e 20 74 68 69 73 20 62 75 66 66  | .and.system.message.in.this.buff | 
| 1d380 |  65 72 20 6f 72 20 67 6c 6f 62 61 6c 6c 79 2e 22    0a 20 20 3a 61 72 67 75 6d 65 6e 74 20 22 73 63  | er.or.globally."...:argument."sc | 
| 1d3a0 |  6f 70 65 22 0a 20 20 3a 76 61 72 69 61 62 6c 65    20 27 67 70 74 65 6c 2d 2d 73 65 74 2d 62 75 66  | ope"...:variable.'gptel--set-buf | 
| 1d3c0 |  66 65 72 2d 6c 6f 63 61 6c 6c 79 0a 20 20 3a 63    6c 61 73 73 20 27 67 70 74 65 6c 2d 2d 73 77 69  | fer-locally...:class.'gptel--swi | 
| 1d3e0 |  74 63 68 65 73 0a 20 20 3a 66 6f 72 6d 61 74 20    22 20 20 25 6b 20 25 64 20 25 76 22 0a 20 20 3a  | tches...:format."..%k.%d.%v"...: | 
| 1d400 |  6b 65 79 20 22 3d 22 0a 20 20 3a 64 65 73 63 72    69 70 74 69 6f 6e 20 28 70 72 6f 70 65 72 74 69  | key."="...:description.(properti | 
| 1d420 |  7a 65 20 22 53 65 74 22 20 27 66 61 63 65 20 27    74 72 61 6e 73 69 65 6e 74 2d 69 6e 61 63 74 69  | ze."Set".'face.'transient-inacti | 
| 1d440 |  76 65 2d 61 72 67 75 6d 65 6e 74 29 29 0a 0a 28    74 72 61 6e 73 69 65 6e 74 2d 64 65 66 69 6e 65  | ve-argument))..(transient-define | 
| 1d460 |  2d 69 6e 66 69 78 20 67 70 74 65 6c 2d 2d 69 6e    66 69 78 2d 6e 75 6d 2d 6d 65 73 73 61 67 65 73  | -infix.gptel--infix-num-messages | 
| 1d480 |  2d 74 6f 2d 73 65 6e 64 20 28 29 0a 20 20 22 4e    75 6d 62 65 72 20 6f 66 20 72 65 63 65 6e 74 20  | -to-send.()..."Number.of.recent. | 
| 1d4a0 |  6d 65 73 73 61 67 65 73 20 74 6f 20 73 65 6e 64    20 77 69 74 68 20 65 61 63 68 20 65 78 63 68 61  | messages.to.send.with.each.excha | 
| 1d4c0 |  6e 67 65 2e 0a 0a 42 79 20 64 65 66 61 75 6c 74    2c 20 74 68 65 20 66 75 6c 6c 20 63 6f 6e 76 65  | nge...By.default,.the.full.conve | 
| 1d4e0 |  72 73 61 74 69 6f 6e 20 68 69 73 74 6f 72 79 20    69 73 20 73 65 6e 74 20 77 69 74 68 20 65 76 65  | rsation.history.is.sent.with.eve | 
| 1d500 |  72 79 20 6e 65 77 0a 70 72 6f 6d 70 74 2e 20 54    68 69 73 20 72 65 74 61 69 6e 73 20 74 68 65 20  | ry.new.prompt..This.retains.the. | 
| 1d520 |  66 75 6c 6c 20 63 6f 6e 74 65 78 74 20 6f 66 20    74 68 65 20 63 6f 6e 76 65 72 73 61 74 69 6f 6e  | full.context.of.the.conversation | 
| 1d540 |  2c 20 62 75 74 0a 63 61 6e 20 62 65 20 65 78 70    65 6e 73 69 76 65 20 69 6e 20 74 6f 6b 65 6e 20  | ,.but.can.be.expensive.in.token. | 
| 1d560 |  73 69 7a 65 2e 20 53 65 74 20 68 6f 77 20 6d 61    6e 79 20 72 65 63 65 6e 74 20 6d 65 73 73 61 67  | size..Set.how.many.recent.messag | 
| 1d580 |  65 73 20 74 6f 0a 69 6e 63 6c 75 64 65 2e 22 0a    20 20 3a 64 65 73 63 72 69 70 74 69 6f 6e 20 22  | es.to.include."...:description." | 
| 1d5a0 |  70 72 65 76 69 6f 75 73 20 72 65 73 70 6f 6e 73    65 73 22 0a 20 20 3a 63 6c 61 73 73 20 27 67 70  | previous.responses"...:class.'gp | 
| 1d5c0 |  74 65 6c 2d 6c 69 73 70 2d 76 61 72 69 61 62 6c    65 0a 20 20 3a 76 61 72 69 61 62 6c 65 20 27 67  | tel-lisp-variable...:variable.'g | 
| 1d5e0 |  70 74 65 6c 2d 2d 6e 75 6d 2d 6d 65 73 73 61 67    65 73 2d 74 6f 2d 73 65 6e 64 0a 20 20 3a 73 65  | ptel--num-messages-to-send...:se | 
| 1d600 |  74 2d 76 61 6c 75 65 20 23 27 67 70 74 65 6c 2d    2d 73 65 74 2d 77 69 74 68 2d 73 63 6f 70 65 0a  | t-value.#'gptel--set-with-scope. | 
| 1d620 |  20 20 3a 64 69 73 70 6c 61 79 2d 6e 69 6c 20 27    61 6c 6c 0a 20 20 3a 66 6f 72 6d 61 74 20 22 20  | ..:display-nil.'all...:format.". | 
| 1d640 |  25 6b 20 25 76 20 25 64 22 0a 20 20 3a 6b 65 79    20 22 2d 6e 22 0a 20 20 3a 70 72 6f 6d 70 74 20  | %k.%v.%d"...:key."-n"...:prompt. | 
| 1d660 |  22 4e 75 6d 62 65 72 20 6f 66 20 70 61 73 74 20    6d 65 73 73 61 67 65 73 20 74 6f 20 69 6e 63 6c  | "Number.of.past.messages.to.incl | 
| 1d680 |  75 64 65 20 66 6f 72 20 63 6f 6e 74 65 78 74 20    28 6c 65 61 76 65 20 65 6d 70 74 79 20 66 6f 72  | ude.for.context.(leave.empty.for | 
| 1d6a0 |  20 61 6c 6c 29 3a 20 22 0a 20 20 3a 72 65 61 64    65 72 20 27 67 70 74 65 6c 2d 2d 74 72 61 6e 73  | .all):."...:reader.'gptel--trans | 
| 1d6c0 |  69 65 6e 74 2d 72 65 61 64 2d 76 61 72 69 61 62    6c 65 29 0a 0a 28 74 72 61 6e 73 69 65 6e 74 2d  | ient-read-variable)..(transient- | 
| 1d6e0 |  64 65 66 69 6e 65 2d 69 6e 66 69 78 20 67 70 74    65 6c 2d 2d 69 6e 66 69 78 2d 6d 61 78 2d 74 6f  | define-infix.gptel--infix-max-to | 
| 1d700 |  6b 65 6e 73 20 28 29 0a 20 20 22 4d 61 78 20 74    6f 6b 65 6e 73 20 70 65 72 20 72 65 73 70 6f 6e  | kens.()..."Max.tokens.per.respon | 
| 1d720 |  73 65 2e 0a 0a 54 68 69 73 20 69 73 20 72 6f 75    67 68 6c 79 20 74 68 65 20 6e 75 6d 62 65 72 20  | se...This.is.roughly.the.number. | 
| 1d740 |  6f 66 20 77 6f 72 64 73 20 69 6e 20 74 68 65 20    72 65 73 70 6f 6e 73 65 2e 20 31 30 30 2d 33 30  | of.words.in.the.response..100-30 | 
| 1d760 |  30 20 69 73 20 61 0a 72 65 61 73 6f 6e 61 62 6c    65 20 72 61 6e 67 65 20 66 6f 72 20 73 68 6f 72  | 0.is.a.reasonable.range.for.shor | 
| 1d780 |  74 20 61 6e 73 77 65 72 73 2c 20 34 30 30 20 6f    72 20 6d 6f 72 65 20 66 6f 72 20 6c 6f 6e 67 65  | t.answers,.400.or.more.for.longe | 
| 1d7a0 |  72 0a 72 65 73 70 6f 6e 73 65 73 2e 22 0a 20 20    3a 64 65 73 63 72 69 70 74 69 6f 6e 20 22 52 65  | r.responses."...:description."Re | 
| 1d7c0 |  73 70 6f 6e 73 65 20 6c 65 6e 67 74 68 20 28 74    6f 6b 65 6e 73 29 22 0a 20 20 3a 63 6c 61 73 73  | sponse.length.(tokens)"...:class | 
| 1d7e0 |  20 27 67 70 74 65 6c 2d 6c 69 73 70 2d 76 61 72    69 61 62 6c 65 0a 20 20 3a 76 61 72 69 61 62 6c  | .'gptel-lisp-variable...:variabl | 
| 1d800 |  65 20 27 67 70 74 65 6c 2d 6d 61 78 2d 74 6f 6b    65 6e 73 0a 20 20 3a 73 65 74 2d 76 61 6c 75 65  | e.'gptel-max-tokens...:set-value | 
| 1d820 |  20 23 27 67 70 74 65 6c 2d 2d 73 65 74 2d 77 69    74 68 2d 73 63 6f 70 65 0a 20 20 3a 64 69 73 70  | .#'gptel--set-with-scope...:disp | 
| 1d840 |  6c 61 79 2d 6e 69 6c 20 27 61 75 74 6f 0a 20 20    3a 6b 65 79 20 22 2d 63 22 0a 20 20 3a 70 72 6f  | lay-nil.'auto...:key."-c"...:pro | 
| 1d860 |  6d 70 74 20 22 52 65 73 70 6f 6e 73 65 20 6c 65    6e 67 74 68 20 69 6e 20 74 6f 6b 65 6e 73 20 28  | mpt."Response.length.in.tokens.( | 
| 1d880 |  6c 65 61 76 65 20 65 6d 70 74 79 3a 20 64 65 66    61 75 6c 74 2c 20 38 30 2d 32 30 30 3a 20 73 68  | leave.empty:.default,.80-200:.sh | 
| 1d8a0 |  6f 72 74 2c 20 32 30 30 2d 35 30 30 3a 20 6c 6f    6e 67 29 3a 20 22 0a 20 20 3a 72 65 61 64 65 72  | ort,.200-500:.long):."...:reader | 
| 1d8c0 |  20 27 67 70 74 65 6c 2d 2d 74 72 61 6e 73 69 65    6e 74 2d 72 65 61 64 2d 76 61 72 69 61 62 6c 65  | .'gptel--transient-read-variable | 
| 1d8e0 |  29 0a 0a 28 74 72 61 6e 73 69 65 6e 74 2d 64 65    66 69 6e 65 2d 69 6e 66 69 78 20 67 70 74 65 6c  | )..(transient-define-infix.gptel | 
| 1d900 |  2d 2d 69 6e 66 69 78 2d 70 72 6f 76 69 64 65 72    20 28 29 0a 20 20 22 41 49 20 50 72 6f 76 69 64  | --infix-provider.()..."AI.Provid | 
| 1d920 |  65 72 20 66 6f 72 20 43 68 61 74 2e 22 0a 20 20    3a 64 65 73 63 72 69 70 74 69 6f 6e 20 22 47 50  | er.for.Chat."...:description."GP | 
| 1d940 |  54 20 4d 6f 64 65 6c 22 0a 20 20 3a 63 6c 61 73    73 20 27 67 70 74 65 6c 2d 70 72 6f 76 69 64 65  | T.Model"...:class.'gptel-provide | 
| 1d960 |  72 2d 76 61 72 69 61 62 6c 65 0a 20 20 3a 70 72    6f 6d 70 74 20 22 4d 6f 64 65 6c 3a 20 22 0a 20  | r-variable...:prompt."Model:.".. | 
| 1d980 |  20 3a 76 61 72 69 61 62 6c 65 20 27 67 70 74 65    6c 2d 62 61 63 6b 65 6e 64 0a 20 20 3a 73 65 74  | .:variable.'gptel-backend...:set | 
| 1d9a0 |  2d 76 61 6c 75 65 20 23 27 67 70 74 65 6c 2d 2d    73 65 74 2d 77 69 74 68 2d 73 63 6f 70 65 0a 20  | -value.#'gptel--set-with-scope.. | 
| 1d9c0 |  20 3a 6d 6f 64 65 6c 20 27 67 70 74 65 6c 2d 6d    6f 64 65 6c 0a 20 20 3a 6b 65 79 20 22 2d 6d 22  | .:model.'gptel-model...:key."-m" | 
| 1d9e0 |  0a 20 20 3a 72 65 61 64 65 72 20 28 6c 61 6d 62    64 61 20 28 70 72 6f 6d 70 74 20 26 72 65 73 74  | ...:reader.(lambda.(prompt.&rest | 
| 1da00 |  20 5f 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    28 63 6c 2d 6c 6f 6f 70 0a 20 20 20 20 20 20 20  | ._).............(cl-loop........ | 
| 1da20 |  20 20 20 20 20 20 66 6f 72 20 28 6e 61 6d 65 20    2e 20 62 61 63 6b 65 6e 64 29 20 69 6e 20 67 70  | ......for.(name...backend).in.gp | 
| 1da40 |  74 65 6c 2d 2d 6b 6e 6f 77 6e 2d 62 61 63 6b 65    6e 64 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  | tel--known-backends............. | 
| 1da60 |  20 6e 63 6f 6e 63 20 28 63 6c 2d 6c 6f 6f 70 20    66 6f 72 20 6d 6f 64 65 6c 20 69 6e 20 28 67 70  | .nconc.(cl-loop.for.model.in.(gp | 
| 1da80 |  74 65 6c 2d 62 61 63 6b 65 6e 64 2d 6d 6f 64 65    6c 73 20 62 61 63 6b 65 6e 64 29 0a 20 20 20 20  | tel-backend-models.backend)..... | 
| 1daa0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 20  | ........................collect. | 
| 1dac0 |  28 6c 69 73 74 20 28 63 6f 6e 63 61 74 20 6e 61    6d 65 20 22 3a 22 20 6d 6f 64 65 6c 29 20 62 61  | (list.(concat.name.":".model).ba | 
| 1dae0 |  63 6b 65 6e 64 20 6d 6f 64 65 6c 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 69 6e 74 6f 20  | ckend.model))..............into. | 
| 1db00 |  6d 6f 64 65 6c 73 2d 61 6c 69 73 74 20 66 69 6e    61 6c 6c 79 20 72 65 74 75 72 6e 0a 20 20 20 20  | models-alist.finally.return..... | 
| 1db20 |  20 20 20 20 20 20 20 20 20 28 63 64 72 20 28 61    73 73 6f 63 20 28 63 6f 6d 70 6c 65 74 69 6e 67  | .........(cdr.(assoc.(completing | 
| 1db40 |  2d 72 65 61 64 20 70 72 6f 6d 70 74 20 6d 6f 64    65 6c 73 2d 61 6c 69 73 74 20 6e 69 6c 20 74 29  | -read.prompt.models-alist.nil.t) | 
| 1db60 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 6d 6f 64 65 6c 73  | ..........................models | 
| 1db80 |  2d 61 6c 69 73 74 29 29 29 29 29 0a 0a 28 74 72    61 6e 73 69 65 6e 74 2d 64 65 66 69 6e 65 2d 69  | -alist)))))..(transient-define-i | 
| 1dba0 |  6e 66 69 78 20 67 70 74 65 6c 2d 2d 69 6e 66 69    78 2d 74 65 6d 70 65 72 61 74 75 72 65 20 28 29  | nfix.gptel--infix-temperature.() | 
| 1dbc0 |  0a 20 20 22 54 65 6d 70 65 72 61 74 75 72 65 20    6f 66 20 72 65 71 75 65 73 74 2e 22 0a 20 20 3a  | ..."Temperature.of.request."...: | 
| 1dbe0 |  64 65 73 63 72 69 70 74 69 6f 6e 20 22 54 65 6d    70 65 72 61 74 75 72 65 20 28 30 20 2d 20 32 2e  | description."Temperature.(0.-.2. | 
| 1dc00 |  30 29 22 0a 20 20 3a 63 6c 61 73 73 20 27 74 72    61 6e 73 69 65 6e 74 2d 6c 69 73 70 2d 76 61 72  | 0)"...:class.'transient-lisp-var | 
| 1dc20 |  69 61 62 6c 65 0a 20 20 3a 76 61 72 69 61 62 6c    65 20 27 67 70 74 65 6c 2d 74 65 6d 70 65 72 61  | iable...:variable.'gptel-tempera | 
| 1dc40 |  74 75 72 65 0a 20 20 3a 73 65 74 2d 76 61 6c 75    65 20 23 27 67 70 74 65 6c 2d 2d 73 65 74 2d 77  | ture...:set-value.#'gptel--set-w | 
| 1dc60 |  69 74 68 2d 73 63 6f 70 65 0a 20 20 3a 6b 65 79    20 22 2d 74 22 0a 20 20 3a 70 72 6f 6d 70 74 20  | ith-scope...:key."-t"...:prompt. | 
| 1dc80 |  22 54 65 6d 70 65 72 61 74 75 72 65 20 63 6f 6e    74 72 6f 6c 73 20 74 68 65 20 72 65 73 70 6f 6e  | "Temperature.controls.the.respon | 
| 1dca0 |  73 65 20 72 61 6e 64 6f 6d 6e 65 73 73 20 28 30    2e 30 2d 32 2e 30 2c 20 6c 65 61 76 65 20 65 6d  | se.randomness.(0.0-2.0,.leave.em | 
| 1dcc0 |  70 74 79 20 66 6f 72 20 64 65 66 61 75 6c 74 29    3a 20 22 0a 20 20 3a 72 65 61 64 65 72 20 27 67  | pty.for.default):."...:reader.'g | 
| 1dce0 |  70 74 65 6c 2d 2d 74 72 61 6e 73 69 65 6e 74 2d    72 65 61 64 2d 76 61 72 69 61 62 6c 65 29 0a 0a  | ptel--transient-read-variable).. | 
| 1dd00 |  3b 3b 20 2a 2a 20 49 6e 66 69 78 20 66 6f 72 20    74 68 65 20 72 65 66 61 63 74 6f 72 2f 72 65 77  | ;;.**.Infix.for.the.refactor/rew | 
| 1dd20 |  72 69 74 65 20 73 79 73 74 65 6d 20 6d 65 73 73    61 67 65 0a 0a 28 74 72 61 6e 73 69 65 6e 74 2d  | rite.system.message..(transient- | 
| 1dd40 |  64 65 66 69 6e 65 2d 69 6e 66 69 78 20 67 70 74    65 6c 2d 2d 69 6e 66 69 78 2d 61 64 64 2d 64 69  | define-infix.gptel--infix-add-di | 
| 1dd60 |  72 65 63 74 69 76 65 20 28 29 0a 20 20 22 41 64    64 69 74 69 6f 6e 61 6c 20 64 69 72 65 63 74 69  | rective.()..."Additional.directi | 
| 1dd80 |  76 65 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20    74 68 65 20 6e 65 78 74 20 71 75 65 72 79 20 6f  | ve.intended.for.the.next.query.o | 
| 1dda0 |  6e 6c 79 2e 0a 0a 54 68 69 73 20 69 73 20 75 73    65 66 75 6c 20 74 6f 20 64 65 66 69 6e 65 20 61  | nly...This.is.useful.to.define.a | 
| 1ddc0 |  20 71 75 69 63 6b 20 74 61 73 6b 20 6f 6e 20 74    6f 70 20 6f 66 20 61 20 6d 6f 72 65 20 65 78 74  | .quick.task.on.top.of.a.more.ext | 
| 1dde0 |  65 6e 73 69 76 65 0a 6f 72 20 64 65 74 61 69 6c    65 64 20 73 79 73 74 65 6d 20 6d 65 73 73 61 67  | ensive.or.detailed.system.messag | 
| 1de00 |  65 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c    20 77 69 74 68 20 63 6f 64 65 2f 74 65 78 74 20  | e...For.example,.with.code/text. | 
| 1de20 |  73 65 6c 65 63 74 65 64 3a 0a 0a 2d 20 52 65 77    72 69 74 65 20 74 68 69 73 20 66 75 6e 63 74 69  | selected:..-.Rewrite.this.functi | 
| 1de40 |  6f 6e 20 74 6f 20 64 6f 20 58 20 77 68 69 6c 65    20 61 76 6f 69 64 69 6e 67 20 59 2e 0a 2d 20 43  | on.to.do.X.while.avoiding.Y..-.C | 
| 1de60 |  68 61 6e 67 65 20 74 68 65 20 74 6f 6e 65 20 6f    66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  | hange.the.tone.of.the.following. | 
| 1de80 |  70 61 72 61 67 72 61 70 68 20 74 6f 20 62 65 20    6d 6f 72 65 20 64 69 72 65 63 74 2e 0a 0a 4f 72  | paragraph.to.be.more.direct...Or | 
| 1dea0 |  20 69 6e 20 61 6e 20 65 78 74 65 6e 64 65 64 20    63 6f 6e 76 65 72 73 61 74 69 6f 6e 3a 0a 0a 2d  | .in.an.extended.conversation:..- | 
| 1dec0 |  20 50 68 72 61 73 65 20 79 6f 75 20 6e 65 78 74    20 72 65 73 70 6f 6e 73 65 20 69 6e 20 74 65 6e  | .Phrase.you.next.response.in.ten | 
| 1dee0 |  20 77 6f 72 64 73 20 6f 72 20 6c 65 73 73 2e 0a    2d 20 50 72 65 74 65 6e 64 20 66 6f 72 20 6e 6f  | .words.or.less..-.Pretend.for.no | 
| 1df00 |  77 20 74 68 61 74 20 79 6f 75 27 72 65 20 61 6e    20 61 6e 74 68 72 6f 70 6f 6c 6f 67 69 73 74 2e  | w.that.you're.an.anthropologist. | 
| 1df20 |  22 0a 20 20 3a 63 6c 61 73 73 20 27 67 70 74 65    6c 2d 6f 70 74 69 6f 6e 2d 6f 76 65 72 6c 61 69  | "...:class.'gptel-option-overlai | 
| 1df40 |  64 0a 20 20 3b 3b 20 3a 76 61 72 69 61 62 6c 65    20 27 67 70 74 65 6c 2d 2d 69 6e 73 74 72 75 63  | d...;;.:variable.'gptel--instruc | 
| 1df60 |  74 69 6f 6e 73 0a 20 20 3a 64 69 73 70 6c 61 79    2d 6e 69 6c 20 27 6e 6f 6e 65 0a 20 20 3a 6f 76  | tions...:display-nil.'none...:ov | 
| 1df80 |  65 72 6c 61 79 20 6e 69 6c 0a 20 20 3a 61 72 67    75 6d 65 6e 74 20 22 3a 22 0a 20 20 3a 70 72 6f  | erlay.nil...:argument.":"...:pro | 
| 1dfa0 |  6d 70 74 20 22 49 6e 73 74 72 75 63 74 69 6f 6e    73 20 66 6f 72 20 6e 65 78 74 20 72 65 73 70 6f  | mpt."Instructions.for.next.respo | 
| 1dfc0 |  6e 73 65 20 6f 6e 6c 79 3a 20 22 0a 20 20 3a 72    65 61 64 65 72 20 28 6c 61 6d 62 64 61 20 28 70  | nse.only:."...:reader.(lambda.(p | 
| 1dfe0 |  72 6f 6d 70 74 20 69 6e 69 74 69 61 6c 20 68 69    73 74 6f 72 79 29 0a 20 20 20 20 20 20 20 20 20  | rompt.initial.history).......... | 
| 1e000 |  20 20 20 28 6c 65 74 2a 20 28 28 65 78 74 72 61    20 28 72 65 61 64 2d 73 74 72 69 6e 67 20 70 72  | ...(let*.((extra.(read-string.pr | 
| 1e020 |  6f 6d 70 74 20 69 6e 69 74 69 61 6c 20 68 69 73    74 6f 72 79 29 29 29 0a 20 20 20 20 20 20 20 20  | ompt.initial.history)))......... | 
| 1e040 |  20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 73    74 72 69 6e 67 2d 65 6d 70 74 79 2d 70 20 65 78  | ......(unless.(string-empty-p.ex | 
| 1e060 |  74 72 61 29 20 65 78 74 72 61 29 29 29 0a 20 20    3a 66 6f 72 6d 61 74 20 22 20 25 6b 20 25 64 20  | tra).extra)))...:format.".%k.%d. | 
| 1e080 |  25 76 22 0a 20 20 3a 6b 65 79 20 22 64 22 0a 20    20 3a 61 72 67 75 6d 65 6e 74 20 22 3a 22 0a 20  | %v"...:key."d"...:argument.":".. | 
| 1e0a0 |  20 3a 64 65 73 63 72 69 70 74 69 6f 6e 20 22 41    64 64 20 64 69 72 65 63 74 69 76 65 22 0a 20 20  | .:description."Add.directive"... | 
| 1e0c0 |  3a 74 72 61 6e 73 69 65 6e 74 20 74 29 0a 0a 28    74 72 61 6e 73 69 65 6e 74 2d 64 65 66 69 6e 65  | :transient.t)..(transient-define | 
| 1e0e0 |  2d 69 6e 66 69 78 20 67 70 74 65 6c 2d 2d 69 6e    66 69 78 2d 72 65 77 72 69 74 65 2d 70 72 6f 6d  | -infix.gptel--infix-rewrite-prom | 
| 1e100 |  70 74 20 28 29 0a 20 20 22 43 68 61 74 20 64 69    72 65 63 74 69 76 65 20 28 73 79 73 74 65 6d 20  | pt.()..."Chat.directive.(system. | 
| 1e120 |  6d 65 73 73 61 67 65 29 20 74 6f 20 75 73 65 20    66 6f 72 20 72 65 77 72 69 74 69 6e 67 20 6f 72  | message).to.use.for.rewriting.or | 
| 1e140 |  20 72 65 66 61 63 74 6f 72 69 6e 67 2e 22 0a 20    20 3a 64 65 73 63 72 69 70 74 69 6f 6e 20 28 6c  | .refactoring."...:description.(l | 
| 1e160 |  61 6d 62 64 61 20 28 29 20 28 69 66 20 28 64 65    72 69 76 65 64 2d 6d 6f 64 65 2d 70 20 27 70 72  | ambda.().(if.(derived-mode-p.'pr | 
| 1e180 |  6f 67 2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | og-mode)........................ | 
| 1e1a0 |  20 20 22 53 65 74 20 64 69 72 65 63 74 69 76 65    73 20 66 6f 72 20 72 65 66 61 63 74 6f 72 22 0a  | .."Set.directives.for.refactor". | 
| 1e1c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 22 53 65 74 20 64 69 72 65  | ......................."Set.dire | 
| 1e1e0 |  63 74 69 76 65 73 20 66 6f 72 20 72 65 77 72 69    74 65 22 29 29 0a 20 20 3a 66 6f 72 6d 61 74 20  | ctives.for.rewrite"))...:format. | 
| 1e200 |  22 25 6b 20 25 64 22 0a 20 20 3a 63 6c 61 73 73    20 27 74 72 61 6e 73 69 65 6e 74 2d 6c 69 73 70  | "%k.%d"...:class.'transient-lisp | 
| 1e220 |  2d 76 61 72 69 61 62 6c 65 0a 20 20 3a 76 61 72    69 61 62 6c 65 20 27 67 70 74 65 6c 2d 2d 72 65  | -variable...:variable.'gptel--re | 
| 1e240 |  77 72 69 74 65 2d 6d 65 73 73 61 67 65 0a 20 20    3a 6b 65 79 20 22 68 22 0a 20 20 3a 70 72 6f 6d  | write-message...:key."h"...:prom | 
| 1e260 |  70 74 20 22 53 65 74 20 64 69 72 65 63 74 69 76    65 20 66 6f 72 20 72 65 77 72 69 74 65 3a 20 22  | pt."Set.directive.for.rewrite:." | 
| 1e280 |  0a 20 20 3a 72 65 61 64 65 72 20 28 6c 61 6d 62    64 61 20 28 70 72 6f 6d 70 74 20 5f 20 68 69 73  | ...:reader.(lambda.(prompt._.his | 
| 1e2a0 |  74 6f 72 79 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 72 65 61 64 2d 73 74 72 69 6e 67 0a 20  | tory).............(read-string.. | 
| 1e2c0 |  20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 6d    70 74 20 28 67 70 74 65 6c 2d 2d 72 65 77 72 69  | ............prompt.(gptel--rewri | 
| 1e2e0 |  74 65 2d 6d 65 73 73 61 67 65 29 20 68 69 73 74    6f 72 79 29 29 29 0a 0a 0c 0a 3b 3b 20 2a 20 54  | te-message).history)))....;;.*.T | 
| 1e300 |  72 61 6e 73 69 65 6e 74 20 53 75 66 66 69 78 65    73 0a 0a 3b 3b 20 2a 2a 20 53 75 66 66 69 78 20  | ransient.Suffixes..;;.**.Suffix. | 
| 1e320 |  74 6f 20 73 65 6e 64 20 70 72 6f 6d 70 74 0a 0a    28 74 72 61 6e 73 69 65 6e 74 2d 64 65 66 69 6e  | to.send.prompt..(transient-defin | 
| 1e340 |  65 2d 73 75 66 66 69 78 20 67 70 74 65 6c 2d 2d    73 75 66 66 69 78 2d 73 65 6e 64 20 28 61 72 67  | e-suffix.gptel--suffix-send.(arg | 
| 1e360 |  73 29 0a 20 20 22 53 65 6e 64 20 41 52 47 53 2e    22 0a 20 20 3a 6b 65 79 20 22 52 45 54 22 0a 20  | s)..."Send.ARGS."...:key."RET".. | 
| 1e380 |  20 3a 64 65 73 63 72 69 70 74 69 6f 6e 20 22 53    65 6e 64 20 70 72 6f 6d 70 74 22 0a 20 20 28 69  | .:description."Send.prompt"...(i | 
| 1e3a0 |  6e 74 65 72 61 63 74 69 76 65 20 28 6c 69 73 74    20 28 74 72 61 6e 73 69 65 6e 74 2d 61 72 67 73  | nteractive.(list.(transient-args | 
| 1e3c0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 6f 72 20 74 72 61 6e 73  | .......................(or.trans | 
| 1e3e0 |  69 65 6e 74 2d 63 75 72 72 65 6e 74 2d 63 6f 6d    6d 61 6e 64 20 27 67 70 74 65 6c 2d 6d 65 6e 75  | ient-current-command.'gptel-menu | 
| 1e400 |  29 29 29 29 0a 20 20 28 6c 65 74 20 28 28 73 74    72 65 61 6d 20 67 70 74 65 6c 2d 73 74 72 65 61  | ))))...(let.((stream.gptel-strea | 
| 1e420 |  6d 29 0a 20 20 20 20 20 20 20 20 28 69 6e 2d 70    6c 61 63 65 20 28 61 6e 64 20 28 6d 65 6d 62 65  | m).........(in-place.(and.(membe | 
| 1e440 |  72 20 22 69 22 20 61 72 67 73 29 20 74 29 29 0a    20 20 20 20 20 20 20 20 28 6f 75 74 70 75 74 2d  | r."i".args).t)).........(output- | 
| 1e460 |  74 6f 2d 6f 74 68 65 72 2d 62 75 66 66 65 72 2d    70 29 0a 20 20 20 20 20 20 20 20 28 62 61 63 6b  | to-other-buffer-p).........(back | 
| 1e480 |  65 6e 64 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e    64 29 0a 20 20 20 20 20 20 20 20 28 6d 6f 64 65  | end.gptel-backend).........(mode | 
| 1e4a0 |  6c 20 67 70 74 65 6c 2d 6d 6f 64 65 6c 29 0a 20    20 20 20 20 20 20 20 28 62 61 63 6b 65 6e 64 2d  | l.gptel-model).........(backend- | 
| 1e4c0 |  6e 61 6d 65 20 28 67 70 74 65 6c 2d 62 61 63 6b    65 6e 64 2d 6e 61 6d 65 20 67 70 74 65 6c 2d 62  | name.(gptel-backend-name.gptel-b | 
| 1e4e0 |  61 63 6b 65 6e 64 29 29 0a 20 20 20 20 20 20 20    20 28 62 75 66 66 65 72 29 20 28 70 6f 73 69 74  | ackend)).........(buffer).(posit | 
| 1e500 |  69 6f 6e 29 0a 20 20 20 20 20 20 20 20 28 63 61    6c 6c 62 61 63 6b 29 20 28 67 70 74 65 6c 2d 62  | ion).........(callback).(gptel-b | 
| 1e520 |  75 66 66 65 72 2d 6e 61 6d 65 29 0a 20 20 20 20    20 20 20 20 28 73 79 73 74 65 6d 2d 65 78 74 72  | uffer-name).........(system-extr | 
| 1e540 |  61 20 28 67 70 74 65 6c 2d 2d 67 65 74 2d 64 69    72 65 63 74 69 76 65 20 61 72 67 73 29 29 0a 20  | a.(gptel--get-directive.args)).. | 
| 1e560 |  20 20 20 20 20 20 20 28 64 72 79 2d 72 75 6e 20    28 61 6e 64 20 28 6d 65 6d 62 65 72 20 22 49 22  | .......(dry-run.(and.(member."I" | 
| 1e580 |  20 61 72 67 73 29 20 74 29 29 0a 20 20 20 20 20    20 20 20 3b 3b 20 49 6e 70 75 74 20 72 65 64 69  | .args).t)).........;;.Input.redi | 
| 1e5a0 |  72 65 63 74 69 6f 6e 3a 20 67 72 61 62 20 70 72    6f 6d 70 74 20 66 72 6f 6d 20 65 6c 73 65 77 68  | rection:.grab.prompt.from.elsewh | 
| 1e5c0 |  65 72 65 3f 0a 20 20 20 20 20 20 20 20 28 70 72    6f 6d 70 74 0a 20 20 20 20 20 20 20 20 20 28 63  | ere?.........(prompt..........(c | 
| 1e5e0 |  6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 28 28    6d 65 6d 62 65 72 20 22 6d 22 20 61 72 67 73 29  | ond...........((member."m".args) | 
| 1e600 |  0a 20 20 20 20 20 20 20 20 20 20 20 28 72 65 61    64 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20  | ............(read-string........ | 
| 1e620 |  20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 41 73    6b 20 25 73 3a 20 22 20 28 67 70 74 65 6c 2d 62  | .....(format."Ask.%s:.".(gptel-b | 
| 1e640 |  61 63 6b 65 6e 64 2d 6e 61 6d 65 20 67 70 74 65    6c 2d 62 61 63 6b 65 6e 64 29 29 0a 20 20 20 20  | ackend-name.gptel-backend))..... | 
| 1e660 |  20 20 20 20 20 20 20 20 28 61 6e 64 20 28 75 73    65 2d 72 65 67 69 6f 6e 2d 70 29 0a 20 20 20 20  | ........(and.(use-region-p)..... | 
| 1e680 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 75    66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 2d 6e  | .............(buffer-substring-n | 
| 1e6a0 |  6f 2d 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | o-properties...................( | 
| 1e6c0 |  72 65 67 69 6f 6e 2d 62 65 67 69 6e 6e 69 6e 67    29 20 28 72 65 67 69 6f 6e 2d 65 6e 64 29 29 29  | region-beginning).(region-end))) | 
| 1e6e0 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 28 28 6d    65 6d 62 65 72 20 22 79 22 20 61 72 67 73 29 0a  | ))...........((member."y".args). | 
| 1e700 |  20 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65    73 73 20 28 63 61 72 2d 73 61 66 65 20 6b 69 6c  | ...........(unless.(car-safe.kil | 
| 1e720 |  6c 2d 72 69 6e 67 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 28 75 73 65 72 2d 65 72 72 6f 72  | l-ring)..............(user-error | 
| 1e740 |  20 22 60 6b 69 6c 6c 2d 72 69 6e 67 27 20 69 73    20 65 6d 70 74 79 21 20 20 4e 6f 74 68 69 6e 67  | ."`kill-ring'.is.empty!..Nothing | 
| 1e760 |  20 74 6f 20 73 65 6e 64 22 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 28 69 66 20 63 75 72 72 65  | .to.send"))............(if.curre | 
| 1e780 |  6e 74 2d 70 72 65 66 69 78 2d 61 72 67 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65  | nt-prefix-arg................(re | 
| 1e7a0 |  61 64 2d 66 72 6f 6d 2d 6b 69 6c 6c 2d 72 69 6e    67 20 22 50 72 6f 6d 70 74 20 66 72 6f 6d 20 6b  | ad-from-kill-ring."Prompt.from.k | 
| 1e7c0 |  69 6c 6c 2d 72 69 6e 67 3a 20 22 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 28 63 75 72 72 65  | ill-ring:.")..............(curre | 
| 1e7e0 |  6e 74 2d 6b 69 6c 6c 20 30 29 29 29 29 29 29 0a    0a 20 20 20 20 3b 3b 20 4f 75 74 70 75 74 20 72  | nt-kill.0))))))......;;.Output.r | 
| 1e800 |  65 64 69 72 65 63 74 69 6f 6e 3a 20 53 65 6e 64    20 72 65 73 70 6f 6e 73 65 20 65 6c 73 65 77 68  | edirection:.Send.response.elsewh | 
| 1e820 |  65 72 65 3f 0a 20 20 20 20 28 63 6f 6e 64 0a 20    20 20 20 20 28 28 6d 65 6d 62 65 72 20 22 65 22  | ere?.....(cond......((member."e" | 
| 1e840 |  20 61 72 67 73 29 0a 20 20 20 20 20 20 28 73 65    74 71 20 73 74 72 65 61 6d 20 6e 69 6c 29 0a 20  | .args).......(setq.stream.nil).. | 
| 1e860 |  20 20 20 20 20 28 73 65 74 71 20 63 61 6c 6c 62    61 63 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20  | .....(setq.callback............. | 
| 1e880 |  28 6c 61 6d 62 64 61 20 28 72 65 73 70 20 69 6e    66 6f 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | (lambda.(resp.info)............. | 
| 1e8a0 |  20 20 28 69 66 20 72 65 73 70 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 65  | ..(if.resp...................(me | 
| 1e8c0 |  73 73 61 67 65 20 22 25 73 20 72 65 73 70 6f 6e    73 65 3a 20 25 73 22 20 62 61 63 6b 65 6e 64 2d  | ssage."%s.response:.%s".backend- | 
| 1e8e0 |  6e 61 6d 65 20 72 65 73 70 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6d 65 73 73  | name.resp).................(mess | 
| 1e900 |  61 67 65 20 22 25 73 20 72 65 73 70 6f 6e 73 65    20 65 72 72 6f 72 3a 20 25 73 22 20 62 61 63 6b  | age."%s.response.error:.%s".back | 
| 1e920 |  65 6e 64 2d 6e 61 6d 65 20 28 70 6c 69 73 74 2d    67 65 74 20 69 6e 66 6f 20 3a 73 74 61 74 75 73  | end-name.(plist-get.info.:status | 
| 1e940 |  29 29 29 29 29 29 0a 20 20 20 20 20 28 28 6d 65    6d 62 65 72 20 22 6b 22 20 61 72 67 73 29 0a 20  | ))))))......((member."k".args).. | 
| 1e960 |  20 20 20 20 20 28 73 65 74 71 20 73 74 72 65 61    6d 20 6e 69 6c 29 0a 20 20 20 20 20 20 28 73 65  | .....(setq.stream.nil).......(se | 
| 1e980 |  74 71 20 63 61 6c 6c 62 61 63 6b 0a 20 20 20 20    20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20  | tq.callback.............(lambda. | 
| 1e9a0 |  28 72 65 73 70 20 69 6e 66 6f 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e  | (resp.info)...............(if.(n | 
| 1e9c0 |  6f 74 20 72 65 73 70 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6d 65 73 73  | ot.resp)...................(mess | 
| 1e9e0 |  61 67 65 20 22 25 73 20 72 65 73 70 6f 6e 73 65    20 65 72 72 6f 72 3a 20 25 73 22 20 62 61 63 6b  | age."%s.response.error:.%s".back | 
| 1ea00 |  65 6e 64 2d 6e 61 6d 65 20 28 70 6c 69 73 74 2d    67 65 74 20 69 6e 66 6f 20 3a 73 74 61 74 75 73  | end-name.(plist-get.info.:status | 
| 1ea20 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 6b 69 6c 6c 2d 6e 65 77 20 72 65 73  | )).................(kill-new.res | 
| 1ea40 |  70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 6d 65 73 73 61 67 65 20 22 25 73 20  | p).................(message."%s. | 
| 1ea60 |  72 65 73 70 6f 6e 73 65 3a 20 5c 22 25 73 5c 22    20 63 6f 70 69 65 64 20 74 6f 20 6b 69 6c 6c 2d  | response:.\"%s\".copied.to.kill- | 
| 1ea80 |  72 69 6e 67 2e 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ring.".......................... | 
| 1eaa0 |  62 61 63 6b 65 6e 64 2d 6e 61 6d 65 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | backend-name.................... | 
| 1eac0 |  20 20 20 20 20 20 28 74 72 75 6e 63 61 74 65 2d    73 74 72 69 6e 67 2d 74 6f 2d 77 69 64 74 68 20  | ......(truncate-string-to-width. | 
| 1eae0 |  72 65 73 70 20 33 30 29 29 29 29 29 29 0a 20 20    20 20 20 28 28 73 65 74 71 20 67 70 74 65 6c 2d  | resp.30))))))......((setq.gptel- | 
| 1eb00 |  62 75 66 66 65 72 2d 6e 61 6d 65 0a 20 20 20 20    20 20 20 20 20 20 20 20 28 63 6c 2d 73 6f 6d 65  | buffer-name.............(cl-some | 
| 1eb20 |  20 28 6c 61 6d 62 64 61 20 28 73 29 20 28 61 6e    64 20 28 73 74 72 69 6e 67 70 20 73 29 20 28 73  | .(lambda.(s).(and.(stringp.s).(s | 
| 1eb40 |  74 72 69 6e 67 2d 70 72 65 66 69 78 2d 70 20 22    67 22 20 73 29 0a 20 20 20 20 20 20 20 20 20 20  | tring-prefix-p."g".s)........... | 
| 1eb60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 73 75 62 73 74 72 69 6e  | .......................(substrin | 
| 1eb80 |  67 20 73 20 31 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72  | g.s.1)))......................ar | 
| 1eba0 |  67 73 29 29 0a 20 20 20 20 20 20 28 73 65 74 71    20 6f 75 74 70 75 74 2d 74 6f 2d 6f 74 68 65 72  | gs)).......(setq.output-to-other | 
| 1ebc0 |  2d 62 75 66 66 65 72 2d 70 20 74 29 0a 20 20 20    20 20 20 28 6c 65 74 20 28 28 72 65 64 75 63 65  | -buffer-p.t).......(let.((reduce | 
| 1ebe0 |  64 2d 70 72 6f 6d 70 74 20 20 20 20 20 20 20 20    20 20 20 20 20 3b 46 6f 72 20 69 6e 73 65 72 74  | d-prompt.............;For.insert | 
| 1ec00 |  69 6e 67 20 69 6e 74 6f 20 74 68 65 20 67 70 74    65 6c 20 62 75 66 66 65 72 20 61 73 0a 20 20 20  | ing.into.the.gptel.buffer.as.... | 
| 1ec20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1ec40 |  20 20 20 20 20 3b 63 6f 6e 74 65 78 74 2c 20 6e    6f 74 20 74 68 65 20 70 72 6f 6d 70 74 20 75 73  | .....;context,.not.the.prompt.us | 
| 1ec60 |  65 64 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ed.for.the...................... | 
| 1ec80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3b 72 65 71 75 65 73 74 20 69 74 73 65  | ...................;request.itse | 
| 1eca0 |  6c 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    28 6f 72 20 70 72 6f 6d 70 74 0a 20 20 20 20 20  | lf..............(or.prompt...... | 
| 1ecc0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20    28 75 73 65 2d 72 65 67 69 6f 6e 2d 70 29 0a 20  | ............(if.(use-region-p).. | 
| 1ece0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 62 75 66 66 65 72 2d 73 75 62 73  | ....................(buffer-subs | 
| 1ed00 |  74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74    69 65 73 20 28 72 65 67 69 6f 6e 2d 62 65 67 69  | tring-no-properties.(region-begi | 
| 1ed20 |  6e 6e 69 6e 67 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | nning).......................... | 
| 1ed40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 67  | ............................(reg | 
| 1ed60 |  69 6f 6e 2d 65 6e 64 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 75  | ion-end))....................(bu | 
| 1ed80 |  66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 2d 6e    6f 2d 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20  | ffer-substring-no-properties.... | 
| 1eda0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e  | .................(save-excursion | 
| 1edc0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 74 65 78 74 2d 70 72 6f  | .......................(text-pro | 
| 1ede0 |  70 65 72 74 79 2d 73 65 61 72 63 68 2d 62 61 63    6b 77 61 72 64 0a 20 20 20 20 20 20 20 20 20 20  | perty-search-backward........... | 
| 1ee00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 27 67 70    74 65 6c 20 27 72 65 73 70 6f 6e 73 65 0a 20 20  | .............'gptel.'response... | 
| 1ee20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 77 68 65 6e 20 28 67 65 74 2d  | .....................(when.(get- | 
| 1ee40 |  63 68 61 72 2d 70 72 6f 70 65 72 74 79 20 28 6d    61 78 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28  | char-property.(max.(point-min).( | 
| 1ee60 |  31 2d 20 28 70 6f 69 6e 74 29 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | 1-.(point))).................... | 
| 1ee80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 27 67 70  | .............................'gp | 
| 1eea0 |  74 65 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 29  | tel)..........................t) | 
| 1eec0 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 70 6f 69 6e 74 29 29  | ).......................(point)) | 
| 1eee0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 67 70 74 65 6c 2d 2d 61 74 2d  | .....................(gptel--at- | 
| 1ef00 |  77 6f 72 64 2d 65 6e 64 20 28 70 6f 69 6e 74 29    29 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 28  | word-end.(point))))))).........( | 
| 1ef20 |  63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 28 28    62 75 66 66 65 72 2d 6c 69 76 65 2d 70 20 28 67  | cond..........((buffer-live-p.(g | 
| 1ef40 |  65 74 2d 62 75 66 66 65 72 20 67 70 74 65 6c 2d    62 75 66 66 65 72 2d 6e 61 6d 65 29 29 0a 20 20  | et-buffer.gptel-buffer-name))... | 
| 1ef60 |  20 20 20 20 20 20 20 20 3b 3b 20 49 6e 73 65 72    74 20 69 6e 74 6f 20 65 78 69 73 74 69 6e 67 20  | ........;;.Insert.into.existing. | 
| 1ef80 |  67 70 74 65 6c 20 73 65 73 73 69 6f 6e 0a 20 20    20 20 20 20 20 20 20 20 28 70 72 6f 67 6e 0a 20  | gptel.session...........(progn.. | 
| 1efa0 |  20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71    20 62 75 66 66 65 72 20 28 67 65 74 2d 62 75 66  | ...........(setq.buffer.(get-buf | 
| 1efc0 |  66 65 72 20 67 70 74 65 6c 2d 62 75 66 66 65 72    2d 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  | fer.gptel-buffer-name))......... | 
| 1efe0 |  20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e    74 2d 62 75 66 66 65 72 20 62 75 66 66 65 72 0a  | ....(with-current-buffer.buffer. | 
| 1f000 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67    6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d  | ..............(goto-char.(point- | 
| 1f020 |  6d 61 78 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 75 6e 6c 65 73 73 20 28 6f 72 20  | max))...............(unless.(or. | 
| 1f040 |  62 75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | buffer-read-only................ | 
| 1f060 |  20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 2d    63 68 61 72 2d 70 72 6f 70 65 72 74 79 20 28 70  | ...........(get-char-property.(p | 
| 1f080 |  6f 69 6e 74 29 20 27 72 65 61 64 2d 6f 6e 6c 79    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | oint).'read-only)).............. | 
| 1f0a0 |  20 20 20 28 69 6e 73 65 72 74 20 72 65 64 75 63    65 64 2d 70 72 6f 6d 70 74 29 29 0a 20 20 20 20  | ...(insert.reduced-prompt))..... | 
| 1f0c0 |  20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20    70 6f 73 69 74 69 6f 6e 20 28 70 6f 69 6e 74 29  | ..........(setq.position.(point) | 
| 1f0e0 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 77 68 65 6e 20 67 70 74 65 6c 2d 6d 6f 64 65  | )...............(when.gptel-mode | 
| 1f100 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 67 70 74 65 6c 2d 2d 75 70 64 61 74 65 2d  | .................(gptel--update- | 
| 1f120 |  73 74 61 74 75 73 20 22 20 57 61 69 74 69 6e 67    2e 2e 2e 22 20 27 77 61 72 6e 69 6e 67 29 29 29  | status.".Waiting...".'warning))) | 
| 1f140 |  29 29 0a 20 20 20 20 20 20 20 20 20 3b 3b 20 49    6e 73 65 72 74 20 69 6e 74 6f 20 6e 65 77 20 67  | ))..........;;.Insert.into.new.g | 
| 1f160 |  70 74 65 6c 20 73 65 73 73 69 6f 6e 0a 20 20 20    20 20 20 20 20 20 28 74 20 28 73 65 74 71 20 62  | ptel.session..........(t.(setq.b | 
| 1f180 |  75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 67 70 74 65 6c 20 67  | uffer...................(gptel.g | 
| 1f1a0 |  70 74 65 6c 2d 62 75 66 66 65 72 2d 6e 61 6d 65    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ptel-buffer-name................ | 
| 1f1c0 |  20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 69    74 69 6f 6e 2d 63 61 73 65 20 6e 69 6c 0a 20 20  | ..........(condition-case.nil... | 
| 1f1e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 67 70 74 65  | ...........................(gpte | 
| 1f200 |  6c 2d 2d 67 65 74 2d 61 70 69 2d 6b 65 79 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | l--get-api-key)................. | 
| 1f220 |  20 20 20 20 20 20 20 20 20 20 20 28 28 65 72 72    6f 72 20 75 73 65 72 2d 65 72 72 6f 72 29 0a 20  | ...........((error.user-error).. | 
| 1f240 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71  | ...........................(setq | 
| 1f260 |  20 67 70 74 65 6c 2d 61 70 69 2d 6b 65 79 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .gptel-api-key.................. | 
| 1f280 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 72 65 61 64 2d 70 61 73 73 77 64 0a 20 20  | .................(read-passwd... | 
| 1f2a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1f2c0 |  20 28 66 6f 72 6d 61 74 20 22 25 73 20 41 50 49    20 6b 65 79 3a 20 22 0a 20 20 20 20 20 20 20 20  | .(format."%s.API.key:."......... | 
| 1f2e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1f300 |  20 20 20 28 67 70 74 65 6c 2d 62 61 63 6b 65 6e    64 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20  | ...(gptel-backend-name.......... | 
| 1f320 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1f340 |  20 20 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64    29 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20  | ...gptel-backend)))))).......... | 
| 1f360 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    72 65 64 75 63 65 64 2d 70 72 6f 6d 70 74 29 29  | ................reduced-prompt)) | 
| 1f380 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20    53 65 74 20 62 61 63 6b 65 6e 64 20 61 6e 64 20  | .............;;.Set.backend.and. | 
| 1f3a0 |  6d 6f 64 65 6c 20 69 6e 20 6e 65 77 20 73 65 73    73 69 6f 6e 20 66 72 6f 6d 20 63 75 72 72 65 6e  | model.in.new.session.from.curren | 
| 1f3c0 |  74 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 20    20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65  | t.buffer.............(with-curre | 
| 1f3e0 |  6e 74 2d 62 75 66 66 65 72 20 62 75 66 66 65 72    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | nt-buffer.buffer...............( | 
| 1f400 |  73 65 74 71 20 67 70 74 65 6c 2d 62 61 63 6b 65    6e 64 20 62 61 63 6b 65 6e 64 29 0a 20 20 20 20  | setq.gptel-backend.backend)..... | 
| 1f420 |  20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20    67 70 74 65 6c 2d 6d 6f 64 65 6c 20 6d 6f 64 65  | ..........(setq.gptel-model.mode | 
| 1f440 |  6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 67 70 74 65 6c 2d 2d 75 70 64 61 74 65 2d  | l)...............(gptel--update- | 
| 1f460 |  73 74 61 74 75 73 20 22 20 57 61 69 74 69 6e 67    2e 2e 2e 22 20 27 77 61 72 6e 69 6e 67 29 0a 20  | status.".Waiting...".'warning).. | 
| 1f480 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65    74 71 20 70 6f 73 69 74 69 6f 6e 20 28 70 6f 69  | .............(setq.position.(poi | 
| 1f4a0 |  6e 74 29 29 29 29 29 29 29 0a 20 20 20 20 20 28    28 73 65 74 71 20 67 70 74 65 6c 2d 62 75 66 66  | nt)))))))......((setq.gptel-buff | 
| 1f4c0 |  65 72 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6c 2d 73 6f 6d 65 20 28 6c 61  | er-name.............(cl-some.(la | 
| 1f4e0 |  6d 62 64 61 20 28 73 29 20 28 61 6e 64 20 28 73    74 72 69 6e 67 70 20 73 29 20 28 73 74 72 69 6e  | mbda.(s).(and.(stringp.s).(strin | 
| 1f500 |  67 2d 70 72 65 66 69 78 2d 70 20 22 62 22 20 73    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | g-prefix-p."b".s)............... | 
| 1f520 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 73 75 62 73 74 72 69 6e 67 20 73 20  | ...................(substring.s. | 
| 1f540 |  31 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 61 72 67 73 29 29  | 1)))......................args)) | 
| 1f560 |  0a 20 20 20 20 20 20 28 73 65 74 71 20 6f 75 74    70 75 74 2d 74 6f 2d 6f 74 68 65 72 2d 62 75 66  | .......(setq.output-to-other-buf | 
| 1f580 |  66 65 72 2d 70 20 74 29 0a 20 20 20 20 20 20 28    73 65 74 71 20 62 75 66 66 65 72 20 28 67 65 74  | fer-p.t).......(setq.buffer.(get | 
| 1f5a0 |  2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 67    70 74 65 6c 2d 62 75 66 66 65 72 2d 6e 61 6d 65  | -buffer-create.gptel-buffer-name | 
| 1f5c0 |  29 29 0a 20 20 20 20 20 20 28 77 69 74 68 2d 63    75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 62 75  | )).......(with-current-buffer.bu | 
| 1f5e0 |  66 66 65 72 20 28 73 65 74 71 20 70 6f 73 69 74    69 6f 6e 20 28 70 6f 69 6e 74 29 29 29 29 29 0a  | ffer.(setq.position.(point))))). | 
| 1f600 |  0a 20 20 20 20 28 70 72 6f 67 31 20 28 67 70 74    65 6c 2d 72 65 71 75 65 73 74 20 70 72 6f 6d 70  | .....(prog1.(gptel-request.promp | 
| 1f620 |  74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    62 75 66 66 65 72 20 28 6f 72 20 62 75 66 66 65  | t..............:buffer.(or.buffe | 
| 1f640 |  72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65    72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | r.(current-buffer))............. | 
| 1f660 |  20 3a 70 6f 73 69 74 69 6f 6e 20 70 6f 73 69 74    69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  | .:position.position............. | 
| 1f680 |  20 3a 69 6e 2d 70 6c 61 63 65 20 28 61 6e 64 20    69 6e 2d 70 6c 61 63 65 20 28 6e 6f 74 20 6f 75  | .:in-place.(and.in-place.(not.ou | 
| 1f6a0 |  74 70 75 74 2d 74 6f 2d 6f 74 68 65 72 2d 62 75    66 66 65 72 2d 70 29 29 0a 20 20 20 20 20 20 20  | tput-to-other-buffer-p))........ | 
| 1f6c0 |  20 20 20 20 20 20 3a 73 74 72 65 61 6d 20 73 74    72 65 61 6d 0a 20 20 20 20 20 20 20 20 20 20 20  | ......:stream.stream............ | 
| 1f6e0 |  20 20 3a 73 79 73 74 65 6d 20 28 63 6f 6e 63 61    74 20 67 70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d  | ..:system.(concat.gptel--system- | 
| 1f700 |  6d 65 73 73 61 67 65 20 73 79 73 74 65 6d 2d 65    78 74 72 61 29 0a 20 20 20 20 20 20 20 20 20 20  | message.system-extra)........... | 
| 1f720 |  20 20 20 3a 63 61 6c 6c 62 61 63 6b 20 63 61 6c    6c 62 61 63 6b 0a 20 20 20 20 20 20 20 20 20 20  | ...:callback.callback........... | 
| 1f740 |  20 20 20 3a 64 72 79 2d 72 75 6e 20 64 72 79 2d    72 75 6e 29 0a 0a 20 20 20 20 20 20 28 67 70 74  | ...:dry-run.dry-run)........(gpt | 
| 1f760 |  65 6c 2d 2d 75 70 64 61 74 65 2d 73 74 61 74 75    73 20 22 20 57 61 69 74 69 6e 67 2e 2e 2e 22 20  | el--update-status.".Waiting...". | 
| 1f780 |  27 77 61 72 6e 69 6e 67 29 0a 0a 20 20 20 20 20    20 3b 3b 20 4e 4f 54 45 3a 20 50 6f 73 73 69 62  | 'warning)........;;.NOTE:.Possib | 
| 1f7a0 |  6c 65 20 66 75 74 75 72 65 20 72 61 63 65 20 63    6f 6e 64 69 74 69 6f 6e 20 68 65 72 65 20 69 66  | le.future.race.condition.here.if | 
| 1f7c0 |  20 45 6d 61 63 73 20 65 76 65 72 20 64 72 6f 70    73 20 74 68 65 20 47 49 4c 2e 0a 20 20 20 20 20  | .Emacs.ever.drops.the.GIL....... | 
| 1f7e0 |  20 3b 3b 20 54 68 65 20 48 54 54 50 20 72 65 71    75 65 73 74 20 63 61 6c 6c 62 61 63 6b 20 6d 69  | .;;.The.HTTP.request.callback.mi | 
| 1f800 |  67 68 74 20 6d 6f 64 69 66 79 20 74 68 65 20 62    75 66 66 65 72 20 62 65 66 6f 72 65 20 74 68 65  | ght.modify.the.buffer.before.the | 
| 1f820 |  20 69 6e 2d 70 6c 61 63 65 0a 20 20 20 20 20 20    3b 3b 20 74 65 78 74 20 69 73 20 6b 69 6c 6c 65  | .in-place.......;;.text.is.kille | 
| 1f840 |  64 20 62 65 6c 6f 77 2e 0a 20 20 20 20 20 20 28    77 68 65 6e 20 69 6e 2d 70 6c 61 63 65 0a 20 20  | d.below........(when.in-place... | 
| 1f860 |  20 20 20 20 20 20 3b 3b 20 4b 69 6c 6c 20 74 68    65 20 6c 61 74 65 73 74 20 70 72 6f 6d 70 74 0a  | ......;;.Kill.the.latest.prompt. | 
| 1f880 |  20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 62    65 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ........(let.((beg.............. | 
| 1f8a0 |  20 20 28 69 66 20 28 75 73 65 2d 72 65 67 69 6f    6e 2d 70 29 0a 20 20 20 20 20 20 20 20 20 20 20  | ..(if.(use-region-p)............ | 
| 1f8c0 |  20 20 20 20 20 20 20 20 28 72 65 67 69 6f 6e 2d    62 65 67 69 6e 6e 69 6e 67 29 0a 20 20 20 20 20  | ........(region-beginning)...... | 
| 1f8e0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 73 61 76    65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20  | ............(save-excursion..... | 
| 1f900 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    74 65 78 74 2d 70 72 6f 70 65 72 74 79 2d 73 65  | ...............(text-property-se | 
| 1f920 |  61 72 63 68 2d 62 61 63 6b 77 61 72 64 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | arch-backward................... | 
| 1f940 |  20 20 27 67 70 74 65 6c 20 27 72 65 73 70 6f 6e    73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..'gptel.'response.............. | 
| 1f960 |  20 20 20 20 20 20 20 28 77 68 65 6e 20 28 67 65    74 2d 63 68 61 72 2d 70 72 6f 70 65 72 74 79 20  | .......(when.(get-char-property. | 
| 1f980 |  28 6d 61 78 20 28 70 6f 69 6e 74 2d 6d 69 6e 29    20 28 31 2d 20 28 70 6f 69 6e 74 29 29 29 0a 20  | (max.(point-min).(1-.(point))).. | 
| 1f9a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1f9c0 |  20 20 20 20 20 20 20 20 20 20 20 20 27 67 70 74    65 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | ............'gptel)............. | 
| 1f9e0 |  20 20 20 20 20 20 20 20 20 20 74 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..........t))................... | 
| 1fa00 |  20 28 70 6f 69 6e 74 29 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 65 6e 64 20 28  | .(point))))...............(end.( | 
| 1fa20 |  69 66 20 28 75 73 65 2d 72 65 67 69 6f 6e 2d 70    29 20 28 72 65 67 69 6f 6e 2d 65 6e 64 29 20 28  | if.(use-region-p).(region-end).( | 
| 1fa40 |  70 6f 69 6e 74 29 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 28 75 6e 6c 65 73 73 20 6f 75 74 70  | point))))...........(unless.outp | 
| 1fa60 |  75 74 2d 74 6f 2d 6f 74 68 65 72 2d 62 75 66 66    65 72 2d 70 0a 20 20 20 20 20 20 20 20 20 20 20  | ut-to-other-buffer-p............ | 
| 1fa80 |  20 3b 3b 20 73 74 6f 72 65 20 74 68 65 20 6b 69    6c 6c 65 64 20 74 65 78 74 20 69 6e 20 67 70 74  | .;;.store.the.killed.text.in.gpt | 
| 1faa0 |  65 6c 2d 68 69 73 74 6f 72 79 0a 20 20 20 20 20    20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 2d 61  | el-history.............(gptel--a | 
| 1fac0 |  74 74 61 63 68 2d 72 65 73 70 6f 6e 73 65 2d 68    69 73 74 6f 72 79 0a 20 20 20 20 20 20 20 20 20  | ttach-response-history.......... | 
| 1fae0 |  20 20 20 20 28 6c 69 73 74 20 28 62 75 66 66 65    72 2d 73 75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70  | ....(list.(buffer-substring-no-p | 
| 1fb00 |  72 6f 70 65 72 74 69 65 73 20 62 65 67 20 65 6e    64 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20  | roperties.beg.end))))........... | 
| 1fb20 |  28 6b 69 6c 6c 2d 72 65 67 69 6f 6e 20 62 65 67    20 65 6e 64 29 29 29 0a 0a 20 20 20 20 20 20 28  | (kill-region.beg.end)))........( | 
| 1fb40 |  77 68 65 6e 20 6f 75 74 70 75 74 2d 74 6f 2d 6f    74 68 65 72 2d 62 75 66 66 65 72 2d 70 0a 20 20  | when.output-to-other-buffer-p... | 
| 1fb60 |  20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 28    63 6f 6e 63 61 74 20 22 50 72 6f 6d 70 74 20 73  | ......(message.(concat."Prompt.s | 
| 1fb80 |  65 6e 74 20 74 6f 20 62 75 66 66 65 72 3a 20 22    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ent.to.buffer:."................ | 
| 1fba0 |  20 20 20 20 20 20 20 20 20 20 28 70 72 6f 70 65    72 74 69 7a 65 20 67 70 74 65 6c 2d 62 75 66 66  | ..........(propertize.gptel-buff | 
| 1fbc0 |  65 72 2d 6e 61 6d 65 20 27 66 61 63 65 20 27 68    65 6c 70 2d 6b 65 79 2d 62 69 6e 64 69 6e 67 29  | er-name.'face.'help-key-binding) | 
| 1fbe0 |  29 29 0a 20 20 20 20 20 20 20 20 28 64 69 73 70    6c 61 79 2d 62 75 66 66 65 72 0a 20 20 20 20 20  | )).........(display-buffer...... | 
| 1fc00 |  20 20 20 20 62 75 66 66 65 72 20 27 28 28 64 69    73 70 6c 61 79 2d 62 75 66 66 65 72 2d 72 65 75  | ....buffer.'((display-buffer-reu | 
| 1fc20 |  73 65 2d 77 69 6e 64 6f 77 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73  | se-window....................dis | 
| 1fc40 |  70 6c 61 79 2d 62 75 66 66 65 72 2d 70 6f 70 2d    75 70 2d 77 69 6e 64 6f 77 29 0a 20 20 20 20 20  | play-buffer-pop-up-window)...... | 
| 1fc60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65    75 73 61 62 6c 65 2d 66 72 61 6d 65 73 20 2e 20  | .............(reusable-frames... | 
| 1fc80 |  76 69 73 69 62 6c 65 29 29 29 29 29 29 29 0a 0a    3b 3b 20 41 6c 6c 6f 77 20 63 61 6c 6c 69 6e 67  | visible)))))))..;;.Allow.calling | 
| 1fca0 |  20 66 72 6f 6d 20 65 6c 69 73 70 0a 28 70 75 74    20 27 67 70 74 65 6c 2d 2d 73 75 66 66 69 78 2d  | .from.elisp.(put.'gptel--suffix- | 
| 1fcc0 |  73 65 6e 64 20 27 69 6e 74 65 72 61 63 74 69 76    65 2d 6f 6e 6c 79 20 6e 69 6c 29 0a 0a 3b 3b 20  | send.'interactive-only.nil)..;;. | 
| 1fce0 |  2a 2a 20 53 75 66 66 69 78 20 74 6f 20 72 65 67    65 6e 65 72 61 74 65 20 72 65 73 70 6f 6e 73 65  | **.Suffix.to.regenerate.response | 
| 1fd00 |  0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d    72 65 67 65 6e 65 72 61 74 65 20 28 29 0a 20 20  | ..(defun.gptel--regenerate.()... | 
| 1fd20 |  22 52 65 67 65 6e 65 72 61 74 65 20 67 70 74 65    6c 20 72 65 73 70 6f 6e 73 65 20 61 74 20 70 6f  | "Regenerate.gptel.response.at.po | 
| 1fd40 |  69 6e 74 2e 22 0a 20 20 28 69 6e 74 65 72 61 63    74 69 76 65 29 0a 20 20 28 77 68 65 6e 20 28 67  | int."...(interactive)...(when.(g | 
| 1fd60 |  70 74 65 6c 2d 2d 69 6e 2d 72 65 73 70 6f 6e 73    65 2d 70 29 0a 20 20 20 20 28 70 63 61 73 65 2d  | ptel--in-response-p).....(pcase- | 
| 1fd80 |  6c 65 74 2a 20 28 28 60 28 2c 62 65 67 20 2e 20    2c 65 6e 64 29 20 28 67 70 74 65 6c 2d 2d 67 65  | let*.((`(,beg...,end).(gptel--ge | 
| 1fda0 |  74 2d 62 6f 75 6e 64 73 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 68 69 73  | t-bounds))..................(his | 
| 1fdc0 |  74 6f 72 79 20 28 67 65 74 2d 63 68 61 72 2d 70    72 6f 70 65 72 74 79 20 28 70 6f 69 6e 74 29 20  | tory.(get-char-property.(point). | 
| 1fde0 |  27 67 70 74 65 6c 2d 68 69 73 74 6f 72 79 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | 'gptel-history))................ | 
| 1fe00 |  20 20 28 70 72 65 76 2d 72 65 73 70 6f 6e 73 65    73 20 28 63 6f 6e 73 20 28 62 75 66 66 65 72 2d  | ..(prev-responses.(cons.(buffer- | 
| 1fe20 |  73 75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f    70 65 72 74 69 65 73 20 62 65 67 20 65 6e 64 29  | substring-no-properties.beg.end) | 
| 1fe40 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 1fe60 |  20 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 29    29 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 67  | ........history))).......(when.g | 
| 1fe80 |  70 74 65 6c 2d 6d 6f 64 65 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 3b 52 65 6d 6f  | ptel-mode..................;Remo | 
| 1fea0 |  76 65 20 70 72 65 66 69 78 2f 73 75 66 66 69 78    0a 20 20 20 20 20 20 20 20 28 73 61 76 65 2d 65  | ve.prefix/suffix.........(save-e | 
| 1fec0 |  78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20    20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 62 65  | xcursion...........(goto-char.be | 
| 1fee0 |  67 29 0a 20 20 20 20 20 20 20 20 20 20 28 77 68    65 6e 20 28 6c 6f 6f 6b 69 6e 67 2d 62 61 63 6b  | g)...........(when.(looking-back | 
| 1ff00 |  20 28 63 6f 6e 63 61 74 20 22 5c 6e 2b 22 20 28    72 65 67 65 78 70 2d 71 75 6f 74 65 20 28 67 70  | .(concat."\n+".(regexp-quote.(gp | 
| 1ff20 |  74 65 6c 2d 72 65 73 70 6f 6e 73 65 2d 70 72 65    66 69 78 2d 73 74 72 69 6e 67 29 29 29 0a 20 20  | tel-response-prefix-string)))... | 
| 1ff40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 70 6f 69  | ............................(poi | 
| 1ff60 |  6e 74 2d 6d 69 6e 29 20 27 67 72 65 65 64 79 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65  | nt-min).'greedy).............(se | 
| 1ff80 |  74 71 20 62 65 67 20 28 6d 61 74 63 68 2d 62 65    67 69 6e 6e 69 6e 67 20 30 29 29 29 0a 20 20 20  | tq.beg.(match-beginning.0))).... | 
| 1ffa0 |  20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61    72 20 65 6e 64 29 0a 20 20 20 20 20 20 20 20 20  | .......(goto-char.end).......... | 
| 1ffc0 |  20 28 77 68 65 6e 20 28 6c 6f 6f 6b 69 6e 67 2d    61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | .(when.(looking-at.............. | 
| 1ffe0 |  20 20 20 20 28 63 6f 6e 63 61 74 20 22 5c 6e 2b    22 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20  | ....(concat."\n+".(regexp-quote. | 
| 20000 |  28 67 70 74 65 6c 2d 70 72 6f 6d 70 74 2d 70 72    65 66 69 78 2d 73 74 72 69 6e 67 29 29 29 29 0a  | (gptel-prompt-prefix-string)))). | 
| 20020 |  20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74    71 20 65 6e 64 20 28 6d 61 74 63 68 2d 65 6e 64  | ............(setq.end.(match-end | 
| 20040 |  20 30 29 29 29 29 29 0a 20 20 20 20 20 20 28 64    65 6c 65 74 65 2d 72 65 67 69 6f 6e 20 62 65 67  | .0))))).......(delete-region.beg | 
| 20060 |  20 65 6e 64 29 0a 20 20 20 20 20 20 28 67 70 74    65 6c 2d 2d 61 74 74 61 63 68 2d 72 65 73 70 6f  | .end).......(gptel--attach-respo | 
| 20080 |  6e 73 65 2d 68 69 73 74 6f 72 79 20 70 72 65 76    2d 72 65 73 70 6f 6e 73 65 73 29 0a 20 20 20 20  | nse-history.prev-responses)..... | 
| 200a0 |  20 20 28 63 61 6c 6c 2d 69 6e 74 65 72 61 63 74    69 76 65 6c 79 20 23 27 67 70 74 65 6c 2d 2d 73  | ..(call-interactively.#'gptel--s | 
| 200c0 |  75 66 66 69 78 2d 73 65 6e 64 29 29 29 29 0a 0a    3b 3b 20 2a 2a 20 53 65 74 20 73 79 73 74 65 6d  | uffix-send))))..;;.**.Set.system | 
| 200e0 |  20 6d 65 73 73 61 67 65 0a 28 64 65 66 75 6e 20    67 70 74 65 6c 2d 2d 72 65 61 64 2d 63 72 6f 77  | .message.(defun.gptel--read-crow | 
| 20100 |  64 73 6f 75 72 63 65 64 2d 70 72 6f 6d 70 74 20    28 29 0a 20 20 22 50 69 63 6b 20 61 20 63 72 6f  | dsourced-prompt.()..."Pick.a.cro | 
| 20120 |  77 64 73 6f 75 72 63 65 64 20 73 79 73 74 65 6d    20 70 72 6f 6d 70 74 20 66 6f 72 20 67 70 74 65  | wdsourced.system.prompt.for.gpte | 
| 20140 |  6c 2e 0a 0a 54 68 69 73 20 75 73 65 73 20 74 68    65 20 70 72 6f 6d 70 74 73 20 69 6e 20 74 68 65  | l...This.uses.the.prompts.in.the | 
| 20160 |  20 76 61 72 69 61 62 6c 65 0a 60 67 70 74 65 6c    2d 2d 63 72 6f 77 64 73 6f 75 72 63 65 64 2d 70  | .variable.`gptel--crowdsourced-p | 
| 20180 |  72 6f 6d 70 74 73 27 2c 20 77 68 69 63 68 20 73    65 65 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74  | rompts',.which.see."...(interact | 
| 201a0 |  69 76 65 29 0a 20 20 28 69 66 20 28 6e 6f 74 20    28 68 61 73 68 2d 74 61 62 6c 65 2d 65 6d 70 74  | ive)...(if.(not.(hash-table-empt | 
| 201c0 |  79 2d 70 20 28 67 70 74 65 6c 2d 2d 63 72 6f 77    64 73 6f 75 72 63 65 64 2d 70 72 6f 6d 70 74 73  | y-p.(gptel--crowdsourced-prompts | 
| 201e0 |  29 29 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28    28 63 68 6f 69 63 65 0a 20 20 20 20 20 20 20 20  | ))).......(let.((choice......... | 
| 20200 |  20 20 20 20 20 28 63 6f 6d 70 6c 65 74 69 6e 67    2d 72 65 61 64 0a 20 20 20 20 20 20 20 20 20 20  | .....(completing-read........... | 
| 20220 |  20 20 20 20 22 50 69 63 6b 20 61 6e 64 20 65 64    69 74 20 70 72 6f 6d 70 74 3a 20 22 0a 20 20 20  | ...."Pick.and.edit.prompt:.".... | 
| 20240 |  20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62    64 61 20 28 73 74 72 20 70 72 65 64 20 61 63 74  | ...........(lambda.(str.pred.act | 
| 20260 |  69 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 69 66 20 28 65 71 20 61 63 74  | ion).................(if.(eq.act | 
| 20280 |  69 6f 6e 20 27 6d 65 74 61 64 61 74 61 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ion.'metadata).................. | 
| 202a0 |  20 20 20 60 28 6d 65 74 61 64 61 74 61 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ...`(metadata................... | 
| 202c0 |  20 20 20 20 28 61 66 66 69 78 61 74 69 6f 6e 2d    66 75 6e 63 74 69 6f 6e 20 2e 0a 20 20 20 20 20  | ....(affixation-function........ | 
| 202e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 6c 61 6d 62 64 61 20 28 63 61 6e 64 73  | ..................(lambda.(cands | 
| 20300 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63  | )..........................(mapc | 
| 20320 |  61 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61  | ar...........................(la | 
| 20340 |  6d 62 64 61 20 28 63 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | mbda.(c)........................ | 
| 20360 |  20 20 20 20 20 28 6c 69 73 74 20 63 20 22 22 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .....(list.c.""................. | 
| 20380 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f    6e 63 61 74 20 28 70 72 6f 70 65 72 74 69 7a 65  | .............(concat.(propertize | 
| 203a0 |  20 22 20 22 20 27 64 69 73 70 6c 61 79 20 27 28    73 70 61 63 65 20 3a 61 6c 69 67 6e 2d 74 6f 20  | .".".'display.'(space.:align-to. | 
| 203c0 |  32 32 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | 22))............................ | 
| 203e0 |  20 20 20 22 20 22 20 28 70 72 6f 70 65 72 74 69    7a 65 20 28 67 65 74 68 61 73 68 20 63 20 67 70  | ...".".(propertize.(gethash.c.gp | 
| 20400 |  74 65 6c 2d 2d 63 72 6f 77 64 73 6f 75 72 63 65    64 2d 70 72 6f 6d 70 74 73 29 0a 20 20 20 20 20  | tel--crowdsourced-prompts)...... | 
| 20420 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 27 66 61 63 65 20  | ..........................'face. | 
| 20440 |  27 63 6f 6d 70 6c 65 74 69 6f 6e 73 2d 61 6e 6e    6f 74 61 74 69 6f 6e 73 29 29 29 29 0a 20 20 20  | 'completions-annotations)))).... | 
| 20460 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 63 61 6e 64 73 29 29 29 29  | .......................cands)))) | 
| 20480 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 63 6f 6d 70 6c 65 74 65 2d 77 69 74  | ...................(complete-wit | 
| 204a0 |  68 2d 61 63 74 69 6f 6e 20 61 63 74 69 6f 6e 20    67 70 74 65 6c 2d 2d 63 72 6f 77 64 73 6f 75 72  | h-action.action.gptel--crowdsour | 
| 204c0 |  63 65 64 2d 70 72 6f 6d 70 74 73 20 73 74 72 20    70 72 65 64 29 29 29 0a 20 20 20 20 20 20 20 20  | ced-prompts.str.pred)))......... | 
| 204e0 |  20 20 20 20 20 20 6e 69 6c 20 74 29 29 29 0a 20    20 20 20 20 20 20 20 28 77 68 65 6e 2d 6c 65 74  | ......nil.t))).........(when-let | 
| 20500 |  20 28 28 70 72 6f 6d 70 74 20 28 67 65 74 68 61    73 68 20 63 68 6f 69 63 65 20 67 70 74 65 6c 2d  | .((prompt.(gethash.choice.gptel- | 
| 20520 |  2d 63 72 6f 77 64 73 6f 75 72 63 65 64 2d 70 72    6f 6d 70 74 73 29 29 29 0a 20 20 20 20 20 20 20  | -crowdsourced-prompts)))........ | 
| 20540 |  20 20 20 20 20 28 73 65 74 71 20 67 70 74 65 6c    2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73 61 67 65  | .....(setq.gptel--system-message | 
| 20560 |  20 70 72 6f 6d 70 74 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 28 63 61 6c 6c 2d 69 6e 74 65 72  | .prompt).............(call-inter | 
| 20580 |  61 63 74 69 76 65 6c 79 20 23 27 67 70 74 65 6c    2d 2d 73 75 66 66 69 78 2d 73 79 73 74 65 6d 2d  | actively.#'gptel--suffix-system- | 
| 205a0 |  6d 65 73 73 61 67 65 29 29 29 0a 20 20 20 20 28    6d 65 73 73 61 67 65 20 22 4e 6f 20 70 72 6f 6d  | message))).....(message."No.prom | 
| 205c0 |  70 74 73 20 61 76 61 69 6c 61 62 6c 65 2e 22 29    29 29 0a 0a 28 74 72 61 6e 73 69 65 6e 74 2d 64  | pts.available.")))..(transient-d | 
| 205e0 |  65 66 69 6e 65 2d 73 75 66 66 69 78 20 67 70 74    65 6c 2d 2d 73 75 66 66 69 78 2d 73 79 73 74 65  | efine-suffix.gptel--suffix-syste | 
| 20600 |  6d 2d 6d 65 73 73 61 67 65 20 28 29 0a 20 20 22    45 64 69 74 20 4c 4c 4d 20 73 79 73 74 65 6d 20  | m-message.()..."Edit.LLM.system. | 
| 20620 |  6d 65 73 73 61 67 65 2e 0a 0a 57 68 65 6e 20 4c    4f 43 41 4c 20 69 73 20 6e 6f 6e 2d 6e 69 6c 2c  | message...When.LOCAL.is.non-nil, | 
| 20640 |  20 73 65 74 20 74 68 65 20 73 79 73 74 65 6d 20    6d 65 73 73 61 67 65 20 6f 6e 6c 79 20 69 6e 20  | .set.the.system.message.only.in. | 
| 20660 |  74 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66    65 72 2e 22 0a 20 20 3a 74 72 61 6e 73 69 65 6e  | the.current.buffer."...:transien | 
| 20680 |  74 20 27 74 72 61 6e 73 69 65 6e 74 2d 2d 64 6f    2d 65 78 69 74 0a 20 20 3a 64 65 73 63 72 69 70  | t.'transient--do-exit...:descrip | 
| 206a0 |  74 69 6f 6e 20 22 53 65 74 20 6f 72 20 65 64 69    74 20 73 79 73 74 65 6d 20 6d 65 73 73 61 67 65  | tion."Set.or.edit.system.message | 
| 206c0 |  22 0a 20 20 3a 66 6f 72 6d 61 74 20 22 20 25 6b    20 20 20 25 64 22 0a 20 20 3a 6b 65 79 20 22 73  | "...:format.".%k...%d"...:key."s | 
| 206e0 |  22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65    29 0a 20 20 28 6c 65 74 20 28 28 6f 72 69 67 2d  | "...(interactive)...(let.((orig- | 
| 20700 |  62 75 66 20 28 63 75 72 72 65 6e 74 2d 62 75 66    66 65 72 29 29 0a 20 20 20 20 20 20 20 20 28 6d  | buf.(current-buffer)).........(m | 
| 20720 |  73 67 2d 73 74 61 72 74 20 28 6d 61 6b 65 2d 6d    61 72 6b 65 72 29 29 29 0a 20 20 20 20 28 77 69  | sg-start.(make-marker))).....(wi | 
| 20740 |  74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65    72 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72  | th-current-buffer.(get-buffer-cr | 
| 20760 |  65 61 74 65 20 22 2a 67 70 74 65 6c 2d 73 79 73    74 65 6d 2a 22 29 0a 20 20 20 20 20 20 28 6c 65  | eate."*gptel-system*").......(le | 
| 20780 |  74 20 28 28 69 6e 68 69 62 69 74 2d 72 65 61 64    2d 6f 6e 6c 79 20 74 29 29 0a 20 20 20 20 20 20  | t.((inhibit-read-only.t))....... | 
| 207a0 |  20 20 28 65 72 61 73 65 2d 62 75 66 66 65 72 29    0a 20 20 20 20 20 20 20 20 28 74 65 78 74 2d 6d  | ..(erase-buffer).........(text-m | 
| 207c0 |  6f 64 65 29 0a 20 20 20 20 20 20 20 20 28 73 65    74 71 20 68 65 61 64 65 72 2d 6c 69 6e 65 2d 66  | ode).........(setq.header-line-f | 
| 207e0 |  6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6f 6e 63 61 74 0a 20 20 20 20  | ormat...............(concat..... | 
| 20800 |  20 20 20 20 20 20 20 20 20 20 20 22 45 64 69 74    20 79 6f 75 72 20 73 79 73 74 65 6d 20 6d 65 73  | ..........."Edit.your.system.mes | 
| 20820 |  73 61 67 65 20 62 65 6c 6f 77 20 61 6e 64 20 70    72 65 73 73 20 22 0a 20 20 20 20 20 20 20 20 20  | sage.below.and.press.".......... | 
| 20840 |  20 20 20 20 20 20 28 70 72 6f 70 65 72 74 69 7a    65 20 22 43 2d 63 20 43 2d 63 22 20 27 66 61 63  | ......(propertize."C-c.C-c".'fac | 
| 20860 |  65 20 27 68 65 6c 70 2d 6b 65 79 2d 62 69 6e 64    69 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20 20  | e.'help-key-binding)............ | 
| 20880 |  20 20 20 20 22 20 77 68 65 6e 20 72 65 61 64 79    2c 20 6f 72 20 22 0a 20 20 20 20 20 20 20 20 20  | ....".when.ready,.or.".......... | 
| 208a0 |  20 20 20 20 20 20 28 70 72 6f 70 65 72 74 69 7a    65 20 22 43 2d 63 20 43 2d 6b 22 20 27 66 61 63  | ......(propertize."C-c.C-k".'fac | 
| 208c0 |  65 20 27 68 65 6c 70 2d 6b 65 79 2d 62 69 6e 64    69 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20 20  | e.'help-key-binding)............ | 
| 208e0 |  20 20 20 20 22 20 74 6f 20 61 62 6f 72 74 2e 22    29 29 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65  | ....".to.abort.")).........(inse | 
| 20900 |  72 74 0a 20 20 20 20 20 20 20 20 20 22 23 20 45    78 61 6d 70 6c 65 3a 20 59 6f 75 20 61 72 65 20  | rt.........."#.Example:.You.are. | 
| 20920 |  61 20 68 65 6c 70 66 75 6c 20 61 73 73 69 73 74    61 6e 74 2e 20 41 6e 73 77 65 72 20 61 73 20 63  | a.helpful.assistant..Answer.as.c | 
| 20940 |  6f 6e 63 69 73 65 6c 79 20 61 73 20 70 6f 73 73    69 62 6c 65 2e 5c 6e 22 0a 20 20 20 20 20 20 20  | oncisely.as.possible.\n"........ | 
| 20960 |  20 20 22 23 20 45 78 61 6d 70 6c 65 3a 20 52 65    70 6c 79 20 6f 6e 6c 79 20 77 69 74 68 20 73 68  | .."#.Example:.Reply.only.with.sh | 
| 20980 |  65 6c 6c 20 63 6f 6d 6d 61 6e 64 73 20 61 6e 64    20 6e 6f 20 70 72 6f 73 65 2e 5c 6e 22 0a 20 20  | ell.commands.and.no.prose.\n"... | 
| 209a0 |  20 20 20 20 20 20 20 22 23 20 45 78 61 6d 70 6c    65 3a 20 59 6f 75 20 61 72 65 20 61 20 70 6f 65  | ......."#.Example:.You.are.a.poe | 
| 209c0 |  74 2e 20 52 65 70 6c 79 20 6f 6e 6c 79 20 69 6e    20 76 65 72 73 65 2e 5c 6e 5c 6e 22 29 0a 20 20  | t..Reply.only.in.verse.\n\n")... | 
| 209e0 |  20 20 20 20 20 20 28 61 64 64 2d 74 65 78 74 2d    70 72 6f 70 65 72 74 69 65 73 0a 20 20 20 20 20  | ......(add-text-properties...... | 
| 20a00 |  20 20 20 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20    28 31 2d 20 28 70 6f 69 6e 74 29 29 0a 20 20 20  | ....(point-min).(1-.(point)).... | 
| 20a20 |  20 20 20 20 20 20 28 6c 69 73 74 20 27 72 65 61    64 2d 6f 6e 6c 79 20 74 20 27 66 61 63 65 20 27  | ......(list.'read-only.t.'face.' | 
| 20a40 |  66 6f 6e 74 2d 6c 6f 63 6b 2d 63 6f 6d 6d 65 6e    74 2d 66 61 63 65 29 29 0a 20 20 20 20 20 20 20  | font-lock-comment-face))........ | 
| 20a60 |  20 3b 3b 20 54 4f 44 4f 3a 20 6d 61 6b 65 2d 73    65 70 61 72 61 74 6f 72 2d 6c 69 6e 65 20 72 65  | .;;.TODO:.make-separator-line.re | 
| 20a80 |  71 75 69 72 65 73 20 45 6d 61 63 73 20 32 38 2e    31 2b 2e 0a 20 20 20 20 20 20 20 20 3b 3b 20 28  | quires.Emacs.28.1+..........;;.( | 
| 20aa0 |  69 6e 73 65 72 74 20 28 70 72 6f 70 65 72 74 69    7a 65 20 28 6d 61 6b 65 2d 73 65 70 61 72 61 74  | insert.(propertize.(make-separat | 
| 20ac0 |  6f 72 2d 6c 69 6e 65 29 20 27 72 65 61 72 2d 6e    6f 6e 73 74 69 63 6b 79 20 74 29 29 0a 20 20 20  | or-line).'rear-nonsticky.t)).... | 
| 20ae0 |  20 20 20 20 20 28 73 65 74 2d 6d 61 72 6b 65 72    20 6d 73 67 2d 73 74 61 72 74 20 28 70 6f 69 6e  | .....(set-marker.msg-start.(poin | 
| 20b00 |  74 29 29 0a 20 20 20 20 20 20 20 20 28 73 61 76    65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20  | t)).........(save-excursion..... | 
| 20b20 |  20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 62    75 66 66 65 72 2d 6c 6f 63 61 6c 2d 76 61 6c 75  | ......(insert.(buffer-local-valu | 
| 20b40 |  65 20 27 67 70 74 65 6c 2d 2d 73 79 73 74 65 6d    2d 6d 65 73 73 61 67 65 20 6f 72 69 67 2d 62 75  | e.'gptel--system-message.orig-bu | 
| 20b60 |  66 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 70    75 73 68 2d 6d 61 72 6b 20 6e 69 6c 20 27 6e 6f  | f))...........(push-mark.nil.'no | 
| 20b80 |  6d 73 67 29 29 0a 20 20 20 20 20 20 20 20 28 61    63 74 69 76 61 74 65 2d 6d 61 72 6b 29 29 0a 20  | msg)).........(activate-mark)).. | 
| 20ba0 |  20 20 20 20 20 28 64 69 73 70 6c 61 79 2d 62 75    66 66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75  | .....(display-buffer.(current-bu | 
| 20bc0 |  66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 60 28 28 64  | ffer).......................`((d | 
| 20be0 |  69 73 70 6c 61 79 2d 62 75 66 66 65 72 2d 62 65    6c 6f 77 2d 73 65 6c 65 63 74 65 64 29 0a 20 20  | isplay-buffer-below-selected)... | 
| 20c00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 62 6f 64 79 2d 66 75 6e 63  | ......................(body-func | 
| 20c20 |  74 69 6f 6e 20 2e 20 2c 23 27 73 65 6c 65 63 74    2d 77 69 6e 64 6f 77 29 0a 20 20 20 20 20 20 20  | tion...,#'select-window)........ | 
| 20c40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 77 69 6e 64 6f 77 2d 68 65 69 67 68 74 20  | .................(window-height. | 
| 20c60 |  2e 20 2c 23 27 66 69 74 2d 77 69 6e 64 6f 77 2d    74 6f 2d 62 75 66 66 65 72 29 29 29 0a 20 20 20  | ..,#'fit-window-to-buffer))).... | 
| 20c80 |  20 20 20 28 6c 65 74 20 28 28 71 75 69 74 2d 74    6f 2d 6d 65 6e 75 0a 20 20 20 20 20 20 20 20 20  | ...(let.((quit-to-menu.......... | 
| 20ca0 |  20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69  | ....(lambda.()................(i | 
| 20cc0 |  6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 63 61  | nteractive)................(loca | 
| 20ce0 |  6c 2d 75 6e 73 65 74 2d 6b 65 79 20 28 6b 62 64    20 22 43 2d 63 20 43 2d 63 22 29 29 0a 20 20 20  | l-unset-key.(kbd."C-c.C-c")).... | 
| 20d00 |  20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 63    61 6c 2d 75 6e 73 65 74 2d 6b 65 79 20 28 6b 62  | ............(local-unset-key.(kb | 
| 20d20 |  64 20 22 43 2d 63 20 43 2d 6b 22 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 71 75  | d."C-c.C-k"))................(qu | 
| 20d40 |  69 74 2d 77 69 6e 64 6f 77 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 64 69 73 70 6c  | it-window)................(displ | 
| 20d60 |  61 79 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 6f 72 69 67 2d 62  | ay-buffer.................orig-b | 
| 20d80 |  75 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 60 28 28 64 69 73 70 6c 61 79 2d 62 75  | uf.................`((display-bu | 
| 20da0 |  66 66 65 72 2d 72 65 75 73 65 2d 77 69 6e 64 6f    77 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ffer-reuse-window............... | 
| 20dc0 |  20 20 20 20 20 64 69 73 70 6c 61 79 2d 62 75 66    66 65 72 2d 75 73 65 2d 73 6f 6d 65 2d 77 69 6e  | .....display-buffer-use-some-win | 
| 20de0 |  64 6f 77 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 62 6f 64 79 2d 66 75 6e  | dow)...................(body-fun | 
| 20e00 |  63 74 69 6f 6e 20 2e 20 2c 23 27 73 65 6c 65 63    74 2d 77 69 6e 64 6f 77 29 29 29 0a 20 20 20 20  | ction...,#'select-window)))..... | 
| 20e20 |  20 20 20 20 20 20 20 20 20 20 20 28 63 61 6c 6c    2d 69 6e 74 65 72 61 63 74 69 76 65 6c 79 20 23  | ...........(call-interactively.# | 
| 20e40 |  27 67 70 74 65 6c 2d 6d 65 6e 75 29 29 29 29 0a    20 20 20 20 20 20 20 20 28 6c 6f 63 61 6c 2d 73  | 'gptel-menu)))).........(local-s | 
| 20e60 |  65 74 2d 6b 65 79 20 28 6b 62 64 20 22 43 2d 63    20 43 2d 63 22 29 0a 20 20 20 20 20 20 20 20 20  | et-key.(kbd."C-c.C-c").......... | 
| 20e80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c    61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 20  | ..............(lambda.()........ | 
| 20ea0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a  | ..................(interactive). | 
| 20ec0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28  | .........................(let.(( | 
| 20ee0 |  73 79 73 74 65 6d 2d 6d 65 73 73 61 67 65 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | system-message.................. | 
| 20f00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67  | ...............(buffer-substring | 
| 20f20 |  20 6d 73 67 2d 73 74 61 72 74 20 28 70 6f 69 6e    74 2d 6d 61 78 29 29 29 29 0a 20 20 20 20 20 20  | .msg-start.(point-max))))....... | 
| 20f40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65  | .....................(with-curre | 
| 20f60 |  6e 74 2d 62 75 66 66 65 72 20 6f 72 69 67 2d 62    75 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | nt-buffer.orig-buf.............. | 
| 20f80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 67 70 74 65 6c 2d 2d 73 65 74 2d 77 69 74 68  | ................(gptel--set-with | 
| 20fa0 |  2d 73 63 6f 70 65 20 27 67 70 74 65 6c 2d 2d 73    79 73 74 65 6d 2d 6d 65 73 73 61 67 65 20 73 79  | -scope.'gptel--system-message.sy | 
| 20fc0 |  73 74 65 6d 2d 6d 65 73 73 61 67 65 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | stem-message.................... | 
| 20fe0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 21000 |  20 67 70 74 65 6c 2d 2d 73 65 74 2d 62 75 66 66    65 72 2d 6c 6f 63 61 6c 6c 79 29 29 29 0a 20 20  | .gptel--set-buffer-locally)))... | 
| 21020 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20  | .......................(funcall. | 
| 21040 |  71 75 69 74 2d 74 6f 2d 6d 65 6e 75 29 29 29 0a    20 20 20 20 20 20 20 20 28 6c 6f 63 61 6c 2d 73  | quit-to-menu))).........(local-s | 
| 21060 |  65 74 2d 6b 65 79 20 28 6b 62 64 20 22 43 2d 63    20 43 2d 6b 22 29 20 71 75 69 74 2d 74 6f 2d 6d  | et-key.(kbd."C-c.C-k").quit-to-m | 
| 21080 |  65 6e 75 29 29 29 29 29 0a 0a 3b 3b 20 2a 2a 20    53 75 66 66 69 78 65 73 20 66 6f 72 20 72 65 77  | enu)))))..;;.**.Suffixes.for.rew | 
| 210a0 |  72 69 74 69 6e 67 2f 72 65 66 61 63 74 6f 72 69    6e 67 0a 0a 28 74 72 61 6e 73 69 65 6e 74 2d 64  | riting/refactoring..(transient-d | 
| 210c0 |  65 66 69 6e 65 2d 73 75 66 66 69 78 20 67 70 74    65 6c 2d 2d 73 75 66 66 69 78 2d 72 65 77 72 69  | efine-suffix.gptel--suffix-rewri | 
| 210e0 |  74 65 20 28 29 0a 20 20 22 52 65 77 72 69 74 65    20 6f 72 20 72 65 66 61 63 74 6f 72 20 72 65 67  | te.()..."Rewrite.or.refactor.reg | 
| 21100 |  69 6f 6e 20 63 6f 6e 74 65 6e 74 73 2e 22 0a 20    20 3a 6b 65 79 20 22 72 22 0a 20 20 3a 64 65 73  | ion.contents."...:key."r"...:des | 
| 21120 |  63 72 69 70 74 69 6f 6e 20 23 27 67 70 74 65 6c    2d 2d 72 65 66 61 63 74 6f 72 2d 6f 72 2d 72 65  | cription.#'gptel--refactor-or-re | 
| 21140 |  77 72 69 74 65 0a 20 20 28 69 6e 74 65 72 61 63    74 69 76 65 29 0a 20 20 28 6c 65 74 2a 20 28 28  | write...(interactive)...(let*.(( | 
| 21160 |  70 72 6f 6d 70 74 20 28 62 75 66 66 65 72 2d 73    75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70  | prompt.(buffer-substring-no-prop | 
| 21180 |  65 72 74 69 65 73 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 72 65 67 69 6f 6e  | erties...................(region | 
| 211a0 |  2d 62 65 67 69 6e 6e 69 6e 67 29 20 28 72 65 67    69 6f 6e 2d 65 6e 64 29 29 29 0a 20 20 20 20 20  | -beginning).(region-end)))...... | 
| 211c0 |  20 20 20 20 28 73 74 72 65 61 6d 20 67 70 74 65    6c 2d 73 74 72 65 61 6d 29 0a 20 20 20 20 20 20  | ....(stream.gptel-stream)....... | 
| 211e0 |  20 20 20 28 67 70 74 65 6c 2d 2d 73 79 73 74 65    6d 2d 6d 65 73 73 61 67 65 20 67 70 74 65 6c 2d  | ...(gptel--system-message.gptel- | 
| 21200 |  2d 72 65 77 72 69 74 65 2d 6d 65 73 73 61 67 65    29 29 0a 20 20 20 20 28 67 70 74 65 6c 2d 72 65  | -rewrite-message)).....(gptel-re | 
| 21220 |  71 75 65 73 74 20 70 72 6f 6d 70 74 20 3a 73 74    72 65 61 6d 20 73 74 72 65 61 6d 29 29 29 0a 0a  | quest.prompt.:stream.stream))).. | 
| 21240 |  28 74 72 61 6e 73 69 65 6e 74 2d 64 65 66 69 6e    65 2d 73 75 66 66 69 78 20 67 70 74 65 6c 2d 2d  | (transient-define-suffix.gptel-- | 
| 21260 |  73 75 66 66 69 78 2d 72 65 77 72 69 74 65 2d 61    6e 64 2d 72 65 70 6c 61 63 65 20 28 29 0a 20 20  | suffix-rewrite-and-replace.()... | 
| 21280 |  22 52 65 66 61 63 74 6f 72 20 72 65 67 69 6f 6e    20 63 6f 6e 74 65 6e 74 73 20 61 6e 64 20 72 65  | "Refactor.region.contents.and.re | 
| 212a0 |  70 6c 61 63 65 20 69 74 2e 22 0a 20 20 3a 6b 65    79 20 22 52 22 0a 20 20 3a 64 65 73 63 72 69 70  | place.it."...:key."R"...:descrip | 
| 212c0 |  74 69 6f 6e 20 28 6c 61 6d 62 64 61 20 28 29 20    28 63 6f 6e 63 61 74 20 28 67 70 74 65 6c 2d 2d  | tion.(lambda.().(concat.(gptel-- | 
| 212e0 |  72 65 66 61 63 74 6f 72 2d 6f 72 2d 72 65 77 72    69 74 65 29 20 22 20 69 6e 20 70 6c 61 63 65 22  | refactor-or-rewrite).".in.place" | 
| 21300 |  29 29 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76    65 29 0a 20 20 28 6c 65 74 2a 20 28 28 70 72 6f  | ))...(interactive)...(let*.((pro | 
| 21320 |  6d 70 74 20 28 62 75 66 66 65 72 2d 73 75 62 73    74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74  | mpt.(buffer-substring-no-propert | 
| 21340 |  69 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 72 65 67 69 6f 6e 2d 62 65  | ies...................(region-be | 
| 21360 |  67 69 6e 6e 69 6e 67 29 20 28 72 65 67 69 6f 6e    2d 65 6e 64 29 29 29 0a 20 20 20 20 20 20 20 20  | ginning).(region-end)))......... | 
| 21380 |  20 28 73 74 72 65 61 6d 20 67 70 74 65 6c 2d 73    74 72 65 61 6d 29 0a 20 20 20 20 20 20 20 20 20  | .(stream.gptel-stream).......... | 
| 213a0 |  28 67 70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d    65 73 73 61 67 65 20 67 70 74 65 6c 2d 2d 72 65  | (gptel--system-message.gptel--re | 
| 213c0 |  77 72 69 74 65 2d 6d 65 73 73 61 67 65 29 29 0a    20 20 20 20 28 6b 69 6c 6c 2d 72 65 67 69 6f 6e  | write-message)).....(kill-region | 
| 213e0 |  20 28 72 65 67 69 6f 6e 2d 62 65 67 69 6e 6e 69    6e 67 29 20 28 72 65 67 69 6f 6e 2d 65 6e 64 29  | .(region-beginning).(region-end) | 
| 21400 |  29 0a 20 20 20 20 28 6d 65 73 73 61 67 65 20 22    4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 73 61  | ).....(message."Original.text.sa | 
| 21420 |  76 65 64 20 74 6f 20 6b 69 6c 6c 2d 72 69 6e 67    2e 22 29 0a 20 20 20 20 28 67 70 74 65 6c 2d 72  | ved.to.kill-ring.").....(gptel-r | 
| 21440 |  65 71 75 65 73 74 20 70 72 6f 6d 70 74 20 3a 73    74 72 65 61 6d 20 73 74 72 65 61 6d 20 3a 69 6e  | equest.prompt.:stream.stream.:in | 
| 21460 |  2d 70 6c 61 63 65 20 74 29 29 29 0a 0a 28 74 72    61 6e 73 69 65 6e 74 2d 64 65 66 69 6e 65 2d 73  | -place.t)))..(transient-define-s | 
| 21480 |  75 66 66 69 78 20 67 70 74 65 6c 2d 2d 73 75 66    66 69 78 2d 72 65 77 72 69 74 65 2d 61 6e 64 2d  | uffix.gptel--suffix-rewrite-and- | 
| 214a0 |  65 64 69 66 66 20 28 61 72 67 73 29 0a 20 20 22    52 65 66 61 63 74 6f 72 69 6e 67 20 6f 72 20 72  | ediff.(args)..."Refactoring.or.r | 
| 214c0 |  65 77 72 69 74 65 20 72 65 67 69 6f 6e 20 63 6f    6e 74 65 6e 74 73 20 61 6e 64 20 72 75 6e 20 45  | ewrite.region.contents.and.run.E | 
| 214e0 |  64 69 66 66 2e 22 0a 20 20 3a 6b 65 79 20 22 45    22 0a 20 20 3a 64 65 73 63 72 69 70 74 69 6f 6e  | diff."...:key."E"...:description | 
| 21500 |  20 28 6c 61 6d 62 64 61 20 28 29 20 28 63 6f 6e    63 61 74 20 28 67 70 74 65 6c 2d 2d 72 65 66 61  | .(lambda.().(concat.(gptel--refa | 
| 21520 |  63 74 6f 72 2d 6f 72 2d 72 65 77 72 69 74 65 29    20 22 20 61 6e 64 20 45 64 69 66 66 22 29 29 0a  | ctor-or-rewrite).".and.Ediff")). | 
| 21540 |  20 20 28 69 6e 74 65 72 61 63 74 69 76 65 20 28    6c 69 73 74 20 28 74 72 61 6e 73 69 65 6e 74 2d  | ..(interactive.(list.(transient- | 
| 21560 |  61 72 67 73 20 74 72 61 6e 73 69 65 6e 74 2d 63    75 72 72 65 6e 74 2d 63 6f 6d 6d 61 6e 64 29 29  | args.transient-current-command)) | 
| 21580 |  29 0a 20 20 28 6c 65 74 72 65 63 20 28 28 70 72    6f 6d 70 74 20 28 62 75 66 66 65 72 2d 73 75 62  | )...(letrec.((prompt.(buffer-sub | 
| 215a0 |  73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72    74 69 65 73 0a 20 20 20 20 20 20 20 20 20 20 20  | string-no-properties............ | 
| 215c0 |  20 20 20 20 20 20 20 28 72 65 67 69 6f 6e 2d 62    65 67 69 6e 6e 69 6e 67 29 20 28 72 65 67 69 6f  | .......(region-beginning).(regio | 
| 215e0 |  6e 2d 65 6e 64 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 28 67 70 74 65 6c 2d 2d 73 79 73 74  | n-end)))............(gptel--syst | 
| 21600 |  65 6d 2d 6d 65 73 73 61 67 65 20 67 70 74 65 6c    2d 2d 72 65 77 72 69 74 65 2d 6d 65 73 73 61 67  | em-message.gptel--rewrite-messag | 
| 21620 |  65 29 0a 20 20 20 20 20 20 20 20 20 20 20 3b 3b    20 54 4f 44 4f 3a 20 54 65 63 68 6e 69 63 61 6c  | e)............;;.TODO:.Technical | 
| 21640 |  6c 79 20 77 65 20 73 68 6f 75 6c 64 20 73 61 76    65 20 74 68 65 20 77 69 6e 64 6f 77 20 63 6f 6e  | ly.we.should.save.the.window.con | 
| 21660 |  66 69 67 20 61 74 20 74 68 65 20 74 69 6d 65 0a    20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 60 65  | fig.at.the.time............;;.`e | 
| 21680 |  64 69 66 66 2d 73 65 74 75 70 2d 68 6f 6f 6b 27    20 72 75 6e 73 2c 20 62 75 74 20 74 68 69 73 20  | diff-setup-hook'.runs,.but.this. | 
| 216a0 |  77 69 6c 6c 20 64 6f 20 66 6f 72 20 6e 6f 77 2e    0a 20 20 20 20 20 20 20 20 20 20 20 28 63 77 63  | will.do.for.now.............(cwc | 
| 216c0 |  20 28 63 75 72 72 65 6e 74 2d 77 69 6e 64 6f 77    2d 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 29  | .(current-window-configuration)) | 
| 216e0 |  0a 20 20 20 20 20 20 20 20 20 20 20 28 67 70 74    65 6c 2d 2d 65 64 69 66 66 2d 72 65 73 74 6f 72  | ............(gptel--ediff-restor | 
| 21700 |  65 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c    61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 20  | e.............(lambda.()........ | 
| 21720 |  20 20 20 20 20 20 20 28 77 68 65 6e 20 28 77 69    6e 64 6f 77 2d 63 6f 6e 66 69 67 75 72 61 74 69  | .......(when.(window-configurati | 
| 21740 |  6f 6e 2d 70 20 63 77 63 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 73 65 74 2d 77  | on-p.cwc).................(set-w | 
| 21760 |  69 6e 64 6f 77 2d 63 6f 6e 66 69 67 75 72 61 74    69 6f 6e 20 63 77 63 29 29 0a 20 20 20 20 20 20  | indow-configuration.cwc))....... | 
| 21780 |  20 20 20 20 20 20 20 20 28 72 65 6d 6f 76 65 2d    68 6f 6f 6b 20 27 65 64 69 66 66 2d 71 75 69 74  | ........(remove-hook.'ediff-quit | 
| 217a0 |  2d 68 6f 6f 6b 20 67 70 74 65 6c 2d 2d 65 64 69    66 66 2d 72 65 73 74 6f 72 65 29 29 29 29 0a 20  | -hook.gptel--ediff-restore)))).. | 
| 217c0 |  20 20 20 28 6d 65 73 73 61 67 65 20 22 57 61 69    74 69 6e 67 20 66 6f 72 20 72 65 73 70 6f 6e 73  | ...(message."Waiting.for.respons | 
| 217e0 |  65 2e 2e 2e 20 22 29 0a 20 20 20 20 28 67 70 74    65 6c 2d 72 65 71 75 65 73 74 0a 20 20 20 20 20  | e....").....(gptel-request...... | 
| 21800 |  70 72 6f 6d 70 74 0a 20 20 20 20 20 3a 63 6f 6e    74 65 78 74 20 28 63 6f 6e 73 20 28 72 65 67 69  | prompt......:context.(cons.(regi | 
| 21820 |  6f 6e 2d 62 65 67 69 6e 6e 69 6e 67 29 20 28 72    65 67 69 6f 6e 2d 65 6e 64 29 29 0a 20 20 20 20  | on-beginning).(region-end))..... | 
| 21840 |  20 3a 63 61 6c 6c 62 61 63 6b 0a 20 20 20 20 20    28 6c 61 6d 62 64 61 20 28 72 65 73 70 6f 6e 73  | .:callback......(lambda.(respons | 
| 21860 |  65 20 69 6e 66 6f 29 0a 20 20 20 20 20 20 20 28    69 66 20 28 6e 6f 74 20 72 65 73 70 6f 6e 73 65  | e.info)........(if.(not.response | 
| 21880 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 28 6d 65    73 73 61 67 65 20 22 43 68 61 74 47 50 54 20 72  | )............(message."ChatGPT.r | 
| 218a0 |  65 73 70 6f 6e 73 65 20 65 72 72 6f 72 3a 20 25    73 22 20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e  | esponse.error:.%s".(plist-get.in | 
| 218c0 |  66 6f 20 3a 73 74 61 74 75 73 29 29 0a 20 20 20    20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 67 70  | fo.:status))..........(let*.((gp | 
| 218e0 |  74 65 6c 2d 62 75 66 66 65 72 20 28 70 6c 69 73    74 2d 67 65 74 20 69 6e 66 6f 20 3a 62 75 66 66  | tel-buffer.(plist-get.info.:buff | 
| 21900 |  65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 67 70 74 65 6c 2d 62 6f 75 6e  | er)).................(gptel-boun | 
| 21920 |  64 73 20 28 70 6c 69 73 74 2d 67 65 74 20 69 6e    66 6f 20 3a 63 6f 6e 74 65 78 74 29 29 0a 20 20  | ds.(plist-get.info.:context))... | 
| 21940 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62    75 66 66 65 72 2d 6d 6f 64 65 0a 20 20 20 20 20  | ..............(buffer-mode...... | 
| 21960 |  20 20 20 20 20 20 20 20 20 20 20 20 28 62 75 66    66 65 72 2d 6c 6f 63 61 6c 2d 76 61 6c 75 65 20  | ............(buffer-local-value. | 
| 21980 |  27 6d 61 6a 6f 72 2d 6d 6f 64 65 20 67 70 74 65    6c 2d 62 75 66 66 65 72 29 29 29 0a 20 20 20 20  | 'major-mode.gptel-buffer)))..... | 
| 219a0 |  20 20 20 20 20 20 20 28 70 63 61 73 65 2d 6c 65    74 20 28 28 60 28 2c 6e 65 77 2d 62 75 66 20 2c  | .......(pcase-let.((`(,new-buf., | 
| 219c0 |  6e 65 77 2d 62 65 67 20 2c 6e 65 77 2d 65 6e 64    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | new-beg.,new-end)............... | 
| 219e0 |  20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d    63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28  | ..........(with-current-buffer.( | 
| 21a00 |  67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74    65 20 22 2a 67 70 74 65 6c 2d 72 65 77 72 69 74  | get-buffer-create."*gptel-rewrit | 
| 21a20 |  65 2d 52 65 67 69 6f 6e 2e 42 2d 2a 22 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | e-Region.B-*").................. | 
| 21a40 |  20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28    69 6e 68 69 62 69 74 2d 72 65 61 64 2d 6f 6e 6c  | .........(let.((inhibit-read-onl | 
| 21a60 |  79 20 74 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | y.t))........................... | 
| 21a80 |  20 20 28 65 72 61 73 65 2d 62 75 66 66 65 72 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..(erase-buffer)................ | 
| 21aa0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75    6e 63 61 6c 6c 20 62 75 66 66 65 72 2d 6d 6f 64  | .............(funcall.buffer-mod | 
| 21ac0 |  65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | e).............................( | 
| 21ae0 |  69 6e 73 65 72 74 20 72 65 73 70 6f 6e 73 65 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | insert.response)................ | 
| 21b00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 6f    74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d  | .............(goto-char.(point-m | 
| 21b20 |  69 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | in))............................ | 
| 21b40 |  20 28 6c 69 73 74 20 28 63 75 72 72 65 6e 74 2d    62 75 66 66 65 72 29 20 28 70 6f 69 6e 74 2d 6d  | .(list.(current-buffer).(point-m | 
| 21b60 |  69 6e 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29    29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | in).(point-max))))))............ | 
| 21b80 |  20 20 28 72 65 71 75 69 72 65 20 27 65 64 69 66    66 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ..(require.'ediff).............. | 
| 21ba0 |  28 61 64 64 2d 68 6f 6f 6b 20 27 65 64 69 66 66    2d 71 75 69 74 2d 68 6f 6f 6b 20 67 70 74 65 6c  | (add-hook.'ediff-quit-hook.gptel | 
| 21bc0 |  2d 2d 65 64 69 66 66 2d 72 65 73 74 6f 72 65 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61  | --ediff-restore)..............(a | 
| 21be0 |  70 70 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 23 27 65 64 69 66 66 2d 72 65 67 69 6f  | pply...............#'ediff-regio | 
| 21c00 |  6e 73 2d 69 6e 74 65 72 6e 61 6c 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 67 65 74 2d 62  | ns-internal...............(get-b | 
| 21c20 |  75 66 66 65 72 20 28 65 64 69 66 66 2d 6d 61 6b    65 2d 63 6c 6f 6e 65 64 2d 62 75 66 66 65 72 20  | uffer.(ediff-make-cloned-buffer. | 
| 21c40 |  67 70 74 65 6c 2d 62 75 66 66 65 72 20 22 2d 52    65 67 69 6f 6e 2e 41 2d 22 29 29 0a 20 20 20 20  | gptel-buffer."-Region.A-"))..... | 
| 21c60 |  20 20 20 20 20 20 20 20 20 20 28 63 61 72 20 67    70 74 65 6c 2d 62 6f 75 6e 64 73 29 20 28 63 64  | ..........(car.gptel-bounds).(cd | 
| 21c80 |  72 20 67 70 74 65 6c 2d 62 6f 75 6e 64 73 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  | r.gptel-bounds)...............ne | 
| 21ca0 |  77 2d 62 75 66 20 6e 65 77 2d 62 65 67 20 6e 65    77 2d 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20  | w-buf.new-beg.new-end........... | 
| 21cc0 |  20 20 20 20 6e 69 6c 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 69 66 20 28 74 72 61 6e 73  | ....nil...............(if.(trans | 
| 21ce0 |  69 65 6e 74 2d 61 72 67 2d 76 61 6c 75 65 20 22    2d 77 22 20 61 72 67 73 29 0a 20 20 20 20 20 20  | ient-arg-value."-w".args)....... | 
| 21d00 |  20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73    74 20 27 65 64 69 66 66 2d 72 65 67 69 6f 6e 73  | ............(list.'ediff-regions | 
| 21d20 |  2d 77 6f 72 64 77 69 73 65 20 27 77 6f 72 64 2d    77 69 73 65 20 6e 69 6c 29 0a 20 20 20 20 20 20  | -wordwise.'word-wise.nil)....... | 
| 21d40 |  20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20    27 65 64 69 66 66 2d 72 65 67 69 6f 6e 73 2d 6c  | ..........(list.'ediff-regions-l | 
| 21d60 |  69 6e 65 77 69 73 65 20 6e 69 6c 20 6e 69 6c 29    29 29 29 29 29 29 29 29 29 0a 0a 28 70 72 6f 76  | inewise.nil.nil))))))))))..(prov | 
| 21d80 |  69 64 65 20 27 67 70 74 65 6c 2d 74 72 61 6e 73    69 65 6e 74 29 0a 3b 3b 3b 20 67 70 74 65 6c 2d  | ide.'gptel-transient).;;;.gptel- | 
| 21da0 |  74 72 61 6e 73 69 65 6e 74 2e 65 6c 20 65 6e 64    73 20 68 65 72 65 0a 0a 3b 3b 20 4c 6f 63 61 6c  | transient.el.ends.here..;;.Local | 
| 21dc0 |  20 56 61 72 69 61 62 6c 65 73 3a 0a 3b 3b 20 6f    75 74 6c 69 6e 65 2d 72 65 67 65 78 70 3a 20 22  | .Variables:.;;.outline-regexp:." | 
| 21de0 |  5e 3b 3b 20 5c 5c 2a 2b 22 0a 3b 3b 20 65 76 61    6c 3a 20 28 6f 75 74 6c 69 6e 65 2d 6d 69 6e 6f  | ^;;.\\*+".;;.eval:.(outline-mino | 
| 21e00 |  72 2d 6d 6f 64 65 20 31 29 0a 3b 3b 20 45 6e 64    3a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | r-mode.1).;;.End:............... | 
| 21e20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21e40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21e60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21e80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21ea0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21ec0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21ee0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21f00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21f20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21f40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21f60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21f80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21fa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21fc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 21fe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 22000 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 61 6e 74 68 72 6f  | gptel-20240424.2306/gptel-anthro | 
| 22020 |  70 69 63 2e 65 6c 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | pic.el.......................... | 
| 22040 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 22060 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 22080 |  30 30 31 33 34 35 30 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 35 34 35 00 20 30 00 00 00  | 0013450.00000000000.015545..0... | 
| 220a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 220c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 220e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 22100 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 22120 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 22140 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 22160 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 22180 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 221a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 221c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 221e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 22200 |  3b 3b 3b 20 67 70 74 65 6c 2d 61 6e 74 68 72 6f    70 69 63 2e 65 6c 20 2d 2d 2d 20 20 41 6e 74 68  | ;;;.gptel-anthropic.el.---..Anth | 
| 22220 |  72 6f 70 69 63 20 41 49 20 73 75 70 70 70 6f 72    74 20 66 6f 72 20 67 70 74 65 6c 20 20 2d 2a 2d  | ropic.AI.suppport.for.gptel..-*- | 
| 22240 |  20 6c 65 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67    3a 20 74 3b 20 2d 2a 2d 0a 0a 3b 3b 20 43 6f 70  | .lexical-binding:.t;.-*-..;;.Cop | 
| 22260 |  79 72 69 67 68 74 20 28 43 29 20 32 30 32 33 20    20 4b 61 72 74 68 69 6b 20 43 68 69 6b 6d 61 67  | yright.(C).2023..Karthik.Chikmag | 
| 22280 |  61 6c 75 72 0a 0a 3b 3b 20 41 75 74 68 6f 72 3a    20 4b 61 72 74 68 69 6b 20 43 68 69 6b 6d 61 67  | alur..;;.Author:.Karthik.Chikmag | 
| 222a0 |  61 6c 75 72 20 3c 6b 61 72 74 68 69 6b 63 68 69    6b 6d 61 67 61 6c 75 72 40 67 6d 61 69 6c 2e 63  | alur.<karthikchikmagalur@gmail.c | 
| 222c0 |  6f 6d 3e 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f    67 72 61 6d 20 69 73 20 66 72 65 65 20 73 6f 66  | om>..;;.This.program.is.free.sof | 
| 222e0 |  74 77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72    65 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61  | tware;.you.can.redistribute.it.a | 
| 22300 |  6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20    69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72  | nd/or.modify.;;.it.under.the.ter | 
| 22320 |  6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65    6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63  | ms.of.the.GNU.General.Public.Lic | 
| 22340 |  65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65    64 20 62 79 0a 3b 3b 20 74 68 65 20 46 72 65 65  | ense.as.published.by.;;.the.Free | 
| 22360 |  20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61    74 69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72  | .Software.Foundation,.either.ver | 
| 22380 |  73 69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69    63 65 6e 73 65 2c 20 6f 72 0a 3b 3b 20 28 61 74  | sion.3.of.the.License,.or.;;.(at | 
| 223a0 |  20 79 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e    79 20 6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e  | .your.option).any.later.version. | 
| 223c0 |  0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61    6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64  | ..;;.This.program.is.distributed | 
| 223e0 |  20 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61    74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65  | .in.the.hope.that.it.will.be.use | 
| 22400 |  66 75 6c 2c 0a 3b 3b 20 62 75 74 20 57 49 54 48    4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59  | ful,.;;.but.WITHOUT.ANY.WARRANTY | 
| 22420 |  3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74    68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61  | ;.without.even.the.implied.warra | 
| 22440 |  6e 74 79 20 6f 66 0a 3b 3b 20 4d 45 52 43 48 41    4e 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54  | nty.of.;;.MERCHANTABILITY.or.FIT | 
| 22460 |  4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49    43 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20  | NESS.FOR.A.PARTICULAR.PURPOSE... | 
| 22480 |  53 65 65 20 74 68 65 0a 3b 3b 20 47 4e 55 20 47    65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69  | See.the.;;.GNU.General.Public.Li | 
| 224a0 |  63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64    65 74 61 69 6c 73 2e 0a 0a 3b 3b 20 59 6f 75 20  | cense.for.more.details...;;.You. | 
| 224c0 |  73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65    69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20 74  | should.have.received.a.copy.of.t | 
| 224e0 |  68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50    75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b 3b  | he.GNU.General.Public.License.;; | 
| 22500 |  20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73    20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e 6f  | .along.with.this.program...If.no | 
| 22520 |  74 2c 20 73 65 65 20 3c 68 74 74 70 73 3a 2f 2f    77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65  | t,.see.<https://www.gnu.org/lice | 
| 22540 |  6e 73 65 73 2f 3e 2e 0a 0a 3b 3b 3b 20 43 6f 6d    6d 65 6e 74 61 72 79 3a 0a 0a 3b 3b 20 54 68 69  | nses/>...;;;.Commentary:..;;.Thi | 
| 22560 |  73 20 66 69 6c 65 20 61 64 64 73 20 73 75 70 70    6f 72 74 20 66 6f 72 20 41 6e 74 68 72 6f 70 69  | s.file.adds.support.for.Anthropi | 
| 22580 |  63 27 73 20 4d 65 73 73 61 67 65 73 20 41 50 49    20 74 6f 20 67 70 74 65 6c 0a 0a 3b 3b 3b 20 43  | c's.Messages.API.to.gptel..;;;.C | 
| 225a0 |  6f 64 65 3a 0a 28 72 65 71 75 69 72 65 20 27 63    6c 2d 67 65 6e 65 72 69 63 29 0a 28 65 76 61 6c  | ode:.(require.'cl-generic).(eval | 
| 225c0 |  2d 77 68 65 6e 2d 63 6f 6d 70 69 6c 65 0a 20 20    28 72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 62  | -when-compile...(require.'cl-lib | 
| 225e0 |  29 29 0a 28 72 65 71 75 69 72 65 20 27 6d 61 70    29 0a 28 72 65 71 75 69 72 65 20 27 67 70 74 65  | )).(require.'map).(require.'gpte | 
| 22600 |  6c 29 0a 0a 28 64 65 66 76 61 72 20 6a 73 6f 6e    2d 6f 62 6a 65 63 74 2d 74 79 70 65 29 0a 0a 28  | l)..(defvar.json-object-type)..( | 
| 22620 |  64 65 63 6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e    20 70 72 6f 70 2d 6d 61 74 63 68 2d 76 61 6c 75  | declare-function.prop-match-valu | 
| 22640 |  65 20 22 74 65 78 74 2d 70 72 6f 70 65 72 74 79    2d 73 65 61 72 63 68 22 29 0a 28 64 65 63 6c 61  | e."text-property-search").(decla | 
| 22660 |  72 65 2d 66 75 6e 63 74 69 6f 6e 20 74 65 78 74    2d 70 72 6f 70 65 72 74 79 2d 73 65 61 72 63 68  | re-function.text-property-search | 
| 22680 |  2d 62 61 63 6b 77 61 72 64 20 22 74 65 78 74 2d    70 72 6f 70 65 72 74 79 2d 73 65 61 72 63 68 22  | -backward."text-property-search" | 
| 226a0 |  29 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63 74    69 6f 6e 20 6a 73 6f 6e 2d 72 65 61 64 20 22 6a  | ).(declare-function.json-read."j | 
| 226c0 |  73 6f 6e 22 20 28 29 29 0a 0a 3b 3b 3b 20 41 6e    74 68 72 6f 70 69 63 20 28 4d 65 73 73 61 67 65  | son".())..;;;.Anthropic.(Message | 
| 226e0 |  73 20 41 50 49 29 0a 28 63 6c 2d 64 65 66 73 74    72 75 63 74 20 28 67 70 74 65 6c 2d 61 6e 74 68  | s.API).(cl-defstruct.(gptel-anth | 
| 22700 |  72 6f 70 69 63 20 28 3a 63 6f 6e 73 74 72 75 63    74 6f 72 20 67 70 74 65 6c 2d 2d 6d 61 6b 65 2d  | ropic.(:constructor.gptel--make- | 
| 22720 |  61 6e 74 68 72 6f 70 69 63 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | anthropic)...................... | 
| 22740 |  20 20 20 20 20 20 20 20 20 20 28 3a 63 6f 70 69    65 72 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20  | ..........(:copier.nil)......... | 
| 22760 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 3a 69 6e 63 6c 75 64 65  | .......................(:include | 
| 22780 |  20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 29 29    29 0a 0a 28 63 6c 2d 64 65 66 6d 65 74 68 6f 64  | .gptel-backend)))..(cl-defmethod | 
| 227a0 |  20 67 70 74 65 6c 2d 63 75 72 6c 2d 2d 70 61 72    73 65 2d 73 74 72 65 61 6d 20 28 28 5f 62 61 63  | .gptel-curl--parse-stream.((_bac | 
| 227c0 |  6b 65 6e 64 20 67 70 74 65 6c 2d 61 6e 74 68 72    6f 70 69 63 29 20 5f 69 6e 66 6f 29 0a 20 20 28  | kend.gptel-anthropic)._info)...( | 
| 227e0 |  6c 65 74 2a 20 28 28 63 6f 6e 74 65 6e 74 2d 73    74 72 73 29 0a 20 20 20 20 20 20 20 20 20 28 70  | let*.((content-strs)..........(p | 
| 22800 |  74 20 28 70 6f 69 6e 74 29 29 29 0a 20 20 20 20    28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20  | t.(point))).....(condition-case. | 
| 22820 |  6e 69 6c 0a 20 20 20 20 20 20 20 20 28 77 68 69    6c 65 20 28 72 65 2d 73 65 61 72 63 68 2d 66 6f  | nil.........(while.(re-search-fo | 
| 22840 |  72 77 61 72 64 20 22 5e 65 76 65 6e 74 3a 20 22    20 6e 69 6c 20 74 29 0a 20 20 20 20 20 20 20 20  | rward."^event:.".nil.t)......... | 
| 22860 |  20 20 28 73 65 74 71 20 70 74 20 28 6d 61 74 63    68 2d 62 65 67 69 6e 6e 69 6e 67 20 30 29 29 0a  | ..(setq.pt.(match-beginning.0)). | 
| 22880 |  20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 65    71 75 61 6c 20 28 6c 69 6e 65 2d 65 6e 64 2d 70  | ..........(if.(equal.(line-end-p | 
| 228a0 |  6f 73 69 74 69 6f 6e 29 20 28 70 6f 69 6e 74 2d    6d 61 78 29 29 0a 20 20 20 20 20 20 20 20 20 20  | osition).(point-max))........... | 
| 228c0 |  20 20 20 20 28 65 72 72 6f 72 20 22 44 61 74 61    20 62 6c 6f 63 6b 20 69 6e 63 6f 6d 70 6c 65 74  | ....(error."Data.block.incomplet | 
| 228e0 |  65 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 28    77 68 65 6e 20 28 6c 6f 6f 6b 69 6e 67 2d 61 74  | e"))...........(when.(looking-at | 
| 22900 |  20 22 63 6f 6e 74 65 6e 74 5f 62 6c 6f 63 6b 5f    5c 5c 28 3f 3a 73 74 61 72 74 5c 5c 7c 64 65 6c  | ."content_block_\\(?:start\\|del | 
| 22920 |  74 61 5c 5c 7c 73 74 6f 70 5c 5c 29 22 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 77  | ta\\|stop\\)").............(forw | 
| 22940 |  61 72 64 2d 6c 69 6e 65 20 31 29 20 28 66 6f 72    77 61 72 64 2d 63 68 61 72 20 35 29 0a 20 20 20  | ard-line.1).(forward-char.5).... | 
| 22960 |  20 20 20 20 20 20 20 20 20 28 77 68 65 6e 2d 6c    65 74 2a 20 28 28 72 65 73 70 6f 6e 73 65 20 28  | .........(when-let*.((response.( | 
| 22980 |  67 70 74 65 6c 2d 2d 6a 73 6f 6e 2d 72 65 61 64    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | gptel--json-read)).............. | 
| 229a0 |  20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 74    65 6e 74 20 28 6d 61 70 2d 6e 65 73 74 65 64 2d  | ...........(content.(map-nested- | 
| 229c0 |  65 6c 74 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | elt............................. | 
| 229e0 |  20 20 20 20 20 20 72 65 73 70 6f 6e 73 65 20 27    28 3a 64 65 6c 74 61 20 3a 74 65 78 74 29 29 29  | ......response.'(:delta.:text))) | 
| 22a00 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 70 75 73 68 20 63 6f 6e 74 65 6e 74 20 63 6f  | )...............(push.content.co | 
| 22a20 |  6e 74 65 6e 74 2d 73 74 72 73 29 29 29 29 0a 20    20 20 20 20 20 28 65 72 72 6f 72 20 28 67 6f 74  | ntent-strs)))).......(error.(got | 
| 22a40 |  6f 2d 63 68 61 72 20 70 74 29 29 29 0a 20 20 20    20 28 61 70 70 6c 79 20 23 27 63 6f 6e 63 61 74  | o-char.pt))).....(apply.#'concat | 
| 22a60 |  20 28 6e 72 65 76 65 72 73 65 20 63 6f 6e 74 65    6e 74 2d 73 74 72 73 29 29 29 29 0a 0a 28 63 6c  | .(nreverse.content-strs))))..(cl | 
| 22a80 |  2d 64 65 66 6d 65 74 68 6f 64 20 67 70 74 65 6c    2d 2d 70 61 72 73 65 2d 72 65 73 70 6f 6e 73 65  | -defmethod.gptel--parse-response | 
| 22aa0 |  20 28 28 5f 62 61 63 6b 65 6e 64 20 67 70 74 65    6c 2d 61 6e 74 68 72 6f 70 69 63 29 20 72 65 73  | .((_backend.gptel-anthropic).res | 
| 22ac0 |  70 6f 6e 73 65 20 5f 69 6e 66 6f 29 0a 20 20 28    6d 61 70 2d 6e 65 73 74 65 64 2d 65 6c 74 20 72  | ponse._info)...(map-nested-elt.r | 
| 22ae0 |  65 73 70 6f 6e 73 65 20 27 28 3a 63 6f 6e 74 65    6e 74 20 30 20 3a 74 65 78 74 29 29 29 0a 0a 28  | esponse.'(:content.0.:text)))..( | 
| 22b00 |  63 6c 2d 64 65 66 6d 65 74 68 6f 64 20 67 70 74    65 6c 2d 2d 72 65 71 75 65 73 74 2d 64 61 74 61  | cl-defmethod.gptel--request-data | 
| 22b20 |  20 28 28 5f 62 61 63 6b 65 6e 64 20 67 70 74 65    6c 2d 61 6e 74 68 72 6f 70 69 63 29 20 70 72 6f  | .((_backend.gptel-anthropic).pro | 
| 22b40 |  6d 70 74 73 29 0a 20 20 22 4a 53 4f 4e 20 65 6e    63 6f 64 65 20 50 52 4f 4d 50 54 53 20 66 6f 72  | mpts)..."JSON.encode.PROMPTS.for | 
| 22b60 |  20 73 65 6e 64 69 6e 67 20 74 6f 20 43 68 61 74    47 50 54 2e 22 0a 20 20 28 6c 65 74 20 28 28 70  | .sending.to.ChatGPT."...(let.((p | 
| 22b80 |  72 6f 6d 70 74 73 2d 70 6c 69 73 74 0a 20 20 20    20 20 20 20 20 20 60 28 3a 6d 6f 64 65 6c 20 2c  | rompts-plist..........`(:model., | 
| 22ba0 |  67 70 74 65 6c 2d 6d 6f 64 65 6c 0a 20 20 20 20    20 20 20 20 20 20 20 3a 73 79 73 74 65 6d 20 2c  | gptel-model............:system., | 
| 22bc0 |  67 70 74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65    73 73 61 67 65 0a 20 20 20 20 20 20 20 20 20 20  | gptel--system-message........... | 
| 22be0 |  20 3a 73 74 72 65 61 6d 20 2c 28 6f 72 20 28 61    6e 64 20 67 70 74 65 6c 2d 73 74 72 65 61 6d 20  | .:stream.,(or.(and.gptel-stream. | 
| 22c00 |  67 70 74 65 6c 2d 75 73 65 2d 63 75 72 6c 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | gptel-use-curl.................. | 
| 22c20 |  20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 62    61 63 6b 65 6e 64 2d 73 74 72 65 61 6d 20 67 70  | ........(gptel-backend-stream.gp | 
| 22c40 |  74 65 6c 2d 62 61 63 6b 65 6e 64 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | tel-backend))................... | 
| 22c60 |  20 20 20 3a 6a 73 6f 6e 2d 66 61 6c 73 65 29 0a    20 20 20 20 20 20 20 20 20 20 20 3a 6d 61 78 5f  | ...:json-false)............:max_ | 
| 22c80 |  74 6f 6b 65 6e 73 20 2c 28 6f 72 20 67 70 74 65    6c 2d 6d 61 78 2d 74 6f 6b 65 6e 73 20 31 30 32  | tokens.,(or.gptel-max-tokens.102 | 
| 22ca0 |  34 29 0a 20 20 20 20 20 20 20 20 20 20 20 3a 6d    65 73 73 61 67 65 73 20 5b 2c 40 70 72 6f 6d 70  | 4)............:messages.[,@promp | 
| 22cc0 |  74 73 5d 29 29 29 0a 20 20 20 20 28 77 68 65 6e    20 67 70 74 65 6c 2d 74 65 6d 70 65 72 61 74 75  | ts]))).....(when.gptel-temperatu | 
| 22ce0 |  72 65 0a 20 20 20 20 20 20 28 70 6c 69 73 74 2d    70 75 74 20 70 72 6f 6d 70 74 73 2d 70 6c 69 73  | re.......(plist-put.prompts-plis | 
| 22d00 |  74 20 3a 74 65 6d 70 65 72 61 74 75 72 65 20 67    70 74 65 6c 2d 74 65 6d 70 65 72 61 74 75 72 65  | t.:temperature.gptel-temperature | 
| 22d20 |  29 29 0a 20 20 20 20 70 72 6f 6d 70 74 73 2d 70    6c 69 73 74 29 29 0a 0a 28 63 6c 2d 64 65 66 6d  | )).....prompts-plist))..(cl-defm | 
| 22d40 |  65 74 68 6f 64 20 67 70 74 65 6c 2d 2d 70 61 72    73 65 2d 62 75 66 66 65 72 20 28 28 5f 62 61 63  | ethod.gptel--parse-buffer.((_bac | 
| 22d60 |  6b 65 6e 64 20 67 70 74 65 6c 2d 61 6e 74 68 72    6f 70 69 63 29 20 26 6f 70 74 69 6f 6e 61 6c 20  | kend.gptel-anthropic).&optional. | 
| 22d80 |  6d 61 78 2d 65 6e 74 72 69 65 73 29 0a 20 20 28    6c 65 74 20 28 28 70 72 6f 6d 70 74 73 29 20 28  | max-entries)...(let.((prompts).( | 
| 22da0 |  70 72 6f 70 29 29 0a 20 20 20 20 28 77 68 69 6c    65 20 28 61 6e 64 0a 20 20 20 20 20 20 20 20 20  | prop)).....(while.(and.......... | 
| 22dc0 |  20 20 20 28 6f 72 20 28 6e 6f 74 20 6d 61 78 2d    65 6e 74 72 69 65 73 29 20 28 3e 3d 20 6d 61 78  | ...(or.(not.max-entries).(>=.max | 
| 22de0 |  2d 65 6e 74 72 69 65 73 20 30 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 70  | -entries.0)).............(setq.p | 
| 22e00 |  72 6f 70 20 28 74 65 78 74 2d 70 72 6f 70 65 72    74 79 2d 73 65 61 72 63 68 2d 62 61 63 6b 77 61  | rop.(text-property-search-backwa | 
| 22e20 |  72 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 27 67 70 74 65  | rd.........................'gpte | 
| 22e40 |  6c 20 27 72 65 73 70 6f 6e 73 65 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | l.'response..................... | 
| 22e60 |  20 20 20 20 28 77 68 65 6e 20 28 67 65 74 2d 63    68 61 72 2d 70 72 6f 70 65 72 74 79 20 28 6d 61  | ....(when.(get-char-property.(ma | 
| 22e80 |  78 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 31    2d 20 28 70 6f 69 6e 74 29 29 29 0a 20 20 20 20  | x.(point-min).(1-.(point)))..... | 
| 22ea0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 22ec0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 27 67 70    74 65 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20  | .............'gptel)............ | 
| 22ee0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74    29 29 29 29 0a 20 20 20 20 20 20 28 70 75 73 68  | ...............t)))).......(push | 
| 22f00 |  20 28 6c 69 73 74 20 3a 72 6f 6c 65 20 28 69 66    20 28 70 72 6f 70 2d 6d 61 74 63 68 2d 76 61 6c  | .(list.:role.(if.(prop-match-val | 
| 22f20 |  75 65 20 70 72 6f 70 29 20 22 61 73 73 69 73 74    61 6e 74 22 20 22 75 73 65 72 22 29 0a 20 20 20  | ue.prop)."assistant"."user").... | 
| 22f40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    63 6f 6e 74 65 6e 74 0a 20 20 20 20 20 20 20 20  | ...............:content......... | 
| 22f60 |  20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e    67 2d 74 72 69 6d 0a 20 20 20 20 20 20 20 20 20  | ..........(string-trim.......... | 
| 22f80 |  20 20 20 20 20 20 20 20 20 20 28 62 75 66 66 65    72 2d 73 75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70  | ..........(buffer-substring-no-p | 
| 22fa0 |  72 6f 70 65 72 74 69 65 73 20 28 70 72 6f 70 2d    6d 61 74 63 68 2d 62 65 67 69 6e 6e 69 6e 67 20  | roperties.(prop-match-beginning. | 
| 22fc0 |  70 72 6f 70 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | prop)........................... | 
| 22fe0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 70 72 6f 70 2d 6d  | .........................(prop-m | 
| 23000 |  61 74 63 68 2d 65 6e 64 20 70 72 6f 70 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | atch-end.prop))................. | 
| 23020 |  20 20 20 28 66 6f 72 6d 61 74 20 22 5b 5c 74 5c    72 5c 6e 20 5d 2a 5c 5c 28 3f 3a 25 73 5c 5c 29  | ...(format."[\t\r\n.]*\\(?:%s\\) | 
| 23040 |  3f 5b 5c 74 5c 72 5c 6e 20 5d 2a 22 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ?[\t\r\n.]*".................... | 
| 23060 |  20 20 20 20 20 20 20 20 28 72 65 67 65 78 70 2d    71 75 6f 74 65 20 28 67 70 74 65 6c 2d 70 72 6f  | ........(regexp-quote.(gptel-pro | 
| 23080 |  6d 70 74 2d 70 72 65 66 69 78 2d 73 74 72 69 6e    67 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | mpt-prefix-string)))............ | 
| 230a0 |  20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20    22 5b 5c 74 5c 72 5c 6e 20 5d 2a 5c 5c 28 3f 3a  | ........(format."[\t\r\n.]*\\(?: | 
| 230c0 |  25 73 5c 5c 29 3f 5b 5c 74 5c 72 5c 6e 20 5d 2a    22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | %s\\)?[\t\r\n.]*"............... | 
| 230e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65    67 65 78 70 2d 71 75 6f 74 65 20 28 67 70 74 65  | .............(regexp-quote.(gpte | 
| 23100 |  6c 2d 72 65 73 70 6f 6e 73 65 2d 70 72 65 66 69    78 2d 73 74 72 69 6e 67 29 29 29 29 29 0a 20 20  | l-response-prefix-string)))))... | 
| 23120 |  20 20 20 20 20 20 20 20 20 20 70 72 6f 6d 70 74    73 29 0a 20 20 20 20 20 20 28 61 6e 64 20 6d 61  | ..........prompts).......(and.ma | 
| 23140 |  78 2d 65 6e 74 72 69 65 73 20 28 63 6c 2d 64 65    63 66 20 6d 61 78 2d 65 6e 74 72 69 65 73 29 29  | x-entries.(cl-decf.max-entries)) | 
| 23160 |  29 0a 20 20 20 20 70 72 6f 6d 70 74 73 29 29 0a    0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a  | ).....prompts))..;;;###autoload. | 
| 23180 |  28 63 6c 2d 64 65 66 75 6e 20 67 70 74 65 6c 2d    6d 61 6b 65 2d 61 6e 74 68 72 6f 70 69 63 0a 20  | (cl-defun.gptel-make-anthropic.. | 
| 231a0 |  20 20 20 28 6e 61 6d 65 20 26 6b 65 79 20 63 75    72 6c 2d 61 72 67 73 20 73 74 72 65 61 6d 20 6b  | ...(name.&key.curl-args.stream.k | 
| 231c0 |  65 79 0a 20 20 20 20 20 20 20 20 20 20 28 68 65    61 64 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  | ey...........(header............ | 
| 231e0 |  28 6c 61 6d 62 64 61 20 28 29 20 28 77 68 65 6e    2d 6c 65 74 20 28 6b 65 79 20 28 67 70 74 65 6c  | (lambda.().(when-let.(key.(gptel | 
| 23200 |  2d 2d 67 65 74 2d 61 70 69 2d 6b 65 79 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | --get-api-key))................. | 
| 23220 |  20 20 20 20 20 20 20 20 60 28 28 22 78 2d 61 70    69 2d 6b 65 79 22 20 2e 20 2c 6b 65 79 29 0a 20  | ........`(("x-api-key"...,key).. | 
| 23240 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 22 61 6e 74 68 72  | .........................("anthr | 
| 23260 |  6f 70 69 63 2d 76 65 72 73 69 6f 6e 22 20 2e 20    22 32 30 32 33 2d 30 36 2d 30 31 22 29 29 29 29  | opic-version"..."2023-06-01")))) | 
| 23280 |  29 0a 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64    65 6c 73 20 27 28 22 63 6c 61 75 64 65 2d 33 2d  | )...........(models.'("claude-3- | 
| 232a0 |  73 6f 6e 6e 65 74 2d 32 30 32 34 30 32 32 39 22    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | sonnet-20240229"................ | 
| 232c0 |  20 20 20 20 20 22 63 6c 61 75 64 65 2d 33 2d 68    61 69 6b 75 2d 32 30 32 34 30 33 30 37 22 0a 20  | ....."claude-3-haiku-20240307".. | 
| 232e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 22 63 6c 61 75 64 65 2d 33 2d 6f 70 75  | ..................."claude-3-opu | 
| 23300 |  73 2d 32 30 32 34 30 32 32 39 22 29 29 0a 20 20    20 20 20 20 20 20 20 20 28 68 6f 73 74 20 22 61  | s-20240229"))...........(host."a | 
| 23320 |  70 69 2e 61 6e 74 68 72 6f 70 69 63 2e 63 6f 6d    22 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 72  | pi.anthropic.com")...........(pr | 
| 23340 |  6f 74 6f 63 6f 6c 20 22 68 74 74 70 73 22 29 0a    20 20 20 20 20 20 20 20 20 20 28 65 6e 64 70 6f  | otocol."https")...........(endpo | 
| 23360 |  69 6e 74 20 22 2f 76 31 2f 6d 65 73 73 61 67 65    73 22 29 29 0a 20 20 22 52 65 67 69 73 74 65 72  | int."/v1/messages"))..."Register | 
| 23380 |  20 61 6e 20 41 6e 74 68 72 6f 70 69 63 20 41 50    49 2d 63 6f 6d 70 61 74 69 62 6c 65 20 62 61 63  | .an.Anthropic.API-compatible.bac | 
| 233a0 |  6b 65 6e 64 20 66 6f 72 20 67 70 74 65 6c 20 77    69 74 68 20 4e 41 4d 45 2e 0a 0a 4b 65 79 77 6f  | kend.for.gptel.with.NAME...Keywo | 
| 233c0 |  72 64 20 61 72 67 75 6d 65 6e 74 73 3a 0a 0a 43    55 52 4c 2d 41 52 47 53 20 28 6f 70 74 69 6f 6e  | rd.arguments:..CURL-ARGS.(option | 
| 233e0 |  61 6c 29 20 69 73 20 61 20 6c 69 73 74 20 6f 66    20 61 64 64 69 74 69 6f 6e 61 6c 20 43 75 72 6c  | al).is.a.list.of.additional.Curl | 
| 23400 |  20 61 72 67 75 6d 65 6e 74 73 2e 0a 0a 48 4f 53    54 20 28 6f 70 74 69 6f 6e 61 6c 29 20 69 73 20  | .arguments...HOST.(optional).is. | 
| 23420 |  74 68 65 20 41 50 49 20 68 6f 73 74 2c 20 5c 22    61 70 69 2e 61 6e 74 68 72 6f 70 69 63 2e 63 6f  | the.API.host,.\"api.anthropic.co | 
| 23440 |  6d 5c 22 20 62 79 20 64 65 66 61 75 6c 74 2e 0a    0a 4d 4f 44 45 4c 53 20 69 73 20 61 20 6c 69 73  | m\".by.default...MODELS.is.a.lis | 
| 23460 |  74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d    6f 64 65 6c 20 6e 61 6d 65 73 2e 0a 0a 53 54 52  | t.of.available.model.names...STR | 
| 23480 |  45 41 4d 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e    20 74 6f 20 74 6f 67 67 6c 65 20 73 74 72 65 61  | EAM.is.a.boolean.to.toggle.strea | 
| 234a0 |  6d 69 6e 67 20 72 65 73 70 6f 6e 73 65 73 2c 20    64 65 66 61 75 6c 74 73 20 74 6f 0a 66 61 6c 73  | ming.responses,.defaults.to.fals | 
| 234c0 |  65 2e 0a 0a 50 52 4f 54 4f 43 4f 4c 20 28 6f 70    74 69 6f 6e 61 6c 29 20 73 70 65 63 69 66 69 65  | e...PROTOCOL.(optional).specifie | 
| 234e0 |  73 20 74 68 65 20 70 72 6f 74 6f 63 6f 6c 2c 20    68 74 74 70 73 20 62 79 20 64 65 66 61 75 6c 74  | s.the.protocol,.https.by.default | 
| 23500 |  2e 0a 0a 45 4e 44 50 4f 49 4e 54 20 28 6f 70 74    69 6f 6e 61 6c 29 20 69 73 20 74 68 65 20 41 50  | ...ENDPOINT.(optional).is.the.AP | 
| 23520 |  49 20 65 6e 64 70 6f 69 6e 74 20 66 6f 72 20 63    6f 6d 70 6c 65 74 69 6f 6e 73 2c 20 64 65 66 61  | I.endpoint.for.completions,.defa | 
| 23540 |  75 6c 74 73 20 74 6f 0a 5c 22 2f 76 31 2f 6d 65    73 73 61 67 65 73 5c 22 2e 0a 0a 48 45 41 44 45  | ults.to.\"/v1/messages\"...HEADE | 
| 23560 |  52 20 28 6f 70 74 69 6f 6e 61 6c 29 20 69 73 20    66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 68  | R.(optional).is.for.additional.h | 
| 23580 |  65 61 64 65 72 73 20 74 6f 20 73 65 6e 64 20 77    69 74 68 20 65 61 63 68 0a 72 65 71 75 65 73 74  | eaders.to.send.with.each.request | 
| 235a0 |  2e 20 49 74 20 73 68 6f 75 6c 64 20 62 65 20 61    6e 20 61 6c 69 73 74 20 6f 72 20 61 20 66 75 6e  | ..It.should.be.an.alist.or.a.fun | 
| 235c0 |  63 74 69 6f 6e 20 74 68 61 74 20 72 65 74 75 6e    73 20 61 6e 0a 61 6c 69 73 74 2c 20 6c 69 6b 65  | ction.that.retuns.an.alist,.like | 
| 235e0 |  3a 0a 28 28 5c 22 43 6f 6e 74 65 6e 74 2d 54 79    70 65 5c 22 20 2e 20 5c 22 61 70 70 6c 69 63 61  | :.((\"Content-Type\"...\"applica | 
| 23600 |  74 69 6f 6e 2f 6a 73 6f 6e 5c 22 29 29 0a 0a 4b    45 59 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  | tion/json\"))..KEY.is.a.variable | 
| 23620 |  20 77 68 6f 73 65 20 76 61 6c 75 65 20 69 73 20    74 68 65 20 41 50 49 20 6b 65 79 2c 20 6f 72 20  | .whose.value.is.the.API.key,.or. | 
| 23640 |  66 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a 72 65    74 75 72 6e 73 20 74 68 65 20 6b 65 79 2e 22 0a  | function.that.returns.the.key.". | 
| 23660 |  20 20 28 64 65 63 6c 61 72 65 20 28 69 6e 64 65    6e 74 20 31 29 29 0a 20 20 28 6c 65 74 20 28 28  | ..(declare.(indent.1))...(let.(( | 
| 23680 |  62 61 63 6b 65 6e 64 20 28 67 70 74 65 6c 2d 2d    6d 61 6b 65 2d 61 6e 74 68 72 6f 70 69 63 0a 20  | backend.(gptel--make-anthropic.. | 
| 236a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 3a 63 75 72 6c 2d 61 72 67 73 20 63 75 72 6c  | .................:curl-args.curl | 
| 236c0 |  2d 61 72 67 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3a 6e 61 6d 65 20 6e 61  | -args...................:name.na | 
| 236e0 |  6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 3a 68 6f 73 74 20 68 6f 73 74 0a  | me...................:host.host. | 
| 23700 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 3a 68 65 61 64 65 72 20 68 65 61 64 65 72  | ..................:header.header | 
| 23720 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3a 6b 65 79 20 6b 65 79 0a 20 20 20 20  | ...................:key.key..... | 
| 23740 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 6d    6f 64 65 6c 73 20 6d 6f 64 65 6c 73 0a 20 20 20  | ..............:models.models.... | 
| 23760 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    70 72 6f 74 6f 63 6f 6c 20 70 72 6f 74 6f 63 6f  | ...............:protocol.protoco | 
| 23780 |  6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 3a 65 6e 64 70 6f 69 6e 74 20 65 6e  | l...................:endpoint.en | 
| 237a0 |  64 70 6f 69 6e 74 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 3a 73 74 72 65 61 6d  | dpoint...................:stream | 
| 237c0 |  20 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3a 75 72 6c 20 28  | .stream...................:url.( | 
| 237e0 |  69 66 20 70 72 6f 74 6f 63 6f 6c 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | if.protocol..................... | 
| 23800 |  20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 70    72 6f 74 6f 63 6f 6c 20 22 3a 2f 2f 22 20 68 6f  | .......(concat.protocol."://".ho | 
| 23820 |  73 74 20 65 6e 64 70 6f 69 6e 74 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | st.endpoint).................... | 
| 23840 |  20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 68 6f    73 74 20 65 6e 64 70 6f 69 6e 74 29 29 29 29 29  | ......(concat.host.endpoint))))) | 
| 23860 |  0a 20 20 20 20 28 70 72 6f 67 31 20 62 61 63 6b    65 6e 64 0a 20 20 20 20 20 20 28 73 65 74 66 20  | .....(prog1.backend.......(setf. | 
| 23880 |  28 61 6c 69 73 74 2d 67 65 74 20 6e 61 6d 65 20    67 70 74 65 6c 2d 2d 6b 6e 6f 77 6e 2d 62 61 63  | (alist-get.name.gptel--known-bac | 
| 238a0 |  6b 65 6e 64 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c  | kends........................nil | 
| 238c0 |  20 6e 69 6c 20 23 27 65 71 75 61 6c 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .nil.#'equal)................... | 
| 238e0 |  62 61 63 6b 65 6e 64 29 29 29 29 0a 0a 28 70 72    6f 76 69 64 65 20 27 67 70 74 65 6c 2d 61 6e 74  | backend))))..(provide.'gptel-ant | 
| 23900 |  68 72 6f 70 69 63 29 0a 3b 3b 3b 20 67 70 74 65    6c 2d 62 61 63 6b 65 6e 64 73 2e 65 6c 20 65 6e  | hropic).;;;.gptel-backends.el.en | 
| 23920 |  64 73 20 68 65 72 65 0a 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ds.here......................... | 
| 23940 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23960 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23980 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 239a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 239c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 239e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23a00 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 70 6b 67 2e 65 6c  | gptel-20240424.2306/gptel-pkg.el | 
| 23a20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23a40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23a60 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 23a80 |  30 30 30 30 36 37 37 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 34 33 34 36 00 20 30 00 00 00  | 0000677.00000000000.014346..0... | 
| 23aa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23ac0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23ae0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23b00 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 23b20 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 23b40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23b60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23b80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23ba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23bc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23be0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23c00 |  28 64 65 66 69 6e 65 2d 70 61 63 6b 61 67 65 20    22 67 70 74 65 6c 22 20 22 32 30 32 34 30 34 32  | (define-package."gptel"."2024042 | 
| 23c20 |  34 2e 32 33 30 36 22 20 22 49 6e 74 65 72 61 63    74 20 77 69 74 68 20 43 68 61 74 47 50 54 20 6f  | 4.2306"."Interact.with.ChatGPT.o | 
| 23c40 |  72 20 6f 74 68 65 72 20 4c 4c 4d 73 22 0a 20 20    27 28 28 65 6d 61 63 73 20 22 32 37 2e 31 22 29  | r.other.LLMs"...'((emacs."27.1") | 
| 23c60 |  0a 20 20 20 20 28 74 72 61 6e 73 69 65 6e 74 20    22 30 2e 34 2e 30 22 29 0a 20 20 20 20 28 63 6f  | .....(transient."0.4.0").....(co | 
| 23c80 |  6d 70 61 74 20 22 32 39 2e 31 2e 34 2e 31 22 29    29 0a 20 20 3a 63 6f 6d 6d 69 74 20 22 34 34 66  | mpat."29.1.4.1"))...:commit."44f | 
| 23ca0 |  65 62 31 36 33 37 66 61 35 37 38 36 38 33 38 32    63 33 61 63 66 31 63 36 34 38 65 32 34 65 39 38  | eb1637fa57868382c3acf1c648e24e98 | 
| 23cc0 |  34 65 37 30 34 22 20 3a 61 75 74 68 6f 72 73 0a    20 20 27 28 28 22 4b 61 72 74 68 69 6b 20 43 68  | 4e704".:authors...'(("Karthik.Ch | 
| 23ce0 |  69 6b 6d 61 67 61 6c 75 72 22 29 29 0a 20 20 3a    6d 61 69 6e 74 61 69 6e 65 72 73 0a 20 20 27 28  | ikmagalur"))...:maintainers...'( | 
| 23d00 |  28 22 4b 61 72 74 68 69 6b 20 43 68 69 6b 6d 61    67 61 6c 75 72 22 29 29 0a 20 20 3a 6d 61 69 6e  | ("Karthik.Chikmagalur"))...:main | 
| 23d20 |  74 61 69 6e 65 72 0a 20 20 27 28 22 4b 61 72 74    68 69 6b 20 43 68 69 6b 6d 61 67 61 6c 75 72 22  | tainer...'("Karthik.Chikmagalur" | 
| 23d40 |  29 0a 20 20 3a 6b 65 79 77 6f 72 64 73 0a 20 20    27 28 22 63 6f 6e 76 65 6e 69 65 6e 63 65 22 29  | )...:keywords...'("convenience") | 
| 23d60 |  0a 20 20 3a 75 72 6c 20 22 68 74 74 70 73 3a 2f    2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6b 61 72 74  | ...:url."https://github.com/kart | 
| 23d80 |  68 69 6e 6b 2f 67 70 74 65 6c 22 29 0a 3b 3b 20    4c 6f 63 61 6c 20 56 61 72 69 61 62 6c 65 73 3a  | hink/gptel").;;.Local.Variables: | 
| 23da0 |  0a 3b 3b 20 6e 6f 2d 62 79 74 65 2d 63 6f 6d 70    69 6c 65 3a 20 74 0a 3b 3b 20 45 6e 64 3a 0a 00  | .;;.no-byte-compile:.t.;;.End:.. | 
| 23dc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23de0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23e00 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 6f 72 67 2e 65 6c  | gptel-20240424.2306/gptel-org.el | 
| 23e20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23e40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23e60 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 23e80 |  30 30 34 34 34 30 37 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 34 33 35 33 00 20 30 00 00 00  | 0044407.00000000000.014353..0... | 
| 23ea0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23ec0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23ee0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23f00 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 23f20 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 23f40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23f60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23f80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23fa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23fc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 23fe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 24000 |  3b 3b 3b 20 67 70 74 65 6c 2d 6f 72 67 2e 65 6c    20 2d 2d 2d 20 4f 72 67 20 66 75 6e 63 74 69 6f  | ;;;.gptel-org.el.---.Org.functio | 
| 24020 |  6e 73 20 66 6f 72 20 67 70 74 65 6c 20 20 20 20    20 20 20 20 20 2d 2a 2d 20 6c 65 78 69 63 61 6c  | ns.for.gptel.........-*-.lexical | 
| 24040 |  2d 62 69 6e 64 69 6e 67 3a 20 74 3b 20 2d 2a 2d    0a 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28  | -binding:.t;.-*-..;;.Copyright.( | 
| 24060 |  43 29 20 32 30 32 34 20 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 0a 0a 3b 3b  | C).2024..Karthik.Chikmagalur..;; | 
| 24080 |  20 41 75 74 68 6f 72 3a 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 20 3c 6b 61  | .Author:.Karthik.Chikmagalur.<ka | 
| 240a0 |  72 74 68 69 6b 63 68 69 6b 6d 61 67 61 6c 75 72    40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 3b 3b 20 4b  | rthikchikmagalur@gmail.com>.;;.K | 
| 240c0 |  65 79 77 6f 72 64 73 3a 0a 0a 3b 3b 20 54 68 69    73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65  | eywords:..;;.This.program.is.fre | 
| 240e0 |  65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 20    63 61 6e 20 72 65 64 69 73 74 72 69 62 75 74 65  | e.software;.you.can.redistribute | 
| 24100 |  20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66    79 0a 3b 3b 20 69 74 20 75 6e 64 65 72 20 74 68  | .it.and/or.modify.;;.it.under.th | 
| 24120 |  65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 47    4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69  | e.terms.of.the.GNU.General.Publi | 
| 24140 |  63 20 4c 69 63 65 6e 73 65 20 61 73 20 70 75 62    6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 74 68 65  | c.License.as.published.by.;;.the | 
| 24160 |  20 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 46    6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74 68 65  | .Free.Software.Foundation,.eithe | 
| 24180 |  72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66 20 74    68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 0a 3b  | r.version.3.of.the.License,.or.; | 
| 241a0 |  3b 20 28 61 74 20 79 6f 75 72 20 6f 70 74 69 6f    6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72  | ;.(at.your.option).any.later.ver | 
| 241c0 |  73 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69 73 20 70    72 6f 67 72 61 6d 20 69 73 20 64 69 73 74 72 69  | sion...;;.This.program.is.distri | 
| 241e0 |  62 75 74 65 64 20 69 6e 20 74 68 65 20 68 6f 70    65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  | buted.in.the.hope.that.it.will.b | 
| 24200 |  65 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 62 75 74    20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52  | e.useful,.;;.but.WITHOUT.ANY.WAR | 
| 24220 |  52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65    76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  | RANTY;.without.even.the.implied. | 
| 24240 |  77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b 20 4d    45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f  | warranty.of.;;.MERCHANTABILITY.o | 
| 24260 |  72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20    50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f  | r.FITNESS.FOR.A.PARTICULAR.PURPO | 
| 24280 |  53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 3b 20    47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c  | SE...See.the.;;.GNU.General.Publ | 
| 242a0 |  69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d    6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 3b 3b  | ic.License.for.more.details...;; | 
| 242c0 |  20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65    20 72 65 63 65 69 76 65 64 20 61 20 63 6f 70 79  | .You.should.have.received.a.copy | 
| 242e0 |  20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65    72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e  | .of.the.GNU.General.Public.Licen | 
| 24300 |  73 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77 69 74 68    20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e 20 20  | se.;;.along.with.this.program... | 
| 24320 |  49 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68 74 74    70 73 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67  | If.not,.see.<https://www.gnu.org | 
| 24340 |  2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a 3b 3b    3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 0a 3b  | /licenses/>...;;;.Commentary:..; | 
| 24360 |  3b 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a 28 65 76    61 6c 2d 77 68 65 6e 2d 63 6f 6d 70 69 6c 65 20  | ;..;;;.Code:.(eval-when-compile. | 
| 24380 |  28 72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 62    29 29 0a 28 72 65 71 75 69 72 65 20 27 6f 72 67  | (require.'cl-lib)).(require.'org | 
| 243a0 |  2d 65 6c 65 6d 65 6e 74 29 0a 28 72 65 71 75 69    72 65 20 27 6f 75 74 6c 69 6e 65 29 0a 0a 28 64  | -element).(require.'outline)..(d | 
| 243c0 |  65 63 6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e 20    6f 72 67 2d 65 6c 65 6d 65 6e 74 2d 62 65 67 69  | eclare-function.org-element-begi | 
| 243e0 |  6e 20 22 6f 72 67 2d 65 6c 65 6d 65 6e 74 22 29    0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63 74 69  | n."org-element").(declare-functi | 
| 24400 |  6f 6e 20 6f 72 67 2d 65 6c 65 6d 65 6e 74 2d 6c    69 6e 65 61 67 65 2d 6d 61 70 20 22 6f 72 67 2d  | on.org-element-lineage-map."org- | 
| 24420 |  65 6c 65 6d 65 6e 74 2d 61 73 74 22 29 0a 0a 3b    3b 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  | element-ast")..;;.Functions.used | 
| 24440 |  20 66 6f 72 20 73 61 76 69 6e 67 2f 72 65 73 74    6f 72 69 6e 67 20 67 70 74 65 6c 20 73 74 61 74  | .for.saving/restoring.gptel.stat | 
| 24460 |  65 20 69 6e 20 4f 72 67 20 62 75 66 66 65 72 73    0a 28 64 65 66 76 61 72 20 6f 72 67 2d 65 6e 74  | e.in.Org.buffers.(defvar.org-ent | 
| 24480 |  72 79 2d 70 72 6f 70 65 72 74 79 2d 69 6e 68 65    72 69 74 65 64 2d 66 72 6f 6d 29 0a 28 64 65 63  | ry-property-inherited-from).(dec | 
| 244a0 |  6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 6f 72    67 2d 65 6e 74 72 79 2d 67 65 74 20 22 6f 72 67  | lare-function.org-entry-get."org | 
| 244c0 |  22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e 63    74 69 6f 6e 20 6f 72 67 2d 65 6e 74 72 79 2d 70  | ").(declare-function.org-entry-p | 
| 244e0 |  75 74 20 22 6f 72 67 22 29 0a 28 64 65 63 6c 61    72 65 2d 66 75 6e 63 74 69 6f 6e 20 6f 72 67 2d  | ut."org").(declare-function.org- | 
| 24500 |  77 69 74 68 2d 77 69 64 65 2d 62 75 66 66 65 72    20 22 6f 72 67 2d 6d 61 63 73 22 29 0a 28 64 65  | with-wide-buffer."org-macs").(de | 
| 24520 |  63 6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 6f    72 67 2d 73 65 74 2d 70 72 6f 70 65 72 74 79 20  | clare-function.org-set-property. | 
| 24540 |  22 6f 72 67 22 29 0a 28 64 65 63 6c 61 72 65 2d    66 75 6e 63 74 69 6f 6e 20 6f 72 67 2d 70 72 6f  | "org").(declare-function.org-pro | 
| 24560 |  70 65 72 74 79 2d 76 61 6c 75 65 73 20 22 6f 72    67 22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75 6e  | perty-values."org").(declare-fun | 
| 24580 |  63 74 69 6f 6e 20 6f 72 67 2d 6f 70 65 6e 2d 6c    69 6e 65 20 22 6f 72 67 22 29 0a 28 64 65 63 6c  | ction.org-open-line."org").(decl | 
| 245a0 |  61 72 65 2d 66 75 6e 63 74 69 6f 6e 20 6f 72 67    2d 61 74 2d 68 65 61 64 69 6e 67 2d 70 20 22 6f  | are-function.org-at-heading-p."o | 
| 245c0 |  72 67 22 29 0a 28 64 65 63 6c 61 72 65 2d 66 75    6e 63 74 69 6f 6e 20 6f 72 67 2d 67 65 74 2d 68  | rg").(declare-function.org-get-h | 
| 245e0 |  65 61 64 69 6e 67 20 22 6f 72 67 22 29 0a 28 64    65 63 6c 61 72 65 2d 66 75 6e 63 74 69 6f 6e 20  | eading."org").(declare-function. | 
| 24600 |  6f 72 67 2d 61 74 2d 68 65 61 64 69 6e 67 2d 70    20 22 6f 72 67 22 29 0a 0a 0c 0a 3b 3b 3b 20 55  | org-at-heading-p."org")....;;;.U | 
| 24620 |  73 65 72 20 6f 70 74 69 6f 6e 73 0a 28 64 65 66    63 75 73 74 6f 6d 20 67 70 74 65 6c 2d 6f 72 67  | ser.options.(defcustom.gptel-org | 
| 24640 |  2d 62 72 61 6e 63 68 69 6e 67 2d 63 6f 6e 74 65    78 74 20 6e 69 6c 0a 20 20 22 55 73 65 20 74 68  | -branching-context.nil..."Use.th | 
| 24660 |  65 20 6c 69 6e 65 61 67 65 20 6f 66 20 74 68 65    20 63 75 72 72 65 6e 74 20 68 65 61 64 69 6e 67  | e.lineage.of.the.current.heading | 
| 24680 |  20 61 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20    66 6f 72 20 67 70 74 65 6c 20 69 6e 20 4f 72 67  | .as.the.context.for.gptel.in.Org | 
| 246a0 |  20 62 75 66 66 65 72 73 2e 0a 0a 54 68 69 73 20    6d 61 6b 65 73 20 65 61 63 68 20 73 61 6d 65 20  | .buffers...This.makes.each.same. | 
| 246c0 |  6c 65 76 65 6c 20 68 65 61 64 69 6e 67 20 61 20    73 65 70 61 72 61 74 65 20 63 6f 6e 76 65 72 73  | level.heading.a.separate.convers | 
| 246e0 |  61 74 69 6f 6e 0a 62 72 61 6e 63 68 2e 0a 0a 42    79 20 64 65 66 61 75 6c 74 2c 20 67 70 74 65 6c  | ation.branch...By.default,.gptel | 
| 24700 |  20 75 73 65 73 20 61 20 6c 69 6e 65 61 72 20 63    6f 6e 74 65 78 74 3a 20 61 6c 6c 20 74 68 65 20  | .uses.a.linear.context:.all.the. | 
| 24720 |  74 65 78 74 20 75 70 20 74 6f 20 74 68 65 0a 63    75 72 73 6f 72 20 69 73 20 73 65 6e 74 20 74 6f  | text.up.to.the.cursor.is.sent.to | 
| 24740 |  20 74 68 65 20 4c 4c 4d 2e 20 20 45 6e 61 62 6c    69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  | .the.LLM...Enabling.this.option. | 
| 24760 |  6d 61 6b 65 73 20 74 68 65 0a 63 6f 6e 74 65 78    74 20 74 68 65 20 68 69 65 72 61 72 63 68 69 63  | makes.the.context.the.hierarchic | 
| 24780 |  61 6c 20 6c 69 6e 65 61 67 65 20 6f 66 20 74 68    65 20 63 75 72 72 65 6e 74 20 4f 72 67 20 68 65  | al.lineage.of.the.current.Org.he | 
| 247a0 |  61 64 69 6e 67 2e 20 20 49 6e 0a 74 68 69 73 20    65 78 61 6d 70 6c 65 3a 0a 0a 2d 2d 2d 2d 2d 0a  | ading...In.this.example:..-----. | 
| 247c0 |  54 6f 70 20 6c 65 76 65 6c 20 74 65 78 74 0a 0a    2a 20 48 65 61 64 69 6e 67 20 31 0a 68 65 61 64  | Top.level.text..*.Heading.1.head | 
| 247e0 |  69 6e 67 20 31 20 74 65 78 74 0a 0a 2a 20 48 65    61 64 69 6e 67 20 32 0a 68 65 61 64 69 6e 67 20  | ing.1.text..*.Heading.2.heading. | 
| 24800 |  32 20 74 65 78 74 0a 0a 2a 2a 20 48 65 61 64 69    6e 67 20 32 2e 31 0a 68 65 61 64 69 6e 67 20 32  | 2.text..**.Heading.2.1.heading.2 | 
| 24820 |  2e 31 20 74 65 78 74 0a 2a 2a 20 48 65 61 64 69    6e 67 20 32 2e 32 0a 68 65 61 64 69 6e 67 20 32  | .1.text.**.Heading.2.2.heading.2 | 
| 24840 |  2e 32 20 74 65 78 74 0a 2d 2d 2d 2d 2d 0a 0a 57    69 74 68 20 74 68 65 20 63 75 72 73 6f 72 20 61  | .2.text.-----..With.the.cursor.a | 
| 24860 |  74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65    20 62 75 66 66 65 72 2c 20 74 68 65 20 74 65 78  | t.the.end.of.the.buffer,.the.tex | 
| 24880 |  74 20 73 65 6e 74 20 74 6f 20 74 68 65 0a 4c 4c    4d 20 77 69 6c 6c 20 62 65 20 6c 69 6d 69 74 65  | t.sent.to.the.LLM.will.be.limite | 
| 248a0 |  64 20 74 6f 0a 0a 2d 2d 2d 2d 2d 0a 54 6f 70 20    6c 65 76 65 6c 20 74 65 78 74 0a 0a 2a 20 48 65  | d.to..-----.Top.level.text..*.He | 
| 248c0 |  61 64 69 6e 67 20 32 0a 68 65 61 64 69 6e 67 20    32 20 74 65 78 74 0a 0a 2a 2a 20 48 65 61 64 69  | ading.2.heading.2.text..**.Headi | 
| 248e0 |  6e 67 20 32 2e 32 0a 68 65 61 64 69 6e 67 20 32    2e 32 20 74 65 78 74 0a 2d 2d 2d 2d 2d 0a 0a 54  | ng.2.2.heading.2.2.text.-----..T | 
| 24900 |  68 69 73 20 6d 61 6b 65 73 20 69 74 20 66 65 61    73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 6d 75  | his.makes.it.feasible.to.have.mu | 
| 24920 |  6c 74 69 70 6c 65 20 63 6f 6e 76 65 72 73 61 74    69 6f 6e 20 62 72 61 6e 63 68 65 73 2e 22 0a 20  | ltiple.conversation.branches.".. | 
| 24940 |  20 3a 6c 6f 63 61 6c 20 74 0a 20 20 3a 74 79 70    65 20 27 62 6f 6f 6c 65 61 6e 0a 20 20 3a 67 72  | .:local.t...:type.'boolean...:gr | 
| 24960 |  6f 75 70 20 27 67 70 74 65 6c 29 0a 0a 0c 0a 3b    3b 3b 20 53 65 74 74 69 6e 67 20 63 6f 6e 74 65  | oup.'gptel)....;;;.Setting.conte | 
| 24980 |  78 74 20 61 6e 64 20 63 72 65 61 74 69 6e 67 20    71 75 65 72 69 65 73 0a 28 64 65 66 75 6e 20 67  | xt.and.creating.queries.(defun.g | 
| 249a0 |  70 74 65 6c 2d 6f 72 67 2d 2d 67 65 74 2d 74 6f    70 69 63 2d 73 74 61 72 74 20 28 29 0a 20 20 22  | ptel-org--get-topic-start.()..." | 
| 249c0 |  49 66 20 61 20 63 6f 6e 76 65 72 73 61 74 69 6f    6e 20 74 6f 70 69 63 20 69 73 20 73 65 74 2c 20  | If.a.conversation.topic.is.set,. | 
| 249e0 |  72 65 74 75 72 6e 20 69 74 2e 22 0a 20 20 28 77    68 65 6e 20 28 6f 72 67 2d 65 6e 74 72 79 2d 67  | return.it."...(when.(org-entry-g | 
| 24a00 |  65 74 20 28 70 6f 69 6e 74 29 20 22 47 50 54 45    4c 5f 54 4f 50 49 43 22 20 27 69 6e 68 65 72 69  | et.(point)."GPTEL_TOPIC".'inheri | 
| 24a20 |  74 29 0a 20 20 20 20 28 6d 61 72 6b 65 72 2d 70    6f 73 69 74 69 6f 6e 20 6f 72 67 2d 65 6e 74 72  | t).....(marker-position.org-entr | 
| 24a40 |  79 2d 70 72 6f 70 65 72 74 79 2d 69 6e 68 65 72    69 74 65 64 2d 66 72 6f 6d 29 29 29 0a 0a 28 64  | y-property-inherited-from)))..(d | 
| 24a60 |  65 66 75 6e 20 67 70 74 65 6c 2d 6f 72 67 2d 73    65 74 2d 74 6f 70 69 63 20 28 74 6f 70 69 63 29  | efun.gptel-org-set-topic.(topic) | 
| 24a80 |  0a 20 20 22 53 65 74 20 61 20 74 6f 70 69 63 20    61 6e 64 20 6c 69 6d 69 74 20 74 68 69 73 20 63  | ..."Set.a.topic.and.limit.this.c | 
| 24aa0 |  6f 6e 76 65 72 73 61 74 69 6f 6e 20 74 6f 20 74    68 65 20 63 75 72 72 65 6e 74 20 68 65 61 64 69  | onversation.to.the.current.headi | 
| 24ac0 |  6e 67 2e 0a 0a 54 68 69 73 20 6c 69 6d 69 74 73    20 74 68 65 20 63 6f 6e 74 65 78 74 20 73 65 6e  | ng...This.limits.the.context.sen | 
| 24ae0 |  74 20 74 6f 20 74 68 65 20 4c 4c 4d 20 74 6f 20    74 68 65 20 74 65 78 74 20 62 65 74 77 65 65 6e  | t.to.the.LLM.to.the.text.between | 
| 24b00 |  20 74 68 65 0a 63 75 72 72 65 6e 74 20 68 65 61    64 69 6e 67 20 61 6e 64 20 74 68 65 20 63 75 72  | .the.current.heading.and.the.cur | 
| 24b20 |  73 6f 72 20 70 6f 73 69 74 69 6f 6e 2e 22 0a 20    20 28 69 6e 74 65 72 61 63 74 69 76 65 0a 20 20  | sor.position."...(interactive... | 
| 24b40 |  20 28 6c 69 73 74 0a 20 20 20 20 28 70 72 6f 67    6e 0a 20 20 20 20 20 20 28 6f 72 20 28 64 65 72  | .(list.....(progn.......(or.(der | 
| 24b60 |  69 76 65 64 2d 6d 6f 64 65 2d 70 20 27 6f 72 67    2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 20 20 20  | ived-mode-p.'org-mode).......... | 
| 24b80 |  20 28 75 73 65 72 2d 65 72 72 6f 72 20 22 53 75    70 70 6f 72 74 20 66 6f 72 20 6d 75 6c 74 69 70  | .(user-error."Support.for.multip | 
| 24ba0 |  6c 65 20 74 6f 70 69 63 73 20 70 65 72 20 62 75    66 66 65 72 20 69 73 20 6f 6e 6c 79 20 69 6d 70  | le.topics.per.buffer.is.only.imp | 
| 24bc0 |  6c 65 6d 65 6e 74 65 64 20 66 6f 72 20 60 6f 72    67 2d 6d 6f 64 65 27 2e 22 29 29 0a 20 20 20 20  | lemented.for.`org-mode'."))..... | 
| 24be0 |  20 20 28 63 6f 6d 70 6c 65 74 69 6e 67 2d 72 65    61 64 20 22 53 65 74 20 74 6f 70 69 63 20 61 73  | ..(completing-read."Set.topic.as | 
| 24c00 |  3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6f 72 67 2d  | :."........................(org- | 
| 24c20 |  70 72 6f 70 65 72 74 79 2d 76 61 6c 75 65 73 20    22 47 50 54 45 4c 5f 54 4f 50 49 43 22 29 0a 20  | property-values."GPTEL_TOPIC").. | 
| 24c40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 6e 69 6c 20 6e 69 6c 20 28 64  | ......................nil.nil.(d | 
| 24c60 |  6f 77 6e 63 61 73 65 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | owncase......................... | 
| 24c80 |  20 20 20 20 20 20 20 20 28 74 72 75 6e 63 61 74    65 2d 73 74 72 69 6e 67 2d 74 6f 2d 77 69 64 74  | ........(truncate-string-to-widt | 
| 24ca0 |  68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | h............................... | 
| 24cc0 |  20 20 20 28 73 75 62 73 74 72 69 6e 67 2d 6e 6f    2d 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20 20  | ...(substring-no-properties..... | 
| 24ce0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72  | ..............................(r | 
| 24d00 |  65 70 6c 61 63 65 2d 72 65 67 65 78 70 2d 69 6e    2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20  | eplace-regexp-in-string......... | 
| 24d20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 73 2d  | ..........................."\\s- | 
| 24d40 |  2b 22 20 22 2d 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | +"."-".......................... | 
| 24d60 |  20 20 20 20 20 20 20 20 20 20 28 6f 72 67 2d 67    65 74 2d 68 65 61 64 69 6e 67 29 29 29 0a 20 20  | ..........(org-get-heading)))... | 
| 24d80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 35  | ...............................5 | 
| 24da0 |  30 29 29 29 29 29 29 0a 20 20 28 77 68 65 6e 20    28 73 74 72 69 6e 67 70 20 74 6f 70 69 63 29 20  | 0))))))...(when.(stringp.topic). | 
| 24dc0 |  28 6f 72 67 2d 73 65 74 2d 70 72 6f 70 65 72 74    79 20 22 47 50 54 45 4c 5f 54 4f 50 49 43 22 20  | (org-set-property."GPTEL_TOPIC". | 
| 24de0 |  74 6f 70 69 63 29 29 29 0a 0a 3b 3b 20 4e 4f 54    45 3a 20 54 68 69 73 20 63 61 6e 20 62 65 20 63  | topic)))..;;.NOTE:.This.can.be.c | 
| 24e00 |  6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 63 6c    2d 64 65 66 6d 65 74 68 6f 64 20 66 6f 72 20 60  | onverted.to.a.cl-defmethod.for.` | 
| 24e20 |  67 70 74 65 6c 2d 2d 70 61 72 73 65 2d 62 75 66    66 65 72 27 0a 3b 3b 20 28 63 6f 6e 63 65 70 74  | gptel--parse-buffer'.;;.(concept | 
| 24e40 |  75 61 6c 6c 79 20 63 6c 65 61 6e 65 72 29 2c 20    62 75 74 20 77 69 6c 6c 20 63 61 75 73 65 20 6c  | ually.cleaner),.but.will.cause.l | 
| 24e60 |  6f 61 64 2d 6f 72 64 65 72 20 69 73 73 75 65 73    20 69 6e 20 67 70 74 65 6c 2e 65 6c 20 61 6e 64  | oad-order.issues.in.gptel.el.and | 
| 24e80 |  0a 3b 3b 20 6d 69 67 68 74 20 62 65 20 68 61 72    64 65 72 20 74 6f 20 64 65 62 75 67 2e 0a 28 64  | .;;.might.be.harder.to.debug..(d | 
| 24ea0 |  65 66 75 6e 20 67 70 74 65 6c 2d 6f 72 67 2d 2d    63 72 65 61 74 65 2d 70 72 6f 6d 70 74 20 28 26  | efun.gptel-org--create-prompt.(& | 
| 24ec0 |  6f 70 74 69 6f 6e 61 6c 20 70 72 6f 6d 70 74 2d    65 6e 64 29 0a 20 20 22 52 65 74 75 72 6e 20 61  | optional.prompt-end)..."Return.a | 
| 24ee0 |  20 66 75 6c 6c 20 63 6f 6e 76 65 72 73 61 74 69    6f 6e 20 70 72 6f 6d 70 74 20 66 72 6f 6d 20 74  | .full.conversation.prompt.from.t | 
| 24f00 |  68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74    68 69 73 20 4f 72 67 20 62 75 66 66 65 72 2e 0a  | he.contents.of.this.Org.buffer.. | 
| 24f20 |  0a 49 66 20 60 67 70 74 65 6c 2d 2d 6e 75 6d 2d    6d 65 73 73 61 67 65 73 2d 74 6f 2d 73 65 6e 64  | .If.`gptel--num-messages-to-send | 
| 24f40 |  27 20 69 73 20 73 65 74 2c 20 6c 69 6d 69 74 20    74 6f 20 74 68 61 74 20 6d 61 6e 79 0a 72 65 63  | '.is.set,.limit.to.that.many.rec | 
| 24f60 |  65 6e 74 20 65 78 63 68 61 6e 67 65 73 2e 0a 0a    54 68 65 20 70 72 6f 6d 70 74 20 69 73 20 63 6f  | ent.exchanges...The.prompt.is.co | 
| 24f80 |  6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 74    68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  | nstructed.from.the.contents.of.t | 
| 24fa0 |  68 65 20 62 75 66 66 65 72 20 75 70 20 74 6f 0a    70 6f 69 6e 74 2c 20 6f 72 20 50 52 4f 4d 50 54  | he.buffer.up.to.point,.or.PROMPT | 
| 24fc0 |  2d 45 4e 44 20 69 66 20 70 72 6f 76 69 64 65 64    2e 20 20 49 74 73 20 63 6f 6e 74 65 6e 74 73 20  | -END.if.provided...Its.contents. | 
| 24fe0 |  64 65 70 65 6e 64 20 6f 6e 20 74 68 65 0a 76 61    6c 75 65 20 6f 66 20 60 67 70 74 65 6c 2d 6f 72  | depend.on.the.value.of.`gptel-or | 
| 25000 |  67 2d 62 72 61 6e 63 68 69 6e 67 2d 63 6f 6e 74    65 78 74 27 2c 20 77 68 69 63 68 20 73 65 65 2e  | g-branching-context',.which.see. | 
| 25020 |  22 0a 20 20 28 75 6e 6c 65 73 73 20 70 72 6f 6d    70 74 2d 65 6e 64 20 28 73 65 74 71 20 70 72 6f  | "...(unless.prompt-end.(setq.pro | 
| 25040 |  6d 70 74 2d 65 6e 64 20 28 70 6f 69 6e 74 29 29    29 0a 20 20 28 6c 65 74 20 28 28 6d 61 78 2d 65  | mpt-end.(point)))...(let.((max-e | 
| 25060 |  6e 74 72 69 65 73 20 28 61 6e 64 20 67 70 74 65    6c 2d 2d 6e 75 6d 2d 6d 65 73 73 61 67 65 73 2d  | ntries.(and.gptel--num-messages- | 
| 25080 |  74 6f 2d 73 65 6e 64 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | to-send......................... | 
| 250a0 |  20 20 28 2a 20 32 20 67 70 74 65 6c 2d 2d 6e 75    6d 2d 6d 65 73 73 61 67 65 73 2d 74 6f 2d 73 65  | ..(*.2.gptel--num-messages-to-se | 
| 250c0 |  6e 64 29 29 29 0a 20 20 20 20 20 20 20 20 28 74    6f 70 69 63 2d 73 74 61 72 74 20 28 67 70 74 65  | nd))).........(topic-start.(gpte | 
| 250e0 |  6c 2d 6f 72 67 2d 2d 67 65 74 2d 74 6f 70 69 63    2d 73 74 61 72 74 29 29 29 0a 20 20 20 20 28 77  | l-org--get-topic-start))).....(w | 
| 25100 |  68 65 6e 20 74 6f 70 69 63 2d 73 74 61 72 74 0a    20 20 20 20 20 20 3b 3b 20 6e 61 72 72 6f 77 20  | hen.topic-start.......;;.narrow. | 
| 25120 |  74 6f 20 47 50 54 45 4c 5f 54 4f 50 49 43 20 70    72 6f 70 65 72 74 79 20 73 63 6f 70 65 0a 20 20  | to.GPTEL_TOPIC.property.scope... | 
| 25140 |  20 20 20 20 28 6e 61 72 72 6f 77 2d 74 6f 2d 72    65 67 69 6f 6e 20 74 6f 70 69 63 2d 73 74 61 72  | ....(narrow-to-region.topic-star | 
| 25160 |  74 20 70 72 6f 6d 70 74 2d 65 6e 64 29 29 0a 20    20 20 20 28 69 66 20 67 70 74 65 6c 2d 6f 72 67  | t.prompt-end)).....(if.gptel-org | 
| 25180 |  2d 62 72 61 6e 63 68 69 6e 67 2d 63 6f 6e 74 65    78 74 0a 20 20 20 20 20 20 20 20 3b 3b 20 43 72  | -branching-context.........;;.Cr | 
| 251a0 |  65 61 74 65 20 70 72 6f 6d 70 74 20 66 72 6f 6d    20 64 69 72 65 63 74 20 61 6e 63 65 73 74 6f 72  | eate.prompt.from.direct.ancestor | 
| 251c0 |  73 20 6f 66 20 70 6f 69 6e 74 0a 20 20 20 20 20    20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69  | s.of.point.........(save-excursi | 
| 251e0 |  6f 6e 0a 20 20 20 20 20 20 20 20 20 20 28 6c 65    74 2a 20 28 28 6f 72 67 2d 62 75 66 20 28 63 75  | on...........(let*.((org-buf.(cu | 
| 25200 |  72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | rrent-buffer)).................. | 
| 25220 |  28 73 74 61 72 74 2d 62 6f 75 6e 64 73 20 28 6f    72 67 2d 65 6c 65 6d 65 6e 74 2d 6c 69 6e 65 61  | (start-bounds.(org-element-linea | 
| 25240 |  67 65 2d 6d 61 70 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ge-map.......................... | 
| 25260 |  20 20 20 20 20 20 20 20 20 20 28 6f 72 67 2d 65    6c 65 6d 65 6e 74 2d 61 74 2d 70 6f 69 6e 74 29  | ..........(org-element-at-point) | 
| 25280 |  20 23 27 6f 72 67 2d 65 6c 65 6d 65 6e 74 2d 62    65 67 69 6e 0a 20 20 20 20 20 20 20 20 20 20 20  | .#'org-element-begin............ | 
| 252a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 27 28 68 65 61 64 6c 69 6e 65  | ......................'(headline | 
| 252c0 |  20 6f 72 67 2d 64 61 74 61 29 20 27 77 69 74 68    2d 73 65 6c 66 29 29 0a 20 20 20 20 20 20 20 20  | .org-data).'with-self))......... | 
| 252e0 |  20 20 20 20 20 20 20 20 20 28 65 6e 64 2d 62 6f    75 6e 64 73 0a 20 20 20 20 20 20 20 20 20 20 20  | .........(end-bounds............ | 
| 25300 |  20 20 20 20 20 20 20 28 63 6c 2d 6c 6f 6f 70 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .......(cl-loop................. | 
| 25320 |  20 20 20 66 6f 72 20 70 6f 73 20 69 6e 20 28 63    64 72 20 73 74 61 72 74 2d 62 6f 75 6e 64 73 29  | ...for.pos.in.(cdr.start-bounds) | 
| 25340 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 77 68 69 6c 65 0a 20 20 20 20 20 20  | ....................while....... | 
| 25360 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 6e    64 20 28 3e 3d 20 70 6f 73 20 28 70 6f 69 6e 74  | .............(and.(>=.pos.(point | 
| 25380 |  2d 6d 69 6e 29 29 20 3b 72 65 73 70 65 63 74 20    6e 61 72 72 6f 77 69 6e 67 0a 20 20 20 20 20 20  | -min)).;respect.narrowing....... | 
| 253a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 67 6f 74 6f 2d 63 68 61 72 20 70 6f 73  | ..................(goto-char.pos | 
| 253c0 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3b 3b 20 6f 72 67  | ).........................;;.org | 
| 253e0 |  2d 65 6c 65 6d 65 6e 74 2d 6c 69 6e 65 61 67 65    20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20  | -element-lineage.always.returns. | 
| 25400 |  61 6e 20 65 78 74 72 61 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | an.extra........................ | 
| 25420 |  20 3b 3b 20 28 6f 72 67 2d 64 61 74 61 29 20 65    6c 65 6d 65 6e 74 20 61 74 20 70 6f 69 6e 74 20  | .;;.(org-data).element.at.point. | 
| 25440 |  31 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20    61 6c 73 6f 20 61 0a 20 20 20 20 20 20 20 20 20  | 1...If.there.is.also.a.......... | 
| 25460 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b    3b 20 68 65 61 64 69 6e 67 20 68 65 72 65 2c 20  | ...............;;.heading.here,. | 
| 25480 |  69 74 20 69 73 20 65 69 74 68 65 72 20 61 20 66    61 6c 73 65 20 70 6f 73 69 74 69 76 65 20 6f 72  | it.is.either.a.false.positive.or | 
| 254a0 |  20 77 65 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 77  | .we.........................;;.w | 
| 254c0 |  6f 75 6c 64 20 62 65 20 64 6f 75 62 6c 65 20 63    6f 75 6e 74 69 6e 67 20 69 74 2e 20 20 53 6f 20  | ould.be.double.counting.it...So. | 
| 254e0 |  77 65 20 72 65 6a 65 63 74 20 74 68 69 73 20 6e    6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  | we.reject.this.node............. | 
| 25500 |  20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 77    68 65 6e 20 61 6c 73 6f 20 61 74 20 61 20 68 65  | ............;;.when.also.at.a.he | 
| 25520 |  61 64 69 6e 67 2e 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | ading..........................( | 
| 25540 |  6e 6f 74 20 28 61 6e 64 20 28 65 71 20 70 6f 73    20 31 29 20 28 6f 72 67 2d 61 74 2d 68 65 61 64  | not.(and.(eq.pos.1).(org-at-head | 
| 25560 |  69 6e 67 2d 70 29 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 20  | ing-p))))....................do. | 
| 25580 |  28 6f 75 74 6c 69 6e 65 2d 6e 65 78 74 2d 68 65    61 64 69 6e 67 29 0a 20 20 20 20 20 20 20 20 20  | (outline-next-heading).......... | 
| 255a0 |  20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63    74 20 28 70 6f 69 6e 74 29 20 69 6e 74 6f 20 65  | ..........collect.(point).into.e | 
| 255c0 |  6e 64 73 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 72  | nds....................finally.r | 
| 255e0 |  65 74 75 72 6e 20 28 63 6f 6e 73 20 70 72 6f 6d    70 74 2d 65 6e 64 20 65 6e 64 73 29 29 29 29 0a  | eturn.(cons.prompt-end.ends)))). | 
| 25600 |  20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74    68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20  | ............(with-temp-buffer... | 
| 25620 |  20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74    71 2d 6c 6f 63 61 6c 20 67 70 74 65 6c 2d 62 61  | ............(setq-local.gptel-ba | 
| 25640 |  63 6b 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ckend........................... | 
| 25660 |  28 62 75 66 66 65 72 2d 6c 6f 63 61 6c 2d 76 61    6c 75 65 20 27 67 70 74 65 6c 2d 62 61 63 6b 65  | (buffer-local-value.'gptel-backe | 
| 25680 |  6e 64 20 6f 72 67 2d 62 75 66 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | nd.org-buf)..................... | 
| 256a0 |  20 20 20 20 20 20 67 70 74 65 6c 2d 2d 73 79 73    74 65 6d 2d 6d 65 73 73 61 67 65 0a 20 20 20 20  | ......gptel--system-message..... | 
| 256c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 62 75 66 66 65 72 2d 6c 6f  | ......................(buffer-lo | 
| 256e0 |  63 61 6c 2d 76 61 6c 75 65 20 27 67 70 74 65 6c    2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73 61 67 65  | cal-value.'gptel--system-message | 
| 25700 |  20 6f 72 67 2d 62 75 66 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .org-buf)....................... | 
| 25720 |  20 20 20 20 67 70 74 65 6c 2d 6d 6f 64 65 6c 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ....gptel-model................. | 
| 25740 |  20 20 20 20 20 20 20 20 20 20 28 62 75 66 66 65    72 2d 6c 6f 63 61 6c 2d 76 61 6c 75 65 20 27 67  | ..........(buffer-local-value.'g | 
| 25760 |  70 74 65 6c 2d 6d 6f 64 65 6c 20 6f 72 67 2d 62    75 66 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | ptel-model.org-buf))............ | 
| 25780 |  20 20 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20    73 74 61 72 74 20 69 6e 20 73 74 61 72 74 2d 62  | ...(cl-loop.for.start.in.start-b | 
| 257a0 |  6f 75 6e 64 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  | ounds........................for | 
| 257c0 |  20 65 6e 64 20 20 20 69 6e 20 65 6e 64 2d 62 6f    75 6e 64 73 0a 20 20 20 20 20 20 20 20 20 20 20  | .end...in.end-bounds............ | 
| 257e0 |  20 20 20 20 20 20 20 20 20 20 20 20 64 6f 20 28    69 6e 73 65 72 74 2d 62 75 66 66 65 72 2d 73 75  | ............do.(insert-buffer-su | 
| 25800 |  62 73 74 72 69 6e 67 20 6f 72 67 2d 62 75 66 20    73 74 61 72 74 20 65 6e 64 29 0a 20 20 20 20 20  | bstring.org-buf.start.end)...... | 
| 25820 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f  | ..................(goto-char.(po | 
| 25840 |  69 6e 74 2d 6d 69 6e 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63  | int-min)))...............(goto-c | 
| 25860 |  68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | har.(point-max))...............( | 
| 25880 |  6c 65 74 20 28 28 6d 61 6a 6f 72 2d 6d 6f 64 65    20 27 6f 72 67 2d 6d 6f 64 65 29 29 0a 20 20 20  | let.((major-mode.'org-mode)).... | 
| 258a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 70    74 65 6c 2d 2d 70 61 72 73 65 2d 62 75 66 66 65  | .............(gptel--parse-buffe | 
| 258c0 |  72 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 20    6d 61 78 2d 65 6e 74 72 69 65 73 29 29 29 29 29  | r.gptel-backend.max-entries))))) | 
| 258e0 |  0a 20 20 20 20 20 20 3b 3b 20 43 72 65 61 74 65    20 70 72 6f 6d 70 74 20 74 68 65 20 75 73 75 61  | .......;;.Create.prompt.the.usua | 
| 25900 |  6c 20 77 61 79 0a 20 20 20 20 20 20 28 67 70 74    65 6c 2d 2d 70 61 72 73 65 2d 62 75 66 66 65 72  | l.way.......(gptel--parse-buffer | 
| 25920 |  20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 20 6d    61 78 2d 65 6e 74 72 69 65 73 29 29 29 29 0a 0a  | .gptel-backend.max-entries)))).. | 
| 25940 |  28 64 65 66 75 6e 20 67 70 74 65 6c 2d 6f 72 67    2d 2d 73 65 6e 64 2d 77 69 74 68 2d 70 72 6f 70  | (defun.gptel-org--send-with-prop | 
| 25960 |  73 20 28 73 65 6e 64 2d 66 75 6e 20 26 72 65 73    74 20 61 72 67 73 29 0a 20 20 22 43 6f 6e 64 69  | s.(send-fun.&rest.args)..."Condi | 
| 25980 |  74 69 6f 6e 61 6c 6c 79 20 6d 6f 64 69 66 79 20    53 45 4e 44 2d 46 55 4e 27 73 20 63 61 6c 6c 69  | tionally.modify.SEND-FUN's.calli | 
| 259a0 |  6e 67 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 0a    0a 49 66 20 69 6e 20 61 6e 20 4f 72 67 20 62 75  | ng.environment...If.in.an.Org.bu | 
| 259c0 |  66 66 65 72 20 75 6e 64 65 72 20 61 20 68 65 61    64 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  | ffer.under.a.heading.containing. | 
| 259e0 |  61 20 73 74 6f 72 65 64 20 67 70 74 65 6c 0a 63    6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 75 73  | a.stored.gptel.configuration,.us | 
| 25a00 |  65 20 74 68 61 74 20 66 6f 72 20 72 65 71 75 65    73 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  | e.that.for.requests.instead...Th | 
| 25a20 |  69 73 20 69 6e 63 6c 75 64 65 73 20 74 68 65 0a    73 79 73 74 65 6d 20 6d 65 73 73 61 67 65 2c 20  | is.includes.the.system.message,. | 
| 25a40 |  6d 6f 64 65 6c 20 61 6e 64 20 70 72 6f 76 69 64    65 72 20 28 62 61 63 6b 65 6e 64 29 2c 20 61 6d  | model.and.provider.(backend),.am | 
| 25a60 |  6f 6e 67 20 6f 74 68 65 72 0a 70 61 72 61 6d 65    74 65 72 73 2e 22 0a 20 20 28 69 66 20 28 64 65  | ong.other.parameters."...(if.(de | 
| 25a80 |  72 69 76 65 64 2d 6d 6f 64 65 2d 70 20 27 6f 72    67 2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 28 70  | rived-mode-p.'org-mode).......(p | 
| 25aa0 |  63 61 73 65 2d 6c 65 74 20 28 28 60 28 2c 67 70    74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73  | case-let.((`(,gptel--system-mess | 
| 25ac0 |  61 67 65 20 2c 67 70 74 65 6c 2d 62 61 63 6b 65    6e 64 20 2c 67 70 74 65 6c 2d 6d 6f 64 65 6c 0a  | age.,gptel-backend.,gptel-model. | 
| 25ae0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 2c 67 70 74 65 6c 2d 74 65 6d 70  | .....................,gptel-temp | 
| 25b00 |  65 72 61 74 75 72 65 20 2c 67 70 74 65 6c 2d 6d    61 78 2d 74 6f 6b 65 6e 73 29 0a 20 20 20 20 20  | erature.,gptel-max-tokens)...... | 
| 25b20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73    65 71 2d 6d 61 70 6e 20 28 6c 61 6d 62 64 61 20  | ..............(seq-mapn.(lambda. | 
| 25b40 |  28 61 20 62 29 20 28 6f 72 20 61 20 62 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | (a.b).(or.a.b))................. | 
| 25b60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 70    74 65 6c 2d 6f 72 67 2d 2d 65 6e 74 72 79 2d 70  | .............(gptel-org--entry-p | 
| 25b80 |  72 6f 70 65 72 74 69 65 73 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | roperties)...................... | 
| 25ba0 |  20 20 20 20 20 20 20 20 28 6c 69 73 74 20 67 70    74 65 6c 2d 2d 73 79 73 74 65 6d 2d 6d 65 73 73  | ........(list.gptel--system-mess | 
| 25bc0 |  61 67 65 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e    64 20 67 70 74 65 6c 2d 6d 6f 64 65 6c 0a 20 20  | age.gptel-backend.gptel-model... | 
| 25be0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 25c00 |  20 67 70 74 65 6c 2d 74 65 6d 70 65 72 61 74 75    72 65 20 67 70 74 65 6c 2d 6d 61 78 2d 74 6f 6b  | .gptel-temperature.gptel-max-tok | 
| 25c20 |  65 6e 73 29 29 29 29 0a 20 20 20 20 20 20 20 20    28 61 70 70 6c 79 20 73 65 6e 64 2d 66 75 6e 20  | ens)))).........(apply.send-fun. | 
| 25c40 |  61 72 67 73 29 29 0a 20 20 20 20 28 61 70 70 6c    79 20 73 65 6e 64 2d 66 75 6e 20 61 72 67 73 29  | args)).....(apply.send-fun.args) | 
| 25c60 |  29 29 0a 0a 28 61 64 76 69 63 65 2d 61 64 64 20    27 67 70 74 65 6c 2d 73 65 6e 64 20 3a 61 72 6f  | ))..(advice-add.'gptel-send.:aro | 
| 25c80 |  75 6e 64 20 23 27 67 70 74 65 6c 2d 6f 72 67 2d    2d 73 65 6e 64 2d 77 69 74 68 2d 70 72 6f 70 73  | und.#'gptel-org--send-with-props | 
| 25ca0 |  29 0a 28 61 64 76 69 63 65 2d 61 64 64 20 27 67    70 74 65 6c 2d 2d 73 75 66 66 69 78 2d 73 65 6e  | ).(advice-add.'gptel--suffix-sen | 
| 25cc0 |  64 20 3a 61 72 6f 75 6e 64 20 23 27 67 70 74 65    6c 2d 6f 72 67 2d 2d 73 65 6e 64 2d 77 69 74 68  | d.:around.#'gptel-org--send-with | 
| 25ce0 |  2d 70 72 6f 70 73 29 0a 0a 3b 3b 20 3b 3b 20 4e    4f 54 45 3a 20 42 61 73 69 63 20 75 73 65 73 20  | -props)..;;.;;.NOTE:.Basic.uses. | 
| 25d00 |  69 6e 20 6f 72 67 2d 6d 6f 64 65 20 61 72 65 20    63 6f 76 65 72 65 64 20 62 79 20 61 64 76 69 73  | in.org-mode.are.covered.by.advis | 
| 25d20 |  69 6e 67 20 67 70 74 65 6c 2d 73 65 6e 64 20 61    6e 64 0a 3b 3b 20 3b 3b 20 67 70 74 65 6c 2d 2d  | ing.gptel-send.and.;;.;;.gptel-- | 
| 25d40 |  73 75 66 66 69 78 2d 73 65 6e 64 2e 20 20 46 6f    72 20 63 75 73 74 6f 6d 20 63 6f 6d 6d 61 6e 64  | suffix-send...For.custom.command | 
| 25d60 |  73 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65    63 65 73 73 61 72 79 20 74 6f 20 61 64 76 69 73  | s.it.might.be.necessary.to.advis | 
| 25d80 |  65 0a 3b 3b 20 3b 3b 20 67 70 74 65 6c 2d 72 65    71 75 65 73 74 20 69 6e 73 74 65 61 64 2e 0a 3b  | e.;;.;;.gptel-request.instead..; | 
| 25da0 |  3b 20 28 61 64 76 69 63 65 2d 61 64 64 20 27 67    70 74 65 6c 2d 72 65 71 75 65 73 74 20 3a 61 72  | ;.(advice-add.'gptel-request.:ar | 
| 25dc0 |  6f 75 6e 64 20 23 27 67 70 74 65 6c 2d 6f 72 67    2d 2d 73 65 6e 64 2d 77 69 74 68 2d 70 72 6f 70  | ound.#'gptel-org--send-with-prop | 
| 25de0 |  73 29 0a 0a 0c 0a 3b 3b 3b 20 53 61 76 69 6e 67    20 61 6e 64 20 72 65 73 74 6f 72 69 6e 67 20 73  | s)....;;;.Saving.and.restoring.s | 
| 25e00 |  74 61 74 65 0a 28 64 65 66 75 6e 20 67 70 74 65    6c 2d 6f 72 67 2d 2d 65 6e 74 72 79 2d 70 72 6f  | tate.(defun.gptel-org--entry-pro | 
| 25e20 |  70 65 72 74 69 65 73 20 28 26 6f 70 74 69 6f 6e    61 6c 20 70 74 29 0a 20 20 22 46 69 6e 64 20 67  | perties.(&optional.pt)..."Find.g | 
| 25e40 |  70 74 65 6c 20 63 6f 6e 66 69 67 75 72 61 74 69    6f 6e 20 70 72 6f 70 65 72 74 69 65 73 20 73 74  | ptel.configuration.properties.st | 
| 25e60 |  6f 72 65 64 20 69 6e 20 74 68 65 20 63 75 72 72    65 6e 74 20 68 65 61 64 69 6e 67 2e 22 0a 20 20  | ored.in.the.current.heading."... | 
| 25e80 |  28 70 63 61 73 65 2d 6c 65 74 0a 20 20 20 20 20    20 28 28 60 28 2c 73 79 73 74 65 6d 20 2c 62 61  | (pcase-let.......((`(,system.,ba | 
| 25ea0 |  63 6b 65 6e 64 20 2c 6d 6f 64 65 6c 20 2c 74 65    6d 70 65 72 61 74 75 72 65 20 2c 74 6f 6b 65 6e  | ckend.,model.,temperature.,token | 
| 25ec0 |  73 29 0a 20 20 20 20 20 20 20 20 20 28 6d 61 70    63 61 72 0a 20 20 20 20 20 20 20 20 20 20 28 6c  | s)..........(mapcar...........(l | 
| 25ee0 |  61 6d 62 64 61 20 28 70 72 6f 70 29 20 28 6f 72    67 2d 65 6e 74 72 79 2d 67 65 74 20 28 6f 72 20  | ambda.(prop).(org-entry-get.(or. | 
| 25f00 |  70 74 20 28 70 6f 69 6e 74 29 29 20 70 72 6f 70    20 27 73 65 6c 65 63 74 69 76 65 29 29 0a 20 20  | pt.(point)).prop.'selective))... | 
| 25f20 |  20 20 20 20 20 20 20 20 27 28 22 47 50 54 45 4c    5f 53 59 53 54 45 4d 22 20 22 47 50 54 45 4c 5f  | ........'("GPTEL_SYSTEM"."GPTEL_ | 
| 25f40 |  42 41 43 4b 45 4e 44 22 20 22 47 50 54 45 4c 5f    4d 4f 44 45 4c 22 0a 20 20 20 20 20 20 20 20 20  | BACKEND"."GPTEL_MODEL".......... | 
| 25f60 |  20 20 20 22 47 50 54 45 4c 5f 54 45 4d 50 45 52    41 54 55 52 45 22 20 22 47 50 54 45 4c 5f 4d 41  | ..."GPTEL_TEMPERATURE"."GPTEL_MA | 
| 25f80 |  58 5f 54 4f 4b 45 4e 53 22 29 29 29 29 0a 20 20    20 20 28 77 68 65 6e 20 73 79 73 74 65 6d 0a 20  | X_TOKENS")))).....(when.system.. | 
| 25fa0 |  20 20 20 20 20 28 73 65 74 71 20 73 79 73 74 65    6d 20 28 73 74 72 69 6e 67 2d 72 65 70 6c 61 63  | .....(setq.system.(string-replac | 
| 25fc0 |  65 20 22 5c 5c 6e 22 20 22 5c 6e 22 20 73 79 73    74 65 6d 29 29 29 0a 20 20 20 20 28 77 68 65 6e  | e."\\n"."\n".system))).....(when | 
| 25fe0 |  20 62 61 63 6b 65 6e 64 0a 20 20 20 20 20 20 28    73 65 74 71 20 62 61 63 6b 65 6e 64 20 28 61 6c  | .backend.......(setq.backend.(al | 
| 26000 |  69 73 74 2d 67 65 74 20 62 61 63 6b 65 6e 64 20    67 70 74 65 6c 2d 2d 6b 6e 6f 77 6e 2d 62 61 63  | ist-get.backend.gptel--known-bac | 
| 26020 |  6b 65 6e 64 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | kends........................... | 
| 26040 |  20 20 20 20 20 6e 69 6c 20 6e 69 6c 20 23 27 65    71 75 61 6c 29 29 29 0a 20 20 20 20 28 77 68 65  | .....nil.nil.#'equal))).....(whe | 
| 26060 |  6e 20 74 65 6d 70 65 72 61 74 75 72 65 0a 20 20    20 20 20 20 28 73 65 74 71 20 74 65 6d 70 65 72  | n.temperature.......(setq.temper | 
| 26080 |  61 74 75 72 65 20 28 67 70 74 65 6c 2d 2d 6e 75    6d 62 65 72 69 7a 65 20 74 65 6d 70 65 72 61 74  | ature.(gptel--numberize.temperat | 
| 260a0 |  75 72 65 29 29 29 0a 20 20 20 20 28 77 68 65 6e    20 74 6f 6b 65 6e 73 20 28 73 65 74 71 20 74 6f  | ure))).....(when.tokens.(setq.to | 
| 260c0 |  6b 65 6e 73 20 28 67 70 74 65 6c 2d 2d 6e 75 6d    62 65 72 69 7a 65 20 74 6f 6b 65 6e 73 29 29 29  | kens.(gptel--numberize.tokens))) | 
| 260e0 |  0a 20 20 20 20 28 6c 69 73 74 20 73 79 73 74 65    6d 20 62 61 63 6b 65 6e 64 20 6d 6f 64 65 6c 20  | .....(list.system.backend.model. | 
| 26100 |  74 65 6d 70 65 72 61 74 75 72 65 20 74 6f 6b 65    6e 73 29 29 29 0a 0a 28 64 65 66 75 6e 20 67 70  | temperature.tokens)))..(defun.gp | 
| 26120 |  74 65 6c 2d 6f 72 67 2d 2d 72 65 73 74 6f 72 65    2d 73 74 61 74 65 20 28 29 0a 20 20 22 52 65 73  | tel-org--restore-state.()..."Res | 
| 26140 |  74 6f 72 65 20 67 70 74 65 6c 20 73 74 61 74 65    20 66 6f 72 20 4f 72 67 20 62 75 66 66 65 72 73  | tore.gptel.state.for.Org.buffers | 
| 26160 |  20 77 68 65 6e 20 74 75 72 6e 69 6e 67 20 6f 6e    20 60 67 70 74 65 6c 2d 6d 6f 64 65 27 2e 22 0a  | .when.turning.on.`gptel-mode'.". | 
| 26180 |  20 20 28 73 61 76 65 2d 72 65 73 74 72 69 63 74    69 6f 6e 0a 20 20 20 20 28 77 69 64 65 6e 29 0a  | ..(save-restriction.....(widen). | 
| 261a0 |  20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63    61 73 65 20 73 74 61 74 75 73 0a 20 20 20 20 20  | ....(condition-case.status...... | 
| 261c0 |  20 20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 20    20 20 20 20 28 77 68 65 6e 2d 6c 65 74 20 28 28  | ...(progn...........(when-let.(( | 
| 261e0 |  62 6f 75 6e 64 73 20 28 6f 72 67 2d 65 6e 74 72    79 2d 67 65 74 20 28 70 6f 69 6e 74 2d 6d 69 6e  | bounds.(org-entry-get.(point-min | 
| 26200 |  29 20 22 47 50 54 45 4c 5f 42 4f 55 4e 44 53 22    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | )."GPTEL_BOUNDS")))............. | 
| 26220 |  28 6d 61 70 63 20 28 70 63 61 73 65 2d 6c 61 6d    62 64 61 20 28 60 28 2c 62 65 67 20 2e 20 2c 65  | (mapc.(pcase-lambda.(`(,beg...,e | 
| 26240 |  6e 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 70 75 74 2d 74 65  | nd)).....................(put-te | 
| 26260 |  78 74 2d 70 72 6f 70 65 72 74 79 20 62 65 67 20    65 6e 64 20 27 67 70 74 65 6c 20 27 72 65 73 70  | xt-property.beg.end.'gptel.'resp | 
| 26280 |  6f 6e 73 65 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 72 65 61 64 20 62  | onse))...................(read.b | 
| 262a0 |  6f 75 6e 64 73 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 28 70 63 61 73 65 2d 6c 65 74 20 28 28  | ounds)))...........(pcase-let.(( | 
| 262c0 |  60 28 2c 73 79 73 74 65 6d 20 2c 62 61 63 6b 65    6e 64 20 2c 6d 6f 64 65 6c 20 2c 74 65 6d 70 65  | `(,system.,backend.,model.,tempe | 
| 262e0 |  72 61 74 75 72 65 20 2c 74 6f 6b 65 6e 73 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | rature.,tokens)................. | 
| 26300 |  20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 6f 72    67 2d 2d 65 6e 74 72 79 2d 70 72 6f 70 65 72 74  | .......(gptel-org--entry-propert | 
| 26320 |  69 65 73 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  | ies.(point-min)))).............( | 
| 26340 |  77 68 65 6e 20 73 79 73 74 65 6d 20 28 73 65 74    71 2d 6c 6f 63 61 6c 20 67 70 74 65 6c 2d 2d 73  | when.system.(setq-local.gptel--s | 
| 26360 |  79 73 74 65 6d 2d 6d 65 73 73 61 67 65 20 73 79    73 74 65 6d 29 29 0a 20 20 20 20 20 20 20 20 20  | ystem-message.system)).......... | 
| 26380 |  20 20 20 28 69 66 20 62 61 63 6b 65 6e 64 20 28    73 65 74 71 2d 6c 6f 63 61 6c 20 67 70 74 65 6c  | ...(if.backend.(setq-local.gptel | 
| 263a0 |  2d 62 61 63 6b 65 6e 64 20 62 61 63 6b 65 6e 64    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -backend.backend)............... | 
| 263c0 |  28 6d 65 73 73 61 67 65 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 73 75 62 73 74 69 74  | (message................(substit | 
| 263e0 |  75 74 65 2d 63 6f 6d 6d 61 6e 64 2d 6b 65 79 73    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ute-command-keys................ | 
| 26400 |  20 28 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 22 43 6f 75 6c 64  | .(concat.................."Could | 
| 26420 |  20 6e 6f 74 20 61 63 74 69 76 61 74 65 20 67 70    74 65 6c 20 62 61 63 6b 65 6e 64 20 5c 22 25 73  | .not.activate.gptel.backend.\"%s | 
| 26440 |  5c 22 21 20 20 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 22 53 77 69 74 63 68 20  | \"!..".................."Switch. | 
| 26460 |  62 61 63 6b 65 6e 64 73 20 77 69 74 68 20 5c 5c    5b 75 6e 69 76 65 72 73 61 6c 2d 61 72 67 75 6d  | backends.with.\\[universal-argum | 
| 26480 |  65 6e 74 5d 20 5c 5c 5b 67 70 74 65 6c 2d 73 65    6e 64 5d 22 0a 20 20 20 20 20 20 20 20 20 20 20  | ent].\\[gptel-send]"............ | 
| 264a0 |  20 20 20 20 20 20 22 20 62 65 66 6f 72 65 20 75    73 69 6e 67 20 67 70 74 65 6c 2e 22 29 29 0a 20  | ......".before.using.gptel.")).. | 
| 264c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61    63 6b 65 6e 64 29 29 0a 20 20 20 20 20 20 20 20  | ..............backend))......... | 
| 264e0 |  20 20 20 20 28 77 68 65 6e 20 6d 6f 64 65 6c 20    28 73 65 74 71 2d 6c 6f 63 61 6c 20 67 70 74 65  | ....(when.model.(setq-local.gpte | 
| 26500 |  6c 2d 6d 6f 64 65 6c 20 6d 6f 64 65 6c 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65  | l-model.model)).............(whe | 
| 26520 |  6e 20 74 65 6d 70 65 72 61 74 75 72 65 20 28 73    65 74 71 2d 6c 6f 63 61 6c 20 67 70 74 65 6c 2d  | n.temperature.(setq-local.gptel- | 
| 26540 |  74 65 6d 70 65 72 61 74 75 72 65 20 74 65 6d 70    65 72 61 74 75 72 65 29 29 0a 20 20 20 20 20 20  | temperature.temperature))....... | 
| 26560 |  20 20 20 20 20 20 28 77 68 65 6e 20 74 6f 6b 65    6e 73 20 28 73 65 74 71 2d 6c 6f 63 61 6c 20 67  | ......(when.tokens.(setq-local.g | 
| 26580 |  70 74 65 6c 2d 6d 61 78 2d 74 6f 6b 65 6e 73 20    74 6f 6b 65 6e 73 29 29 29 29 0a 20 20 20 20 20  | ptel-max-tokens.tokens))))...... | 
| 265a0 |  20 28 3a 73 75 63 63 65 73 73 20 28 6d 65 73 73    61 67 65 20 22 67 70 74 65 6c 20 63 68 61 74 20  | .(:success.(message."gptel.chat. | 
| 265c0 |  72 65 73 74 6f 72 65 64 2e 22 29 29 0a 20 20 20    20 20 20 28 65 72 72 6f 72 20 28 6d 65 73 73 61  | restored.")).......(error.(messa | 
| 265e0 |  67 65 20 22 43 6f 75 6c 64 20 6e 6f 74 20 72 65    73 74 6f 72 65 20 67 70 74 65 6c 20 73 74 61 74  | ge."Could.not.restore.gptel.stat | 
| 26600 |  65 2c 20 73 6f 72 72 79 21 20 45 72 72 6f 72 3a    20 25 73 22 20 73 74 61 74 75 73 29 29 29 29 29  | e,.sorry!.Error:.%s".status))))) | 
| 26620 |  0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 6f    72 67 2d 73 65 74 2d 70 72 6f 70 65 72 74 69 65  | ..(defun.gptel-org-set-propertie | 
| 26640 |  73 20 28 70 74 20 26 6f 70 74 69 6f 6e 61 6c 20    6d 73 67 29 0a 20 20 22 53 74 6f 72 65 20 74 68  | s.(pt.&optional.msg)..."Store.th | 
| 26660 |  65 20 61 63 74 69 76 65 20 67 70 74 65 6c 20 63    6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 75 6e 64  | e.active.gptel.configuration.und | 
| 26680 |  65 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 68    65 61 64 69 6e 67 2e 0a 0a 54 68 65 20 61 63 74  | er.the.current.heading...The.act | 
| 266a0 |  69 76 65 20 67 70 74 65 6c 20 63 6f 6e 66 69 67    75 72 61 74 69 6f 6e 20 69 6e 63 6c 75 64 65 73  | ive.gptel.configuration.includes | 
| 266c0 |  20 74 68 65 20 63 75 72 72 65 6e 74 20 73 79 73    74 65 6d 0a 6d 65 73 73 61 67 65 2c 20 6c 61 6e  | .the.current.system.message,.lan | 
| 266e0 |  67 75 61 67 65 20 6d 6f 64 65 6c 20 61 6e 64 20    70 72 6f 76 69 64 65 72 20 28 62 61 63 6b 65 6e  | guage.model.and.provider.(backen | 
| 26700 |  64 29 2c 20 61 6e 64 20 61 64 64 69 74 69 6f 6e    61 6c 0a 73 65 74 74 69 6e 67 73 20 77 68 65 6e  | d),.and.additional.settings.when | 
| 26720 |  20 61 70 70 6c 69 63 61 62 6c 65 2e 0a 0a 50 54    20 69 73 20 74 68 65 20 63 75 72 73 6f 72 20 70  | .applicable...PT.is.the.cursor.p | 
| 26740 |  6f 73 69 74 69 6f 6e 20 62 79 20 64 65 66 61 75    6c 74 2e 20 20 49 66 20 4d 53 47 20 69 73 0a 6e  | osition.by.default...If.MSG.is.n | 
| 26760 |  6f 6e 2d 6e 69 6c 20 28 64 65 66 61 75 6c 74 29    2c 20 64 69 73 70 6c 61 79 20 61 20 6d 65 73 73  | on-nil.(default),.display.a.mess | 
| 26780 |  61 67 65 20 61 66 74 65 72 77 61 72 64 73 2e 22    0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 20  | age.afterwards."...(interactive. | 
| 267a0 |  28 6c 69 73 74 20 28 70 6f 69 6e 74 29 20 74 29    29 0a 20 20 28 6f 72 67 2d 65 6e 74 72 79 2d 70  | (list.(point).t))...(org-entry-p | 
| 267c0 |  75 74 20 70 74 20 22 47 50 54 45 4c 5f 4d 4f 44    45 4c 22 20 67 70 74 65 6c 2d 6d 6f 64 65 6c 29  | ut.pt."GPTEL_MODEL".gptel-model) | 
| 267e0 |  0a 20 20 28 6f 72 67 2d 65 6e 74 72 79 2d 70 75    74 20 70 74 20 22 47 50 54 45 4c 5f 42 41 43 4b  | ...(org-entry-put.pt."GPTEL_BACK | 
| 26800 |  45 4e 44 22 20 28 67 70 74 65 6c 2d 62 61 63 6b    65 6e 64 2d 6e 61 6d 65 20 67 70 74 65 6c 2d 62  | END".(gptel-backend-name.gptel-b | 
| 26820 |  61 63 6b 65 6e 64 29 29 0a 20 20 28 75 6e 6c 65    73 73 20 28 65 71 75 61 6c 20 28 64 65 66 61 75  | ackend))...(unless.(equal.(defau | 
| 26840 |  6c 74 2d 76 61 6c 75 65 20 27 67 70 74 65 6c 2d    74 65 6d 70 65 72 61 74 75 72 65 29 20 67 70 74  | lt-value.'gptel-temperature).gpt | 
| 26860 |  65 6c 2d 74 65 6d 70 65 72 61 74 75 72 65 29 0a    20 20 20 20 28 6f 72 67 2d 65 6e 74 72 79 2d 70  | el-temperature).....(org-entry-p | 
| 26880 |  75 74 20 70 74 20 22 47 50 54 45 4c 5f 54 45 4d    50 45 52 41 54 55 52 45 22 0a 20 20 20 20 20 20  | ut.pt."GPTEL_TEMPERATURE"....... | 
| 268a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 75    6d 62 65 72 2d 74 6f 2d 73 74 72 69 6e 67 20 67  | .............(number-to-string.g | 
| 268c0 |  70 74 65 6c 2d 74 65 6d 70 65 72 61 74 75 72 65    29 29 29 0a 20 20 28 6f 72 67 2d 65 6e 74 72 79  | ptel-temperature)))...(org-entry | 
| 268e0 |  2d 70 75 74 20 70 74 20 22 47 50 54 45 4c 5f 53    59 53 54 45 4d 22 0a 20 20 20 20 20 20 20 20 20  | -put.pt."GPTEL_SYSTEM".......... | 
| 26900 |  20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d    72 65 70 6c 61 63 65 20 22 5c 6e 22 20 22 5c 5c  | ........(string-replace."\n"."\\ | 
| 26920 |  6e 22 20 67 70 74 65 6c 2d 2d 73 79 73 74 65 6d    2d 6d 65 73 73 61 67 65 29 29 20 20 20 0a 20 20  | n".gptel--system-message))...... | 
| 26940 |  28 77 68 65 6e 20 67 70 74 65 6c 2d 6d 61 78 2d    74 6f 6b 65 6e 73 0a 20 20 20 20 28 6f 72 67 2d  | (when.gptel-max-tokens.....(org- | 
| 26960 |  65 6e 74 72 79 2d 70 75 74 0a 20 20 20 20 20 70    74 20 22 47 50 54 45 4c 5f 4d 41 58 5f 54 4f 4b  | entry-put......pt."GPTEL_MAX_TOK | 
| 26980 |  45 4e 53 22 20 28 6e 75 6d 62 65 72 2d 74 6f 2d    73 74 72 69 6e 67 20 67 70 74 65 6c 2d 6d 61 78  | ENS".(number-to-string.gptel-max | 
| 269a0 |  2d 74 6f 6b 65 6e 73 29 29 29 0a 20 20 28 77 68    65 6e 20 6d 73 67 0a 20 20 20 20 28 6d 65 73 73  | -tokens)))...(when.msg.....(mess | 
| 269c0 |  61 67 65 20 22 41 64 64 65 64 20 67 70 74 65 6c    20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 74  | age."Added.gptel.configuration.t | 
| 269e0 |  6f 20 63 75 72 72 65 6e 74 20 68 65 61 64 6c 69    6e 65 2e 22 29 29 29 0a 0a 28 64 65 66 75 6e 20  | o.current.headline.")))..(defun. | 
| 26a00 |  67 70 74 65 6c 2d 6f 72 67 2d 2d 73 61 76 65 2d    73 74 61 74 65 20 28 29 0a 20 20 22 57 72 69 74  | gptel-org--save-state.()..."Writ | 
| 26a20 |  65 20 74 68 65 20 67 70 74 65 6c 20 73 74 61 74    65 20 74 6f 20 74 68 65 20 4f 72 67 20 62 75 66  | e.the.gptel.state.to.the.Org.buf | 
| 26a40 |  66 65 72 20 61 73 20 4f 72 67 20 70 72 6f 70 65    72 74 69 65 73 2e 22 0a 20 20 28 6f 72 67 2d 77  | fer.as.Org.properties."...(org-w | 
| 26a60 |  69 74 68 2d 77 69 64 65 2d 62 75 66 66 65 72 0a    20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70  | ith-wide-buffer....(goto-char.(p | 
| 26a80 |  6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 28 77    68 65 6e 20 28 6f 72 67 2d 61 74 2d 68 65 61 64  | oint-min))....(when.(org-at-head | 
| 26aa0 |  69 6e 67 2d 70 29 0a 20 20 20 20 20 28 6f 72 67    2d 6f 70 65 6e 2d 6c 69 6e 65 20 31 29 29 0a 20  | ing-p)......(org-open-line.1)).. | 
| 26ac0 |  20 20 28 67 70 74 65 6c 2d 6f 72 67 2d 73 65 74    2d 70 72 6f 70 65 72 74 69 65 73 20 28 70 6f 69  | ..(gptel-org-set-properties.(poi | 
| 26ae0 |  6e 74 2d 6d 69 6e 29 29 0a 20 20 20 3b 3b 20 53    61 76 65 20 72 65 73 70 6f 6e 73 65 20 62 6f 75  | nt-min))....;;.Save.response.bou | 
| 26b00 |  6e 64 61 72 69 65 73 0a 20 20 20 28 6c 65 74 72    65 63 20 28 28 77 72 69 74 65 2d 62 6f 75 6e 64  | ndaries....(letrec.((write-bound | 
| 26b20 |  73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28    6c 61 6d 62 64 61 20 28 61 74 74 65 6d 70 74 73  | s..............(lambda.(attempts | 
| 26b40 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 6c 65 74 2a 20 28 28 62 6f 75 6e 64 73 20  | )................(let*.((bounds. | 
| 26b60 |  28 67 70 74 65 6c 2d 2d 67 65 74 2d 62 75 66 66    65 72 2d 62 6f 75 6e 64 73 29 29 0a 20 20 20 20  | (gptel--get-buffer-bounds))..... | 
| 26b80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 6f 66 66 73 65 74 20 28 63 61 61 72 20  | ..................(offset.(caar. | 
| 26ba0 |  62 6f 75 6e 64 73 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | bounds)).......................( | 
| 26bc0 |  6f 66 66 73 65 74 2d 6d 61 72 6b 65 72 20 28 73    65 74 2d 6d 61 72 6b 65 72 20 28 6d 61 6b 65 2d  | offset-marker.(set-marker.(make- | 
| 26be0 |  6d 61 72 6b 65 72 29 20 6f 66 66 73 65 74 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | marker).offset)))............... | 
| 26c00 |  20 20 20 28 6f 72 67 2d 65 6e 74 72 79 2d 70 75    74 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 22 47  | ...(org-entry-put.(point-min)."G | 
| 26c20 |  50 54 45 4c 5f 42 4f 55 4e 44 53 22 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | PTEL_BOUNDS".................... | 
| 26c40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72    69 6e 31 2d 74 6f 2d 73 74 72 69 6e 67 20 28 67  | .............(prin1-to-string.(g | 
| 26c60 |  70 74 65 6c 2d 2d 67 65 74 2d 62 75 66 66 65 72    2d 62 6f 75 6e 64 73 29 29 29 0a 20 20 20 20 20  | ptel--get-buffer-bounds)))...... | 
| 26c80 |  20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65    6e 20 28 61 6e 64 20 28 6e 6f 74 20 28 3d 20 28  | ............(when.(and.(not.(=.( | 
| 26ca0 |  6d 61 72 6b 65 72 2d 70 6f 73 69 74 69 6f 6e 20    6f 66 66 73 65 74 2d 6d 61 72 6b 65 72 29 20 6f  | marker-position.offset-marker).o | 
| 26cc0 |  66 66 73 65 74 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ffset))......................... | 
| 26ce0 |  20 20 20 20 28 3e 20 61 74 74 65 6d 70 74 73 20    30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | ....(>.attempts.0))............. | 
| 26d00 |  20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20    77 72 69 74 65 2d 62 6f 75 6e 64 73 20 28 31 2d  | .......(funcall.write-bounds.(1- | 
| 26d20 |  20 61 74 74 65 6d 70 74 73 29 29 29 29 29 29 29    0a 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 77  | .attempts)))))))......(funcall.w | 
| 26d40 |  72 69 74 65 2d 62 6f 75 6e 64 73 20 36 29 29 29    29 0a 0a 0c 0a 3b 3b 3b 20 54 72 61 6e 73 66 6f  | rite-bounds.6))))....;;;.Transfo | 
| 26d60 |  72 6d 69 6e 67 20 72 65 73 70 6f 6e 73 65 73 0a    28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d 63 6f  | rming.responses.(defun.gptel--co | 
| 26d80 |  6e 76 65 72 74 2d 6d 61 72 6b 64 6f 77 6e 2d 3e    6f 72 67 20 28 73 74 72 29 0a 20 20 22 43 6f 6e  | nvert-markdown->org.(str)..."Con | 
| 26da0 |  76 65 72 74 20 73 74 72 69 6e 67 20 53 54 52 20    66 72 6f 6d 20 6d 61 72 6b 64 6f 77 6e 20 74 6f  | vert.string.STR.from.markdown.to | 
| 26dc0 |  20 6f 72 67 20 6d 61 72 6b 75 70 2e 0a 0a 54 68    69 73 20 69 73 20 61 20 76 65 72 79 20 62 61 73  | .org.markup...This.is.a.very.bas | 
| 26de0 |  69 63 20 63 6f 6e 76 65 72 74 65 72 20 74 68 61    74 20 68 61 6e 64 6c 65 73 20 6f 6e 6c 79 20 61  | ic.converter.that.handles.only.a | 
| 26e00 |  20 66 65 77 20 6d 61 72 6b 75 70 0a 65 6c 65 6d    65 6e 74 73 2e 22 0a 20 20 28 69 6e 74 65 72 61  | .few.markup.elements."...(intera | 
| 26e20 |  63 74 69 76 65 29 0a 20 20 28 77 69 74 68 2d 74    65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 28  | ctive)...(with-temp-buffer.....( | 
| 26e40 |  69 6e 73 65 72 74 20 73 74 72 29 0a 20 20 20 20    28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e  | insert.str).....(goto-char.(poin | 
| 26e60 |  74 2d 6d 69 6e 29 29 0a 20 20 20 20 28 77 68 69    6c 65 20 28 72 65 2d 73 65 61 72 63 68 2d 66 6f  | t-min)).....(while.(re-search-fo | 
| 26e80 |  72 77 61 72 64 20 22 60 5c 5c 7c 5c 5c 2a 5c 5c    7b 31 2c 32 5c 5c 7d 5c 5c 7c 5f 22 20 6e 69 6c  | rward."`\\|\\*\\{1,2\\}\\|_".nil | 
| 26ea0 |  20 74 29 0a 20 20 20 20 20 20 28 70 63 61 73 65    20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 30  | .t).......(pcase.(match-string.0 | 
| 26ec0 |  29 0a 20 20 20 20 20 20 20 20 28 22 60 22 20 28    69 66 20 28 73 61 76 65 2d 65 78 63 75 72 73 69  | ).........("`".(if.(save-excursi | 
| 26ee0 |  6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 62 65 67 69 6e 6e 69 6e 67  | on....................(beginning | 
| 26f00 |  2d 6f 66 2d 6c 69 6e 65 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 6b  | -of-line)....................(sk | 
| 26f20 |  69 70 2d 63 68 61 72 73 2d 66 6f 72 77 61 72 64    20 22 20 5c 74 22 29 0a 20 20 20 20 20 20 20 20  | ip-chars-forward.".\t")......... | 
| 26f40 |  20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 6b    69 6e 67 2d 61 74 20 22 60 60 60 22 29 29 0a 20  | ...........(looking-at."```")).. | 
| 26f60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 70 72 6f 67 6e 20 28 62 61 63 6b 77 61 72 64  | ................(progn.(backward | 
| 26f80 |  2d 63 68 61 72 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | -char).........................( | 
| 26fa0 |  64 65 6c 65 74 65 2d 63 68 61 72 20 33 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | delete-char.3).................. | 
| 26fc0 |  20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22    23 2b 62 65 67 69 6e 5f 73 72 63 20 22 29 0a 20  | .......(insert."#+begin_src.").. | 
| 26fe0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 77 68 65 6e 20 28 72 65  | .......................(when.(re | 
| 27000 |  2d 73 65 61 72 63 68 2d 66 6f 72 77 61 72 64 20    22 5e 60 60 60 22 20 6e 69 6c 20 74 29 0a 20 20  | -search-forward."^```".nil.t)... | 
| 27020 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 72 65 70 6c 61 63 65  | ........................(replace | 
| 27040 |  2d 6d 61 74 63 68 20 22 23 2b 65 6e 64 5f 73 72    63 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20  | -match."#+end_src")))........... | 
| 27060 |  20 20 20 20 20 28 72 65 70 6c 61 63 65 2d 6d 61    74 63 68 20 22 3d 22 29 29 29 0a 20 20 20 20 20  | .....(replace-match."=")))...... | 
| 27080 |  20 20 20 28 22 2a 2a 22 20 28 63 6f 6e 64 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28  | ...("**".(cond................(( | 
| 270a0 |  6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 2a 5c    5c 28 3f 3a 5b 5b 3a 77 6f 72 64 3a 5d 5d 5c 5c  | looking-at."\\*\\(?:[[:word:]]\\ | 
| 270c0 |  7c 5c 73 5c 5c 29 22 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65  | |\s\\)").................(delete | 
| 270e0 |  2d 63 68 61 72 20 31 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 28 6c 6f 6f 6b 69  | -char.1))................((looki | 
| 27100 |  6e 67 2d 62 61 63 6b 20 22 5c 5c 28 3f 3a 5b 5b    3a 77 6f 72 64 3a 5d 5d 5c 5c 7c 5c 73 5c 5c 29  | ng-back."\\(?:[[:word:]]\\|\s\\) | 
| 27120 |  5c 5c 2a 5c 5c 7b 32 5c 5c 7d 22 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | \\*\\{2\\}"..................... | 
| 27140 |  20 20 20 20 20 20 20 20 20 20 28 6d 61 78 20 28    2d 20 28 70 6f 69 6e 74 29 20 33 29 20 28 70 6f  | ..........(max.(-.(point).3).(po | 
| 27160 |  69 6e 74 2d 6d 69 6e 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65  | int-min))).................(dele | 
| 27180 |  74 65 2d 63 68 61 72 20 2d 31 29 29 29 29 0a 20    20 20 20 20 20 20 20 28 22 2a 22 0a 20 20 20 20  | te-char.-1)))).........("*"..... | 
| 271a0 |  20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20    20 20 20 20 20 28 28 73 61 76 65 2d 6d 61 74 63  | .....(cond...........((save-matc | 
| 271c0 |  68 2d 64 61 74 61 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 28 61 6e 64 20 28 6c 6f 6f 6b 69 6e  | h-data..............(and.(lookin | 
| 271e0 |  67 2d 62 61 63 6b 20 22 5c 5c 28 3f 3a 5b 5b 3a    73 70 61 63 65 3a 5d 5d 5c 5c 7c 5c 73 5c 5c 29  | g-back."\\(?:[[:space:]]\\|\s\\) | 
| 27200 |  5c 5c 28 3f 3a 5f 5c 5c 7c 5c 5c 2a 5c 5c 29 22    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | \\(?:_\\|\\*\\)"................ | 
| 27220 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 6d 61 78 20 28 2d 20 28 70 6f 69 6e 74 29  | .................(max.(-.(point) | 
| 27240 |  20 32 29 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .2).(point-min)))............... | 
| 27260 |  20 20 20 20 28 6e 6f 74 20 28 6c 6f 6f 6b 69 6e    67 2d 61 74 20 22 5b 5b 3a 73 70 61 63 65 3a 5d  | ....(not.(looking-at."[[:space:] | 
| 27280 |  5d 5c 5c 7c 5c 73 22 29 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 3b 3b 20 50 6f 73 73 69 62  | ]\\|\s"))))............;;.Possib | 
| 272a0 |  6c 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20    65 6d 70 68 61 73 69 73 0a 20 20 20 20 20 20 20  | le.beginning.of.emphasis........ | 
| 272c0 |  20 20 20 20 28 61 6e 64 0a 20 20 20 20 20 20 20    20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72  | ....(and.............(save-excur | 
| 272e0 |  73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 77 68 65 6e 20 28 61 6e 64 20 28 72  | sion...............(when.(and.(r | 
| 27300 |  65 2d 73 65 61 72 63 68 2d 66 6f 72 77 61 72 64    20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 28  | e-search-forward.(regexp-quote.( | 
| 27320 |  6d 61 74 63 68 2d 73 74 72 69 6e 67 20 30 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | match-string.0))................ | 
| 27340 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69  | .............................(li | 
| 27360 |  6e 65 2d 65 6e 64 2d 70 6f 73 69 74 69 6f 6e 29    20 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | ne-end-position).t)............. | 
| 27380 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f    6f 6b 69 6e 67 2d 61 74 20 22 5b 5b 3a 73 70 61  | .............(looking-at."[[:spa | 
| 273a0 |  63 65 5d 5d 5c 5c 7c 5c 73 22 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ce]]\\|\s")..................... | 
| 273c0 |  20 20 20 20 20 28 6e 6f 74 20 28 6c 6f 6f 6b 69    6e 67 2d 62 61 63 6b 20 22 5c 5c 28 3f 3a 5b 5b  | .....(not.(looking-back."\\(?:[[ | 
| 273e0 |  3a 73 70 61 63 65 5d 5d 5c 5c 7c 5c 73 5c 5c 29    5c 5c 28 3f 3a 5f 5c 5c 7c 5c 5c 2a 5c 5c 29 22  | :space]]\\|\s\\)\\(?:_\\|\\*\\)" | 
| 27400 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 27420 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61    78 20 28 2d 20 28 70 6f 69 6e 74 29 20 32 29 20  | .............(max.(-.(point).2). | 
| 27440 |  28 70 6f 69 6e 74 2d 6d 69 6e 29 29 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | (point-min)))))................. | 
| 27460 |  28 64 65 6c 65 74 65 2d 63 68 61 72 20 2d 31 29    20 28 69 6e 73 65 72 74 20 22 2f 22 29 20 74 29  | (delete-char.-1).(insert."/").t) | 
| 27480 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70    72 6f 67 6e 20 28 64 65 6c 65 74 65 2d 63 68 61  | ).............(progn.(delete-cha | 
| 274a0 |  72 20 2d 31 29 20 28 69 6e 73 65 72 74 20 22 2f    22 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20  | r.-1).(insert."/"))))........... | 
| 274c0 |  28 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69  | ((save-excursion..............(i | 
| 274e0 |  67 6e 6f 72 65 2d 65 72 72 6f 72 73 20 28 62 61    63 6b 77 61 72 64 2d 63 68 61 72 20 32 29 29 0a  | gnore-errors.(backward-char.2)). | 
| 27500 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f    6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 3f 3a 24  | .............(looking-at."\\(?:$ | 
| 27520 |  5c 5c 7c 5c 5c 60 5c 5c 29 5c 6e 5c 5c 2a 5b 5b    3a 73 70 61 63 65 3a 5d 5d 22 29 29 0a 20 20 20  | \\|\\`\\)\n\\*[[:space:]]")).... | 
| 27540 |  20 20 20 20 20 20 20 20 3b 3b 20 42 75 6c 6c 65    74 20 70 6f 69 6e 74 2c 20 72 65 70 6c 61 63 65  | ........;;.Bullet.point,.replace | 
| 27560 |  20 77 69 74 68 20 68 79 70 68 65 6e 0a 20 20 20    20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d  | .with.hyphen............(delete- | 
| 27580 |  63 68 61 72 20 2d 31 29 20 28 69 6e 73 65 72 74    20 22 2d 22 29 29 29 29 29 29 0a 20 20 20 20 28  | char.-1).(insert."-")))))).....( | 
| 275a0 |  62 75 66 66 65 72 2d 73 74 72 69 6e 67 29 29 29    0a 0a 28 64 65 66 75 6e 20 67 70 74 65 6c 2d 2d  | buffer-string)))..(defun.gptel-- | 
| 275c0 |  72 65 70 6c 61 63 65 2d 73 6f 75 72 63 65 2d 6d    61 72 6b 65 72 20 28 6e 75 6d 2d 74 69 63 6b 73  | replace-source-marker.(num-ticks | 
| 275e0 |  20 26 6f 70 74 69 6f 6e 61 6c 20 65 6e 64 29 0a    20 20 22 52 65 70 6c 61 63 65 20 6d 61 72 6b 64  | .&optional.end)..."Replace.markd | 
| 27600 |  6f 77 6e 20 73 74 79 6c 65 20 62 61 63 6b 74 69    63 6b 73 20 77 69 74 68 20 4f 72 67 20 65 71 75  | own.style.backticks.with.Org.equ | 
| 27620 |  69 76 61 6c 65 6e 74 73 2e 0a 0a 4e 55 4d 2d 54    49 43 4b 53 20 69 73 20 74 68 65 20 6e 75 6d 62  | ivalents...NUM-TICKS.is.the.numb | 
| 27640 |  65 72 20 6f 66 20 62 61 63 6b 74 69 63 6b 73 20    62 65 69 6e 67 20 72 65 70 6c 61 63 65 64 2e 20  | er.of.backticks.being.replaced.. | 
| 27660 |  20 49 66 20 45 4e 44 20 69 73 0a 74 72 75 65 20    74 68 65 73 65 20 61 72 65 20 5c 22 65 6e 64 69  | .If.END.is.true.these.are.\"endi | 
| 27680 |  6e 67 5c 22 20 62 61 63 6b 74 69 63 6b 73 2e 0a    0a 54 68 69 73 20 69 73 20 69 6e 74 65 6e 64 65  | ng\".backticks...This.is.intende | 
| 276a0 |  64 20 66 6f 72 20 75 73 65 20 69 6e 20 74 68 65    20 6d 61 72 6b 64 6f 77 6e 20 74 6f 20 6f 72 67  | d.for.use.in.the.markdown.to.org | 
| 276c0 |  20 73 74 72 65 61 6d 20 63 6f 6e 76 65 72 74 65    72 2e 22 0a 20 20 28 6c 65 74 20 28 28 66 72 6f  | .stream.converter."...(let.((fro | 
| 276e0 |  6d 20 28 6d 61 74 63 68 2d 62 65 67 69 6e 6e 69    6e 67 20 30 29 29 29 0a 20 20 20 20 28 64 65 6c  | m.(match-beginning.0))).....(del | 
| 27700 |  65 74 65 2d 72 65 67 69 6f 6e 20 66 72 6f 6d 20    28 70 6f 69 6e 74 29 29 0a 20 20 20 20 28 69 66  | ete-region.from.(point)).....(if | 
| 27720 |  20 28 61 6e 64 20 28 3d 20 6e 75 6d 2d 74 69 63    6b 73 20 33 29 0a 20 20 20 20 20 20 20 20 20 20  | .(and.(=.num-ticks.3)........... | 
| 27740 |  20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69    6f 6e 20 28 62 65 67 69 6e 6e 69 6e 67 2d 6f 66  | ...(save-excursion.(beginning-of | 
| 27760 |  2d 6c 69 6e 65 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | -line).......................... | 
| 27780 |  20 20 20 20 28 73 6b 69 70 2d 63 68 61 72 73 2d    66 6f 72 77 61 72 64 20 22 20 5c 74 22 29 0a 20  | ....(skip-chars-forward.".\t").. | 
| 277a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 65 71 20  | ............................(eq. | 
| 277c0 |  28 70 6f 69 6e 74 29 20 66 72 6f 6d 29 29 29 0a    20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20  | (point).from))).........(insert. | 
| 277e0 |  28 69 66 20 65 6e 64 20 22 23 2b 65 6e 64 5f 73    72 63 22 20 22 23 2b 62 65 67 69 6e 5f 73 72 63  | (if.end."#+end_src"."#+begin_src | 
| 27800 |  20 22 29 29 0a 20 20 20 20 20 20 28 69 6e 73 65    72 74 20 22 3d 22 29 29 29 29 0a 0a 28 64 65 66  | .")).......(insert."="))))..(def | 
| 27820 |  75 6e 20 67 70 74 65 6c 2d 2d 73 74 72 65 61 6d    2d 63 6f 6e 76 65 72 74 2d 6d 61 72 6b 64 6f 77  | un.gptel--stream-convert-markdow | 
| 27840 |  6e 2d 3e 6f 72 67 20 28 29 0a 20 20 22 52 65 74    75 72 6e 20 61 20 4d 61 72 6b 64 6f 77 6e 20 74  | n->org.()..."Return.a.Markdown.t | 
| 27860 |  6f 20 4f 72 67 20 63 6f 6e 76 65 72 74 65 72 2e    0a 0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  | o.Org.converter...This.function. | 
| 27880 |  70 61 72 73 65 73 20 61 20 73 74 72 65 61 6d 20    6f 66 20 4d 61 72 6b 64 6f 77 6e 20 74 65 78 74  | parses.a.stream.of.Markdown.text | 
| 278a0 |  20 74 6f 20 4f 72 67 0a 63 6f 6e 74 69 6e 75 6f    75 73 6c 79 20 77 68 65 6e 20 69 74 20 69 73 20  | .to.Org.continuously.when.it.is. | 
| 278c0 |  63 61 6c 6c 65 64 20 77 69 74 68 20 73 75 63 63    65 73 73 69 76 65 20 63 68 75 6e 6b 73 20 6f 66  | called.with.successive.chunks.of | 
| 278e0 |  20 74 68 65 0a 74 65 78 74 20 73 74 72 65 61 6d    2e 22 0a 20 20 28 6c 65 74 72 65 63 20 28 28 69  | .the.text.stream."...(letrec.((i | 
| 27900 |  6e 2d 73 72 63 2d 62 6c 6f 63 6b 20 6e 69 6c 29    20 20 20 20 20 20 20 20 20 20 20 3b 65 78 70 6c  | n-src-block.nil)...........;expl | 
| 27920 |  69 63 69 74 20 6e 69 6c 20 74 6f 20 61 64 64 72    65 73 73 20 42 55 47 20 23 31 38 33 0a 20 20 20  | icit.nil.to.address.BUG.#183.... | 
| 27940 |  20 20 20 20 20 20 20 20 28 74 65 6d 70 2d 62 75    66 20 28 67 65 6e 65 72 61 74 65 2d 6e 65 77 2d  | ........(temp-buf.(generate-new- | 
| 27960 |  62 75 66 66 65 72 2d 6e 61 6d 65 20 22 2a 67 70    74 65 6c 2d 74 65 6d 70 2a 22 29 29 0a 20 20 20  | buffer-name."*gptel-temp*")).... | 
| 27980 |  20 20 20 20 20 20 20 20 28 73 74 61 72 74 2d 70    74 20 28 6d 61 6b 65 2d 6d 61 72 6b 65 72 29 29  | ........(start-pt.(make-marker)) | 
| 279a0 |  0a 20 20 20 20 20 20 20 20 20 20 20 28 74 69 63    6b 73 2d 74 6f 74 61 6c 20 30 29 0a 20 20 20 20  | ............(ticks-total.0)..... | 
| 279c0 |  20 20 20 20 20 20 20 28 63 6c 65 61 6e 75 70 2d    66 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  | .......(cleanup-fn.............( | 
| 279e0 |  6c 61 6d 62 64 61 20 28 26 72 65 73 74 20 5f 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | lambda.(&rest._)...............( | 
| 27a00 |  77 68 65 6e 20 28 62 75 66 66 65 72 2d 6c 69 76    65 2d 70 20 28 67 65 74 2d 62 75 66 66 65 72 20  | when.(buffer-live-p.(get-buffer. | 
| 27a20 |  74 65 6d 70 2d 62 75 66 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 2d  | temp-buf)).................(set- | 
| 27a40 |  6d 61 72 6b 65 72 20 73 74 61 72 74 2d 70 74 20    6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20  | marker.start-pt.nil)............ | 
| 27a60 |  20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65    72 20 74 65 6d 70 2d 62 75 66 29 29 0a 20 20 20  | .....(kill-buffer.temp-buf)).... | 
| 27a80 |  20 20 20 20 20 20 20 20 20 20 20 28 72 65 6d 6f    76 65 2d 68 6f 6f 6b 20 27 67 70 74 65 6c 2d 70  | ...........(remove-hook.'gptel-p | 
| 27aa0 |  6f 73 74 2d 72 65 73 70 6f 6e 73 65 2d 66 75 6e    63 74 69 6f 6e 73 20 63 6c 65 61 6e 75 70 2d 66  | ost-response-functions.cleanup-f | 
| 27ac0 |  6e 29 29 29 29 0a 20 20 20 20 28 61 64 64 2d 68    6f 6f 6b 20 27 67 70 74 65 6c 2d 70 6f 73 74 2d  | n)))).....(add-hook.'gptel-post- | 
| 27ae0 |  72 65 73 70 6f 6e 73 65 2d 66 75 6e 63 74 69 6f    6e 73 20 63 6c 65 61 6e 75 70 2d 66 6e 29 0a 20  | response-functions.cleanup-fn).. | 
| 27b00 |  20 20 20 28 6c 61 6d 62 64 61 20 28 73 74 72 29    0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 6e 6f  | ...(lambda.(str).......(let.((no | 
| 27b20 |  6f 70 2d 70 29 20 28 74 69 63 6b 73 20 30 29 29    0a 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 63  | op-p).(ticks.0)).........(with-c | 
| 27b40 |  75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67    65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65  | urrent-buffer.(get-buffer-create | 
| 27b60 |  20 74 65 6d 70 2d 62 75 66 29 0a 20 20 20 20 20    20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72  | .temp-buf)...........(save-excur | 
| 27b80 |  73 69 6f 6e 20 28 67 6f 74 6f 2d 63 68 61 72 20    28 70 6f 69 6e 74 2d 6d 61 78 29 29 20 28 69 6e  | sion.(goto-char.(point-max)).(in | 
| 27ba0 |  73 65 72 74 20 73 74 72 29 29 0a 20 20 20 20 20    20 20 20 20 20 28 77 68 65 6e 20 28 6d 61 72 6b  | sert.str))...........(when.(mark | 
| 27bc0 |  65 72 2d 70 6f 73 69 74 69 6f 6e 20 73 74 61 72    74 2d 70 74 29 20 28 67 6f 74 6f 2d 63 68 61 72  | er-position.start-pt).(goto-char | 
| 27be0 |  20 73 74 61 72 74 2d 70 74 29 29 0a 20 20 20 20    20 20 20 20 20 20 28 77 68 65 6e 20 69 6e 2d 73  | .start-pt))...........(when.in-s | 
| 27c00 |  72 63 2d 62 6c 6f 63 6b 20 28 73 65 74 71 20 74    69 63 6b 73 20 74 69 63 6b 73 2d 74 6f 74 61 6c  | rc-block.(setq.ticks.ticks-total | 
| 27c20 |  29 29 0a 20 20 20 20 20 20 20 20 20 20 28 73 61    76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20  | ))...........(save-excursion.... | 
| 27c40 |  20 20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20    28 72 65 2d 73 65 61 72 63 68 2d 66 6f 72 77 61  | .........(while.(re-search-forwa | 
| 27c60 |  72 64 20 22 60 5c 5c 7c 5c 5c 2a 5c 5c 7b 31 2c    32 5c 5c 7d 5c 5c 7c 5f 22 20 6e 69 6c 20 74 29  | rd."`\\|\\*\\{1,2\\}\\|_".nil.t) | 
| 27c80 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    70 63 61 73 65 20 28 6d 61 74 63 68 2d 73 74 72  | ...............(pcase.(match-str | 
| 27ca0 |  69 6e 67 20 30 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 22 60 22 0a 20 20 20 20  | ing.0).................("`"..... | 
| 27cc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20    43 6f 75 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  | .............;;.Count.number.of. | 
| 27ce0 |  63 6f 6e 73 65 63 75 74 69 76 65 20 62 61 63 6b    74 69 63 6b 73 0a 20 20 20 20 20 20 20 20 20 20  | consecutive.backticks........... | 
| 27d00 |  20 20 20 20 20 20 20 28 62 61 63 6b 77 61 72 64    2d 63 68 61 72 29 0a 20 20 20 20 20 20 20 20 20  | .......(backward-char).......... | 
| 27d20 |  20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28    61 6e 64 20 28 63 68 61 72 2d 61 66 74 65 72 29  | ........(while.(and.(char-after) | 
| 27d40 |  20 28 65 71 20 28 63 68 61 72 2d 61 66 74 65 72    29 20 3f 60 29 29 0a 20 20 20 20 20 20 20 20 20  | .(eq.(char-after).?`)).......... | 
| 27d60 |  20 20 20 20 20 20 20 20 20 20 28 66 6f 72 77 61    72 64 2d 63 68 61 72 29 0a 20 20 20 20 20 20 20  | ..........(forward-char)........ | 
| 27d80 |  20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20    69 6e 2d 73 72 63 2d 62 6c 6f 63 6b 20 28 63 6c  | ............(if.in-src-block.(cl | 
| 27da0 |  2d 64 65 63 66 20 74 69 63 6b 73 29 20 28 63 6c    2d 69 6e 63 66 20 74 69 63 6b 73 29 29 29 0a 20  | -decf.ticks).(cl-incf.ticks))).. | 
| 27dc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    3b 3b 20 53 65 74 20 74 68 65 20 76 65 72 62 61  | ................;;.Set.the.verba | 
| 27de0 |  74 69 6d 20 73 74 61 74 65 20 6f 66 20 74 68 65    20 70 61 72 73 65 72 0a 20 20 20 20 20 20 20 20  | tim.state.of.the.parser......... | 
| 27e00 |  20 20 20 20 20 20 20 20 20 28 69 66 20 28 61 6e    64 20 28 65 6f 62 70 29 0a 20 20 20 20 20 20 20  | .........(if.(and.(eobp)........ | 
| 27e20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3b 3b 20 53 70 65 63 69 61 6c 20 63 61  | ...................;;.Special.ca | 
| 27e40 |  73 65 20 68 65 75 72 69 73 74 69 63 3a 20 49 66    20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 65 6e  | se.heuristic:.If.the.response.en | 
| 27e60 |  64 73 20 77 69 74 68 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ds.with......................... | 
| 27e80 |  20 20 3b 3b 20 5e 60 60 60 20 77 65 20 64 6f 6e    27 74 20 77 61 69 74 20 66 6f 72 20 6d 6f 72 65  | ..;;.^```.we.don't.wait.for.more | 
| 27ea0 |  20 69 6e 70 75 74 2e 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .input.......................... | 
| 27ec0 |  20 20 3b 3b 20 46 49 58 4d 45 3a 20 54 68 69 73    20 63 61 6e 20 68 61 76 65 20 66 61 6c 73 65 20  | ..;;.FIXME:.This.can.have.false. | 
| 27ee0 |  70 6f 73 69 74 69 76 65 73 2e 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | positives....................... | 
| 27f00 |  20 20 20 20 20 28 6e 6f 74 20 28 73 61 76 65 2d    65 78 63 75 72 73 69 6f 6e 20 28 62 65 67 69 6e  | .....(not.(save-excursion.(begin | 
| 27f20 |  6e 69 6e 67 2d 6f 66 2d 6c 69 6e 65 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ning-of-line)................... | 
| 27f40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f  | .............................(lo | 
| 27f60 |  6f 6b 69 6e 67 2d 61 74 20 22 5e 60 60 60 24 22    29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  | oking-at."^```$"))))............ | 
| 27f80 |  20 20 20 20 20 20 20 20 20 20 3b 3b 20 45 6e 64    20 6f 66 20 69 6e 70 75 74 20 3d 3e 20 74 68 65  | ..........;;.End.of.input.=>.the | 
| 27fa0 |  72 65 20 63 6f 75 6c 64 20 62 65 20 6d 6f 72 65    20 62 61 63 6b 74 69 63 6b 73 20 63 6f 6d 69 6e  | re.could.be.more.backticks.comin | 
| 27fc0 |  67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3b 3b 20 73 6f 20 77 65  | g,......................;;.so.we | 
| 27fe0 |  20 77 61 69 74 20 66 6f 72 20 6d 6f 72 65 20 69    6e 70 75 74 0a 20 20 20 20 20 20 20 20 20 20 20  | .wait.for.more.input............ | 
| 28000 |  20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67 6e    20 28 73 65 74 71 20 6e 6f 6f 70 2d 70 20 74 29  | ..........(progn.(setq.noop-p.t) | 
| 28020 |  20 28 73 65 74 2d 6d 61 72 6b 65 72 20 73 74 61    72 74 2d 70 74 20 28 6d 61 74 63 68 2d 62 65 67  | .(set-marker.start-pt.(match-beg | 
| 28040 |  69 6e 6e 69 6e 67 20 30 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b  | inning.0)))....................; | 
| 28060 |  3b 20 57 65 20 72 65 61 63 68 65 64 20 61 20 63    68 61 72 61 63 74 65 72 20 6f 74 68 65 72 20 74  | ;.We.reached.a.character.other.t | 
| 28080 |  68 61 6e 20 61 20 62 61 63 6b 74 69 63 6b 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | han.a.backtick.................. | 
| 280a0 |  20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54  | ..(cond.....................;;.T | 
| 280c0 |  69 63 6b 73 20 62 61 6c 61 6e 63 65 64 2c 20 65    6e 64 20 73 72 63 20 62 6c 6f 63 6b 0a 20 20 20  | icks.balanced,.end.src.block.... | 
| 280e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 28 3d 20 74 69 63 6b 73 20 30 29 0a 20 20  | .................((=.ticks.0)... | 
| 28100 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 70 72 6f 67 6e 20 28 73 65 74 71 20  | ...................(progn.(setq. | 
| 28120 |  69 6e 2d 73 72 63 2d 62 6c 6f 63 6b 20 6e 69 6c    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | in-src-block.nil)............... | 
| 28140 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67    70 74 65 6c 2d 2d 72 65 70 6c 61 63 65 2d 73 6f  | ..............(gptel--replace-so | 
| 28160 |  75 72 63 65 2d 6d 61 72 6b 65 72 20 74 69 63 6b    73 2d 74 6f 74 61 6c 20 27 65 6e 64 29 29 29 0a  | urce-marker.ticks-total.'end))). | 
| 28180 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 3b 3b 20 50 6f 73 69 74 69 76 65 20  | ....................;;.Positive. | 
| 281a0 |  6e 75 6d 62 65 72 20 6f 66 20 74 69 63 6b 73 2c    20 73 74 61 72 74 20 61 6e 20 73 72 63 20 62 6c  | number.of.ticks,.start.an.src.bl | 
| 281c0 |  6f 63 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 28 61 6e 64 20 28 3e  | ock.....................((and.(> | 
| 281e0 |  20 74 69 63 6b 73 20 30 29 20 28 6e 6f 74 20 69    6e 2d 73 72 63 2d 62 6c 6f 63 6b 29 29 0a 20 20  | .ticks.0).(not.in-src-block))... | 
| 28200 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 73 65 74 71 20 74 69 63 6b 73 2d 74  | ...................(setq.ticks-t | 
| 28220 |  6f 74 61 6c 20 74 69 63 6b 73 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | otal.ticks...................... | 
| 28240 |  20 20 20 20 20 20 69 6e 2d 73 72 63 2d 62 6c 6f    63 6b 20 74 29 0a 20 20 20 20 20 20 20 20 20 20  | ......in-src-block.t)........... | 
| 28260 |  20 20 20 20 20 20 20 20 20 20 20 28 67 70 74 65    6c 2d 2d 72 65 70 6c 61 63 65 2d 73 6f 75 72 63  | ...........(gptel--replace-sourc | 
| 28280 |  65 2d 6d 61 72 6b 65 72 20 74 69 63 6b 73 2d 74    6f 74 61 6c 29 29 0a 20 20 20 20 20 20 20 20 20  | e-marker.ticks-total)).......... | 
| 282a0 |  20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 4e 65    67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 6f 66  | ...........;;.Negative.number.of | 
| 282c0 |  20 74 69 63 6b 73 20 6f 72 20 69 6e 20 61 20 73    72 63 20 62 6c 6f 63 6b 20 61 6c 72 65 61 64 79  | .ticks.or.in.a.src.block.already | 
| 282e0 |  2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 3b 3b 20 72 65 73 65 74 20 74  | ,.....................;;.reset.t | 
| 28300 |  69 63 6b 73 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 74 20 28 73 65 74  | icks.....................(t.(set | 
| 28320 |  71 20 74 69 63 6b 73 20 74 69 63 6b 73 2d 74 6f    74 61 6c 29 29 29 29 29 0a 20 20 20 20 20 20 20  | q.ticks.ticks-total)))))........ | 
| 28340 |  20 20 20 20 20 20 20 20 20 3b 3b 20 48 61 6e 64    6c 65 20 6f 74 68 65 72 20 63 68 61 72 73 3a 20  | .........;;.Handle.other.chars:. | 
| 28360 |  65 6d 70 68 61 73 69 73 2c 20 62 6f 6c 64 20 61    6e 64 20 62 75 6c 6c 65 74 20 69 74 65 6d 73 0a  | emphasis,.bold.and.bullet.items. | 
| 28380 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 28 61 6e 64 20 22 2a 2a 22 20 28 67 75 61 72  | ................((and."**".(guar | 
| 283a0 |  64 20 28 6e 6f 74 20 69 6e 2d 73 72 63 2d 62 6c    6f 63 6b 29 29 29 0a 20 20 20 20 20 20 20 20 20  | d.(not.in-src-block))).......... | 
| 283c0 |  20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ........(cond................... | 
| 283e0 |  28 28 6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c    2a 5c 5c 28 3f 3a 5b 5b 3a 77 6f 72 64 3a 5d 5d  | ((looking-at."\\*\\(?:[[:word:]] | 
| 28400 |  5c 5c 7c 5c 73 5c 5c 29 22 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64  | \\|\s\\)")....................(d | 
| 28420 |  65 6c 65 74 65 2d 63 68 61 72 20 31 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | elete-char.1)).................. | 
| 28440 |  20 28 28 6c 6f 6f 6b 69 6e 67 2d 62 61 63 6b 20    22 5c 5c 28 3f 3a 5b 5b 3a 77 6f 72 64 3a 5d 5d  | .((looking-back."\\(?:[[:word:]] | 
| 28460 |  5c 5c 7c 5c 73 5c 5c 29 5c 5c 2a 5c 5c 7b 32 5c    5c 7d 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  | \\|\s\\)\\*\\{2\\}"............. | 
| 28480 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 6d 61 78 20 28 2d 20 28 70 6f  | .....................(max.(-.(po | 
| 284a0 |  69 6e 74 29 20 33 29 20 28 70 6f 69 6e 74 2d 6d    69 6e 29 29 29 0a 20 20 20 20 20 20 20 20 20 20  | int).3).(point-min)))........... | 
| 284c0 |  20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65    2d 63 68 61 72 20 2d 31 29 29 29 29 0a 20 20 20  | .........(delete-char.-1)))).... | 
| 284e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 61    6e 64 20 22 2a 22 20 28 67 75 61 72 64 20 28 6e  | .............((and."*".(guard.(n | 
| 28500 |  6f 74 20 69 6e 2d 73 72 63 2d 62 6c 6f 63 6b 29    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | ot.in-src-block))).............. | 
| 28520 |  20 20 20 20 28 73 61 76 65 2d 6d 61 74 63 68 2d    64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 20  | ....(save-match-data............ | 
| 28540 |  20 20 20 20 20 20 20 20 28 73 61 76 65 2d 65 78    63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20  | ........(save-excursion......... | 
| 28560 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 67    6e 6f 72 65 2d 65 72 72 6f 72 73 20 28 62 61 63  | .............(ignore-errors.(bac | 
| 28580 |  6b 77 61 72 64 2d 63 68 61 72 20 32 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | kward-char.2)).................. | 
| 285a0 |  20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ....(cond....................... | 
| 285c0 |  28 28 6f 72 20 28 6c 6f 6f 6b 69 6e 67 2d 61 74    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ((or.(looking-at................ | 
| 285e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 22 5b 5e    5b 3a 73 70 61 63 65 3a 5d 5b 3a 70 75 6e 63 74  | ............."[^[:space:][:punct | 
| 28600 |  3a 5d 5c 6e 5d 5c 5c 28 3f 3a 5f 5c 5c 7c 5c 5c    2a 5c 5c 29 5c 5c 28 3f 3a 5b 5b 3a 73 70 61 63  | :]\n]\\(?:_\\|\\*\\)\\(?:[[:spac | 
| 28620 |  65 3a 5d 5b 3a 70 75 6e 63 74 3a 5d 5d 5c 5c 7c    24 5c 5c 29 22 29 0a 20 20 20 20 20 20 20 20 20  | e:][:punct:]]\\|$\\)").......... | 
| 28640 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 6c 6f 6f 6b 69 6e 67 2d 61 74 0a 20 20  | ..................(looking-at... | 
| 28660 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 22 5c 5c 28 3f 3a  | .........................."\\(?: | 
| 28680 |  5b 5b 3a 73 70 61 63 65 3a 5d 5b 3a 70 75 6e 63    74 3a 5d 5d 5c 5c 29 5c 5c 28 3f 3a 5f 5c 5c 7c  | [[:space:][:punct:]]\\)\\(?:_\\| | 
| 286a0 |  5c 5c 2a 5c 5c 29 5c 5c 28 5b 5e 5b 3a 73 70 61    63 65 3a 5d 5b 3a 70 75 6e 63 74 3a 5d 5d 5c 5c  | \\*\\)\\([^[:space:][:punct:]]\\ | 
| 286c0 |  7c 24 5c 5c 29 22 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | |$\\)"))........................ | 
| 286e0 |  3b 3b 20 45 6d 70 68 61 73 69 73 2c 20 72 65 70    6c 61 63 65 20 77 69 74 68 20 73 6c 61 73 68 65  | ;;.Emphasis,.replace.with.slashe | 
| 28700 |  73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 6f 72 77 61 72  | s........................(forwar | 
| 28720 |  64 2d 63 68 61 72 20 32 29 20 28 64 65 6c 65 74    65 2d 63 68 61 72 20 2d 31 29 20 28 69 6e 73 65  | d-char.2).(delete-char.-1).(inse | 
| 28740 |  72 74 20 22 2f 22 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | rt."/")).......................( | 
| 28760 |  28 6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 28    3f 3a 24 5c 5c 7c 5c 5c 60 5c 5c 29 5c 6e 5c 5c  | (looking-at."\\(?:$\\|\\`\\)\n\\ | 
| 28780 |  2a 5b 5b 3a 73 70 61 63 65 3a 5d 5d 22 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | *[[:space:]]").................. | 
| 287a0 |  20 20 20 20 20 20 3b 3b 20 42 75 6c 6c 65 74 20    70 6f 69 6e 74 2c 20 72 65 70 6c 61 63 65 20 77  | ......;;.Bullet.point,.replace.w | 
| 287c0 |  69 74 68 20 68 79 70 68 65 6e 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ith.hyphen...................... | 
| 287e0 |  20 20 28 66 6f 72 77 61 72 64 2d 63 68 61 72 20    32 29 20 28 64 65 6c 65 74 65 2d 63 68 61 72 20  | ..(forward-char.2).(delete-char. | 
| 28800 |  2d 31 29 20 28 69 6e 73 65 72 74 20 22 2d 22 29    29 29 29 29 29 29 29 29 0a 20 20 20 20 20 20 20  | -1).(insert."-")))))))))........ | 
| 28820 |  20 20 20 28 69 66 20 6e 6f 6f 70 2d 70 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 62 75 66  | ...(if.noop-p...............(buf | 
| 28840 |  66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 70    6f 69 6e 74 29 20 73 74 61 72 74 2d 70 74 29 0a  | fer-substring.(point).start-pt). | 
| 28860 |  20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f    67 31 20 28 62 75 66 66 65 72 2d 73 75 62 73 74  | ............(prog1.(buffer-subst | 
| 28880 |  72 69 6e 67 20 28 70 6f 69 6e 74 29 20 28 70 6f    69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 20 20  | ring.(point).(point-max))....... | 
| 288a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65    74 2d 6d 61 72 6b 65 72 20 73 74 61 72 74 2d 70  | .............(set-marker.start-p | 
| 288c0 |  74 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29    29 29 29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20  | t.(point-max)))))))))..(provide. | 
| 288e0 |  27 67 70 74 65 6c 2d 6f 72 67 29 0a 3b 3b 3b 20    67 70 74 65 6c 2d 6f 72 67 2e 65 6c 20 65 6e 64  | 'gptel-org).;;;.gptel-org.el.end | 
| 28900 |  73 20 68 65 72 65 0a 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | s.here.......................... | 
| 28920 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28940 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28960 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28980 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 289a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 289c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 289e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28a00 |  67 70 74 65 6c 2d 32 30 32 34 30 34 32 34 2e 32    33 30 36 2f 67 70 74 65 6c 2d 6f 6c 6c 61 6d 61  | gptel-20240424.2306/gptel-ollama | 
| 28a20 |  2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .el............................. | 
| 28a40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28a60 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 28a80 |  30 30 31 34 35 36 32 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 30 33 30 00 20 30 00 00 00  | 0014562.00000000000.015030..0... | 
| 28aa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28ac0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28ae0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28b00 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 28b20 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 28b40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28b60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28b80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28ba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28bc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28be0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 28c00 |  3b 3b 3b 20 67 70 74 65 6c 2d 6f 6c 6c 61 6d 61    2e 65 6c 20 2d 2d 2d 20 4f 6c 6c 61 6d 61 20 73  | ;;;.gptel-ollama.el.---.Ollama.s | 
| 28c20 |  75 70 70 6f 72 74 20 66 6f 72 20 67 70 74 65 6c    20 20 20 20 20 2d 2a 2d 20 6c 65 78 69 63 61 6c  | upport.for.gptel.....-*-.lexical | 
| 28c40 |  2d 62 69 6e 64 69 6e 67 3a 20 74 3b 20 2d 2a 2d    0a 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28  | -binding:.t;.-*-..;;.Copyright.( | 
| 28c60 |  43 29 20 32 30 32 33 20 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 0a 0a 3b 3b  | C).2023..Karthik.Chikmagalur..;; | 
| 28c80 |  20 41 75 74 68 6f 72 3a 20 4b 61 72 74 68 69 6b    20 43 68 69 6b 6d 61 67 61 6c 75 72 20 3c 6b 61  | .Author:.Karthik.Chikmagalur.<ka | 
| 28ca0 |  72 74 68 69 6b 63 68 69 6b 6d 61 67 61 6c 75 72    40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 3b 3b 20 4b  | rthikchikmagalur@gmail.com>.;;.K | 
| 28cc0 |  65 79 77 6f 72 64 73 3a 20 68 79 70 65 72 6d 65    64 69 61 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f  | eywords:.hypermedia..;;.This.pro | 
| 28ce0 |  67 72 61 6d 20 69 73 20 66 72 65 65 20 73 6f 66    74 77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72  | gram.is.free.software;.you.can.r | 
| 28d00 |  65 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61    6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20  | edistribute.it.and/or.modify.;;. | 
| 28d20 |  69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72    6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65  | it.under.the.terms.of.the.GNU.Ge | 
| 28d40 |  6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63    65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65  | neral.Public.License.as.publishe | 
| 28d60 |  64 20 62 79 0a 3b 3b 20 74 68 65 20 46 72 65 65    20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61  | d.by.;;.the.Free.Software.Founda | 
| 28d80 |  74 69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72    73 69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69  | tion,.either.version.3.of.the.Li | 
| 28da0 |  63 65 6e 73 65 2c 20 6f 72 0a 3b 3b 20 28 61 74    20 79 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e  | cense,.or.;;.(at.your.option).an | 
| 28dc0 |  79 20 6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e    0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61  | y.later.version...;;.This.progra | 
| 28de0 |  6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64    20 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61  | m.is.distributed.in.the.hope.tha | 
| 28e00 |  74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65    66 75 6c 2c 0a 3b 3b 20 62 75 74 20 57 49 54 48  | t.it.will.be.useful,.;;.but.WITH | 
| 28e20 |  4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59    3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74  | OUT.ANY.WARRANTY;.without.even.t | 
| 28e40 |  68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61    6e 74 79 20 6f 66 0a 3b 3b 20 4d 45 52 43 48 41  | he.implied.warranty.of.;;.MERCHA | 
| 28e60 |  4e 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54    4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49  | NTABILITY.or.FITNESS.FOR.A.PARTI | 
| 28e80 |  43 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20    53 65 65 20 74 68 65 0a 3b 3b 20 47 4e 55 20 47  | CULAR.PURPOSE...See.the.;;.GNU.G | 
| 28ea0 |  65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69    63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64  | eneral.Public.License.for.more.d | 
| 28ec0 |  65 74 61 69 6c 73 2e 0a 0a 3b 3b 20 59 6f 75 20    73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  | etails...;;.You.should.have.rece | 
| 28ee0 |  69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20 74    68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50  | ived.a.copy.of.the.GNU.General.P | 
| 28f00 |  75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b 3b    20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73  | ublic.License.;;.along.with.this | 
| 28f20 |  20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e 6f    74 2c 20 73 65 65 20 3c 68 74 74 70 73 3a 2f 2f  | .program...If.not,.see.<https:// | 
| 28f40 |  77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65    6e 73 65 73 2f 3e 2e 0a 0a 3b 3b 3b 20 43 6f 6d  | www.gnu.org/licenses/>...;;;.Com | 
| 28f60 |  6d 65 6e 74 61 72 79 3a 0a 0a 3b 3b 20 54 68 69    73 20 66 69 6c 65 20 61 64 64 73 20 73 75 70 70  | mentary:..;;.This.file.adds.supp | 
| 28f80 |  6f 72 74 20 66 6f 72 20 74 68 65 20 4f 6c 6c 61    6d 61 20 4c 4c 4d 20 41 50 49 20 74 6f 20 67 70  | ort.for.the.Ollama.LLM.API.to.gp | 
| 28fa0 |  74 65 6c 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a 28    72 65 71 75 69 72 65 20 27 67 70 74 65 6c 29 0a  | tel..;;;.Code:.(require.'gptel). | 
| 28fc0 |  28 72 65 71 75 69 72 65 20 27 63 6c 2d 67 65 6e    65 72 69 63 29 0a 0a 28 64 65 63 6c 61 72 65 2d  | (require.'cl-generic)..(declare- | 
| 28fe0 |  66 75 6e 63 74 69 6f 6e 20 6a 73 6f 6e 2d 72 65    61 64 20 22 6a 73 6f 6e 22 20 28 29 29 0a 28 64  | function.json-read."json".()).(d | 
| 29000 |  65 66 76 61 72 20 6a 73 6f 6e 2d 6f 62 6a 65 63    74 2d 74 79 70 65 29 0a 0a 3b 3b 3b 20 4f 6c 6c  | efvar.json-object-type)..;;;.Oll | 
| 29020 |  61 6d 61 0a 28 63 6c 2d 64 65 66 73 74 72 75 63    74 20 28 67 70 74 65 6c 2d 6f 6c 6c 61 6d 61 20  | ama.(cl-defstruct.(gptel-ollama. | 
| 29040 |  28 3a 63 6f 6e 73 74 72 75 63 74 6f 72 20 67 70    74 65 6c 2d 2d 6d 61 6b 65 2d 6f 6c 6c 61 6d 61  | (:constructor.gptel--make-ollama | 
| 29060 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3a  | ).............................(: | 
| 29080 |  63 6f 70 69 65 72 20 6e 69 6c 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | copier.nil)..................... | 
| 290a0 |  20 20 20 20 20 20 20 20 28 3a 69 6e 63 6c 75 64    65 20 67 70 74 65 6c 2d 62 61 63 6b 65 6e 64 29  | ........(:include.gptel-backend) | 
| 290c0 |  29 29 0a 0a 28 64 65 66 76 61 72 2d 6c 6f 63 61    6c 20 67 70 74 65 6c 2d 2d 6f 6c 6c 61 6d 61 2d  | ))..(defvar-local.gptel--ollama- | 
| 290e0 |  74 6f 6b 65 6e 2d 63 6f 75 6e 74 20 30 0a 20 20    22 54 6f 6b 65 6e 20 63 6f 75 6e 74 20 66 6f 72  | token-count.0..."Token.count.for | 
| 29100 |  20 6f 6c 6c 61 6d 61 20 63 6f 6e 76 65 72 73 61    74 69 6f 6e 73 2e 0a 0a 54 68 69 73 20 76 61 72  | .ollama.conversations...This.var | 
| 29120 |  69 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20    74 6f 74 61 6c 20 74 6f 6b 65 6e 20 63 6f 75 6e  | iable.holds.the.total.token.coun | 
| 29140 |  74 20 66 6f 72 20 63 6f 6e 76 65 72 73 61 74 69    6f 6e 73 20 77 69 74 68 0a 4f 6c 6c 61 6d 61 20  | t.for.conversations.with.Ollama. | 
| 29160 |  6d 6f 64 65 6c 73 2e 0a 0a 49 6e 74 65 6e 64 65    64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75  | models...Intended.for.internal.u | 
| 29180 |  73 65 20 6f 6e 6c 79 2e 22 29 0a 0a 28 63 6c 2d    64 65 66 6d 65 74 68 6f 64 20 67 70 74 65 6c 2d  | se.only.")..(cl-defmethod.gptel- | 
| 291a0 |  63 75 72 6c 2d 2d 70 61 72 73 65 2d 73 74 72 65    61 6d 20 28 28 5f 62 61 63 6b 65 6e 64 20 67 70  | curl--parse-stream.((_backend.gp | 
| 291c0 |  74 65 6c 2d 6f 6c 6c 61 6d 61 29 20 69 6e 66 6f    29 0a 20 20 22 50 61 72 73 65 20 72 65 73 70 6f  | tel-ollama).info)..."Parse.respo | 
| 291e0 |  6e 73 65 20 73 74 72 65 61 6d 20 66 6f 72 20 74    68 65 20 4f 6c 6c 61 6d 61 20 41 50 49 2e 22 0a  | nse.stream.for.the.Ollama.API.". | 
| 29200 |  20 20 28 77 68 65 6e 20 28 62 6f 62 70 29 0a 20    20 20 20 28 72 65 2d 73 65 61 72 63 68 2d 66 6f  | ..(when.(bobp).....(re-search-fo | 
| 29220 |  72 77 61 72 64 20 22 5e 7b 22 29 0a 20 20 20 20    28 66 6f 72 77 61 72 64 2d 6c 69 6e 65 20 30 29  | rward."^{").....(forward-line.0) | 
| 29240 |  29 0a 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e 74    65 6e 74 2d 73 74 72 73 29 20 28 63 6f 6e 74 65  | )...(let*.((content-strs).(conte | 
| 29260 |  6e 74 29 20 28 70 74 20 28 70 6f 69 6e 74 29 29    29 0a 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e  | nt).(pt.(point))).....(condition | 
| 29280 |  2d 63 61 73 65 20 6e 69 6c 0a 20 20 20 20 20 20    20 20 28 77 68 69 6c 65 20 28 73 65 74 71 20 63  | -case.nil.........(while.(setq.c | 
| 292a0 |  6f 6e 74 65 6e 74 20 28 67 70 74 65 6c 2d 2d 6a    73 6f 6e 2d 72 65 61 64 29 29 0a 20 20 20 20 20  | ontent.(gptel--json-read))...... | 
| 292c0 |  20 20 20 20 20 28 73 65 74 71 20 70 74 20 28 70    6f 69 6e 74 29 29 0a 20 20 20 20 20 20 20 20 20  | .....(setq.pt.(point)).......... | 
| 292e0 |  20 28 6c 65 74 20 28 28 64 6f 6e 65 20 28 6d 61    70 2d 65 6c 74 20 63 6f 6e 74 65 6e 74 20 3a 64  | .(let.((done.(map-elt.content.:d | 
| 29300 |  6f 6e 65 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 72 65 73 70 6f 6e 73 65 20  | one)).................(response. | 
| 29320 |  28 6d 61 70 2d 6e 65 73 74 65 64 2d 65 6c 74 20    63 6f 6e 74 65 6e 74 20 27 28 3a 6d 65 73 73 61  | (map-nested-elt.content.'(:messa | 
| 29340 |  67 65 20 3a 63 6f 6e 74 65 6e 74 29 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 70 75 73  | ge.:content)))).............(pus | 
| 29360 |  68 20 72 65 73 70 6f 6e 73 65 20 63 6f 6e 74 65    6e 74 2d 73 74 72 73 29 0a 20 20 20 20 20 20 20  | h.response.content-strs)........ | 
| 29380 |  20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 65 71    20 64 6f 6e 65 20 3a 6a 73 6f 6e 2d 66 61 6c 73  | .....(unless.(eq.done.:json-fals | 
| 293a0 |  65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62  | e)...............(with-current-b | 
| 293c0 |  75 66 66 65 72 20 28 70 6c 69 73 74 2d 67 65 74    20 69 6e 66 6f 20 3a 62 75 66 66 65 72 29 0a 20  | uffer.(plist-get.info.:buffer).. | 
| 293e0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    63 6c 2d 69 6e 63 66 20 67 70 74 65 6c 2d 2d 6f  | ...............(cl-incf.gptel--o | 
| 29400 |  6c 6c 61 6d 61 2d 74 6f 6b 65 6e 2d 63 6f 75 6e    74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | llama-token-count............... | 
| 29420 |  20 20 20 20 20 20 20 20 20 20 20 28 2b 20 28 6f    72 20 28 6d 61 70 2d 65 6c 74 20 63 6f 6e 74 65  | ...........(+.(or.(map-elt.conte | 
| 29440 |  6e 74 20 3a 70 72 6f 6d 70 74 5f 65 76 61 6c 5f    63 6f 75 6e 74 29 20 30 29 0a 20 20 20 20 20 20  | nt.:prompt_eval_count).0)....... | 
| 29460 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6f 72 20 28 6d 61 70 2d 65  | ......................(or.(map-e | 
| 29480 |  6c 74 20 63 6f 6e 74 65 6e 74 20 3a 65 76 61 6c    5f 63 6f 75 6e 74 29 20 30 29 29 29 29 0a 20 20  | lt.content.:eval_count).0))))... | 
| 294a0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 67 6f 74    6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61  | ............(goto-char.(point-ma | 
| 294c0 |  78 29 29 29 29 29 0a 20 20 20 20 20 20 28 65 72    72 6f 72 20 28 67 6f 74 6f 2d 63 68 61 72 20 70  | x))))).......(error.(goto-char.p | 
| 294e0 |  74 29 29 29 0a 20 20 20 20 28 61 70 70 6c 79 20    23 27 63 6f 6e 63 61 74 20 28 6e 72 65 76 65 72  | t))).....(apply.#'concat.(nrever | 
| 29500 |  73 65 20 63 6f 6e 74 65 6e 74 2d 73 74 72 73 29    29 29 29 0a 0a 28 63 6c 2d 64 65 66 6d 65 74 68  | se.content-strs))))..(cl-defmeth | 
| 29520 |  6f 64 20 67 70 74 65 6c 2d 2d 70 61 72 73 65 2d    72 65 73 70 6f 6e 73 65 20 28 28 5f 62 61 63 6b  | od.gptel--parse-response.((_back | 
| 29540 |  65 6e 64 20 67 70 74 65 6c 2d 6f 6c 6c 61 6d 61    29 20 72 65 73 70 6f 6e 73 65 20 69 6e 66 6f 29  | end.gptel-ollama).response.info) | 
| 29560 |  0a 20 20 22 50 61 72 73 65 20 61 20 6f 6e 65 2d    73 68 6f 74 20 52 45 53 50 4f 4e 53 45 20 66 72  | ..."Parse.a.one-shot.RESPONSE.fr | 
| 29580 |  6f 6d 20 74 68 65 20 4f 6c 6c 61 6d 61 20 41 50    49 2e 22 0a 20 20 28 77 68 65 6e 2d 6c 65 74 20  | om.the.Ollama.API."...(when-let. | 
| 295a0 |  28 28 63 6f 6e 74 65 78 74 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 2b 20 28 6f 72 20 28  | ((context...............(+.(or.( | 
| 295c0 |  6d 61 70 2d 65 6c 74 20 72 65 73 70 6f 6e 73 65    20 3a 70 72 6f 6d 70 74 5f 65 76 61 6c 5f 63 6f  | map-elt.response.:prompt_eval_co | 
| 295e0 |  75 6e 74 29 20 30 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 6f 72 20 28 6d 61  | unt).0)..................(or.(ma | 
| 29600 |  70 2d 65 6c 74 20 72 65 73 70 6f 6e 73 65 20 3a    65 76 61 6c 5f 63 6f 75 6e 74 29 20 30 29 29 29  | p-elt.response.:eval_count).0))) | 
| 29620 |  29 0a 20 20 20 20 28 77 69 74 68 2d 63 75 72 72    65 6e 74 2d 62 75 66 66 65 72 20 28 70 6c 69 73  | ).....(with-current-buffer.(plis | 
| 29640 |  74 2d 67 65 74 20 69 6e 66 6f 20 3a 62 75 66 66    65 72 29 0a 20 20 20 20 20 20 28 63 6c 2d 69 6e  | t-get.info.:buffer).......(cl-in | 
| 29660 |  63 66 20 67 70 74 65 6c 2d 2d 6f 6c 6c 61 6d 61    2d 74 6f 6b 65 6e 2d 63 6f 75 6e 74 20 63 6f 6e  | cf.gptel--ollama-token-count.con | 
| 29680 |  74 65 78 74 29 29 29 0a 20 20 28 6d 61 70 2d 6e    65 73 74 65 64 2d 65 6c 74 20 72 65 73 70 6f 6e  | text)))...(map-nested-elt.respon | 
| 296a0 |  73 65 20 27 28 3a 6d 65 73 73 61 67 65 20 3a 63    6f 6e 74 65 6e 74 29 29 29 0a 0a 28 63 6c 2d 64  | se.'(:message.:content)))..(cl-d | 
| 296c0 |  65 66 6d 65 74 68 6f 64 20 67 70 74 65 6c 2d 2d    72 65 71 75 65 73 74 2d 64 61 74 61 20 28 28 5f  | efmethod.gptel--request-data.((_ | 
| 296e0 |  62 61 63 6b 65 6e 64 20 67 70 74 65 6c 2d 6f 6c    6c 61 6d 61 29 20 70 72 6f 6d 70 74 73 29 0a 20  | backend.gptel-ollama).prompts).. | 
| 29700 |  20 22 4a 53 4f 4e 20 65 6e 63 6f 64 65 20 50 52    4f 4d 50 54 53 20 66 6f 72 20 73 65 6e 64 69 6e  | ."JSON.encode.PROMPTS.for.sendin | 
| 29720 |  67 20 74 6f 20 43 68 61 74 47 50 54 2e 22 0a 20    20 28 6c 65 74 20 28 28 70 72 6f 6d 70 74 73 2d  | g.to.ChatGPT."...(let.((prompts- | 
| 29740 |  70 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 60    28 3a 6d 6f 64 65 6c 20 2c 67 70 74 65 6c 2d 6d  | plist..........`(:model.,gptel-m | 
| 29760 |  6f 64 65 6c 0a 20 20 20 20 20 20 20 20 20 20 20    3a 6d 65 73 73 61 67 65 73 20 5b 2c 40 70 72 6f  | odel............:messages.[,@pro | 
| 29780 |  6d 70 74 73 5d 0a 20 20 20 20 20 20 20 20 20 20    20 3a 73 74 72 65 61 6d 20 2c 28 6f 72 20 28 61  | mpts]............:stream.,(or.(a | 
| 297a0 |  6e 64 20 67 70 74 65 6c 2d 73 74 72 65 61 6d 20    67 70 74 65 6c 2d 75 73 65 2d 63 75 72 6c 0a 20  | nd.gptel-stream.gptel-use-curl.. | 
| 297c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 67 70 74 65 6c 2d 62  | ........................(gptel-b | 
| 297e0 |  61 63 6b 65 6e 64 2d 73 74 72 65 61 6d 20 67 70    74 65 6c 2d 62 61 63 6b 65 6e 64 29 29 0a 20 20  | ackend-stream.gptel-backend))... | 
| 29800 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3a 6a 73 6f 6e 2d 66 61 6c 73 65 29 29  | ...................:json-false)) | 
| 29820 |  29 0a 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e    73 2d 70 6c 69 73 74 29 0a 20 20 20 20 28 77 68  | ).........options-plist).....(wh | 
| 29840 |  65 6e 20 67 70 74 65 6c 2d 74 65 6d 70 65 72 61    74 75 72 65 0a 20 20 20 20 20 20 28 73 65 74 71  | en.gptel-temperature.......(setq | 
| 29860 |  20 6f 70 74 69 6f 6e 73 2d 70 6c 69 73 74 0a 20    20 20 20 20 20 20 20 20 20 20 20 28 70 6c 69 73  | .options-plist.............(plis | 
| 29880 |  74 2d 70 75 74 20 6f 70 74 69 6f 6e 73 2d 70 6c    69 73 74 20 3a 74 65 6d 70 65 72 61 74 75 72 65  | t-put.options-plist.:temperature | 
| 298a0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 67 70 74 65 6c 2d 74 65  | ........................gptel-te | 
| 298c0 |  6d 70 65 72 61 74 75 72 65 29 29 29 0a 20 20 20    20 28 77 68 65 6e 20 67 70 74 65 6c 2d 6d 61 78  | mperature))).....(when.gptel-max | 
| 298e0 |  2d 74 6f 6b 65 6e 73 0a 20 20 20 20 20 20 28 73    65 74 71 20 6f 70 74 69 6f 6e 73 2d 70 6c 69 73  | -tokens.......(setq.options-plis | 
| 29900 |  74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70    6c 69 73 74 2d 70 75 74 20 6f 70 74 69 6f 6e 73  | t.............(plist-put.options | 
| 29920 |  2d 70 6c 69 73 74 20 3a 6e 75 6d 5f 70 72 65 64    69 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20  | -plist.:num_predict............. | 
| 29940 |  20 20 20 20 20 20 20 20 20 20 20 67 70 74 65 6c    2d 6d 61 78 2d 74 6f 6b 65 6e 73 29 29 29 0a 20  | ...........gptel-max-tokens))).. | 
| 29960 |  20 20 20 28 77 68 65 6e 20 6f 70 74 69 6f 6e 73    2d 70 6c 69 73 74 0a 20 20 20 20 20 20 28 70 6c  | ...(when.options-plist.......(pl | 
| 29980 |  69 73 74 2d 70 75 74 20 70 72 6f 6d 70 74 73 2d    70 6c 69 73 74 20 3a 6f 70 74 69 6f 6e 73 20 6f  | ist-put.prompts-plist.:options.o | 
| 299a0 |  70 74 69 6f 6e 73 2d 70 6c 69 73 74 29 29 0a 20    20 20 20 70 72 6f 6d 70 74 73 2d 70 6c 69 73 74  | ptions-plist)).....prompts-plist | 
| 299c0 |  29 29 0a 0a 28 63 6c 2d 64 65 66 6d 65 74 68 6f    64 20 67 70 74 65 6c 2d 2d 70 61 72 73 65 2d 62  | ))..(cl-defmethod.gptel--parse-b | 
| 299e0 |  75 66 66 65 72 20 28 28 5f 62 61 63 6b 65 6e 64    20 67 70 74 65 6c 2d 6f 6c 6c 61 6d 61 29 20 26  | uffer.((_backend.gptel-ollama).& | 
| 29a00 |  6f 70 74 69 6f 6e 61 6c 20 6d 61 78 2d 65 6e 74    72 69 65 73 29 0a 20 20 28 6c 65 74 20 28 28 70  | optional.max-entries)...(let.((p | 
| 29a20 |  72 6f 6d 70 74 73 29 20 28 70 72 6f 70 29 29 0a    20 20 20 20 28 77 68 69 6c 65 20 28 61 6e 64 0a  | rompts).(prop)).....(while.(and. | 
| 29a40 |  20 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20    28 6e 6f 74 20 6d 61 78 2d 65 6e 74 72 69 65 73  | ............(or.(not.max-entries | 
| 29a60 |  29 20 28 3e 3d 20 6d 61 78 2d 65 6e 74 72 69 65    73 20 30 29 29 0a 20 20 20 20 20 20 20 20 20 20  | ).(>=.max-entries.0))........... | 
| 29a80 |  20 20 28 73 65 74 71 20 70 72 6f 70 20 28 74 65    78 74 2d 70 72 6f 70 65 72 74 79 2d 73 65 61 72  | ..(setq.prop.(text-property-sear | 
| 29aa0 |  63 68 2d 62 61 63 6b 77 61 72 64 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ch-backward..................... | 
| 29ac0 |  20 20 20 20 27 67 70 74 65 6c 20 27 72 65 73 70    6f 6e 73 65 0a 20 20 20 20 20 20 20 20 20 20 20  | ....'gptel.'response............ | 
| 29ae0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68    65 6e 20 28 67 65 74 2d 63 68 61 72 2d 70 72 6f  | .............(when.(get-char-pro | 
| 29b00 |  70 65 72 74 79 20 28 6d 61 78 20 28 70 6f 69 6e    74 2d 6d 69 6e 29 20 28 31 2d 20 28 70 6f 69 6e  | perty.(max.(point-min).(1-.(poin | 
| 29b20 |  74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | t)))............................ | 
| 29b40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 27 67 70 74 65 6c 29 0a 20 20  | ......................'gptel)... | 
| 29b60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 74 29 29 29 29 0a 20 20  | ........................t))))... | 
| 29b80 |  20 20 20 20 28 70 75 73 68 20 28 6c 69 73 74 20    3a 72 6f 6c 65 20 28 69 66 20 28 70 72 6f 70 2d  | ....(push.(list.:role.(if.(prop- | 
| 29ba0 |  6d 61 74 63 68 2d 76 61 6c 75 65 20 70 72 6f 70    29 20 22 61 73 73 69 73 74 61 6e 74 22 20 22 75  | match-value.prop)."assistant"."u | 
| 29bc0 |  73 65 72 22 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3a 63 6f 6e 74 65 6e 74  | ser")...................:content | 
| 29be0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 73 74 72 69 6e 67 2d 74 72 69 6d 0a  | ...................(string-trim. | 
| 29c00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 62 75 66 66 65 72 2d 73 75 62 73 74  | ...................(buffer-subst | 
| 29c20 |  72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69    65 73 20 28 70 72 6f 70 2d 6d 61 74 63 68 2d 62  | ring-no-properties.(prop-match-b | 
| 29c40 |  65 67 69 6e 6e 69 6e 67 20 70 72 6f 70 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | eginning.prop).................. | 
| 29c60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 29c80 |  20 20 28 70 72 6f 70 2d 6d 61 74 63 68 2d 65 6e    64 20 70 72 6f 70 29 29 0a 20 20 20 20 20 20 20  | ..(prop-match-end.prop))........ | 
| 29ca0 |  20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72    6d 61 74 20 22 5b 5c 74 5c 72 5c 6e 20 5d 2a 5c  | ............(format."[\t\r\n.]*\ | 
| 29cc0 |  5c 28 3f 3a 25 73 5c 5c 29 3f 5b 5c 74 5c 72 5c    6e 20 5d 2a 22 0a 20 20 20 20 20 20 20 20 20 20  | \(?:%s\\)?[\t\r\n.]*"........... | 
| 29ce0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 28  | .................(regexp-quote.( | 
| 29d00 |  67 70 74 65 6c 2d 70 72 6f 6d 70 74 2d 70 72 65    66 69 78 2d 73 74 72 69 6e 67 29 29 29 0a 20 20  | gptel-prompt-prefix-string)))... | 
| 29d20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 66 6f 72 6d 61 74 20 22 5b 5c 74 5c 72 5c  | .................(format."[\t\r\ | 
| 29d40 |  6e 20 5d 2a 5c 5c 28 3f 3a 25 73 5c 5c 29 3f 5b    5c 74 5c 72 5c 6e 20 5d 2a 22 0a 20 20 20 20 20  | n.]*\\(?:%s\\)?[\t\r\n.]*"...... | 
| 29d60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 72 65 67 65 78 70 2d 71 75  | ......................(regexp-qu | 
| 29d80 |  6f 74 65 20 28 67 70 74 65 6c 2d 72 65 73 70 6f    6e 73 65 2d 70 72 65 66 69 78 2d 73 74 72 69 6e  | ote.(gptel-response-prefix-strin | 
| 29da0 |  67 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 70 72 6f 6d 70 74 73 29 0a 20 20 20 20  | g))))).............prompts)..... | 
| 29dc0 |  20 20 28 61 6e 64 20 6d 61 78 2d 65 6e 74 72 69    65 73 20 28 63 6c 2d 64 65 63 66 20 6d 61 78 2d  | ..(and.max-entries.(cl-decf.max- | 
| 29de0 |  65 6e 74 72 69 65 73 29 29 29 0a 20 20 20 20 28    63 6f 6e 73 20 28 6c 69 73 74 20 3a 72 6f 6c 65  | entries))).....(cons.(list.:role | 
| 29e00 |  20 22 73 79 73 74 65 6d 22 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3a 63 6f 6e 74 65  | ."system".................:conte | 
| 29e20 |  6e 74 20 67 70 74 65 6c 2d 2d 73 79 73 74 65 6d    2d 6d 65 73 73 61 67 65 29 0a 20 20 20 20 20 20  | nt.gptel--system-message)....... | 
| 29e40 |  20 20 20 20 70 72 6f 6d 70 74 73 29 29 29 0a 0a    3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28  | ....prompts)))..;;;###autoload.( | 
| 29e60 |  63 6c 2d 64 65 66 75 6e 20 67 70 74 65 6c 2d 6d    61 6b 65 2d 6f 6c 6c 61 6d 61 0a 20 20 20 20 28  | cl-defun.gptel-make-ollama.....( | 
| 29e80 |  6e 61 6d 65 20 26 6b 65 79 20 63 75 72 6c 2d 61    72 67 73 20 68 65 61 64 65 72 20 6b 65 79 20 6d  | name.&key.curl-args.header.key.m | 
| 29ea0 |  6f 64 65 6c 73 20 73 74 72 65 61 6d 0a 20 20 20    20 20 20 20 20 20 20 28 68 6f 73 74 20 22 6c 6f  | odels.stream...........(host."lo | 
| 29ec0 |  63 61 6c 68 6f 73 74 3a 31 31 34 33 34 22 29 0a    20 20 20 20 20 20 20 20 20 20 28 70 72 6f 74 6f  | calhost:11434")...........(proto | 
| 29ee0 |  63 6f 6c 20 22 68 74 74 70 22 29 0a 20 20 20 20    20 20 20 20 20 20 28 65 6e 64 70 6f 69 6e 74 20  | col."http")...........(endpoint. | 
| 29f00 |  22 2f 61 70 69 2f 63 68 61 74 22 29 29 0a 20 20    22 52 65 67 69 73 74 65 72 20 61 6e 20 4f 6c 6c  | "/api/chat"))..."Register.an.Oll | 
| 29f20 |  61 6d 61 20 62 61 63 6b 65 6e 64 20 66 6f 72 20    67 70 74 65 6c 20 77 69 74 68 20 4e 41 4d 45 2e  | ama.backend.for.gptel.with.NAME. | 
| 29f40 |  0a 0a 4b 65 79 77 6f 72 64 20 61 72 67 75 6d 65    6e 74 73 3a 0a 0a 43 55 52 4c 2d 41 52 47 53 20  | ..Keyword.arguments:..CURL-ARGS. | 
| 29f60 |  28 6f 70 74 69 6f 6e 61 6c 29 20 69 73 20 61 20    6c 69 73 74 20 6f 66 20 61 64 64 69 74 69 6f 6e  | (optional).is.a.list.of.addition | 
| 29f80 |  61 6c 20 43 75 72 6c 20 61 72 67 75 6d 65 6e 74    73 2e 0a 0a 48 4f 53 54 20 69 73 20 77 68 65 72  | al.Curl.arguments...HOST.is.wher | 
| 29fa0 |  65 20 4f 6c 6c 61 6d 61 20 72 75 6e 73 20 28 77    69 74 68 20 70 6f 72 74 29 2c 20 64 65 66 61 75  | e.Ollama.runs.(with.port),.defau | 
| 29fc0 |  6c 74 73 20 74 6f 20 6c 6f 63 61 6c 68 6f 73 74    3a 31 31 34 33 34 0a 0a 4d 4f 44 45 4c 53 20 69  | lts.to.localhost:11434..MODELS.i | 
| 29fe0 |  73 20 61 20 6c 69 73 74 20 6f 66 20 61 76 61 69    6c 61 62 6c 65 20 6d 6f 64 65 6c 20 6e 61 6d 65  | s.a.list.of.available.model.name | 
| 2a000 |  73 2e 0a 0a 53 54 52 45 41 4d 20 69 73 20 61 20    62 6f 6f 6c 65 61 6e 20 74 6f 20 74 6f 67 67 6c  | s...STREAM.is.a.boolean.to.toggl | 
| 2a020 |  65 20 73 74 72 65 61 6d 69 6e 67 20 72 65 73 70    6f 6e 73 65 73 2c 20 64 65 66 61 75 6c 74 73 20  | e.streaming.responses,.defaults. | 
| 2a040 |  74 6f 0a 66 61 6c 73 65 2e 0a 0a 50 52 4f 54 4f    43 4f 4c 20 28 6f 70 74 69 6f 6e 61 6c 29 20 73  | to.false...PROTOCOL.(optional).s | 
| 2a060 |  70 65 63 69 66 69 65 73 20 74 68 65 20 70 72 6f    74 6f 63 6f 6c 2c 20 68 74 74 70 20 62 79 20 64  | pecifies.the.protocol,.http.by.d | 
| 2a080 |  65 66 61 75 6c 74 2e 0a 0a 45 4e 44 50 4f 49 4e    54 20 28 6f 70 74 69 6f 6e 61 6c 29 20 69 73 20  | efault...ENDPOINT.(optional).is. | 
| 2a0a0 |  74 68 65 20 41 50 49 20 65 6e 64 70 6f 69 6e 74    20 66 6f 72 20 63 6f 6d 70 6c 65 74 69 6f 6e 73  | the.API.endpoint.for.completions | 
| 2a0c0 |  2c 20 64 65 66 61 75 6c 74 73 20 74 6f 0a 5c 22    2f 61 70 69 2f 67 65 6e 65 72 61 74 65 5c 22 2e  | ,.defaults.to.\"/api/generate\". | 
| 2a0e0 |  0a 0a 48 45 41 44 45 52 20 28 6f 70 74 69 6f 6e    61 6c 29 20 69 73 20 66 6f 72 20 61 64 64 69 74  | ..HEADER.(optional).is.for.addit | 
| 2a100 |  69 6f 6e 61 6c 20 68 65 61 64 65 72 73 20 74 6f    20 73 65 6e 64 20 77 69 74 68 20 65 61 63 68 0a  | ional.headers.to.send.with.each. | 
| 2a120 |  72 65 71 75 65 73 74 2e 20 20 49 74 20 73 68 6f    75 6c 64 20 62 65 20 61 6e 20 61 6c 69 73 74 20  | request...It.should.be.an.alist. | 
| 2a140 |  6f 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68    61 74 20 72 65 74 75 6e 73 20 61 6e 0a 61 6c 69  | or.a.function.that.retuns.an.ali | 
| 2a160 |  73 74 2c 20 6c 69 6b 65 3a 0a 28 28 5c 22 43 6f    6e 74 65 6e 74 2d 54 79 70 65 5c 22 20 2e 20 5c  | st,.like:.((\"Content-Type\"...\ | 
| 2a180 |  22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f    6e 5c 22 29 29 0a 0a 4b 45 59 20 28 6f 70 74 69  | "application/json\"))..KEY.(opti | 
| 2a1a0 |  6f 6e 61 6c 29 20 69 73 20 61 20 76 61 72 69 61    62 6c 65 20 77 68 6f 73 65 20 76 61 6c 75 65 20  | onal).is.a.variable.whose.value. | 
| 2a1c0 |  69 73 20 74 68 65 20 41 50 49 20 6b 65 79 2c 20    6f 72 0a 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  | is.the.API.key,.or.function.that | 
| 2a1e0 |  20 72 65 74 75 72 6e 73 20 74 68 65 20 6b 65 79    2e 20 20 54 68 69 73 20 69 73 20 74 79 70 69 63  | .returns.the.key...This.is.typic | 
| 2a200 |  61 6c 6c 79 20 6e 6f 74 20 72 65 71 75 69 72 65    64 0a 66 6f 72 20 6c 6f 63 61 6c 20 6d 6f 64 65  | ally.not.required.for.local.mode | 
| 2a220 |  6c 73 20 6c 69 6b 65 20 4f 6c 6c 61 6d 61 2e 0a    0a 45 78 61 6d 70 6c 65 3a 0a 2d 2d 2d 2d 2d 2d  | ls.like.Ollama...Example:.------ | 
| 2a240 |  2d 0a 0a 28 67 70 74 65 6c 2d 6d 61 6b 65 2d 6f    6c 6c 61 6d 61 0a 20 20 5c 22 4f 6c 6c 61 6d 61  | -..(gptel-make-ollama...\"Ollama | 
| 2a260 |  5c 22 0a 20 20 3a 68 6f 73 74 20 5c 22 6c 6f 63    61 6c 68 6f 73 74 3a 31 31 34 33 34 5c 22 0a 20  | \"...:host.\"localhost:11434\".. | 
| 2a280 |  20 3a 6d 6f 64 65 6c 73 20 5c 5c 3d 27 28 5c 22    6d 69 73 74 72 61 6c 3a 6c 61 74 65 73 74 5c 22  | .:models.\\='(\"mistral:latest\" | 
| 2a2a0 |  29 0a 20 20 3a 73 74 72 65 61 6d 20 74 29 22 0a    20 20 28 64 65 63 6c 61 72 65 20 28 69 6e 64 65  | )...:stream.t)"...(declare.(inde | 
| 2a2c0 |  6e 74 20 31 29 29 0a 20 20 28 6c 65 74 20 28 28    62 61 63 6b 65 6e 64 20 28 67 70 74 65 6c 2d 2d  | nt.1))...(let.((backend.(gptel-- | 
| 2a2e0 |  6d 61 6b 65 2d 6f 6c 6c 61 6d 61 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 63  | make-ollama...................:c | 
| 2a300 |  75 72 6c 2d 61 72 67 73 20 63 75 72 6c 2d 61 72    67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | url-args.curl-args.............. | 
| 2a320 |  20 20 20 20 20 3a 6e 61 6d 65 20 6e 61 6d 65 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | .....:name.name................. | 
| 2a340 |  20 20 3a 68 6f 73 74 20 68 6f 73 74 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a  | ..:host.host...................: | 
| 2a360 |  68 65 61 64 65 72 20 68 65 61 64 65 72 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | header.header................... | 
| 2a380 |  3a 6b 65 79 20 6b 65 79 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 3a 6d 6f 64 65  | :key.key...................:mode | 
| 2a3a0 |  6c 73 20 6d 6f 64 65 6c 73 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 3a 70 72 6f  | ls.models...................:pro | 
| 2a3c0 |  74 6f 63 6f 6c 20 70 72 6f 74 6f 63 6f 6c 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | tocol.protocol.................. | 
| 2a3e0 |  20 3a 65 6e 64 70 6f 69 6e 74 20 65 6e 64 70 6f    69 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 20  | .:endpoint.endpoint............. | 
| 2a400 |  20 20 20 20 20 20 3a 73 74 72 65 61 6d 20 73 74    72 65 61 6d 0a 20 20 20 20 20 20 20 20 20 20 20  | ......:stream.stream............ | 
| 2a420 |  20 20 20 20 20 20 20 3a 75 72 6c 20 28 69 66 20    70 72 6f 74 6f 63 6f 6c 0a 20 20 20 20 20 20 20  | .......:url.(if.protocol........ | 
| 2a440 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6f 6e 63 61 74 20 70 72 6f 74  | ....................(concat.prot | 
| 2a460 |  6f 63 6f 6c 20 22 3a 2f 2f 22 20 68 6f 73 74 20    65 6e 64 70 6f 69 6e 74 29 0a 20 20 20 20 20 20  | ocol."://".host.endpoint)....... | 
| 2a480 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 63 6f 6e 63 61 74 20 68 6f 73 74 20  | ...................(concat.host. | 
| 2a4a0 |  65 6e 64 70 6f 69 6e 74 29 29 29 29 29 0a 20 20    20 20 28 70 72 6f 67 31 20 62 61 63 6b 65 6e 64  | endpoint))))).....(prog1.backend | 
| 2a4c0 |  0a 20 20 20 20 20 20 28 73 65 74 66 20 28 61 6c    69 73 74 2d 67 65 74 20 6e 61 6d 65 20 67 70 74  | .......(setf.(alist-get.name.gpt | 
| 2a4e0 |  65 6c 2d 2d 6b 6e 6f 77 6e 2d 62 61 63 6b 65 6e    64 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | el--known-backends.............. | 
| 2a500 |  20 20 20 20 20 20 20 20 20 20 6e 69 6c 20 6e 69    6c 20 23 27 65 71 75 61 6c 29 0a 20 20 20 20 20  | ..........nil.nil.#'equal)...... | 
| 2a520 |  20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63    6b 65 6e 64 29 29 29 29 0a 0a 28 70 72 6f 76 69  | .............backend))))..(provi | 
| 2a540 |  64 65 20 27 67 70 74 65 6c 2d 6f 6c 6c 61 6d 61    29 0a 3b 3b 3b 20 67 70 74 65 6c 2d 6f 6c 6c 61  | de.'gptel-ollama).;;;.gptel-olla | 
| 2a560 |  6d 61 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 0a    0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ma.el.ends.here................. | 
| 2a580 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a5a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a5c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a5e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a600 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a620 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a640 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a660 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a680 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a6a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a6c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a6e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a700 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a720 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a740 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a760 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a780 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a7a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a7c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a7e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a800 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a820 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a840 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a860 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a880 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a8a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a8c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a8e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a900 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a920 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a940 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a960 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a980 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a9a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a9c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2a9e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aa00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aa20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aa40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aa60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aa80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aaa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aac0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aae0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ab00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ab20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ab40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ab60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ab80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2abc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2abe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ac00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ac20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ac40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ac60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ac80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aca0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2acc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ace0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ad00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ad20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ad40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ad60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ad80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ada0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2adc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ade0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ae00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ae20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ae40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ae60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ae80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aea0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aec0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2aee0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2af00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2af20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2af40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2af60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2af80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2afa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2afc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2afe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b000 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b020 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b040 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b060 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b080 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b0a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b0c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b0e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b100 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b120 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b140 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b160 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b180 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b1a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b1c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b1e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b200 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b220 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b240 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b260 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b280 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b2a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b2c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b2e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b300 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b320 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b340 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b360 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b380 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b3a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b3c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b3e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b400 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b420 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b440 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b460 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b480 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b4a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b4c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b4e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b500 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b520 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b540 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b560 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b580 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b5a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b5c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b5e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b600 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b620 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b640 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b660 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b680 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b6a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b6c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b6e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b700 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b720 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b740 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b760 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b780 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b7a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b7c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b7e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b800 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b820 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b840 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b860 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b880 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b8a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b8c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b8e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b900 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b920 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b940 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b960 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b980 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b9a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b9c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2b9e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ba00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ba20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ba40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ba60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ba80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2baa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bac0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bae0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bb00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bb20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bb40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bb60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bb80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bbc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bbe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bc00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bc20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bc40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bc60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bc80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bca0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bcc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bce0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bd00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bd20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bd40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bd60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bd80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bda0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bdc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bde0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2be00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2be20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2be40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2be60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2be80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bea0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bec0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bee0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bf00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bf20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bf40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bf60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bf80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bfa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bfc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2bfe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c000 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c020 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c040 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c060 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c080 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c0a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c0c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c0e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c100 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c120 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c140 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c160 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c180 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c1a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c1c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c1e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c200 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c220 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c240 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c260 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c280 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c2a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c2c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c2e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c300 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c320 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c340 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c360 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c380 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c3a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c3c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c3e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c400 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c420 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c440 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c460 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c480 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c4a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c4c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c4e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c500 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c520 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c540 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c560 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c580 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c5a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c5c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c5e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c600 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c620 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c640 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c660 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c680 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c6a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c6c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c6e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c700 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c720 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c740 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c760 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c780 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c7a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c7c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c7e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c800 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c820 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c840 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c860 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c880 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c8a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c8c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c8e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c900 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c920 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c940 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c960 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c980 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c9a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c9c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2c9e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ca00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ca20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ca40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ca60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ca80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2caa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cac0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cae0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cb00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cb20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cb40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cb60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cb80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cba0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cbc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cbe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cc00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cc20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cc40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cc60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cc80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cca0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ccc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cce0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cd00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cd20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cd40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cd60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cd80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cda0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cdc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cde0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ce00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ce20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ce40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ce60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2ce80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cea0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cec0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cee0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cf00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cf20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cf40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cf60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cf80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cfa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cfc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 2cfe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ |