File size: 5,734 Bytes
7401fcc
 
 
 
 
 
 
 
ee90460
7401fcc
ee90460
7401fcc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c1b111
7401fcc
0c1b111
7401fcc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8f25484
7401fcc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3f3f8f
ee90460
7401fcc
ee90460
7401fcc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8f25484
7401fcc
 
 
 
 
8f25484
 
 
 
f3f3f8f
 
7401fcc
21c1429
7401fcc
 
 
 
 
 
 
0c1b111
f3f3f8f
7401fcc
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import os
import openai
import gradio as gr

openai.api_key = os.environ['key']

model_name = "ft:gpt-3.5-turbo-0613:metric-space-ug:rechtsberatung2:7zmeC6ps"
prompt0 = "Liegt ein rechtlich relevanter Sachverhalt mit einer passenden Frage vor?"
prompt1 = "Du stellst Fragen, um fehlende Informationen für eine anwaltliche Erstberatung zu klären. Stelle bis zu 10 Fragen für die Klärung der Sachlage und antworte mit „Danke für die Antworten.“, sobald die Sachlage klar ist. Vermeide Fragen zu stellen, die schon benantwortet sind"
prompt2 = "Schreibe den Sachverhalt auf Basis der folgenden Informationen zusammen."
prompt3 = "Schreibe eine anwaltliche Erstberatung auf Basis des geschilderten Sachverhalts. Vermeide Konjuktive, formuliere in gutem Deutsch und kurzen Sätzen."

def respond_prompt0(Selbstauskunft, Kernfrage, chat):
  # preprocess data

  # openai api call prompt 0
  ########
  completion = openai.ChatCompletion.create(
  model=model_name,
  messages=[
    {"role": "system", "content": prompt0},
    {"role": "user", "content": Selbstauskunft + "\n" + Kernfrage}
  ])
  output = completion.choices[0].message.content
  ########

  out = "Kann ich dir mit deinem Anliegen helfen?\n" + output
  if "ja" in output[:4].lower():
    out += "\n Ich werde nun noch ein paar Fragen stellen, um den Sachverhalt genauer zu verstehen" #

    # openai api call prompt 1
    ########
    completion = openai.ChatCompletion.create(
    model=model_name,
    messages=[
      {"role": "system", "content": prompt1},
      {"role": "user", "content": Selbstauskunft + "\n" + Kernfrage}
    ])
    output_prompt1 = completion.choices[0].message.content
    ########

    chat = [(output_prompt1, "")]
    return out, gr.update(value=chat, visible=True), gr.update(value="", visible=True)

  else:
    return out + ". \nLeider kann ich dir nicht weiterhelfen.", chat, ""


def respond_prompt1(Selbstauskunft, Kernfrage, chat, text):
  chat[-1][1] = text
  # openai api call prompt 1
  ########
  messages=[
      {"role": "system", "content": prompt1},
      {"role": "user", "content": Selbstauskunft + "\n" + Kernfrage}
    ]

  for i in range(len(chat)):
    messages.append({ "role": "assistant", "content": chat[i][0]})
    messages.append({ "role": "user", "content": chat[i][1] })

  completion = openai.ChatCompletion.create(
  model=model_name,
  messages=messages)

  output_prompt1 = completion.choices[0].message.content
  ########


  if ("<ENDOFQA>" in output_prompt1) or len(chat) > 10:
    sachverhalt = respond_prompt2(Selbstauskunft, Kernfrage, chat).replace("Bürger", "Mandant")
    chat.append(("Danke für deine Antworten. Hier findest du eine aufarbeitete Zusamenfassung des Sachverhalts. Bitte prüfe dieee und ergänze ggf. noch etwas, bevor ich zu meiner Einschätzung komme.", ""))

    return chat,  gr.update(value="", visible=False),  gr.update(value=sachverhalt, visible=True), gr.update(value="Weiter zur juristischen Einschätzung", visible=True)

  chat.append((output_prompt1, ""))

  return chat, "", "", ""

def respond_prompt2(Selbstauskunft, Kernfrage, chat):
  # openai api call prompt 2
  ########
  content = Selbstauskunft + "\n" + Kernfrage

  for i in range(len(chat)-1):
    content += "\n\n" + chat[i][0] + "\n"
    content +=  chat[i][1]

  completion = openai.ChatCompletion.create(
  model=model_name,
  messages=[
  { "role": "system", "content": prompt2 },
  { "role": "user", "content": content}])

  output_prompt2 = completion.choices[0].message.content
  ########

  return output_prompt2

def respond_prompt3(Selbstauskunft, Kernfrage, chat, Sachverhalt):
  # openai api call prompt 3
  ########
  content = Selbstauskunft + "\n" + Kernfrage

  for i in range(len(chat)-1):
    content += "\n\n" + chat[i][0] + "\n"
    content +=  chat[i][1]

  completion = openai.ChatCompletion.create(
  model=model_name,
  messages=[
  { "role": "system", "content": prompt3 },
  { "role": "user", "content": content +  "\nSachverhalt: " + Sachverhalt}])


  output_prompt3 =completion.choices[0].message.content + "\n\n(Dies ist eine maschinell erstellte Einschätzung einer experimentellen KI-Software basierend auf Informationen im Internet und keine Anwaltliche Erstberatung eines Anwalts. Interpretieren Sie das Ergebnis daher mit Vorsicht.)"
  ########

  return gr.update(value=output_prompt3, visible=True), gr.update(visible=False)

with gr.Blocks() as demo:
    Title = gr.title("Juristische Ersteinschätzung einer KI.")
    desc = gr.description("Disclaimer: Dies ist keine Anwaltliche Erstberatung, sondern ein Forschungsprojekt.")
    Selbstauskunft = gr.Textbox("", label="Erzähl mir, was passiert ist.")
    Kernfrage = gr.Textbox("", label="Stelle eine Frage, die ich dir beantworten soll.")
    Selbstauskunft = gr.Textbox("", label="Erzähl mir, was passiert ist.")
    Kernfrage = gr.Textbox("", label="Stelle eine Frage, die ich dir beantworten soll.")

    button_prompt1 =  gr.Button(value="Weiter")

    label_prompt0 = gr.Label()


    chat = gr.Chatbot(visible=False)
    msg = gr.Textbox(visible=False, label="Antwort")
    Sachverhalt = gr.Textbox(visible=False, label = "Zusammenfassung")
    Erstberatung = gr.Textbox(visible=False, label="Rechtliche Einschätzung")
    button_erstberatung = gr.Button(value="Weiter zur juristischen Einschätzung", visible=False)

    button_prompt1.click(respond_prompt0, [Selbstauskunft, Kernfrage, chat], outputs=[label_prompt0, chat, msg])

    msg.submit(respond_prompt1, [Selbstauskunft, Kernfrage, chat, msg], [chat, msg, Sachverhalt, button_erstberatung])

    button_erstberatung.click(respond_prompt3, [Selbstauskunft, Kernfrage, chat, Sachverhalt], [Erstberatung, button_erstberatung])


demo.launch()