Plumb prompt into extraction

This commit is contained in:
Cyber MacGeddon 2024-08-13 17:23:40 +01:00
parent 428a869a93
commit 1818e3c72b
17 changed files with 331 additions and 107 deletions

View file

@ -56,10 +56,10 @@
- "graph-rag"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
- "--prompt-request-queue"
- "non-persistent://tg/request/prompt-rag"
- "--prompt-response-queue"
- "non-persistent://tg/response/prompt-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"init-pulsar":
@ -132,6 +132,32 @@
"volumes":
- "./prometheus:/etc/prometheus"
- "prometheus-data:/prometheus"
"prompt":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"prompt-rag":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "-i"
- "non-persistent://tg/request/prompt-rag"
- "-o"
- "non-persistent://tg/response/prompt-rag-response"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"pulsar":
"command": "bin/pulsar standalone"
"image": "docker.io/apachepulsar/pulsar:3.3.0"

View file

@ -60,10 +60,10 @@
- "graph-rag"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
- "--prompt-request-queue"
- "non-persistent://tg/request/prompt-rag"
- "--prompt-response-queue"
- "non-persistent://tg/response/prompt-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"init-pulsar":
@ -136,6 +136,32 @@
"volumes":
- "./prometheus:/etc/prometheus"
- "prometheus-data:/prometheus"
"prompt":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"prompt-rag":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "-i"
- "non-persistent://tg/request/prompt-rag"
- "-o"
- "non-persistent://tg/response/prompt-rag-response"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"pulsar":
"command": "bin/pulsar standalone"
"image": "docker.io/apachepulsar/pulsar:3.3.0"

View file

@ -56,10 +56,10 @@
- "graph-rag"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
- "--prompt-request-queue"
- "non-persistent://tg/request/prompt-rag"
- "--prompt-response-queue"
- "non-persistent://tg/response/prompt-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"init-pulsar":
@ -132,6 +132,32 @@
"volumes":
- "./prometheus:/etc/prometheus"
- "prometheus-data:/prometheus"
"prompt":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"prompt-rag":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "-i"
- "non-persistent://tg/request/prompt-rag"
- "-o"
- "non-persistent://tg/response/prompt-rag-response"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"pulsar":
"command": "bin/pulsar standalone"
"image": "docker.io/apachepulsar/pulsar:3.3.0"

View file

@ -60,10 +60,10 @@
- "graph-rag"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
- "--prompt-request-queue"
- "non-persistent://tg/request/prompt-rag"
- "--prompt-response-queue"
- "non-persistent://tg/response/prompt-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"init-pulsar":
@ -136,6 +136,32 @@
"volumes":
- "./prometheus:/etc/prometheus"
- "prometheus-data:/prometheus"
"prompt":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"prompt-rag":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "-i"
- "non-persistent://tg/request/prompt-rag"
- "-o"
- "non-persistent://tg/response/prompt-rag-response"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"pulsar":
"command": "bin/pulsar standalone"
"image": "docker.io/apachepulsar/pulsar:3.3.0"

View file

@ -60,10 +60,10 @@
- "graph-rag"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
- "--prompt-request-queue"
- "non-persistent://tg/request/prompt-rag"
- "--prompt-response-queue"
- "non-persistent://tg/response/prompt-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"init-pulsar":
@ -136,6 +136,32 @@
"volumes":
- "./prometheus:/etc/prometheus"
- "prometheus-data:/prometheus"
"prompt":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"prompt-rag":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "-i"
- "non-persistent://tg/request/prompt-rag"
- "-o"
- "non-persistent://tg/response/prompt-rag-response"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"pulsar":
"command": "bin/pulsar standalone"
"image": "docker.io/apachepulsar/pulsar:3.3.0"

View file

@ -56,10 +56,10 @@
- "graph-rag"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
- "--prompt-request-queue"
- "non-persistent://tg/request/prompt-rag"
- "--prompt-response-queue"
- "non-persistent://tg/response/prompt-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"init-pulsar":
@ -132,6 +132,32 @@
"volumes":
- "./prometheus:/etc/prometheus"
- "prometheus-data:/prometheus"
"prompt":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"prompt-rag":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "-i"
- "non-persistent://tg/request/prompt-rag"
- "-o"
- "non-persistent://tg/response/prompt-rag-response"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"pulsar":
"command": "bin/pulsar standalone"
"image": "docker.io/apachepulsar/pulsar:3.3.0"

