trustgraph-base 1.0.16__tar.gz → 1.0.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/PKG-INFO +2 -2
- trustgraph-base-1.0.18/trustgraph/base_version.py +1 -0
- trustgraph-base-1.0.18/trustgraph/messaging/__init__.py +105 -0
- trustgraph-base-1.0.18/trustgraph/messaging/registry.py +51 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/__init__.py +19 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/agent.py +44 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/base.py +43 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/config.py +100 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/document_loading.py +191 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/embeddings.py +33 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/embeddings_query.py +94 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/flow.py +59 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/knowledge.py +183 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/library.py +124 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/metadata.py +81 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/primitives.py +47 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/prompt.py +54 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/retrieval.py +81 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/text_completion.py +42 -0
- trustgraph-base-1.0.18/trustgraph/messaging/translators/triples.py +60 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph_base.egg-info/PKG-INFO +2 -2
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph_base.egg-info/SOURCES.txt +18 -0
- trustgraph-base-1.0.16/trustgraph/base_version.py +0 -1
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/README.md +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/setup.cfg +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/setup.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/api/__init__.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/api/api.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/api/config.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/api/exceptions.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/api/flow.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/api/knowledge.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/api/library.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/api/types.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/__init__.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/agent_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/agent_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/async_processor.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/consumer.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/consumer_spec.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/document_embeddings_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/document_embeddings_query_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/document_embeddings_store_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/embeddings_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/embeddings_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/flow.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/flow_processor.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/graph_embeddings_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/graph_embeddings_query_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/graph_embeddings_store_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/graph_rag_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/llm_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/metrics.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/producer.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/producer_spec.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/prompt_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/publisher.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/pubsub.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/request_response_spec.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/setting_spec.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/spec.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/subscriber.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/subscriber_spec.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/text_completion_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/triples_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/triples_query_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/base/triples_store_service.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/__init__.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/agent_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/base.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/config_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/document_embeddings_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/document_rag_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/embeddings_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/graph_embeddings_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/graph_rag_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/llm_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/prompt_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/clients/triples_query_client.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/exceptions.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/knowledge/__init__.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/knowledge/defs.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/knowledge/document.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/knowledge/identifier.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/knowledge/organization.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/knowledge/publication.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/log_level.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/objects/__init__.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/objects/field.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/objects/object.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/rdf.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/__init__.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/agent.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/config.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/documents.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/flows.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/graph.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/knowledge.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/library.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/lookup.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/metadata.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/models.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/object.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/prompt.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/retrieval.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/topic.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph/schema/types.py +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph_base.egg-info/dependency_links.txt +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph_base.egg-info/requires.txt +0 -0
- {trustgraph-base-1.0.16 → trustgraph-base-1.0.18}/trustgraph_base.egg-info/top_level.txt +0 -0
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: trustgraph-base
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.18
|
4
4
|
Summary: TrustGraph provides a means to run a pipeline of flexible AI processing components in a flexible means to achieve a processing pipeline.
|
5
5
|
Home-page: https://github.com/trustgraph-ai/trustgraph
|
6
|
-
Download-URL: https://github.com/trustgraph-ai/trustgraph/archive/refs/tags/v1.0.
|
6
|
+
Download-URL: https://github.com/trustgraph-ai/trustgraph/archive/refs/tags/v1.0.18.tar.gz
|
7
7
|
Author: trustgraph.ai
|
8
8
|
Author-email: security@trustgraph.ai
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "1.0.18"
|
@@ -0,0 +1,105 @@
|
|
1
|
+
from .registry import TranslatorRegistry
|
2
|
+
from .translators import *
|
3
|
+
|
4
|
+
# Auto-register all translators
|
5
|
+
from .translators.agent import AgentRequestTranslator, AgentResponseTranslator
|
6
|
+
from .translators.embeddings import EmbeddingsRequestTranslator, EmbeddingsResponseTranslator
|
7
|
+
from .translators.text_completion import TextCompletionRequestTranslator, TextCompletionResponseTranslator
|
8
|
+
from .translators.retrieval import (
|
9
|
+
DocumentRagRequestTranslator, DocumentRagResponseTranslator,
|
10
|
+
GraphRagRequestTranslator, GraphRagResponseTranslator
|
11
|
+
)
|
12
|
+
from .translators.triples import TriplesQueryRequestTranslator, TriplesQueryResponseTranslator
|
13
|
+
from .translators.knowledge import KnowledgeRequestTranslator, KnowledgeResponseTranslator
|
14
|
+
from .translators.library import LibraryRequestTranslator, LibraryResponseTranslator
|
15
|
+
from .translators.document_loading import DocumentTranslator, TextDocumentTranslator
|
16
|
+
from .translators.config import ConfigRequestTranslator, ConfigResponseTranslator
|
17
|
+
from .translators.flow import FlowRequestTranslator, FlowResponseTranslator
|
18
|
+
from .translators.prompt import PromptRequestTranslator, PromptResponseTranslator
|
19
|
+
from .translators.embeddings_query import (
|
20
|
+
DocumentEmbeddingsRequestTranslator, DocumentEmbeddingsResponseTranslator,
|
21
|
+
GraphEmbeddingsRequestTranslator, GraphEmbeddingsResponseTranslator
|
22
|
+
)
|
23
|
+
|
24
|
+
# Register all service translators
|
25
|
+
TranslatorRegistry.register_service(
|
26
|
+
"agent",
|
27
|
+
AgentRequestTranslator(),
|
28
|
+
AgentResponseTranslator()
|
29
|
+
)
|
30
|
+
|
31
|
+
TranslatorRegistry.register_service(
|
32
|
+
"embeddings",
|
33
|
+
EmbeddingsRequestTranslator(),
|
34
|
+
EmbeddingsResponseTranslator()
|
35
|
+
)
|
36
|
+
|
37
|
+
TranslatorRegistry.register_service(
|
38
|
+
"text-completion",
|
39
|
+
TextCompletionRequestTranslator(),
|
40
|
+
TextCompletionResponseTranslator()
|
41
|
+
)
|
42
|
+
|
43
|
+
TranslatorRegistry.register_service(
|
44
|
+
"document-rag",
|
45
|
+
DocumentRagRequestTranslator(),
|
46
|
+
DocumentRagResponseTranslator()
|
47
|
+
)
|
48
|
+
|
49
|
+
TranslatorRegistry.register_service(
|
50
|
+
"graph-rag",
|
51
|
+
GraphRagRequestTranslator(),
|
52
|
+
GraphRagResponseTranslator()
|
53
|
+
)
|
54
|
+
|
55
|
+
TranslatorRegistry.register_service(
|
56
|
+
"triples-query",
|
57
|
+
TriplesQueryRequestTranslator(),
|
58
|
+
TriplesQueryResponseTranslator()
|
59
|
+
)
|
60
|
+
|
61
|
+
TranslatorRegistry.register_service(
|
62
|
+
"knowledge",
|
63
|
+
KnowledgeRequestTranslator(),
|
64
|
+
KnowledgeResponseTranslator()
|
65
|
+
)
|
66
|
+
|
67
|
+
TranslatorRegistry.register_service(
|
68
|
+
"librarian",
|
69
|
+
LibraryRequestTranslator(),
|
70
|
+
LibraryResponseTranslator()
|
71
|
+
)
|
72
|
+
|
73
|
+
TranslatorRegistry.register_service(
|
74
|
+
"config",
|
75
|
+
ConfigRequestTranslator(),
|
76
|
+
ConfigResponseTranslator()
|
77
|
+
)
|
78
|
+
|
79
|
+
TranslatorRegistry.register_service(
|
80
|
+
"flow",
|
81
|
+
FlowRequestTranslator(),
|
82
|
+
FlowResponseTranslator()
|
83
|
+
)
|
84
|
+
|
85
|
+
TranslatorRegistry.register_service(
|
86
|
+
"prompt",
|
87
|
+
PromptRequestTranslator(),
|
88
|
+
PromptResponseTranslator()
|
89
|
+
)
|
90
|
+
|
91
|
+
TranslatorRegistry.register_service(
|
92
|
+
"document-embeddings-query",
|
93
|
+
DocumentEmbeddingsRequestTranslator(),
|
94
|
+
DocumentEmbeddingsResponseTranslator()
|
95
|
+
)
|
96
|
+
|
97
|
+
TranslatorRegistry.register_service(
|
98
|
+
"graph-embeddings-query",
|
99
|
+
GraphEmbeddingsRequestTranslator(),
|
100
|
+
GraphEmbeddingsResponseTranslator()
|
101
|
+
)
|
102
|
+
|
103
|
+
# Register single-direction translators for document loading
|
104
|
+
TranslatorRegistry.register_request("document", DocumentTranslator())
|
105
|
+
TranslatorRegistry.register_request("text-document", TextDocumentTranslator())
|
@@ -0,0 +1,51 @@
|
|
1
|
+
from typing import Dict, List, Union
|
2
|
+
from .translators.base import MessageTranslator
|
3
|
+
|
4
|
+
|
5
|
+
class TranslatorRegistry:
|
6
|
+
"""Registry for service translators"""
|
7
|
+
|
8
|
+
_request_translators: Dict[str, MessageTranslator] = {}
|
9
|
+
_response_translators: Dict[str, MessageTranslator] = {}
|
10
|
+
|
11
|
+
@classmethod
|
12
|
+
def register_request(cls, service_name: str, translator: MessageTranslator):
|
13
|
+
"""Register a request translator for a service"""
|
14
|
+
cls._request_translators[service_name] = translator
|
15
|
+
|
16
|
+
@classmethod
|
17
|
+
def register_response(cls, service_name: str, translator: MessageTranslator):
|
18
|
+
"""Register a response translator for a service"""
|
19
|
+
cls._response_translators[service_name] = translator
|
20
|
+
|
21
|
+
@classmethod
|
22
|
+
def register_service(cls, service_name: str, request_translator: MessageTranslator,
|
23
|
+
response_translator: MessageTranslator):
|
24
|
+
"""Register both request and response translators for a service"""
|
25
|
+
cls.register_request(service_name, request_translator)
|
26
|
+
cls.register_response(service_name, response_translator)
|
27
|
+
|
28
|
+
@classmethod
|
29
|
+
def get_request_translator(cls, service_name: str) -> MessageTranslator:
|
30
|
+
"""Get request translator for a service"""
|
31
|
+
if service_name not in cls._request_translators:
|
32
|
+
raise KeyError(f"No request translator registered for service: {service_name}")
|
33
|
+
return cls._request_translators[service_name]
|
34
|
+
|
35
|
+
@classmethod
|
36
|
+
def get_response_translator(cls, service_name: str) -> MessageTranslator:
|
37
|
+
"""Get response translator for a service"""
|
38
|
+
if service_name not in cls._response_translators:
|
39
|
+
raise KeyError(f"No response translator registered for service: {service_name}")
|
40
|
+
return cls._response_translators[service_name]
|
41
|
+
|
42
|
+
@classmethod
|
43
|
+
def list_services(cls) -> List[str]:
|
44
|
+
"""List all registered services"""
|
45
|
+
return sorted(set(cls._request_translators.keys()) | set(cls._response_translators.keys()))
|
46
|
+
|
47
|
+
@classmethod
|
48
|
+
def has_service(cls, service_name: str) -> bool:
|
49
|
+
"""Check if a service is registered"""
|
50
|
+
return (service_name in cls._request_translators or
|
51
|
+
service_name in cls._response_translators)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
from .base import Translator, MessageTranslator
|
2
|
+
from .primitives import ValueTranslator, TripleTranslator, SubgraphTranslator
|
3
|
+
from .metadata import DocumentMetadataTranslator, ProcessingMetadataTranslator
|
4
|
+
from .agent import AgentRequestTranslator, AgentResponseTranslator
|
5
|
+
from .embeddings import EmbeddingsRequestTranslator, EmbeddingsResponseTranslator
|
6
|
+
from .text_completion import TextCompletionRequestTranslator, TextCompletionResponseTranslator
|
7
|
+
from .retrieval import DocumentRagRequestTranslator, DocumentRagResponseTranslator
|
8
|
+
from .retrieval import GraphRagRequestTranslator, GraphRagResponseTranslator
|
9
|
+
from .triples import TriplesQueryRequestTranslator, TriplesQueryResponseTranslator
|
10
|
+
from .knowledge import KnowledgeRequestTranslator, KnowledgeResponseTranslator
|
11
|
+
from .library import LibraryRequestTranslator, LibraryResponseTranslator
|
12
|
+
from .document_loading import DocumentTranslator, TextDocumentTranslator, ChunkTranslator, DocumentEmbeddingsTranslator
|
13
|
+
from .config import ConfigRequestTranslator, ConfigResponseTranslator
|
14
|
+
from .flow import FlowRequestTranslator, FlowResponseTranslator
|
15
|
+
from .prompt import PromptRequestTranslator, PromptResponseTranslator
|
16
|
+
from .embeddings_query import (
|
17
|
+
DocumentEmbeddingsRequestTranslator, DocumentEmbeddingsResponseTranslator,
|
18
|
+
GraphEmbeddingsRequestTranslator, GraphEmbeddingsResponseTranslator
|
19
|
+
)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
from typing import Dict, Any, Tuple
|
2
|
+
from ...schema import AgentRequest, AgentResponse
|
3
|
+
from .base import MessageTranslator
|
4
|
+
|
5
|
+
|
6
|
+
class AgentRequestTranslator(MessageTranslator):
|
7
|
+
"""Translator for AgentRequest schema objects"""
|
8
|
+
|
9
|
+
def to_pulsar(self, data: Dict[str, Any]) -> AgentRequest:
|
10
|
+
return AgentRequest(
|
11
|
+
question=data["question"],
|
12
|
+
plan=data.get("plan", ""),
|
13
|
+
state=data.get("state", ""),
|
14
|
+
history=data.get("history", [])
|
15
|
+
)
|
16
|
+
|
17
|
+
def from_pulsar(self, obj: AgentRequest) -> Dict[str, Any]:
|
18
|
+
return {
|
19
|
+
"question": obj.question,
|
20
|
+
"plan": obj.plan,
|
21
|
+
"state": obj.state,
|
22
|
+
"history": obj.history
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
class AgentResponseTranslator(MessageTranslator):
|
27
|
+
"""Translator for AgentResponse schema objects"""
|
28
|
+
|
29
|
+
def to_pulsar(self, data: Dict[str, Any]) -> AgentResponse:
|
30
|
+
raise NotImplementedError("Response translation to Pulsar not typically needed")
|
31
|
+
|
32
|
+
def from_pulsar(self, obj: AgentResponse) -> Dict[str, Any]:
|
33
|
+
result = {}
|
34
|
+
if obj.answer:
|
35
|
+
result["answer"] = obj.answer
|
36
|
+
if obj.thought:
|
37
|
+
result["thought"] = obj.thought
|
38
|
+
if obj.observation:
|
39
|
+
result["observation"] = obj.observation
|
40
|
+
return result
|
41
|
+
|
42
|
+
def from_response_with_completion(self, obj: AgentResponse) -> Tuple[Dict[str, Any], bool]:
|
43
|
+
"""Returns (response_dict, is_final)"""
|
44
|
+
return self.from_pulsar(obj), (obj.answer is not None)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
from abc import ABC, abstractmethod
|
2
|
+
from typing import Dict, Any, Tuple
|
3
|
+
from pulsar.schema import Record
|
4
|
+
|
5
|
+
|
6
|
+
class Translator(ABC):
|
7
|
+
"""Base class for bidirectional Pulsar ↔ dict translation"""
|
8
|
+
|
9
|
+
@abstractmethod
|
10
|
+
def to_pulsar(self, data: Dict[str, Any]) -> Record:
|
11
|
+
"""Convert dict to Pulsar schema object"""
|
12
|
+
pass
|
13
|
+
|
14
|
+
@abstractmethod
|
15
|
+
def from_pulsar(self, obj: Record) -> Dict[str, Any]:
|
16
|
+
"""Convert Pulsar schema object to dict"""
|
17
|
+
pass
|
18
|
+
|
19
|
+
|
20
|
+
class MessageTranslator(Translator):
|
21
|
+
"""For complete request/response message translation"""
|
22
|
+
|
23
|
+
def from_response_with_completion(self, obj: Record) -> Tuple[Dict[str, Any], bool]:
|
24
|
+
"""Returns (response_dict, is_final) - for streaming responses"""
|
25
|
+
return self.from_pulsar(obj), True
|
26
|
+
|
27
|
+
|
28
|
+
class SendTranslator(Translator):
|
29
|
+
"""For fire-and-forget send operations (like ServiceSender)"""
|
30
|
+
|
31
|
+
def from_pulsar(self, obj: Record) -> Dict[str, Any]:
|
32
|
+
"""Usually not needed for send-only operations"""
|
33
|
+
raise NotImplementedError("Send translators typically don't need from_pulsar")
|
34
|
+
|
35
|
+
|
36
|
+
def handle_optional_fields(obj: Record, fields: list) -> Dict[str, Any]:
|
37
|
+
"""Helper to extract optional fields from Pulsar object"""
|
38
|
+
result = {}
|
39
|
+
for field in fields:
|
40
|
+
value = getattr(obj, field, None)
|
41
|
+
if value is not None:
|
42
|
+
result[field] = value
|
43
|
+
return result
|
@@ -0,0 +1,100 @@
|
|
1
|
+
from typing import Dict, Any, Tuple
|
2
|
+
from ...schema import ConfigRequest, ConfigResponse, ConfigKey, ConfigValue
|
3
|
+
from .base import MessageTranslator
|
4
|
+
|
5
|
+
|
6
|
+
class ConfigRequestTranslator(MessageTranslator):
|
7
|
+
"""Translator for ConfigRequest schema objects"""
|
8
|
+
|
9
|
+
def to_pulsar(self, data: Dict[str, Any]) -> ConfigRequest:
|
10
|
+
keys = None
|
11
|
+
if "keys" in data:
|
12
|
+
keys = [
|
13
|
+
ConfigKey(
|
14
|
+
type=k["type"],
|
15
|
+
key=k["key"]
|
16
|
+
)
|
17
|
+
for k in data["keys"]
|
18
|
+
]
|
19
|
+
|
20
|
+
values = None
|
21
|
+
if "values" in data:
|
22
|
+
values = [
|
23
|
+
ConfigValue(
|
24
|
+
type=v["type"],
|
25
|
+
key=v["key"],
|
26
|
+
value=v["value"]
|
27
|
+
)
|
28
|
+
for v in data["values"]
|
29
|
+
]
|
30
|
+
|
31
|
+
return ConfigRequest(
|
32
|
+
operation=data.get("operation"),
|
33
|
+
keys=keys,
|
34
|
+
type=data.get("type"),
|
35
|
+
values=values
|
36
|
+
)
|
37
|
+
|
38
|
+
def from_pulsar(self, obj: ConfigRequest) -> Dict[str, Any]:
|
39
|
+
result = {}
|
40
|
+
|
41
|
+
if obj.operation:
|
42
|
+
result["operation"] = obj.operation
|
43
|
+
if obj.type:
|
44
|
+
result["type"] = obj.type
|
45
|
+
|
46
|
+
if obj.keys:
|
47
|
+
result["keys"] = [
|
48
|
+
{
|
49
|
+
"type": k.type,
|
50
|
+
"key": k.key
|
51
|
+
}
|
52
|
+
for k in obj.keys
|
53
|
+
]
|
54
|
+
|
55
|
+
if obj.values:
|
56
|
+
result["values"] = [
|
57
|
+
{
|
58
|
+
"type": v.type,
|
59
|
+
"key": v.key,
|
60
|
+
"value": v.value
|
61
|
+
}
|
62
|
+
for v in obj.values
|
63
|
+
]
|
64
|
+
|
65
|
+
return result
|
66
|
+
|
67
|
+
|
68
|
+
class ConfigResponseTranslator(MessageTranslator):
|
69
|
+
"""Translator for ConfigResponse schema objects"""
|
70
|
+
|
71
|
+
def to_pulsar(self, data: Dict[str, Any]) -> ConfigResponse:
|
72
|
+
raise NotImplementedError("Response translation to Pulsar not typically needed")
|
73
|
+
|
74
|
+
def from_pulsar(self, obj: ConfigResponse) -> Dict[str, Any]:
|
75
|
+
result = {}
|
76
|
+
|
77
|
+
if obj.version is not None:
|
78
|
+
result["version"] = obj.version
|
79
|
+
|
80
|
+
if obj.values:
|
81
|
+
result["values"] = [
|
82
|
+
{
|
83
|
+
"type": v.type,
|
84
|
+
"key": v.key,
|
85
|
+
"value": v.value
|
86
|
+
}
|
87
|
+
for v in obj.values
|
88
|
+
]
|
89
|
+
|
90
|
+
if obj.directory:
|
91
|
+
result["directory"] = obj.directory
|
92
|
+
|
93
|
+
if obj.config:
|
94
|
+
result["config"] = obj.config
|
95
|
+
|
96
|
+
return result
|
97
|
+
|
98
|
+
def from_response_with_completion(self, obj: ConfigResponse) -> Tuple[Dict[str, Any], bool]:
|
99
|
+
"""Returns (response_dict, is_final)"""
|
100
|
+
return self.from_pulsar(obj), True
|
@@ -0,0 +1,191 @@
|
|
1
|
+
import base64
|
2
|
+
from typing import Dict, Any
|
3
|
+
from ...schema import Document, TextDocument, Chunk, DocumentEmbeddings, ChunkEmbeddings
|
4
|
+
from .base import SendTranslator
|
5
|
+
from .metadata import DocumentMetadataTranslator
|
6
|
+
from .primitives import SubgraphTranslator
|
7
|
+
|
8
|
+
|
9
|
+
class DocumentTranslator(SendTranslator):
|
10
|
+
"""Translator for Document schema objects (PDF docs etc.)"""
|
11
|
+
|
12
|
+
def __init__(self):
|
13
|
+
self.subgraph_translator = SubgraphTranslator()
|
14
|
+
|
15
|
+
def to_pulsar(self, data: Dict[str, Any]) -> Document:
|
16
|
+
metadata = data.get("metadata", [])
|
17
|
+
|
18
|
+
# Handle base64 content validation
|
19
|
+
doc = base64.b64decode(data["data"])
|
20
|
+
|
21
|
+
from ...schema import Metadata
|
22
|
+
return Document(
|
23
|
+
metadata=Metadata(
|
24
|
+
id=data.get("id"),
|
25
|
+
metadata=self.subgraph_translator.to_pulsar(metadata) if metadata else [],
|
26
|
+
user=data.get("user", "trustgraph"),
|
27
|
+
collection=data.get("collection", "default"),
|
28
|
+
),
|
29
|
+
data=base64.b64encode(doc).decode("utf-8")
|
30
|
+
)
|
31
|
+
|
32
|
+
def from_pulsar(self, obj: Document) -> Dict[str, Any]:
|
33
|
+
result = {
|
34
|
+
"data": obj.data
|
35
|
+
}
|
36
|
+
|
37
|
+
if obj.metadata:
|
38
|
+
metadata_dict = {}
|
39
|
+
if obj.metadata.id:
|
40
|
+
metadata_dict["id"] = obj.metadata.id
|
41
|
+
if obj.metadata.user:
|
42
|
+
metadata_dict["user"] = obj.metadata.user
|
43
|
+
if obj.metadata.collection:
|
44
|
+
metadata_dict["collection"] = obj.metadata.collection
|
45
|
+
if obj.metadata.metadata:
|
46
|
+
metadata_dict["metadata"] = self.subgraph_translator.from_pulsar(obj.metadata.metadata)
|
47
|
+
|
48
|
+
result["metadata"] = metadata_dict
|
49
|
+
|
50
|
+
return result
|
51
|
+
|
52
|
+
|
53
|
+
class TextDocumentTranslator(SendTranslator):
|
54
|
+
"""Translator for TextDocument schema objects"""
|
55
|
+
|
56
|
+
def __init__(self):
|
57
|
+
self.subgraph_translator = SubgraphTranslator()
|
58
|
+
|
59
|
+
def to_pulsar(self, data: Dict[str, Any]) -> TextDocument:
|
60
|
+
metadata = data.get("metadata", [])
|
61
|
+
charset = data.get("charset", "utf-8")
|
62
|
+
|
63
|
+
# Text is base64 encoded in input
|
64
|
+
text = base64.b64decode(data["text"]).decode(charset)
|
65
|
+
|
66
|
+
from ...schema import Metadata
|
67
|
+
return TextDocument(
|
68
|
+
metadata=Metadata(
|
69
|
+
id=data.get("id"),
|
70
|
+
metadata=self.subgraph_translator.to_pulsar(metadata) if metadata else [],
|
71
|
+
user=data.get("user", "trustgraph"),
|
72
|
+
collection=data.get("collection", "default"),
|
73
|
+
),
|
74
|
+
text=text.encode("utf-8")
|
75
|
+
)
|
76
|
+
|
77
|
+
def from_pulsar(self, obj: TextDocument) -> Dict[str, Any]:
|
78
|
+
result = {
|
79
|
+
"text": obj.text.decode("utf-8") if isinstance(obj.text, bytes) else obj.text
|
80
|
+
}
|
81
|
+
|
82
|
+
if obj.metadata:
|
83
|
+
metadata_dict = {}
|
84
|
+
if obj.metadata.id:
|
85
|
+
metadata_dict["id"] = obj.metadata.id
|
86
|
+
if obj.metadata.user:
|
87
|
+
metadata_dict["user"] = obj.metadata.user
|
88
|
+
if obj.metadata.collection:
|
89
|
+
metadata_dict["collection"] = obj.metadata.collection
|
90
|
+
if obj.metadata.metadata:
|
91
|
+
metadata_dict["metadata"] = self.subgraph_translator.from_pulsar(obj.metadata.metadata)
|
92
|
+
|
93
|
+
result["metadata"] = metadata_dict
|
94
|
+
|
95
|
+
return result
|
96
|
+
|
97
|
+
|
98
|
+
class ChunkTranslator(SendTranslator):
|
99
|
+
"""Translator for Chunk schema objects"""
|
100
|
+
|
101
|
+
def __init__(self):
|
102
|
+
self.subgraph_translator = SubgraphTranslator()
|
103
|
+
|
104
|
+
def to_pulsar(self, data: Dict[str, Any]) -> Chunk:
|
105
|
+
metadata = data.get("metadata", [])
|
106
|
+
|
107
|
+
from ...schema import Metadata
|
108
|
+
return Chunk(
|
109
|
+
metadata=Metadata(
|
110
|
+
id=data.get("id"),
|
111
|
+
metadata=self.subgraph_translator.to_pulsar(metadata) if metadata else [],
|
112
|
+
user=data.get("user", "trustgraph"),
|
113
|
+
collection=data.get("collection", "default"),
|
114
|
+
),
|
115
|
+
chunk=data["chunk"].encode("utf-8") if isinstance(data["chunk"], str) else data["chunk"]
|
116
|
+
)
|
117
|
+
|
118
|
+
def from_pulsar(self, obj: Chunk) -> Dict[str, Any]:
|
119
|
+
result = {
|
120
|
+
"chunk": obj.chunk.decode("utf-8") if isinstance(obj.chunk, bytes) else obj.chunk
|
121
|
+
}
|
122
|
+
|
123
|
+
if obj.metadata:
|
124
|
+
metadata_dict = {}
|
125
|
+
if obj.metadata.id:
|
126
|
+
metadata_dict["id"] = obj.metadata.id
|
127
|
+
if obj.metadata.user:
|
128
|
+
metadata_dict["user"] = obj.metadata.user
|
129
|
+
if obj.metadata.collection:
|
130
|
+
metadata_dict["collection"] = obj.metadata.collection
|
131
|
+
if obj.metadata.metadata:
|
132
|
+
metadata_dict["metadata"] = self.subgraph_translator.from_pulsar(obj.metadata.metadata)
|
133
|
+
|
134
|
+
result["metadata"] = metadata_dict
|
135
|
+
|
136
|
+
return result
|
137
|
+
|
138
|
+
|
139
|
+
class DocumentEmbeddingsTranslator(SendTranslator):
|
140
|
+
"""Translator for DocumentEmbeddings schema objects"""
|
141
|
+
|
142
|
+
def __init__(self):
|
143
|
+
self.subgraph_translator = SubgraphTranslator()
|
144
|
+
|
145
|
+
def to_pulsar(self, data: Dict[str, Any]) -> DocumentEmbeddings:
|
146
|
+
metadata = data.get("metadata", {})
|
147
|
+
|
148
|
+
chunks = [
|
149
|
+
ChunkEmbeddings(
|
150
|
+
chunk=chunk["chunk"].encode("utf-8") if isinstance(chunk["chunk"], str) else chunk["chunk"],
|
151
|
+
vectors=chunk["vectors"]
|
152
|
+
)
|
153
|
+
for chunk in data.get("chunks", [])
|
154
|
+
]
|
155
|
+
|
156
|
+
from ...schema import Metadata
|
157
|
+
return DocumentEmbeddings(
|
158
|
+
metadata=Metadata(
|
159
|
+
id=metadata.get("id"),
|
160
|
+
metadata=self.subgraph_translator.to_pulsar(metadata.get("metadata", [])),
|
161
|
+
user=metadata.get("user", "trustgraph"),
|
162
|
+
collection=metadata.get("collection", "default"),
|
163
|
+
),
|
164
|
+
chunks=chunks
|
165
|
+
)
|
166
|
+
|
167
|
+
def from_pulsar(self, obj: DocumentEmbeddings) -> Dict[str, Any]:
|
168
|
+
result = {
|
169
|
+
"chunks": [
|
170
|
+
{
|
171
|
+
"chunk": chunk.chunk.decode("utf-8") if isinstance(chunk.chunk, bytes) else chunk.chunk,
|
172
|
+
"vectors": chunk.vectors
|
173
|
+
}
|
174
|
+
for chunk in obj.chunks
|
175
|
+
]
|
176
|
+
}
|
177
|
+
|
178
|
+
if obj.metadata:
|
179
|
+
metadata_dict = {}
|
180
|
+
if obj.metadata.id:
|
181
|
+
metadata_dict["id"] = obj.metadata.id
|
182
|
+
if obj.metadata.user:
|
183
|
+
metadata_dict["user"] = obj.metadata.user
|
184
|
+
if obj.metadata.collection:
|
185
|
+
metadata_dict["collection"] = obj.metadata.collection
|
186
|
+
if obj.metadata.metadata:
|
187
|
+
metadata_dict["metadata"] = self.subgraph_translator.from_pulsar(obj.metadata.metadata)
|
188
|
+
|
189
|
+
result["metadata"] = metadata_dict
|
190
|
+
|
191
|
+
return result
|
@@ -0,0 +1,33 @@
|
|
1
|
+
from typing import Dict, Any, Tuple
|
2
|
+
from ...schema import EmbeddingsRequest, EmbeddingsResponse
|
3
|
+
from .base import MessageTranslator
|
4
|
+
|
5
|
+
|
6
|
+
class EmbeddingsRequestTranslator(MessageTranslator):
|
7
|
+
"""Translator for EmbeddingsRequest schema objects"""
|
8
|
+
|
9
|
+
def to_pulsar(self, data: Dict[str, Any]) -> EmbeddingsRequest:
|
10
|
+
return EmbeddingsRequest(
|
11
|
+
text=data["text"]
|
12
|
+
)
|
13
|
+
|
14
|
+
def from_pulsar(self, obj: EmbeddingsRequest) -> Dict[str, Any]:
|
15
|
+
return {
|
16
|
+
"text": obj.text
|
17
|
+
}
|
18
|
+
|
19
|
+
|
20
|
+
class EmbeddingsResponseTranslator(MessageTranslator):
|
21
|
+
"""Translator for EmbeddingsResponse schema objects"""
|
22
|
+
|
23
|
+
def to_pulsar(self, data: Dict[str, Any]) -> EmbeddingsResponse:
|
24
|
+
raise NotImplementedError("Response translation to Pulsar not typically needed")
|
25
|
+
|
26
|
+
def from_pulsar(self, obj: EmbeddingsResponse) -> Dict[str, Any]:
|
27
|
+
return {
|
28
|
+
"vectors": obj.vectors
|
29
|
+
}
|
30
|
+
|
31
|
+
def from_response_with_completion(self, obj: EmbeddingsResponse) -> Tuple[Dict[str, Any], bool]:
|
32
|
+
"""Returns (response_dict, is_final)"""
|
33
|
+
return self.from_pulsar(obj), True
|