dbagent-cli 0.7.1__tar.gz → 0.7.2__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 (81) hide show
  1. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/PKG-INFO +1 -1
  2. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/__init__.py +1 -1
  3. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/agent/conversation.py +21 -14
  4. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/agent/generator.py +7 -2
  5. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/agent/pipeline.py +3 -1
  6. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent_cli.egg-info/PKG-INFO +1 -1
  7. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/pyproject.toml +1 -1
  8. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/README.md +0 -0
  9. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/agent/confidence.py +0 -0
  10. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/agent/doctor.py +0 -0
  11. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/agent/error_classifier.py +0 -0
  12. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/agent/recommender.py +0 -0
  13. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/agent/validator.py +0 -0
  14. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/cli.py +0 -0
  15. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/config.py +0 -0
  16. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/connectors/base.py +0 -0
  17. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/connectors/factory.py +0 -0
  18. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/connectors/mongo.py +0 -0
  19. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/connectors/relational.py +0 -0
  20. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/execution/__init__.py +0 -0
  21. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/execution/cache.py +0 -0
  22. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/execution/changeset.py +0 -0
  23. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/execution/cost.py +0 -0
  24. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/execution/recovery.py +0 -0
  25. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/execution/sandbox.py +0 -0
  26. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/execution/streaming.py +0 -0
  27. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/anthropic_provider.py +0 -0
  28. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/auto_setup.py +0 -0
  29. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/base.py +0 -0
  30. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/deepseek_provider.py +0 -0
  31. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/factory.py +0 -0
  32. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/gemini_provider.py +0 -0
  33. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/groq_provider.py +0 -0
  34. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/mistral_provider.py +0 -0
  35. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/mock_provider.py +0 -0
  36. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/ollama_provider.py +0 -0
  37. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/openai_provider.py +0 -0
  38. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/llm/openrouter_provider.py +0 -0
  39. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/schema/cache.py +0 -0
  40. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/schema/formatter.py +0 -0
  41. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/schema/graph.py +0 -0
  42. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/schema/models.py +0 -0
  43. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/schema/retriever.py +0 -0
  44. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/schema/selector.py +0 -0
  45. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/security/__init__.py +0 -0
  46. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/security/audit.py +0 -0
  47. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/security/environment.py +0 -0
  48. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/security/masking.py +0 -0
  49. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/security/modes.py +0 -0
  50. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/security/rbac.py +0 -0
  51. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/semantic/__init__.py +0 -0
  52. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/semantic/dictionary.py +0 -0
  53. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/semantic/templates.py +0 -0
  54. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/sql/__init__.py +0 -0
  55. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/sql/optimizer.py +0 -0
  56. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/sql/validator.py +0 -0
  57. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/ui/chat_screen.py +0 -0
  58. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/ui/console.py +0 -0
  59. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/ui/grid_window.py +0 -0
  60. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/ui/viewer.py +0 -0
  61. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent/ui/visualizer.py +0 -0
  62. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent_cli.egg-info/SOURCES.txt +0 -0
  63. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent_cli.egg-info/dependency_links.txt +0 -0
  64. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent_cli.egg-info/entry_points.txt +0 -0
  65. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent_cli.egg-info/requires.txt +0 -0
  66. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/dbagent_cli.egg-info/top_level.txt +0 -0
  67. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/setup.cfg +0 -0
  68. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_cache.py +0 -0
  69. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_cli.py +0 -0
  70. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_connectors.py +0 -0
  71. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_direct_sql.py +0 -0
  72. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_doctor_and_viz.py +0 -0
  73. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_generator.py +0 -0
  74. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_graph.py +0 -0
  75. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_providers.py +0 -0
  76. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_recovery.py +0 -0
  77. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_safety.py +0 -0
  78. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_sandbox.py +0 -0
  79. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_schema.py +0 -0
  80. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_security.py +0 -0
  81. {dbagent_cli-0.7.1 → dbagent_cli-0.7.2}/tests/test_semantic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dbagent-cli
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: Enterprise AI Database Copilot, Schema Graph Introspector & Autonomous Recovery Agent (CLI)
5
5
  Author: Santhosh Gupta
6
6
  Requires-Python: >=3.9
@@ -2,5 +2,5 @@
2
2
  DB-Agent: Universal Database Introspection and Script Generation AI Agent (CLI).
3
3
  """
4
4
 
5
- __version__ = "0.7.1"
5
+ __version__ = "0.7.2"
6
6
  __author__ = "Santhosh Gupta"
@@ -12,7 +12,8 @@ from dataclasses import dataclass, field
12
12
  class ConversationTurn:
13
13
  """A single turn in the conversation."""
14
14
  user_prompt: str
15
- sql: str
15
+ sql: str = ""
16
+ assistant_response: str = ""
16
17
  tables: List[str] = field(default_factory=list)
17
18
  filters: List[str] = field(default_factory=list)
18
19
  entities: Dict[str, str] = field(default_factory=dict)
@@ -22,10 +23,10 @@ class ConversationTurn:
22
23
 
23
24
  class ConversationContext:
24
25
  """
