feat(docs): update context window management documentation

- Refactor system message structure to combine system prompt and topology info using template variables
- Update token calculation process with merged system message approach
- Clarify priority order for message retention during context window management
- Add detailed token counting implementation using tiktoken library
- Include boundary case handling for system message exceeding budget
- Add SPDX license headers to tool files for proper licensing documentation
This commit is contained in:
YueGuobin 2026-03-05 11:23:11 +08:00
parent ed5fd7d17c
commit d12b2df306
33 changed files with 973 additions and 149 deletions

View File

@ -257,17 +257,22 @@ pip install tiktoken>=0.8.0
发送给 LLM 的完整请求:
┌─────────────────────────────────────────────────────────────┐
│ 1. Messages (我们管理的) │
│ ├─ SystemMessage: system prompt │
│ ├─ SystemMessage: topology info │
│ └─ HumanMessage: 用户消息 / 历史消息 │
│ ├─ SystemMessage: system prompt + topology (模板注入) │
│ └─ HumanMessage/AIMessage: 用户消息 / 历史消息 │
├─────────────────────────────────────────────────────────────┤
│ 2. Tool Definitions (LangChain 自动添加,不在消息中) │
│ ├─ Tool 1 schema (name, description, parameters) │
│ ├─ Tool 2 schema │
│ └─ ... (约 1000-2000 tokens per tool)
│ └─ ... (约 500-1500 tokens per tool)
└─────────────────────────────────────────────────────────────┘
```
**System Message 结构**
- 使用模板变量 `{{topology_info}}` 动态注入 topology
- System prompt 包含占位符:`"### CURRENT TOPOLOGY\n{{topology_info}}"`
- 如果有 topology替换为实际内容
- 如果没有 topology替换为 `"(No topology information available)"`
#### 2.2 裁剪流程
```
@ -287,14 +292,14 @@ pip install tiktoken>=0.8.0
│ 可用于消息 = 9,600 - 1,862 = 7,738 tokens │
└─────────────────────────────────────────────────────────────┘
第三步:分离系统消息和对话历史
第三步:计算 System Message token已合并
┌─────────────────────────────────────────────────────────────┐
│ 可用于消息: 7,738 tokens │
│ │
│ System Messages (保留):
│ - System prompt: ~1,000 tokens
│ System Message (已包含 system + topology):
│ - System prompt (base): ~1,000 tokens │
│ - Topology info: ~3,000 tokens │
│ = 4,000 tokens
│ = 4,000 tokens (合并后)
│ │
│ 可用于历史 = 7,738 - 4,000 = 3,738 tokens │
└─────────────────────────────────────────────────────────────┘
@ -313,19 +318,25 @@ pip install tiktoken>=0.8.0
| 优先级 | 内容 | 说明 |
|--------|------|------|
| 1⃣ | System Prompt | 永远保留第1个 |
| 2⃣ | Topology Info | 永远保留第2个 |
| 3⃣ | 最新用户消息 | 至少保留最后1条 |
| 4⃣ | 旧对话历史 | 按时间顺序丢弃 |
| 1⃣ | System Message (system prompt + topology) | 永远保留 |
| 2⃣ | 最新用户消息 | 至少保留最后1条 |
| 3⃣ | 旧对话历史 | 按时间顺序丢弃 |
**注意**System prompt 和 topology info 通过模板变量合并为一个 SystemMessage无法单独分离。
#### 2.4 边界情况处理
| 情况 | 处理方式 |
|------|----------|
| System > 预算 | 只保留 system prompt丢弃所有其他消息 |
| Tools > 预算 | 警告日志,建议增加 context_limit |
| System (包含 topology) > 预算 | 保留完整的 System Message无法分离 system 和 topology |
| Tools > 预算 | 警告日志,建议增加 context_limit 或减少工具数量 |
| 历史全被裁剪 | 保留最后1条用户消息 |
**重要提示**
- 当 system + topology 超出可用预算时,**两者都会被保留**
- 无法只丢弃 topology 而保留 system prompt因为已合并
- 建议在 system prompt 中精简 topology 信息或使用更短的 system prompt
### 2. 集成到 GNS3 Copilot
**修改文件**: `gns3server/agent/gns3_copilot/agent/gns3_copilot.py`
@ -358,29 +369,49 @@ full_messages = prepare_context_messages(
)
```
### 3. LangChain/LangGraph 的内置功能
### 3. Token 计数实现细节
#### `trim_messages` 参数说明
系统使用 **tiktoken** 进行准确的 Token 计数:
#### 3.1 Token 计数器
**使用的编码**`cl100k_base` (GPT-4)
**支持的模型**
- ✅ OpenAI (GPT-4, GPT-3.5)
- ✅ Anthropic (Claude 系列)
- ✅ DeepSeek (deepseek-chat, deepseek-coder)
- ✅ 大多数基于 GPT-4 架构的模型
**准确率**
- 英文95%+
- 中文95%+
- 代码90-95%
#### 3.2 工具定义 Token 估算
```python
from langchain_core.messages.utils import trim_messages
trimmed = trim_messages(
messages,
strategy="last", # 保留最近的 N 条消息
max_tokens=10000, # 最大 token 数
token_counter=count_tokens_approximately, # Token 计数器
preserve_system=True, # 保留系统消息
start_on="human", # 确保从人类消息开始
end_on=("human", "tool", "ai"), # 在特定类型消息结束
)
def estimate_tool_tokens(tools: list[Any]) -> int:
"""动态序列化工具 schema 并计算 token"""
for tool in tools:
tool_schema = {
"type": "function",
"function": {
"name": tool.name,
"description": tool.description,
"parameters": tool.args_schema.schema()
}
}
# 使用 tiktoken 计数
schema_str = json.dumps(tool_schema, ensure_ascii=False)
tool_tokens = len(encoding.encode(schema_str))
```
#### `count_tokens_approximately`
- 快速估算消息的 token 数量
- 不需要调用 LLM API
- 用于判断是否需要裁剪
**典型消耗**
- 简单工具1-2 个参数500-800 tokens
- 中等工具3-5 个参数800-1200 tokens
- 复杂工具嵌套参数1200-1500 tokens
- 8 个工具:约 6000-10000 tokens
---
@ -601,19 +632,34 @@ ERROR: context_limit is required but not provided for model 'gpt-4o'.
### 日志格式说明
新的日志格式(包含工具定义):
新的日志格式(包含工具定义和 topology 分解
```
Context prepared: {消息数} msgs, ~{消息tokens} tokens (messages) + {工具tokens} tokens (tools) = {总计tokens} total / {限制}K limit ({使用百分比}%), strategy={策略}
Context prepared: system={总tokens} (base={base_tokens} + topology={topology_tokens}) + history={history_tokens} + tools={tool_tokens} = {总计} total / {限制}K limit ({使用百分比}%), strategy={策略}
```
字段说明:
- **消息数**: 对话历史中的消息条数(不包括 system prompt
- **消息 tokens**: 对话历史 + system prompt + topology context 的 token 数
- **工具 tokens**: 工具定义schema的 token 数
- **总计 tokens**: 消息 tokens + 工具 tokens
- **限制**: 模型的上下文窗口大小K tokens
- **使用百分比**: 总计 tokens / 限制 × 100%
- **策略**: 使用的裁剪策略conservative/balanced/aggressive
- **system**System Message 的总 token 数(包含 system prompt + topology
- **base**:基础 system prompt 的 token 数(不含 topology
- **topology**Topology info 的 token 数
- **history**对话历史HumanMessage + AIMessage + ToolMessage的 token 数
- **tools**工具定义schema的 token 数
- **总计**:所有部分的 token 总和
- **限制**模型的上下文窗口大小K tokens
- **使用百分比**:总计 tokens / 限制 × 100%
- **策略**使用的裁剪策略conservative/balanced/aggressive
**示例输出**
```
Context prepared: system=6124 (base=2804 + topology=3320) + history=11800 + tools=1862 = 19786 total / 128K limit (15.5%), strategy=balanced
```
这表示:
- System Message 总共 6124 tokens
- 其中基础 system prompt 2804 tokens
- 其中 topology info 3320 tokens
- 对话历史 11800 tokens
- 工具定义 1862 tokens
- 总计 19786 tokens使用 128K 限制的 15.5%
---
@ -764,17 +810,19 @@ except Exception as e:
## 总结
通过使用 LangChain/LangGraph 的内置功能,我们实现了:
通过使用 LangChain/LangGraph 的内置功能和自定义优化,我们实现了:
1. ✅ 智能裁剪消息历史,避免超限
2. ✅ **必须手动配置 context_limit**,确保使用正确的上下文窗口大小
3. ✅ 可配置的裁剪策略(保守/平衡/激进)
4. ✅ 始终保留系统消息和拓扑信息
4. ✅ 始终保留系统消息(包含 system prompt 和 topology
5. ✅ 详细的日志输出,便于调试
6. ✅ 优雅的错误处理和明确的错误提示
7. ✅ 提供参考工具,帮助查找常见模型的上下文限制
8. ✅ **使用 tiktoken 进行准确的 token 计数**(准确率 95%+
9. ✅ **自动估算工具定义的 token 消耗**
10. ✅ **支持中文、英文、代码等多种内容类型**
11. ✅ **使用模板变量动态注入 topology info** (新增)
12. ✅ **日志中详细显示 system/topology/history 分解** (新增)
### 关键优势
@ -786,18 +834,21 @@ except Exception as e:
- **灵活性**
- 每个配置独立设置,支持不同用户使用不同限制
- 自动适配不同语言和内容类型
- 模板变量注入方式易于维护和调整
- **明确性**
- 缺少配置时立即报错,避免静默失败
- 详细日志显示所有 token 消耗(消息 + 工具)
- 详细日志显示所有 token 消耗system base + topology + history + tools
- 清楚显示各部分的 token 分解
- **可维护性**
- 无需维护内置默认值,减少代码维护负担
- 模板变量注入方式system prompt 和 topology 管理更清晰
- 模块化设计,易于扩展和调试
- **可观测性**
- 详细日志显示上下文使用情况和裁剪决策
- 区分消息 tokens 和工具 tokens
- 区分 system base tokens、topology tokens、history tokens 和工具 tokens
- 显示使用百分比和策略选择
这个实现确保了即使在进行长对话时,系统也不会因为上下文溢出而失败。

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3-Copilot - AI-powered network automation assistant for GNS3.
This package provides a command-line interface for launching the GNS3-Copilot

View File

@ -1,7 +1,33 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
GNS3-Copilot Agent Package
This package contains the main GNS3-Copilot agent implementation for network automation tasks.
This package contains the main GNS3-Copilot agent implementation for
network automation tasks using LangGraph workflow orchestration.
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
from .gns3_copilot import agent_builder

View File

@ -1,19 +1,39 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# SPDX-License-Identifier: GPL-3.0-or-later
#
# Context Window Manager for GNS3-Copilot
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
# This module manages context window limits for different LLM models,
# implementing intelligent message trimming and token counting strategies.
"""
Context Window Manager for GNS3-Copilot
This module provides context window management for different LLM models,
This module provides intelligent context window management for LLM models,
including:
- Model-specific context window limits
- Token counting for messages
- Message trimming strategies
- Accurate token counting using tiktoken
- Message trimming strategies (conservative/balanced/aggressive)
- System message preservation
- Tool definition token estimation
- Template variable injection for topology info
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
import json
@ -26,11 +46,24 @@ from langchain_core.messages import (
SystemMessage,
ToolMessage,
)
from langchain_core.messages.utils import trim_messages
logger = logging.getLogger(__name__)
# ============================================================================
# Constants
# ============================================================================
# Context strategy ratios
CONTEXT_STRATEGY_RATIOS = {
"conservative": 0.60, # 60% for input, 40% reserved for output
"balanced": 0.75, # 75% for input, 25% reserved for output
"aggressive": 0.85, # 85% for input, 15% reserved for output
}
DEFAULT_CONTEXT_STRATEGY = "balanced"
# ============================================================================
# Token Counting - Using tiktoken for accuracy
# ============================================================================
@ -176,6 +209,10 @@ def estimate_tool_tokens(tools: list[Any]) -> int:
return total_tokens
# ============================================================================
# Model Context Limits
# ============================================================================
# NOTE: Built-in model context limits have been removed.
# Model providers frequently update context limits, and maintaining this list is not sustainable.
# Users MUST configure context_limit explicitly in their LLM model configurations.
@ -243,7 +280,7 @@ def get_model_context_limit(
def calculate_max_tokens(
model_limit: int,
strategy: Literal["conservative", "balanced", "aggressive"] = "balanced"
strategy: Literal["conservative", "balanced", "aggressive"] = DEFAULT_CONTEXT_STRATEGY
) -> int:
"""
Calculate the maximum tokens to use, reserving space for output.
@ -258,13 +295,7 @@ def calculate_max_tokens(
Returns:
int: Maximum tokens for input messages
"""
ratios = {
"conservative": 0.60,
"balanced": 0.75,
"aggressive": 0.85,
}
ratio = ratios.get(strategy, 0.75)
ratio = CONTEXT_STRATEGY_RATIOS.get(strategy, CONTEXT_STRATEGY_RATIOS[DEFAULT_CONTEXT_STRATEGY])
max_tokens = int(model_limit * ratio)
logger.debug(
@ -275,11 +306,15 @@ def calculate_max_tokens(
return max_tokens
# ============================================================================
# Message Trimming
# ============================================================================
def trim_messages_for_context(
messages: list[Any],
model_name: str,
llm_config: dict[str, Any] | None = None,
strategy: Literal["conservative", "balanced", "aggressive"] = "balanced",
strategy: Literal["conservative", "balanced", "aggressive"] = DEFAULT_CONTEXT_STRATEGY,
preserve_system: bool = True,
tool_tokens: int = 0,
) -> list[Any]:
@ -313,7 +348,7 @@ def trim_messages_for_context(
if not messages:
return messages
# Get model's context limit (from database or built-in defaults)
# Get model's context limit (from database config)
model_limit = get_model_context_limit(model_name, llm_config)
# Calculate usable tokens (reserve space for output)
@ -414,6 +449,10 @@ def _trim_to_token_limit(messages: list[Any], max_tokens: int) -> list[Any]:
return trimmed
# ============================================================================
# Token Usage Summary
# ============================================================================
def get_token_usage_summary(
messages: list[Any],
model_name: str,
@ -466,7 +505,10 @@ def get_token_usage_summary(
}
# Convenience function for GNS3-Copilot integration
# ============================================================================
# Main Entry Point - Context Preparation with Template Injection
# ============================================================================
def prepare_context_messages(
state_messages: list[Any],
system_prompt: str,
@ -479,11 +521,17 @@ def prepare_context_messages(
Prepare full context messages for LLM call with automatic trimming.
This is the main entry point for GNS3-Copilot to prepare messages
before calling the LLM.
before calling the LLM. It injects topology info into the system prompt
using template variables and performs intelligent message trimming.
Template Variable Injection:
The system_prompt must contain the {{topology_info}} placeholder.
This function will replace it with actual topology information or
a placeholder message if topology is not available.
Args:
state_messages: Message history from conversation state
system_prompt: System prompt text
system_prompt: System prompt text (must contain {{topology_info}} placeholder)
topology_context: Optional topology information string
model_name: Name of the LLM model
llm_config: Optional LLM config dict from database (may contain context_limit and context_strategy)
@ -495,51 +543,50 @@ def prepare_context_messages(
Examples:
>>> messages = prepare_context_messages(
... state_messages=[HumanMessage("Help me")],
... system_prompt="You are a helpful assistant",
... system_prompt="You are a helpful assistant\\n\\n{{topology_info}}",
... topology_context=None,
... model_name="gpt-4o"
... )
>>> len(messages)
2 # System message + Human message
"""
# Get trimming strategy from config (default: "balanced")
trim_strategy = "balanced"
# Step 1: Get trimming strategy from config
trim_strategy = DEFAULT_CONTEXT_STRATEGY
if llm_config and "context_strategy" in llm_config:
strategy = llm_config["context_strategy"]
if strategy in ["conservative", "balanced", "aggressive"]:
if strategy in CONTEXT_STRATEGY_RATIOS:
trim_strategy = strategy
logger.debug("Using context_strategy from config: %s", trim_strategy)
else:
logger.warning("Invalid context_strategy '%s', using 'balanced'", strategy)
logger.warning("Invalid context_strategy '%s', using '%s'", strategy, DEFAULT_CONTEXT_STRATEGY)
# Estimate tool tokens (tools are sent with each LLM call)
# Step 2: Estimate tool tokens (tools are sent with each LLM call)
tool_tokens = estimate_tool_tokens(tools) if tools else 0
# Inject topology info into system prompt using template variable
# Step 3: Inject topology info into system prompt using template variable
# The system_prompt contains {{topology_info}} placeholder
if topology_context:
topology_formatted = f"Current Topology:\n{topology_context}"
formatted_prompt = system_prompt.replace("{{topology_info}}", topology_formatted)
else:
# If no topology, remove the placeholder
# If no topology, use placeholder
formatted_prompt = system_prompt.replace("{{topology_info}}", "(No topology information available)")
# Calculate token breakdown
# Step 4: Calculate token breakdown
system_prompt_tokens = count_tokens_accurately(system_prompt)
topology_tokens = count_tokens_accurately(topology_formatted) if topology_context else 0
formatted_tokens = count_tokens_accurately(formatted_prompt)
# Build context messages (single system message with topology injected)
# Step 5: Build context messages (single system message with topology injected)
context_messages = [SystemMessage(content=formatted_prompt)]
# Calculate conversation history tokens
# Step 6: Calculate conversation history tokens
history_tokens = count_messages_tokens(state_messages)
total_context_tokens = system_prompt_tokens + topology_tokens + history_tokens
# Combine with conversation history
# Step 7: Combine with conversation history
full_messages = context_messages + state_messages
# Trim if needed
# Step 8: Trim if needed
trimmed_messages = trim_messages_for_context(
full_messages,
model_name=model_name,
@ -549,11 +596,10 @@ def prepare_context_messages(
tool_tokens=tool_tokens, # Account for tool definitions
)
# Recalculate after trimming
# Step 9: Recalculate after trimming
trimmed_history_tokens = count_messages_tokens([m for m in trimmed_messages if not isinstance(m, SystemMessage)])
trimmed_total_tokens = system_prompt_tokens + topology_tokens + trimmed_history_tokens
# Log summary with detailed breakdown
# Step 10: Log summary with detailed breakdown
model_limit_k = get_model_context_limit(model_name, llm_config) // 1000
if trimmed_history_tokens < history_tokens:
@ -589,16 +635,26 @@ def prepare_context_messages(
return trimmed_messages
# ============================================================================
# Module Test
# ============================================================================
if __name__ == "__main__":
# Simple test
test_messages = [
HumanMessage(f"Message {i}") for i in range(100)
]
result = trim_messages_for_context(
test_messages,
# Test with mock llm_config
mock_config = {"context_limit": 8, "context_strategy": "conservative"}
result = prepare_context_messages(
state_messages=test_messages,
system_prompt="You are GNS3 Copilot.\n\n{{topology_info}}",
topology_context='{"project_id": "test", "nodes": 5}',
model_name="gpt-4o",
strategy="balanced"
llm_config=mock_config,
tools=None
)
print(f"Original: {len(test_messages)} messages")

View File

@ -1,36 +1,42 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# SPDX-License-Identifier: GPL-3.0-or-later
#
# This file is part of GNS3-Copilot.
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by the
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU Affero General Public License along
# with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
# mypy: ignore-errors
"""
GNS3 Network Automation Assistant
GNS3 Network Automation Assistant - LangGraph Agent
This module implements an AI-powered assistant for GNS3 network automation and management.
It uses LangChain for agent orchestration and DeepSeek LLM for natural language processing.
The assistant provides comprehensive GNS3 topology management capabilities including:
- Reading and analyzing GNS3 project topologies
- Creating and managing network nodes and links
- Executing network configuration and display commands on multiple devices
- Managing VPCS (Virtual PC Simulator) commands
- Starting and controlling GNS3 nodes
This module implements the core LangGraph agent workflow for GNS3-Copilot,
an AI-powered assistant for GNS3 network automation and management.
The assistant integrates with various tools to provide a complete network automation
solution for GNS3 environments.
The agent provides:
- LangGraph-based state management and workflow
- Tool orchestration for GNS3 operations
- Context-aware conversation handling
- Automatic conversation title generation
- Integration with GNS3 topology management
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
import operator

View File

@ -1,8 +1,33 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
Model Factory for GNS3-Copilot Agent
This module provides factory functions to create fresh LLM model instances.
Configuration is passed directly from the API layer.
Configuration is passed directly from the database.
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
import logging

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3 Copilot Agent Service
Provides project-level Agent instances with SQLite checkpoint management.

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
Chat Sessions Repository for managing chat session data.
Provides CRUD operations for the chat_sessions table in the project's

View File

@ -1,8 +1,30 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
GNS3 Client Package
This package provides a Python interface for interacting with GNS3 servers.
It's adapted from the upstream gns3fy project with modifications for compatibility
Adapted from the upstream gns3fy project with modifications for compatibility
with langchain and reduced dependency conflicts.
Main classes:
@ -11,13 +33,18 @@ Main classes:
- Node: GNS3 Node management
- Link: GNS3 Link management
- GNS3TopologyTool: GNS3 topology reading tool
- GNS3UpdateDrawingTool: GNS3 drawing update tool
- GNS3ProjectInfoTool: GNS3 project info tool
Main functions:
- get_gns3_connector: Factory function to create Gns3Connector from environment
- get_gns3_connector_with_llm_config: Factory function to create connector AND retrieve LLM config
- get_gns3_connector: Factory function to create Gns3Connector
- get_gns3_connector_with_llm_config: Create connector AND retrieve LLM config
- get_gns3_server_host: Get GNS3 server hostname from Controller or Config
- get_llm_config: Get LLM model configuration for a user
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
Upstream gns3fy: https://github.com/davidban77/gns3fy
"""
from .connector_factory import (

View File

@ -1,29 +1,39 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
GNS3 Connector Factory Module
This module provides factory functions for creating Gns3Connector instances.
It creates appropriately configured connectors using JWT token authentication.
This module provides factory functions for creating Gns3Connector instances
with JWT token authentication and context-aware configuration management.
The URL resolution strategy follows a priority order:
1. Explicitly provided URL parameter
2. Runtime configuration from Controller.instance().compute("local")
3. Static configuration from Config.instance().settings.Server
4. Fallback to localhost:3080
Features:
- Context variable based request-scoped data management (JWT tokens, LLM config)
- Auto-detection of GNS3 server URL from Controller/Config
- Fallback URL strategy for flexible deployment
- LLM configuration retrieval for users
Main Functions:
get_gns3_connector: Create a Gns3Connector with JWT token
Example:
from gns3server.agent.gns3_copilot.gns3_client import get_gns3_connector
# Auto-detect URL from Controller or Config
connector = get_gns3_connector(jwt_token="your_token")
if connector:
# Use connector to interact with GNS3 server
projects = connector.projects
Authentication:
- JWT token based authentication
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
import logging

View File

@ -1,14 +1,44 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
Adapted gns3fy module for gns3-copilot.
Adapted gns3fy module for GNS3-Copilot
This module is based on the upstream gns3fy project (https://github.com/davidban77/gns3fy).
Modifications made for this repository:
- Adjusted some pydantic usages and dataclass configuration to reduce dependency conflicts
with langchain (pydantic version/api differences).
- Kept the original API surface where possible but simplified validators/config to improve compatibility.
- Please review any pydantic-specific code if upgrading langchain or pydantic in the future.
Note: This file is adapted - not the untouched upstream source. See repository README for details.
Modifications made for GNS3-Copilot:
- Adjusted pydantic usages and dataclass configuration to reduce dependency conflicts
with langchain (pydantic version/api differences)
- Kept the original API surface where possible but simplified validators/config
- Added JWT token authentication support
- Integrated with context-aware connector factory
Note: This file is adapted from upstream gns3fy for compatibility with
GNS3-Copilot's architecture.
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
Upstream: https://github.com/davidban77/gns3fy
"""
import os

View File

@ -1,6 +1,34 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
GNS3 Project Info Tool
This module provides a LangChain BaseTool to retrieve basic information of a
specific GNS3 project by project ID.
specific GNS3 project by project ID. Returns project name, status, node count,
and link count.
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
import logging

View File

@ -1,6 +1,33 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
GNS3 Topology Reader Tool
This module provides a LangChain BaseTool to retrieve the topology of a
specific GNS3 project by project ID.
specific GNS3 project by project ID. Returns nodes, links, and project metadata.
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
import copy

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
Project Agent Manager
Manages AgentService instances for GNS3 projects using a singleton pattern.

View File

@ -1,8 +1,33 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
Prompts module for GNS3 Copilot.
Prompts Module for GNS3-Copilot
This package contains system prompts and prompt loading utilities for
the GNS3 Copilot AI agent.
the GNS3-Copilot AI agent.
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
from .base_prompt import SYSTEM_PROMPT

View File

@ -1,10 +1,35 @@
"""
System prompt for GNS3 Network Lab Teaching Assistant
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
This module contains the system prompt used by the LangChain v1.0 agent
"""
System Prompt for GNS3 Network Lab Teaching Assistant
This module contains the system prompt used by the LangGraph agent
to guide network diagnostics and teaching activities.
CRITICAL: This assistant has DIAGNOSIS permissions only, NO configuration permissions.
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
# System prompt for LangChain v1.0 agent

View File

@ -1,7 +1,34 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
Prompt loader for GNS3 Copilot.
Prompt Loader for GNS3-Copilot
This module provides utilities for loading system prompts.
Can be extended to support multiple prompt variants based on
environment variables (e.g., ENGLISH_LEVEL).
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
import logging
@ -14,7 +41,7 @@ logger = logging.getLogger(__name__)
def load_system_prompt() -> str:
"""
Load the system prompt for GNS3 Copilot.
Load the system prompt for GNS3-Copilot.
In the future, this can be extended to support multiple prompt variants
based on environment variables (e.g., ENGLISH_LEVEL).

View File

@ -1,7 +1,33 @@
"""
Prompt template for generating conversation titles.
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
Title Generation Prompt for GNS3-Copilot
Prompt template for generating conversation titles.
Generates concise Chinese or English titles based on conversation language.
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
"""
TITLE_PROMPT = """

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3-Copilot Tools Package
This package provides various tools for interacting with GNS3 network simulator, including:

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
This module provides a tool to execute configuration commands on multiple devices
in a GNS3 topology using Nornir.
"""

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
This module provides a tool to execute display commands on multiple devices
in a GNS3 topology using Nornir.
"""

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3 link creation tool for connecting network nodes.
Provides functionality to create links between nodes in GNS3 projects

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3 node creation tool for network topology building.
Provides functionality to create multiple nodes in GNS3 projects

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3 template retrieval tool for device discovery.
Provides functionality to retrieve all available device templates

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3 node startup tool for network device activation.
Provides functionality to start one or multiple nodes in GNS3 projects

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3 node name update tool for renaming network devices.
Provides functionality to update the name of one or multiple nodes in GNS3 projects.

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
Multi-device VPCS command execution tool using telnetlib3 with threading.
Supports concurrent execution of multiple command groups across multiple VPCS devices.
"""

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
GNS3-Copilot Public Model Package
This package provides reusable public models and utilities for GNS3 network automation tasks.

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
Public module for getting device port information from GNS3 topology
"""

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
Drawing utility functions for GNS3 area annotations.
Calculates drawing parameters and generates SVG content for network area annotations.

View File

@ -1,4 +1,28 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
LLM Model Configuration Helper for GNS3 Copilot
This module provides utility functions to retrieve LLM model configurations

View File

@ -1,4 +1,4 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# SPDX-License-Identifier: GPL-3.0-or-later
#
# This file is part of GNS3 Server.
#
@ -16,6 +16,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
Message format converters for OpenAI-compatible message format.
Converts between LangChain messages and OpenAI-compatible format.
"""

View File

@ -1,3 +1,24 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# This file is part of GNS3-Copilot project.
#
# GNS3-Copilot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# GNS3-Copilot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNS3-Copilot. If not, see <https://www.gnu.org/licenses/>.
#
# Project Home: https://github.com/yueguobin/gns3-copilot
#
"""
Public module for parsing tool execution results
@ -39,6 +60,9 @@ Standard Tool Response Format:
Author: Guobin Yue
"""
This module is part of the GNS3-Copilot project.
GitHub: https://github.com/yueguobin/gns3-copilot
import ast
import json
import logging