dbagent-cli 0.6.0__tar.gz → 0.6.1__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 (75) hide show
  1. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/PKG-INFO +1 -1
  2. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/__init__.py +1 -1
  3. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/cli.py +48 -16
  4. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/llm/gemini_provider.py +4 -5
  5. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent_cli.egg-info/PKG-INFO +1 -1
  6. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/pyproject.toml +1 -1
  7. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/README.md +0 -0
  8. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/agent/confidence.py +0 -0
  9. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/agent/conversation.py +0 -0
  10. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/agent/doctor.py +0 -0
  11. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/agent/error_classifier.py +0 -0
  12. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/agent/generator.py +0 -0
  13. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/agent/pipeline.py +0 -0
  14. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/agent/recommender.py +0 -0
  15. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/agent/validator.py +0 -0
  16. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/config.py +0 -0
  17. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/connectors/base.py +0 -0
  18. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/connectors/factory.py +0 -0
  19. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/connectors/mongo.py +0 -0
  20. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/connectors/relational.py +0 -0
  21. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/execution/__init__.py +0 -0
  22. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/execution/cache.py +0 -0
  23. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/execution/changeset.py +0 -0
  24. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/execution/cost.py +0 -0
  25. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/execution/recovery.py +0 -0
  26. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/execution/sandbox.py +0 -0
  27. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/execution/streaming.py +0 -0
  28. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/llm/auto_setup.py +0 -0
  29. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/llm/base.py +0 -0
  30. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/llm/factory.py +0 -0
  31. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/llm/groq_provider.py +0 -0
  32. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/llm/mock_provider.py +0 -0
  33. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/llm/ollama_provider.py +0 -0
  34. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/llm/openrouter_provider.py +0 -0
  35. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/schema/cache.py +0 -0
  36. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/schema/formatter.py +0 -0
  37. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/schema/graph.py +0 -0
  38. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/schema/models.py +0 -0
  39. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/schema/retriever.py +0 -0
  40. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/schema/selector.py +0 -0
  41. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/security/__init__.py +0 -0
  42. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/security/audit.py +0 -0
  43. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/security/environment.py +0 -0
  44. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/security/masking.py +0 -0
  45. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/security/modes.py +0 -0
  46. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/security/rbac.py +0 -0
  47. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/semantic/__init__.py +0 -0
  48. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/semantic/dictionary.py +0 -0
  49. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/semantic/templates.py +0 -0
  50. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/sql/__init__.py +0 -0
  51. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/sql/optimizer.py +0 -0
  52. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/sql/validator.py +0 -0
  53. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/ui/chat_screen.py +0 -0
  54. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/ui/console.py +0 -0
  55. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/ui/grid_window.py +0 -0
  56. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/ui/viewer.py +0 -0
  57. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent/ui/visualizer.py +0 -0
  58. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent_cli.egg-info/SOURCES.txt +0 -0
  59. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent_cli.egg-info/dependency_links.txt +0 -0
  60. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent_cli.egg-info/entry_points.txt +0 -0
  61. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent_cli.egg-info/requires.txt +0 -0
  62. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/dbagent_cli.egg-info/top_level.txt +0 -0
  63. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/setup.cfg +0 -0
  64. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_cache.py +0 -0
  65. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_cli.py +0 -0
  66. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_connectors.py +0 -0
  67. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_doctor_and_viz.py +0 -0
  68. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_generator.py +0 -0
  69. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_graph.py +0 -0
  70. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_recovery.py +0 -0
  71. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_safety.py +0 -0
  72. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_sandbox.py +0 -0
  73. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_schema.py +0 -0
  74. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_security.py +0 -0
  75. {dbagent_cli-0.6.0 → dbagent_cli-0.6.1}/tests/test_semantic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dbagent-cli
3
- Version: 0.6.0
3
+ Version: 0.6.1
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.6.0"
5
+ __version__ = "0.6.1"
6
6
  __author__ = "Santhosh Gupta"
