File size: 2,377 Bytes
5a4ba7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
{#-

    Pharmacy Prompt Serialization Format (PPSF) v1.0 / v1.1



    Supported roles:

      system     -> @SYSTEM

      user       -> @PATIENT (with optional @REFERENCE via metadata)

      assistant  -> @PHARMACIST (with optional @THOUGHT via metadata)

      tool       -> @TOOL_RESPONSE



    Tool Calling:

      tools      -> @TOOLS

      tool_calls -> @TOOL_CALL



    Copyright:

      PPSF v1.0

-#}

{{- "@FORMAT PPSF/1.0\n\n" -}}



{#- ===========================

   SYSTEM MESSAGE

=========================== -#}

{%- if messages and messages[0]["role"] == "system" -%}

@SYSTEM

{{ messages[0]["content"] | trim }}



{% endif -%}



{#- ===========================

   TOOL DEFINITIONS

=========================== -#}

{%- if tools -%}

@TOOLS

Available tools:



{% for tool in tools -%}

{{ tool | tojson }}

{% endfor %}

To invoke a tool respond ONLY with:



@TOOL_CALL

{

  "name": "...",

  "arguments": { ... }

}



{% endif -%}



{#- ===========================

   CHAT HISTORY

=========================== -#}

{%- for message in messages -%}

{%- if loop.first and message["role"] == "system" -%}

    {# Handled in system block #}

{%- elif message["role"] == "user" -%}

    {%- set ref = message.get("reference") or (message.get("metadata") and message.metadata.get("reference")) -%}

    {%- if ref -%}

@REFERENCE

{{ ref | trim }}



{% endif -%}

@PATIENT

{{ message["content"] | trim }}



{% elif message["role"] == "assistant" -%}

    {%- set thought = message.get("thought") or (message.get("metadata") and message.metadata.get("thought")) -%}

    {%- if thought -%}

@THOUGHT

{{ thought | trim }}



{% endif -%}

    {%- if message.get("content") -%}

@PHARMACIST

{{ message["content"] | trim }}



{% endif -%}

    {%- if message.get("tool_calls") -%}

        {%- for tc in message["tool_calls"] -%}

@TOOL_CALL

{

  "name": {{ tc["function"]["name"] | tojson }},

  "arguments": {{ tc["function"]["arguments"] if tc["function"]["arguments"] is string else (tc["function"]["arguments"] | tojson) }}

}



{% endfor -%}

    {%- endif -%}

{%- elif message["role"] == "tool" -%}

@TOOL_RESPONSE

{{ message["content"] | trim }}



{% endif -%}

{%- endfor -%}



{#- ===========================

   GENERATION PROMPT

=========================== -#}

{%- if add_generation_prompt -%}

@PHARMACIST

{%- endif -%}