langchain-timbr 2.1.7__tar.gz → 2.1.8__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.
Files changed (58) hide show
  1. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/PKG-INFO +1 -1
  2. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/_version.py +2 -2
  3. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/config.py +5 -1
  4. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langchain/execute_timbr_query_chain.py +3 -3
  5. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langchain/generate_timbr_sql_chain.py +2 -2
  6. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langchain/timbr_sql_agent.py +6 -6
  7. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langchain/validate_timbr_sql_chain.py +1 -1
  8. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langgraph/execute_timbr_query_node.py +3 -3
  9. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langgraph/generate_timbr_sql_node.py +2 -2
  10. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langgraph/validate_timbr_query_node.py +4 -4
  11. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/timbr_llm_connector.py +5 -5
  12. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/utils/timbr_llm_utils.py +6 -6
  13. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_chain_reasoning.py +4 -4
  14. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/.github/dependabot.yml +0 -0
  15. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/.github/pull_request_template.md +0 -0
  16. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/.github/workflows/_codespell.yml +0 -0
  17. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/.github/workflows/_fossa.yml +0 -0
  18. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/.github/workflows/install-dependencies-and-run-tests.yml +0 -0
  19. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/.github/workflows/publish.yml +0 -0
  20. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/.gitignore +0 -0
  21. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/LICENSE +0 -0
  22. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/README.md +0 -0
  23. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/SECURITY.md +0 -0
  24. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/pyproject.toml +0 -0
  25. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/pytest.ini +0 -0
  26. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/requirements.txt +0 -0
  27. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/requirements310.txt +0 -0
  28. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/requirements311.txt +0 -0
  29. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/__init__.py +0 -0
  30. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langchain/__init__.py +0 -0
  31. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langchain/generate_answer_chain.py +0 -0
  32. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langchain/identify_concept_chain.py +0 -0
  33. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langgraph/__init__.py +0 -0
  34. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langgraph/generate_response_node.py +0 -0
  35. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/langgraph/identify_concept_node.py +0 -0
  36. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/llm_wrapper/llm_wrapper.py +0 -0
  37. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/llm_wrapper/timbr_llm_wrapper.py +0 -0
  38. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/utils/general.py +0 -0
  39. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/utils/prompt_service.py +0 -0
  40. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/utils/temperature_supported_models.json +0 -0
  41. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/src/langchain_timbr/utils/timbr_utils.py +0 -0
  42. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/README.md +0 -0
  43. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/conftest.py +0 -0
  44. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_agent_integration.py +0 -0
  45. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_azure_databricks_provider.py +0 -0
  46. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_azure_openai_model.py +0 -0
  47. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_chain_pipeline.py +0 -0
  48. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_jwt_token.py +0 -0
  49. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_langchain_chains.py +0 -0
  50. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_langgraph_nodes.py +0 -0
  51. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/integration/test_timeout_functionality.py +0 -0
  52. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/standard/conftest.py +0 -0
  53. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/standard/test_chain_documentation.py +0 -0
  54. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/standard/test_connection_validation.py +0 -0
  55. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/standard/test_llm_wrapper_optional_params.py +0 -0
  56. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/standard/test_optional_llm_integration.py +0 -0
  57. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/standard/test_standard_chain_requirements.py +0 -0
  58. {langchain_timbr-2.1.7 → langchain_timbr-2.1.8}/tests/standard/test_unit_tests.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langchain-timbr
3
- Version: 2.1.7
3
+ Version: 2.1.8
4
4
  Summary: LangChain & LangGraph extensions that parse LLM prompts into Timbr semantic SQL and execute them.
5
5
  Project-URL: Homepage, https://github.com/WPSemantix/langchain-timbr