25
- Tracks state across interactive chat turns.
26
+ Tracks state and multi-turn conversational history across interactive chat turns.
26
27
  """
27
28
 
28
- def __init__(self, max_history: int = 10):
29
+ def __init__(self, max_history: int = 15):
29
30
  self.max_history = max_history
30
31
  self.turns: List[ConversationTurn] = []
31
32
  self.active_tables: Set[str] = set()
@@ -34,7 +35,8 @@ class ConversationContext:
34
35
  def add_turn(
35
36
  self,
36
37
  user_prompt: str,
37
- sql: str,
38
+ sql: str = "",
39
+ assistant_response: str = "",
38
40
  tables: Optional[List[str]] = None,
39
41
  filters: Optional[List[str]] = None,
40
42
  is_chat: bool = False,
@@ -43,6 +45,7 @@ class ConversationContext:
43
45
  turn = ConversationTurn(
44
46
  user_prompt=user_prompt,
45
47
  sql=sql,
48
+ assistant_response=assistant_response,
46
49
  tables=tables or [],
47
50
  filters=filters or [],
48
51
  is_chat=is_chat,
@@ -59,19 +62,23 @@ class ConversationContext:
59
62
  return self.turns[-1]
60
63
  return None
61
64
 
62
- def format_context_for_prompt(self) -> str:
63
- """Formats recent context for inclusion in LLM prompt."""
65
+ def format_context_for_prompt(self, max_turns: int = 5) -> str:
66
+ """Formats multi-turn conversation memory for inclusion in LLM prompt."""
64
67
  if not self.turns:
65
68
  return ""
66
69
 
67
- recent_valid = [t for t in self.turns[-3:] if t.sql and not t.is_chat]
68
- if not recent_valid:
69
- return ""
70
-
71
- lines = ["Previous Conversation Context (Use for follow-up refinements):"]
72
- for i, t in enumerate(recent_valid, 1):
73
- lines.append(f" {i}. User: \"{t.user_prompt}\"")
74
- lines.append(f" Last SQL: `{t.sql.strip()}`")
70
+ recent = self.turns[-max_turns:]
71
+ lines = ["=== Previous Chat Session Memory (Use for follow-ups & context) ==="]
72
+ for i, t in enumerate(recent, 1):
73
+ lines.append(f"Turn {i}:")
74
+ lines.append(f" User: \"{t.user_prompt}\"")
75
+ if t.sql:
76
+ lines.append(f" Assistant (SQL): {t.sql.strip()}")
77
+ elif t.assistant_response:
78
+ clean_resp = t.assistant_response.strip().replace("\n", " ")
79
+ preview = (clean_resp[:120] + "...") if len(clean_resp) > 120 else clean_resp
80
+ lines.append(f" Assistant: \"{preview}\"")
81
+ lines.append("=== End Chat Session Memory ===")
75
82
 
76
83
  return "\n".join(lines)
77
84
 
@@ -169,9 +169,10 @@ class ScriptGenerator:
169
169
  self,
170
170
  schema: DatabaseSchema,
171
171
  user_prompt: str,
172
+ conversation_history: Optional[str] = None,
172
173
  model: Optional[str] = None,
173
174
  ) -> str:
174
- """Generate a natural conversational response to the user's message."""
175
+ """Generate a natural conversational response to the user's message with full session memory."""
175
176
  table_names = [t.name for t in schema.tables]
176
177
  table_summary = ", ".join(table_names[:30])
177
178
  if len(table_names) > 30:
@@ -183,8 +184,12 @@ class ScriptGenerator:
183
184
  table_summary=table_summary if table_summary else "No tables found",
184
185
  )
185
186
 
187
+ full_prompt = user_prompt
188
+ if conversation_history:
189
+ full_prompt = f"{conversation_history}\n\nUser: {user_prompt}"
190
+
186
191
  return self.llm.generate(
187
- prompt=user_prompt,
192
+ prompt=full_prompt,
188
193
  system_prompt=system_prompt,
189
194
  model=model,
190
195
  )
@@ -184,16 +184,18 @@ class QueryPipeline:
184
184
  schema = self.connector.inspect_schema(table_names=quick_tables, include_samples=False, max_samples=0)
185
185
 
186
186
  result.schema = schema
187
+ conv_history = self.conversation.format_context_for_prompt()
187
188
  result.message = self.generator.generate_chat_response(
188
189
  schema=schema,
189
190
  user_prompt=user_prompt,
191
+ conversation_history=conv_history,
190
192
  model=self.model,
191
193
  )
192
194
  result.is_chat = True
193
195
  result.was_executed = True
194
196
  result.query_type = "chat"
195
197
  result.execution_time_ms = (time.time() - t_start) * 1000
196
- self.conversation.add_turn(user_prompt=user_prompt, sql="", is_chat=True)
198
+ self.conversation.add_turn(user_prompt=user_prompt, sql="", assistant_response=result.message, is_chat=True)
197
199
  return result
198
200
  except Exception as e:
199
201
  result.error = f"Chat generation failed: {str(e)}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dbagent-cli
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: Enterprise AI Database Copilot, Schema Graph Introspector & Autonomous Recovery Agent (CLI)
5
5
  Author: Santhosh Gupta
6
6
  Requires-Python: >=3.9
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dbagent-cli"
7
- version = "0.7.1"
7
+ version = "0.7.2"
8
8
  description = "Enterprise AI Database Copilot, Schema Graph Introspector & Autonomous Recovery Agent (CLI)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes
File without changes
File without changes