rosetta-cli 2.0.21__tar.gz → 3.0.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.
- {rosetta_cli-2.0.21/rosetta_cli.egg-info → rosetta_cli-3.0.1}/PKG-INFO +12 -12
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/README.md +11 -11
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/pyproject.toml +1 -1
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/cli.py +4 -4
- rosetta_cli-3.0.1/rosetta_cli/commands/__init__.py +5 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/commands/base_command.py +5 -5
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/commands/parse_command.py +19 -2
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/commands/publish_command.py +2 -2
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/ragflow_client.py +6 -6
- rosetta_cli-2.0.21/rosetta_cli/ims_auth.py → rosetta_cli-3.0.1/rosetta_cli/rosetta_auth.py +4 -4
- rosetta_cli-2.0.21/rosetta_cli/ims_config.py → rosetta_cli-3.0.1/rosetta_cli/rosetta_config.py +16 -16
- rosetta_cli-2.0.21/rosetta_cli/ims_publisher.py → rosetta_cli-3.0.1/rosetta_cli/rosetta_publisher.py +1 -1
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/services/__init__.py +1 -1
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/services/auth_service.py +7 -7
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/services/dataset_service.py +3 -3
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/typing_utils.py +1 -1
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1/rosetta_cli.egg-info}/PKG-INFO +12 -12
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli.egg-info/SOURCES.txt +4 -4
- rosetta_cli-2.0.21/rosetta_cli/commands/__init__.py +0 -5
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/MANIFEST.in +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/env.template +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/__init__.py +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/__main__.py +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/commands/cleanup_command.py +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/commands/list_command.py +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/commands/verify_command.py +0 -0
- /rosetta_cli-2.0.21/rosetta_cli/ims_utils.py → /rosetta_cli-3.0.1/rosetta_cli/rosetta_utils.py +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/services/document_data.py +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli/services/document_service.py +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli.egg-info/dependency_links.txt +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli.egg-info/entry_points.txt +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli.egg-info/requires.txt +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/rosetta_cli.egg-info/top_level.txt +0 -0
- {rosetta_cli-2.0.21 → rosetta_cli-3.0.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rosetta-cli
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.1
|
|
4
4
|
Summary: Rosetta CLI for publishing knowledge base content to RAGFlow
|
|
5
5
|
Author-email: Rosetta Team <rosetta-support@griddynamics.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -65,8 +65,8 @@ src/rosetta-cli/
|
|
|
65
65
|
│ ├── cli.py # CLI entry point
|
|
66
66
|
│ ├── commands/ # Command implementations
|
|
67
67
|
│ ├── services/ # Shared business logic
|
|
68
|
-
│ ├──
|
|
69
|
-
│ ├──
|
|
68
|
+
│ ├── rosetta_config.py # Configuration management
|
|
69
|
+
│ ├── rosetta_publisher.py # Publishing orchestration
|
|
70
70
|
│ └── ragflow_client.py # RAGFlow SDK wrapper
|
|
71
71
|
├── env.template # Environment configuration template
|
|
72
72
|
├── tests/ # CLI unit tests
|
|
@@ -329,29 +329,29 @@ client.verify_connection()
|
|
|
329
329
|
client.get_system_health()
|
|
330
330
|
```
|
|
331
331
|
|
|
332
|
-
####
|
|
332
|
+
#### RosettaConfig (`rosetta_config.py`)
|
|
333
333
|
|
|
334
334
|
Configuration management with smart .env discovery:
|
|
335
335
|
|
|
336
336
|
```python
|
|
337
|
-
from rosetta_cli.
|
|
337
|
+
from rosetta_cli.rosetta_config import RosettaConfig
|
|
338
338
|
|
|
339
339
|
# Auto-discover .env (searches cwd, script dir, git root)
|
|
340
|
-
config =
|
|
340
|
+
config = RosettaConfig.from_env()
|
|
341
341
|
|
|
342
342
|
# Use specific environment
|
|
343
|
-
config =
|
|
343
|
+
config = RosettaConfig.from_env(environment="production")
|
|
344
344
|
|
|
345
345
|
# Validate configuration
|
|
346
346
|
config.validate()
|
|
347
347
|
```
|
|
348
348
|
|
|
349
|
-
#### ContentPublisher (`
|
|
349
|
+
#### ContentPublisher (`rosetta_publisher.py`)
|
|
350
350
|
|
|
351
351
|
Publishing logic with metadata extraction:
|
|
352
352
|
|
|
353
353
|
```python
|
|
354
|
-
from rosetta_cli.
|
|
354
|
+
from rosetta_cli.rosetta_publisher import ContentPublisher
|
|
355
355
|
|
|
356
356
|
publisher = ContentPublisher(client, config, workspace_root)
|
|
357
357
|
|
|
@@ -475,10 +475,10 @@ uvx rosetta-cli@latest publish ../../instructions --force
|
|
|
475
475
|
```python
|
|
476
476
|
from pathlib import Path
|
|
477
477
|
from rosetta_cli.ragflow_client import RAGFlowClient, DocumentMetadata
|
|
478
|
-
from rosetta_cli.
|
|
479
|
-
from rosetta_cli.
|
|
478
|
+
from rosetta_cli.rosetta_config import RosettaConfig
|
|
479
|
+
from rosetta_cli.rosetta_publisher import ContentPublisher
|
|
480
480
|
|
|
481
|
-
config =
|
|
481
|
+
config = RosettaConfig.from_env()
|
|
482
482
|
client = RAGFlowClient(
|
|
483
483
|
api_key=config.api_key,
|
|
484
484
|
base_url=config.base_url,
|
|
@@ -38,8 +38,8 @@ src/rosetta-cli/
|
|
|
38
38
|
│ ├── cli.py # CLI entry point
|
|
39
39
|
│ ├── commands/ # Command implementations
|
|
40
40
|
│ ├── services/ # Shared business logic
|
|
41
|
-
│ ├──
|
|
42
|
-
│ ├──
|
|
41
|
+
│ ├── rosetta_config.py # Configuration management
|
|
42
|
+
│ ├── rosetta_publisher.py # Publishing orchestration
|
|
43
43
|
│ └── ragflow_client.py # RAGFlow SDK wrapper
|
|
44
44
|
├── env.template # Environment configuration template
|
|
45
45
|
├── tests/ # CLI unit tests
|
|
@@ -302,29 +302,29 @@ client.verify_connection()
|
|
|
302
302
|
client.get_system_health()
|
|
303
303
|
```
|
|
304
304
|
|
|
305
|
-
####
|
|
305
|
+
#### RosettaConfig (`rosetta_config.py`)
|
|
306
306
|
|
|
307
307
|
Configuration management with smart .env discovery:
|
|
308
308
|
|
|
309
309
|
```python
|
|
310
|
-
from rosetta_cli.
|
|
310
|
+
from rosetta_cli.rosetta_config import RosettaConfig
|
|
311
311
|
|
|
312
312
|
# Auto-discover .env (searches cwd, script dir, git root)
|
|
313
|
-
config =
|
|
313
|
+
config = RosettaConfig.from_env()
|
|
314
314
|
|
|
315
315
|
# Use specific environment
|
|
316
|
-
config =
|
|
316
|
+
config = RosettaConfig.from_env(environment="production")
|
|
317
317
|
|
|
318
318
|
# Validate configuration
|
|
319
319
|
config.validate()
|
|
320
320
|
```
|
|
321
321
|
|
|
322
|
-
#### ContentPublisher (`
|
|
322
|
+
#### ContentPublisher (`rosetta_publisher.py`)
|
|
323
323
|
|
|
324
324
|
Publishing logic with metadata extraction:
|
|
325
325
|
|
|
326
326
|
```python
|
|
327
|
-
from rosetta_cli.
|
|
327
|
+
from rosetta_cli.rosetta_publisher import ContentPublisher
|
|
328
328
|
|
|
329
329
|
publisher = ContentPublisher(client, config, workspace_root)
|
|
330
330
|
|
|
@@ -448,10 +448,10 @@ uvx rosetta-cli@latest publish ../../instructions --force
|
|
|
448
448
|
```python
|
|
449
449
|
from pathlib import Path
|
|
450
450
|
from rosetta_cli.ragflow_client import RAGFlowClient, DocumentMetadata
|
|
451
|
-
from rosetta_cli.
|
|
452
|
-
from rosetta_cli.
|
|
451
|
+
from rosetta_cli.rosetta_config import RosettaConfig
|
|
452
|
+
from rosetta_cli.rosetta_publisher import ContentPublisher
|
|
453
453
|
|
|
454
|
-
config =
|
|
454
|
+
config = RosettaConfig.from_env()
|
|
455
455
|
client = RAGFlowClient(
|
|
456
456
|
api_key=config.api_key,
|
|
457
457
|
base_url=config.base_url,
|
|
@@ -13,11 +13,11 @@ from .commands.list_command import ListCommand
|
|
|
13
13
|
from .commands.parse_command import ParseCommand
|
|
14
14
|
from .commands.publish_command import PublishCommand
|
|
15
15
|
from .commands.verify_command import VerifyCommand
|
|
16
|
-
from .
|
|
16
|
+
from .rosetta_config import RosettaConfig
|
|
17
17
|
from .ragflow_client import RAGFlowClient
|
|
18
18
|
from .typing_utils import CommandArgs
|
|
19
19
|
|
|
20
|
-
CommandClass: TypeAlias = Callable[[RAGFlowClient,
|
|
20
|
+
CommandClass: TypeAlias = Callable[[RAGFlowClient, RosettaConfig], BaseCommand]
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
# Command registry mapping command names to their classes
|
|
@@ -35,7 +35,7 @@ def _print_version() -> None:
|
|
|
35
35
|
print(f"Rosetta Version: {_CLI_VERSION}")
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
def execute_command(command_name: str, args: CommandArgs, client: RAGFlowClient, config:
|
|
38
|
+
def execute_command(command_name: str, args: CommandArgs, client: RAGFlowClient, config: RosettaConfig) -> int:
|
|
39
39
|
"""
|
|
40
40
|
Execute a command by name using the command registry.
|
|
41
41
|
|
|
@@ -361,7 +361,7 @@ Frontmatter Metadata (publish flow):
|
|
|
361
361
|
|
|
362
362
|
try:
|
|
363
363
|
# Load configuration
|
|
364
|
-
config =
|
|
364
|
+
config = RosettaConfig.from_env(env_file=args.env_file, environment=args.env)
|
|
365
365
|
|
|
366
366
|
# Validate configuration
|
|
367
367
|
config.validate()
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Base Command Abstract Class
|
|
3
3
|
|
|
4
|
-
Defines the interface and common functionality for all
|
|
4
|
+
Defines the interface and common functionality for all Rosetta CLI commands.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import time
|
|
8
8
|
from abc import ABC, abstractmethod
|
|
9
9
|
|
|
10
|
-
from ..
|
|
10
|
+
from ..rosetta_config import RosettaConfig
|
|
11
11
|
from ..ragflow_client import RAGFlowClient
|
|
12
12
|
from ..typing_utils import CommandArgs
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class BaseCommand(ABC):
|
|
16
16
|
"""
|
|
17
|
-
Abstract base class for all
|
|
17
|
+
Abstract base class for all Rosetta CLI commands.
|
|
18
18
|
|
|
19
19
|
Provides common functionality for authentication, timing, and error handling.
|
|
20
20
|
Each command must implement the execute() method.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
-
def __init__(self, client: RAGFlowClient, config:
|
|
23
|
+
def __init__(self, client: RAGFlowClient, config: RosettaConfig):
|
|
24
24
|
"""
|
|
25
25
|
Initialize command with RAGFlow client and configuration.
|
|
26
26
|
|
|
27
27
|
Args:
|
|
28
28
|
client: RAGFlow client instance
|
|
29
|
-
config:
|
|
29
|
+
config: Rosetta configuration
|
|
30
30
|
"""
|
|
31
31
|
self.client = client
|
|
32
32
|
self.config = config
|
|
@@ -115,6 +115,7 @@ class ParseCommand(BaseCommand):
|
|
|
115
115
|
print(f"Found {len(documents)} document(s) (force mode - parsing all)\n")
|
|
116
116
|
|
|
117
117
|
for document in documents:
|
|
118
|
+
status = self._count_parse_status(status_counts, document)
|
|
118
119
|
doc_id = getattr(document, 'id', None)
|
|
119
120
|
if doc_id:
|
|
120
121
|
docs_to_parse.append({
|
|
@@ -122,7 +123,7 @@ class ParseCommand(BaseCommand):
|
|
|
122
123
|
"name": getattr(document, 'name', 'Untitled'),
|
|
123
124
|
"dataset_id": dataset.id,
|
|
124
125
|
"folder": ".",
|
|
125
|
-
"status":
|
|
126
|
+
"status": status
|
|
126
127
|
})
|
|
127
128
|
else:
|
|
128
129
|
# Default mode: filter by status (need parsing)
|
|
@@ -131,10 +132,17 @@ class ParseCommand(BaseCommand):
|
|
|
131
132
|
statuses=["FAIL", "UNSTART", "CANCEL"],
|
|
132
133
|
limit=self.config.page_size
|
|
133
134
|
)
|
|
135
|
+
|
|
136
|
+
# Tally skipped documents from the full list so the summary reflects
|
|
137
|
+
# what this run will not re-trigger.
|
|
138
|
+
all_documents = dataset.list_documents(page_size=self.config.page_size)
|
|
139
|
+
for document in all_documents:
|
|
140
|
+
self._count_parse_status(status_counts, document)
|
|
134
141
|
|
|
135
142
|
print(f"Found {len(documents_needing_parse)} document(s) needing parsing\n")
|
|
136
143
|
|
|
137
144
|
for document in documents_needing_parse:
|
|
145
|
+
status = self._count_parse_status(status_counts, document)
|
|
138
146
|
doc_id = getattr(document, 'id', None)
|
|
139
147
|
if doc_id:
|
|
140
148
|
docs_to_parse.append({
|
|
@@ -142,10 +150,19 @@ class ParseCommand(BaseCommand):
|
|
|
142
150
|
"name": getattr(document, 'name', 'Untitled'),
|
|
143
151
|
"dataset_id": dataset.id,
|
|
144
152
|
"folder": ".",
|
|
145
|
-
"status":
|
|
153
|
+
"status": status
|
|
146
154
|
})
|
|
147
155
|
|
|
148
156
|
return docs_to_parse, status_counts
|
|
157
|
+
|
|
158
|
+
def _count_parse_status(self, status_counts: dict[str, int], document: object) -> str:
|
|
159
|
+
"""Tally a document's parse status and return it."""
|
|
160
|
+
status = getattr(document, 'run', 'UNSTART')
|
|
161
|
+
if status == 'DONE':
|
|
162
|
+
status_counts['done'] += 1
|
|
163
|
+
elif status == 'RUNNING':
|
|
164
|
+
status_counts['running'] += 1
|
|
165
|
+
return status
|
|
149
166
|
|
|
150
167
|
def _print_parse_status(self, docs_to_parse: list[JsonDict], status_counts: dict[str, int], args: CommandArgs) -> None:
|
|
151
168
|
"""Print parsing status."""
|
|
@@ -4,9 +4,9 @@ Publish Command - Upload knowledge base content to RAGFlow
|
|
|
4
4
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
|
|
7
|
-
from ..
|
|
7
|
+
from ..rosetta_publisher import ContentPublisher
|
|
8
8
|
from ..services.auth_service import AuthService
|
|
9
|
-
from ..
|
|
9
|
+
from ..rosetta_utils import resolve_workspace_root
|
|
10
10
|
|
|
11
11
|
from .base_command import BaseCommand
|
|
12
12
|
from ..typing_utils import CommandArgs
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
|
-
RAGFlow Client Wrapper for
|
|
2
|
+
RAGFlow Client Wrapper for Rosetta Publishing
|
|
3
3
|
|
|
4
|
-
This module provides a wrapper around the ragflow-sdk for
|
|
4
|
+
This module provides a wrapper around the ragflow-sdk for Rosetta-specific operations.
|
|
5
5
|
|
|
6
6
|
Key Features:
|
|
7
7
|
- Dataset management with template resolution (aia-{release})
|
|
@@ -22,7 +22,7 @@ from typing import Any, Dict, List, Optional, cast
|
|
|
22
22
|
from ragflow_sdk import RAGFlow
|
|
23
23
|
from ragflow_sdk.modules.dataset import DataSet
|
|
24
24
|
from ragflow_sdk.modules.document import Document
|
|
25
|
-
from .
|
|
25
|
+
from .rosetta_utils import retry_call
|
|
26
26
|
from .typing_utils import DatasetLike, DocumentLike, JsonDict
|
|
27
27
|
|
|
28
28
|
|
|
@@ -51,7 +51,7 @@ def _timed(label: str) -> _Timer:
|
|
|
51
51
|
|
|
52
52
|
@dataclass
|
|
53
53
|
class DocumentMetadata:
|
|
54
|
-
"""Metadata structure for
|
|
54
|
+
"""Metadata structure for Rosetta documents"""
|
|
55
55
|
tags: list[str]
|
|
56
56
|
domain: str
|
|
57
57
|
release: str
|
|
@@ -90,7 +90,7 @@ class RAGFlowClient:
|
|
|
90
90
|
Wrapper class for RAGFlow SDK operations.
|
|
91
91
|
|
|
92
92
|
Provides high-level methods for dataset and document management
|
|
93
|
-
with
|
|
93
|
+
with Rosetta-specific functionality like tag-in-title format and
|
|
94
94
|
change detection.
|
|
95
95
|
|
|
96
96
|
Usage:
|
|
@@ -572,7 +572,7 @@ class RAGFlowClient:
|
|
|
572
572
|
# Ensure dataset exists (dry_run gates the underlying create_dataset call)
|
|
573
573
|
dataset = self._ensure_dataset(
|
|
574
574
|
resolved_name,
|
|
575
|
-
f"
|
|
575
|
+
f"Rosetta Knowledge - Release {metadata.release}" if metadata.release else "Rosetta Knowledge",
|
|
576
576
|
dry_run=dry_run,
|
|
577
577
|
)
|
|
578
578
|
if dataset is None:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
2
|
+
Rosetta Authentication Module
|
|
3
3
|
|
|
4
4
|
Handles API key verification and connection management for RAGFlow.
|
|
5
5
|
|
|
@@ -9,15 +9,15 @@ Features:
|
|
|
9
9
|
- System health checks
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
from .
|
|
12
|
+
from .rosetta_config import RosettaConfig
|
|
13
13
|
from .ragflow_client import AuthenticationError, RAGFlowClient
|
|
14
14
|
from .typing_utils import JsonDict
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
class
|
|
17
|
+
class RosettaAuthManager:
|
|
18
18
|
"""Manages RAGFlow API key authentication and connection verification."""
|
|
19
19
|
|
|
20
|
-
def __init__(self, client: RAGFlowClient, config:
|
|
20
|
+
def __init__(self, client: RAGFlowClient, config: RosettaConfig):
|
|
21
21
|
"""
|
|
22
22
|
Initialize the authentication manager.
|
|
23
23
|
|
rosetta_cli-2.0.21/rosetta_cli/ims_config.py → rosetta_cli-3.0.1/rosetta_cli/rosetta_config.py
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Configuration management for
|
|
2
|
+
Configuration management for Rosetta Publishing
|
|
3
3
|
|
|
4
4
|
Handles environment variables and configuration loading for RAGFlow-based
|
|
5
|
-
|
|
5
|
+
Rosetta publishing tools.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import logging
|
|
@@ -75,9 +75,9 @@ def _first_subdomain(url: str) -> str | None:
|
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
@dataclass
|
|
78
|
-
class
|
|
78
|
+
class RosettaConfig:
|
|
79
79
|
"""
|
|
80
|
-
RAGFlow configuration for
|
|
80
|
+
RAGFlow configuration for Rosetta publishing.
|
|
81
81
|
|
|
82
82
|
Environment Variables:
|
|
83
83
|
RAGFLOW_BASE_URL: RAGFlow instance URL (e.g., http://ragflow.local)
|
|
@@ -95,11 +95,11 @@ class IMSConfig:
|
|
|
95
95
|
ENVIRONMENT: Environment name (default: "local")
|
|
96
96
|
|
|
97
97
|
Examples:
|
|
98
|
-
>>> config =
|
|
98
|
+
>>> config = RosettaConfig.from_env(".env")
|
|
99
99
|
>>> print(config.base_url)
|
|
100
100
|
http://ragflow.local
|
|
101
101
|
|
|
102
|
-
>>> config =
|
|
102
|
+
>>> config = RosettaConfig.from_env_vars()
|
|
103
103
|
>>> client = RAGFlowClient(config.api_key, config.base_url)
|
|
104
104
|
"""
|
|
105
105
|
|
|
@@ -119,7 +119,7 @@ class IMSConfig:
|
|
|
119
119
|
cls,
|
|
120
120
|
env_file: str | None = None,
|
|
121
121
|
environment: str | None = None
|
|
122
|
-
) -> "
|
|
122
|
+
) -> "RosettaConfig":
|
|
123
123
|
"""
|
|
124
124
|
Load configuration from .env file.
|
|
125
125
|
|
|
@@ -134,7 +134,7 @@ class IMSConfig:
|
|
|
134
134
|
Looks for .env.<environment> or .env files.
|
|
135
135
|
|
|
136
136
|
Returns:
|
|
137
|
-
|
|
137
|
+
RosettaConfig instance
|
|
138
138
|
|
|
139
139
|
Raises:
|
|
140
140
|
FileNotFoundError: If env file cannot be found or is not provided
|
|
@@ -142,14 +142,14 @@ class IMSConfig:
|
|
|
142
142
|
|
|
143
143
|
Examples:
|
|
144
144
|
# Explicit file path
|
|
145
|
-
>>> config =
|
|
145
|
+
>>> config = RosettaConfig.from_env("ragflow.env")
|
|
146
146
|
|
|
147
147
|
# Auto-discovery with environment
|
|
148
|
-
>>> config =
|
|
148
|
+
>>> config = RosettaConfig.from_env(environment="remote")
|
|
149
149
|
# Searches for: .env.remote, then .env
|
|
150
150
|
|
|
151
151
|
# Auto-discovery (looks for .env)
|
|
152
|
-
>>> config =
|
|
152
|
+
>>> config = RosettaConfig.from_env()
|
|
153
153
|
"""
|
|
154
154
|
# Determine which file to load
|
|
155
155
|
env_path: Path
|
|
@@ -180,7 +180,7 @@ class IMSConfig:
|
|
|
180
180
|
return cls.from_env_vars(environment=environment)
|
|
181
181
|
|
|
182
182
|
@classmethod
|
|
183
|
-
def from_env_vars(cls, environment: str | None = None) -> "
|
|
183
|
+
def from_env_vars(cls, environment: str | None = None) -> "RosettaConfig":
|
|
184
184
|
"""
|
|
185
185
|
Load configuration from environment variables.
|
|
186
186
|
|
|
@@ -192,7 +192,7 @@ class IMSConfig:
|
|
|
192
192
|
"local" when unset.
|
|
193
193
|
|
|
194
194
|
Returns:
|
|
195
|
-
|
|
195
|
+
RosettaConfig instance
|
|
196
196
|
|
|
197
197
|
Raises:
|
|
198
198
|
ValueError: If RAGFLOW_API_KEY is missing
|
|
@@ -200,7 +200,7 @@ class IMSConfig:
|
|
|
200
200
|
Examples:
|
|
201
201
|
>>> os.environ["RAGFLOW_BASE_URL"] = "http://ragflow.local"
|
|
202
202
|
>>> os.environ["RAGFLOW_API_KEY"] = "ragflow-xxx"
|
|
203
|
-
>>> config =
|
|
203
|
+
>>> config = RosettaConfig.from_env_vars()
|
|
204
204
|
"""
|
|
205
205
|
base_url = os.getenv("RAGFLOW_BASE_URL", "http://ragflow.local")
|
|
206
206
|
api_key = os.getenv("RAGFLOW_API_KEY", "")
|
|
@@ -280,7 +280,7 @@ class IMSConfig:
|
|
|
280
280
|
env_file: Path to .env file to create/update
|
|
281
281
|
|
|
282
282
|
Examples:
|
|
283
|
-
>>> config =
|
|
283
|
+
>>> config = RosettaConfig(...)
|
|
284
284
|
>>> config.save_credentials("ragflow.env")
|
|
285
285
|
"""
|
|
286
286
|
env_path = Path(env_file)
|
|
@@ -323,7 +323,7 @@ class IMSConfig:
|
|
|
323
323
|
"""String representation (masks API key)"""
|
|
324
324
|
masked_key = f"{self.api_key[:10]}..." if len(self.api_key) > 10 else "***"
|
|
325
325
|
return (
|
|
326
|
-
f"
|
|
326
|
+
f"RosettaConfig(\n"
|
|
327
327
|
f" base_url={self.base_url}\n"
|
|
328
328
|
f" api_key={masked_key}\n"
|
|
329
329
|
f" dataset_default={self.dataset_default}\n"
|
|
@@ -8,25 +8,25 @@ Eliminates code duplication across commands.
|
|
|
8
8
|
import time
|
|
9
9
|
from typing import Any, Dict, Optional
|
|
10
10
|
|
|
11
|
-
from ..
|
|
12
|
-
from ..
|
|
11
|
+
from ..rosetta_auth import RosettaAuthManager
|
|
12
|
+
from ..rosetta_config import RosettaConfig
|
|
13
13
|
from ..ragflow_client import RAGFlowClient
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class AuthService:
|
|
17
17
|
"""Service for handling authentication operations"""
|
|
18
18
|
|
|
19
|
-
def __init__(self, client: RAGFlowClient, config:
|
|
19
|
+
def __init__(self, client: RAGFlowClient, config: RosettaConfig):
|
|
20
20
|
"""
|
|
21
21
|
Initialize AuthService.
|
|
22
22
|
|
|
23
23
|
Args:
|
|
24
24
|
client: RAGFlow client instance
|
|
25
|
-
config:
|
|
25
|
+
config: Rosetta configuration
|
|
26
26
|
"""
|
|
27
27
|
self.client = client
|
|
28
28
|
self.config = config
|
|
29
|
-
self.auth_manager =
|
|
29
|
+
self.auth_manager = RosettaAuthManager(client, config)
|
|
30
30
|
|
|
31
31
|
def verify_api_key(self) -> tuple[bool, float]:
|
|
32
32
|
"""
|
|
@@ -74,13 +74,13 @@ class AuthService:
|
|
|
74
74
|
return success
|
|
75
75
|
|
|
76
76
|
@staticmethod
|
|
77
|
-
def verify_or_exit(client: RAGFlowClient, config:
|
|
77
|
+
def verify_or_exit(client: RAGFlowClient, config: RosettaConfig) -> None:
|
|
78
78
|
"""
|
|
79
79
|
Verify API key and exit if verification fails.
|
|
80
80
|
|
|
81
81
|
Args:
|
|
82
82
|
client: RAGFlow client instance
|
|
83
|
-
config:
|
|
83
|
+
config: Rosetta configuration
|
|
84
84
|
|
|
85
85
|
Raises:
|
|
86
86
|
SystemExit: If verification fails
|
|
@@ -7,20 +7,20 @@ Eliminates code duplication across commands.
|
|
|
7
7
|
|
|
8
8
|
from typing import List, Optional
|
|
9
9
|
|
|
10
|
-
from ..
|
|
10
|
+
from ..rosetta_config import RosettaConfig
|
|
11
11
|
from ..ragflow_client import RAGFlowClient
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class DatasetService:
|
|
15
15
|
"""Service for handling dataset operations"""
|
|
16
16
|
|
|
17
|
-
def __init__(self, client: RAGFlowClient, config:
|
|
17
|
+
def __init__(self, client: RAGFlowClient, config: RosettaConfig):
|
|
18
18
|
"""
|
|
19
19
|
Initialize DatasetService.
|
|
20
20
|
|
|
21
21
|
Args:
|
|
22
22
|
client: RAGFlow client instance
|
|
23
|
-
config:
|
|
23
|
+
config: Rosetta configuration
|
|
24
24
|
"""
|
|
25
25
|
self.client = client
|
|
26
26
|
self.config = config
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rosetta-cli
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.1
|
|
4
4
|
Summary: Rosetta CLI for publishing knowledge base content to RAGFlow
|
|
5
5
|
Author-email: Rosetta Team <rosetta-support@griddynamics.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -65,8 +65,8 @@ src/rosetta-cli/
|
|
|
65
65
|
│ ├── cli.py # CLI entry point
|
|
66
66
|
│ ├── commands/ # Command implementations
|
|
67
67
|
│ ├── services/ # Shared business logic
|
|
68
|
-
│ ├──
|
|
69
|
-
│ ├──
|
|
68
|
+
│ ├── rosetta_config.py # Configuration management
|
|
69
|
+
│ ├── rosetta_publisher.py # Publishing orchestration
|
|
70
70
|
│ └── ragflow_client.py # RAGFlow SDK wrapper
|
|
71
71
|
├── env.template # Environment configuration template
|
|
72
72
|
├── tests/ # CLI unit tests
|
|
@@ -329,29 +329,29 @@ client.verify_connection()
|
|
|
329
329
|
client.get_system_health()
|
|
330
330
|
```
|
|
331
331
|
|
|
332
|
-
####
|
|
332
|
+
#### RosettaConfig (`rosetta_config.py`)
|
|
333
333
|
|
|
334
334
|
Configuration management with smart .env discovery:
|
|
335
335
|
|
|
336
336
|
```python
|
|
337
|
-
from rosetta_cli.
|
|
337
|
+
from rosetta_cli.rosetta_config import RosettaConfig
|
|
338
338
|
|
|
339
339
|
# Auto-discover .env (searches cwd, script dir, git root)
|
|
340
|
-
config =
|
|
340
|
+
config = RosettaConfig.from_env()
|
|
341
341
|
|
|
342
342
|
# Use specific environment
|
|
343
|
-
config =
|
|
343
|
+
config = RosettaConfig.from_env(environment="production")
|
|
344
344
|
|
|
345
345
|
# Validate configuration
|
|
346
346
|
config.validate()
|
|
347
347
|
```
|
|
348
348
|
|
|
349
|
-
#### ContentPublisher (`
|
|
349
|
+
#### ContentPublisher (`rosetta_publisher.py`)
|
|
350
350
|
|
|
351
351
|
Publishing logic with metadata extraction:
|
|
352
352
|
|
|
353
353
|
```python
|
|
354
|
-
from rosetta_cli.
|
|
354
|
+
from rosetta_cli.rosetta_publisher import ContentPublisher
|
|
355
355
|
|
|
356
356
|
publisher = ContentPublisher(client, config, workspace_root)
|
|
357
357
|
|
|
@@ -475,10 +475,10 @@ uvx rosetta-cli@latest publish ../../instructions --force
|
|
|
475
475
|
```python
|
|
476
476
|
from pathlib import Path
|
|
477
477
|
from rosetta_cli.ragflow_client import RAGFlowClient, DocumentMetadata
|
|
478
|
-
from rosetta_cli.
|
|
479
|
-
from rosetta_cli.
|
|
478
|
+
from rosetta_cli.rosetta_config import RosettaConfig
|
|
479
|
+
from rosetta_cli.rosetta_publisher import ContentPublisher
|
|
480
480
|
|
|
481
|
-
config =
|
|
481
|
+
config = RosettaConfig.from_env()
|
|
482
482
|
client = RAGFlowClient(
|
|
483
483
|
api_key=config.api_key,
|
|
484
484
|
base_url=config.base_url,
|
|
@@ -5,11 +5,11 @@ pyproject.toml
|
|
|
5
5
|
rosetta_cli/__init__.py
|
|
6
6
|
rosetta_cli/__main__.py
|
|
7
7
|
rosetta_cli/cli.py
|
|
8
|
-
rosetta_cli/ims_auth.py
|
|
9
|
-
rosetta_cli/ims_config.py
|
|
10
|
-
rosetta_cli/ims_publisher.py
|
|
11
|
-
rosetta_cli/ims_utils.py
|
|
12
8
|
rosetta_cli/ragflow_client.py
|
|
9
|
+
rosetta_cli/rosetta_auth.py
|
|
10
|
+
rosetta_cli/rosetta_config.py
|
|
11
|
+
rosetta_cli/rosetta_publisher.py
|
|
12
|
+
rosetta_cli/rosetta_utils.py
|
|
13
13
|
rosetta_cli/typing_utils.py
|
|
14
14
|
rosetta_cli.egg-info/PKG-INFO
|
|
15
15
|
rosetta_cli.egg-info/SOURCES.txt
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/rosetta_cli-2.0.21/rosetta_cli/ims_utils.py → /rosetta_cli-3.0.1/rosetta_cli/rosetta_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|