6
6
  Project-URL: Documentation, https://docs.timbr.ai/doc/docs/integration/langchain-sdk/
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '2.1.7'
32
- __version_tuple__ = version_tuple = (2, 1, 7)
31
+ __version__ = version = '2.1.8'
32
+ __version_tuple__ = version_tuple = (2, 1, 8)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -31,4 +31,8 @@ llm_scope = os.environ.get('LLM_SCOPE', "https://cognitiveservices.azure.com/.de
31
31
 
32
32
  # Whether to enable reasoning during SQL generation
33
33
  enable_reasoning = to_boolean(os.environ.get('ENABLE_REASONING', 'false'))
34
- reasoning_steps = to_integer(os.environ.get('REASONING_STEPS', 2))
34
+ reasoning_steps = to_integer(os.environ.get('REASONING_STEPS', 2))
35
+
36
+ should_validate_sql = to_boolean(os.environ.get('SHOULD_VALIDATE_SQL', os.environ.get('LLM_SHOULD_VALIDATE_SQL', 'true')))
37
+ retry_if_no_results = to_boolean(os.environ.get('RETRY_IF_NO_RESULTS', os.environ.get('LLM_RETRY_IF_NO_RESULTS', 'true')))
38
+ llm_default_limit = to_integer(os.environ.get('LLM_DEFAULT_LIMIT', 500)) # Default max tokens limit for LLM responses
@@ -30,10 +30,10 @@ class ExecuteTimbrQueryChain(Chain):
30
30
  include_logic_concepts: Optional[bool] = False,
31
31
  include_tags: Optional[Union[list[str], str]] = None,
32
32
  exclude_properties: Optional[Union[list[str], str]] = ['entity_id', 'entity_type', 'entity_label'],
33
- should_validate_sql: Optional[bool] = False,
33
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
34
34
  retries: Optional[int] = 3,
35
- max_limit: Optional[int] = 500,
36
- retry_if_no_results: Optional[bool] = False,
35
+ max_limit: Optional[int] = config.llm_default_limit,
36
+ retry_if_no_results: Optional[bool] = config.retry_if_no_results,
37
37
  no_results_max_retries: Optional[int] = 2,
38
38
  note: Optional[str] = '',
39
39
  db_is_case_sensitive: Optional[bool] = False,
@@ -29,9 +29,9 @@ class GenerateTimbrSqlChain(Chain):
29
29
  include_tags: Optional[Union[list[str], str]] = None,
30
30
  include_logic_concepts: Optional[bool] = False,
31
31
  exclude_properties: Optional[Union[list[str], str]] = ['entity_id', 'entity_type', 'entity_label'],
32
- should_validate_sql: Optional[bool] = False,
32
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
33
33
  retries: Optional[int] = 3,
34
- max_limit: Optional[int] = 500,
34
+ max_limit: Optional[int] = config.llm_default_limit,
35
35
  note: Optional[str] = '',
36
36
  db_is_case_sensitive: Optional[bool] = False,
37
37
  graph_depth: Optional[int] = 1,
@@ -22,10 +22,10 @@ class TimbrSqlAgent(BaseSingleActionAgent):
22
22
  include_logic_concepts: Optional[bool] = False,
23
23
  include_tags: Optional[Union[list[str], str]] = None,
24
24
  exclude_properties: Optional[Union[list[str], str]] = ['entity_id', 'entity_type', 'entity_label'],
25
- should_validate_sql: Optional[bool] = True,
25
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
26
26
  retries: Optional[int] = 3,
27
- max_limit: Optional[int] = 500,
28
- retry_if_no_results: Optional[bool] = False,
27
+ max_limit: Optional[int] = config.llm_default_limit,
28
+ retry_if_no_results: Optional[bool] = config.retry_if_no_results,
29
29
  no_results_max_retries: Optional[int] = 2,
30
30
  generate_answer: Optional[bool] = False,
31
31
  note: Optional[str] = '',
@@ -332,10 +332,10 @@ def create_timbr_sql_agent(
332
332
  include_logic_concepts: Optional[bool] = False,
333
333
  include_tags: Optional[Union[list[str], str]] = None,
334
334
  exclude_properties: Optional[Union[list[str], str]] = ['entity_id', 'entity_type', 'entity_label'],
335
- should_validate_sql: Optional[bool] = True,
335
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
336
336
  retries: Optional[int] = 3,
337
- max_limit: Optional[int] = 500,
338
- retry_if_no_results: Optional[bool] = False,
337
+ max_limit: Optional[int] = config.llm_default_limit,
338
+ retry_if_no_results: Optional[bool] = config.retry_if_no_results,
339
339
  no_results_max_retries: Optional[int] = 2,
340
340
  generate_answer: Optional[bool] = False,
341
341
  note: Optional[str] = '',
@@ -32,7 +32,7 @@ class ValidateTimbrSqlChain(Chain):
32
32
  include_logic_concepts: Optional[bool] = False,
33
33
  include_tags: Optional[Union[list[str], str]] = None,
34
34
  exclude_properties: Optional[Union[list[str], str]] = ['entity_id', 'entity_type', 'entity_label'],
35
- max_limit: Optional[int] = 500,
35
+ max_limit: Optional[int] = config.llm_default_limit,
36
36
  note: Optional[str] = '',
37
37
  db_is_case_sensitive: Optional[bool] = False,
38
38
  graph_depth: Optional[int] = 1,
@@ -24,10 +24,10 @@ class ExecuteSemanticQueryNode:
24
24
  include_logic_concepts: Optional[bool] = False,
25
25
  include_tags: Optional[Union[list[str], str]] = None,
26
26
  exclude_properties: Optional[Union[list[str], str]] = ['entity_id', 'entity_type', 'entity_label'],
27
- should_validate_sql: Optional[bool] = False,
27
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
28
28
  retries: Optional[int] = 3,
29
- max_limit: Optional[int] = 500,
30
- retry_if_no_results: Optional[bool] = False,
29
+ max_limit: Optional[int] = config.llm_default_limit,
30
+ retry_if_no_results: Optional[bool] = config.retry_if_no_results,
31
31
  no_results_max_retries: Optional[int] = 2,
32
32
  note: Optional[str] = '',
33
33
  db_is_case_sensitive: Optional[bool] = False,
@@ -23,9 +23,9 @@ class GenerateTimbrSqlNode:
23
23
  include_logic_concepts: Optional[bool] = False,
24
24
  include_tags: Optional[Union[list[str], str]] = None,
25
25
  exclude_properties: Optional[Union[list[str], str]] = ['entity_id', 'entity_type', 'entity_label'],
26
- should_validate_sql: Optional[bool] = False,
26
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
27
27
  retries: Optional[int] = 3,
28
- max_limit: Optional[int] = 500,
28
+ max_limit: Optional[int] = config.llm_default_limit,
29
29
  note: Optional[str] = '',
30
30
  db_is_case_sensitive: Optional[bool] = False,
31
31
  graph_depth: Optional[int] = 1,
@@ -3,7 +3,7 @@ from langchain.llms.base import LLM
3
3
  from langgraph.graph import StateGraph
4
4
 
5
5
  from ..langchain.validate_timbr_sql_chain import ValidateTimbrSqlChain
6
-
6
+ from .. import config
7
7
 
8
8
  class ValidateSemanticSqlNode:
9
9
  """
@@ -25,7 +25,7 @@ class ValidateSemanticSqlNode:
25
25
  include_logic_concepts: Optional[bool] = False,
26
26
  include_tags: Optional[Union[list[str], str]] = None,
27
27
  exclude_properties: Optional[Union[list[str], str]] = ['entity_id', 'entity_type', 'entity_label'],
28
- max_limit: Optional[int] = 500,
28
+ max_limit: Optional[int] = config.llm_default_limit,
29
29
  note: Optional[str] = None,
30
30
  db_is_case_sensitive: Optional[bool] = False,
31
31
  graph_depth: Optional[int] = 1,
@@ -33,8 +33,8 @@ class ValidateSemanticSqlNode:
33
33
  is_jwt: Optional[bool] = False,
34
34
  jwt_tenant_id: Optional[str] = None,
35
35
  conn_params: Optional[dict] = None,
36
- enable_reasoning: Optional[bool] = False,
37
- reasoning_steps: Optional[int] = 2,
36
+ enable_reasoning: Optional[bool] = config.enable_reasoning,
37
+ reasoning_steps: Optional[int] = config.reasoning_steps,
38
38
  debug: Optional[bool] = False,
39
39
  **kwargs,
40
40
  ):
@@ -30,7 +30,7 @@ class TimbrLlmConnector:
30
30
  url: Optional[str] = config.url,
31
31
  token: Optional[str] = config.token,
32
32
  ontology: Optional[str] = config.ontology,
33
- max_limit: Optional[int] = 500,
33
+ max_limit: Optional[int] = config.llm_default_limit,
34
34
  verify_ssl: Optional[bool] = True,
35
35
  is_jwt: Optional[bool] = False,
36
36
  jwt_tenant_id: Optional[str] = None,
@@ -185,7 +185,7 @@ class TimbrLlmConnector:
185
185
  views_list: Optional[list] = None,
186
186
  include_logic_concepts: Optional[bool] = False,
187
187
  include_tags: Optional[str] = None,
188
- should_validate_sql: Optional[bool] = False,
188
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
189
189
  retries: Optional[int] = 3,
190
190
  note: Optional[str] = '',
191
191
  **chain_kwargs: Any,
@@ -243,7 +243,7 @@ class TimbrLlmConnector:
243
243
  views_list: Optional[list] = None,
244
244
  include_logic_concepts: Optional[bool] = False,
245
245
  include_tags: Optional[str] = None,
246
- should_validate_sql: Optional[bool] = True,
246
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
247
247
  retries: Optional[int] = 3,
248
248
  note: Optional[str] = '',
249
249
  **chain_kwargs: Any,
@@ -272,7 +272,7 @@ class TimbrLlmConnector:
272
272
  views_list: Optional[list] = None,
273
273
  include_logic_concepts: Optional[bool] = False,
274
274
  include_tags: Optional[str] = None,
275
- should_validate_sql: Optional[bool] = True,
275
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
276
276
  retries: Optional[int] = 3,
277
277
  note: Optional[str] = '',
278
278
  **agent_kwargs: Any,
@@ -302,7 +302,7 @@ class TimbrLlmConnector:
302
302
  views_list: Optional[list] = None,
303
303
  include_logic_concepts: Optional[bool] = False,
304
304
  include_tags: Optional[str] = None,
305
- should_validate_sql: Optional[bool] = True,
305
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
306
306
  retries: Optional[int] = 3,
307
307
  note: Optional[str] = '',
308
308
  **nodes_kwargs: Any,
@@ -11,7 +11,7 @@ from .prompt_service import (
11
11
  get_generate_sql_reasoning_prompt_template,
12
12
  get_qa_prompt_template
13
13
  )
14
- from ..config import llm_timeout
14
+ from .. import config
15
15
 
16
16
  def _clean_snowflake_prompt(prompt: Any) -> None:
17
17
  import re
@@ -272,7 +272,7 @@ def determine_concept(
272
272
 
273
273
  # Use config default timeout if none provided
274
274
  if timeout is None:
275
- timeout = llm_timeout
275
+ timeout = config.llm_timeout
276
276
 
277
277
  determine_concept_prompt = get_determine_concept_prompt_template(conn_params)
278
278
  tags = get_tags(conn_params=conn_params, include_tags=include_tags)
@@ -648,9 +648,9 @@ def generate_sql(
648
648
  include_logic_concepts: Optional[bool] = False,
649
649
  include_tags: Optional[str] = None,
650
650
  exclude_properties: Optional[list] = None,
651
- should_validate_sql: Optional[bool] = False,
651
+ should_validate_sql: Optional[bool] = config.should_validate_sql,
652
652
  retries: Optional[int] = 3,
653
- max_limit: Optional[int] = 500,
653
+ max_limit: Optional[int] = config.llm_default_limit,
654
654
  note: Optional[str] = '',
655
655
  db_is_case_sensitive: Optional[bool] = False,
656
656
  graph_depth: Optional[int] = 1,
@@ -665,7 +665,7 @@ def generate_sql(
665
665
 
666
666
  # Use config default timeout if none provided
667
667
  if timeout is None:
668
- timeout = llm_timeout
668
+ timeout = config.llm_timeout
669
669
 
670
670
  generate_sql_prompt = get_generate_sql_prompt_template(conn_params)
671
671
 
@@ -835,7 +835,7 @@ def answer_question(
835
835
  ) -> dict[str, Any]:
836
836
  # Use config default timeout if none provided
837
837
  if timeout is None:
838
- timeout = llm_timeout
838
+ timeout = config.llm_timeout
839
839
 
840
840
  qa_prompt = get_qa_prompt_template(conn_params)
841
841
 
@@ -23,7 +23,7 @@ class TestLangchainChainsReasoningIntegration:
23
23
 
24
24
  # SKIP THIS TESTS UNTIL API WILL BE UPDATED
25
25
 
26
- def skip_test_generate_timbr_sql_chain(self, llm, config):
26
+ def test_generate_timbr_sql_chain(self, llm, config):
27
27
  chain = GenerateTimbrSqlChain(
28
28
  llm=llm,
29
29
  url=config["timbr_url"],
@@ -36,7 +36,7 @@ class TestLangchainChainsReasoningIntegration:
36
36
  print("GenerateTimbrSqlChain result:", result)
37
37
  self._assert_reasoning(chain, result)
38
38
 
39
- def skip_test_validate_timbr_sql_chain(self, llm, config):
39
+ def test_validate_timbr_sql_chain(self, llm, config):
40
40
  chain = ValidateTimbrSqlChain(
41
41
  llm=llm,
42
42
  url=config["timbr_url"],
@@ -54,7 +54,7 @@ class TestLangchainChainsReasoningIntegration:
54
54
  print("ValidateTimbrSqlChain result:", result)
55
55
  self._assert_reasoning(chain, result)
56
56
 
57
- def skip_test_execute_timbr_query_chain(self, llm, config):
57
+ def test_execute_timbr_query_chain(self, llm, config):
58
58
  chain = ExecuteTimbrQueryChain(
59
59
  llm=llm,
60
60
  url=config["timbr_url"],
@@ -70,7 +70,7 @@ class TestLangchainChainsReasoningIntegration:
70
70
  print("ExecuteTimbrQueryChain result:", result)
71
71
  self._assert_reasoning(chain, result)
72
72
 
73
- def skip_test_create_timbr_sql_agent(self, llm, config):
73
+ def test_create_timbr_sql_agent(self, llm, config):
74
74
  agent = create_timbr_sql_agent(
75
75
  llm=llm,
76
76
  url=config["timbr_url"],
File without changes