diff --git a/.env_example b/.env_example index 9c20257..d7cdb31 100644 --- a/.env_example +++ b/.env_example @@ -6,6 +6,7 @@ # ANTHROPIC_API_KEY="FILL-IN-YOUR-ANTHROPIC_API_KEY" # AGENTOPS_API_KEY="FILL-IN-YOUR-AGENTOPS_API_KEY" # XAI_API_KEY="FILL-IN-YOUR-XAI_API_KEY" +# ORCAROUTER_API_KEY="FILL-IN-YOUR-ORCAROUTER_API_KEY" # OLLAMA_HOST="http://localhost:11434" # OLLAMA_MODELS="ollama/llama3.2,ollama/llama3.1,ollama/gemma2,ollama/phi3.5" # SERPER_API_KEY="your-serper-api-key" diff --git a/README.md b/README.md index 141a98b..53f4f56 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Welcome to CrewAI Studio! This application provides a user-friendly interface wr - **Knowledge sources**: You can add knowledge sources for your crews - **CrewAI tools** You can use crewai tools to interact with real world. ~~Crewai studio uses a forked version of crewai-tools with some bugfixes and enhancements (https://github.com/strnad/crewAI-tools)~~ (bugfixes already merged to crewai-tools) - **Custom Tools** Custom tools for calling APIs, writing files, enhanced code interpreter, enhanced web scraper... More will be added soon -- **LLM providers supported**: Currently OpenAI, Groq, Anthropic, ollama, Grok and LM Studio backends are supported. OpenAI key is probably still needed for embeddings in many tools. Don't forget to load an embedding model when using LM Studio. +- **LLM providers supported**: Currently OpenAI, Groq, Anthropic, ollama, Grok, OrcaRouter and LM Studio backends are supported. OpenAI key is probably still needed for embeddings in many tools. Don't forget to load an embedding model when using LM Studio. - **Single Page app export**: Feature to export crew as simple single page streamlit app. - **Threaded crew run**: Crews can run in background and can be stopped. diff --git a/app/llms.py b/app/llms.py index 57a264c..c9d85a6 100644 --- a/app/llms.py +++ b/app/llms.py @@ -19,6 +19,7 @@ def load_secrets_fron_env(): "ANTHROPIC_API_KEY": os.getenv("ANTHROPIC_API_KEY"), "OLLAMA_HOST": os.getenv("OLLAMA_HOST"), "XAI_API_KEY": os.getenv("XAI_API_KEY"), + "ORCAROUTER_API_KEY": os.getenv("ORCAROUTER_API_KEY"), } else: st.session_state.env_vars = st.session_state.env_vars @@ -110,6 +111,26 @@ def create_xai_llm(model, temperature): base_url=host ) +def create_orcarouter_llm(model, temperature): + host = "https://api.orcarouter.ai/v1" + api_key = st.session_state.env_vars.get("ORCAROUTER_API_KEY") + + if not api_key: + raise ValueError("ORCAROUTER_API_KEY must be set in .env file") + + switch_environment({ + "OPENAI_API_KEY": api_key, + "OPENAI_API_BASE": host, + }) + + return ChatOpenAI( + openai_api_key=api_key, + openai_api_base=host, + model_name=model, + temperature=temperature, + max_tokens=4095, + ) + def create_lmstudio_llm(model, temperature): switch_environment({ "OPENAI_API_KEY": "lm-studio", @@ -152,6 +173,10 @@ def create_lmstudio_llm(model, temperature): "models": ["xai/grok-2-1212", "xai/grok-beta"], "create_llm": create_xai_llm, }, + "OrcaRouter": { + "models": ["orcarouter/auto", "openai/gpt-5.5", "anthropic/claude-sonnet-5"], + "create_llm": create_orcarouter_llm, + }, } def llm_providers_and_models(): diff --git a/app/pg_export_crew.py b/app/pg_export_crew.py index 3ba71d4..231fc58 100644 --- a/app/pg_export_crew.py +++ b/app/pg_export_crew.py @@ -174,6 +174,22 @@ def create_xai_llm(model, temperature): return LLM(model=model, temperature=temperature, api_key=api_key, base_url=host) +def create_orcarouter_llm(model, temperature): + host = "https://api.orcarouter.ai/v1" + api_key = os.getenv("ORCAROUTER_API_KEY") + if not api_key: + raise ValueError("ORCAROUTER_API_KEY must be set in .env file") + os.environ["OPENAI_API_KEY"] = api_key + os.environ["OPENAI_API_BASE"] = host + return ChatOpenAI( + openai_api_key=api_key, + openai_api_base=host, + model_name=model, + temperature=temperature, + max_tokens=4095, + ) + + def create_lmstudio_llm(model, temperature): api_base = os.getenv("LMSTUDIO_API_BASE") if not api_base: @@ -195,6 +211,7 @@ def create_lmstudio_llm(model, temperature): "Anthropic": create_anthropic_llm, "LM Studio": create_lmstudio_llm, "Xai": create_xai_llm, + "OrcaRouter": create_orcarouter_llm, } @@ -562,6 +579,7 @@ def create_env_file(self, output_dir, env_params=None): '# OLLAMA_HOST="http://localhost:11434"', '# LMSTUDIO_API_BASE="http://localhost:1234/v1"', '# XAI_API_KEY="FILL-IN-YOUR-XAI-API-KEY"', + '# ORCAROUTER_API_KEY="FILL-IN-YOUR-ORCAROUTER-API-KEY"', '# DEFAULT_LANGUAGE="en"', ] if env_params: