docs: adding supplementary markdown content to API specs

This commit is contained in:
Alexey Rybak 2025-09-30 22:28:41 -07:00 committed by Alexey Rybak
parent b6a5bccadf
commit 3225ce1a26
10 changed files with 2969 additions and 5115 deletions

View file

@ -548,6 +548,84 @@ class Generator:
return extra_tags
def _get_api_group_for_operation(self, op) -> str | None:
"""
Determine the API group for an operation based on its route path.
Args:
op: The endpoint operation
Returns:
The API group name derived from the route, or None if unable to determine
"""
if not hasattr(op, 'webmethod') or not op.webmethod or not hasattr(op.webmethod, 'route'):
return None
route = op.webmethod.route
if not route or not route.startswith('/'):
return None
# Extract API group from route path
# Examples: /v1/agents/list -> agents-api
# /v1/responses -> responses-api
# /v1/models -> models-api
path_parts = route.strip('/').split('/')
if len(path_parts) < 2:
return None
# Skip version prefix (v1, v1alpha, v1beta, etc.)
if path_parts[0].startswith('v1'):
if len(path_parts) < 2:
return None
api_segment = path_parts[1]
else:
api_segment = path_parts[0]
# Convert to supplementary file naming convention
# agents -> agents-api, responses -> responses-api, etc.
return f"{api_segment}-api"
def _load_supplemental_content(self, api_group: str | None) -> str:
"""
Load supplemental content for an API group based on stability level.
Follows this resolution order:
1. docs/supplementary/{stability}/{api_group}.md
2. docs/supplementary/shared/{api_group}.md (fallback)
3. Empty string if no files found
Args:
api_group: The API group name (e.g., "agents-responses-api"), or None if no mapping exists
Returns:
The supplemental content as markdown string, or empty string if not found
"""
if not api_group:
return ""
base_path = Path(__file__).parent.parent.parent / "supplementary"
# Try stability-specific content first if stability filter is set
if self.options.stability_filter:
stability_path = base_path / self.options.stability_filter / f"{api_group}.md"
if stability_path.exists():
try:
return stability_path.read_text(encoding="utf-8")
except Exception as e:
print(f"Warning: Could not read stability-specific supplemental content from {stability_path}: {e}")
# Fall back to shared content
shared_path = base_path / "shared" / f"{api_group}.md"
if shared_path.exists():
try:
return shared_path.read_text(encoding="utf-8")
except Exception as e:
print(f"Warning: Could not read shared supplemental content from {shared_path}: {e}")
# No supplemental content found
return ""
def _build_operation(self, op: EndpointOperation) -> Operation:
if op.defining_class.__name__ in [
"SyntheticDataGeneration",
@ -799,10 +877,14 @@ class Generator:
else:
callbacks = None
description = "\n".join(
# Build base description from docstring
base_description = "\n".join(
filter(None, [doc_string.short_description, doc_string.long_description])
)
# Individual endpoints get clean descriptions only
description = base_description
return Operation(
tags=[
getattr(op.defining_class, "API_NAMESPACE", op.defining_class.__name__)
@ -959,10 +1041,21 @@ class Generator:
if hasattr(cls, "API_NAMESPACE") and cls.API_NAMESPACE != cls.__name__:
continue
# Add supplemental content to tag pages
api_group = f"{cls.__name__.lower()}-api"
supplemental_content = self._load_supplemental_content(api_group)
tag_description = doc_string.long_description or ""
if supplemental_content:
if tag_description:
tag_description = f"{tag_description}\n\n{supplemental_content}"
else:
tag_description = supplemental_content
operation_tags.append(
Tag(
name=cls.__name__,
description=doc_string.long_description,
description=tag_description,
displayName=doc_string.short_description,
)
)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,9 @@
## Deprecated APIs
> **⚠️ DEPRECATED**: These APIs are provided for migration reference and will be removed in future versions. Not recommended for new projects.
### Migration Guidance
If you are using deprecated versions of the Agents or Responses APIs, please migrate to:
- **Responses API**: Use the stable v1 Responses API endpoints

View file

@ -0,0 +1,21 @@
## Agents API (Experimental)
> **🧪 EXPERIMENTAL**: This API is in preview and may change based on user feedback. Great for exploring new capabilities and providing feedback to influence the final design.
Main functionalities provided by this API:
- Create agents with specific instructions and ability to use tools.
- Interactions with agents are grouped into sessions ("threads"), and each interaction is called a "turn".
- Agents can be provided with various tools (see the ToolGroups and ToolRuntime APIs for more details).
- Agents can be provided with various shields (see the Safety API for more details).
- Agents can also use Memory to retrieve information from knowledge bases. See the RAG Tool and Vector IO APIs for more details.
### 🧪 Feedback Welcome
This API is actively being developed. We welcome feedback on:
- API design and usability
- Performance characteristics
- Missing features or capabilities
- Integration patterns
**Provide Feedback**: [GitHub Discussions](https://github.com/llamastack/llama-stack/discussions) or [GitHub Issues](https://github.com/llamastack/llama-stack/issues)

View file

@ -0,0 +1,40 @@
## Responses API
The Responses API provides OpenAI-compatible functionality with enhanced capabilities for dynamic, stateful interactions.
> **✅ STABLE**: This API is production-ready with backward compatibility guarantees. Recommended for production applications.
### ✅ Supported Tools
The Responses API supports the following tool types:
- **`web_search`**: Search the web for current information and real-time data
- **`file_search`**: Search through uploaded files and vector stores
- Supports dynamic `vector_store_ids` per call
- Compatible with OpenAI file search patterns
- **`function`**: Call custom functions with JSON schema validation
- **`mcp_tool`**: Model Context Protocol integration
### ✅ Supported Fields & Features
**Core Capabilities:**
- **Dynamic Configuration**: Switch models, vector stores, and tools per request without pre-configuration
- **Conversation Branching**: Use `previous_response_id` to branch conversations and explore different paths
- **Rich Annotations**: Automatic file citations, URL citations, and container file citations
- **Status Tracking**: Monitor tool call execution status and handle failures gracefully
### 🚧 Work in Progress
- Full real-time response streaming support
- `tool_choice` parameter
- `max_tool_calls` parameter
- Built-in tools (code interpreter, containers API)
- Safety & guardrails
- `reasoning` capabilities
- `service_tier`
- `logprobs`
- `max_output_tokens`
- `metadata` handling
- `instructions`
- `incomplete_details`
- `background`