Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env_example
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
25 changes: 25 additions & 0 deletions app/llms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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():
Expand Down
18 changes: 18 additions & 0 deletions app/pg_export_crew.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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,
}


Expand Down Expand Up @@ -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:
Expand Down