diff --git a/.env.example b/.env.example index 12ff991..fb8290b 100644 --- a/.env.example +++ b/.env.example @@ -3,4 +3,5 @@ ANTHROPIC_API_KEY=your_anthropic_api_key_here DEEPSEEK_API_KEY=your_deepseek_api_key_here GOOGLE_API_KEY=your_google_api_key_here AZURE_OPENAI_API_KEY=your_azure_openai_api_key_here -AZURE_OPENAI_MODEL_DEPLOYMENT=gpt-4o-ms \ No newline at end of file +AZURE_OPENAI_MODEL_DEPLOYMENT=gpt-4o-ms +SILICONFLOW_API_KEY=your_siliconflow_api_key_here \ No newline at end of file diff --git a/tools/llm_api.py b/tools/llm_api.py index 7702083..e051b1f 100644 --- a/tools/llm_api.py +++ b/tools/llm_api.py @@ -90,6 +90,14 @@ def create_llm_client(provider="openai"): api_key=api_key, base_url="https://api.deepseek.com/v1", ) + elif provider == "siliconflow": + api_key = os.getenv('SILICONFLOW_API_KEY') + if not api_key: + raise ValueError("SILICONFLOW_API_KEY not found in environment variables") + return OpenAI( + api_key=api_key, + base_url="https://api.siliconflow.cn/v1" + ) elif provider == "anthropic": api_key = os.getenv('ANTHROPIC_API_KEY') if not api_key: @@ -137,6 +145,8 @@ def query_llm(prompt: str, client=None, model=None, provider="openai", image_pat model = os.getenv('AZURE_OPENAI_MODEL_DEPLOYMENT', 'gpt-4o-ms') # Get from env with fallback elif provider == "deepseek": model = "deepseek-chat" + elif provider == "siliconflow": + model = "deepseek-ai/DeepSeek-R1" elif provider == "anthropic": model = "claude-3-sonnet-20240229" elif provider == "gemini": @@ -144,7 +154,7 @@ def query_llm(prompt: str, client=None, model=None, provider="openai", image_pat elif provider == "local": model = "Qwen/Qwen2.5-32B-Instruct-AWQ" - if provider in ["openai", "local", "deepseek", "azure"]: + if provider in ["openai", "local", "deepseek", "azure", "siliconflow"]: messages = [{"role": "user", "content": []}] # Add text content @@ -232,7 +242,7 @@ def query_llm(prompt: str, client=None, model=None, provider="openai", image_pat def main(): parser = argparse.ArgumentParser(description='Query an LLM with a prompt') parser.add_argument('--prompt', type=str, help='The prompt to send to the LLM', required=True) - parser.add_argument('--provider', choices=['openai','anthropic','gemini','local','deepseek','azure'], default='openai', help='The API provider to use') + parser.add_argument('--provider', choices=['openai','anthropic','gemini','local','deepseek','azure','siliconflow'], default='openai', help='The API provider to use') parser.add_argument('--model', type=str, help='The model to use (default depends on provider)') parser.add_argument('--image', type=str, help='Path to an image file to attach to the prompt') args = parser.parse_args() @@ -242,6 +252,8 @@ def main(): args.model = "gpt-4o" elif args.provider == "deepseek": args.model = "deepseek-chat" + elif args.provider == "siliconflow": + args.model = "deepseek-ai/DeepSeek-R1" elif args.provider == 'anthropic': args.model = "claude-3-5-sonnet-20241022" elif args.provider == 'gemini':