new feature: Integration with kbdb Autonomous

This commit is contained in:
T3782834
2026-08-26 10:15:51 -03:00
parent ac18d68eaf
commit faf5ca55ba
405 changed files with 2368 additions and 138 deletions

View File

@@ -0,0 +1,117 @@
from types import SimpleNamespace
import pytest
from agent_framework.rag.rag_service import RagService
def _settings(**overrides):
data = dict(
RAG_PROVIDER="kbdb", RAG_TOP_K=5,
KBDB_DB_USER="kb_user", KBDB_DB_PASSWORD="kb_pwd", KBDB_DB_DSN="kb_tp",
KBDB_DB_WALLET_LOCATION=None, KBDB_DB_WALLET_PASSWORD=None,
ADB_USER=None, ADB_PASSWORD=None, ADB_DSN=None,
ADB_WALLET_LOCATION=None, ADB_WALLET_PASSWORD=None,
KBDB_SEARCH_TYPE="hybrid", KBDB_NODE_EXPANSION=True,
KBDB_NODE_MAX_RELATED=8, KBDB_GRAPH_CROSS_REF=False,
KBDB_MAX_CROSS_REF_HOPS=1, KBDB_DOCUMENT_TYPE="customer_safe",
KBDB_METADATA_JSON=None, KBDB_MIN_SCORE=None,
)
data.update(overrides)
return SimpleNamespace(**data)
@pytest.mark.asyncio
async def test_kbdb_provider_adapts_serving_envelope(monkeypatch):
service = RagService(_settings())
def fake_search(query, k):
return {
"search_type": "hybrid", "confidence": "high", "low_confidence": False,
"top_score": 78.4, "warnings": [],
"seeds": [{"unit_id": 11, "rank": 1, "score": 78.4}],
"units": [
{"unit_id": 10, "content": "passo anterior", "provenance": "parent"},
{"unit_id": 11, "content": "resposta principal", "provenance": "seed"},
],
"documents": [{"document_id": 7, "title": "Politica"}],
}
monkeypatch.setattr(service._kbdb, "_search_sync", fake_search)
result = await service.retrieve("qual a regra?", namespace="billing_agent")
assert [d.id for d in result.documents] == ["10", "11"]
assert result.documents[1].score == 78.4
assert result.metadata["provider"] == "kbdb"
assert result.metadata["confidence"] == "high"
assert "resposta principal" in result.as_prompt_context()
@pytest.mark.asyncio
async def test_kbdb_provider_is_serving_only():
service = RagService(_settings())
with pytest.raises(RuntimeError, match="serving-only"):
await service.add_documents(["texto"])
def test_kbdb_connection_uses_same_wallet_semantics_without_adb_fallback(monkeypatch):
import sys
from agent_framework.rag.kbdb_service import KbdbRagService
captured = {}
class Defaults:
fetch_lobs = True
class Connection:
def close(self):
captured["closed"] = True
class FakeOracleDb:
defaults = Defaults()
@staticmethod
def connect(**kwargs):
captured.update(kwargs)
return Connection()
monkeypatch.setitem(sys.modules, "oracledb", FakeOracleDb)
settings = _settings(
KBDB_DB_USER="kb_user",
KBDB_DB_PASSWORD="kb_pwd",
KBDB_DB_DSN="kb_tp",
KBDB_DB_WALLET_LOCATION="/wallet/kb",
KBDB_DB_WALLET_PASSWORD="wallet_pwd",
ADB_USER="framework_user",
ADB_PASSWORD="framework_pwd",
ADB_DSN="framework_high",
ADB_WALLET_LOCATION="/wallet/framework",
ADB_WALLET_PASSWORD="framework_wallet_pwd",
)
service = KbdbRagService(settings)
with service._connect():
pass
assert captured["user"] == "kb_user"
assert captured["password"] == "kb_pwd"
assert captured["dsn"] == "kb_tp"
assert captured["config_dir"] == "/wallet/kb"
assert captured["wallet_location"] == "/wallet/kb"
assert captured["wallet_password"] == "wallet_pwd"
assert captured["closed"] is True
def test_kbdb_does_not_fallback_to_framework_adb_credentials():
from agent_framework.rag.kbdb_service import KbdbRagService
settings = _settings(
KBDB_DB_USER=None,
KBDB_DB_PASSWORD=None,
KBDB_DB_DSN=None,
ADB_USER="framework_user",
ADB_PASSWORD="framework_pwd",
ADB_DSN="framework_high",
)
with pytest.raises(RuntimeError, match="KBDB_DB_USER"):
KbdbRagService(settings)