Files
wehub-resource-sync 75c67150d0
build / build (3.13) (push) Has been cancelled
release-please / release-please (push) Has been cancelled
release-please / build wheels (macos-aarch64) (push) Has been cancelled
release-please / build wheels (macos-x86_64) (push) Has been cancelled
release-please / build wheels (windows-x86_64) (push) Has been cancelled
release-please / build wheels (linux-aarch64) (push) Has been cancelled
release-please / build wheels (linux-x86_64) (push) Has been cancelled
release-please / build sdist (push) Has been cancelled
release-please / publish release artifacts (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:36:10 +08:00

229 lines
7.1 KiB
Python

"""
Test script to verify Nebius AI works with MemU.
Before running:
1. Get your Nebius API key from https://tokenfactory.nebius.com
2. Set environment variable: NEBIUS_API_KEY=your_key_here
Usage:
cd memU
set NEBIUS_API_KEY=your_key_here
python examples/test_nebius_provider.py
Nebius provides:
- Chat models: Qwen, DeepSeek, Llama, etc.
- Embedding models: BGE, E5, Qwen3-Embedding
- All via OpenAI-compatible API
"""
import asyncio
import os
import sys
# Add src to path for local development
src_path = os.path.abspath("src")
sys.path.insert(0, src_path)
# Nebius configuration
NEBIUS_BASE_URL = "https://api.tokenfactory.nebius.com/v1/"
# Available chat models (pick one):
# - "Qwen/Qwen3-30B-A3B-Instruct-2507" (fast, cheap)
# - "Qwen/Qwen3-32B" (good balance)
# - "deepseek-ai/DeepSeek-V3-0324" (powerful)
# - "meta-llama/Llama-3.3-70B-Instruct" (reliable)
NEBIUS_CHAT_MODEL = "Qwen/Qwen3-30B-A3B-Instruct-2507"
# Available embedding models:
# - "BAAI/bge-multilingual-gemma2" (3584 dims, multilingual)
# - "BAAI/BGE-ICL" (4096 dims)
# - "intfloat/e5-mistral-7b-instruct" (4096 dims)
# - "Qwen/Qwen3-Embedding-8B" (4096 dims)
NEBIUS_EMBED_MODEL = "BAAI/bge-multilingual-gemma2"
async def test_nebius_chat():
"""Test Nebius chat completion."""
from openai import AsyncOpenAI
api_key = os.environ.get("NEBIUS_API_KEY")
if not api_key:
print("ERROR: Set NEBIUS_API_KEY environment variable")
return False
client = AsyncOpenAI(
base_url=NEBIUS_BASE_URL,
api_key=api_key,
)
print(f"Testing Nebius Chat API ({NEBIUS_CHAT_MODEL})...")
try:
response = await client.chat.completions.create(
model=NEBIUS_CHAT_MODEL,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Say hello in one sentence."},
],
max_tokens=50,
)
content = response.choices[0].message.content
# Truncate long responses for display
display = content[:100] + "..." if len(content) > 100 else content
print(f" Response: {display}")
print(" ✓ Chat API works!")
return True
except Exception as e:
print(f" ✗ Chat API failed: {e}")
return False
async def test_nebius_embeddings():
"""Test Nebius embeddings API."""
from openai import AsyncOpenAI
api_key = os.environ.get("NEBIUS_API_KEY")
if not api_key:
print("ERROR: Set NEBIUS_API_KEY environment variable")
return False
client = AsyncOpenAI(
base_url=NEBIUS_BASE_URL,
api_key=api_key,
)
print(f"\nTesting Nebius Embeddings API ({NEBIUS_EMBED_MODEL})...")
try:
response = await client.embeddings.create(
model=NEBIUS_EMBED_MODEL,
input=["Hello world", "This is a test"],
)
print(f" Embedding dimensions: {len(response.data[0].embedding)}")
print(f" Number of embeddings: {len(response.data)}")
print(" ✓ Embeddings API works!")
return True
except Exception as e:
print(f" ✗ Embeddings API failed: {e}")
return False
async def test_memu_with_nebius():
"""Test MemU with Nebius as the LLM provider."""
from memu.app import MemoryService
api_key = os.environ.get("NEBIUS_API_KEY")
if not api_key:
print("ERROR: Set NEBIUS_API_KEY environment variable")
return False
print("\nTesting MemU with Nebius provider...")
# Configure MemU to use Nebius (using dict config like example_1)
llm_profiles = {
"default": {
"provider": "openai",
"base_url": NEBIUS_BASE_URL,
"api_key": api_key,
"chat_model": NEBIUS_CHAT_MODEL,
"client_backend": "sdk",
},
"embedding": {
"provider": "openai",
"base_url": NEBIUS_BASE_URL,
"api_key": api_key,
"embed_model": NEBIUS_EMBED_MODEL,
"client_backend": "sdk",
},
}
try:
# Create MemU service with Nebius
service = MemoryService(llm_profiles=llm_profiles)
print(" ✓ MemoryService initialized with Nebius!")
# Test memorize with a file (create temp file)
print("\n Testing memorize...")
import tempfile
with tempfile.NamedTemporaryFile(mode="w", suffix=".txt", delete=False, encoding="utf-8") as f:
f.write("User likes Python programming and AI development. They prefer dark mode in their IDE.")
temp_file = f.name
try:
result = await service.memorize(
resource_url=temp_file,
modality="text",
)
items_count = len(result.get("items", []))
categories_count = len(result.get("categories", []))
print(f" ✓ Memorized! Items: {items_count}, Categories: {categories_count}")
# Show what was extracted
for item in result.get("items", [])[:3]:
summary = item.get("summary", "")[:80]
print(f" - {summary}...")
finally:
os.unlink(temp_file)
# Test retrieve
print("\n Testing retrieve...")
retrieve_result = await service.retrieve(
queries=[{"role": "user", "content": "What programming language does the user like?"}]
)
print(f" ✓ Retrieved! Needs retrieval: {retrieve_result.get('needs_retrieval')}")
items = retrieve_result.get("items", [])
if items:
print(f" Found {len(items)} relevant items:")
for item in items[:3]:
if isinstance(item, dict):
summary = item.get("summary", str(item))[:60]
else:
summary = str(item)[:60]
print(f" - {summary}...")
print("\n" + "=" * 60)
print("✓ SUCCESS: MemU works with Nebius!")
print("=" * 60)
return True
except Exception as e:
print(f" ✗ MemU with Nebius failed: {e}")
import traceback
traceback.print_exc()
return False
async def main():
print("=" * 60)
print("Nebius AI + MemU Integration Test")
print("=" * 60)
print(f"Base URL: {NEBIUS_BASE_URL}")
print(f"Chat Model: {NEBIUS_CHAT_MODEL}")
print(f"Embed Model: {NEBIUS_EMBED_MODEL}")
print("=" * 60 + "\n")
# Check for API key first
if not os.environ.get("NEBIUS_API_KEY"):
print("ERROR: NEBIUS_API_KEY environment variable not set!")
print("\nTo get your API key:")
print("1. Go to https://tokenfactory.nebius.com")
print("2. Create an account / Log in")
print("3. Get your API key")
print("4. Run: set NEBIUS_API_KEY=your_key_here")
return
# Test individual APIs first
chat_ok = await test_nebius_chat()
embed_ok = await test_nebius_embeddings()
if chat_ok and embed_ok:
# Test full MemU integration
await test_memu_with_nebius()
else:
print("\n" + "=" * 60)
print("✗ FAILED: Basic API tests failed, skipping MemU test")
print("=" * 60)
if __name__ == "__main__":
asyncio.run(main())