Spaces:
Sleeping
Sleeping
Julian Vanecek commited on
Commit ·
c4dca42
1
Parent(s): 3151bfa
init
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitignore +30 -0
- PROJECT_SPEC.md +218 -0
- README.md +76 -0
- app.py +20 -0
- backend/vector_store_assistant_wrapper.py +148 -0
- backend/vector_store_manager.py +20 -43
- config/openai_config.json +37 -0
- config/vector_stores.json +23 -0
- frontend/__init__.py +1 -0
- frontend/gradio_app.py +281 -0
- pages/Chorus_R1.1_QuickStartGuide_TOC.txt +32 -0
- pages/Chorus_R1.1_QuickStartGuide_page_001.txt +8 -0
- pages/Chorus_R1.1_QuickStartGuide_page_002.txt +36 -0
- pages/Chorus_R1.1_QuickStartGuide_page_003.txt +28 -0
- pages/Chorus_R1.1_QuickStartGuide_page_004.txt +12 -0
- pages/Chorus_R1.1_QuickStartGuide_page_005.txt +32 -0
- pages/Chorus_R1.1_QuickStartGuide_page_006.txt +7 -0
- pages/Chorus_R1.1_QuickStartGuide_page_007.txt +17 -0
- pages/Chorus_R1.1_QuickStartGuide_page_008.txt +14 -0
- pages/Chorus_R1.1_QuickStartGuide_page_009.txt +20 -0
- pages/Chorus_R1.1_QuickStartGuide_page_010.txt +19 -0
- pages/Chorus_R1.1_QuickStartGuide_page_011.txt +22 -0
- pages/Chorus_R1.1_QuickStartGuide_page_012.txt +20 -0
- pages/Chorus_R1.1_QuickStartGuide_page_013.txt +27 -0
- pages/Chorus_R1.1_QuickStartGuide_page_014.txt +20 -0
- pages/Chorus_R1.1_QuickStartGuide_page_015.txt +27 -0
- pages/Chorus_R1.1_QuickStartGuide_page_016.txt +11 -0
- pages/Chorus_R1.1_QuickStartGuide_page_017.txt +17 -0
- pages/Chorus_R1.1_QuickStartGuide_page_018.txt +20 -0
- pages/Chorus_R1.1_QuickStartGuide_page_019.txt +7 -0
- pages/Chorus_R1.1_QuickStartGuide_page_020.txt +17 -0
- pages/Chorus_R1.1_QuickStartGuide_page_021.txt +27 -0
- pages/Chorus_R1.1_QuickStartGuide_page_022.txt +30 -0
- pages/Chorus_R1.1_QuickStartGuide_page_023.txt +31 -0
- pages/Chorus_R1.1_QuickStartGuide_page_024.txt +17 -0
- pages/Chorus_R1.1_UserGuide_TOC.txt +73 -0
- pages/Chorus_R1.1_UserGuide_page_001.txt +8 -0
- pages/Chorus_R1.1_UserGuide_page_002.txt +36 -0
- pages/Chorus_R1.1_UserGuide_page_003.txt +36 -0
- pages/Chorus_R1.1_UserGuide_page_004.txt +12 -0
- pages/Chorus_R1.1_UserGuide_page_005.txt +44 -0
- pages/Chorus_R1.1_UserGuide_page_006.txt +44 -0
- pages/Chorus_R1.1_UserGuide_page_007.txt +30 -0
- pages/Chorus_R1.1_UserGuide_page_008.txt +8 -0
- pages/Chorus_R1.1_UserGuide_page_009.txt +9 -0
- pages/Chorus_R1.1_UserGuide_page_010.txt +33 -0
- pages/Chorus_R1.1_UserGuide_page_011.txt +7 -0
- pages/Chorus_R1.1_UserGuide_page_012.txt +16 -0
- pages/Chorus_R1.1_UserGuide_page_013.txt +14 -0
- pages/Chorus_R1.1_UserGuide_page_014.txt +27 -0
.gitignore
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Python
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.py[cod]
|
| 4 |
+
*$py.class
|
| 5 |
+
*.so
|
| 6 |
+
.Python
|
| 7 |
+
env/
|
| 8 |
+
venv/
|
| 9 |
+
ENV/
|
| 10 |
+
.venv
|
| 11 |
+
|
| 12 |
+
# IDE
|
| 13 |
+
.idea/
|
| 14 |
+
.vscode/
|
| 15 |
+
*.swp
|
| 16 |
+
*.swo
|
| 17 |
+
|
| 18 |
+
# OS
|
| 19 |
+
.DS_Store
|
| 20 |
+
Thumbs.db
|
| 21 |
+
|
| 22 |
+
# Project specific
|
| 23 |
+
*.log
|
| 24 |
+
.env
|
| 25 |
+
test_*.py
|
| 26 |
+
!backend/test_pdf_mapping.py
|
| 27 |
+
|
| 28 |
+
# Temporary files
|
| 29 |
+
*.tmp
|
| 30 |
+
*.bak
|
PROJECT_SPEC.md
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# OpenAI Chatbot MCP v2 - Complete Project Specification
|
| 2 |
+
|
| 3 |
+
## Project Overview
|
| 4 |
+
|
| 5 |
+
**Location**: `/Users/jsv/Work/ataya/concert-master/AWS/backend/chatbot/openai_chatbot/openai-chatbot-mcp`
|
| 6 |
+
|
| 7 |
+
**Description**: "doc specific rag + document reading + mcp for at will rag"
|
| 8 |
+
|
| 9 |
+
**Goal**: Create an advanced OpenAI chatbot with version-specific document retrieval, MCP-style tools for flexible RAG queries, and page-level document access.
|
| 10 |
+
|
| 11 |
+
## Architecture Summary
|
| 12 |
+
|
| 13 |
+
### Core Components:
|
| 14 |
+
|
| 15 |
+
1. **Multiple Vector Stores** (per version)
|
| 16 |
+
- Separate vector store for each document version (Harmony 1.2, 1.5, 1.6, 1.8, Chorus 1.1)
|
| 17 |
+
- One general/FAQ vector store for cross-version information
|
| 18 |
+
- Rationale: OpenAI vector stores don't support metadata filtering
|
| 19 |
+
|
| 20 |
+
2. **Automatic Dual Querying**
|
| 21 |
+
- When user queries with a version (e.g., Harmony 1.8), automatically query:
|
| 22 |
+
- The version-specific vector store
|
| 23 |
+
- The general/FAQ vector store
|
| 24 |
+
- Append both results to the user query before sending to OpenAI
|
| 25 |
+
|
| 26 |
+
3. **MCP-Style Tools** (implemented as OpenAI functions)
|
| 27 |
+
- **Vector Search Tool**: AI can query any vector store at will
|
| 28 |
+
- **Document Reader Tool**: AI can read specific pages or table of contents
|
| 29 |
+
|
| 30 |
+
4. **Page-Level Document Access**
|
| 31 |
+
- Documents split into individual pages in `/pages` directory
|
| 32 |
+
- Table of contents (TOC) files for each document
|
| 33 |
+
- Tool behavior: No pages specified → return TOC; Pages specified → return page content
|
| 34 |
+
|
| 35 |
+
## Requirements
|
| 36 |
+
|
| 37 |
+
### User Interface (Gradio)
|
| 38 |
+
- Version selector dropdown (defaults to Harmony 1.8)
|
| 39 |
+
- Model selection (GPT-4.1, GPT-4.1 Mini, GPT-4.1 Nano, O4 Mini)
|
| 40 |
+
- Custom prompt support
|
| 41 |
+
- Real-time streaming responses
|
| 42 |
+
- Token usage and cost tracking
|
| 43 |
+
- Response time display
|
| 44 |
+
- Deploy to Hugging Face Spaces
|
| 45 |
+
|
| 46 |
+
### Backend Features
|
| 47 |
+
- Support for multiple OpenAI vector stores
|
| 48 |
+
- Version-to-vector-store mapping
|
| 49 |
+
- Streaming responses
|
| 50 |
+
- Cost calculation
|
| 51 |
+
- Function calling for MCP-style tools
|
| 52 |
+
|
| 53 |
+
### Document Versions
|
| 54 |
+
- **Harmony**: 1.2, 1.5, 1.6, 1.8 (latest)
|
| 55 |
+
- **Chorus**: 1.1 (latest)
|
| 56 |
+
- Each version has User Guide and Installation Guide
|
| 57 |
+
|
| 58 |
+
## Design Decisions
|
| 59 |
+
|
| 60 |
+
### 1. Latest Version Handling
|
| 61 |
+
- Config file will specify latest versions
|
| 62 |
+
- Latest Harmony: 1.8
|
| 63 |
+
- Latest Chorus: 1.1
|
| 64 |
+
|
| 65 |
+
### 2. Version Ranges
|
| 66 |
+
- Not needed - discrete tool calls only
|
| 67 |
+
- User selects single version from dropdown
|
| 68 |
+
|
| 69 |
+
### 3. Result Ranking
|
| 70 |
+
- No complex ranking needed
|
| 71 |
+
- Results clearly delineated by origin (version-specific vs general)
|
| 72 |
+
- AI can parse and prioritize based on context
|
| 73 |
+
|
| 74 |
+
### 4. Context Limits
|
| 75 |
+
- Chunk size: ~1000 tokens
|
| 76 |
+
- Maximum chunks: 10-20 (10,000-20,000 tokens)
|
| 77 |
+
- Tradeoff: More context = better answers but higher cost
|
| 78 |
+
- Recommendation: Start with 10 chunks, monitor performance
|
| 79 |
+
|
| 80 |
+
## Technical Implementation
|
| 81 |
+
|
| 82 |
+
### Project Structure
|
| 83 |
+
```
|
| 84 |
+
openai-chatbot-mcp/
|
| 85 |
+
├── backend/
|
| 86 |
+
│ ├── chatbot_backend.py # Main backend with function calling
|
| 87 |
+
│ ├── vector_store_manager.py # Manages multiple vector stores
|
| 88 |
+
│ ├── document_reader.py # Page-level document access
|
| 89 |
+
│ └── upload_versioned_pdfs.py # Script to create version-specific stores
|
| 90 |
+
├── frontend/
|
| 91 |
+
│ └── gradio_app.py # Gradio UI with version selection
|
| 92 |
+
├── config/
|
| 93 |
+
│ ├── vector_stores.json # Maps versions to vector store IDs
|
| 94 |
+
│ └── openai_config.json # General configuration
|
| 95 |
+
├── pages/ # Existing page-level documents
|
| 96 |
+
│ └── [document pages...]
|
| 97 |
+
├── tools/
|
| 98 |
+
│ ├── vector_search_tool.py # Vector search function
|
| 99 |
+
│ └── document_reader_tool.py # Document reader function
|
| 100 |
+
├── requirements.txt
|
| 101 |
+
├── app.py # HF Spaces entry point
|
| 102 |
+
└── README.md
|
| 103 |
+
```
|
| 104 |
+
|
| 105 |
+
### Vector Store Configuration Example
|
| 106 |
+
```json
|
| 107 |
+
{
|
| 108 |
+
"vector_stores": {
|
| 109 |
+
"harmony_1_2": "vs_xxx",
|
| 110 |
+
"harmony_1_5": "vs_xxx",
|
| 111 |
+
"harmony_1_6": "vs_xxx",
|
| 112 |
+
"harmony_1_8": "vs_xxx",
|
| 113 |
+
"chorus_1_1": "vs_xxx",
|
| 114 |
+
"general_faq": "vs_xxx"
|
| 115 |
+
},
|
| 116 |
+
"latest_versions": {
|
| 117 |
+
"harmony": "1.8",
|
| 118 |
+
"chorus": "1.1"
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
```
|
| 122 |
+
|
| 123 |
+
### MCP Tool Schemas
|
| 124 |
+
|
| 125 |
+
#### Vector Search Tool
|
| 126 |
+
```python
|
| 127 |
+
{
|
| 128 |
+
"name": "search_vector_store",
|
| 129 |
+
"description": "Search a specific vector store for relevant information",
|
| 130 |
+
"parameters": {
|
| 131 |
+
"query": "Search query string",
|
| 132 |
+
"vector_store_name": "Name of vector store (e.g., 'harmony_1_8', 'general_faq')",
|
| 133 |
+
"max_results": "Maximum number of results (default: 5)"
|
| 134 |
+
}
|
| 135 |
+
}
|
| 136 |
+
```
|
| 137 |
+
|
| 138 |
+
#### Document Reader Tool
|
| 139 |
+
```python
|
| 140 |
+
{
|
| 141 |
+
"name": "read_document_pages",
|
| 142 |
+
"description": "Read specific pages from a document or get table of contents",
|
| 143 |
+
"parameters": {
|
| 144 |
+
"document_name": "Document identifier (e.g., 'Harmony_R1.8_UserGuide')",
|
| 145 |
+
"page_numbers": "List of page numbers to read (optional, returns TOC if not specified)"
|
| 146 |
+
}
|
| 147 |
+
}
|
| 148 |
+
```
|
| 149 |
+
|
| 150 |
+
### Query Flow
|
| 151 |
+
1. User selects version (e.g., Harmony 1.8) and asks question
|
| 152 |
+
2. Backend automatically queries:
|
| 153 |
+
- `harmony_1_8` vector store
|
| 154 |
+
- `general_faq` vector store
|
| 155 |
+
3. Results formatted and appended to query:
|
| 156 |
+
```
|
| 157 |
+
Based on Harmony 1.8 documentation:
|
| 158 |
+
[version-specific chunks]
|
| 159 |
+
|
| 160 |
+
Additional general information:
|
| 161 |
+
[FAQ/general chunks]
|
| 162 |
+
|
| 163 |
+
User Question: [original question]
|
| 164 |
+
```
|
| 165 |
+
4. Query sent to OpenAI with function calling enabled
|
| 166 |
+
5. AI can use tools to get more information if needed
|
| 167 |
+
6. Response streamed back to user
|
| 168 |
+
|
| 169 |
+
## Implementation Steps
|
| 170 |
+
|
| 171 |
+
### Phase 1: Setup Vector Stores
|
| 172 |
+
1. Create upload script for versioned PDFs
|
| 173 |
+
2. Create separate vector stores for each version
|
| 174 |
+
3. Upload PDFs to respective stores
|
| 175 |
+
4. Create general/FAQ vector store
|
| 176 |
+
5. Save configuration with store IDs
|
| 177 |
+
|
| 178 |
+
### Phase 2: Backend Development
|
| 179 |
+
1. Create `vector_store_manager.py` for multi-store handling
|
| 180 |
+
2. Extend `chatbot_backend.py` with:
|
| 181 |
+
- Multiple vector store support
|
| 182 |
+
- Function calling integration
|
| 183 |
+
- Automatic dual querying
|
| 184 |
+
3. Implement MCP-style tools as functions
|
| 185 |
+
4. Add document reader functionality
|
| 186 |
+
|
| 187 |
+
### Phase 3: Frontend Enhancement
|
| 188 |
+
1. Add version selector dropdown
|
| 189 |
+
2. Update UI to show which stores were queried
|
| 190 |
+
3. Maintain existing features (streaming, cost tracking, etc.)
|
| 191 |
+
4. Add source attribution display
|
| 192 |
+
|
| 193 |
+
### Phase 4: Testing & Deployment
|
| 194 |
+
1. Test version-specific queries
|
| 195 |
+
2. Test cross-version queries using tools
|
| 196 |
+
3. Test document page reading
|
| 197 |
+
4. Deploy to Hugging Face Spaces
|
| 198 |
+
|
| 199 |
+
## Reference Implementation
|
| 200 |
+
- Simple version (single vector store): `/Users/jsv/Work/ataya/concert-master/AWS/backend/chatbot/openai_chatbot/openai-chatbot-simple`
|
| 201 |
+
- Use as base for architecture and patterns
|
| 202 |
+
|
| 203 |
+
## Notes for Implementation
|
| 204 |
+
- MCP tools must be implemented as regular Python functions for HF Spaces
|
| 205 |
+
- All configuration should use HF Spaces secrets for API keys
|
| 206 |
+
- Maintain streaming support throughout
|
| 207 |
+
- Keep cost tracking and response time features
|
| 208 |
+
- Ensure clear source attribution in responses
|
| 209 |
+
|
| 210 |
+
## Next Steps
|
| 211 |
+
1. Start with creating the upload script for versioned PDFs
|
| 212 |
+
2. Set up the vector store configuration
|
| 213 |
+
3. Implement the backend components
|
| 214 |
+
4. Enhance the frontend
|
| 215 |
+
5. Test and deploy
|
| 216 |
+
|
| 217 |
+
---
|
| 218 |
+
**To continue this project**: Use this specification as context and begin implementation from Phase 1.
|
README.md
CHANGED
|
@@ -10,4 +10,80 @@ pinned: false
|
|
| 10 |
short_description: doc specific rag + document reading + mcp for at will rag
|
| 11 |
---
|
| 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 10 |
short_description: doc specific rag + document reading + mcp for at will rag
|
| 11 |
---
|
| 12 |
|
| 13 |
+
# OpenAI Chatbot MCP v2
|
| 14 |
+
|
| 15 |
+
Advanced OpenAI chatbot with version-specific document retrieval, MCP-style tools for flexible RAG queries, and page-level document access.
|
| 16 |
+
|
| 17 |
+
## Features
|
| 18 |
+
|
| 19 |
+
- **Multi-Vector Store Support**: Separate vector stores for each product version
|
| 20 |
+
- **Automatic Dual Querying**: Queries both version-specific and general FAQ stores
|
| 21 |
+
- **MCP-Style Tools**:
|
| 22 |
+
- Vector Search Tool: AI can query any vector store at will
|
| 23 |
+
- Document Reader Tool: AI can read specific pages or table of contents
|
| 24 |
+
- **Page-Level Document Access**: Documents split into individual pages
|
| 25 |
+
- **Real-time Streaming**: Responses streamed in real-time
|
| 26 |
+
- **Cost Tracking**: Token usage and cost calculation
|
| 27 |
+
- **Multiple Models**: Support for GPT-4.1, GPT-4.1 Mini, GPT-4.1 Nano, O4 Mini
|
| 28 |
+
|
| 29 |
+
## Quick Start on HuggingFace Spaces
|
| 30 |
+
|
| 31 |
+
1. Set your `OPENAI_API_KEY` in the Space secrets
|
| 32 |
+
2. Run the upload script to populate vector stores (see Setup below)
|
| 33 |
+
3. Update `config/vector_stores.json` with actual vector store IDs
|
| 34 |
+
4. The app will start automatically
|
| 35 |
+
|
| 36 |
+
## Setup Instructions
|
| 37 |
+
|
| 38 |
+
### 1. Environment Variables
|
| 39 |
+
|
| 40 |
+
Set your OpenAI API key:
|
| 41 |
+
```bash
|
| 42 |
+
export OPENAI_API_KEY=your_api_key_here
|
| 43 |
+
```
|
| 44 |
+
|
| 45 |
+
### 2. Create Vector Stores
|
| 46 |
+
|
| 47 |
+
Run the upload script to create version-specific vector stores:
|
| 48 |
+
```bash
|
| 49 |
+
python backend/upload_versioned_pdfs.py
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
This will:
|
| 53 |
+
- Create separate vector stores for each version
|
| 54 |
+
- Upload PDFs to respective stores
|
| 55 |
+
- Save configuration in `config/vector_stores.json`
|
| 56 |
+
|
| 57 |
+
### 3. Update Configuration
|
| 58 |
+
|
| 59 |
+
After running the upload script, update the `config/vector_stores.json` file with the actual vector store IDs.
|
| 60 |
+
|
| 61 |
+
### 4. Run Locally
|
| 62 |
+
|
| 63 |
+
```bash
|
| 64 |
+
python app.py
|
| 65 |
+
```
|
| 66 |
+
|
| 67 |
+
## Usage
|
| 68 |
+
|
| 69 |
+
1. Select a product version from the dropdown (e.g., "Harmony 1.8")
|
| 70 |
+
2. Choose an AI model
|
| 71 |
+
3. Ask your question
|
| 72 |
+
4. The AI will:
|
| 73 |
+
- Search the version-specific vector store
|
| 74 |
+
- Search the general FAQ store
|
| 75 |
+
- Use tools to find additional information if needed
|
| 76 |
+
- Provide a comprehensive answer
|
| 77 |
+
|
| 78 |
+
## Tools Available to AI
|
| 79 |
+
|
| 80 |
+
### Vector Search Tool
|
| 81 |
+
- Searches any vector store for relevant information
|
| 82 |
+
- Can target specific versions or general FAQ
|
| 83 |
+
|
| 84 |
+
### Document Reader Tool
|
| 85 |
+
- Reads specific pages from documents
|
| 86 |
+
- Returns table of contents if no pages specified
|
| 87 |
+
- Useful for detailed information retrieval
|
| 88 |
+
|
| 89 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
app.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Main application entry point for HuggingFace Spaces deployment.
|
| 3 |
+
"""
|
| 4 |
+
|
| 5 |
+
import os
|
| 6 |
+
import sys
|
| 7 |
+
from pathlib import Path
|
| 8 |
+
|
| 9 |
+
# Add current directory to path
|
| 10 |
+
sys.path.append(str(Path(__file__).parent))
|
| 11 |
+
|
| 12 |
+
# Import the Gradio interface
|
| 13 |
+
from frontend.gradio_app import create_gradio_interface
|
| 14 |
+
|
| 15 |
+
# Create the interface
|
| 16 |
+
app = create_gradio_interface()
|
| 17 |
+
|
| 18 |
+
# Launch the app
|
| 19 |
+
if __name__ == "__main__":
|
| 20 |
+
app.launch()
|
backend/vector_store_assistant_wrapper.py
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Vector Store Assistant Wrapper - Creates temporary assistants for querying vector stores.
|
| 3 |
+
This is a compromise approach that allows dynamic vector store selection.
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import os
|
| 7 |
+
import json
|
| 8 |
+
import time
|
| 9 |
+
from typing import Dict, List, Optional
|
| 10 |
+
from openai import OpenAI
|
| 11 |
+
import logging
|
| 12 |
+
|
| 13 |
+
logger = logging.getLogger(__name__)
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
class VectorStoreAssistantWrapper:
|
| 17 |
+
def __init__(self, client: OpenAI):
|
| 18 |
+
"""Initialize the assistant wrapper."""
|
| 19 |
+
self.client = client
|
| 20 |
+
self._assistant_cache = {} # Cache assistants by vector store ID
|
| 21 |
+
|
| 22 |
+
def _get_or_create_assistant(self, vector_store_id: str, store_name: str) -> str:
|
| 23 |
+
"""Get existing or create new assistant for a vector store."""
|
| 24 |
+
# Check cache first
|
| 25 |
+
if vector_store_id in self._assistant_cache:
|
| 26 |
+
assistant_id = self._assistant_cache[vector_store_id]
|
| 27 |
+
try:
|
| 28 |
+
# Verify assistant still exists
|
| 29 |
+
self.client.beta.assistants.retrieve(assistant_id)
|
| 30 |
+
return assistant_id
|
| 31 |
+
except:
|
| 32 |
+
# Assistant was deleted, remove from cache
|
| 33 |
+
del self._assistant_cache[vector_store_id]
|
| 34 |
+
|
| 35 |
+
# Create new assistant
|
| 36 |
+
try:
|
| 37 |
+
assistant = self.client.beta.assistants.create(
|
| 38 |
+
name=f"Search Assistant for {store_name}",
|
| 39 |
+
instructions=f"You are a search assistant for {store_name}. Search the attached documents and provide relevant information.",
|
| 40 |
+
model="gpt-4o-mini", # Using mini for cost efficiency
|
| 41 |
+
tools=[{"type": "file_search"}],
|
| 42 |
+
tool_resources={
|
| 43 |
+
"file_search": {
|
| 44 |
+
"vector_store_ids": [vector_store_id]
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
)
|
| 48 |
+
|
| 49 |
+
# Cache the assistant
|
| 50 |
+
self._assistant_cache[vector_store_id] = assistant.id
|
| 51 |
+
logger.info(f"Created assistant {assistant.id} for vector store {vector_store_id}")
|
| 52 |
+
|
| 53 |
+
return assistant.id
|
| 54 |
+
|
| 55 |
+
except Exception as e:
|
| 56 |
+
logger.error(f"Error creating assistant: {e}")
|
| 57 |
+
raise
|
| 58 |
+
|
| 59 |
+
def search_vector_store(self, vector_store_id: str, store_name: str, query: str, max_results: int = 5) -> List[Dict]:
|
| 60 |
+
"""Search a vector store using a temporary assistant."""
|
| 61 |
+
try:
|
| 62 |
+
# Get or create assistant
|
| 63 |
+
assistant_id = self._get_or_create_assistant(vector_store_id, store_name)
|
| 64 |
+
|
| 65 |
+
# Create a thread
|
| 66 |
+
thread = self.client.beta.threads.create()
|
| 67 |
+
|
| 68 |
+
# Add the query message
|
| 69 |
+
self.client.beta.threads.messages.create(
|
| 70 |
+
thread_id=thread.id,
|
| 71 |
+
role="user",
|
| 72 |
+
content=f"Search for: {query}"
|
| 73 |
+
)
|
| 74 |
+
|
| 75 |
+
# Run the assistant
|
| 76 |
+
run = self.client.beta.threads.runs.create_and_poll(
|
| 77 |
+
thread_id=thread.id,
|
| 78 |
+
assistant_id=assistant_id,
|
| 79 |
+
instructions=f"Search for information about: {query}. Return the most relevant excerpts.",
|
| 80 |
+
temperature=0.3
|
| 81 |
+
)
|
| 82 |
+
|
| 83 |
+
# Check if run completed successfully
|
| 84 |
+
if run.status != 'completed':
|
| 85 |
+
logger.error(f"Run failed with status: {run.status}")
|
| 86 |
+
return []
|
| 87 |
+
|
| 88 |
+
# Get messages
|
| 89 |
+
messages = self.client.beta.threads.messages.list(
|
| 90 |
+
thread_id=thread.id,
|
| 91 |
+
order="desc"
|
| 92 |
+
)
|
| 93 |
+
|
| 94 |
+
# Extract results from assistant's response
|
| 95 |
+
results = []
|
| 96 |
+
for message in messages:
|
| 97 |
+
if message.role == "assistant":
|
| 98 |
+
for content in message.content:
|
| 99 |
+
if content.type == "text":
|
| 100 |
+
# Extract text and any citations
|
| 101 |
+
text_content = content.text.value
|
| 102 |
+
|
| 103 |
+
# Parse annotations for file citations
|
| 104 |
+
if hasattr(content.text, 'annotations'):
|
| 105 |
+
for annotation in content.text.annotations:
|
| 106 |
+
if hasattr(annotation, 'file_citation'):
|
| 107 |
+
results.append({
|
| 108 |
+
"text": annotation.text,
|
| 109 |
+
"quote": annotation.file_citation.quote,
|
| 110 |
+
"file_id": annotation.file_citation.file_id
|
| 111 |
+
})
|
| 112 |
+
|
| 113 |
+
# If no annotations, add the whole response
|
| 114 |
+
if not results and text_content:
|
| 115 |
+
# Split response into chunks
|
| 116 |
+
chunks = text_content.split('\n\n')
|
| 117 |
+
for chunk in chunks[:max_results]:
|
| 118 |
+
if chunk.strip():
|
| 119 |
+
results.append({
|
| 120 |
+
"text": chunk.strip(),
|
| 121 |
+
"quote": chunk.strip(),
|
| 122 |
+
"file_id": ""
|
| 123 |
+
})
|
| 124 |
+
|
| 125 |
+
break
|
| 126 |
+
break
|
| 127 |
+
|
| 128 |
+
# Clean up thread
|
| 129 |
+
try:
|
| 130 |
+
self.client.beta.threads.delete(thread.id)
|
| 131 |
+
except:
|
| 132 |
+
pass
|
| 133 |
+
|
| 134 |
+
return results[:max_results]
|
| 135 |
+
|
| 136 |
+
except Exception as e:
|
| 137 |
+
logger.error(f"Error searching vector store: {e}")
|
| 138 |
+
return []
|
| 139 |
+
|
| 140 |
+
def cleanup_assistants(self):
|
| 141 |
+
"""Clean up cached assistants."""
|
| 142 |
+
for assistant_id in list(self._assistant_cache.values()):
|
| 143 |
+
try:
|
| 144 |
+
self.client.beta.assistants.delete(assistant_id)
|
| 145 |
+
logger.info(f"Deleted assistant {assistant_id}")
|
| 146 |
+
except:
|
| 147 |
+
pass
|
| 148 |
+
self._assistant_cache.clear()
|
backend/vector_store_manager.py
CHANGED
|
@@ -8,6 +8,7 @@ from typing import Dict, List, Optional, Tuple
|
|
| 8 |
from pathlib import Path
|
| 9 |
from openai import OpenAI
|
| 10 |
import logging
|
|
|
|
| 11 |
|
| 12 |
logger = logging.getLogger(__name__)
|
| 13 |
|
|
@@ -19,7 +20,10 @@ class VectorStoreManager:
|
|
| 19 |
self.config_path = config_path or Path(__file__).parent.parent / "config" / "vector_stores.json"
|
| 20 |
self.vector_stores = {}
|
| 21 |
self.latest_versions = {}
|
|
|
|
| 22 |
self.load_config()
|
|
|
|
|
|
|
| 23 |
|
| 24 |
def load_config(self):
|
| 25 |
"""Load vector store configuration from file."""
|
|
@@ -32,6 +36,7 @@ class VectorStoreManager:
|
|
| 32 |
config = json.load(f)
|
| 33 |
self.vector_stores = config.get('vector_stores', {})
|
| 34 |
self.latest_versions = config.get('latest_versions', {})
|
|
|
|
| 35 |
logger.info(f"Loaded {len(self.vector_stores)} vector stores from config")
|
| 36 |
except Exception as e:
|
| 37 |
logger.error(f"Error loading vector store config: {e}")
|
|
@@ -60,51 +65,18 @@ class VectorStoreManager:
|
|
| 60 |
return []
|
| 61 |
|
| 62 |
try:
|
| 63 |
-
#
|
| 64 |
-
|
| 65 |
|
| 66 |
-
#
|
| 67 |
-
self.
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
|
|
|
| 71 |
)
|
| 72 |
|
| 73 |
-
|
| 74 |
-
run = self.client.beta.threads.runs.create_and_poll(
|
| 75 |
-
thread_id=thread.id,
|
| 76 |
-
assistant_id="asst_temp", # This will be replaced with actual assistant ID
|
| 77 |
-
tools=[{"type": "file_search"}],
|
| 78 |
-
tool_resources={
|
| 79 |
-
"file_search": {
|
| 80 |
-
"vector_store_ids": [store_id]
|
| 81 |
-
}
|
| 82 |
-
}
|
| 83 |
-
)
|
| 84 |
-
|
| 85 |
-
# Get the messages
|
| 86 |
-
messages = self.client.beta.threads.messages.list(
|
| 87 |
-
thread_id=thread.id,
|
| 88 |
-
order="asc"
|
| 89 |
-
)
|
| 90 |
-
|
| 91 |
-
# Extract search results
|
| 92 |
-
results = []
|
| 93 |
-
for message in messages:
|
| 94 |
-
if message.role == "assistant":
|
| 95 |
-
for content in message.content:
|
| 96 |
-
if content.type == "text":
|
| 97 |
-
# Parse file search annotations
|
| 98 |
-
annotations = content.text.annotations
|
| 99 |
-
for annotation in annotations:
|
| 100 |
-
if annotation.type == "file_citation":
|
| 101 |
-
results.append({
|
| 102 |
-
"text": annotation.text,
|
| 103 |
-
"file_id": annotation.file_citation.file_id,
|
| 104 |
-
"quote": annotation.file_citation.quote
|
| 105 |
-
})
|
| 106 |
-
|
| 107 |
-
return results[:max_results]
|
| 108 |
|
| 109 |
except Exception as e:
|
| 110 |
logger.error(f"Error querying vector store '{store_name}': {e}")
|
|
@@ -175,4 +147,9 @@ class VectorStoreManager:
|
|
| 175 |
for i, result in enumerate(general_results, 1):
|
| 176 |
formatted.append(f"{i}. {result.get('quote', result.get('text', ''))}")
|
| 177 |
|
| 178 |
-
return "\n".join(formatted)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
from pathlib import Path
|
| 9 |
from openai import OpenAI
|
| 10 |
import logging
|
| 11 |
+
from .vector_store_assistant_wrapper import VectorStoreAssistantWrapper
|
| 12 |
|
| 13 |
logger = logging.getLogger(__name__)
|
| 14 |
|
|
|
|
| 20 |
self.config_path = config_path or Path(__file__).parent.parent / "config" / "vector_stores.json"
|
| 21 |
self.vector_stores = {}
|
| 22 |
self.latest_versions = {}
|
| 23 |
+
self.descriptions = {}
|
| 24 |
self.load_config()
|
| 25 |
+
# Initialize assistant wrapper for vector store searches
|
| 26 |
+
self.assistant_wrapper = VectorStoreAssistantWrapper(client)
|
| 27 |
|
| 28 |
def load_config(self):
|
| 29 |
"""Load vector store configuration from file."""
|
|
|
|
| 36 |
config = json.load(f)
|
| 37 |
self.vector_stores = config.get('vector_stores', {})
|
| 38 |
self.latest_versions = config.get('latest_versions', {})
|
| 39 |
+
self.descriptions = config.get('descriptions', {})
|
| 40 |
logger.info(f"Loaded {len(self.vector_stores)} vector stores from config")
|
| 41 |
except Exception as e:
|
| 42 |
logger.error(f"Error loading vector store config: {e}")
|
|
|
|
| 65 |
return []
|
| 66 |
|
| 67 |
try:
|
| 68 |
+
# Get description for better context
|
| 69 |
+
description = self.descriptions.get(store_name, store_name)
|
| 70 |
|
| 71 |
+
# Use assistant wrapper for search
|
| 72 |
+
results = self.assistant_wrapper.search_vector_store(
|
| 73 |
+
vector_store_id=store_id,
|
| 74 |
+
store_name=description,
|
| 75 |
+
query=query,
|
| 76 |
+
max_results=max_results
|
| 77 |
)
|
| 78 |
|
| 79 |
+
return results
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
|
| 81 |
except Exception as e:
|
| 82 |
logger.error(f"Error querying vector store '{store_name}': {e}")
|
|
|
|
| 147 |
for i, result in enumerate(general_results, 1):
|
| 148 |
formatted.append(f"{i}. {result.get('quote', result.get('text', ''))}")
|
| 149 |
|
| 150 |
+
return "\n".join(formatted)
|
| 151 |
+
|
| 152 |
+
def cleanup(self):
|
| 153 |
+
"""Cleanup any resources (like temporary assistants)."""
|
| 154 |
+
if hasattr(self, 'assistant_wrapper'):
|
| 155 |
+
self.assistant_wrapper.cleanup_assistants()
|
config/openai_config.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"models": {
|
| 3 |
+
"gpt-4o": {
|
| 4 |
+
"name": "GPT-4.1",
|
| 5 |
+
"description": "Most capable model",
|
| 6 |
+
"max_tokens": 128000,
|
| 7 |
+
"input_cost": 2.5,
|
| 8 |
+
"output_cost": 10.0
|
| 9 |
+
},
|
| 10 |
+
"gpt-4o-mini": {
|
| 11 |
+
"name": "GPT-4.1 Mini",
|
| 12 |
+
"description": "Affordable and intelligent",
|
| 13 |
+
"max_tokens": 128000,
|
| 14 |
+
"input_cost": 0.15,
|
| 15 |
+
"output_cost": 0.6
|
| 16 |
+
},
|
| 17 |
+
"gpt-4o-nano": {
|
| 18 |
+
"name": "GPT-4.1 Nano",
|
| 19 |
+
"description": "Fastest model",
|
| 20 |
+
"max_tokens": 128000,
|
| 21 |
+
"input_cost": 0.05,
|
| 22 |
+
"output_cost": 0.2
|
| 23 |
+
},
|
| 24 |
+
"o4-mini": {
|
| 25 |
+
"name": "O4 Mini",
|
| 26 |
+
"description": "Advanced reasoning",
|
| 27 |
+
"max_tokens": 128000,
|
| 28 |
+
"input_cost": 1.0,
|
| 29 |
+
"output_cost": 4.0
|
| 30 |
+
}
|
| 31 |
+
},
|
| 32 |
+
"default_model": "gpt-4o",
|
| 33 |
+
"temperature": 0.7,
|
| 34 |
+
"max_completion_tokens": 4000,
|
| 35 |
+
"chunk_size": 1000,
|
| 36 |
+
"max_chunks": 10
|
| 37 |
+
}
|
config/vector_stores.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"vector_stores": {
|
| 3 |
+
"harmony_1_2": "vs_686db44dee9481918ded3a96e0fe2eb3",
|
| 4 |
+
"harmony_1_5": "vs_686db4581f14819183d14ecd6af34d48",
|
| 5 |
+
"harmony_1_6": "vs_686db462ef68819182bf27dd33168855",
|
| 6 |
+
"harmony_1_8": "vs_686db46d242881918505a7d9659fce06",
|
| 7 |
+
"chorus_1_1": "vs_686db47b2ee8819194c6d516766c0833"
|
| 8 |
+
},
|
| 9 |
+
"descriptions": {
|
| 10 |
+
"harmony_1_2": "Documentation for Harmony version 1.2",
|
| 11 |
+
"harmony_1_5": "Documentation for Harmony version 1.5",
|
| 12 |
+
"harmony_1_6": "Documentation for Harmony version 1.6",
|
| 13 |
+
"harmony_1_8": "Documentation for Harmony version 1.8",
|
| 14 |
+
"chorus_1_1": "Documentation for Chorus version 1.1"
|
| 15 |
+
},
|
| 16 |
+
"latest_versions": {
|
| 17 |
+
"harmony": "1.8",
|
| 18 |
+
"chorus": "1.1"
|
| 19 |
+
},
|
| 20 |
+
"created_at": "2025-07-08T19:15:09.549656",
|
| 21 |
+
"chunk_size": 1000,
|
| 22 |
+
"max_chunks": 10
|
| 23 |
+
}
|
frontend/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
# Frontend package
|
frontend/gradio_app.py
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Gradio Frontend for OpenAI Chatbot with Multi-Vector Store Support
|
| 3 |
+
"""
|
| 4 |
+
|
| 5 |
+
import gradio as gr
|
| 6 |
+
import os
|
| 7 |
+
import json
|
| 8 |
+
import logging
|
| 9 |
+
from typing import Dict, List, Tuple, Optional
|
| 10 |
+
from pathlib import Path
|
| 11 |
+
import time
|
| 12 |
+
|
| 13 |
+
# Add parent directory to path for imports
|
| 14 |
+
import sys
|
| 15 |
+
sys.path.append(str(Path(__file__).parent.parent))
|
| 16 |
+
|
| 17 |
+
from backend.chatbot_backend import ChatbotBackend
|
| 18 |
+
|
| 19 |
+
logging.basicConfig(level=logging.INFO)
|
| 20 |
+
logger = logging.getLogger(__name__)
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
class GradioApp:
|
| 24 |
+
def __init__(self):
|
| 25 |
+
"""Initialize the Gradio application."""
|
| 26 |
+
self.chatbot = ChatbotBackend()
|
| 27 |
+
self.current_usage = {}
|
| 28 |
+
|
| 29 |
+
def get_version_choices(self) -> List[str]:
|
| 30 |
+
"""Get formatted version choices for dropdown."""
|
| 31 |
+
versions = self.chatbot.get_available_versions()
|
| 32 |
+
choices = []
|
| 33 |
+
|
| 34 |
+
# Add Harmony versions
|
| 35 |
+
for version in versions.get("harmony", []):
|
| 36 |
+
choices.append(f"Harmony {version}")
|
| 37 |
+
|
| 38 |
+
# Add Chorus versions
|
| 39 |
+
for version in versions.get("chorus", []):
|
| 40 |
+
choices.append(f"Chorus {version}")
|
| 41 |
+
|
| 42 |
+
# Set default to latest Harmony
|
| 43 |
+
if choices:
|
| 44 |
+
latest_harmony = f"Harmony {self.chatbot.vector_store_manager.get_latest_version('harmony')}"
|
| 45 |
+
if latest_harmony in choices:
|
| 46 |
+
return choices, latest_harmony
|
| 47 |
+
|
| 48 |
+
return choices, choices[0] if choices else "Harmony 1.8"
|
| 49 |
+
|
| 50 |
+
def get_model_choices(self) -> List[str]:
|
| 51 |
+
"""Get model choices for dropdown."""
|
| 52 |
+
models = self.chatbot.get_available_models()
|
| 53 |
+
choices = []
|
| 54 |
+
|
| 55 |
+
for model_id, model_info in models.items():
|
| 56 |
+
choices.append(f"{model_info['name']} ({model_id})")
|
| 57 |
+
|
| 58 |
+
return choices
|
| 59 |
+
|
| 60 |
+
def parse_version_selection(self, selection: str) -> Tuple[str, str]:
|
| 61 |
+
"""Parse version selection into product and version."""
|
| 62 |
+
parts = selection.split(" ", 1)
|
| 63 |
+
if len(parts) == 2:
|
| 64 |
+
return parts[0].lower(), parts[1]
|
| 65 |
+
return "harmony", "1.8" # Default
|
| 66 |
+
|
| 67 |
+
def parse_model_selection(self, selection: str) -> str:
|
| 68 |
+
"""Extract model ID from selection."""
|
| 69 |
+
# Extract model ID from parentheses
|
| 70 |
+
if "(" in selection and ")" in selection:
|
| 71 |
+
return selection.split("(")[1].split(")")[0]
|
| 72 |
+
return "gpt-4o" # Default
|
| 73 |
+
|
| 74 |
+
def format_usage_info(self, usage: Dict) -> str:
|
| 75 |
+
"""Format usage information for display."""
|
| 76 |
+
if not usage:
|
| 77 |
+
return ""
|
| 78 |
+
|
| 79 |
+
info = []
|
| 80 |
+
|
| 81 |
+
# Token usage
|
| 82 |
+
if "usage" in usage:
|
| 83 |
+
tokens = usage["usage"]
|
| 84 |
+
info.append(f"**Tokens**: Input: {tokens['input_tokens']:,} | Output: {tokens['output_tokens']:,} | Total: {tokens['total_tokens']:,}")
|
| 85 |
+
|
| 86 |
+
# Cost
|
| 87 |
+
if "cost" in usage:
|
| 88 |
+
cost = usage["cost"]
|
| 89 |
+
info.append(f"**Cost**: Input: ${cost['input']:.4f} | Output: ${cost['output']:.4f} | Total: ${cost['total']:.4f}")
|
| 90 |
+
|
| 91 |
+
# Response time
|
| 92 |
+
if "response_time" in usage:
|
| 93 |
+
info.append(f"**Response Time**: {usage['response_time']:.2f}s")
|
| 94 |
+
|
| 95 |
+
# Model and version
|
| 96 |
+
if "model" in usage:
|
| 97 |
+
info.append(f"**Model**: {usage['model']}")
|
| 98 |
+
|
| 99 |
+
if "version_context" in usage:
|
| 100 |
+
info.append(f"**Context**: {usage['version_context']}")
|
| 101 |
+
|
| 102 |
+
return "\n\n".join(info)
|
| 103 |
+
|
| 104 |
+
def stream_response(self, message: str, history: List[List[str]],
|
| 105 |
+
version: str, model: str, custom_prompt: str,
|
| 106 |
+
temperature: float, max_tokens: int) -> Tuple[str, str]:
|
| 107 |
+
"""Stream response from the chatbot."""
|
| 108 |
+
try:
|
| 109 |
+
# Parse selections
|
| 110 |
+
product, version_num = self.parse_version_selection(version)
|
| 111 |
+
model_id = self.parse_model_selection(model)
|
| 112 |
+
|
| 113 |
+
# Initialize response
|
| 114 |
+
response = ""
|
| 115 |
+
|
| 116 |
+
# Stream from backend
|
| 117 |
+
for chunk in self.chatbot.query_with_version(
|
| 118 |
+
query=message,
|
| 119 |
+
product=product,
|
| 120 |
+
version=version_num,
|
| 121 |
+
custom_prompt=custom_prompt if custom_prompt.strip() else None,
|
| 122 |
+
model=model_id,
|
| 123 |
+
temperature=temperature,
|
| 124 |
+
max_tokens=max_tokens
|
| 125 |
+
):
|
| 126 |
+
if chunk["type"] == "content":
|
| 127 |
+
response += chunk["content"]
|
| 128 |
+
yield response, ""
|
| 129 |
+
|
| 130 |
+
elif chunk["type"] == "metadata":
|
| 131 |
+
# Store usage information
|
| 132 |
+
self.current_usage = chunk
|
| 133 |
+
usage_info = self.format_usage_info(chunk)
|
| 134 |
+
yield response, usage_info
|
| 135 |
+
|
| 136 |
+
elif chunk["type"] == "error":
|
| 137 |
+
error_msg = f"\n\n❌ Error: {chunk['error']}"
|
| 138 |
+
yield response + error_msg, ""
|
| 139 |
+
|
| 140 |
+
except Exception as e:
|
| 141 |
+
logger.error(f"Error in stream_response: {str(e)}")
|
| 142 |
+
yield f"❌ Error: {str(e)}", ""
|
| 143 |
+
|
| 144 |
+
def create_interface(self) -> gr.Blocks:
|
| 145 |
+
"""Create the Gradio interface."""
|
| 146 |
+
version_choices, default_version = self.get_version_choices()
|
| 147 |
+
model_choices = self.get_model_choices()
|
| 148 |
+
|
| 149 |
+
with gr.Blocks(title="OpenAI Chatbot - Multi-Version RAG") as interface:
|
| 150 |
+
gr.Markdown("# OpenAI Chatbot with Version-Specific Documentation")
|
| 151 |
+
gr.Markdown("Ask questions about Harmony or Chorus products. The AI will search version-specific documentation and can use tools to find more information.")
|
| 152 |
+
|
| 153 |
+
with gr.Row():
|
| 154 |
+
with gr.Column(scale=3):
|
| 155 |
+
chatbot = gr.Chatbot(
|
| 156 |
+
height=500,
|
| 157 |
+
show_label=False,
|
| 158 |
+
elem_id="chatbot"
|
| 159 |
+
)
|
| 160 |
+
|
| 161 |
+
with gr.Row():
|
| 162 |
+
msg = gr.Textbox(
|
| 163 |
+
label="Your Question",
|
| 164 |
+
placeholder="Ask about features, installation, configuration...",
|
| 165 |
+
lines=2,
|
| 166 |
+
scale=4
|
| 167 |
+
)
|
| 168 |
+
submit = gr.Button("Send", variant="primary", scale=1)
|
| 169 |
+
|
| 170 |
+
usage_info = gr.Markdown(label="Usage Information")
|
| 171 |
+
|
| 172 |
+
with gr.Column(scale=1):
|
| 173 |
+
version_dropdown = gr.Dropdown(
|
| 174 |
+
choices=version_choices,
|
| 175 |
+
value=default_version,
|
| 176 |
+
label="Product Version",
|
| 177 |
+
info="Select the product version for context"
|
| 178 |
+
)
|
| 179 |
+
|
| 180 |
+
model_dropdown = gr.Dropdown(
|
| 181 |
+
choices=model_choices,
|
| 182 |
+
value=model_choices[0] if model_choices else "GPT-4.1 (gpt-4o)",
|
| 183 |
+
label="Model",
|
| 184 |
+
info="Select the AI model"
|
| 185 |
+
)
|
| 186 |
+
|
| 187 |
+
with gr.Accordion("Advanced Settings", open=False):
|
| 188 |
+
temperature = gr.Slider(
|
| 189 |
+
minimum=0,
|
| 190 |
+
maximum=1,
|
| 191 |
+
value=0.7,
|
| 192 |
+
step=0.1,
|
| 193 |
+
label="Temperature",
|
| 194 |
+
info="Higher = more creative, Lower = more focused"
|
| 195 |
+
)
|
| 196 |
+
|
| 197 |
+
max_tokens = gr.Slider(
|
| 198 |
+
minimum=100,
|
| 199 |
+
maximum=8000,
|
| 200 |
+
value=4000,
|
| 201 |
+
step=100,
|
| 202 |
+
label="Max Tokens",
|
| 203 |
+
info="Maximum response length"
|
| 204 |
+
)
|
| 205 |
+
|
| 206 |
+
custom_prompt = gr.Textbox(
|
| 207 |
+
label="Custom System Prompt",
|
| 208 |
+
placeholder="Optional: Add custom instructions for the AI",
|
| 209 |
+
lines=3
|
| 210 |
+
)
|
| 211 |
+
|
| 212 |
+
with gr.Accordion("Available Tools", open=True):
|
| 213 |
+
gr.Markdown("""
|
| 214 |
+
The AI has access to:
|
| 215 |
+
- **Vector Search**: Search any version's documentation
|
| 216 |
+
- **Document Reader**: Read specific pages or table of contents
|
| 217 |
+
|
| 218 |
+
The AI will use these tools automatically when needed.
|
| 219 |
+
""")
|
| 220 |
+
|
| 221 |
+
clear = gr.Button("Clear Conversation")
|
| 222 |
+
|
| 223 |
+
# Examples
|
| 224 |
+
gr.Examples(
|
| 225 |
+
examples=[
|
| 226 |
+
["How do I install Harmony on Windows?"],
|
| 227 |
+
["What are the new features in this version?"],
|
| 228 |
+
["How do I configure SSL certificates?"],
|
| 229 |
+
["What are the system requirements?"],
|
| 230 |
+
["How do I troubleshoot connection issues?"]
|
| 231 |
+
],
|
| 232 |
+
inputs=msg
|
| 233 |
+
)
|
| 234 |
+
|
| 235 |
+
# Event handlers
|
| 236 |
+
def user_submit(message, history):
|
| 237 |
+
return "", history + [[message, None]]
|
| 238 |
+
|
| 239 |
+
def bot_response(history, version, model, custom_prompt, temperature, max_tokens):
|
| 240 |
+
if not history or not history[-1][0]:
|
| 241 |
+
yield history, ""
|
| 242 |
+
return
|
| 243 |
+
|
| 244 |
+
user_message = history[-1][0]
|
| 245 |
+
history[-1][1] = ""
|
| 246 |
+
|
| 247 |
+
for response, usage in self.stream_response(
|
| 248 |
+
user_message, history[:-1], version, model,
|
| 249 |
+
custom_prompt, temperature, max_tokens
|
| 250 |
+
):
|
| 251 |
+
history[-1][1] = response
|
| 252 |
+
yield history, usage
|
| 253 |
+
|
| 254 |
+
# Connect events
|
| 255 |
+
msg.submit(user_submit, [msg, chatbot], [msg, chatbot], queue=False).then(
|
| 256 |
+
bot_response,
|
| 257 |
+
[chatbot, version_dropdown, model_dropdown, custom_prompt, temperature, max_tokens],
|
| 258 |
+
[chatbot, usage_info]
|
| 259 |
+
)
|
| 260 |
+
|
| 261 |
+
submit.click(user_submit, [msg, chatbot], [msg, chatbot], queue=False).then(
|
| 262 |
+
bot_response,
|
| 263 |
+
[chatbot, version_dropdown, model_dropdown, custom_prompt, temperature, max_tokens],
|
| 264 |
+
[chatbot, usage_info]
|
| 265 |
+
)
|
| 266 |
+
|
| 267 |
+
clear.click(lambda: ([], ""), outputs=[chatbot, usage_info])
|
| 268 |
+
|
| 269 |
+
return interface
|
| 270 |
+
|
| 271 |
+
|
| 272 |
+
def create_gradio_interface() -> gr.Blocks:
|
| 273 |
+
"""Create and return the Gradio interface."""
|
| 274 |
+
app = GradioApp()
|
| 275 |
+
return app.create_interface()
|
| 276 |
+
|
| 277 |
+
|
| 278 |
+
if __name__ == "__main__":
|
| 279 |
+
# For local testing
|
| 280 |
+
interface = create_gradio_interface()
|
| 281 |
+
interface.launch(debug=True)
|
pages/Chorus_R1.1_QuickStartGuide_TOC.txt
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
TABLE OF CONTENTS
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
Total Pages: 24
|
| 4 |
+
Generated from: Chorus R1.1 Quick Start Guide.pdf
|
| 5 |
+
==================================================
|
| 6 |
+
|
| 7 |
+
1 Objective - Page 4
|
| 8 |
+
2 Chorus AP - Page 5
|
| 9 |
+
2.1 Brief Introduction - Page 5
|
| 10 |
+
3 Quick Start Guide - Page 7
|
| 11 |
+
3.1 Prerequisites - Page 7
|
| 12 |
+
3.1.1 Chorus Cloud Account - Page 7
|
| 13 |
+
3.1.2 Chorus Device - Page 8
|
| 14 |
+
3.2 Quick Start Steps - Page 9
|
| 15 |
+
3.2.1 Confirm 5G service configuration - Page 9
|
| 16 |
+
3.2.2 Add Device - Page 9
|
| 17 |
+
3.2.3 Create Client Credentials - Page 11
|
| 18 |
+
3.2.4 IP address for Chorus Device - Page 13
|
| 19 |
+
3.2.5 Configure IP address Pool for UE - Page 14
|
| 20 |
+
3.2.6 Connect to Internet - Page 15
|
| 21 |
+
3.2.7 Power On - Page 15
|
| 22 |
+
3.2.8 Device Status - Page 15
|
| 23 |
+
3.2.9 Connect UE/Clients - Page 16
|
| 24 |
+
3.2.10 Using Customized Zone and DNN - Page 17
|
| 25 |
+
3.2.10.1 Create Zone - Page 17
|
| 26 |
+
3.2.10.2 Create DNN - Page 18
|
| 27 |
+
4 Troubleshooting - Page 20
|
| 28 |
+
4.1 Chorus Device Connection Failure - Page 20
|
| 29 |
+
4.2 UE Connection Failure - Page 20
|
| 30 |
+
Appendix 1 Glossary - Page 21
|
| 31 |
+
Appendix 2 DHCP Requirement - Page 23
|
| 32 |
+
Appendix 3 Concept of Zone - Page 23
|
pages/Chorus_R1.1_QuickStartGuide_page_001.txt
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 1
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 1 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Chorus Release 1.1
|
| 8 |
+
Quick Start Guide
|
pages/Chorus_R1.1_QuickStartGuide_page_002.txt
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 2
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 2 CHORUS QUICK START GUIDE
|
| 6 |
+
Table of Contents
|
| 7 |
+
|
| 8 |
+
1 Objective ................................ ................................ ................................ ................................ .................... 4
|
| 9 |
+
2 Chorus AP ................................ ................................ ................................ ................................ ................... 5
|
| 10 |
+
2.1 Brief Introduction ................................ ................................ ................................ ............................... 5
|
| 11 |
+
3 Quick Start Guide ................................ ................................ ................................ ................................ ....... 7
|
| 12 |
+
3.1 Prerequisites ................................ ................................ ................................ ................................ ...... 7
|
| 13 |
+
3.1.1 Chorus Cloud Account ................................ ................................ ................................ ................ 7
|
| 14 |
+
3.1.2 Chorus Device ................................ ................................ ................................ ............................ 8
|
| 15 |
+
3.2 Quick Start Steps ................................ ................................ ................................ ................................ 9
|
| 16 |
+
3.2.1 Confirm 5G service configuration ................................ ................................ .............................. 9
|
| 17 |
+
3.2.2 Add Device ................................ ................................ ................................ ................................ . 9
|
| 18 |
+
3.2.3 Create Client Credentials ................................ ................................ ................................ ......... 11
|
| 19 |
+
3.2.4 IP address for Chorus Device ................................ ................................ ................................ ... 13
|
| 20 |
+
3.2.5 Configure IP address Pool for UE ................................ ................................ ............................. 14
|
| 21 |
+
3.2.6 Connect to Internet ................................ ................................ ................................ .................. 15
|
| 22 |
+
3.2.7 Power On ................................ ................................ ................................ ................................ .. 15
|
| 23 |
+
3.2.8 Device Status ................................ ................................ ................................ ............................ 15
|
| 24 |
+
3.2.9 Connect UE/Clients ................................ ................................ ................................ .................. 16
|
| 25 |
+
3.2.10 Using Customized Zone and DNN ................................ ................................ ............................ 17
|
| 26 |
+
3.2.10.1 Create Zone ................................ ................................ ................................ ...................... 17
|
| 27 |
+
3.2.10.2 Create DNN ................................ ................................ ................................ ...................... 18
|
| 28 |
+
4 Troubleshooting ................................ ................................ ................................ ................................ ....... 20
|
| 29 |
+
4.1 Chorus Device Connection Failure ................................ ................................ ................................ ... 20
|
| 30 |
+
4.2 UE Connection Failure ................................ ................................ ................................ ...................... 20
|
| 31 |
+
Appendix 1 Glossary ................................ ................................ ................................ ................................ .... 21
|
| 32 |
+
Appendix 2 DHCP Requirement ................................ ................................ ................................ .................. 23
|
| 33 |
+
Appendix 3 Concept of Zone ................................ ................................ ................................ ....................... 23
|
| 34 |
+
|
| 35 |
+
Table of Figures
|
| 36 |
+
Figure 1 Chorus Architecture ................................ ................................ ................................ ............................. 6
|
pages/Chorus_R1.1_QuickStartGuide_page_003.txt
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 3
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 3 CHORUS QUICK START GUIDE
|
| 6 |
+
Figure 2 Chorus invitation mail ................................ ................................ ................................ .......................... 7
|
| 7 |
+
Figure 3 Chorus first login password setup ................................ ................................ ................................ ........ 8
|
| 8 |
+
Figure 4 Chorus main page ................................ ................................ ................................ ................................ 8
|
| 9 |
+
Figure 5 Service Configuration ................................ ................................ ................................ ........................... 9
|
| 10 |
+
Figure 6 Add Chorus Device ................................ ................................ ................................ ............................. 10
|
| 11 |
+
figure 7 Chorus Device configuration ................................ ................................ ................................ ............... 10
|
| 12 |
+
Figure 8 Device Serial Number and MAC information ................................ ................................ ..................... 10
|
| 13 |
+
Figure 9 Devices list shows successfully created Chorus device ................................ ................................ ...... 11
|
| 14 |
+
Figure 10 Upload / Fetch Client Credentials ................................ ................................ ................................ .... 11
|
| 15 |
+
Figure 11 A single 5G client credential configuration ................................ ................................ ...................... 12
|
| 16 |
+
Figure 12 Configure the policies for the client ................................ ................................ ................................ . 12
|
| 17 |
+
Figure 13 Chorus Structure ................................ ................................ ................................ .............................. 13
|
| 18 |
+
Figure 14 Configure UE IP Pools ................................ ................................ ................................ ....................... 14
|
| 19 |
+
Figure 15 UE IP address ................................ ................................ ................................ ................................ .... 14
|
| 20 |
+
Figure 16 UE gets IP via external DHCP server ................................ ................................ ................................ . 15
|
| 21 |
+
Figure 17 Chorus Device status ................................ ................................ ................................ ........................ 15
|
| 22 |
+
Figure 18 Chorus Device Details ................................ ................................ ................................ ...................... 16
|
| 23 |
+
Figure 19 Active Clients shown on Cloud Dashboard ................................ ................................ ...................... 17
|
| 24 |
+
Figure 20 Add a New Zone ................................ ................................ ................................ ............................... 17
|
| 25 |
+
Figure 21 Input Zone Detail ................................ ................................ ................................ .............................. 18
|
| 26 |
+
Figure 22 Setup DNN in Chorus ................................ ................................ ................................ ....................... 19
|
| 27 |
+
Figure 23 Chorus Zone UE can reach another UE on different Chorus AP in Zone ................................ ....... 24
|
| 28 |
+
Figure 24 Chorus Zone Chorus Zone with source NAT ................................ ................................ .................. 24
|
pages/Chorus_R1.1_QuickStartGuide_page_004.txt
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 4
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 4 CHORUS QUICK START GUIDE
|
| 6 |
+
Revision History
|
| 7 |
+
Version Contents Date
|
| 8 |
+
1.0 Initial Release d Version April 10 , 2025
|
| 9 |
+
|
| 10 |
+
1 Objective
|
| 11 |
+
This document describe s the quick start steps of Ataya Chorus and the usage of Ataya Chorus after it is
|
| 12 |
+
installed .
|
pages/Chorus_R1.1_QuickStartGuide_page_005.txt
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 5
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 5 CHORUS QUICK START GUIDE
|
| 6 |
+
2 Chorus AP
|
| 7 |
+
2.1 Brief Introduction
|
| 8 |
+
Private 5G solutions remain complex for small to medium -sized deployments. On -site installation of
|
| 9 |
+
hardware and software for the 5G Core and network integration into existing systems are challenging
|
| 10 |
+
tasks. Additionally, monitoring, troubleshooting, software upgrades, and other maintenance activities add
|
| 11 |
+
to this complexity .
|
| 12 |
+
In many use cases, such as retail stores, gas stations, oil and gas operations, smart agriculture, and
|
| 13 |
+
emergency response systems, customers find the current 5G solutions overly burdensome. They are
|
| 14 |
+
looking for a simpler solution that reduces setup time an d requires minimal on -site configuration. They
|
| 15 |
+
need a plug -and-play system where gNBs connect to the internet and provide instant 5G service.
|
| 16 |
+
It is essential to reduce operational complexity with a centralized cloud -managed dashboard for all remote
|
| 17 |
+
sites and to lower costs by eliminating the need for servers, switches, and other hardware.
|
| 18 |
+
Chorus AP is the perfect answer for this concern . The key futures of Chorus are listed as follows :
|
| 19 |
+
Deployment simplicity:
|
| 20 |
+
Experience true zero -touch deployment just plug in the Chorus AP, and it works.
|
| 21 |
+
Data stays on -premises:
|
| 22 |
+
The Harmony data plane is contained within the Chorus AP.
|
| 23 |
+
Simplified device onboarding:
|
| 24 |
+
The multi -tenanted control plane is hosted in the cloud and automatically connects to the Chorus
|
| 25 |
+
AP on boot -up.
|
| 26 |
+
Device onboarding is managed through a cloud management dashboard.
|
| 27 |
+
The target use cases are listed as follows :
|
| 28 |
+
Enable quick point -to-point 5G connections in oil & gas, factory shop floors, vision -based use cases,
|
| 29 |
+
and more.
|
| 30 |
+
Enterprise customers are looking to augment Wi -Fi with 5G, such as in parking lots or airports for
|
| 31 |
+
cameras, or for private networks in venues and stadiums.
|
| 32 |
+
Ideal for small deployments of 1 to 5 nodes.
|
pages/Chorus_R1.1_QuickStartGuide_page_006.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 6
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 6 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 1 Chorus Architecture
|
pages/Chorus_R1.1_QuickStartGuide_page_007.txt
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 7
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 7 CHORUS QUICK START GUIDE
|
| 6 |
+
3 Quick Start Guide
|
| 7 |
+
3.1 Prerequisites
|
| 8 |
+
Chorus is designed for convenient deployment . There are only 2 prerequisites:
|
| 9 |
+
Chorus Cloud account
|
| 10 |
+
Chorus Device
|
| 11 |
+
|
| 12 |
+
3.1.1 Chorus Cloud Account
|
| 13 |
+
To activate your account, check the invitation mail from Ataya Chorus . Click the ACCEPT INVITATION button
|
| 14 |
+
and you will be redirected to the Chorus page . Then you will be required to set a password with complexity.
|
| 15 |
+
Examples are shown as follows :
|
| 16 |
+
|
| 17 |
+
Figure 2 Chorus invitation mail
|
pages/Chorus_R1.1_QuickStartGuide_page_008.txt
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 8
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 8 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 3 Chorus first login password setup
|
| 8 |
+
Then you should see the main page of Chorus with your successfully created account. Examples are as
|
| 9 |
+
follows :
|
| 10 |
+
|
| 11 |
+
Figure 4 Chorus main page
|
| 12 |
+
3.1.2 Chorus Device
|
| 13 |
+
The Chorus Device refers to the hardware that had been integrated with Chorus Agent , Chorus Data Plane
|
| 14 |
+
and the gNB.
|
pages/Chorus_R1.1_QuickStartGuide_page_009.txt
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 9
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 9 CHORUS QUICK START GUIDE
|
| 6 |
+
3.2 Quick Start Steps
|
| 7 |
+
3.2.1 Confirm 5G service configuration
|
| 8 |
+
There are four main configuration sections related to 5G services: Traffic Related Configuration , 5G Related
|
| 9 |
+
Configuration, Network Configuration and Device Time Synchronization . Chorus comes with a default set
|
| 10 |
+
of configurations, but you need to confirm those mandatory parameters (the one with a red asterisk before
|
| 11 |
+
column name) such as PLMN (MCC and MNC), Slice type and ID, Tracking Area range. Confirm these
|
| 12 |
+
configurations by cli cking Organization on the top menu bar and hit the Service Configuration on the left
|
| 13 |
+
side-menu. Examples are shown below:
|
| 14 |
+
|
| 15 |
+
Figure 5 Service Configuration
|
| 16 |
+
3.2.2 Add Device
|
| 17 |
+
After all the prerequisites mentioned in 3.1 are ready, the first thing to do is to register Chorus Device and
|
| 18 |
+
configure related setting on Chorus Cloud (https://dashboard -chorus.ataya.io/dashboard ). Log in with your
|
| 19 |
+
Chorus account and click the Device s on top menu bar and click +Add Device button on the top -right. And
|
| 20 |
+
input the device name, MAC address and serial number. Examples are as follows :
|
pages/Chorus_R1.1_QuickStartGuide_page_010.txt
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 10
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 10 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 6 Add Chorus Device
|
| 8 |
+
|
| 9 |
+
figure 7 Chorus Device configuration
|
| 10 |
+
Device name: Chorus Cell Name
|
| 11 |
+
MAC address : MAC address of Chorus Cell. Example FC:B2D6:F6:D6:F7
|
| 12 |
+
Serial Number :12 digi t of Serial Number for Chorus Cell, Example SC280600079
|
| 13 |
+
Zone: Choose which Zone this device belongs to. Default: {Your Organization Name }. Refer
|
| 14 |
+
to Appendix 3 for more details about Zone .
|
| 15 |
+
|
| 16 |
+
You can find the Serial Number and MAC address information on the Chorus devices, examples as
|
| 17 |
+
following:
|
| 18 |
+
|
| 19 |
+
Figure 8 Device Serial Number and MAC information
|
pages/Chorus_R1.1_QuickStartGuide_page_011.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 11
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 11 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
If Chorus device is successfully created, you will see your device on the Devices list, as shown below:
|
| 8 |
+
|
| 9 |
+
Figure 9 Devices list shows successfully created Chorus device
|
| 10 |
+
Please ensure that your license is valid and within the expiration period; otherwise, Chorus will not
|
| 11 |
+
establish the tunnel between the Chorus AP and the cloud core network.
|
| 12 |
+
|
| 13 |
+
3.2.3 Create Client Credentials
|
| 14 |
+
To configure new 5G clients, click on Clients on the top menu bar. Then you can click the + Credentials
|
| 15 |
+
button on the top -right and choose either Upload / Fetch Client Credentials (.csv) to upload a list of client
|
| 16 |
+
credentials in CSV format or Enter Credential Info to enter a single client credential.
|
| 17 |
+
|
| 18 |
+
To upload a CSV file with client credentials, click the sample CSV file to download a sample file first to make
|
| 19 |
+
sure your CSV file contains all needed columns.
|
| 20 |
+
|
| 21 |
+
Figure 10 Upload / Fetch Client Credentials
|
| 22 |
+
If you select Enter Credential Info , you can enter a single client credential configuration:
|
pages/Chorus_R1.1_QuickStartGuide_page_012.txt
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 12
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 12 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 11 A single 5G client credential configuration
|
| 8 |
+
Subscriber Name: for display purposes
|
| 9 |
+
IMSI/SUPI: 5G subscriber identity
|
| 10 |
+
Key, OPC: the credential of the subscriber
|
| 11 |
+
Status: The client can be in assigned or not -assigned state. If it is in not-assigned state , Chorus will
|
| 12 |
+
deny this 5G client access .
|
| 13 |
+
|
| 14 |
+
For the Access Mobility Data section, please fill in your configuration as below:
|
| 15 |
+
|
| 16 |
+
Figure 12 Configure the policies for the client
|
| 17 |
+
You can apply policy about this client as follows :
|
| 18 |
+
Static IP address
|
| 19 |
+
You can configure a static IP address for the 5G UE but must be out of the configured UE IP range
|
| 20 |
+
pool of the DNN (those IP addresses could be assigned to other UEs).
|
pages/Chorus_R1.1_QuickStartGuide_page_013.txt
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 13
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 13 CHORUS QUICK START GUIDE
|
| 6 |
+
Bandwidth Limit
|
| 7 |
+
To limit maximum rates (UE AMBR) , update the AMBR Uplink and AMBR Downlink to the desired
|
| 8 |
+
values for the specific UE. This value will take precedence over a global UE AMBR in Service
|
| 9 |
+
Configuration for this specific UE.
|
| 10 |
+
IMEI Lock
|
| 11 |
+
Enabling this option will restrict th e enter SIM information for the specific UE to be used only by a
|
| 12 |
+
device with the given IMEI .
|
| 13 |
+
Policy
|
| 14 |
+
If there are predefined policies in Harmony system, the Policy drop down menu will show the
|
| 15 |
+
configured policies. Note that each client can only assign one policy.
|
| 16 |
+
|
| 17 |
+
3.2.4 IP address for Chorus Device
|
| 18 |
+
Chorus requires a DHCP (Dynamic Host Configuration Protocol ) serve r in yo ur Data Network. Chorus will
|
| 19 |
+
ask your DHCP server for two dynamic IP addresses : Mgmt -ip and N6_IP (see Appendix for DHCP
|
| 20 |
+
requirements). If there is a DHCP server in your Data Network, you do not need to configure it manually.
|
| 21 |
+
|
| 22 |
+
The structure of Chorus data network is shown as follows :
|
| 23 |
+
|
| 24 |
+
Figure 13 Chorus Structure
|
| 25 |
+
Note that if you are using a L2/L3 switch, the mode of connection between Chorus AP to your switch must
|
| 26 |
+
NOT be set to trunk mode. Both the Mgmt -ip and N6_IP on the Chorus AP are logical interfaces, sharing a
|
| 27 |
+
single physical interface.
|
pages/Chorus_R1.1_QuickStartGuide_page_014.txt
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 14
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 14 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
3.2.5 Configure IP address Pool for UE
|
| 8 |
+
The IP that UE will get is determined by Zone configuration. To change this setting, click the 3 -dots icon on
|
| 9 |
+
the right of your Zone , hit the Edit Zone and toggle the switch of NAT.
|
| 10 |
+
|
| 11 |
+
Figure 14 Configure UE IP Pools
|
| 12 |
+
NAT enabled / disabled:
|
| 13 |
+
If NAT is enabled, UEs will share the N6 IP address for outbound network traffic. The internal UE IP
|
| 14 |
+
pool is 192.168.65.1 ~ 192.168.65.254 by default.
|
| 15 |
+
If NAT is disabled, you must ensure that the start and end IP addresses align with the Zone's subnet
|
| 16 |
+
(refer to Appendix 3 for details on zones and IP subnets). Additionally, verify that these IP addresses
|
| 17 |
+
are not assigned to other clients within the Zone. The quantity of IP addresses should correspond to
|
| 18 |
+
the expected number of UEs to be supported in the Zone.
|
| 19 |
+
|
| 20 |
+
Figure 15 UE IP address
|
pages/Chorus_R1.1_QuickStartGuide_page_015.txt
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 15
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 15 CHORUS QUICK START GUIDE
|
| 6 |
+
UE uses DHCP to get an IP from external server (Beta) :
|
| 7 |
+
A beta feature is currently available that allows the UE to obtain an IP address from an external DHCP
|
| 8 |
+
server. If this feature is enabled, the UE will receive its IP address from the external DHCP server. Please
|
| 9 |
+
note that this setting cannot be modified once a Zone has been created. To utilize this feature, you must
|
| 10 |
+
create a new Zone and migrate your device to it.
|
| 11 |
+
|
| 12 |
+
Figure 16 UE gets IP via external DHCP server
|
| 13 |
+
3.2.6 Connect to Internet
|
| 14 |
+
Connect the Chorus Device to an internet connection by using an Ethernet cable from the port labeled
|
| 15 |
+
Internet to switch/router in your site. Please ensure that the router provides DHCP service .
|
| 16 |
+
|
| 17 |
+
3.2.7 Power On
|
| 18 |
+
After the configuration on Chorus cloud dashboard is done, connect the power supply and power on
|
| 19 |
+
Chorus AP and wait for the initialization (after initialization it will reboot automatically ). Once the reboot is
|
| 20 |
+
done and the service is up, you can check the status of Chorus Device by its LED indicators.
|
| 21 |
+
|
| 22 |
+
3.2.8 Device Status
|
| 23 |
+
You can check the status of the Chorus device in Devices tab. You can hit the Details page to get additional
|
| 24 |
+
information about the device and its status. If device is connected it should show something like this
|
| 25 |
+
|
| 26 |
+
Figure 17 Chorus Device status
|
| 27 |
+
And on clicking the details you should see all three sections as green
|
pages/Chorus_R1.1_QuickStartGuide_page_016.txt
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 16
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 16 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 18 Chorus Device Details
|
| 8 |
+
|
| 9 |
+
3.2.9 Connect UE /Clients
|
| 10 |
+
Now the Chorus AP is ready to work. Y ou can turn on your client . Check the status of your client in the
|
| 11 |
+
Chorus cloud dashboard in the Insights & Analytics ->Client Statistics tab.
|
pages/Chorus_R1.1_QuickStartGuide_page_017.txt
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 17
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 17 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 19 Active Clients shown on Cloud Dashboard
|
| 8 |
+
3.2.10 Using Customized Zone and DNN
|
| 9 |
+
Chorus comes with default Zone : {your organization name} and default DNN : internet . If you want to
|
| 10 |
+
change Zone name to your preference or change DNN name, you can follow the instruction below:
|
| 11 |
+
|
| 12 |
+
3.2.10.1 Create Zone
|
| 13 |
+
A Zone in Chorus represents a broad label for a specific area or region. To Create a new Zone, first click the
|
| 14 |
+
Devices on the top menu bar, then click the Gear button on the top -right, as follows :
|
| 15 |
+
|
| 16 |
+
Figure 20 Add a New Zone
|
| 17 |
+
And input your zone details as following figure:
|
pages/Chorus_R1.1_QuickStartGuide_page_018.txt
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 18
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 18 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 21 Input Zone Detail
|
| 8 |
+
Zone Name: Provide a name
|
| 9 |
+
Zone Description: Provide a description
|
| 10 |
+
NAT (Network address translation) : If enabled NAT, The UE will share N6 IP address for outbound
|
| 11 |
+
network and IP range for UE will setting 192.168.65.1 -192.168.65.254 by default.
|
| 12 |
+
IP Range : IP pool for UE: IP range for UE. This pool shall R eserve a range of IP address f rom DHCP
|
| 13 |
+
server .
|
| 14 |
+
DHCP from external server (Beta): if this is enabled, UE will get an IP from an external DHCP
|
| 15 |
+
server.
|
| 16 |
+
|
| 17 |
+
3.2.10.2 Create DNN
|
| 18 |
+
Select DNN configuration on the left sidebar . Chorus System comes with a default DNN called internet
|
| 19 |
+
and ready to be used. But if you want to add a new DNN, you can click the +DNN Configuration on the top -
|
| 20 |
+
right and input the DNN name, 5QI and ARP as you desire. Examples are shown as follows .
|
pages/Chorus_R1.1_QuickStartGuide_page_019.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 19
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 19 CHORUS QUICK START GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 22 Setup DNN in Chorus
|
pages/Chorus_R1.1_QuickStartGuide_page_020.txt
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 20
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 20 CHORUS QUICK START GUIDE
|
| 6 |
+
4 Trouble shoot ing
|
| 7 |
+
4.1 Chorus Device Connection Failure
|
| 8 |
+
Please check if Device has been configured (check MAC and S/N)
|
| 9 |
+
Please check if device has license
|
| 10 |
+
Please check internet connectivity
|
| 11 |
+
4.2 UE Connection Failure
|
| 12 |
+
Please check if Chorus device is active/connected (Devices tab)
|
| 13 |
+
Please check if SIM used in UE is configured in Chorus Cloud (clients tab)
|
| 14 |
+
Please check if DNN configured in UE matches that in Chorus Cloud (Organization ->DNN
|
| 15 |
+
configuration)
|
| 16 |
+
If NAT is disabled, please check if IP address assigned to UE matches your Zone IP (Devices ->Edit
|
| 17 |
+
Zone)
|
pages/Chorus_R1.1_QuickStartGuide_page_021.txt
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 21
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 21 CHORUS QUICK START GUIDE
|
| 6 |
+
Appendix 1 Glossary
|
| 7 |
+
Terminology Definition
|
| 8 |
+
5GC 5G Core network
|
| 9 |
+
5QI 5G QoS Identifier
|
| 10 |
+
AKA Authentication & Key Management ( e.g., 5G-AKA)
|
| 11 |
+
AMBR Aggregate Maximum Bit Rate
|
| 12 |
+
AMF Access & mobility Management Function
|
| 13 |
+
ARP Address Resolution Protocol, or
|
| 14 |
+
Allocation & Retention Priority
|
| 15 |
+
AUSF Authentication Server Function
|
| 16 |
+
CQI Channel Quality Indicator
|
| 17 |
+
CSV Comma -Separated Values file is a text file saved in a table structure format
|
| 18 |
+
DNN Data Network Name
|
| 19 |
+
DNS Domain Name System
|
| 20 |
+
EAP-AKA Extensible Authentication Protocol - AKA
|
| 21 |
+
EAP-TLS Extensible Authentication Protocol - Transport Layer Security
|
| 22 |
+
EMS Element Management System
|
| 23 |
+
gNB next Generation NodeB (the name of a 5G base station)
|
| 24 |
+
gNB Zone A group of gNBs; can be defined as a statistics calculation and display unit
|
| 25 |
+
GW Gateway
|
| 26 |
+
IMEI International Mobile Equipment Identity
|
| 27 |
+
IMSI International Mobile Subscriber Identity
|
pages/Chorus_R1.1_QuickStartGuide_page_022.txt
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 22
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 22 CHORUS QUICK START GUIDE
|
| 6 |
+
KPI Key Performance Indicator
|
| 7 |
+
MAD Mean Absolute Deviation
|
| 8 |
+
MCC Mobile Country Code
|
| 9 |
+
MNC Mobile Network Code
|
| 10 |
+
MSP Managed Service Provider
|
| 11 |
+
N3W Interface of UIWF for Wi-Fi/wired networks
|
| 12 |
+
Network A Harmony Network represents a Kubernetes cluster, is one or a group of nodes
|
| 13 |
+
(hosts ) running Harmony services (data, control, & management) under one
|
| 14 |
+
configuration .
|
| 15 |
+
Node A Node in a Kubernetes cluster runs as an instance (virtual machine) . For Harmony by
|
| 16 |
+
default a host has a node running on it. A node runs one or more pods in it.
|
| 17 |
+
Pod A Kubernetes Pod is the smallest deployable unit that can be created and managed. It
|
| 18 |
+
runs one or more containers. A Linux analogy for a pod is similar to a set of containers
|
| 19 |
+
with shared namespaces and filesystem volumes.
|
| 20 |
+
QoS Quality of Service
|
| 21 |
+
RAN Radio Access Network
|
| 22 |
+
RAT Radio Access Technology
|
| 23 |
+
SI Systems Integrator
|
| 24 |
+
Site A Harmony site is a location with a data plane running at the location
|
| 25 |
+
SMS Short Messaging Service
|
| 26 |
+
SMTP Simple Mail Transfer Protocol
|
| 27 |
+
SN or SQN Sequence Number
|
| 28 |
+
SSH Secure Shell protocol
|
| 29 |
+
SUPI Subscription Permanent Identifier
|
| 30 |
+
TAC Tracking Area Code
|
pages/Chorus_R1.1_QuickStartGuide_page_023.txt
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 23
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 23 CHORUS QUICK START GUIDE
|
| 6 |
+
TAI Tracking Area Identity
|
| 7 |
+
(PLMN + TAC)
|
| 8 |
+
UIWF Universal Inter -Working Function
|
| 9 |
+
UPF User Plane Function ; the 5G terminology for data plane
|
| 10 |
+
Zone (see Device Zone in section 0)
|
| 11 |
+
|
| 12 |
+
Appendix 2 DHCP Requirement
|
| 13 |
+
To ensure the Chorus system operates correctly , there are several requirements about the DHCP server
|
| 14 |
+
configuration listed as follows :
|
| 15 |
+
Allocate IP addresses for Mgmt and N6 based on their MAC Address
|
| 16 |
+
Provide subnet prefix / netmask in DHCP Offer
|
| 17 |
+
Provide Gateway IP address in DHCP Offer
|
| 18 |
+
Provide DNS server IP address in DHCP Offer
|
| 19 |
+
Reserve a range of IP addresses for UE (not dynamic allocated)
|
| 20 |
+
Appendix 3 Concept of Zone
|
| 21 |
+
To better manage all the Chorus APs, Ataya introduced the concept of Zones. The design of Zones allows
|
| 22 |
+
you to categorize and manage all your Chorus APs and control the network connectivity between them.
|
| 23 |
+
In general, the Chorus AP requires the customer network to enable connectivity from the Chorus AP to the
|
| 24 |
+
Chorus Cloud through a DHCP -assigned management IP and a network gateway. The Chorus AP will need
|
| 25 |
+
another DHCP -assigned data plane IP address to provide 5G UE connectivity to local, internal, and external
|
| 26 |
+
services.
|
| 27 |
+
When a Chorus zone disables data plane NAT, Chorus zone enables additional possibilities:
|
| 28 |
+
The Chorus zone allows services to initiate connections to a 5G UE served by a Chorus AP in the
|
| 29 |
+
Chorus zone.
|
| 30 |
+
The Chorus zone allows a 5G UE to initiate connections to a 5G UE served by another Chorus AP in
|
| 31 |
+
the same Chorus zone.
|
pages/Chorus_R1.1_QuickStartGuide_page_024.txt
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 24
|
| 2 |
+
Document: Chorus R1.1 Quick Start Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 24 CHORUS QUICK START GUIDE
|
| 6 |
+
To achieve these capabilities, 5G UEs are assigned IP addresses from a Chorus zone IP address pool
|
| 7 |
+
allocated from the subnetwork the Chorus AP is attached to. This pool should be outside of the address
|
| 8 |
+
pool used by the DHCP server on the subnetwork. The 5G UE will keep its assigned address when it moves
|
| 9 |
+
among Chorus APs in the zone.
|
| 10 |
+
|
| 11 |
+
Figure 23 Chorus Zone UE can reach another UE on different Chorus AP in Zone
|
| 12 |
+
When users keep the Chorus zone data plane NAT enabled, the attached 5G UEs will be assigned IP
|
| 13 |
+
address es caged within the Chorus AP they are attached to . In mobility handover, t he NAT caged IP
|
| 14 |
+
address cannot be carried to or from a Chorus AP. Services will not be able to initiate access to t hese caged
|
| 15 |
+
IP addresses.
|
| 16 |
+
|
| 17 |
+
Figure 24 Chorus Zone Chorus Zone with source NAT
|
pages/Chorus_R1.1_UserGuide_TOC.txt
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
TABLE OF CONTENTS
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
Total Pages: 70
|
| 4 |
+
Generated from: Chorus R1.1 User Guide.pdf
|
| 5 |
+
==================================================
|
| 6 |
+
|
| 7 |
+
1 Objective - Page 9
|
| 8 |
+
2 Chorus AP - Page 10
|
| 9 |
+
2.1 Brief Introduction - Page 10
|
| 10 |
+
3 Prerequisites - Page 12
|
| 11 |
+
3.1 Chorus Cloud Account - Page 12
|
| 12 |
+
3.2 Chorus Device - Page 13
|
| 13 |
+
4 Dashboard for Chorus - Page 14
|
| 14 |
+
4.1 Insights & Analytics - Page 14
|
| 15 |
+
4.1.1 Overview - Page 14
|
| 16 |
+
4.1.2 Network Statistics - Page 15
|
| 17 |
+
4.1.3 Device Statistics - Page 16
|
| 18 |
+
4.1.4 Client Statistics - Page 19
|
| 19 |
+
4.1.5 Alerts - Page 21
|
| 20 |
+
4.2 Devices - Page 25
|
| 21 |
+
4.2.1 Views for Devices - Page 25
|
| 22 |
+
4.2.1.1 Types of View - Page 25
|
| 23 |
+
4.2.1.2 Configure Device Location for Map View - Page 27
|
| 24 |
+
4.2.1.3 Upload Indoor Site Map and Set Device Position - Page 27
|
| 25 |
+
4.2.2 Manage Zone - Page 29
|
| 26 |
+
4.2.2.1 Creating a New Zone - Page 29
|
| 27 |
+
4.2.2.2 Edit a Zone - Page 30
|
| 28 |
+
4.2.2.3 Manage Neighbor List - Page 31
|
| 29 |
+
4.2.2.4 Delete a Zone - Page 32
|
| 30 |
+
4.2.3 Manage Device - Page 32
|
| 31 |
+
4.2.3.1 Add Device - Page 32
|
| 32 |
+
4.2.3.2 Edit An existing Device - Page 34
|
| 33 |
+
4.2.3.3 Manage License - Page 37
|
| 34 |
+
4.2.3.4 Manage Neighbor List - Page 38
|
| 35 |
+
4.2.3.5 Reboot a Device - Page 38
|
| 36 |
+
4.2.3.6 Restart UPF - Page 39
|
| 37 |
+
4.2.3.7 Upload Log - Page 39
|
| 38 |
+
4.2.3.8 Delete Device - Page 40
|
| 39 |
+
4.2.3.9 Turn On/Off Radio - Page 40
|
| 40 |
+
4.2.3.10 Device Details - Page 41
|
| 41 |
+
4.2.3.11 Device Events - Page 43
|
| 42 |
+
4.3 Clients - Page 44
|
| 43 |
+
4.3.1 Creating New Clients - Page 44
|
| 44 |
+
4.3.2 Edit Clients - Page 46
|
| 45 |
+
4.3.3 Assign / unassign clients - Page 47
|
| 46 |
+
4.3.4 Block clients - Page 48
|
| 47 |
+
4.3.5 Delete Clients - Page 49
|
| 48 |
+
4.4 Policies - Page 50
|
| 49 |
+
4.4.1 Set Bandwidth Limit - Page 51
|
| 50 |
+
4.4.2 Enable Application Slicing - Page 51
|
| 51 |
+
4.4.3 Enable IP Filtering - Page 52
|
| 52 |
+
4.4.4 Enable Time Schedule - Page 53
|
| 53 |
+
4.4.5 Applying a Configured Policy to a Client - Page 53
|
| 54 |
+
4.4.6 Clone Policy - Page 54
|
| 55 |
+
4.4.7 Set as default - Page 55
|
| 56 |
+
4.4.8 View Attached Clients - Page 55
|
| 57 |
+
4.4.9 Delete Policy - Page 56
|
| 58 |
+
4.5 Organization - Page 56
|
| 59 |
+
4.5.1 User Management - Page 56
|
| 60 |
+
4.5.1.1 Inviting New User - Page 56
|
| 61 |
+
4.5.1.2 Delete User - Page 57
|
| 62 |
+
4.5.2 Private Key Management - Page 57
|
| 63 |
+
4.5.3 Settings - Page 58
|
| 64 |
+
4.5.3.1 Timezone And License - Page 58
|
| 65 |
+
4.5.3.2 Alert Notifications - Page 59
|
| 66 |
+
4.5.4 Service Configuration - Page 62
|
| 67 |
+
4.5.5 DNN Configuration - Page 63
|
| 68 |
+
4.5.6 Audit - Page 63
|
| 69 |
+
4.6 Help Center - Page 64
|
| 70 |
+
Appendix 1 Glossary - Page 66
|
| 71 |
+
Appendix 2 DHCP Requirement - Page 68
|
| 72 |
+
Appendix 3 Concept of Zone - Page 68
|
| 73 |
+
Appendix 4 DHCP Server Configuration Example (isc-DHCP) - Page 70
|
pages/Chorus_R1.1_UserGuide_page_001.txt
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 1
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 1 CHORUS USER GUIDE
|
| 6 |
+
|
| 7 |
+
Chorus Release 1.1
|
| 8 |
+
User Guide
|
pages/Chorus_R1.1_UserGuide_page_002.txt
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 2
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 2 CHORUS USER GUIDE
|
| 6 |
+
Table of Contents
|
| 7 |
+
|
| 8 |
+
1 Objective ................................ ................................ ................................ ................................ .................... 9
|
| 9 |
+
2 Chorus AP ................................ ................................ ................................ ................................ ................. 10
|
| 10 |
+
2.1 Brief Introduction ................................ ................................ ................................ ............................. 10
|
| 11 |
+
3 Prerequisites ................................ ................................ ................................ ................................ ............ 12
|
| 12 |
+
3.1 Chorus Cloud Account ................................ ................................ ................................ ...................... 12
|
| 13 |
+
3.2 Chorus Device ................................ ................................ ................................ ................................ .. 13
|
| 14 |
+
4 Dashboard for Chorus ................................ ................................ ................................ .............................. 14
|
| 15 |
+
4.1 Insights & Analytics ................................ ................................ ................................ .......................... 14
|
| 16 |
+
4.1.1 Overview ................................ ................................ ................................ ................................ .. 14
|
| 17 |
+
4.1.2 Network Statistics ................................ ................................ ................................ .................... 15
|
| 18 |
+
4.1.3 Device Statistics ................................ ................................ ................................ ....................... 16
|
| 19 |
+
4.1.4 Client Statistics ................................ ................................ ................................ ......................... 19
|
| 20 |
+
4.1.5 Alerts ................................ ................................ ................................ ................................ ........ 21
|
| 21 |
+
4.2 Devices ................................ ................................ ................................ ................................ ............. 25
|
| 22 |
+
4.2.1 Views for Devices ................................ ................................ ................................ ..................... 25
|
| 23 |
+
4.2.1.1 Types of View ................................ ................................ ................................ ....................... 25
|
| 24 |
+
4.2.1.2 Configure Device Location for Map View ................................ ................................ ............ 27
|
| 25 |
+
4.2.1.3 Upload Indoor Site Map and Set Device Position ................................ ................................ 27
|
| 26 |
+
4.2.2 Manage Zone ................................ ................................ ................................ ........................... 29
|
| 27 |
+
4.2.2.1 Creating a New Zone ................................ ................................ ................................ ............ 29
|
| 28 |
+
4.2.2.2 Edit a Zone ................................ ................................ ................................ ............................ 30
|
| 29 |
+
4.2.2.3 Manage Neighbor List ................................ ................................ ................................ .......... 31
|
| 30 |
+
4.2.2.4 Delete a Zone ................................ ................................ ................................ ....................... 32
|
| 31 |
+
4.2.3 Manage Device ................................ ................................ ................................ ......................... 32
|
| 32 |
+
4.2.3.1 Add Device ................................ ................................ ................................ ........................... 32
|
| 33 |
+
4.2.3.2 Edit An existing Device ................................ ................................ ................................ ......... 34
|
| 34 |
+
4.2.3.3 Manage License ................................ ................................ ................................ ................... 37
|
| 35 |
+
4.2.3.4 Manage Neighbor List ................................ ................................ ................................ .......... 38
|
| 36 |
+
4.2.3.5 Reboot a Device ................................ ................................ ................................ ................... 38
|
pages/Chorus_R1.1_UserGuide_page_003.txt
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 3
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 3 CHORUS USER GUIDE
|
| 6 |
+
4.2.3.6 Restart UPF ................................ ................................ ................................ ........................... 39
|
| 7 |
+
4.2.3.7 Upload Log ................................ ................................ ................................ ........................... 39
|
| 8 |
+
4.2.3.8 Delete Device ................................ ................................ ................................ ....................... 40
|
| 9 |
+
4.2.3.9 Turn On/Off Radio ................................ ................................ ................................ ................ 40
|
| 10 |
+
4.2.3.10 Device Details ................................ ................................ ................................ ................... 41
|
| 11 |
+
4.2.3.11 Device Events ................................ ................................ ................................ ................... 43
|
| 12 |
+
4.3 Clients ................................ ................................ ................................ ................................ ............... 44
|
| 13 |
+
4.3.1 Creating New Clients ................................ ................................ ................................ ................ 44
|
| 14 |
+
4.3.2 Edit Clients ................................ ................................ ................................ ............................... 46
|
| 15 |
+
4.3.3 Assign / unassign clients ................................ ................................ ................................ .......... 47
|
| 16 |
+
4.3.4 Block clients ................................ ................................ ................................ ............................. 48
|
| 17 |
+
4.3.5 Delete Clients ................................ ................................ ................................ ........................... 49
|
| 18 |
+
4.4 Policies ................................ ................................ ................................ ................................ ............. 50
|
| 19 |
+
4.4.1 Set Bandwidth Limit ................................ ................................ ................................ ................. 51
|
| 20 |
+
4.4.2 Enable Application Slicing ................................ ................................ ................................ ........ 51
|
| 21 |
+
4.4.3 Enable IP Filtering ................................ ................................ ................................ .................... 52
|
| 22 |
+
4.4.4 Enable Time Schedule ................................ ................................ ................................ .............. 53
|
| 23 |
+
4.4.5 Applying a Configured Policy to a Client ................................ ................................ .................. 53
|
| 24 |
+
4.4.6 Clone Policy ................................ ................................ ................................ .............................. 54
|
| 25 |
+
4.4.7 Set as default ................................ ................................ ................................ ............................ 55
|
| 26 |
+
4.4.8 View A ttached Clients ................................ ................................ ................................ .............. 55
|
| 27 |
+
4.4.9 Delete Policy ................................ ................................ ................................ ............................. 56
|
| 28 |
+
4.5 Organization ................................ ................................ ................................ ................................ ..... 56
|
| 29 |
+
4.5.1 User Management ................................ ................................ ................................ ................... 56
|
| 30 |
+
4.5.1.1 Inviting New User ................................ ................................ ................................ ................. 56
|
| 31 |
+
4.5.1.2 Delete User ................................ ................................ ................................ .......................... 57
|
| 32 |
+
4.5.2 Private Key Management ................................ ................................ ................................ ......... 57
|
| 33 |
+
4.5.3 Settings ................................ ................................ ................................ ................................ ..... 58
|
| 34 |
+
4.5.3.1 Timezone And License ................................ ................................ ................................ .......... 58
|
| 35 |
+
4.5.3.2 Alert Notifications ................................ ................................ ................................ ................ 59
|
| 36 |
+
4.5.4 Service Configuration ................................ ................................ ................................ ............... 62
|
pages/Chorus_R1.1_UserGuide_page_004.txt
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 4
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 4 CHORUS USER GUIDE
|
| 6 |
+
4.5.5 DNN Configuration ................................ ................................ ................................ ................... 63
|
| 7 |
+
4.5.6 Audit ................................ ................................ ................................ ................................ ......... 63
|
| 8 |
+
4.6 Help Center ................................ ................................ ................................ ................................ ...... 64
|
| 9 |
+
Appendix 1 Glossary ................................ ................................ ................................ ................................ .... 66
|
| 10 |
+
Appendix 2 DHCP Requirement ................................ ................................ ................................ .................. 68
|
| 11 |
+
Appendix 3 Concept of Zone ................................ ................................ ................................ ....................... 68
|
| 12 |
+
Appendix 4 DHCP Server Configuration Example (isc -DHCP) ................................ ................................ ...... 70
|
pages/Chorus_R1.1_UserGuide_page_005.txt
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 5
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 5 CHORUS USER GUIDE
|
| 6 |
+
Table of Figures
|
| 7 |
+
Figure 1 Chorus Architecture ................................ ................................ ................................ ........................... 11
|
| 8 |
+
Figure 2 Chorus invitation mail ................................ ................................ ................................ ........................ 12
|
| 9 |
+
Figure 3 Chorus first login password setup ................................ ................................ ................................ ...... 13
|
| 10 |
+
Figure 4 Chorus main page ................................ ................................ ................................ .............................. 13
|
| 11 |
+
Figure 5 Overview ................................ ................................ ................................ ................................ ............ 14
|
| 12 |
+
Figure 6 Network Statistics ................................ ................................ ................................ .............................. 16
|
| 13 |
+
Figure 7 Chorus Device Statistics ................................ ................................ ................................ ..................... 16
|
| 14 |
+
Figure 8 Device KPIs dashboard ................................ ................................ ................................ ....................... 17
|
| 15 |
+
Figure 9 Select desired KPI information ................................ ................................ ................................ ........... 17
|
| 16 |
+
Figure 10 A Mean KPI example Channel Quality Indicator (CQI) ................................ ................................ .. 18
|
| 17 |
+
Figure 11 A Ratio KPI example -- UECNTX DRB Accessibility ................................ ................................ ........... 18
|
| 18 |
+
Figure 12 A Cumulative KPI example -- Total UL Data Volume Cumulative Measurements ............................ 18
|
| 19 |
+
Figure 13 Download CSV file for each KPI ................................ ................................ ................................ ........ 19
|
| 20 |
+
Figure 14 Client Statistics ................................ ................................ ................................ ................................ . 20
|
| 21 |
+
Figure 15 View Client Details ................................ ................................ ................................ ........................... 20
|
| 22 |
+
Figure 16 Client Details ................................ ................................ ................................ ................................ .... 21
|
| 23 |
+
Figure 17 De -register a client ................................ ................................ ................................ ........................... 21
|
| 24 |
+
Figure 18 Alerts Active Alerts ................................ ................................ ................................ ........................ 22
|
| 25 |
+
Figure 19 Alerts All Alerts ................................ ................................ ................................ .............................. 22
|
| 26 |
+
Figure 20 Alert Filter by gNB ID ................................ ................................ ................................ ........................ 23
|
| 27 |
+
Figure 21 Mouse Over the Details of An Alert to Read the Full Text ................................ ............................... 23
|
| 28 |
+
Figure 22 Show/Hide Columns Customization ................................ ................................ ................................ . 24
|
| 29 |
+
Figure 23 Device Table View ................................ ................................ ................................ ......................... 25
|
| 30 |
+
Figure 24 Device Map view - outdoor ................................ ................................ ................................ .............. 26
|
| 31 |
+
Figure 25 Device Map view indoor ................................ ................................ ................................ ............... 26
|
| 32 |
+
Figure 26 Outdoor/Indoor view switch ................................ ................................ ................................ ............ 26
|
| 33 |
+
Figure 27 Update Location Manually ................................ ................................ ................................ ............... 27
|
| 34 |
+
Figure 28 Input the Location Details ................................ ................................ ................................ ................ 27
|
| 35 |
+
Figure 29 choose to upload indoor site map ................................ ................................ ................................ ... 28
|
| 36 |
+
Figure 30 upload indoor site map ................................ ................................ ................................ .................... 28
|
| 37 |
+
Figure 31 more options for device ................................ ................................ ................................ ................... 29
|
| 38 |
+
Figure 32 Add a New Zone ................................ ................................ ................................ ............................... 29
|
| 39 |
+
Figure 33 Input Zone Detail ................................ ................................ ................................ .............................. 30
|
| 40 |
+
Figure 34 Edit an Existing Zone ................................ ................................ ................................ ........................ 31
|
| 41 |
+
Figure 35 Manage Neighbor List ................................ ................................ ................................ ...................... 31
|
| 42 |
+
Figure 36 Configure Neighbor List ................................ ................................ ................................ ................... 31
|
| 43 |
+
Figure 37 Delete an Existing Zone ................................ ................................ ................................ .................... 32
|
| 44 |
+
Figure 38 Add Chorus Device ................................ ................................ ................................ ........................... 32
|
pages/Chorus_R1.1_UserGuide_page_006.txt
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 6
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 6 CHORUS USER GUIDE
|
| 6 |
+
figure 39 Add Chorus Device ................................ ................................ ................................ ............................ 33
|
| 7 |
+
Figure 40 Device Serial Number and MAC information ................................ ................................ ................... 33
|
| 8 |
+
Figure 41 Upload Devices List in CSV file Format ................................ ................................ ............................. 34
|
| 9 |
+
Figure 42 Devices list shows successfully created Chorus device ................................ ................................ .... 34
|
| 10 |
+
Figure 43 Edit an Existing Device ................................ ................................ ................................ ..................... 35
|
| 11 |
+
Figure 44 Change Device name and select Zone ................................ ................................ ............................. 35
|
| 12 |
+
Figure 45 RF Parameters Configuration ................................ ................................ ................................ ........... 36
|
| 13 |
+
Figure 46 Static IP for N6 configuration ................................ ................................ ................................ ........... 37
|
| 14 |
+
Figure 47 Manage Devices License ................................ ................................ ................................ ................. 37
|
| 15 |
+
Figure 48 Assign or Delete a Devices License ................................ ................................ ................................ .. 38
|
| 16 |
+
Figure 49 Manage Neighbor List of a Device ................................ ................................ ................................ ... 38
|
| 17 |
+
Figure 50 Reboot a Device ................................ ................................ ................................ ............................... 39
|
| 18 |
+
Figure 51 Restart UPF ................................ ................................ ................................ ................................ ....... 39
|
| 19 |
+
Figure 52 Upload Log to Chorus ................................ ................................ ................................ ....................... 40
|
| 20 |
+
Figure 53 Delete a Device ................................ ................................ ................................ ................................ 40
|
| 21 |
+
Figure 54 Turn On/Off Radio ................................ ................................ ................................ ............................ 41
|
| 22 |
+
Figure 55 Details of a Device ................................ ................................ ................................ ............................ 41
|
| 23 |
+
Figure 56 Analytics for Traffic and Device uptime ................................ ................................ ........................... 42
|
| 24 |
+
Figure 57 Analytics for Clients Served ................................ ................................ ................................ .............. 42
|
| 25 |
+
Figure 58 Device Installation History ................................ ................................ ................................ ............... 42
|
| 26 |
+
Figure 59 Device Events ................................ ................................ ................................ ................................ ... 43
|
| 27 |
+
Figure 60 Upload 5G Client Credentials ................................ ................................ ................................ ........... 44
|
| 28 |
+
Figure 61 A single 5G client credential configuration ................................ ................................ ...................... 45
|
| 29 |
+
Figure 62 Configure the policies for the client ................................ ................................ ................................ . 46
|
| 30 |
+
Figure 63 Edit an Existing Client from Client List ................................ ................................ ............................. 47
|
| 31 |
+
Figure 64 Edit an Existing Client ................................ ................................ ................................ ....................... 47
|
| 32 |
+
Figure 65 Change assign / unassign status ................................ ................................ ................................ ....... 48
|
| 33 |
+
Figure 66 Block a client ................................ ................................ ................................ ................................ .... 48
|
| 34 |
+
Figure 67 Restore a Blocked Client ................................ ................................ ................................ ................... 48
|
| 35 |
+
Figure 68 Delete Client ................................ ................................ ................................ ................................ ..... 49
|
| 36 |
+
Figure 69 Policies ................................ ................................ ................................ ................................ ............. 50
|
| 37 |
+
Figure 70 A Policy creation example ................................ ................................ ................................ ................ 51
|
| 38 |
+
Figure 71 Configure bandwidth limit ................................ ................................ ................................ ............... 51
|
| 39 |
+
Figure 72 An example of application slicing configuration ................................ ................................ .............. 52
|
| 40 |
+
Figure 73 An example of an IP Filtering configuration ................................ ................................ ..................... 52
|
| 41 |
+
Figure 74 An example of client time schedule configuration ................................ ................................ .......... 53
|
| 42 |
+
Figure 75 Apply Policy to a Client ................................ ................................ ................................ ..................... 54
|
| 43 |
+
Figure 76 Choose a Policy to apply for a client ................................ ................................ ................................ 54
|
| 44 |
+
Figure 77 Clone a policy ................................ ................................ ................................ ................................ ... 55
|
pages/Chorus_R1.1_UserGuide_page_007.txt
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 7
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 7 CHORUS USER GUIDE
|
| 6 |
+
Figure 78 Set a Policy as Default ................................ ................................ ................................ ...................... 55
|
| 7 |
+
Figure 79 View Clients Assigned to a Policy ................................ ................................ ................................ ..... 56
|
| 8 |
+
Figure 80 Delete Policy ................................ ................................ ................................ ................................ ..... 56
|
| 9 |
+
Figure 81 Invite a New User ................................ ................................ ................................ ............................. 56
|
| 10 |
+
Figure 82 Limited Permission for a User with Role User ................................ ................................ .............. 57
|
| 11 |
+
Figure 83 Delete User ................................ ................................ ................................ ................................ ....... 57
|
| 12 |
+
Figure 84 Private Key Management ................................ ................................ ................................ ................. 58
|
| 13 |
+
Figure 85 Encrypt client signaling messages from 5GC ................................ ................................ ................... 58
|
| 14 |
+
Figure 86 License details ................................ ................................ ................................ ................................ .. 59
|
| 15 |
+
Figure 87 Webhooks Configuration to Publish Alerts ................................ ................................ ...................... 59
|
| 16 |
+
Figure 88 Configure to Send Alerts to a Specific Microsoft Teams group ................................ ........................ 60
|
| 17 |
+
Figure 89 Notifications can be sent to email addresses through the configured Email address .................... 60
|
| 18 |
+
Figure 90 Alert Notification with an Email entry configured ................................ ................................ ........... 61
|
| 19 |
+
Figure 91 Notifications can be sent via SMS to the configured Phone Number ................................ ............. 61
|
| 20 |
+
Figure 92 Alert Notification with SMS entry configured ................................ ................................ .................. 62
|
| 21 |
+
Figure 93 Service Configuration ................................ ................................ ................................ ....................... 63
|
| 22 |
+
Figure 94 Setup DNN in Chorus ................................ ................................ ................................ ....................... 63
|
| 23 |
+
Figure 95 Audit tab ................................ ................................ ................................ ................................ ........... 64
|
| 24 |
+
Figure 96 Audit details ................................ ................................ ................................ ................................ ..... 64
|
| 25 |
+
Figure 97 Help Center ................................ ................................ ................................ ................................ ...... 65
|
| 26 |
+
Figure 98 Help Center main page ................................ ................................ ................................ ..................... 65
|
| 27 |
+
Figure 99 Submit information ................................ ................................ ................................ .......................... 66
|
| 28 |
+
Figure 100 Chorus Zone UE can reach another UE on different Chorus AP in Zone ................................ ..... 69
|
| 29 |
+
Figure 101 Chorus Zone Chorus Zone with source NAT ................................ ................................ ................ 70
|
| 30 |
+
Figure 102 Example of isc -DHCP configuration ................................ ................................ ................................ 70
|
pages/Chorus_R1.1_UserGuide_page_008.txt
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 8
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 8 CHORUS USER GUIDE
|
| 6 |
+
Revision History
|
| 7 |
+
Version Contents Date
|
| 8 |
+
1.0 Initial Release April 10 , 2025
|
pages/Chorus_R1.1_UserGuide_page_009.txt
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 9
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 9 CHORUS USER GUIDE
|
| 6 |
+
1 Objective
|
| 7 |
+
This document provides a comprehensive overview of all the features of Ataya Chorus, with chapters
|
| 8 |
+
organized according to the Web GUI dashboard layout. If you have recently acquired a Chorus device and
|
| 9 |
+
need step -by-step instructions, please refer to the Chorus Quick Start Guide .
|
pages/Chorus_R1.1_UserGuide_page_010.txt
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 10
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 10 CHORUS USER GUIDE
|
| 6 |
+
2 Chorus AP
|
| 7 |
+
2.1 Brief Introduction
|
| 8 |
+
Private 5G solutions remain complex for small to medium -sized deployments. On -site installation of
|
| 9 |
+
hardware and software for the 5G Core and network integration into existing systems are challenging
|
| 10 |
+
tasks. Additionally, monitoring, troubleshooting, softwar e upgrades, and other maintenance activities add
|
| 11 |
+
to this complexity .
|
| 12 |
+
In many use cases, such as retail stores, gas stations, oil and gas operations, smart agriculture, and
|
| 13 |
+
emergency response systems, customers find the current 5G solutions overly burdensome. They are
|
| 14 |
+
looking for a simpler solution that reduces setup time and requires minimal on -site configuration. They
|
| 15 |
+
need a plug -and-play system where gNBs connect to the internet and provide instant 5G service.
|
| 16 |
+
It is essential to reduce operational complexity with a centralized cloud -managed dashboard for all remote
|
| 17 |
+
sites and to lower costs by eliminating the need for servers, switches, and other hardware.
|
| 18 |
+
Chorus AP is the perfect answer for this concern . It has been integrated with Chorus Agent , Chorus Data
|
| 19 |
+
Plane and the gNB. The key futures of Chorus AP are listed as follows :
|
| 20 |
+
Deployment simplicity:
|
| 21 |
+
Experience true zero -touch deployment just plug in the Chorus AP, and it works.
|
| 22 |
+
Data stays on -premises:
|
| 23 |
+
The Chorus data plane is contained within the Chorus AP.
|
| 24 |
+
Simplified device onboarding:
|
| 25 |
+
The multi -tenanted control plane is hosted in the cloud and automatically connects to the Chorus
|
| 26 |
+
AP on boot -up.
|
| 27 |
+
Device onboarding is managed through a cloud management dashboard.
|
| 28 |
+
The target use cases are listed as follows :
|
| 29 |
+
Enable quick point -to-point 5G connections in oil & gas, factory shop floors, vision -based use cases,
|
| 30 |
+
and more.
|
| 31 |
+
Enterprise customers are looking to augment Wi -Fi with 5G, such as in parking lots or airports for
|
| 32 |
+
cameras, or for private networks in venues and stadiums.
|
| 33 |
+
Ideal for small deployments of 1 to 5 nodes.
|
pages/Chorus_R1.1_UserGuide_page_011.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 11
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 11 CHORUS USER GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 1 Chorus Architecture
|
pages/Chorus_R1.1_UserGuide_page_012.txt
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 12
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 12 CHORUS USER GUIDE
|
| 6 |
+
3 Prerequisites
|
| 7 |
+
Chorus is designed for convenient deployment . There are only two prerequisites:
|
| 8 |
+
Chorus Cloud account.
|
| 9 |
+
Chorus Device
|
| 10 |
+
|
| 11 |
+
3.1 Chorus Cloud Account
|
| 12 |
+
To activate your account, check the invitation mail from Ataya Chorus . Click the ACCEPT INVITATION button
|
| 13 |
+
and you will be redirected to the Chorus page. Then you will be required to set a password with complexity.
|
| 14 |
+
Examples are shown as follows :
|
| 15 |
+
|
| 16 |
+
Figure 2 Chorus invitation mail
|
pages/Chorus_R1.1_UserGuide_page_013.txt
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 13
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 13 CHORUS USER GUIDE
|
| 6 |
+
|
| 7 |
+
Figure 3 Chorus first login password setup
|
| 8 |
+
Then you should see the main page (https://dashboard -chorus.ataya.io/dashboard ) of Chorus with your
|
| 9 |
+
successfully created account. Examples are as follows :
|
| 10 |
+
|
| 11 |
+
Figure 4 Chorus main page
|
| 12 |
+
3.2 Chorus Device
|
| 13 |
+
The Chorus Device refers to the hardware that had been integrated with Chorus Agent , Chorus Data Plane
|
| 14 |
+
and the gNB.
|
pages/Chorus_R1.1_UserGuide_page_014.txt
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Page 14
|
| 2 |
+
Document: Chorus R1.1 User Guide
|
| 3 |
+
==================================================
|
| 4 |
+
|
| 5 |
+
Ataya Proprietary and Confidential 14 CHORUS USER GUIDE
|
| 6 |
+
4 Dashboard for Chorus
|
| 7 |
+
This section will explain each feature on Chorus in order, following the layout of the dashboard.
|
| 8 |
+
4.1 Insights & Analytics
|
| 9 |
+
The Insights & Analytics option on the top menu allows the operator to view summary level statistics.
|
| 10 |
+
Each of the sub -sections below describe the functionality of each of left -pane option under Insights and
|
| 11 |
+
Analytics
|
| 12 |
+
|
| 13 |
+
4.1.1 Overview
|
| 14 |
+
|
| 15 |
+
Figure 5 Overview
|
| 16 |
+
The Overview main page is broken down into multiple subsections:
|
| 17 |
+
Alerts:
|
| 18 |
+
This shows the counts of critical and warning alerts during the last hour. A detailed list of all alerts
|
| 19 |
+
over longer time periods is available using the Alerts tab on the left sidebar.
|
| 20 |
+
Network/Cluster Summary:
|
| 21 |
+
This section shows the number of active 5G clients and number of active Chorus Devices.
|
| 22 |
+
Active Clients:
|
| 23 |
+
This section shows a list of active clients with information such as client name, acquired IP address,
|
| 24 |
+
last connection time and others. There are multiple filters, including DNN, gNB id and client ID that
|
| 25 |
+
can be used to focus on a subset of active client list . You can deregister a 5G client from 5G core
|
| 26 |
+
network by clicking on the target UE and then click on De-register . On the row of an active client,
|
| 27 |
+
you can click the 3 -dot action symbol and then click on Details, to see the full histo ry of the UE
|