nd2py.search.llmsr.api package#

Submodules#

nd2py.search.llmsr.api.deepseek_api module#

class nd2py.search.llmsr.api.deepseek_api.DeepSeekAPI(model='deepseek-chat', max_tokens=1024, n=1)[source]#

Bases: LLMAPI

supported_models = ['deepseek-chat', 'deepseek-reasoner']#
__init__(model='deepseek-chat', max_tokens=1024, n=1)[source]#

nd2py.search.llmsr.api.gemini_api module#

class nd2py.search.llmsr.api.gemini_api.GeminiAPI(model='gemini-2.5-pro')[source]#

Bases: LLMAPI

supported_models = ['gemini-2.5-pro', 'gemini-2.5-flash', 'gemini-2.5-flash-lite-preview-06-17', 'gemini-2.0-flash', 'gemini-2.0-flash-lite']#
__init__(model='gemini-2.5-pro')[source]#

nd2py.search.llmsr.api.llm_api module#

class nd2py.search.llmsr.api.llm_api.LLMAPI[source]#

Bases: object

supported_models = []#
classmethod load(llm_provider: str, llm_model: str, generate_per_prompt: int = 2) LLMAPI[source]#
__init__()[source]#

nd2py.search.llmsr.api.llm_result module#

Utilities for llmsr module

class nd2py.search.llmsr.api.llm_result.LLMResult(gen: Iterator)[source]#

Bases: object

Wrapper for LLM generator that captures the return value.

This class wraps a generator and provides convenient property access to the result dictionary after the generator is exhausted.

The key is using yield from to delegate to the inner generator, which automatically captures the return value via StopIteration.value.

Example

>>> api = OpenAIAPI(model='gpt-4o-mini')
>>> result = api("Hello")  # Returns LLMResult
>>> for content in result:
...     print(content)
>>> print(result.usage)     # Access via property
>>> print(result.contents)  # List of generated contents
__init__(gen: Iterator)[source]#
property usage: dict#

Token usage statistics.

property messages: list#

Input messages.

property response: dict#

Raw API response.

property responses: list#

Raw API responses (for n>1 generations).

property contents: list#

List of generated content strings.

nd2py.search.llmsr.api.manual_api module#

class nd2py.search.llmsr.api.manual_api.ManualAPI[source]#

Bases: LLMAPI

supported_models = ['manual']#

nd2py.search.llmsr.api.openai_api module#

class nd2py.search.llmsr.api.openai_api.OpenAIAPI(model='gpt-5-mini', max_tokens=4096, n=1, temperature=1.0, top_p=1.0, use_chat_completions=False)[source]#

Bases: LLMAPI

supported_models = ['gpt-4o-mini', 'gpt-5-mini']#
__init__(model='gpt-5-mini', max_tokens=4096, n=1, temperature=1.0, top_p=1.0, use_chat_completions=False)[source]#
create_responses(messages: List | str, **kwargs) Generator[str, None, Dict][source]#

OpenAI 的最新 API, 建议新项目使用这个接口 (https://platform.openai.com/docs/guides/migrate-to-responses) 但看起来它还缺了一些功能 (比如 n parameter), 而且也无法缓存 gpt-4o-mini 的 prompt token, 所以依然保留了 create_chat_completions 接口

create_chat_completions(messages: List | str, **kwargs) Generator[str, None, Dict][source]#

OpenAI 的旧版 API, 建议新项目使用 create_responses 接口

parse_usage(response: Response) Dict[source]#
parse_chat_completions_usage(response: ChatCompletion) Dict[source]#

nd2py.search.llmsr.api.openrouter_api module#

class nd2py.search.llmsr.api.openrouter_api.OpenRouterAPI[source]#

Bases: LLMAPI

supported_models = ['kimi-k2', 'gemini-2.5-pro', 'gemini-2.5-flash']#

nd2py.search.llmsr.api.siliconflow_api module#

class nd2py.search.llmsr.api.siliconflow_api.SiliconFlowAPI(model='Qwen3-8B', max_tokens=1024, n=1, temperature=1.0, top_p=1.0)[source]#

Bases: LLMAPI

supported_models = ['Qwen3-8B', 'Deepseek-V3']#
__init__(model='Qwen3-8B', max_tokens=1024, n=1, temperature=1.0, top_p=1.0)[source]#
qwen3_8b(url, headers, payload, **kwargs) Generator[str, None, Dict][source]#
deepseek_v3(url, headers, payload, **kwargs) Generator[str, None, Dict][source]#