Skip to content

Commit a9e9021

Browse files
Revamp project folder structure to introduce modules (#41)
* Change project structure to different modules
1 parent e3c9973 commit a9e9021

File tree

17 files changed

+122
-110
lines changed

17 files changed

+122
-110
lines changed

langchain_hana/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from importlib import metadata
22

3-
from langchain_hana.chains.graph_qa import HanaSparqlQAChain
3+
from langchain_hana.chains import HanaSparqlQAChain
44
from langchain_hana.embeddings import HanaInternalEmbeddings
55
from langchain_hana.graphs import HanaRdfGraph
66
from langchain_hana.vectorstores import HanaDB
7+
from langchain_hana.structured_query import HanaTranslator
78

89
try:
910
__version__ = metadata.version(__package__)
@@ -14,6 +15,7 @@
1415

1516
__all__ = [
1617
"HanaDB",
18+
"HanaTranslator"
1719
"HanaInternalEmbeddings",
1820
"HanaRdfGraph",
1921
"HanaSparqlQAChain",

langchain_hana/chains/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from .graph_qa.sparql_qa_chain import HanaSparqlQAChain
1+
from .graph_qa import HanaSparqlQAChain
22

33
__all__ = ["HanaSparqlQAChain"]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from .sparql_qa_chain import HanaSparqlQAChain
1+
from .hana_sparql_qa_chain import HanaSparqlQAChain
22

33
__all__ = ["HanaSparqlQAChain"]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .hana_internal_embeddings import HanaInternalEmbeddings
2+
3+
__all__ = ["HanaInternalEmbeddings"]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .hana_translator import HanaTranslator
2+
3+
__all__ = ["HanaTranslator"]
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from typing import Dict, Tuple, Union
2+
3+
from langchain_core.structured_query import (
4+
Comparator,
5+
Comparison,
6+
Operation,
7+
Operator,
8+
StructuredQuery,
9+
Visitor,
10+
)
11+
12+
13+
class HanaTranslator(Visitor):
14+
"""
15+
Translate internal query language elements to valid filters params for
16+
HANA vectorstore.
17+
"""
18+
19+
allowed_operators = [Operator.AND, Operator.OR]
20+
"""Subset of allowed logical operators."""
21+
allowed_comparators = [
22+
Comparator.EQ,
23+
Comparator.NE,
24+
Comparator.GT,
25+
Comparator.LT,
26+
Comparator.GTE,
27+
Comparator.LTE,
28+
Comparator.IN,
29+
Comparator.NIN,
30+
Comparator.CONTAIN,
31+
Comparator.LIKE,
32+
]
33+
34+
def _format_func(self, func: Union[Operator, Comparator]) -> str:
35+
self._validate_func(func)
36+
return f"${'contains' if func == Comparator.CONTAIN else func.value}"
37+
38+
def visit_operation(self, operation: Operation) -> Dict:
39+
args = [arg.accept(self) for arg in operation.arguments]
40+
return {self._format_func(operation.operator): args}
41+
42+
def visit_comparison(self, comparison: Comparison) -> Dict:
43+
return {
44+
comparison.attribute: {
45+
self._format_func(comparison.comparator): comparison.value
46+
}
47+
}
48+
49+
def visit_structured_query(
50+
self, structured_query: StructuredQuery
51+
) -> Tuple[str, dict]:
52+
if structured_query.filter is None:
53+
kwargs = {}
54+
else:
55+
kwargs = {"filter": structured_query.filter.accept(self)}
56+
return structured_query.query, kwargs
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .hana_db import HanaDB
2+
3+
__all__ = ["HanaDB"]

langchain_hana/query_constructors.py renamed to langchain_hana/vectorstores/create_where_clause.py

Lines changed: 1 addition & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
1-
# HANA Translator/query constructor
21
import logging
3-
from typing import Any, Dict, List, Tuple, Union
4-
5-
from langchain_core.structured_query import (
6-
Comparator,
7-
Comparison,
8-
Operation,
9-
Operator,
10-
StructuredQuery,
11-
Visitor,
12-
)
2+
from typing import List, Tuple, Any
133

144
logger = logging.getLogger(__name__)
155

@@ -49,53 +39,6 @@ def __repr__(self) -> None: # type: ignore[override]
4939

5040
LOGICAL_OPERATORS_TO_SQL = {"$and": "AND", "$or": "OR"}
5141

52-
53-
class HanaTranslator(Visitor):
54-
"""
55-
Translate internal query language elements to valid filters params for
56-
HANA vectorstore.
57-
"""
58-
59-
allowed_operators = [Operator.AND, Operator.OR]
60-
"""Subset of allowed logical operators."""
61-
allowed_comparators = [
62-
Comparator.EQ,
63-
Comparator.NE,
64-
Comparator.GT,
65-
Comparator.LT,
66-
Comparator.GTE,
67-
Comparator.LTE,
68-
Comparator.IN,
69-
Comparator.NIN,
70-
Comparator.CONTAIN,
71-
Comparator.LIKE,
72-
]
73-
74-
def _format_func(self, func: Union[Operator, Comparator]) -> str:
75-
self._validate_func(func)
76-
return f"${'contains' if func == Comparator.CONTAIN else func.value}"
77-
78-
def visit_operation(self, operation: Operation) -> Dict:
79-
args = [arg.accept(self) for arg in operation.arguments]
80-
return {self._format_func(operation.operator): args}
81-
82-
def visit_comparison(self, comparison: Comparison) -> Dict:
83-
return {
84-
comparison.attribute: {
85-
self._format_func(comparison.comparator): comparison.value
86-
}
87-
}
88-
89-
def visit_structured_query(
90-
self, structured_query: StructuredQuery
91-
) -> Tuple[str, dict]:
92-
if structured_query.filter is None:
93-
kwargs = {}
94-
else:
95-
kwargs = {"filter": structured_query.filter.accept(self)}
96-
return structured_query.query, kwargs
97-
98-
9942
class CreateWhereClause:
10043
def __init__(self, hanaDb: Any) -> None:
10144
self.specific_metadata_columns = hanaDb.specific_metadata_columns

0 commit comments

Comments
 (0)