View file

@ -56,10 +56,10 @@
- "graph-rag"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
- "--prompt-request-queue"
- "non-persistent://tg/request/prompt-rag"
- "--prompt-response-queue"
- "non-persistent://tg/response/prompt-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"init-pulsar":
@ -132,6 +132,32 @@
"volumes":
- "./prometheus:/etc/prometheus"
- "prometheus-data:/prometheus"
"prompt":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"prompt-rag":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "-i"
- "non-persistent://tg/request/prompt-rag"
- "-o"
- "non-persistent://tg/response/prompt-rag-response"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"pulsar":
"command": "bin/pulsar standalone"
"image": "docker.io/apachepulsar/pulsar:3.3.0"

View file

@ -56,10 +56,10 @@
- "graph-rag"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
- "--prompt-request-queue"
- "non-persistent://tg/request/prompt-rag"
- "--prompt-response-queue"
- "non-persistent://tg/response/prompt-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"init-pulsar":
@ -132,6 +132,32 @@
"volumes":
- "./prometheus:/etc/prometheus"
- "prometheus-data:/prometheus"
"prompt":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"prompt-rag":
"command":
- "prompt-generic"
- "-p"
- "pulsar://pulsar:6650"
- "-i"
- "non-persistent://tg/request/prompt-rag"
- "-o"
- "non-persistent://tg/response/prompt-rag-response"
- "--text-completion-request-queue"
- "non-persistent://tg/request/text-completion-rag"
- "--text-completion-response-queue"
- "non-persistent://tg/response/text-completion-rag-response"
"image": "docker.io/trustgraph/trustgraph-flow:0.6.0"
"restart": "on-failure:100"
"pulsar":
"command": "bin/pulsar standalone"
"image": "docker.io/apachepulsar/pulsar:3.3.0"

View file

@ -1,6 +1,6 @@
#!/usr/bin/env python3
from trustgraph.model.language.prompt.generic import run
from trustgraph.model.prompt.generic import run
run()

View file

@ -116,6 +116,36 @@ local cassandra_hosts = "cassandra";
"graph-rag",
"-p",
url.pulsar,
"--prompt-request-queue",
"non-persistent://tg/request/prompt-rag",
"--prompt-response-queue",
"non-persistent://tg/response/prompt-rag-response",
],
},
"prompt": base + {
image: images.trustgraph,
command: [
"prompt-generic",
"-p",
url.pulsar,
"--text-completion-request-queue",
"non-persistent://tg/request/text-completion",
"--text-completion-response-queue",
"non-persistent://tg/response/text-completion-response",
],
},
"prompt-rag": base + {
image: images.trustgraph,
command: [
"prompt-generic",
"-p",
url.pulsar,
"-i",
"non-persistent://tg/request/prompt-rag",
"-o",
"non-persistent://tg/response/prompt-rag-response",
"--text-completion-request-queue",
"non-persistent://tg/request/text-completion-rag",
"--text-completion-response-queue",
@ -126,3 +156,4 @@ local cassandra_hosts = "cassandra";
},
}

View file

