ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
"""
|
||||
Convenient access to LLM models.
|
||||
|
||||
Usage:
|
||||
from browser_use import llm
|
||||
|
||||
# Simple model access
|
||||
model = llm.azure_gpt_4_1_mini
|
||||
model = llm.openai_gpt_4o
|
||||
model = llm.google_gemini_2_5_pro
|
||||
"""
|
||||
|
||||
import os
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from browser_use.llm.azure.chat import ChatAzureOpenAI
|
||||
from browser_use.llm.google.chat import ChatGoogle
|
||||
from browser_use.llm.openai.chat import ChatOpenAI
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from browser_use.llm.base import BaseChatModel
|
||||
|
||||
# Type stubs for IDE autocomplete
|
||||
openai_gpt_4o: 'BaseChatModel'
|
||||
openai_gpt_4o_mini: 'BaseChatModel'
|
||||
openai_gpt_4_1_mini: 'BaseChatModel'
|
||||
openai_o1: 'BaseChatModel'
|
||||
openai_o1_mini: 'BaseChatModel'
|
||||
openai_o1_pro: 'BaseChatModel'
|
||||
openai_o3: 'BaseChatModel'
|
||||
openai_o3_mini: 'BaseChatModel'
|
||||
openai_o3_pro: 'BaseChatModel'
|
||||
openai_o4_mini: 'BaseChatModel'
|
||||
openai_gpt_5: 'BaseChatModel'
|
||||
openai_gpt_5_mini: 'BaseChatModel'
|
||||
openai_gpt_5_nano: 'BaseChatModel'
|
||||
|
||||
azure_gpt_4o: 'BaseChatModel'
|
||||
azure_gpt_4o_mini: 'BaseChatModel'
|
||||
azure_gpt_4_1_mini: 'BaseChatModel'
|
||||
azure_o1: 'BaseChatModel'
|
||||
azure_o1_mini: 'BaseChatModel'
|
||||
azure_o1_pro: 'BaseChatModel'
|
||||
azure_o3: 'BaseChatModel'
|
||||
azure_o3_mini: 'BaseChatModel'
|
||||
azure_o3_pro: 'BaseChatModel'
|
||||
azure_gpt_5: 'BaseChatModel'
|
||||
azure_gpt_5_mini: 'BaseChatModel'
|
||||
|
||||
google_gemini_2_0_flash: 'BaseChatModel'
|
||||
google_gemini_2_0_pro: 'BaseChatModel'
|
||||
google_gemini_2_5_pro: 'BaseChatModel'
|
||||
google_gemini_2_5_flash: 'BaseChatModel'
|
||||
google_gemini_2_5_flash_lite: 'BaseChatModel'
|
||||
|
||||
|
||||
def get_llm_by_name(model_name: str):
|
||||
"""
|
||||
Factory function to create LLM instances from string names with API keys from environment.
|
||||
|
||||
Args:
|
||||
model_name: String name like 'azure_gpt_4_1_mini', 'openai_gpt_4o', etc.
|
||||
|
||||
Returns:
|
||||
LLM instance with API keys from environment variables
|
||||
|
||||
Raises:
|
||||
ValueError: If model_name is not recognized
|
||||
"""
|
||||
if not model_name:
|
||||
raise ValueError('Model name cannot be empty')
|
||||
|
||||
# Parse model name
|
||||
parts = model_name.split('_', 1)
|
||||
if len(parts) < 2:
|
||||
raise ValueError(f"Invalid model name format: '{model_name}'. Expected format: 'provider_model_name'")
|
||||
|
||||
provider = parts[0]
|
||||
model_part = parts[1]
|
||||
|
||||
# Convert underscores back to dots/dashes for actual model names
|
||||
if 'gpt_4_1_mini' in model_part:
|
||||
model = model_part.replace('gpt_4_1_mini', 'gpt-4.1-mini')
|
||||
elif 'gpt_4o_mini' in model_part:
|
||||
model = model_part.replace('gpt_4o_mini', 'gpt-4o-mini')
|
||||
elif 'gpt_4o' in model_part:
|
||||
model = model_part.replace('gpt_4o', 'gpt-4o')
|
||||
elif 'gemini_2_0' in model_part:
|
||||
model = model_part.replace('gemini_2_0', 'gemini-2.0').replace('_', '-')
|
||||
elif 'gemini_2_5' in model_part:
|
||||
model = model_part.replace('gemini_2_5', 'gemini-2.5').replace('_', '-')
|
||||
else:
|
||||
model = model_part.replace('_', '-')
|
||||
|
||||
# OpenAI Models
|
||||
if provider == 'openai':
|
||||
api_key = os.getenv('OPENAI_API_KEY')
|
||||
return ChatOpenAI(model=model, api_key=api_key)
|
||||
|
||||
# Azure OpenAI Models
|
||||
elif provider == 'azure':
|
||||
api_key = os.getenv('AZURE_OPENAI_KEY') or os.getenv('AZURE_OPENAI_API_KEY')
|
||||
azure_endpoint = os.getenv('AZURE_OPENAI_ENDPOINT')
|
||||
return ChatAzureOpenAI(model=model, api_key=api_key, azure_endpoint=azure_endpoint)
|
||||
|
||||
# Google Models
|
||||
elif provider == 'google':
|
||||
api_key = os.getenv('GOOGLE_API_KEY')
|
||||
return ChatGoogle(model=model, api_key=api_key)
|
||||
|
||||
else:
|
||||
available_providers = ['openai', 'azure', 'google']
|
||||
raise ValueError(f"Unknown provider: '{provider}'. Available providers: {', '.join(available_providers)}")
|
||||
|
||||
|
||||
# Pre-configured model instances (lazy loaded via __getattr__)
|
||||
def __getattr__(name: str) -> 'BaseChatModel':
|
||||
"""Create model instances on demand with API keys from environment."""
|
||||
# Handle chat classes first
|
||||
if name == 'ChatOpenAI':
|
||||
return ChatOpenAI # type: ignore
|
||||
elif name == 'ChatAzureOpenAI':
|
||||
return ChatAzureOpenAI # type: ignore
|
||||
elif name == 'ChatGoogle':
|
||||
return ChatGoogle # type: ignore
|
||||
|
||||
# Handle model instances - these are the main use case
|
||||
try:
|
||||
return get_llm_by_name(name)
|
||||
except ValueError:
|
||||
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
|
||||
|
||||
|
||||
__all__ = [
|
||||
'ChatOpenAI',
|
||||
'ChatAzureOpenAI',
|
||||
'ChatGoogle',
|
||||
'get_llm_by_name',
|
||||
# OpenAI instances - created on demand
|
||||
'openai_gpt_4o',
|
||||
'openai_gpt_4o_mini',
|
||||
'openai_gpt_4_1_mini',
|
||||
'openai_o1',
|
||||
'openai_o1_mini',
|
||||
'openai_o1_pro',
|
||||
'openai_o3',
|
||||
'openai_o3_mini',
|
||||
'openai_o3_pro',
|
||||
'openai_o4_mini',
|
||||
'openai_gpt_5',
|
||||
'openai_gpt_5_mini',
|
||||
'openai_gpt_5_nano',
|
||||
# Azure instances - created on demand
|
||||
'azure_gpt_4o',
|
||||
'azure_gpt_4o_mini',
|
||||
'azure_gpt_4_1_mini',
|
||||
'azure_o1',
|
||||
'azure_o1_mini',
|
||||
'azure_o1_pro',
|
||||
'azure_o3',
|
||||
'azure_o3_mini',
|
||||
'azure_o3_pro',
|
||||
'azure_gpt_5',
|
||||
'azure_gpt_5_mini',
|
||||
# Google instances - created on demand
|
||||
'google_gemini_2_0_flash',
|
||||
'google_gemini_2_0_pro',
|
||||
'google_gemini_2_5_pro',
|
||||
'google_gemini_2_5_flash',
|
||||
'google_gemini_2_5_flash_lite',
|
||||
]
|
||||
Reference in New Issue
Block a user