@@ -531,9 +531,9 @@ def chat_command(
531
531
  console.print(" [bold]:doctor[/bold] -> Run database health diagnostics")
532
532
  console.print(" [bold]:mode <name>[/bold] -> Switch mode (SAFE, READ_ONLY, CONFIRM, SANDBOX, ADMIN)")
533
533
  console.print(" [bold]:changes[/bold] -> List recent write ChangeSets")
534
- console.print(" [bold]:provider <name>[/bold] -> Switch AI provider (ollama, gemini, groq, openrouter)")
535
- console.print(" [bold]:model <name>[/bold] -> Switch active model name (e.g. gemini-3.6-flash)")
536
- console.print(" [bold]:models[/bold] -> Show active AI provider and model status")
534
+ console.print(" [bold]:provider <name>[/bold] -> Switch AI provider (gemini, ollama, groq, openrouter)")
535
+ console.print(" [bold]:models[/bold] -> View list of available AI models & speed benchmarks")
536
+ console.print(" [bold]:model <num|name>[/bold] -> Switch active model (:model 1, :model 3.7, :model 3.6)")
537
537
  console.print(" [bold]:page <n>[/bold] -> View column page <n> for wide multi-column tables")
538
538
  console.print(" [bold]:card[/bold] -> View last result in expanded vertical card format (all columns)")
539
539
  console.print(" [bold]:wide[/bold] -> Force-show all columns in terminal (zoom out)")
@@ -699,21 +699,53 @@ def chat_command(
699
699
  print_error(f"Unknown provider '{cmd_arg}'. Supported: ollama, gemini, groq, openrouter")
700
700
  continue
701
701
 
702
- if cmd_name == ":model":
703
- if not cmd_arg:
704
- curr_model = model or getattr(llm, "default_model", "default")
705
- console.print(f"Active Model: [bold green]{curr_model}[/bold green] (Provider: {llm.name})")
706
- console.print("[dim]Usage: [bold]:model <model_name>[/bold][/dim]")
702
+ if cmd_name in [":model", ":models", ":providers", ":ai"]:
703
+ avail_models = llm.list_models() if hasattr(llm, "list_models") else []
704
+ curr_model = model or getattr(llm, "default_model", "default")
705
+
706
+ # If no arg passed or :models/:providers called, show rich model selection menu
707
+ if not cmd_arg or cmd_name in [":models", ":providers", ":ai"]:
708
+ console.print(f"\n[bold cyan]Active AI Provider:[/bold cyan] [bold white]{llm.name}[/bold white]")
709
+ console.print(f"[bold cyan]Active Model:[/bold cyan] [bold green]{curr_model}[/bold green]\n")
710
+ if avail_models:
711
+ console.print(f"[bold]Available Models for {llm.name}:[/bold]")
712
+ model_descriptions = {
713
+ "gemini-flash-lite-latest": "⚡ Ultra-Fast (~0.8s) • Recommended for instant chat & queries",
714
+ "gemini-3.6-flash": "⚡ High Quality (~3.5s) • Strong SQL reasoning & accuracy",
715
+ "gemini-3.7-flash": "🧠 Deep Reasoning (~13s) • Latest flagship model",
716
+ "gemini-3.1-flash-lite": "⚡ Fast Lite (~4.0s) • Low latency",
717
+ "gemini-flash-latest": "⚡ Standard Flash (~7.0s)",
718
+ }
719
+ for idx, m_name in enumerate(avail_models, 1):
720
+ is_active = " [bold green]✓ Active[/bold green]" if m_name == curr_model else ""
721
+ desc = model_descriptions.get(m_name, "")
722
+ desc_str = f" - [dim]{desc}[/dim]" if desc else ""
723
+ console.print(f" [bold cyan]{idx}[/bold cyan]. [bold white]{m_name}[/bold white]{desc_str}{is_active}")
724
+ console.print("\n[dim]Quick Switch: [bold]:model 1[/bold] (ultra-fast) | [bold]:model 3.7[/bold] | [bold]:model 3.6[/bold] | [bold]:model <name>[/bold][/dim]\n")
707
725
  continue
708
- model = cmd_arg
709
- print_success(f"Switched active model to [bold cyan]{model}[/bold cyan] (Provider: {llm.name})")
710
- continue
711
726
 
712
- if cmd_name in [":models", ":providers", ":ai"]:
713
- curr_model = model or getattr(llm, "default_model", "default")
714
- console.print(f"\n[bold cyan]Active AI Provider:[/bold cyan] [bold white]{llm.name}[/bold white]")
715
- console.print(f"[bold cyan]Active Model:[/bold cyan] [bold green]{curr_model}[/bold green]")
716
- console.print("[dim]Switch anytime: [bold]:provider <ollama|gemini|groq|openrouter>[/bold] or [bold]:model <name>[/bold][/dim]\n")
727
+ # Handle numeric shortcut or name shortcut
728
+ target_model = cmd_arg.strip()
729
+ if target_model.isdigit() and avail_models:
730
+ choice_idx = int(target_model) - 1
731
+ if 0 <= choice_idx < len(avail_models):
732
+ target_model = avail_models[choice_idx]
733
+ elif target_model in ["3.7", "37"]:
734
+ target_model = "gemini-3.7-flash"
735
+ elif target_model in ["3.6", "36"]:
736
+ target_model = "gemini-3.6-flash"
737
+ elif target_model in ["lite", "fast", "flash-lite", "1"]:
738
+ target_model = "gemini-flash-lite-latest"
739
+ elif target_model in ["3.1"]:
740
+ target_model = "gemini-3.1-flash-lite"
741
+ elif avail_models:
742
+ matches = [m for m in avail_models if target_model.lower() in m.lower()]
743
+ if matches:
744
+ target_model = matches[0]
745
+
746
+ model = target_model
747
+ pipeline.model = model
748
+ print_success(f"Switched active model to [bold cyan]{model}[/bold cyan] (Provider: {llm.name})")
717
749
  continue
718
750
 
719
751
  if cmd_name == ":explain":
@@ -14,19 +14,18 @@ class GeminiProvider(BaseLLMProvider):
14
14
  """Google Gemini LLM provider (Free Tier available)."""
15
15
 
16
16
  FALLBACK_MODELS = [
17
+ "gemini-flash-lite-latest",
17
18
  "gemini-3.6-flash",
18
19
  "gemini-3.7-flash",
19
- "gemini-3.5-flash",
20
+ "gemini-3.1-flash-lite",
20
21
  "gemini-flash-latest",
21
- "gemini-pro-latest",
22
- "gemini-2.5-flash",
23
22
  ]
24
23
 
25
24
  def __init__(self, api_key: Optional[str] = None, default_model: str = "gemini-3.6-flash"):
26
25
  self.api_key = api_key or os.getenv("GEMINI_API_KEY")
27
26
  self.default_model = default_model
28
27
  self._session = requests.Session()
29
- self._session.headers.update({"User-Agent": "DB-Agent/0.5.0"})
28
+ self._session.headers.update({"User-Agent": "DB-Agent/0.6.0"})
30
29
 
31
30
  @property
32
31
  def name(self) -> str:
@@ -117,7 +116,7 @@ class GeminiProvider(BaseLLMProvider):
117
116
  else:
118
117
  raise RuntimeError(f"Gemini API error ({response.status_code}): {response.text}")
119
118
  else:
120
- response = self._session.post(endpoint, json=payload, timeout=30)
119
+ response = self._session.post(endpoint, json=payload, timeout=15)
121
120
  if response.status_code == 200:
122
121
  data = response.json()
123
122
  candidates = data.get("candidates", [])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dbagent-cli
3
- Version: 0.6.0
3
+ Version: 0.6.1
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.6.0"
7
+ version = "0.6.1"
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