@ -9,11 +9,10 @@ import json
from ... schema import ChunkEmbeddings, Triple, Source, Value
from ... schema import chunk_embeddings_ingest_queue, triples_store_queue
from ... schema import text_completion_request_queue
from ... schema import text_completion_response_queue
from ... schema import prompt_request_queue
from ... schema import prompt_response_queue
from ... log_level import LogLevel
from ... llm_client import LlmClient
from ... prompts import to_definitions
from ... prompt_client import PromptClient
from ... rdf import TRUSTGRAPH_ENTITIES, DEFINITION
from ... base import ConsumerProducer
@ -32,11 +31,11 @@ class Processor(ConsumerProducer):
input_queue = params.get("input_queue", default_input_queue)
output_queue = params.get("output_queue", default_output_queue)
subscriber = params.get("subscriber", default_subscriber)
tc_request_queue = params.get(
"text_completion_request_queue", text_completion_request_queue
pr_request_queue = params.get(
"prompt_request_queue", prompt_request_queue
)
tc_response_queue = params.get(
"text_completion_response_queue", text_completion_response_queue
pr_response_queue = params.get(
"prompt_response_queue", prompt_response_queue
)
super(Processor, self).__init__(
@ -46,16 +45,16 @@ class Processor(ConsumerProducer):
"subscriber": subscriber,
"input_schema": ChunkEmbeddings,
"output_schema": Triple,
"text_completion_request_queue": tc_request_queue,
"text_completion_response_queue": tc_response_queue,
"prompt_request_queue": pr_request_queue,
"prompt_response_queue": pr_response_queue,
}
)
self.llm = LlmClient(
self.prompt = PromptClient(
pulsar_host=self.pulsar_host,
input_queue=tc_request_queue,
output_queue=tc_response_queue,
subscriber = module + "-llm",
input_queue=pr_request_queue,
output_queue=pr_response_queue,
subscriber = module + "-prompt",
)
def to_uri(self, text):
@ -68,12 +67,7 @@ class Processor(ConsumerProducer):
def get_definitions(self, chunk):
prompt = to_definitions(chunk)
resp = self.llm.request(prompt)
defs = json.loads(resp)
return defs
return self.prompt.request_definitions(chunk)
def emit_edge(self, s, p, o):
@ -90,14 +84,13 @@ class Processor(ConsumerProducer):
try:
defs = self.get_definitions(chunk)
print(json.dumps(defs, indent=4), flush=True)
for defn in defs:
s = defn["entity"]
s = defn.name
s_uri = self.to_uri(s)
o = defn["definition"]
o = defn.definition
if s == "": continue
if o == "": continue
@ -121,15 +114,15 @@ class Processor(ConsumerProducer):
)
parser.add_argument(
'--text-completion-request-queue',
default=text_completion_request_queue,
help=f'Text completion request queue (default: {text_completion_request_queue})',
'--prompt-request-queue',
default=prompt_request_queue,
help=f'Prompt request queue (default: {prompt_request_queue})',
)
parser.add_argument(
'--text-completion-response-queue',
default=text_completion_response_queue,
help=f'Text completion response queue (default: {text_completion_response_queue})',
'--prompt-completion-response-queue',
default=prompt_response_queue,
help=f'Prompt response queue (default: {prompt_response_queue})',
)
def run():

View file

@ -6,18 +6,16 @@ graph edges.
"""
import urllib.parse
import json
import os
from pulsar.schema import JsonSchema
from ... schema import ChunkEmbeddings, Triple, GraphEmbeddings, Source, Value
from ... schema import chunk_embeddings_ingest_queue, triples_store_queue
from ... schema import graph_embeddings_store_queue
from ... schema import text_completion_request_queue
from ... schema import text_completion_response_queue
from ... schema import prompt_request_queue
from ... schema import prompt_response_queue
from ... log_level import LogLevel
from ... llm_client import LlmClient
from ... prompts import to_relationships
from ... prompt_client import PromptClient
from ... rdf import RDF_LABEL, TRUSTGRAPH_ENTITIES
from ... base import ConsumerProducer
@ -38,11 +36,11 @@ class Processor(ConsumerProducer):
output_queue = params.get("output_queue", default_output_queue)
vector_queue = params.get("vector_queue", default_vector_queue)
subscriber = params.get("subscriber", default_subscriber)
tc_request_queue = params.get(
"text_completion_request_queue", text_completion_request_queue
pr_request_queue = params.get(
"prompt_request_queue", prompt_request_queue
)
tc_response_queue = params.get(
"text_completion_response_queue", text_completion_response_queue
pr_response_queue = params.get(
"prompt_response_queue", prompt_response_queue
)
super(Processor, self).__init__(
@ -52,8 +50,8 @@ class Processor(ConsumerProducer):
"subscriber": subscriber,
"input_schema": ChunkEmbeddings,
"output_schema": Triple,
"text_completion_request_queue": tc_request_queue,
"text_completion_response_queue": tc_response_queue,
"prompt_request_queue": pr_request_queue,
"prompt_response_queue": pr_response_queue,
}
)
@ -66,19 +64,19 @@ class Processor(ConsumerProducer):
"input_queue": input_queue,
"output_queue": output_queue,
"vector_queue": vector_queue,
"text_completion_request_queue": tc_request_queue,
"text_completion_response_queue": tc_response_queue,
"prompt_request_queue": pr_request_queue,
"prompt_response_queue": pr_response_queue,
"subscriber": subscriber,
"input_schema": ChunkEmbeddings.__name__,
"output_schema": Triple.__name__,
"vector_schema": GraphEmbeddings.__name__,
})
self.llm = LlmClient(
pulsar_host = self.pulsar_host,
input_queue=tc_request_queue,
output_queue=tc_response_queue,
subscriber = module + "-llm",
self.prompt = PromptClient(
pulsar_host=self.pulsar_host,
input_queue=pr_request_queue,
output_queue=pr_response_queue,
subscriber = module + "-prompt",
)
def to_uri(self, text):
@ -91,12 +89,7 @@ class Processor(ConsumerProducer):
def get_relationships(self, chunk):
prompt = to_relationships(chunk)
resp = self.llm.request(prompt)
rels = json.loads(resp)
return rels
return self.prompt.request_relationships(chunk)
def emit_edge(self, s, p, o):
@ -118,13 +111,12 @@ class Processor(ConsumerProducer):
try:
rels = self.get_relationships(chunk)
print(json.dumps(rels, indent=4), flush=True)
for rel in rels:
s = rel["subject"]
p = rel["predicate"]
o = rel["object"]
s = rel.s
p = rel.p
o = rel.o
if s == "": continue
if p == "": continue
@ -136,7 +128,7 @@ class Processor(ConsumerProducer):
p_uri = self.to_uri(p)
p_value = Value(value=str(p_uri), is_uri=True)
if rel["object-entity"]:
if rel.o_entity:
o_uri = self.to_uri(o)
o_value = Value(value=str(o_uri), is_uri=True)
else:
@ -162,7 +154,7 @@ class Processor(ConsumerProducer):
Value(value=str(p), is_uri=False)
)
if rel["object-entity"]:
if rel.o_entity:
# Label for o
self.emit_edge(
o_value,
@ -172,7 +164,7 @@ class Processor(ConsumerProducer):
self.emit_vec(s_value, v.vectors)
self.emit_vec(p_value, v.vectors)
if rel["object-entity"]:
if rel.o_entity:
self.emit_vec(o_value, v.vectors)
except Exception as e:
@ -195,15 +187,15 @@ class Processor(ConsumerProducer):
)
parser.add_argument(
'--text-completion-request-queue',
default=text_completion_request_queue,
help=f'Text completion request queue (default: {text_completion_request_queue})',
'--prompt-request-queue',
default=prompt_request_queue,
help=f'Prompt request queue (default: {prompt_request_queue})',
)
parser.add_argument(
'--text-completion-response-queue',
default=text_completion_response_queue,
help=f'Text completion response queue (default: {text_completion_response_queue})',
'--prompt-response-queue',
default=prompt_response_queue,
help=f'Prompt response queue (default: {prompt_response_queue})',
)
def run():

View file

@ -5,14 +5,14 @@ Language service abstracts prompt engineering from LLM.
import json
from ..... schema import Definition, Relationship, Triple
from ..... schema import PromptRequest, PromptResponse
from ..... schema import TextCompletionRequest, TextCompletionResponse
from ..... schema import text_completion_request_queue
from ..... schema import text_completion_response_queue
from ..... schema import prompt_request_queue, prompt_response_queue
from ..... base import ConsumerProducer
from ..... llm_client import LlmClient
from .... schema import Definition, Relationship, Triple
from .... schema import PromptRequest, PromptResponse
from .... schema import TextCompletionRequest, TextCompletionResponse
from .... schema import text_completion_request_queue
from .... schema import text_completion_response_queue
from .... schema import prompt_request_queue, prompt_response_queue
from .... base import ConsumerProducer
from .... llm_client import LlmClient
from . prompts import to_definitions, to_relationships, to_kg_query