tfm-demo1 / app.py
daniel-dona's picture
Add debug
0787b7f
import os
import json
import ollama
import gradio
OLLAMA_HOST = os.getenv('OLLAMA_HOST', "192.168.10.100:11434")
json_code = "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/ContactLineSystem\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/contactLineSystemType\",\n \"http://data.europa.eu/949/energySupplySystemTSICompliant\",\n \"http://data.europa.eu/949/conditionsAppliedRegenerativeBraking\",\n \"http://data.europa.eu/949/conditionalRegenerativeBrake\"\n ]\n}\n```"
client_gpu_local = ollama.Client(host=f"http://{OLLAMA_HOST}", timeout=15)
model = "test_class_prop"
model_options = {
#"top_k": 40,
#"top_p": 0.95,
"temperature": 0.5,
"repeat_penalty": 1.1,
#"num_ctx": 8*1024,
#"num_ctx": 128*1024,
"keep_alive": 60*60
}
def clean_output():
return None
def submit_query(msg):
if msg != "":
try:
prompt = f"Identify the classes and properties used in this natural language query: \"{msg}\""
messages = [{'role': 'user', 'content': prompt}]
response = client_gpu_local.chat(
model,
messages=messages,
options=model_options
)
msg = response.message.content
debug = {
k:v for k,v in response.dict().items()
}
debug["eval_t/s"] = debug["eval_count"]/(debug["eval_duration"]/1_000_000_000)
debug["prompt_eval_t/s"] = debug["prompt_eval_count"]/(debug["prompt_eval_duration"]/1_000_000_000)
print(response)
try:
json_data_test = json.loads(msg.split("```json")[1].split("```")[0])
return [json.dumps(json_data_test, indent=2), json.dumps(debug, indent=2)]
except:
return [json.dumps({}, indent=2), json.dumps({"error": "Unable to process result."}, indent=2)]
except:
raise gradio.Error("Error: LLM request timed out!", duration=5)
return [json.dumps({}, indent=2),json.dumps({"error": "No query"}, indent=2)]
test_dataset = [
{
"instruction": "Identify the classes and properties used in this natural language query: Fornisci il tipo di sistema di linea di contatto, la conformit\u00e0 TSI del sistema di fornitura energetica, l'umax2, le condizioni applicate al frenaggio regenerativo e la corrente massima del treno per i sistemi di linea di contatto. Limita a 1000 risultati.",
"input": "",
"output": "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/ContactLineSystem\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/contactLineSystemType\",\n \"http://data.europa.eu/949/energySupplySystemTSICompliant\",\n \"http://data.europa.eu/949/umax2\",\n \"http://data.europa.eu/949/conditionsAppliedRegenerativeBraking\",\n \"http://data.europa.eu/949/maxTrainCurrent\"\n ]\n}\n```"
},
{
"instruction": "Identify the classes and properties used in this natural language query: Show me all unique combinations of the maximum magnetic field's directional components along the three axes (X, Y, Z) but only if the X component exceeds -63, and limit this to a total of 20 records.",
"input": "",
"output": "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/MaximumMagneticField\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/maximumMagneticFieldDirectionZ\",\n \"http://data.europa.eu/949/maximumMagneticFieldDirectionY\",\n \"http://data.europa.eu/949/maximumMagneticFieldDirectionX\"\n ]\n}\n```"
},
{
"instruction": "Identify the classes and properties used in this natural language query: Je souhaite obtenir les coordonn\u00e9es intrins\u00e8ques de d\u00e9but (startIntrinsicCoordinate) et \u00e9ventuellement de fin (endIntrinsicCoordinate) pour chaque \u00e9l\u00e9ment r\u00e9seau (NetElement), en ne consid\u00e9rant que les 100 premiers r\u00e9sultats.",
"input": "",
"output": "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/NetElement\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/endIntrinsicCoordinate\",\n \"http://data.europa.eu/949/startIntrinsicCoordinate\"\n ]\n}\n```"
},
{
"instruction": "Identify the classes and properties used in this natural language query: Liefere mir bitte die Daten f\u00fcr assistanceStartingTrain (falls vorhanden), Curvature, Id, H\u00f6he und L\u00e4nge der PlatformEdge, wobei die L\u00e4nge nicht gleich -995.7379397044926 sein darf.",
"input": "",
"output": "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/PlatformEdge\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/assistanceStartingTrain\",\n \"http://data.europa.eu/949/hasPlatformCurvature\",\n \"http://data.europa.eu/949/platformId\",\n \"http://data.europa.eu/949/platformHeight\",\n \"http://data.europa.eu/949/lengthOfPlatform\"\n ]\n}\n```"
},
{
"instruction": "Identify the classes and properties used in this natural language query: Mostra le informazioni distinte su SystemSeparationInfo, inclusi i valori per systemSeparationInfoLength, systemSeparationInfoChangeSupplySystem, systemSeparationInfoKm, systemSeparationInfoSwitchOffBreaker e systemSeparationInfoPantographLowered.",
"input": "",
"output": "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/SystemSeparationInfo\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/systemSeparationInfoLength\",\n \"http://data.europa.eu/949/systemSeparationInfoChangeSupplySystem\",\n \"http://data.europa.eu/949/systemSeparationInfoKm\",\n \"http://data.europa.eu/949/systemSeparationInfoSwitchOffBreaker\",\n \"http://data.europa.eu/949/systemSeparationInfoPantographLowered\"\n ]\n}\n```"
},
{
"instruction": "Identify the classes and properties used in this natural language query: Elencare tutte le lunghezze univoche di tunnel che hanno una coordinata di partenza di -184.98148684158423.",
"input": "",
"output": "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/Tunnel\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/lengthOfTunnel\",\n \"http://data.europa.eu/949/startLocation\"\n ]\n}\n```"
},
{
"instruction": "Identify the classes and properties used in this natural language query: Mostra i valori di phaseInfoPantographLowered, phaseInfoLength e phaseInfoKm per tutte le istanze di PhaseInfo dove phaseInfoKm \u00e8 false.",
"input": "",
"output": "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/PhaseInfo\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/phaseInfoPantographLowered\",\n \"http://data.europa.eu/949/phaseInfoLength\",\n \"http://data.europa.eu/949/phaseInfoKm\"\n ]\n}\n```"
},
{
"instruction": "Identify the classes and properties used in this natural language query: Donnez-moi les informations sur la nature, le d\u00e9but et la fin des op\u00e9rations ainsi que la longueur pour chaque section de ligne, en limitant les r\u00e9sultats \u00e0 100.",
"input": "",
"output": "```json\n{\n \"classes\": [\n \"http://data.europa.eu/949/SectionOfLine\"\n ],\n \"properties\": [\n \"http://data.europa.eu/949/solNature\",\n \"http://data.europa.eu/949/opStart\",\n \"http://data.europa.eu/949/lengthOfSectionOfLine\",\n \"http://data.europa.eu/949/opEnd\"\n ]\n}\n```"
},
]
examples_data = [[e["instruction"].split(": ")[1], e["output"].split("```json")[1].split("```")[0]] for e in test_dataset]
with gradio.Blocks() as demo:
query = gradio.Textbox(render=False, label="Query", placeholder="Write a query and press Enter.", submit_btn="Send query")
code_llm = gradio.Code(render=False, label="LLM output", interactive=False, language="json")
metadata_llm = gradio.Code(render=False, label="LLM request metadata", interactive=False, language="json")
code_ref = gradio.Code(render=False, label="Expected output", interactive=False, language="json")
#chat = gradio.Chatbot(render=False, value=history, label="LLM output", type="messages")
with gradio.Row():
query.render()
with gradio.Row():
with gradio.Accordion(label="Examples", open=False):
gradio.Examples(label="Query examples", examples=examples_data, example_labels=[e[0] for e in examples_data], cache_examples=False, inputs=[query, code_ref],examples_per_page=10)
code_ref.render()
#with gradio.Row():
#chat.render()
with gradio.Row():
code_llm.render()
with gradio.Row():
metadata_llm.render()
query.submit(submit_query, inputs=[query], outputs=[code_llm, metadata_llm])
#query.change(submit_query, inputs=[query], outputs=[code_llm])
query.change(clean_output, inputs=[], outputs=[code_llm]).then(submit_query, inputs=[query], outputs=[code_llm, metadata_llm])
demo.launch()