mirror of
https://github.com/langflow-ai/langflow.git
synced 2026-07-24 05:16:40 +08:00
fix: Remove redundant api key field in KB Ingest (#12624)
* fix: Remove redundant api key field in KB Ingest * Update component_index.json
This commit is contained in:
@ -3365,15 +3365,6 @@
|
||||
"is_secret": false
|
||||
}
|
||||
],
|
||||
"src/backend/tests/unit/components/files_and_knowledge/test_ingestion.py": [
|
||||
{
|
||||
"type": "Secret Keyword",
|
||||
"filename": "src/backend/tests/unit/components/files_and_knowledge/test_ingestion.py",
|
||||
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
|
||||
"is_verified": false,
|
||||
"line_number": 312
|
||||
}
|
||||
],
|
||||
"src/backend/tests/unit/components/files_and_knowledge/test_retrieval.py": [
|
||||
{
|
||||
"type": "Secret Keyword",
|
||||
@ -8414,5 +8405,5 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"generated_at": "2026-04-09T14:26:21Z"
|
||||
"generated_at": "2026-04-10T17:09:16Z"
|
||||
}
|
||||
|
||||
@ -106,6 +106,16 @@ class TestKnowledgeIngestionComponent(ComponentTestBaseWithClient):
|
||||
with pytest.raises(ValueError, match="Column 'nonexistent' not found in DataFrame"):
|
||||
component._validate_column_config(data_df)
|
||||
|
||||
def test_new_knowledge_dialog_uses_provider_credentials(self, component_class, default_kwargs):
|
||||
"""Test the create-knowledge dialog no longer exposes a redundant API key override."""
|
||||
component = component_class(**default_kwargs)
|
||||
dialog_inputs = component.inputs[0].dialog_inputs["fields"]["data"]["node"]
|
||||
embedding_model_input = dialog_inputs["template"]["02_embedding_model"]
|
||||
|
||||
assert dialog_inputs["field_order"] == ["01_new_kb_name", "02_embedding_model"]
|
||||
assert "03_api_key" not in dialog_inputs["template"]
|
||||
assert "configured credentials" in embedding_model_input.info
|
||||
|
||||
@patch("lfx.components.files_and_knowledge.ingestion.get_settings_service")
|
||||
@patch("lfx.components.files_and_knowledge.ingestion.encrypt_api_key")
|
||||
def test_build_embedding_metadata(self, mock_encrypt, mock_get_settings, component_class, default_kwargs):
|
||||
@ -309,7 +319,6 @@ class TestKnowledgeIngestionComponent(ComponentTestBaseWithClient):
|
||||
field_value = {
|
||||
"01_new_kb_name": "new_test_kb",
|
||||
"02_embedding_model": model_selection,
|
||||
"03_api_key": "test-key",
|
||||
}
|
||||
|
||||
# Mock embedding validation
|
||||
@ -322,8 +331,8 @@ class TestKnowledgeIngestionComponent(ComponentTestBaseWithClient):
|
||||
|
||||
assert result["knowledge_base"]["value"] == "new_test_kb"
|
||||
assert "new_test_kb" in result["knowledge_base"]["options"]
|
||||
assert mock_get_embeddings.call_args.kwargs["api_key"] == "test-key"
|
||||
assert mock_save_metadata.call_args.kwargs["api_key"] == "test-key"
|
||||
assert "api_key" not in mock_get_embeddings.call_args.kwargs
|
||||
assert "api_key" not in mock_save_metadata.call_args.kwargs
|
||||
|
||||
@patch("lfx.components.files_and_knowledge.ingestion.get_embeddings")
|
||||
async def test_build_kb_info_with_message_input(self, mock_get_embeddings, component_class, default_kwargs):
|
||||
@ -353,7 +362,6 @@ class TestKnowledgeIngestionComponent(ComponentTestBaseWithClient):
|
||||
field_value = {
|
||||
"01_new_kb_name": "invalid@name", # Invalid character
|
||||
"02_embedding_model": "sentence-transformers/all-MiniLM-L6-v2",
|
||||
"03_api_key": None,
|
||||
}
|
||||
|
||||
with pytest.raises(ValueError, match="Invalid knowledge base name"):
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -87,7 +87,6 @@ class KnowledgeIngestionComponent(Component):
|
||||
"field_order": [
|
||||
"01_new_kb_name",
|
||||
"02_embedding_model",
|
||||
"03_api_key",
|
||||
],
|
||||
"template": {
|
||||
"01_new_kb_name": StrInput(
|
||||
@ -99,17 +98,13 @@ class KnowledgeIngestionComponent(Component):
|
||||
"02_embedding_model": ModelInput(
|
||||
name="embedding_model",
|
||||
display_name="Choose Embedding Model",
|
||||
info="Select the embedding model to use for this knowledge base.",
|
||||
info=(
|
||||
"Select the embedding model to use for this knowledge base. "
|
||||
"Langflow uses the configured credentials for that model provider."
|
||||
),
|
||||
required=True,
|
||||
model_type="embedding",
|
||||
),
|
||||
"03_api_key": SecretStrInput(
|
||||
name="api_key",
|
||||
display_name="Embedding Provider API Key",
|
||||
info="Optional API key override used to validate and save this knowledge base.",
|
||||
required=False,
|
||||
advanced=True,
|
||||
),
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -254,7 +249,7 @@ class KnowledgeIngestionComponent(Component):
|
||||
Args:
|
||||
model_selection: Model selection list from ModelInput
|
||||
(e.g. [{'name': ..., 'provider': ..., 'metadata': ...}])
|
||||
api_key: Optional API key override.
|
||||
api_key: Optional runtime API key override.
|
||||
"""
|
||||
model_dict = model_selection[0] if isinstance(model_selection, list) else model_selection
|
||||
embedding_model = model_dict.get("name", "")
|
||||
@ -718,13 +713,10 @@ class KnowledgeIngestionComponent(Component):
|
||||
if isinstance(model_selection, dict):
|
||||
model_selection = [model_selection]
|
||||
|
||||
api_key = field_value.get("03_api_key") or None
|
||||
|
||||
# Build and validate the embedding model via the shared utility
|
||||
embed_model = get_embeddings(
|
||||
model=model_selection,
|
||||
user_id=self.user_id,
|
||||
api_key=api_key,
|
||||
)
|
||||
|
||||
# Try to generate a dummy embedding to validate without blocking the event loop
|
||||
@ -749,7 +741,6 @@ class KnowledgeIngestionComponent(Component):
|
||||
self._save_embedding_metadata(
|
||||
kb_path=kb_path,
|
||||
model_selection=model_selection,
|
||||
api_key=api_key,
|
||||
)
|
||||
|
||||
# Update the knowledge base options dynamically
|
||||
|
||||
Reference in New Issue
Block a user