fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
523 lines
18 KiB
Python
523 lines
18 KiB
Python
"""
|
|
LiteLLM Agents API - Main Module
|
|
|
|
Usage:
|
|
import litellm
|
|
|
|
# Create
|
|
response = litellm.interactions.agents.create(
|
|
name="waverunner",
|
|
custom_llm_provider="gemini",
|
|
api_key="...",
|
|
base_agent="gemini-2.5-flash",
|
|
instructions="You are a helpful assistant.",
|
|
)
|
|
|
|
# List
|
|
response = litellm.interactions.agents.list(api_key="...", custom_llm_provider="gemini")
|
|
|
|
# Get
|
|
response = litellm.interactions.agents.get(name="waverunner", api_key="...")
|
|
|
|
# Delete
|
|
result = litellm.interactions.agents.delete(name="waverunner", api_key="...")
|
|
|
|
# List versions
|
|
result = litellm.interactions.agents.list_versions(name="waverunner", api_key="...")
|
|
|
|
# Async versions: acreate, alist, aget, adelete, alist_versions
|
|
"""
|
|
|
|
import asyncio
|
|
import contextvars
|
|
from functools import partial
|
|
from typing import Any, Coroutine, Dict, Optional, Union
|
|
|
|
import httpx
|
|
|
|
import litellm
|
|
from litellm.interactions.agents.http_handler import agents_http_handler
|
|
from litellm.interactions.agents.utils import get_provider_agents_api_config
|
|
from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj
|
|
from litellm.types.agents import (
|
|
AgentCreateResponse,
|
|
AgentDeleteResult,
|
|
AgentListResponse,
|
|
AgentVersionsResponse,
|
|
)
|
|
from litellm.types.interactions import InteractionEnvironment
|
|
from litellm.types.router import GenericLiteLLMParams
|
|
from litellm.utils import client
|
|
|
|
# ------------------------------------------------------------------ #
|
|
# Shared helpers #
|
|
# ------------------------------------------------------------------ #
|
|
|
|
|
|
def _get_agents_api_config(custom_llm_provider: str):
|
|
config = get_provider_agents_api_config(custom_llm_provider)
|
|
if config is None:
|
|
raise litellm.BadRequestError(
|
|
message=(
|
|
f"Provider '{custom_llm_provider}' does not have a native "
|
|
"agents API. Use the proxy POST /v1/agents endpoint to store "
|
|
"agents locally."
|
|
),
|
|
model="",
|
|
llm_provider=custom_llm_provider,
|
|
)
|
|
return config
|
|
|
|
|
|
def _make_logging_obj(
|
|
kwargs: Dict[str, Any],
|
|
model: str,
|
|
custom_llm_provider: str,
|
|
call_type: str,
|
|
optional_params: Dict[str, Any],
|
|
) -> LiteLLMLoggingObj:
|
|
litellm_logging_obj: LiteLLMLoggingObj = kwargs.get("litellm_logging_obj") # type: ignore
|
|
litellm_call_id: Optional[str] = kwargs.get("litellm_call_id", None)
|
|
litellm_logging_obj.update_from_kwargs(
|
|
kwargs=kwargs,
|
|
model=model,
|
|
optional_params=optional_params,
|
|
litellm_params={"litellm_call_id": litellm_call_id},
|
|
custom_llm_provider=custom_llm_provider,
|
|
)
|
|
return litellm_logging_obj
|
|
|
|
|
|
# ================================================================== #
|
|
# CREATE #
|
|
# ================================================================== #
|
|
|
|
|
|
@client
|
|
async def acreate(
|
|
name: str,
|
|
base_agent: Optional[str] = None,
|
|
instructions: Optional[str] = None,
|
|
base_environment: Optional[InteractionEnvironment] = None,
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
extra_body: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> AgentCreateResponse:
|
|
"""Async: Create a managed agent on the provider side."""
|
|
local_vars = locals()
|
|
try:
|
|
loop = asyncio.get_event_loop()
|
|
kwargs["acreate_agent"] = True
|
|
func = partial(
|
|
create,
|
|
name=name,
|
|
base_agent=base_agent,
|
|
instructions=instructions,
|
|
base_environment=base_environment,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
extra_headers=extra_headers,
|
|
extra_body=extra_body,
|
|
timeout=timeout,
|
|
**kwargs,
|
|
)
|
|
ctx = contextvars.copy_context()
|
|
init_response = await loop.run_in_executor(None, partial(ctx.run, func))
|
|
if asyncio.iscoroutine(init_response):
|
|
return await init_response
|
|
return init_response
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model=name,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
@client
|
|
def create(
|
|
name: str,
|
|
base_agent: Optional[str] = None,
|
|
instructions: Optional[str] = None,
|
|
base_environment: Optional[InteractionEnvironment] = None,
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
extra_body: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> Union[AgentCreateResponse, Coroutine[Any, Any, AgentCreateResponse]]:
|
|
"""
|
|
Sync: Create a managed agent on the provider side.
|
|
|
|
Args:
|
|
name: Name for the agent (required).
|
|
base_agent: Base agent to derive from (e.g. "waverunner").
|
|
instructions: System instructions for the agent.
|
|
base_environment: Environment to fork from — an env_id string or a
|
|
dict like ``{"type": "remote", "sources": [...]}``.
|
|
custom_llm_provider: Provider to use, e.g. "gemini".
|
|
extra_headers: Additional HTTP headers.
|
|
extra_body: Additional request body fields.
|
|
timeout: Request timeout.
|
|
**kwargs: Forwarded to GenericLiteLLMParams (api_key, api_base, etc.).
|
|
"""
|
|
local_vars = locals()
|
|
custom_llm_provider = (
|
|
custom_llm_provider or kwargs.get("custom_llm_provider") or "gemini"
|
|
)
|
|
try:
|
|
_is_async = kwargs.pop("acreate_agent", False) is True
|
|
if base_agent is not None:
|
|
kwargs["base_agent"] = base_agent
|
|
if instructions is not None:
|
|
kwargs["instructions"] = instructions
|
|
if base_environment is not None:
|
|
kwargs["base_environment"] = base_environment
|
|
kwargs.setdefault("custom_llm_provider", custom_llm_provider)
|
|
litellm_params = GenericLiteLLMParams(**kwargs)
|
|
logging_obj = _make_logging_obj(
|
|
kwargs, name, custom_llm_provider, "create_agent", {}
|
|
)
|
|
config = _get_agents_api_config(custom_llm_provider)
|
|
return agents_http_handler.create_agent(
|
|
agents_api_config=config,
|
|
name=name,
|
|
litellm_params=litellm_params,
|
|
logging_obj=logging_obj,
|
|
extra_headers=extra_headers,
|
|
extra_body=extra_body,
|
|
timeout=timeout,
|
|
_is_async=_is_async,
|
|
)
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model=name,
|
|
custom_llm_provider=custom_llm_provider,
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
# ================================================================== #
|
|
# LIST #
|
|
# ================================================================== #
|
|
|
|
|
|
@client
|
|
async def alist(
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> AgentListResponse:
|
|
"""Async: List all agents on the provider side."""
|
|
local_vars = locals()
|
|
try:
|
|
loop = asyncio.get_event_loop()
|
|
kwargs["alist_agents"] = True
|
|
func = partial(
|
|
list,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
extra_headers=extra_headers,
|
|
timeout=timeout,
|
|
**kwargs,
|
|
)
|
|
ctx = contextvars.copy_context()
|
|
init_response = await loop.run_in_executor(None, partial(ctx.run, func))
|
|
if asyncio.iscoroutine(init_response):
|
|
return await init_response
|
|
return init_response
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model="",
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
@client
|
|
def list(
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> Union[AgentListResponse, Coroutine[Any, Any, AgentListResponse]]:
|
|
"""Sync: List all agents on the provider side."""
|
|
local_vars = locals()
|
|
custom_llm_provider = (
|
|
custom_llm_provider or kwargs.get("custom_llm_provider") or "gemini"
|
|
)
|
|
try:
|
|
_is_async = kwargs.pop("alist_agents", False) is True
|
|
kwargs.setdefault("custom_llm_provider", custom_llm_provider)
|
|
litellm_params = GenericLiteLLMParams(**kwargs)
|
|
logging_obj = _make_logging_obj(
|
|
kwargs, "", custom_llm_provider, "list_agents", {}
|
|
)
|
|
config = _get_agents_api_config(custom_llm_provider)
|
|
return agents_http_handler.list_agents(
|
|
agents_api_config=config,
|
|
litellm_params=litellm_params,
|
|
logging_obj=logging_obj,
|
|
extra_headers=extra_headers,
|
|
timeout=timeout,
|
|
_is_async=_is_async,
|
|
)
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model="",
|
|
custom_llm_provider=custom_llm_provider,
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
# ================================================================== #
|
|
# GET #
|
|
# ================================================================== #
|
|
|
|
|
|
@client
|
|
async def aget(
|
|
name: str,
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> AgentCreateResponse:
|
|
"""Async: Get a specific agent by name."""
|
|
local_vars = locals()
|
|
try:
|
|
loop = asyncio.get_event_loop()
|
|
kwargs["aget_agent"] = True
|
|
func = partial(
|
|
get,
|
|
name=name,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
extra_headers=extra_headers,
|
|
timeout=timeout,
|
|
**kwargs,
|
|
)
|
|
ctx = contextvars.copy_context()
|
|
init_response = await loop.run_in_executor(None, partial(ctx.run, func))
|
|
if asyncio.iscoroutine(init_response):
|
|
return await init_response
|
|
return init_response
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model=name,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
@client
|
|
def get(
|
|
name: str,
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> Union[AgentCreateResponse, Coroutine[Any, Any, AgentCreateResponse]]:
|
|
"""Sync: Get a specific agent by name."""
|
|
local_vars = locals()
|
|
custom_llm_provider = (
|
|
custom_llm_provider or kwargs.get("custom_llm_provider") or "gemini"
|
|
)
|
|
try:
|
|
_is_async = kwargs.pop("aget_agent", False) is True
|
|
kwargs.setdefault("custom_llm_provider", custom_llm_provider)
|
|
litellm_params = GenericLiteLLMParams(**kwargs)
|
|
logging_obj = _make_logging_obj(
|
|
kwargs, name, custom_llm_provider, "get_agent", {"name": name}
|
|
)
|
|
config = _get_agents_api_config(custom_llm_provider)
|
|
return agents_http_handler.get_agent(
|
|
agents_api_config=config,
|
|
name=name,
|
|
litellm_params=litellm_params,
|
|
logging_obj=logging_obj,
|
|
extra_headers=extra_headers,
|
|
timeout=timeout,
|
|
_is_async=_is_async,
|
|
)
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model=name,
|
|
custom_llm_provider=custom_llm_provider,
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
# ================================================================== #
|
|
# DELETE #
|
|
# ================================================================== #
|
|
|
|
|
|
@client
|
|
async def adelete(
|
|
name: str,
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> AgentDeleteResult:
|
|
"""Async: Delete a specific agent by name."""
|
|
local_vars = locals()
|
|
try:
|
|
loop = asyncio.get_event_loop()
|
|
kwargs["adelete_agent"] = True
|
|
func = partial(
|
|
delete,
|
|
name=name,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
extra_headers=extra_headers,
|
|
timeout=timeout,
|
|
**kwargs,
|
|
)
|
|
ctx = contextvars.copy_context()
|
|
init_response = await loop.run_in_executor(None, partial(ctx.run, func))
|
|
if asyncio.iscoroutine(init_response):
|
|
return await init_response
|
|
return init_response
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model=name,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
@client
|
|
def delete(
|
|
name: str,
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> Union[AgentDeleteResult, Coroutine[Any, Any, AgentDeleteResult]]:
|
|
"""Sync: Delete a specific agent by name."""
|
|
local_vars = locals()
|
|
custom_llm_provider = (
|
|
custom_llm_provider or kwargs.get("custom_llm_provider") or "gemini"
|
|
)
|
|
try:
|
|
_is_async = kwargs.pop("adelete_agent", False) is True
|
|
kwargs.setdefault("custom_llm_provider", custom_llm_provider)
|
|
litellm_params = GenericLiteLLMParams(**kwargs)
|
|
logging_obj = _make_logging_obj(
|
|
kwargs, name, custom_llm_provider, "delete_agent", {"name": name}
|
|
)
|
|
config = _get_agents_api_config(custom_llm_provider)
|
|
return agents_http_handler.delete_agent(
|
|
agents_api_config=config,
|
|
name=name,
|
|
litellm_params=litellm_params,
|
|
logging_obj=logging_obj,
|
|
extra_headers=extra_headers,
|
|
timeout=timeout,
|
|
_is_async=_is_async,
|
|
)
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model=name,
|
|
custom_llm_provider=custom_llm_provider,
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
# ================================================================== #
|
|
# LIST VERSIONS #
|
|
# ================================================================== #
|
|
|
|
|
|
@client
|
|
async def alist_versions(
|
|
name: str,
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> AgentVersionsResponse:
|
|
"""Async: List versions of a specific agent."""
|
|
local_vars = locals()
|
|
try:
|
|
loop = asyncio.get_event_loop()
|
|
kwargs["alist_agent_versions"] = True
|
|
func = partial(
|
|
list_versions,
|
|
name=name,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
extra_headers=extra_headers,
|
|
timeout=timeout,
|
|
**kwargs,
|
|
)
|
|
ctx = contextvars.copy_context()
|
|
init_response = await loop.run_in_executor(None, partial(ctx.run, func))
|
|
if asyncio.iscoroutine(init_response):
|
|
return await init_response
|
|
return init_response
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model=name,
|
|
custom_llm_provider=custom_llm_provider or "gemini",
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|
|
|
|
|
|
@client
|
|
def list_versions(
|
|
name: str,
|
|
custom_llm_provider: Optional[str] = None,
|
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
timeout: Optional[Union[float, httpx.Timeout]] = None,
|
|
**kwargs,
|
|
) -> Union[AgentVersionsResponse, Coroutine[Any, Any, AgentVersionsResponse]]:
|
|
"""Sync: List versions of a specific agent."""
|
|
local_vars = locals()
|
|
custom_llm_provider = (
|
|
custom_llm_provider or kwargs.get("custom_llm_provider") or "gemini"
|
|
)
|
|
try:
|
|
_is_async = kwargs.pop("alist_agent_versions", False) is True
|
|
kwargs.setdefault("custom_llm_provider", custom_llm_provider)
|
|
litellm_params = GenericLiteLLMParams(**kwargs)
|
|
logging_obj = _make_logging_obj(
|
|
kwargs, name, custom_llm_provider, "list_agent_versions", {"name": name}
|
|
)
|
|
config = _get_agents_api_config(custom_llm_provider)
|
|
return agents_http_handler.list_agent_versions(
|
|
agents_api_config=config,
|
|
name=name,
|
|
litellm_params=litellm_params,
|
|
logging_obj=logging_obj,
|
|
extra_headers=extra_headers,
|
|
timeout=timeout,
|
|
_is_async=_is_async,
|
|
)
|
|
except Exception as e:
|
|
raise litellm.exception_type(
|
|
model=name,
|
|
custom_llm_provider=custom_llm_provider,
|
|
original_exception=e,
|
|
completion_kwargs=local_vars,
|
|
extra_kwargs=kwargs,
|
|
)
|