docs: Lots of documentation improvements

This commit is contained in:
LUIS NOVO 2026-01-04 11:42:13 -03:00
parent ea7a41077b
commit 472d0e47c3
14 changed files with 1448 additions and 1036 deletions

View file

@ -8,6 +8,7 @@ from fastapi.testclient import TestClient
def client():
"""Create test client after environment variables have been cleared by conftest."""
from api.main import app
return TestClient(app)
@ -17,48 +18,66 @@ class TestModelCreation:
@pytest.mark.asyncio
@patch("open_notebook.database.repository.repo_query")
@patch("api.routers.models.Model.save")
async def test_create_duplicate_model_same_case(self, mock_save, mock_repo_query, client):
async def test_create_duplicate_model_same_case(
self, mock_save, mock_repo_query, client
):
"""Test that creating a duplicate model with same case returns 400."""
# Mock repo_query to return a duplicate model
mock_repo_query.return_value = [{"id": "model:123", "name": "gpt-4", "provider": "openai", "type": "language"}]
mock_repo_query.return_value = [
{
"id": "model:123",
"name": "gpt-4",
"provider": "openai",
"type": "language",
}
]
# Attempt to create duplicate
response = client.post(
"/api/models",
json={
"name": "gpt-4",
"provider": "openai",
"type": "language"
}
json={"name": "gpt-4", "provider": "openai", "type": "language"},
)
assert response.status_code == 400
assert response.json()["detail"] == "Model 'gpt-4' already exists for provider 'openai'"
assert (
response.json()["detail"]
== "Model 'gpt-4' already exists for provider 'openai'"
)
@pytest.mark.asyncio
@patch("open_notebook.database.repository.repo_query")
@patch("api.routers.models.Model.save")
async def test_create_duplicate_model_different_case(self, mock_save, mock_repo_query, client):
async def test_create_duplicate_model_different_case(
self, mock_save, mock_repo_query, client
):
"""Test that creating a duplicate model with different case returns 400."""
# Mock repo_query to return a duplicate model (case-insensitive match)
mock_repo_query.return_value = [{"id": "model:123", "name": "gpt-4", "provider": "openai", "type": "language"}]
mock_repo_query.return_value = [
{
"id": "model:123",
"name": "gpt-4",
"provider": "openai",
"type": "language",
}
]
# Attempt to create duplicate with different case
response = client.post(
"/api/models",
json={
"name": "GPT-4",
"provider": "OpenAI",
"type": "language"
}
json={"name": "GPT-4", "provider": "OpenAI", "type": "language"},
)
assert response.status_code == 400
assert response.json()["detail"] == "Model 'GPT-4' already exists for provider 'OpenAI'"
assert (
response.json()["detail"]
== "Model 'GPT-4' already exists for provider 'OpenAI'"
)
@pytest.mark.asyncio
@patch("open_notebook.database.repository.repo_query")
async def test_create_same_model_name_different_provider(self, mock_repo_query, client):
async def test_create_same_model_name_different_provider(
self, mock_repo_query, client
):
"""Test that creating a model with same name but different provider is allowed."""
from open_notebook.ai.models import Model
@ -66,15 +85,11 @@ class TestModelCreation:
mock_repo_query.return_value = []
# Patch the save method on the Model class
with patch.object(Model, 'save', new_callable=AsyncMock) as mock_save:
with patch.object(Model, "save", new_callable=AsyncMock) as mock_save:
# Attempt to create same model name with different provider (anthropic)
response = client.post(
"/api/models",
json={
"name": "gpt-4",
"provider": "anthropic",
"type": "language"
}
json={"name": "gpt-4", "provider": "anthropic", "type": "language"},
)
# Should succeed because provider is different
@ -124,7 +139,9 @@ class TestModelsProviderAvailability:
@patch("api.routers.models.os.environ.get")
@patch("api.routers.models.AIFactory.get_available_providers")
def test_mode_specific_env_vars_llm_embedding(self, mock_esperanto, mock_env, client):
def test_mode_specific_env_vars_llm_embedding(
self, mock_esperanto, mock_env, client
):
"""Test mode-specific env vars (LLM + EMBEDDING) enable only those 2 modes."""
# Mock environment: only LLM and EMBEDDING specific vars are set
@ -193,7 +210,9 @@ class TestModelsProviderAvailability:
@patch("api.routers.models.os.environ.get")
@patch("api.routers.models.AIFactory.get_available_providers")
def test_mixed_config_generic_and_mode_specific(self, mock_esperanto, mock_env, client):
def test_mixed_config_generic_and_mode_specific(
self, mock_esperanto, mock_env, client
):
"""Test mixed config: generic + mode-specific (generic should enable all)."""
# Mock environment: both generic and mode-specific vars are set