GT AI OS Community v2.0.33 - Add NVIDIA NIM and Nemotron agents
- Updated python_coding_microproject.csv to use NVIDIA NIM Kimi K2 - Updated kali_linux_shell_simulator.csv to use NVIDIA NIM Kimi K2 - Made more general-purpose (flexible targets, expanded tools) - Added nemotron-mini-agent.csv for fast local inference via Ollama - Added nemotron-agent.csv for advanced reasoning via Ollama - Added wiki page: Projects for NVIDIA NIMs and Nemotron
This commit is contained in:
125
apps/resource-cluster/app/api/templates.py
Normal file
125
apps/resource-cluster/app/api/templates.py
Normal file
@@ -0,0 +1,125 @@
|
||||
"""
|
||||
Agent template library API endpoints
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Depends
|
||||
from typing import Dict, Any, List
|
||||
from pydantic import BaseModel, Field
|
||||
import logging
|
||||
|
||||
from app.core.security import capability_validator, CapabilityToken
|
||||
from app.api.auth import verify_capability
|
||||
|
||||
router = APIRouter()
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TemplateResponse(BaseModel):
|
||||
"""Agent template response"""
|
||||
template_id: str = Field(..., description="Template identifier")
|
||||
name: str = Field(..., description="Template name")
|
||||
description: str = Field(..., description="Template description")
|
||||
category: str = Field(..., description="Template category")
|
||||
configuration: Dict[str, Any] = Field(..., description="Template configuration")
|
||||
|
||||
|
||||
@router.get("/", response_model=List[TemplateResponse])
|
||||
async def list_templates(
|
||||
token: CapabilityToken = Depends(verify_capability)
|
||||
) -> List[TemplateResponse]:
|
||||
"""List available agent templates"""
|
||||
|
||||
# Template library with predefined agent configurations
|
||||
templates = [
|
||||
TemplateResponse(
|
||||
template_id="research_assistant",
|
||||
name="Research & Analysis Agent",
|
||||
description="Specialized in information synthesis and analysis",
|
||||
category="research",
|
||||
configuration={
|
||||
"model": "llama-3.1-70b-versatile",
|
||||
"temperature": 0.7,
|
||||
"capabilities": ["llm:groq", "rag:semantic_search", "tools:web_search"]
|
||||
}
|
||||
),
|
||||
TemplateResponse(
|
||||
template_id="coding_assistant",
|
||||
name="Software Development Agent",
|
||||
description="Focused on code quality and best practices",
|
||||
category="development",
|
||||
configuration={
|
||||
"model": "llama-3.1-70b-versatile",
|
||||
"temperature": 0.3,
|
||||
"capabilities": ["llm:groq", "tools:github_integration", "resources:documentation"]
|
||||
}
|
||||
)
|
||||
]
|
||||
|
||||
return templates
|
||||
|
||||
|
||||
@router.get("/{template_id}")
|
||||
async def get_template(
|
||||
template_id: str,
|
||||
token: CapabilityToken = Depends(verify_capability)
|
||||
) -> TemplateResponse:
|
||||
"""Get specific agent template"""
|
||||
|
||||
try:
|
||||
# Template library - in production this would be stored in database/filesystem
|
||||
templates = {
|
||||
"research_assistant": TemplateResponse(
|
||||
template_id="research_assistant",
|
||||
name="Research & Analysis Agent",
|
||||
description="Specialized in information synthesis and analysis",
|
||||
category="research",
|
||||
configuration={
|
||||
"model": "llama-3.1-70b-versatile",
|
||||
"temperature": 0.7,
|
||||
"capabilities": ["llm:groq", "rag:semantic_search", "tools:web_search"],
|
||||
"system_prompt": "You are a research agent focused on thorough analysis and information synthesis.",
|
||||
"max_tokens": 4000,
|
||||
"tools": ["web_search", "document_analysis", "citation_formatter"]
|
||||
}
|
||||
),
|
||||
"coding_assistant": TemplateResponse(
|
||||
template_id="coding_assistant",
|
||||
name="Software Development Agent",
|
||||
description="Focused on code quality and best practices",
|
||||
category="development",
|
||||
configuration={
|
||||
"model": "llama-3.1-70b-versatile",
|
||||
"temperature": 0.3,
|
||||
"capabilities": ["llm:groq", "tools:github_integration", "resources:documentation"],
|
||||
"system_prompt": "You are a senior software engineer focused on code quality, best practices, and clean architecture.",
|
||||
"max_tokens": 4000,
|
||||
"tools": ["code_analysis", "github_integration", "documentation_generator"]
|
||||
}
|
||||
),
|
||||
"creative_writing": TemplateResponse(
|
||||
template_id="creative_writing",
|
||||
name="Creative Writing Agent",
|
||||
description="Specialized in creative content generation",
|
||||
category="creative",
|
||||
configuration={
|
||||
"model": "llama-3.1-70b-versatile",
|
||||
"temperature": 0.9,
|
||||
"capabilities": ["llm:groq", "tools:style_guide"],
|
||||
"system_prompt": "You are a creative writing agent focused on engaging, original content.",
|
||||
"max_tokens": 4000,
|
||||
"tools": ["style_analyzer", "plot_generator", "character_development"]
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
template = templates.get(template_id)
|
||||
if not template:
|
||||
raise HTTPException(status_code=404, detail=f"Template '{template_id}' not found")
|
||||
|
||||
return template
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Template retrieval failed: {e}")
|
||||
raise HTTPException(status_code=500, detail=f"Template retrieval failed: {str(e)}")
|
||||
Reference in New Issue
Block a user