Full Code of julep-ai/julep for AI

dev 5371a620af25 cached
984 files
13.1 MB
3.5M tokens
2409 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (13,933K chars total). Download the full file to get everything.
Repository: julep-ai/julep
Branch: dev
Commit: 5371a620af25
Files: 984
Total size: 13.1 MB

Directory structure:
gitextract_2v2u36g9/

├── .agentignore
├── .codex/
│   └── setup.sh
├── .github/
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   ├── feature_request.yml
│   │   └── refactor.yml
│   ├── LICENSE
│   ├── README-CN.md
│   ├── README-FR.md
│   ├── README-JA.md
│   ├── SUPPORT.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── bake-push-to-hub.yml
│       ├── bandit-security-check-python-agents-api.yml
│       ├── changelog-ci.yml
│       ├── changelog-sync.yml
│       ├── claude-changelog-pr.yml
│       ├── claude-code-review.yml
│       ├── claude-docs-manual.yml
│       ├── claude-docs-pr.yml
│       ├── claude.yml
│       ├── docker-bake-on-pr.yml
│       ├── doctoc-on-push.yml
│       ├── generate-changelog.yml
│       ├── generate-openapi-code-from-typespec.yml
│       ├── latest-push-to-hub.yml
│       ├── lint-agents-api-pr.yml
│       ├── lint-integrations-service-pr.yml
│       ├── publish-cli-prerelease.yml
│       ├── sync-model-docs.yml
│       ├── test-agents-api-pr.yml
│       ├── test-integrations-service-pr.yml
│       ├── translate-readme.yml
│       └── typecheck-agents-api-pr.yml
├── .gitignore
├── .gitmodules
├── .mcp.json
├── AGENTS.md
├── CHANGELOG.md
├── README.md
├── changelog/
│   ├── Templates/
│   │   ├── JulepCustom/
│   │   │   ├── entries.html
│   │   │   ├── entry.html
│   │   │   ├── footer.html
│   │   │   ├── head.html
│   │   │   ├── header.html
│   │   │   ├── package.json
│   │   │   └── style.css
│   │   └── index-template/
│   │       ├── archives.html
│   │       ├── entries.html
│   │       ├── entry.html
│   │       ├── error.html
│   │       ├── feed.rss
│   │       ├── footer.html
│   │       ├── head.html
│   │       ├── header.html
│   │       ├── home-summary.html
│   │       ├── package.json
│   │       ├── public.html
│   │       ├── robots.txt
│   │       ├── script.js
│   │       ├── search.html
│   │       ├── sitemap.xml
│   │       ├── style.css
│   │       └── tagged.html
│   ├── dev/
│   │   ├── 2025-06-17.md
│   │   ├── 2025-06-23.md
│   │   ├── 2025-06-25.md
│   │   ├── 2025-06-26.md
│   │   ├── 2025-06-30.md
│   │   ├── 2025-07-02.md
│   │   ├── 2025-07-03.md
│   │   ├── 2025-07-04.md
│   │   ├── 2025-07-05.md
│   │   ├── 2025-07-08.md
│   │   ├── 2025-07-09.md
│   │   ├── 2025-07-18.md
│   │   ├── 2025-07-31.md
│   │   ├── 2025-08-06.md
│   │   ├── 2025-08-07.md
│   │   ├── 2025-08-08.md
│   │   └── 2025-08-15.md
│   └── stable (main)/
│       ├── 2025-01-31.md
│       ├── 2025-02-14.md
│       ├── 2025-04-11.md
│       ├── 2025-05-09.md
│       ├── 2025-05-21.md
│       ├── 2025-06-23.md
│       ├── 2025-06-30.md
│       ├── 2025-07-04.md
│       ├── 2025-07-05.md
│       ├── 2025-07-08.md
│       └── 2025-07-18.md
├── cookbooks/
│   ├── IDEAS.md
│   ├── README.md
│   ├── __init__.py
│   ├── advanced/
│   │   ├── 00-Devfest-Email-Assistant.ipynb
│   │   ├── 01-website-crawler.ipynb
│   │   ├── 02-sarcastic-news-headline-generator.ipynb
│   │   ├── 03-trip-planning-assistant.ipynb
│   │   ├── 04-hook-generator-trending-reels.ipynb
│   │   ├── 05-video-processing-with-natural-language.ipynb
│   │   ├── 06-browser-use.ipynb
│   │   ├── 07-personalized-research-assistant.ipynb
│   │   ├── 08-rag-chatbot.ipynb
│   │   ├── 09-companion-agent.ipynb
│   │   ├── 10-reel-generator.ipynb
│   │   └── 11-hacker-news-personalized-generator.ipynb
│   └── basics/
│       ├── 01-Hello-Agent.ipynb
│       ├── 02-Simple-Task.ipynb
│       ├── 03-Adding-Tools.ipynb
│       ├── 04-Parallel-Steps.ipynb
│       └── 05-RAG-and-Docs.ipynb
├── deploy/
│   ├── responses-build-docker-compose.yaml
│   ├── simple-docker-compose.yaml
│   └── standalone-docker-compose.yaml
├── docker-bake.hcl
├── docker-compose.yml
├── documentation/
│   ├── AGENTS.md
│   ├── FAQ.mdx
│   ├── README.md
│   ├── advanced/
│   │   ├── agentic-patterns.mdx
│   │   ├── architecture-deep-dive.mdx
│   │   ├── chat.mdx
│   │   ├── files.mdx
│   │   ├── lifecycle.mdx
│   │   ├── localsetup.mdx
│   │   ├── multi-agent-multi-user-sessions.mdx
│   │   ├── new-syntax.mdx
│   │   ├── python-expression.mdx
│   │   ├── render.mdx
│   │   ├── secrets-management.mdx
│   │   ├── system-templates.mdx
│   │   └── types-of-task-steps.mdx
│   ├── concepts/
│   │   ├── agents.mdx
│   │   ├── docs.mdx
│   │   ├── execution.mdx
│   │   ├── files.mdx
│   │   ├── projects.mdx
│   │   ├── secrets.mdx
│   │   ├── sessions.mdx
│   │   ├── tasks.mdx
│   │   ├── tools.mdx
│   │   └── users.mdx
│   ├── docs.json
│   ├── guides/
│   │   ├── adding-tool-integration.mdx
│   │   ├── advanced/
│   │   │   ├── complex-workflows.mdx
│   │   │   ├── integration-patterns.mdx
│   │   │   └── multi-agent-systems.mdx
│   │   ├── cookbooks/
│   │   │   ├── community-examples.mdx
│   │   │   ├── industry-solutions.mdx
│   │   │   └── quick-solutions.mdx
│   │   ├── getting-started/
│   │   │   ├── chat-with-an-agent.mdx
│   │   │   ├── create-and-execute-julep-task.mdx
│   │   │   └── tool-integration-demo.mdx
│   │   ├── modifying-agent-workflow.mdx
│   │   ├── use-cases/
│   │   │   ├── customer-service.mdx
│   │   │   ├── data-analysis.mdx
│   │   │   ├── document-processing.mdx
│   │   │   └── research-assistant.mdx
│   │   └── using-secrets.mdx
│   ├── integrations/
│   │   ├── communicationdata/
│   │   │   ├── email.mdx
│   │   │   ├── google-sheets.mdx
│   │   │   └── weather.mdx
│   │   ├── contributing-integrations.mdx
│   │   ├── extensibility/
│   │   │   └── mcp.mdx
│   │   ├── mediafile/
│   │   │   ├── cloudinary.mdx
│   │   │   ├── ffmpeg.mdx
│   │   │   ├── llamaparse.mdx
│   │   │   └── unstructured.mdx
│   │   ├── search/
│   │   │   ├── algolia.mdx
│   │   │   ├── arxiv.mdx
│   │   │   ├── brave.mdx
│   │   │   └── wikipedia.mdx
│   │   ├── supported-integrations.mdx
│   │   ├── supported-models.mdx
│   │   └── webbrowser/
│   │       ├── browserbase.mdx
│   │       ├── remote-browser.mdx
│   │       └── spider.mdx
│   ├── introduction/
│   │   ├── developer-orientation.mdx
│   │   ├── install.mdx
│   │   ├── julep.mdx
│   │   └── quickstart.mdx
│   ├── julepcli/
│   │   ├── commands.mdx
│   │   └── introduction.mdx
│   ├── llms.txt
│   ├── responses/
│   │   ├── cli.mdx
│   │   ├── concepts.mdx
│   │   ├── examples.mdx
│   │   ├── quickstart.mdx
│   │   └── roadmap.mdx
│   ├── scripts/
│   │   └── julep-chat-widget.js
│   ├── sdks/
│   │   ├── common/
│   │   │   ├── authentication.mdx
│   │   │   ├── error-handling.mdx
│   │   │   ├── secrets.mdx
│   │   │   └── testing.mdx
│   │   ├── index.mdx
│   │   ├── nodejs/
│   │   │   ├── advanced-usage.mdx
│   │   │   ├── agents.mdx
│   │   │   ├── installation.mdx
│   │   │   ├── reference.mdx
│   │   │   ├── secrets.mdx
│   │   │   ├── sessions.mdx
│   │   │   ├── tasks.mdx
│   │   │   └── tools-integration.mdx
│   │   └── python/
│   │       ├── advanced-usage.mdx
│   │       ├── agents.mdx
│   │       ├── installation.mdx
│   │       ├── reference.mdx
│   │       ├── secrets.mdx
│   │       ├── sessions.mdx
│   │       ├── tasks.mdx
│   │       └── tools-integration.mdx
│   ├── snippets/
│   │   └── integrations-slider.jsx
│   ├── style.css
│   └── tutorials/
│       ├── browser-use.mdx
│       ├── hacker-news-newsletter.mdx
│       ├── julep-assistant.mdx
│       ├── rag-chatbot.mdx
│       ├── trip-planning-input.mdx
│       ├── trip-planning-running.mdx
│       ├── trip-planning-tools.mdx
│       ├── trip-planning-workflow.mdx
│       ├── trip-planning.mdx
│       └── video-processing.mdx
├── ruff.toml
└── src/
    ├── agents-api/
    │   ├── .dockerignore
    │   ├── .gitignore
    │   ├── .python-version
    │   ├── .tool-versions
    │   ├── AGENTS.md
    │   ├── Dockerfile
    │   ├── Dockerfile.worker
    │   ├── README.md
    │   ├── agents_api/
    │   │   ├── __init__.py
    │   │   ├── activities/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── demo.py
    │   │   │   ├── execute_api_call.py
    │   │   │   ├── execute_integration.py
    │   │   │   ├── execute_system.py
    │   │   │   ├── logger.py
    │   │   │   ├── pg_query_step.py
    │   │   │   ├── sync_items_remote.py
    │   │   │   ├── task_steps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── base_evaluate.py
    │   │   │   │   ├── get_value_step.py
    │   │   │   │   ├── prompt_step.py
    │   │   │   │   ├── raise_complete_async.py
    │   │   │   │   ├── tool_call_step.py
    │   │   │   │   └── transition_step.py
    │   │   │   └── tool_executor.py
    │   │   ├── app.py
    │   │   ├── autogen/
    │   │   │   ├── .ignore
    │   │   │   ├── AGENTS.md
    │   │   │   ├── Agents.py
    │   │   │   ├── Chat.py
    │   │   │   ├── Common.py
    │   │   │   ├── Docs.py
    │   │   │   ├── Entries.py
    │   │   │   ├── Executions.py
    │   │   │   ├── Files.py
    │   │   │   ├── Jobs.py
    │   │   │   ├── Projects.py
    │   │   │   ├── Responses.py
    │   │   │   ├── Secrets.py
    │   │   │   ├── Sessions.py
    │   │   │   ├── Tasks.py
    │   │   │   ├── Tools.py
    │   │   │   ├── Users.py
    │   │   │   ├── __init__.py
    │   │   │   └── openapi_model.py
    │   │   ├── clients/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── async_s3.py
    │   │   │   ├── feature_flags.py
    │   │   │   ├── integrations.py
    │   │   │   ├── litellm.py
    │   │   │   ├── pg.py
    │   │   │   ├── sync_s3.py
    │   │   │   └── temporal.py
    │   │   ├── common/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── exceptions/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── agents.py
    │   │   │   │   ├── executions.py
    │   │   │   │   ├── secrets.py
    │   │   │   │   ├── sessions.py
    │   │   │   │   ├── tasks.py
    │   │   │   │   ├── tools.py
    │   │   │   │   ├── users.py
    │   │   │   │   └── validation.py
    │   │   │   ├── interceptors.py
    │   │   │   ├── nlp.py
    │   │   │   ├── protocol/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── agents.py
    │   │   │   │   ├── developers.py
    │   │   │   │   ├── models.py
    │   │   │   │   ├── sessions.py
    │   │   │   │   ├── state_machine.py
    │   │   │   │   └── tasks.py
    │   │   │   ├── retry_policies.py
    │   │   │   └── utils/
    │   │   │       ├── __init__.py
    │   │   │       ├── checks.py
    │   │   │       ├── datetime.py
    │   │   │       ├── db_exceptions.py
    │   │   │       ├── evaluator.py
    │   │   │       ├── expressions.py
    │   │   │       ├── feature_flags.py
    │   │   │       ├── get_doc_search.py
    │   │   │       ├── humanization_utils.py
    │   │   │       ├── json.py
    │   │   │       ├── llm_providers.py
    │   │   │       ├── memory.py
    │   │   │       ├── messages.py
    │   │   │       ├── mmr.py
    │   │   │       ├── model_validation.py
    │   │   │       ├── secrets.py
    │   │   │       ├── task_validation.py
    │   │   │       ├── template.py
    │   │   │       ├── tool_runner.py
    │   │   │       ├── types.py
    │   │   │       ├── usage.py
    │   │   │       ├── workflows.py
    │   │   │       └── yaml.py
    │   │   ├── dependencies/
    │   │   │   ├── __init__.py
    │   │   │   ├── auth.py
    │   │   │   ├── content_length.py
    │   │   │   ├── developer_id.py
    │   │   │   ├── exceptions.py
    │   │   │   └── query_filter.py
    │   │   ├── env.py
    │   │   ├── exceptions.py
    │   │   ├── metrics/
    │   │   │   ├── __init__.py
    │   │   │   └── counters.py
    │   │   ├── model_registry.py
    │   │   ├── queries/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── agents/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_agent.py
    │   │   │   │   ├── create_or_update_agent.py
    │   │   │   │   ├── delete_agent.py
    │   │   │   │   ├── get_agent.py
    │   │   │   │   ├── list_agents.py
    │   │   │   │   ├── patch_agent.py
    │   │   │   │   └── update_agent.py
    │   │   │   ├── chat/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── gather_messages.py
    │   │   │   │   └── prepare_chat_context.py
    │   │   │   ├── developers/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_developer.py
    │   │   │   │   ├── get_developer.py
    │   │   │   │   ├── patch_developer.py
    │   │   │   │   └── update_developer.py
    │   │   │   ├── docs/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── bulk_delete_docs.py
    │   │   │   │   ├── create_doc.py
    │   │   │   │   ├── delete_doc.py
    │   │   │   │   ├── get_doc.py
    │   │   │   │   ├── list_docs.py
    │   │   │   │   ├── search_docs_by_embedding.py
    │   │   │   │   ├── search_docs_by_text.py
    │   │   │   │   ├── search_docs_hybrid.py
    │   │   │   │   └── utils.py
    │   │   │   ├── entries/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_entries.py
    │   │   │   │   ├── delete_entries.py
    │   │   │   │   ├── get_history.py
    │   │   │   │   └── list_entries.py
    │   │   │   ├── executions/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── constants.py
    │   │   │   │   ├── count_executions.py
    │   │   │   │   ├── create_execution.py
    │   │   │   │   ├── create_execution_transition.py
    │   │   │   │   ├── create_temporal_lookup.py
    │   │   │   │   ├── get_execution.py
    │   │   │   │   ├── get_execution_status.py
    │   │   │   │   ├── get_execution_transition.py
    │   │   │   │   ├── get_paused_execution_token.py
    │   │   │   │   ├── get_temporal_workflow_data.py
    │   │   │   │   ├── list_execution_inputs_data.py
    │   │   │   │   ├── list_execution_state_data.py
    │   │   │   │   ├── list_execution_transitions.py
    │   │   │   │   ├── list_executions.py
    │   │   │   │   ├── lookup_temporal_data.py
    │   │   │   │   └── prepare_execution_input.py
    │   │   │   ├── files/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_file.py
    │   │   │   │   ├── delete_file.py
    │   │   │   │   ├── get_file.py
    │   │   │   │   └── list_files.py
    │   │   │   ├── projects/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_project.py
    │   │   │   │   ├── list_projects.py
    │   │   │   │   └── project_exists.py
    │   │   │   ├── secrets/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create.py
    │   │   │   │   ├── delete.py
    │   │   │   │   ├── get_by_name.py
    │   │   │   │   ├── list.py
    │   │   │   │   └── update.py
    │   │   │   ├── sessions/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── count_sessions.py
    │   │   │   │   ├── create_or_update_session.py
    │   │   │   │   ├── create_session.py
    │   │   │   │   ├── delete_session.py
    │   │   │   │   ├── get_session.py
    │   │   │   │   ├── list_sessions.py
    │   │   │   │   ├── patch_session.py
    │   │   │   │   └── update_session.py
    │   │   │   ├── tasks/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_or_update_task.py
    │   │   │   │   ├── create_task.py
    │   │   │   │   ├── delete_task.py
    │   │   │   │   ├── get_task.py
    │   │   │   │   ├── list_tasks.py
    │   │   │   │   ├── patch_task.py
    │   │   │   │   └── update_task.py
    │   │   │   ├── tools/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_tools.py
    │   │   │   │   ├── delete_tool.py
    │   │   │   │   ├── get_tool.py
    │   │   │   │   ├── get_tool_args_from_metadata.py
    │   │   │   │   ├── list_tools.py
    │   │   │   │   ├── patch_tool.py
    │   │   │   │   └── update_tool.py
    │   │   │   ├── usage/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_usage_record.py
    │   │   │   │   └── get_user_cost.py
    │   │   │   ├── users/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_or_update_user.py
    │   │   │   │   ├── create_user.py
    │   │   │   │   ├── delete_user.py
    │   │   │   │   ├── get_user.py
    │   │   │   │   ├── list_users.py
    │   │   │   │   ├── patch_user.py
    │   │   │   │   └── update_user.py
    │   │   │   └── utils.py
    │   │   ├── rec_sum/
    │   │   │   ├── __init__.py
    │   │   │   ├── data.py
    │   │   │   ├── entities.py
    │   │   │   ├── entities_example_chat.json
    │   │   │   ├── generate.py
    │   │   │   ├── summarize.py
    │   │   │   ├── summarize_example_chat.json
    │   │   │   ├── summarize_example_result.json
    │   │   │   ├── trim.py
    │   │   │   ├── trim_example_chat.json
    │   │   │   ├── trim_example_result.json
    │   │   │   └── utils.py
    │   │   ├── routers/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── agents/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_agent.py
    │   │   │   │   ├── create_agent_tool.py
    │   │   │   │   ├── create_or_update_agent.py
    │   │   │   │   ├── delete_agent.py
    │   │   │   │   ├── delete_agent_tool.py
    │   │   │   │   ├── get_agent_details.py
    │   │   │   │   ├── list_agent_tools.py
    │   │   │   │   ├── list_agents.py
    │   │   │   │   ├── list_models.py
    │   │   │   │   ├── patch_agent.py
    │   │   │   │   ├── patch_agent_tool.py
    │   │   │   │   ├── router.py
    │   │   │   │   ├── update_agent.py
    │   │   │   │   └── update_agent_tool.py
    │   │   │   ├── docs/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── bulk_delete_docs.py
    │   │   │   │   ├── create_doc.py
    │   │   │   │   ├── delete_doc.py
    │   │   │   │   ├── embed.py
    │   │   │   │   ├── get_doc.py
    │   │   │   │   ├── list_docs.py
    │   │   │   │   ├── router.py
    │   │   │   │   └── search_docs.py
    │   │   │   ├── files/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_file.py
    │   │   │   │   ├── delete_file.py
    │   │   │   │   ├── get_file.py
    │   │   │   │   ├── list_files.py
    │   │   │   │   └── router.py
    │   │   │   ├── healthz/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── check_health.py
    │   │   │   │   └── router.py
    │   │   │   ├── internal/
    │   │   │   │   ├── __init__.py
    │   │   │   │   └── router.py
    │   │   │   ├── jobs/
    │   │   │   │   ├── __init__.py
    │   │   │   │   └── routers.py
    │   │   │   ├── projects/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_project.py
    │   │   │   │   ├── list_projects.py
    │   │   │   │   └── router.py
    │   │   │   ├── responses/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_response.py
    │   │   │   │   ├── get_response.py
    │   │   │   │   └── router.py
    │   │   │   ├── secrets/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_secret.py
    │   │   │   │   ├── delete_secret.py
    │   │   │   │   ├── list_secrets.py
    │   │   │   │   ├── router.py
    │   │   │   │   └── update_secret.py
    │   │   │   ├── sessions/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── auto_tools/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── chat.py
    │   │   │   │   │   └── render.py
    │   │   │   │   ├── chat.py
    │   │   │   │   ├── create_or_update_session.py
    │   │   │   │   ├── create_session.py
    │   │   │   │   ├── delete_session.py
    │   │   │   │   ├── exceptions.py
    │   │   │   │   ├── get_session.py
    │   │   │   │   ├── get_session_history.py
    │   │   │   │   ├── legacy/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── chat.py
    │   │   │   │   │   └── render.py
    │   │   │   │   ├── list_sessions.py
    │   │   │   │   ├── metrics.py
    │   │   │   │   ├── patch_session.py
    │   │   │   │   ├── render.py
    │   │   │   │   ├── router.py
    │   │   │   │   └── update_session.py
    │   │   │   ├── tasks/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_or_update_task.py
    │   │   │   │   ├── create_task.py
    │   │   │   │   ├── create_task_execution.py
    │   │   │   │   ├── get_execution_details.py
    │   │   │   │   ├── get_task_details.py
    │   │   │   │   ├── list_execution_transitions.py
    │   │   │   │   ├── list_task_executions.py
    │   │   │   │   ├── list_tasks.py
    │   │   │   │   ├── router.py
    │   │   │   │   ├── stream_execution_status.py
    │   │   │   │   ├── stream_transitions_events.py
    │   │   │   │   └── update_execution.py
    │   │   │   ├── users/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_or_update_user.py
    │   │   │   │   ├── create_user.py
    │   │   │   │   ├── delete_user.py
    │   │   │   │   ├── get_user_details.py
    │   │   │   │   ├── list_users.py
    │   │   │   │   ├── patch_user.py
    │   │   │   │   ├── router.py
    │   │   │   │   └── update_user.py
    │   │   │   └── utils/
    │   │   │       ├── __init__.py
    │   │   │       ├── model_converters.py
    │   │   │       └── model_validation.py
    │   │   ├── web.py
    │   │   ├── worker/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── __main__.py
    │   │   │   ├── codec.py
    │   │   │   └── worker.py
    │   │   └── workflows/
    │   │       ├── AGENTS.md
    │   │       ├── __init__.py
    │   │       ├── demo.py
    │   │       └── task_execution/
    │   │           ├── __init__.py
    │   │           ├── helpers.py
    │   │           └── transition.py
    │   ├── docker-compose-api.yml
    │   ├── docker-compose.yml
    │   ├── gunicorn_conf.py
    │   ├── poe_tasks.toml
    │   ├── pyproject.toml
    │   ├── pytype.toml
    │   ├── tests/
    │   │   ├── __init__.py
    │   │   ├── fixtures.py
    │   │   ├── sample_tasks/
    │   │   │   ├── __init__.py
    │   │   │   ├── find_selector.yaml
    │   │   │   ├── integration_example.yaml
    │   │   │   ├── reclaim-example.yaml
    │   │   │   ├── screenshot.base64
    │   │   │   ├── simple_multi_step.yaml
    │   │   │   ├── simple_parameter_extractor.yaml
    │   │   │   ├── simple_prompt.yaml
    │   │   │   └── test_find_selector.py
    │   │   ├── test_activities.py
    │   │   ├── test_activities_utils.py
    │   │   ├── test_agent_metadata_filtering.py
    │   │   ├── test_agent_queries.py
    │   │   ├── test_agent_routes.py
    │   │   ├── test_base_evaluate.py
    │   │   ├── test_chat_auto_tools.py
    │   │   ├── test_chat_metadata.py
    │   │   ├── test_chat_routes.py
    │   │   ├── test_chat_streaming.py
    │   │   ├── test_developer_queries.py
    │   │   ├── test_docs_metadata_filtering.py
    │   │   ├── test_docs_queries.py
    │   │   ├── test_docs_routes.py
    │   │   ├── test_entry_queries.py
    │   │   ├── test_execution_queries.py
    │   │   ├── test_execution_workflow.py
    │   │   ├── test_expression_validation.py
    │   │   ├── test_file_routes.py
    │   │   ├── test_files_queries.py
    │   │   ├── test_get_doc_search.py
    │   │   ├── test_litellm_utils.py
    │   │   ├── test_memory_utils.py
    │   │   ├── test_messages_truncation.py
    │   │   ├── test_metadata_filter_utils.py
    │   │   ├── test_middleware.py
    │   │   ├── test_mmr.py
    │   │   ├── test_model_validation.py
    │   │   ├── test_nlp_utilities.py
    │   │   ├── test_pg_query_step.py
    │   │   ├── test_prepare_for_step.py
    │   │   ├── test_prompt_step_auto_tools.py
    │   │   ├── test_query_utils.py
    │   │   ├── test_secrets_queries.py
    │   │   ├── test_secrets_routes.py
    │   │   ├── test_secrets_usage.py
    │   │   ├── test_session_queries.py
    │   │   ├── test_session_routes.py
    │   │   ├── test_task_execution_workflow.py
    │   │   ├── test_task_queries.py
    │   │   ├── test_task_routes.py
    │   │   ├── test_task_validation.py
    │   │   ├── test_tool_call_step.py
    │   │   ├── test_tool_queries.py
    │   │   ├── test_tool_runner.py
    │   │   ├── test_transitions_queries.py
    │   │   ├── test_usage_cost.py
    │   │   ├── test_usage_tracking.py
    │   │   ├── test_user_queries.py
    │   │   ├── test_user_routes.py
    │   │   ├── test_validation_errors.py
    │   │   ├── test_workflow_helpers.py
    │   │   ├── test_workflow_routes.py
    │   │   └── utils.py
    │   └── uuid_extensions.pyi
    ├── analytics/
    │   ├── AGENTS.md
    │   ├── README.md
    │   └── docker-compose.yml
    ├── blob-store/
    │   ├── .gitignore
    │   ├── AGENTS.md
    │   ├── Dockerfile
    │   ├── docker-compose-ha.yml
    │   ├── docker-compose.yml
    │   ├── entrypoint.sh
    │   └── s3.json.template
    ├── cli/
    │   ├── .gitignore
    │   ├── AGENTS.md
    │   ├── README.md
    │   ├── cli-reference.md
    │   ├── poe_tasks.toml
    │   ├── pyproject.toml
    │   ├── spec.md
    │   ├── src/
    │   │   └── julep_cli/
    │   │       ├── __init__.py
    │   │       ├── __main__.py
    │   │       ├── agents.py
    │   │       ├── app.py
    │   │       ├── auth.py
    │   │       ├── chat.py
    │   │       ├── executions.py
    │   │       ├── importt.py
    │   │       ├── init.py
    │   │       ├── logs.py
    │   │       ├── ls.py
    │   │       ├── models.py
    │   │       ├── run.py
    │   │       ├── sync.py
    │   │       ├── tasks.py
    │   │       ├── tools.py
    │   │       ├── utils.py
    │   │       └── wrapper.py
    │   └── tests/
    │       ├── __init__.py
    │       └── test_auth.py
    ├── feature-flags/
    │   ├── docker-compose.yml
    │   └── env.example
    ├── gateway/
    │   ├── AGENTS.md
    │   ├── Dockerfile
    │   ├── docker-compose.yml
    │   ├── entrypoint.sh
    │   ├── letsencrypt/
    │   │   ├── .gitignore
    │   │   └── .gitkeep
    │   └── traefik.yml.template
    ├── hasura/
    │   ├── docker-compose.yml
    │   └── metadata/
    │       ├── hasura_metadata_2025_04_07_16_21_57_118.json
    │       └── hasura_metadata_2025_04_24_14_57_23_154.json
    ├── integrations-service/
    │   ├── .dockerignore
    │   ├── .python-version
    │   ├── AGENTS.md
    │   ├── Dockerfile
    │   ├── README.md
    │   ├── docker-compose.yml
    │   ├── gunicorn_conf.py
    │   ├── integrations/
    │   │   ├── __init__.py
    │   │   ├── __main__.py
    │   │   ├── autogen/
    │   │   │   ├── Agents.py
    │   │   │   ├── Chat.py
    │   │   │   ├── Common.py
    │   │   │   ├── Docs.py
    │   │   │   ├── Entries.py
    │   │   │   ├── Executions.py
    │   │   │   ├── Files.py
    │   │   │   ├── Jobs.py
    │   │   │   ├── Projects.py
    │   │   │   ├── Responses.py
    │   │   │   ├── Secrets.py
    │   │   │   ├── Sessions.py
    │   │   │   ├── Tasks.py
    │   │   │   ├── Tools.py
    │   │   │   ├── Users.py
    │   │   │   └── __init__.py
    │   │   ├── env.py
    │   │   ├── models/
    │   │   │   ├── __init__.py
    │   │   │   ├── algolia.py
    │   │   │   ├── arxiv.py
    │   │   │   ├── base_models.py
    │   │   │   ├── brave.py
    │   │   │   ├── browserbase.py
    │   │   │   ├── cloudinary.py
    │   │   │   ├── email.py
    │   │   │   ├── execution.py
    │   │   │   ├── ffmpeg.py
    │   │   │   ├── google_sheets.py
    │   │   │   ├── llama_parse.py
    │   │   │   ├── mailgun.py
    │   │   │   ├── mcp.py
    │   │   │   ├── remote_browser.py
    │   │   │   ├── spider.py
    │   │   │   ├── unstructured.py
    │   │   │   ├── weather.py
    │   │   │   └── wikipedia.py
    │   │   ├── providers.py
    │   │   ├── routers/
    │   │   │   ├── __init__.py
    │   │   │   ├── execution/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── execute.py
    │   │   │   │   └── router.py
    │   │   │   └── integrations/
    │   │   │       ├── __init__.py
    │   │   │       ├── get_integration.py
    │   │   │       ├── get_integration_tool.py
    │   │   │       ├── get_integrations.py
    │   │   │       └── router.py
    │   │   ├── utils/
    │   │   │   ├── __init__.py
    │   │   │   ├── execute_integration.py
    │   │   │   └── integrations/
    │   │   │       ├── __init__.py
    │   │   │       ├── algolia.py
    │   │   │       ├── arxiv.py
    │   │   │       ├── brave.py
    │   │   │       ├── browserbase.py
    │   │   │       ├── cloudinary.py
    │   │   │       ├── email.py
    │   │   │       ├── ffmpeg.py
    │   │   │       ├── google_sheets.py
    │   │   │       ├── llama_parse.py
    │   │   │       ├── mailgun.py
    │   │   │       ├── mcp.py
    │   │   │       ├── remote_browser.py
    │   │   │       ├── spider.py
    │   │   │       ├── unstructured.py
    │   │   │       ├── weather.py
    │   │   │       └── wikipedia.py
    │   │   └── web.py
    │   ├── poe_tasks.toml
    │   ├── pyproject.toml
    │   ├── pytest.ini
    │   ├── pytype.toml
    │   └── tests/
    │       ├── __init__.py
    │       ├── conftest.py
    │       ├── mocks/
    │       │   ├── __init__.py
    │       │   ├── brave.py
    │       │   ├── email.py
    │       │   ├── llama_parse.py
    │       │   ├── spider.py
    │       │   ├── weather.py
    │       │   └── wikipedia.py
    │       ├── test_mcp.py
    │       ├── test_mcp_sse_server.py
    │       ├── test_provider_execution.py
    │       ├── test_providers.py
    │       └── working_mcp_sse_server.py
    ├── llm-proxy/
    │   ├── .dockerignore
    │   ├── .gitignore
    │   ├── AGENTS.md
    │   ├── docker-compose.yml
    │   └── litellm-config.yaml
    ├── memory-store/
    │   ├── .gitignore
    │   ├── AGENTS.md
    │   ├── Dockerfile.migrations
    │   ├── README.md
    │   ├── docker-compose.yml
    │   └── migrations/
    │       ├── 000001_initial.down.sql
    │       ├── 000001_initial.up.sql
    │       ├── 000002_developers.down.sql
    │       ├── 000002_developers.up.sql
    │       ├── 000003_users.down.sql
    │       ├── 000003_users.up.sql
    │       ├── 000004_agents.down.sql
    │       ├── 000004_agents.up.sql
    │       ├── 000005_files.down.sql
    │       ├── 000005_files.up.sql
    │       ├── 000006_docs.down.sql
    │       ├── 000006_docs.up.sql
    │       ├── 000007_ann.down.sql
    │       ├── 000007_ann.up.sql
    │       ├── 000008_tools.down.sql
    │       ├── 000008_tools.up.sql
    │       ├── 000009_sessions.down.sql
    │       ├── 000009_sessions.up.sql
    │       ├── 000010_tasks.down.sql
    │       ├── 000010_tasks.up.sql
    │       ├── 000011_executions.down.sql
    │       ├── 000011_executions.up.sql
    │       ├── 000012_transitions.down.sql
    │       ├── 000012_transitions.up.sql
    │       ├── 000013_executions_continuous_view.down.sql
    │       ├── 000013_executions_continuous_view.up.sql
    │       ├── 000014_temporal_lookup.down.sql
    │       ├── 000014_temporal_lookup.up.sql
    │       ├── 000015_entries.down.sql
    │       ├── 000015_entries.up.sql
    │       ├── 000016_entry_relations.down.sql
    │       ├── 000016_entry_relations.up.sql
    │       ├── 000017_compression.down.sql
    │       ├── 000017_compression.up.sql
    │       ├── 000018_doc_search.down.sql
    │       ├── 000018_doc_search.up.sql
    │       ├── 000019_system_developer.down.sql
    │       ├── 000019_system_developer.up.sql
    │       ├── 000020_executions_task_cascade.down.sql
    │       ├── 000020_executions_task_cascade.up.sql
    │       ├── 000021_fix_toolname_contraint.down.sql
    │       ├── 000021_fix_toolname_contraint.up.sql
    │       ├── 000022_vector_search.down.sql
    │       ├── 000022_vector_search.up.sql
    │       ├── 000023_update_strings_length_constraints.down.sql
    │       ├── 000023_update_strings_length_constraints.up.sql
    │       ├── 000024_hybrid_search.down.sql
    │       ├── 000024_hybrid_search.up.sql
    │       ├── 000025_default_system_template.down.sql
    │       ├── 000025_default_system_template.up.sql
    │       ├── 000026_transition_cursor.down.sql
    │       ├── 000026_transition_cursor.up.sql
    │       ├── 000027_add_postgraphile.down.sql
    │       ├── 000027_add_postgraphile.up.sql
    │       ├── 000028_new_hybrid_search_implementation.down.sql
    │       ├── 000028_new_hybrid_search_implementation.up.sql
    │       ├── 000029_duplicate_doc_prevention.down.sql
    │       ├── 000029_duplicate_doc_prevention.up.sql
    │       ├── 000030_add_unaccent_search_config.down.sql
    │       ├── 000030_add_unaccent_search_config.up.sql
    │       ├── 000031_add_trigram_search.down.sql
    │       ├── 000031_add_trigram_search.up.sql
    │       ├── 000032_enhance_trigram_search.down.sql
    │       ├── 000032_enhance_trigram_search.up.sql
    │       ├── 000033_fix_latest_transitions.down.sql
    │       ├── 000033_fix_latest_transitions.up.sql
    │       ├── 000034_switch_to_hypercore.down.sql
    │       ├── 000034_switch_to_hypercore.up.sql
    │       ├── 000035_enhanced_indices.down.sql
    │       ├── 000035_enhanced_indices.up.sql
    │       ├── 000036_usage.down.sql
    │       ├── 000036_usage.up.sql
    │       ├── 000037_speed_up_search.down.sql
    │       ├── 000037_speed_up_search.up.sql
    │       ├── 000038_usage_cost_monthly.down.sql
    │       ├── 000038_usage_cost_monthly.up.sql
    │       ├── 000039_projects.down.sql
    │       ├── 000039_projects.up.sql
    │       ├── 000040_add_secrets.down.sql
    │       ├── 000040_add_secrets.up.sql
    │       ├── 000041_non_null_forward_tool_calls.down.sql
    │       ├── 000041_non_null_forward_tool_calls.up.sql
    │       ├── 000042_add_api_keys.down.sql
    │       ├── 000042_add_api_keys.up.sql
    │       ├── 000043_optional_trigram_search.down.sql
    │       ├── 000043_optional_trigram_search.up.sql
    │       ├── 000044_search_optimize.down.sql
    │       └── 000044_search_optimize.up.sql
    ├── monitoring/
    │   ├── AGENTS.md
    │   ├── README.md
    │   ├── docker-compose.yml
    │   ├── grafana/
    │   │   ├── dashboard.yaml
    │   │   └── provisioning/
    │   │       ├── dashboards/
    │   │       │   ├── advanced-visibility-specific.json
    │   │       │   ├── clustermonitoring-kubernetes.json
    │   │       │   ├── frontend-service-specific.json
    │   │       │   ├── history-service-specific.json
    │   │       │   ├── main.yaml
    │   │       │   ├── matching-service-specific.json
    │   │       │   ├── queries-metrics.json
    │   │       │   ├── requests-metrics.json
    │   │       │   ├── sdk-general.json
    │   │       │   ├── sdk-java.json
    │   │       │   ├── server-general.json
    │   │       │   ├── temporal_cloud.json
    │   │       │   └── worker-service-specific.json
    │   │       └── datasources/
    │   │           └── datasource.yml
    │   └── prometheus/
    │       └── config/
    │           └── prometheus.yml
    ├── scheduler/
    │   ├── AGENTS.md
    │   ├── cert/
    │   │   └── .gitignore
    │   ├── docker-compose.yml
    │   └── dynamicconfig/
    │       └── temporal-postgres.yaml
    ├── schemas/
    │   ├── create_agent_request.json
    │   ├── create_task_request.json
    │   └── walk.jq
    ├── scripts/
    │   ├── __init__.py
    │   ├── generate_changelog.py
    │   ├── generate_jwt.py
    │   ├── generate_openapi_code.sh
    │   ├── readme_translator.py
    │   ├── sync_model_docs.py
    │   └── templates/
    │       ├── changelog.yaml
    │       └── header.html
    └── typespec/
        ├── .gitignore
        ├── AGENTS.md
        ├── agents/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── chat/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── common/
        │   ├── constants.tsp
        │   ├── interfaces.tsp
        │   ├── main.tsp
        │   ├── mixins.tsp
        │   ├── scalars.tsp
        │   └── types.tsp
        ├── docs/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── entries/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── executions/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── files/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── jobs/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── main.tsp
        ├── package.json
        ├── projects/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── responses/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── secrets/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── sessions/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── tasks/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   ├── models.tsp
        │   ├── step_kind.tsp
        │   └── steps.tsp
        ├── tools/
        │   ├── algolia.tsp
        │   ├── anthropic.tsp
        │   ├── arxiv.tsp
        │   ├── brave.tsp
        │   ├── browserbase/
        │   │   ├── contexts.tsp
        │   │   ├── extensions.tsp
        │   │   ├── main.tsp
        │   │   └── sessions.tsp
        │   ├── cloudinary.tsp
        │   ├── email.tsp
        │   ├── endpoints.tsp
        │   ├── ffmpeg.tsp
        │   ├── google_sheets.tsp
        │   ├── llama_parse.tsp
        │   ├── mailgun.tsp
        │   ├── main.tsp
        │   ├── mcp.tsp
        │   ├── models.tsp
        │   ├── remote_browser.tsp
        │   ├── spider.tsp
        │   ├── unstructured.tsp
        │   ├── weather.tsp
        │   └── wikipedia.tsp
        ├── tsp-output/
        │   └── @typespec/
        │       └── openapi3/
        │           └── openapi-1.0.0.yaml
        ├── tspconfig.yaml
        ├── users/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        └── versions.tsp

================================================
FILE CONTENTS
================================================

================================================
FILE: .agentignore
================================================
# Git
.git/

.codex/

# Build and distribution directories
**/dist/
**/build/
**/.ruff_cache/
**/node_modules/
**/__pycache__/
**/.pytest_cache/
**/.mypy_cache/
**/.tox/
**/.coverage/
**/.venv/
**/venv/
**/.next/
**/.nuxt/
**/out/
**/coverage/

# Environment and configuration files
.env
.env.*
**/.env.local
**/.env.development.local
**/.env.test.local
**/.env.production.local

# Large data files
**/*.parquet
**/*.arrow
**/*.pickle
**/*.pkl
**/*.db
**/*.sqlite
**/*.sqlite3

# Generated documentation
**/docs/_build/
**/site/
**/public/
documentation/openapi.yaml

# Package-manager files
**/yarn-error.log
**/npm-debug.log
**/package-lock.json
**/yarn.lock
**/pnpm-lock.yaml
**/pnpm-workspace.yaml
**/poetry.lock
**/Pipfile.lock
**/requirements-frozen.txt
**/uv.lock

# Logs
**/logs/
**/*.log

# Cache directories
**/.cache/
**/.npm/
**/.pnpm/
**/.yarn/
**/.pnp/

# IDE and editor files
**/.vscode/
**/.idea/
**/.DS_Store
**/.ipynb_checkpoints/
**/*.swp

# Compiled binaries
**/*.so
**/*.dll
**/*.dylib
**/*.exe
**/*.whl
**/*.egg-info/
**/*.egg

# Large media files
**/*.mp4
**/*.mp3
**/*.wav
**/*.avi
**/*.mov
**/*.png
**/*.jpg
**/*.jpeg
**/*.gif
**/*.svg
**/*.ico

# Container and deployment files
**/*.tfvars
**/*.tfstate
**/*.tfstate.backup

# Temporary files
**/tmp/
**/temp/
**/*.tmp
**/*.temp

# Large generated files
gaga.json
openapi.yaml
openapi*.yaml
openapi*.yml
openapi*.json

# Julep-specific
# TypeSpec generated outputs
**/tsp-output/
typespec/node_modules/

# Local database data
data/

# Testing fixtures and large example files
**/tests/sample_tasks/*.base64
**/tests/sample_tasks/*.png

# Temporal scheduler certificates
scheduler/cert/

# Docker and container configuration
**/.docker/
**/docker-compose.override.yml

# Generated files in gateway
gateway/letsencrypt/

# Monitoring data
monitoring/grafana/dashboards/
monitoring/prometheus/data/
monitoring/grafana/storage/


================================================
FILE: .codex/setup.sh
================================================
#!/usr/bin/env bash
#
# setup-all.sh ─ one-shot bootstrap for the whole julep monorepo
#
# › run from repo root:  ./setup-all.sh
#
# It will:
#   • ensure Poetry + TypeSpec compiler are available
#   • iterate over each top-level directory and install deps:
#       – pyproject.toml  ➜  poetry install
#       – package.json    ➜  npm install  (uses pnpm if present)
#       – requirements.txt➜  pip install -r
#   • install root pre-commit hooks (if .pre-commit-config.yaml exists)
#   • stop on first error (set -e)

set -euo pipefail

### 1. Globals --------------------------------------------------------------

IGNORE_DIRS_DEFAULT="sdks deploy scripts monitoring .git .venv node_modules"
IGNORE_DIRS="${IGNORE_DIRS:-$IGNORE_DIRS_DEFAULT}"

ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# cd "$ROOT_DIR"

RED="\033[0;31m"; GREEN="\033[0;32m"; CYAN="\033[0;36m"; NC="\033[0m"

announce() { echo -e "${CYAN}==>$1${NC}"; }

### 3. Ensure TypeSpec compiler --------------------------------------------

if ! command -v tsp &> /dev/null; then
  announce "Installing TypeSpec compiler globally (npm)…"
  npm install -g @typespec/compiler > /dev/null
else
  announce "TypeSpec compiler present → $(tsp --version)"
fi

announce "Installing hasura-cli globally (npm)…"
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash

### 4. Walk directories -----------------------------------------------------
curl -LsSf https://astral.sh/uv/install.sh | sh


if [[ -f "pyproject.toml" ]]; then
  announce "Installing root deps"
  uv sync
  echo -e "${GREEN}✓ root deps installed${NC}"
fi


OIFS=$IFS; IFS=$'\n'
for dir in $(git ls-tree --name-only -d HEAD | sort); do
  d="${dir#./}"
  if [[ " $IGNORE_DIRS " =~ [[:space:]]"$d"[[:space:]] ]]; then
    echo -e "· skipping $d (ignored)"
    continue
  fi

  announce "Processing $d/"

  # uv project?
  if [[ -f "$d/pyproject.toml" ]]; then
    pushd "$d" > /dev/null
    announce "[uv] installing in $d …"
    uv sync
    uv pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl
    popd > /dev/null
    echo -e "${GREEN}✓ uv install done for $d${NC}"
    continue
  fi

  # Node project?
  if [[ -f "$d/package.json" ]]; then
    pushd "$d" > /dev/null
    announce "[npm] installing in $d …"
    if command -v pnpm &> /dev/null; then
      pnpm install --silent
    else
      npm install --silent
    fi
    popd > /dev/null
    echo -e "${GREEN}✓ npm install done for $d${NC}"
    continue
  fi

  # Plain requirements.txt?
  if [[ -f "$d/requirements.txt" ]]; then
    pushd "$d" > /dev/null
    announce "[pip] installing requirements in $d …"
    pip install -r requirements.txt
    pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl
    popd > /dev/null
    echo -e "${GREEN}✓ pip install done for $d${NC}"
    continue
  fi

  echo -e "· no recognised manifest in $d – nothing to install"
done
IFS=$OIFS

### 5. Pre-commit -----------------------------------------------------------

if [[ -f ".pre-commit-config.yaml" ]]; then
  announce "Installing git pre-commit hooks…"
  pip install --quiet pre-commit
  pre-commit install
  echo -e "${GREEN}✓ pre-commit hooks installed${NC}"
fi

echo -e "${GREEN}\nAll done – monorepo dependencies ready!${NC}"


================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [INSERT EMAIL ADDRESS]. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.



================================================
FILE: .github/CONTRIBUTING.md
================================================
<div align="center" id="top">
 <img src="https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable=Rapidly%20build%20AI%20workflows%20and%20agents&font=Source%20Code%20Pro&logo=https%3A%2F%2Fraw.githubusercontent.com%2Fjulep-ai%2Fjulep%2Fdev%2F.github%2Fjulep-logo.svg&owner=1&forks=1&pattern=Solid&stargazers=1&theme=Auto" alt="julep" width="320" height="160" />

  <p>
    <a href="https://dashboard.julep.ai">
      <img src="https://img.shields.io/badge/Get_API_Key-FF5733?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAxTDMgNXYxNGw5IDQgOS00VjVsLTktNHptMCAyLjh2MTYuNEw1IDE2LjJWNi44bDctMy4yem0yIDguMmwtMi0yLTIgMiAyIDIgMi0yeiIvPjwvc3ZnPg==" alt="Get API Key">
    </a>
    <a href="https://docs.julep.ai">
      <img src="https://img.shields.io/badge/Documentation-4B32C3?style=for-the-badge&logo=gitbook&logoColor=white" alt="Documentation">
    </a>
  </p>
  <p>
    <a href="https://hub.docker.com/u/julepai">
      <img src="https://img.shields.io/docker/v/julepai/agents-api?sort=semver&style=for-the-badge&color=2496ED&logo=docker&logoColor=white" alt="Docker Version">
    </a>
    <a href="https://www.npmjs.com/package/@julep/sdk">
      <img src="https://img.shields.io/npm/v/@julep/sdk?style=for-the-badge&color=CB3837&logo=npm&logoColor=white" alt="NPM Version">
    </a>
    <a href="https://www.npmjs.com/package/@julep/sdk">
      <img src="https://img.shields.io/npm/dm/@julep/sdk?style=for-the-badge&color=CB3837&logo=npm&logoColor=white" alt="NPM Downloads">
    </a>
    <a href="https://pypi.org/project/julep/">
      <img src="https://img.shields.io/pypi/v/julep?style=for-the-badge&color=3776AB&logo=python&logoColor=white" alt="PyPI Version">
    </a>
    <a href="https://pypi.org/project/julep/">
      <img src="https://img.shields.io/pypi/dm/julep?style=for-the-badge&color=3776AB&logo=python&logoColor=white" alt="PyPI Downloads">
    </a>
  </p>
  
  <h3>
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow">Discord</a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow">𝕏</a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow">LinkedIn</a>
  </h3>
</div>

# Contributing to Julep

👋 Welcome! We're excited that you're interested in contributing to Julep. This guide will help you get started.

---

## 🚀 Quick Start

1. Fork the repository
2. Create a new branch for your changes
3. Make your changes and test them
4. Submit a pull request

---

## 📝 Ways to Contribute

### 🐛 Reporting Issues

Found a bug? Have a feature request? [Submit an issue](https://github.com/julep-ai/julep/issues) with:

- [ ] Steps to reproduce
- [ ] Expected behavior
- [ ] Actual behavior
- [ ] Screenshots (if applicable)

### 💻 Contributing Code

1. Fork the repository
2. Create a feature branch: `git checkout -b feature/your-feature-name`
3. Make your changes
4. Write/update tests
5. Push to your fork
6. Open a pull request

> 💡 **Tip:** Make sure your code follows our style guide and passes all tests.

---

## 🏗 Project Architecture

### Core Services

| Service | Description |
|---------|-------------|
| `agents-api` | Core API service |
| `memory-store` | PostgreSQL database with TimescaleDB for persistent storage |
| `blob-store` | Object storage for files and binary data |
| `integrations-service` | Adapters for external services and tools |
| `scheduler` | Temporal workflow engine for task scheduling and orchestration |
| `gateway` | API gateway for routing and request handling |
| `llm-proxy` | LiteLLM proxy for language model interactions |
| `monitoring` | Prometheus and Grafana monitoring infrastructure |
| `typespec` | API specifications in TypeSpec format |
| `sdks` | Node.js and Python client SDKs |
| `cli` | Command-line interface for Julep |

### Supporting Modules

- `deploy`: Deployment configs
- `documentation`: Project documentation assets
- `scripts`: Utility scripts and tools
- `cookbooks`: Usage examples and recipes

### Tech Stack

- **FastAPI**: Web framework for building APIs
- **TypeSpec**: API specification language
- **Timescale**: Database system
- **SeaweedFS**: Blob storage system
- **Grafana**: Monitoring and observability platform
- **Prometheus**: Monitoring and observability platform
- **LiteLLM**: LLM framework
- **Temporal**: Workflow engine
- **Docker**: Containerization

> To understand the relationships between the components, please refer to the [System Architecture](https://docs.julep.ai/docs/advanced/architecture-deep-dive) section.

## Understanding the Codebase

To get a comprehensive understanding of Julep, we recommend exploring the codebase in the following order:

1. **Project Overview**
   - Read `README.md` in the root directory
   - Explore `docs/` for detailed documentation

2. **System Architecture**
   - Examine `docker-compose.yml` in the root directory
   - Review `deploy/` directory for different deployment configurations

3. **API Specifications**
   - Learn about TypeSpec: https://typespec.io/docs/
   - Explore `typespec/` directory:
     - Start with `common/` folder
     - Review `main.tsp`
     - Examine each module sequentially

4. **Core API Implementation**
   - Learn about FastAPI: https://fastapi.tiangolo.com/
   - Explore `agents-api/` directory:
     - Review `README.md` for an overview
     - Examine `routers/` for API endpoints
     - Look into `models/` for data models

5. **Database and Storage**
   - Learn about Cozo: https://docs.cozodb.org/en/latest/tutorial.html
   - Review `agents-api/README.md` for database schema
   - Explore `agents-api/models/` for database queries

6. **Workflow Management**
   - Learn about Temporal: https://docs.temporal.io/develop/python
   - Explore `agents-api/activities/` for individual workflow steps
   - Review `agents-api/workflows/task_execution/` for main workflow logic

7. **Testing**
   - Examine `agents-api/tests/` for test cases

8. **Additional Services**
   - Explore other service directories (`integrations-service/`, `embedding-service/`, etc.) to understand their specific roles and implementations

## Contributing Guidelines

1. **Set Up Development Environment**
   - Clone the repository
   - Install Docker and Docker Compose
   - Set up necessary API keys and environment variables

   > You can check our [Local Setup](https://docs.julep.ai/docs/advanced/localsetup) section in the docs for more information.

2. **Choose an Area to Contribute**
   - Check the issue tracker for open issues
   - Look for "good first issue" labels for newcomers

3. **Make Changes**
   - Create a new branch for your changes
   - Write clean, well-documented code
   - Ensure your changes adhere to the project's coding standards

4. **Test Your Changes**
   - Run existing tests
   - Add new tests for new functionality
   - Ensure all tests pass before submitting your changes

5. **Submit a Pull Request**
   - Provide a clear description of your changes
   - Reference any related issues
   - Be prepared to respond to feedback and make adjustments

6. **Code Review**
   - Address any comments or suggestions from reviewers
   - Make necessary changes and push updates to your branch

7. **Merge**
   - Once approved, your changes will be merged into the main branch

### Adding a New Integration

The integration service is a crucial part of Julep, and we welcome contributions from the community to enhance its functionality and capabilities.

To contribute to the integration service, you can follow these steps:

1. **Add a new integration provider to our TypeSpec:** You can do so by:
   1. Adding the provider name to the `integrationProvider` alias in `typespec/tools/models.tsp`
   2. Adding a new file in `typespec/tools/` with the provider name. Take a look at the other integration files in the `typespec/tools/` directory for examples.

      > If the integration needs an API key or other form of authentication, you would have to add a `Setup` model to the integration definition file, where you would define the authentication parameters (`spider.tsp` is an example of this). Otherwise, you can omit the `Setup` model (`wikipedia.tsp` is an example of this).

2. **Generate the new OpenAPI schema and Pydantic models:** You need to `cd` into the root directory of the project and run `./scripts/generate_openapi_code.sh` to generate the new OpenAPI schema along with Pydantic models for the new changes.

   > The new OpenAPI schema will be generated in `./openapi.yaml` and the Pydantic models will be generated in `./integrations-service/integrations/autogen`. 

3. **Add the new integration logic in the integration service:** You need to add the new integration logic in the integration service by adding a new file in `integration-service/integrations/utils/integrations` with the provider name. Take a look at the other integration files in the same directory for examples.

4. **Add the new integration provider to the providers registry:** You need to add the new integration provider to the providers registry by adding a new entry to the `available_providers` dictionary in `integrations-service/integrations/providers.py`.

### Documentation Improvements

Improvements to documentation are always appreciated! If you see areas that could be clarified or expanded, feel free to make the changes and submit a pull request.

### Sharing Feedback and Ideas

We'd love to hear your feedback and ideas for the project! Feel free to submit an issue or contact the maintainers directly to share your thoughts. Your input is very valuable in shaping the future direction of the project.

Remember, contributions aren't limited to code. Documentation improvements, bug reports, and feature suggestions are also valuable contributions to the project.


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: "🐛 Bug Report"
description: "Submit a bug report to help us improve"
title: "[Bug]: "
labels: ["bug"]
body:
  - type: textarea
    id: description
    attributes:
      label: "📜 Description"
      placeholder: "A clear and concise description of what the bug is."

  - type: textarea
    id: steps-to-reproduce
    attributes:
      label: "👟 Reproduction steps"
      placeholder: "1. Go to '...'
        2. Click on '....'
        3. Scroll down to '....'
        4. See error"

  - type: checkboxes
    id: no-duplicate-issues
    attributes:
      label: "👀 Have you searched previous issues to see if this has been raised before?"
      options:
        - label: "I checked and didn't find similar issue"
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Have Question?
    url: https://discord.com/invite/JTSBGRZrzj
    about: Join Official Discord server

================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: 🚀 Feature
description: "Submit a proposal for a new feature"
title: "[Feature]: "
labels: ["enhancement"]
body:
  - type: textarea
    id: feature-description
    validations:
      required: true
    attributes:
      label: "🔖 Feature description"
      placeholder: "A clear and concise description of what the feature is."
  - type: textarea
    id: pitch
    attributes:
      label: "🎤 Why is this feature needed ?"
      placeholder: "Please explain why this feature should be implemented and how it would be used. Add examples, if applicable."
  - type: textarea
    id: solution
    attributes:
      label: "✌️ How do you aim to achieve this?"
      placeholder: "A clear and concise description of what you want to happen."
  - type: checkboxes
    id: no-duplicate-issues
    attributes:
      label: "👀 Have you searched issues and PRs to see if this feature request has been raised before?"
      options:
        - label: "I checked and didn't find similar issue"
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/refactor.yml
================================================
name: "🛠️ Refactor"
description: "Submit a bug report to help us improve"
title: "[Refactor]: "
labels: ["refactor"]
body:
  - type: textarea
    id: description
    attributes:
      label: "📜 Description"
      placeholder: "A clear and concise description of what should be refactored."

  - type: textarea
    id: relevant-files
    attributes:
      label: "👟 Relevant files"
      placeholder: "1. `agents-api/Dockerfile` needs to change
        2. `integrations/**/*.py` files need to be reformatted"


================================================
FILE: .github/LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: .github/README-CN.md
================================================
<sup><div align="center">
  <!-- Keep these links. Translations will automatically update with the README. -->
  [Deutsch](https://www.readme-i18n.com/julep-ai/julep?lang=de) | 
  [Español](https://www.readme-i18n.com/julep-ai/julep?lang=es) | 
  [français](https://www.readme-i18n.com/julep-ai/julep?lang=fr) | 
  [日本語](https://www.readme-i18n.com/julep-ai/julep?lang=ja) | 
  [한국어](https://www.readme-i18n.com/julep-ai/julep?lang=ko) | 
  [Português](https://www.readme-i18n.com/julep-ai/julep?lang=pt) | 
  [Русский](https://www.readme-i18n.com/julep-ai/julep?lang=ru) | 
  [中文](https://www.readme-i18n.com/julep-ai/julep?lang=zh)
</div></sup>

<div align="center" id="top">
<img src="https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable=Serverless%20AI%20Workflows%20for%20Data%20%26%20ML%20Teams&font=Source%20Code%20Pro&logo=https%3A%2F%2Fraw.githubusercontent.com%2Fjulep-ai%2Fjulep%2Fdev%2F.github%2Fjulep-logo.svg&owner=1&forks=1&pattern=Solid&stargazers=1&theme=Auto" alt="julep" height=300 />

<br>
  <p>
   <a href="https://www.npmjs.com/package/@julep/sdk"><img src="https://img.shields.io/npm/v/%40julep%2Fsdk?style=social&amp;logo=npm&amp;link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F%40julep%2Fsdk" alt="NPM Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://pypi.org/project/julep"><img src="https://img.shields.io/pypi/v/julep?style=social&amp;logo=python&amp;label=PyPI&amp;link=https%3A%2F%2Fpypi.org%2Fproject%2Fjulep" alt="PyPI - Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://hub.docker.com/u/julepai"><img src="https://img.shields.io/docker/v/julepai/agents-api?sort=semver&amp;style=social&amp;logo=docker&amp;link=https%3A%2F%2Fhub.docker.com%2Fu%2Fjulepai" alt="Docker Image Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://choosealicense.com/licenses/apache/"><img src="https://img.shields.io/github/license/julep-ai/julep" alt="GitHub License" height="28"></a>
  </p>
  
  <h3 align="center">
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow"><img src="https://user-images.githubusercontent.com/74038190/235294015-47144047-25ab-417c-af1b-6746820a20ff.gif" width="60"></a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow"><img src="https://raw.githubusercontent.com/gist/IgnaceMaes/744cd9cf41ec6acf46fc8f4e9f370f86/raw/d16658c2945d30c8a953b35cb17dd7085111b46c/x-logo.svg" width="45"></a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow"><img src="https://user-images.githubusercontent.com/74038190/235294012-0a55e343-37ad-4b0f-924f-c8431d9d2483.gif" width="60"></a>

  </h3>
  
  <!-- <h3>
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow">Discord</a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow">𝕏</a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow">LinkedIn</a>
  </h3> -->
</div>

**立即试用Julep:** 访问 **[Julep网站](https://julep.ai)** · 在 **[Julep控制台](https://dashboard.julep.ai)** 开始使用 (免费API密钥) · 阅读 **[文档](https://docs.julep.ai/introduction/julep)**

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
<h3>📖 目录</h3>

- [为什么选择Julep?](#为什么选择julep)
- [开始使用](#开始使用)
- [文档和示例](#文档和示例)
- [社区和贡献](#社区和贡献)
- [许可证](#许可证)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->


<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## 为什么选择Julep?

Julep是一个构建**基于智能代理的AI工作流**的开源平台,远超简单的提示链。它让你能够使用大型语言模型(LLM)和工具编排复杂的多步骤流程,**无需管理任何基础设施**。使用Julep,你可以创建**记住过往交互**并处理具有分支逻辑、循环、并行执行和外部API集成等复杂任务的AI代理。简而言之,Julep就像*"AI代理的Firebase"*,为规模化的智能工作流提供强大的后端。

**主要功能和优势:**

* **持久记忆:** 构建在对话中维持上下文和长期记忆的AI代理,让它们能够随时间学习和改进。
* **模块化工作流:** 将复杂任务定义为模块化步骤(YAML或代码),具有条件逻辑、循环和错误处理。Julep的工作流引擎自动管理多步骤流程和决策。
* **工具编排:** 轻松集成外部工具和API(网页搜索、数据库、第三方服务等)作为代理工具箱的一部分。Julep的代理可以调用这些工具来增强其能力,实现检索增强生成等功能。
* **并行和可扩展:** 并行运行多个操作以提高效率,让Julep处理后台的扩展和并发。平台是无服务器的,因此可以无缝扩展工作流,无需额外的DevOps开销。
* **可靠执行:** 不用担心故障 - Julep提供内置重试、自愈步骤和强大的错误处理,让长时间运行的任务保持正轨。你还能获得实时监控和日志记录来跟踪进展。
* **易于集成:** 通过我们的**Python**和**Node.js** SDK快速开始,或使用Julep CLI进行脚本编写。如果你想直接集成到其他系统中,Julep的REST API也可以使用。

*专注于你的AI逻辑和创意,而把繁重的工作交给Julep!* <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/2c0eef4b-7b75-42bd-9722-4bea97a2d532" width="20">

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## 开始使用
<p>
    <a href="https://dashboard.julep.ai">
      <img src="https://img.shields.io/badge/Get_API_Key-FF5733?style=logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAxTDMgNXYxNGw5IDQgOS00VjVsLTktNHptMCAyLjh2MTYuNEw1IDE2LjJWNi44bDctMy4yem0yIDguMmwtMi0yLTIgMiAyIDIgMi0yeiIvPjwvc3ZnPg==" alt="获取API密钥" height="28">
    </a>
    <span>&nbsp;</span>
    <a href="https://docs.julep.ai">
      <img src="https://img.shields.io/badge/Documentation-4B32C3?style=logo=gitbook&logoColor=white" alt="文档" height="28">
    </a>
  </p>
使用Julep简单易行:

1. **注册和API密钥:** 首先,在 [Julep控制台](https://dashboard.julep.ai) 注册以获取你的API密钥(用于验证SDK调用)。
2. **安装SDK:** 为你首选的语言安装Julep SDK:

   * <img src="https://user-images.githubusercontent.com/74038190/212257472-08e52665-c503-4bd9-aa20-f5a4dae769b5.gif" width="20"> **Python:** `pip install julep`
   * <img src="https://user-images.githubusercontent.com/74038190/212257454-16e3712e-945a-4ca2-b238-408ad0bf87e6.gif" width="20"> **Node.js:** `npm install @julep/sdk` (或 `yarn add @julep/sdk`)
3. **定义你的代理:** 使用SDK或YAML定义代理及其任务工作流。例如,你可以指定代理的记忆、可使用的工具以及逐步的任务逻辑。(详细演练请参见我们文档中的**[快速开始](https://docs.julep.ai/introduction/quick-start)**。)
4. **运行工作流:** 通过SDK调用你的代理来执行任务。Julep平台将在云端编排整个工作流,并为你管理状态、工具调用和LLM交互。你可以检查代理的输出,在控制台上监控执行,并根据需要进行迭代。

就是这样!你的第一个AI代理可以在几分钟内启动并运行。要获得完整教程,请查看文档中的**[快速开始指南](https://docs.julep.ai/introduction/quick-start)**。

> **注意:** Julep还提供命令行界面(CLI)(当前为Python的beta版)来管理工作流和代理。如果你喜欢无代码方法或想要脚本化常见任务,请参见 [Julep CLI文档](https://docs.julep.ai/responses/quickstart#cli-installation) 了解详情。

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## 文档和示例


想要深入了解?**[Julep文档](https://docs.julep.ai)**涵盖了掌握平台所需的一切 - 从核心概念(代理、任务、会话、工具)到高级主题如代理记忆管理和架构内部。关键资源包括:

* **[概念指南](https://docs.julep.ai/concepts/):** 了解Julep的架构、会话和记忆的工作原理、工具使用、管理长对话等等。
* **[API和SDK参考](https://docs.julep.ai/api-reference/):** 查找所有SDK方法和REST API端点的详细参考,以将Julep集成到你的应用程序中。
* **[教程](https://docs.julep.ai/tutorials/):** 构建真实应用程序的分步指南(例如搜索网络的研究代理、旅行规划助手或具有自定义知识的聊天机器人)。
* **[Cookbook食谱](https://github.com/julep-ai/julep/tree/dev/cookbooks):** 探索**Julep Cookbook**以获取现成的示例工作流和代理。这些食谱展示了常见模式和用例 - 通过示例学习的绝佳方式。*浏览此存储库中的 [`cookbooks/`](https://github.com/julep-ai/julep/tree/dev/cookbooks) 目录以获取示例代理定义。*
* **[IDE集成](https://context7.com/julep-ai/julep):** 直接在IDE中访问Julep文档!在编码时获得即时答案的完美解决方案。

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## 社区和贡献

加入我们不断壮大的开发者和AI爱好者社区!以下是一些参与和获得支持的方式:

* **Discord社区:** 有问题或想法?加入我们 [官方Discord服务器](https://discord.gg/7H5peSN9QP) 上的对话,与Julep团队和其他用户聊天。我们很乐意帮助故障排除或头脑风暴新的用例。
* **GitHub讨论和问题:** 请随时使用GitHub报告错误、请求功能或讨论实现细节。如果你想贡献,请查看 [**good first issues**](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) - 我们欢迎各种类型的贡献。
* **贡献:** 如果你想贡献代码或改进,请查看我们的 [贡献指南](CONTRIBUTING.md) 了解如何开始。我们感谢所有的PR和反馈。通过协作,我们可以让Julep变得更好!

*专业提示:<img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/e379a33a-b428-4385-b44f-3da16e7bac9f" width="35"> 给我们的仓库点星以保持更新 - 我们正在不断添加新功能和示例。*    

<br/>

你的贡献,无论大小,对我们都很有价值。让我们一起构建令人惊叹的东西!    <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/2c0eef4b-7b75-42bd-9722-4bea97a2d532" width="20">
 <img src="https://user-images.githubusercontent.com/74038190/216125640-2783ebd5-e63e-4ed1-b491-627a40b24850.png" width="20">

<h4>我们杰出的贡献者:</h4>

<a href="https://github.com/julep-ai/julep/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=julep-ai/julep" />
</a>

<br/>

## 许可证

Julep采用**Apache 2.0许可证**提供,这意味着你可以在自己的项目中自由使用。详情请参见 [LICENSE](LICENSE) 文件。享受使用Julep构建的乐趣!

================================================
FILE: .github/README-FR.md
================================================
<sup><div align="center">
  <!-- Keep these links. Translations will automatically update with the README. -->
  [Deutsch](https://www.readme-i18n.com/julep-ai/julep?lang=de) | 
  [Español](https://www.readme-i18n.com/julep-ai/julep?lang=es) | 
  [français](https://www.readme-i18n.com/julep-ai/julep?lang=fr) | 
  [日本語](https://www.readme-i18n.com/julep-ai/julep?lang=ja) | 
  [한국어](https://www.readme-i18n.com/julep-ai/julep?lang=ko) | 
  [Português](https://www.readme-i18n.com/julep-ai/julep?lang=pt) | 
  [Русский](https://www.readme-i18n.com/julep-ai/julep?lang=ru) | 
  [中文](https://www.readme-i18n.com/julep-ai/julep?lang=zh)
</div></sup>

<div align="center" id="top">
<img src="https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable=Serverless%20AI%20Workflows%20for%20Data%20%26%20ML%20Teams&font=Source%20Code%20Pro&logo=https%3A%2F%2Fraw.githubusercontent.com%2Fjulep-ai%2Fjulep%2Fdev%2F.github%2Fjulep-logo.svg&owner=1&forks=1&pattern=Solid&stargazers=1&theme=Auto" alt="julep" height=300 />

<br>
  <p>
   <a href="https://www.npmjs.com/package/@julep/sdk"><img src="https://img.shields.io/npm/v/%40julep%2Fsdk?style=social&amp;logo=npm&amp;link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F%40julep%2Fsdk" alt="NPM Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://pypi.org/project/julep"><img src="https://img.shields.io/pypi/v/julep?style=social&amp;logo=python&amp;label=PyPI&amp;link=https%3A%2F%2Fpypi.org%2Fproject%2Fjulep" alt="PyPI - Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://hub.docker.com/u/julepai"><img src="https://img.shields.io/docker/v/julepai/agents-api?sort=semver&amp;style=social&amp;logo=docker&amp;link=https%3A%2F%2Fhub.docker.com%2Fu%2Fjulepai" alt="Docker Image Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://choosealicense.com/licenses/apache/"><img src="https://img.shields.io/github/license/julep-ai/julep" alt="GitHub License" height="28"></a>
  </p>
  
  <h3 align="center">
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow"><img src="https://user-images.githubusercontent.com/74038190/235294015-47144047-25ab-417c-af1b-6746820a20ff.gif" width="60"></a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow"><img src="https://raw.githubusercontent.com/gist/IgnaceMaes/744cd9cf41ec6acf46fc8f4e9f370f86/raw/d16658c2945d30c8a953b35cb17dd7085111b46c/x-logo.svg" width="45"></a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow"><img src="https://user-images.githubusercontent.com/74038190/235294012-0a55e343-37ad-4b0f-924f-c8431d9d2483.gif" width="60"></a>

  </h3>
  
  <!-- <h3>
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow">Discord</a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow">𝕏</a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow">LinkedIn</a>
  </h3> -->
</div>

**Essayez Julep dès aujourd'hui :** Visitez le **[Site Web de Julep](https://julep.ai)** · Commencez sur le **[Tableau de Bord Julep](https://dashboard.julep.ai)** (clé API gratuite) · Lisez la **[Documentation](https://docs.julep.ai/introduction/julep)**

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
<h3>📖 Table des matières</h3>

- [Pourquoi Julep ?](#pourquoi-julep-)
- [Commencer](#commencer)
- [Documentation et exemples](#documentation-et-exemples)
- [Communauté et contributions](#communauté-et-contributions)
- [Licence](#licence)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->


<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## Pourquoi Julep ?

Julep est une plateforme open-source pour construire des **flux de travail d'IA basés sur des agents** qui vont bien au-delà de simples chaînes de prompts. Elle vous permet d'orchestrer des processus complexes en plusieurs étapes avec des modèles de langage de grande taille (LLM) et des outils **sans gérer d'infrastructure**. Avec Julep, vous pouvez créer des agents d'IA qui **se souviennent des interactions passées** et gèrent des tâches sophistiquées avec une logique de branchement, des boucles, une exécution parallèle et l'intégration d'APIs externes. En bref, Julep agit comme un *"Firebase pour les agents d'IA,"* fournissant un backend robuste pour les flux de travail intelligents à grande échelle.

**Caractéristiques clés et avantages :**

* **Mémoire persistante :** Construisez des agents d'IA qui maintiennent le contexte et la mémoire à long terme à travers les conversations, afin qu'ils puissent apprendre et s'améliorer au fil du temps.
* **Flux de travail modulaires :** Définissez des tâches complexes comme des étapes modulaires (en YAML ou code) avec une logique conditionnelle, des boucles et la gestion d'erreurs. Le moteur de flux de travail de Julep gère automatiquement les processus multi-étapes et les décisions.
* **Orchestration d'outils :** Intégrez facilement des outils externes et des APIs (recherche web, bases de données, services tiers, etc.) dans la boîte à outils de votre agent. Les agents de Julep peuvent invoquer ces outils pour augmenter leurs capacités, permettant la génération augmentée par récupération et plus.
* **Parallèle et extensible :** Exécutez plusieurs opérations en parallèle pour l'efficacité, et laissez Julep gérer la mise à l'échelle et la concurrence en arrière-plan. La plateforme est sans serveur, donc elle met à l'échelle les flux de travail de manière transparente sans surcharge DevOps supplémentaire.
* **Exécution fiable :** Ne vous inquiétez pas des problèmes - Julep fournit des réessais intégrés, des étapes d'auto-guérison et une gestion d'erreurs robuste pour maintenir les tâches de longue durée sur la bonne voie. Vous obtenez également une surveillance et une journalisation en temps réel pour suivre les progrès.
* **Intégration facile :** Commencez rapidement avec nos SDKs pour **Python** et **Node.js**, ou utilisez le CLI Julep pour les scripts. L'API REST de Julep est disponible si vous voulez intégrer directement dans d'autres systèmes.

*Concentrez-vous sur votre logique et créativité d'IA, pendant que Julep s'occupe du gros travail !* <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/2c0eef4b-7b75-42bd-9722-4bea97a2d532" width="20">

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## Commencer
<p>
    <a href="https://dashboard.julep.ai">
      <img src="https://img.shields.io/badge/Get_API_Key-FF5733?style=logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAxTDMgNXYxNGw5IDQgOS00VjVsLTktNHptMCAyLjh2MTYuNEw1IDE2LjJWNi44bDctMy4yem0yIDguMmwtMi0yLTIgMiAyIDIgMi0yeiIvPjwvc3ZnPg==" alt="Obtenir la clé API" height="28">
    </a>
    <span>&nbsp;</span>
    <a href="https://docs.julep.ai">
      <img src="https://img.shields.io/badge/Documentation-4B32C3?style=logo=gitbook&logoColor=white" alt="Documentation" height="28">
    </a>
  </p>
Démarrer avec Julep est simple :

1. **Inscription et clé API :** D'abord, inscrivez-vous sur le [Tableau de Bord Julep](https://dashboard.julep.ai) pour obtenir votre clé API (nécessaire pour authentifier vos appels SDK).
2. **Installer le SDK :** Installez le SDK Julep pour votre langage préféré :

   * <img src="https://user-images.githubusercontent.com/74038190/212257472-08e52665-c503-4bd9-aa20-f5a4dae769b5.gif" width="20"> **Python :** `pip install julep`
   * <img src="https://user-images.githubusercontent.com/74038190/212257454-16e3712e-945a-4ca2-b238-408ad0bf87e6.gif" width="20"> **Node.js :** `npm install @julep/sdk` (ou `yarn add @julep/sdk`)
3. **Définir votre agent :** Utilisez le SDK ou YAML pour définir un agent et son flux de travail de tâches. Par exemple, vous pouvez spécifier la mémoire de l'agent, les outils qu'il peut utiliser, et une logique de tâche étape par étape. (Voir le **[Guide de démarrage rapide](https://docs.julep.ai/introduction/quick-start)** dans notre documentation pour une procédure détaillée.)
4. **Exécuter un flux de travail :** Invoquez votre agent via le SDK pour exécuter la tâche. La plateforme Julep orchestrera l'ensemble du flux de travail dans le cloud et gérera l'état, les appels d'outils et les interactions LLM pour vous. Vous pouvez vérifier la sortie de l'agent, surveiller l'exécution sur le tableau de bord, et itérer selon les besoins.

C'est tout ! Votre premier agent d'IA peut être opérationnel en quelques minutes. Pour un tutoriel complet, consultez le **[Guide de démarrage rapide](https://docs.julep.ai/introduction/quick-start)** dans la documentation.

> **Note :** Julep offre également une interface en ligne de commande (CLI) (actuellement en bêta pour Python) pour gérer les flux de travail et les agents. Si vous préférez une approche sans code ou voulez scripter des tâches communes, voir les [documents CLI Julep](https://docs.julep.ai/responses/quickstart#cli-installation) pour plus de détails.

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## Documentation et exemples


Vous voulez plonger plus profondément ? La **[Documentation Julep](https://docs.julep.ai)** couvre tout ce dont vous avez besoin pour maîtriser la plateforme - des concepts fondamentaux (Agents, Tâches, Sessions, Outils) aux sujets avancés comme la gestion de la mémoire des agents et les éléments internes de l'architecture. Les ressources clés incluent :

* **[Guides de concepts](https://docs.julep.ai/concepts/) :** Apprenez sur l'architecture de Julep, comment fonctionnent les sessions et la mémoire, l'utilisation d'outils, la gestion de longues conversations, et plus.
* **[Référence API et SDK](https://docs.julep.ai/api-reference/) :** Trouvez une référence détaillée pour toutes les méthodes SDK et les points de terminaison de l'API REST pour intégrer Julep dans vos applications.
* **[Tutoriels](https://docs.julep.ai/tutorials/) :** Guides étape par étape pour construire des applications réelles (ex. un agent de recherche qui parcourt le web, un assistant de planification de voyage, ou un chatbot avec des connaissances personnalisées).
* **[Recettes de livre de cuisine](https://github.com/julep-ai/julep/tree/dev/cookbooks) :** Explorez le **Livre de cuisine Julep** pour des exemples de flux de travail et d'agents prêts à l'emploi. Ces recettes démontrent des modèles communs et des cas d'usage - un excellent moyen d'apprendre par l'exemple. *Parcourez le répertoire [`cookbooks/`](https://github.com/julep-ai/julep/tree/dev/cookbooks) dans ce dépôt pour des définitions d'agents d'exemple.*
* **[Intégration IDE](https://context7.com/julep-ai/julep) :** Accédez à la documentation Julep directement dans votre IDE ! Parfait pour obtenir des réponses instantanées pendant que vous codez.

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## Communauté et contributions

Rejoignez notre communauté grandissante de développeurs et d'enthousiastes de l'IA ! Voici quelques façons de s'impliquer et d'obtenir du soutien :

* **Communauté Discord :** Vous avez des questions ou des idées ? Rejoignez la conversation sur notre [serveur Discord officiel](https://discord.gg/7H5peSN9QP) pour discuter avec l'équipe Julep et d'autres utilisateurs. Nous sommes heureux d'aider avec le dépannage ou de réfléchir à de nouveaux cas d'usage.
* **Discussions et issues GitHub :** N'hésitez pas à utiliser GitHub pour signaler des bugs, demander des fonctionnalités, ou discuter des détails d'implémentation. Consultez les [**bonnes premières issues**](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) si vous souhaitez contribuer - nous accueillons les contributions de toutes sortes.
* **Contribuer :** Si vous voulez contribuer du code ou des améliorations, veuillez voir notre [Guide de contribution](CONTRIBUTING.md) pour comment commencer. Nous apprécions toutes les PR et les retours. En collaborant, nous pouvons rendre Julep encore meilleur !

*Conseil de pro : <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/e379a33a-b428-4385-b44f-3da16e7bac9f" width="35"> Mettez une étoile à notre dépôt pour rester à jour - nous ajoutons constamment de nouvelles fonctionnalités et exemples.*    

<br/>

Vos contributions, grandes ou petites, nous sont précieuses. Construisons quelque chose d'incroyable ensemble !    <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/2c0eef4b-7b75-42bd-9722-4bea97a2d532" width="20">
 <img src="https://user-images.githubusercontent.com/74038190/216125640-2783ebd5-e63e-4ed1-b491-627a40b24850.png" width="20">

<h4>Nos contributeurs extraordinaires :</h4>

<a href="https://github.com/julep-ai/julep/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=julep-ai/julep" />
</a>

<br/>

## Licence

Julep est offert sous la **Licence Apache 2.0**, ce qui signifie qu'il est libre d'utilisation dans vos propres projets. Voir le fichier [LICENSE](LICENSE) pour plus de détails. Amusez-vous à construire avec Julep !

================================================
FILE: .github/README-JA.md
================================================
<sup><div align="center">
  <!-- Keep these links. Translations will automatically update with the README. -->
  [Deutsch](https://www.readme-i18n.com/julep-ai/julep?lang=de) | 
  [Español](https://www.readme-i18n.com/julep-ai/julep?lang=es) | 
  [français](https://www.readme-i18n.com/julep-ai/julep?lang=fr) | 
  [日本語](https://www.readme-i18n.com/julep-ai/julep?lang=ja) | 
  [한국어](https://www.readme-i18n.com/julep-ai/julep?lang=ko) | 
  [Português](https://www.readme-i18n.com/julep-ai/julep?lang=pt) | 
  [Русский](https://www.readme-i18n.com/julep-ai/julep?lang=ru) | 
  [中文](https://www.readme-i18n.com/julep-ai/julep?lang=zh)
</div></sup>

<div align="center" id="top">
<img src="https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable=Serverless%20AI%20Workflows%20for%20Data%20%26%20ML%20Teams&font=Source%20Code%20Pro&logo=https%3A%2F%2Fraw.githubusercontent.com%2Fjulep-ai%2Fjulep%2Fdev%2F.github%2Fjulep-logo.svg&owner=1&forks=1&pattern=Solid&stargazers=1&theme=Auto" alt="julep" height=300 />

<br>
  <p>
   <a href="https://www.npmjs.com/package/@julep/sdk"><img src="https://img.shields.io/npm/v/%40julep%2Fsdk?style=social&amp;logo=npm&amp;link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F%40julep%2Fsdk" alt="NPM Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://pypi.org/project/julep"><img src="https://img.shields.io/pypi/v/julep?style=social&amp;logo=python&amp;label=PyPI&amp;link=https%3A%2F%2Fpypi.org%2Fproject%2Fjulep" alt="PyPI - Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://hub.docker.com/u/julepai"><img src="https://img.shields.io/docker/v/julepai/agents-api?sort=semver&amp;style=social&amp;logo=docker&amp;link=https%3A%2F%2Fhub.docker.com%2Fu%2Fjulepai" alt="Docker Image Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://choosealicense.com/licenses/apache/"><img src="https://img.shields.io/github/license/julep-ai/julep" alt="GitHub License" height="28"></a>
  </p>
  
  <h3 align="center">
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow"><img src="https://user-images.githubusercontent.com/74038190/235294015-47144047-25ab-417c-af1b-6746820a20ff.gif" width="60"></a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow"><img src="https://raw.githubusercontent.com/gist/IgnaceMaes/744cd9cf41ec6acf46fc8f4e9f370f86/raw/d16658c2945d30c8a953b35cb17dd7085111b46c/x-logo.svg" width="45"></a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow"><img src="https://user-images.githubusercontent.com/74038190/235294012-0a55e343-37ad-4b0f-924f-c8431d9d2483.gif" width="60"></a>

  </h3>
  
  <!-- <h3>
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow">Discord</a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow">𝕏</a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow">LinkedIn</a>
  </h3> -->
</div>

**今すぐJulepを試す:** **[Julepウェブサイト](https://julep.ai)** をご覧ください · **[Julepダッシュボード](https://dashboard.julep.ai)** で始める (無料APIキー) · **[ドキュメント](https://docs.julep.ai/introduction/julep)** を読む

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
<h3>📖 目次</h3>

- [なぜJulepなのか?](#なぜjulepなのか)
- [はじめに](#はじめに)
- [ドキュメントと例](#ドキュメントと例)
- [コミュニティと貢献](#コミュニティと貢献)
- [ライセンス](#ライセンス)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->


<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## なぜJulepなのか?

Julepは、単純なプロンプトのチェーンをはるかに超えた**エージェントベースのAIワークフロー**を構築するためのオープンソースプラットフォームです。大規模言語モデル(LLM)とツールを使用して複雑な多段階プロセスを**インフラストラクチャの管理なしに**オーケストレーションできます。Julepを使用すると、**過去のやり取りを記憶し**、分岐ロジック、ループ、並列実行、外部APIとの統合を備えた洗練されたタスクを処理するAIエージェントを作成できます。要するに、Julepは*「AIエージェントのためのFirebase」*として機能し、スケールでのインテリジェントワークフローのための堅牢なバックエンドを提供します。

**主要機能と利点:**

* **永続メモリ:** 会話を通じてコンテキストと長期記憶を維持するAIエージェントを構築し、時間をかけて学習と改善ができます。
* **モジュラーワークフロー:** 条件ロジック、ループ、エラーハンドリングを備えたモジュラーステップとして複雑なタスクを定義します(YAMLまたはコード)。Julepのワークフローエンジンが多段階プロセスと決定を自動的に管理します。
* **ツールオーケストレーション:** 外部ツールとAPI(Web検索、データベース、サードパーティサービスなど)をエージェントのツールキットの一部として簡単に統合します。Julepのエージェントはこれらのツールを呼び出して機能を拡張し、検索拡張生成などを可能にします。
* **並列・スケーラブル:** 効率性のために複数の操作を並列で実行し、Julepにスケーリングと並行処理を任せます。プラットフォームはサーバーレスなので、追加のDevOpsオーバーヘッドなしにワークフローをシームレスにスケールします。
* **信頼性のある実行:** 不具合を心配する必要はありません - Julepは組み込まれた再試行、自己修復ステップ、堅牢なエラーハンドリングを提供し、長時間実行タスクを軌道に乗せ続けます。また、進捗を追跡するためのリアルタイム監視とログも提供します。
* **簡単な統合:** **Python**と**Node.js**向けのSDK、またはスクリプト用のJulep CLIですぐに始められます。他のシステムに直接統合したい場合は、JulepのREST APIが利用可能です。

*AIロジックと創造性に集中し、重労働はJulepにお任せください!* <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/2c0eef4b-7b75-42bd-9722-4bea97a2d532" width="20">

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## はじめに
<p>
    <a href="https://dashboard.julep.ai">
      <img src="https://img.shields.io/badge/Get_API_Key-FF5733?style=logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAxTDMgNXYxNGw5IDQgOS00VjVsLTktNHptMCAyLjh2MTYuNEw1IDE2LjJWNi44bDctMy4yem0yIDguMmwtMi0yLTIgMiAyIDIgMi0yeiIvPjwvc3ZnPg==" alt="APIキーを取得" height="28">
    </a>
    <span>&nbsp;</span>
    <a href="https://docs.julep.ai">
      <img src="https://img.shields.io/badge/Documentation-4B32C3?style=logo=gitbook&logoColor=white" alt="ドキュメント" height="28">
    </a>
  </p>
Julepの起動と実行は簡単です:

1. **サインアップとAPIキー:** まず、[Julepダッシュボード](https://dashboard.julep.ai)にサインアップしてAPIキーを取得します(SDK呼び出しの認証に必要)。
2. **SDKのインストール:** お好みの言語でJulep SDKをインストールします:

   * <img src="https://user-images.githubusercontent.com/74038190/212257472-08e52665-c503-4bd9-aa20-f5a4dae769b5.gif" width="20"> **Python:** `pip install julep`
   * <img src="https://user-images.githubusercontent.com/74038190/212257454-16e3712e-945a-4ca2-b238-408ad0bf87e6.gif" width="20"> **Node.js:** `npm install @julep/sdk` (または `yarn add @julep/sdk`)
3. **エージェントの定義:** SDKまたはYAMLを使用してエージェントとそのタスクワークフローを定義します。例えば、エージェントのメモリ、使用できるツール、ステップバイステップのタスクロジックを指定できます。(詳細なウォークスルーについては、ドキュメントの**[クイックスタート](https://docs.julep.ai/introduction/quick-start)**を参照してください。)
4. **ワークフローの実行:** SDKを通じてエージェントを呼び出してタスクを実行します。Julepプラットフォームがクラウドでワークフロー全体をオーケストレーションし、状態、ツール呼び出し、LLMインタラクションを管理します。エージェントの出力を確認し、ダッシュボードで実行を監視し、必要に応じて反復できます。

これで完了です!最初のAIエージェントを数分で起動して実行できます。完全なチュートリアルについては、ドキュメント内の**[クイックスタートガイド](https://docs.julep.ai/introduction/quick-start)**をご確認ください。

> **注意:** Julepはワークフローとエージェントを管理するためのコマンドラインインターface(CLI)も提供しています(現在Pythonのベータ版)。ノーコードアプローチを好む場合や一般的なタスクをスクリプト化したい場合は、詳細について[Julep CLIドキュメント](https://docs.julep.ai/responses/quickstart#cli-installation)を参照してください。

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## ドキュメントと例


さらに深く学びたいですか?**[Julepドキュメント](https://docs.julep.ai)**は、コアコンセプト(エージェント、タスク、セッション、ツール)から高度なトピック(エージェントメモリ管理やアーキテクチャの内部構造)まで、プラットフォームを習得するために必要なすべてをカバーしています。主要なリソースには以下があります:

* **[コンセプトガイド](https://docs.julep.ai/concepts/):** Julepのアーキテクチャ、セッションとメモリの仕組み、ツールの使用、長い会話の管理などについて学びます。
* **[API・SDK リファレンス](https://docs.julep.ai/api-reference/):** JulepをアプリケーションNに統合するためのすべてのSDKメソッドとREST APIエンドポイントの詳細なリファレンスを見つけます。
* **[チュートリアル](https://docs.julep.ai/tutorials/):** 実際のアプリケーション構築のためのステップバイステップガイド(例:Webを検索するリサーチエージェント、旅行計画アシスタント、カスタム知識を持つチャットボット)。
* **[クックブックレシピ](https://github.com/julep-ai/julep/tree/dev/cookbooks):** 既製のワークフローとエージェントの例については**Julep Cookbook**を探索してください。これらのレシピは一般的なパターンと使用例を示しています - 例から学ぶ素晴らしい方法です。*サンプルエージェント定義については、このリポジトリの[`cookbooks/`](https://github.com/julep-ai/julep/tree/dev/cookbooks)ディレクトリを参照してください。*
* **[IDE統合](https://context7.com/julep-ai/julep):** IDE内でJulepドキュメントに直接アクセス!コーディング中に即座に答えを得るのに最適です。

<img src="https://raw.githubusercontent.com/anasalatasiuni/gif/main/white-line.gif">

## コミュニティと貢献

成長する開発者とAI愛好家のコミュニティに参加しましょう!参加とサポートを得る方法をいくつか紹介します:

* **Discordコミュニティ:** 質問やアイデアがありますか?[公式Discordサーバー](https://discord.gg/7H5peSN9QP)での会話に参加して、Julepチームや他のユーザーとチャットしましょう。トラブルシューティングのお手伝いや新しい使用例のブレインストーミングを喜んでサポートします。
* **GitHub ディスカッションとイシュー:** バグ報告、機能要求、実装詳細の議論には、GitHubを自由にご利用ください。貢献したい場合は[**good first issues**](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)をチェックしてください - あらゆる種類の貢献を歓迎します。
* **貢献:** コードや改善を貢献したい場合は、始め方について[貢献ガイド](CONTRIBUTING.md)を参照してください。すべてのPRとフィードバックを感謝します。協力することで、Julepをさらに良くすることができます!

*プロのヒント: <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/e379a33a-b428-4385-b44f-3da16e7bac9f" width="35"> リポジトリにスターを付けて最新情報を入手してください - 新機能と例を継続的に追加しています。*    

<br/>

あなたの貢献は、大きいものも小さいものも、私たちにとって価値があります。一緒に素晴らしいものを構築しましょう!    <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/2c0eef4b-7b75-42bd-9722-4bea97a2d532" width="20">
 <img src="https://user-images.githubusercontent.com/74038190/216125640-2783ebd5-e63e-4ed1-b491-627a40b24850.png" width="20">

<h4>素晴らしい貢献者たち:</h4>

<a href="https://github.com/julep-ai/julep/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=julep-ai/julep" />
</a>

<br/>

## ライセンス

Julepは**Apache 2.0ライセンス**の下で提供されており、これは自分のプロジェクトで自由に使用できることを意味します。詳細については[LICENSE](LICENSE)ファイルを参照してください。Julepでの構築をお楽しみください!

================================================
FILE: .github/SUPPORT.md
================================================
# Support for Julep

Welcome to the Julep support page! We're here to help you with any questions or issues you may encounter while using our platform. This document outlines the various ways you can get support and engage with our community.

## Getting Help

### Documentation

Our comprehensive documentation is the first place to look for answers:

- [Explore Docs](https://docs.julep.ai)

Here you'll find detailed guides, API references, and tutorials to help you make the most of Julep.

### Community Support

Join our vibrant community to get help from other users and the Julep team:

- [Discord](https://discord.com/invite/JTSBGRZrzj): Join our Discord server to ask questions, share ideas, and discuss Julep with other developers.
- [GitHub](https://github.com/julep-ai/julep): Report issues and feature requests.

### Social Media

Follow us on social media for updates, tips, and community highlights:

- [𝕏 (Twitter)](https://x.com/julep_ai)
- [LinkedIn](https://www.linkedin.com/company/julep-ai)

## Reporting Issues

If you encounter a bug or have a feature request, please open an issue on our GitHub repository:

- [GitHub Issues](https://github.com/julep-ai/julep/issues)

When reporting issues, please provide as much detail as possible, including:

- Steps to reproduce the issue
- Expected behavior
- Actual behavior
- Any error messages or logs
- Your environment (Julep version, operating system, etc.)

## Contributing

We welcome contributions to Julep! If you're interested in contributing, please check out our:

- [Contributing Guidelines](https://github.com/julep-ai/julep/blob/dev/.github/CONTRIBUTING.md)
- [Code of Conduct](https://github.com/julep-ai/julep/blob/main/.github/CODE_OF_CONDUCT.md)

## API Keys

While we are in beta, you can reach out on [Discord](https://discord.com/invite/JTSBGRZrzj) to get your API key.

## Staying Updated

To stay informed about the latest updates, features, and community news:

- Watch our [GitHub repository](https://github.com/julep-ai/julep)
- Follow us on [𝕏 (Twitter)](https://x.com/julep_ai)
- Join our [Discord](https://discord.com/invite/JTSBGRZrzj) for announcements

Thank you for using Julep! We're excited to see what you build with our platform.


================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
  - package-ecosystem: "" # See documentation for possible values
    directory: "/" # Location of package manifests
    schedule:
      interval: "weekly"


================================================
FILE: .github/workflows/bake-push-to-hub.yml
================================================
name: Build and push images to docker hub on merge to dev
run-name: ${{ github.actor }} is building and pushing images to docker hub

on:
  push:
    branches:
      - "dev"
    tags:
      - "v*"
  release:
    types: [published, released, prereleased]
    
jobs:
  Bake-Push-Images:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: julepai
          password: "${{ secrets.DOCKER_HUB_PASSWORD }}"

      - name: Build and push agent images
        uses: docker/bake-action@v5
        with:
          files: |
            ./docker-bake.hcl
          targets: agents-api
          push: true
          set: |
            *.cache-from=type=gha
            *.cache-to=type=gha,mode=max
        env:
          TAG: ${{ github.ref_name }}
          GIT_SHA: ${{ github.sha }}

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true


================================================
FILE: .github/workflows/bandit-security-check-python-agents-api.yml
================================================
name: Bandit security check python agents-api
run-name: ${{ github.actor }} is checking the security of the code

on:
  workflow_dispatch:
  pull_request:
    paths:
      - 'src/agents-api/**'
  push:
    paths:
      - 'src/agents-api/**'

jobs:
  bandit_check:
    name: bandit check security of python code in agents-api
    runs-on: ubuntu-latest

    steps:
    - name: Check out repository
      uses: actions/checkout@v4

    - name: Run Bandit scan
      uses: PyCQA/bandit-action@v1
      with:
        targets: "./src/agents-api/agents_api"
        confidence: high
        severity: high


================================================
FILE: .github/workflows/changelog-ci.yml
================================================
name: Changelog on release

on:
  release:
    types: [published]

jobs:
  changelog:
    runs-on: ubuntu-latest

    steps:
      # Checks-out your repository
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: dev

      # Generate changelog from release notes
      - uses: rhysd/changelog-from-release/action@v3
        with:
          file: CHANGELOG.md
          github_token: ${{ secrets.GITHUB_TOKEN }}
          pull_request: true
      

================================================
FILE: .github/workflows/changelog-sync.yml
================================================
name: Sync changelog with Blot

on:
  pull_request:
    types: [opened, synchronize, reopened]
    paths: ["changelog/**"]
  push:
    branches:
      - main
      - dev
    paths:
      - "changelog/**"
  workflow_run:
       workflows: ["Claude Changelog (PR)"]
       types: [completed]
  workflow_dispatch:

jobs:
  sync:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repo
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Configure git identity
      run: |
        git config --global user.name  "${{ secrets.BLOT_GIT_USERNAME }}"
        git config --global user.email "${{ secrets.BLOT_GIT_USERNAME }}"

    - name: Clone Blot repo
      env:
        BLOT_USERNAME: ${{ secrets.BLOT_GIT_USERNAME }}
        BLOT_PASSWORD: ${{ secrets.BLOT_GIT_PASSWORD }}
      run: |
        # URL-encode the username (replace @ with %40)
        export ENCODED_USERNAME=${BLOT_USERNAME//@/%40}

        # Clone into a directory outside the current git repo to avoid conflicts
        cd ${{ runner.temp }}
        
        if ! git clone \
          "https://${ENCODED_USERNAME}:${BLOT_PASSWORD}@blot.im/clients/git/end/julepchangelog.git" ; then
          echo "Error: Failed to clone Blot repository"
          exit 1
        fi

        # Get the default branch and ensure we're on it
        cd julepchangelog
        git checkout -B master origin/master
        cd ${{ github.workspace }}

    - name: Copy updated files into Blot working tree
      run: |
        if [ ! -d "changelog" ]; then
          echo "Error: changelog directory not found"
          exit 1
        fi

        if ! rsync -a --delete --exclude='.git/' --exclude='.gitignore' changelog/ ${{ runner.temp }}/julepchangelog/; then
          echo "Error: Failed to sync files"
          exit 1
        fi

    - name: Commit & push if there are changes
      env:
        BLOT_USERNAME: ${{ secrets.BLOT_GIT_USERNAME }}
        BLOT_PASSWORD: ${{ secrets.BLOT_GIT_PASSWORD }}
      run: |
        cd ${{ runner.temp }}/julepchangelog
        
        if [ -z "$(git status --porcelain)" ]; then
         echo "No changes to publish"
         exit 0
        fi

        if ! git add -A; then
          echo "Error: Failed to stage changes"
          exit 1
        fi

        if ! git commit -m "chore: publish updates"; then
          echo "Error: Failed to commit changes"
          exit 1
        fi

        # URL-encode the username (replace @ with %40)
        export ENCODED_USERNAME=${BLOT_USERNAME//@/%40}
        
        if ! git push "https://${ENCODED_USERNAME}:${BLOT_PASSWORD}@blot.im/clients/git/end/julepchangelog.git" master; then
          echo "Error: Failed to push changes to branch master"
          exit 1
        fi

        echo "Successfully synced changelog to Blot"



================================================
FILE: .github/workflows/claude-changelog-pr.yml
================================================
name: Claude Changelog (PR)

on:
  pull_request:
    branches: [main, dev]
    types: [opened, synchronize, reopened]
    paths-ignore:
      - "changelog/**"

jobs:
  changelog:
    name: Update Changelog
    runs-on: ubuntu-latest
    if: ${{ github.event.sender.login != 'github-actions[bot]' && github.event.pull_request.user.login != 'claude-doc-bot' && contains(github.event.pull_request.title, '[skip-claude]') == false }}
    permissions:
      contents: write
      pull-requests: write
      issues: write
      actions: read
      id-token: write

    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
          role-session-name: GitHubActions-Claude-Changelog-${{ github.run_id }}
          aws-region: us-east-1

      - name: Save PR patch
        run: gh pr diff ${{ github.event.pull_request.number }} --patch > diff.patch
        env:
          GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

      - name: Set changelog directory
        id: set_cl_dir
        run: |
          if [[ "${{ github.event.pull_request.base.ref }}" == "dev" ]]; then
            echo "CHANGELOG_DIR=changelog/dev" >> "$GITHUB_ENV"
            echo "CHANGELOG_TAG=dev" >> "$GITHUB_ENV"
          else
            echo "CHANGELOG_DIR=changelog/main" >> "$GITHUB_ENV"
            echo "CHANGELOG_TAG=main" >> "$GITHUB_ENV"
          fi

      - name: Claude updates changelog & home summary
        uses: anthropics/claude-code-action@v1
        with:
          use_bedrock: "true"
          track_progress: true
          github_token: ${{ secrets.GITHUB_TOKEN }}
          claude_args: |
            --model us.anthropic.claude-sonnet-4-20250514-v1:0
            --max-turns 5
            --allowedTools Read,Edit,MultiEdit
          prompt: |
            REPO: ${{ github.repository }}
            PR NUMBER: ${{ github.event.pull_request.number }}
            
            You are the team's *changelog* bot. Follow these rules strictly:

            1. Read the unified diff in *diff.patch*.
            2. Decide if the patch introduces any user-visible change (new feature, behaviour change, deprecation, bug fix).  
               • If **no user-visible change** – *do nothing*: exit without writing, committing, or replying.
            3. If **yes**:
               a. **Create or update** file in *${{ env.CHANGELOG_DIR }}* named `{YYYY}-{MM}-{DD}.md` with a concise bullet list of the changes.
                  • Begin each bullet with a past-tense verb (e.g. "Added", "Fixed").
                  • Keep bullets short (< 100 chars).
                  • Ensure the file contains YAML front-matter:
                    ```
                    ---
                    title: "Julep AI Changelog"
                    date:  {YYYY}-{MM}-{DD}
                    tags: [${{ env.CHANGELOG_TAG }}]
                    ---
                    ```
               b. **Update** `Templates/index-template/home-summary.html` so the home page shows the newest entry's title, date and bullet list (only if the PR is on main).
            4. Finally, stage, commit and push the edits with a clear message.


================================================
FILE: .github/workflows/claude-code-review.yml
================================================
name: Claude Code Review

on:
  pull_request:
    types: [opened, synchronize]
    # Optional: Only run on specific file changes
    # paths:
    #   - "src/**/*.ts"
    #   - "src/**/*.tsx"
    #   - "src/**/*.js"
    #   - "src/**/*.jsx"

jobs:
  claude-review:
    # Optional: Filter by PR author
    # if: |
    #   github.event.pull_request.user.login == 'external-contributor' ||
    #   github.event.pull_request.user.login == 'new-developer' ||
    #   github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
    
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: read
      issues: read
      actions: read
      id-token: write
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
          role-session-name: GitHubActions-Claude-${{ github.run_id }}
          aws-region: us-east-1

      - name: Run Claude Code Review
        id: claude-review
        uses: anthropics/claude-code-action@v1
        with:
          use_bedrock: "true"
          prompt: |
            REPO: ${{ github.repository }}
            PR NUMBER: ${{ github.event.pull_request.number }}
            
            This is a monorepo with multiple different services.
            The repo uses AGENTS.md as the file that contains instructions for
            AI agents (instead of CLAUDE.md files). CLAUDE.md still exists but is just a symlink to the corresponding AGENTS.md (usually in the same dir).
            Please review this pull request and provide feedback on:
            - Code quality and best practices
            - Potential bugs or issues
            - Performance considerations
            - Security concerns
            - Test coverage
            
            Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.

            Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
          
          # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
          # or https://docs.anthropic.com/en/docs/claude-code/sdk#command-line for available options
          claude_args: |
            --model us.anthropic.claude-opus-4-1-20250805-v1:0
            --allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"



================================================
FILE: .github/workflows/claude-docs-manual.yml
================================================
name: Claude Docs (Manual)

on:
  workflow_dispatch:
    inputs:
      pr_number:
        description: "PR number"
        required: true

jobs:
  update-docs:
    name: Manual Doc Update
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
      actions: read
      id-token: write

    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
          role-session-name: GitHubActions-Claude-Docs-${{ github.run_id }}
          aws-region: us-east-1

      - name: Save PR patch
        run: gh pr diff ${{ github.event.inputs.pr_number }} --patch > diff.patch
        env: 
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Determine PR base branch
        id: pr_base
        run: |
          base=$(gh pr view ${{ github.event.inputs.pr_number }} --json baseRefName -q .baseRefName)
          echo "BASE_BRANCH=$base" >> "$GITHUB_OUTPUT"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Set changelog directory
        id: set_cl_dir
        run: |
          if [[ "${{ steps.pr_base.outputs.BASE_BRANCH }}" == "dev" ]]; then
            echo "CHANGELOG_DIR=changelog/dev" >> "$GITHUB_ENV"
            echo "CHANGELOG_TAG=dev" >> "$GITHUB_ENV"
          else
            echo "CHANGELOG_DIR=changelog/main" >> "$GITHUB_ENV"
            echo "CHANGELOG_TAG=main" >> "$GITHUB_ENV"
          fi

      - name: Claude changes docs
        uses: anthropics/claude-code-action@v1
        with:
          use_bedrock: "true"
          track_progress: true
          github_token: ${{ secrets.GITHUB_TOKEN }}
          claude_args: |
            --model us.anthropic.claude-sonnet-4-20250514-v1:0
            --max-turns 10
            --allowedTools Read,Edit,MultiEdit,Write
          prompt: |
            REPO: ${{ github.repository }}
            PR NUMBER: ${{ github.event.inputs.pr_number }}
            
            You are the team's documentation bot.  
            1. Read *diff.patch*.  
            2. For any change that affects users:
              1. **edit** files under *documentation/***  
               (Mintlify structure) so docs stay accurate.
              2. **create** new file in *${{ env.CHANGELOG_DIR }}***
                named `{YYYY}-{MM}-{DD}.md`** containing a bulleted list 
                of the changes (don't include unnecessary details).
                - File front-matter:
                  ```
                  ---
                  title: "Julep AI Changelog – {human-readable-date}"
                  date:  {YYYY}-{MM}-{DD}
                  tags: [${{ env.CHANGELOG_TAG }}]
                  ---
                  ```  
               - If the file already exists, append to its bullet list.
              3. **update** `Templates/index-template/home-summary.html` so the home page summarises the latest entry from the changelog (same title/date and bullet list).  
            3. Commit the edits.  
            If diff.patch has no user-visible change, do nothing.
            4. Finally, stage, commit and push the edits with a clear message.
            
            Note: AGENTS.md replaces CLAUDE.md (CLAUDE.md is a symlink).


================================================
FILE: .github/workflows/claude-docs-pr.yml
================================================
name: Claude Docs (PR)

on:
  pull_request:
    branches: [main]
    types: [opened, synchronize, reopened]
    paths-ignore:
      - "changelog/**"

jobs:
  docs-gate:
    name: Documentation Gate
    runs-on: ubuntu-latest

    if: ${{ github.event.sender.login != 'github-actions[bot]' && github.event.pull_request.user.login != 'claude-doc-bot' && contains(github.event.pull_request.title, '[skip-claude]') == false }}

    outputs:
      pr_number:     ${{ steps.resolve.outputs.number }}
      should_update: ${{ steps.gate.outputs.result }}

    permissions:
      contents: read
      pull-requests: read
      actions: read
      id-token: write

    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
          role-session-name: GitHubActions-Claude-DocsGate-${{ github.run_id }}
          aws-region: us-east-1

      - name: PR number
        id: resolve
        run: echo "number=${{ github.event.pull_request.number }}" >> "$GITHUB_OUTPUT"

      - name: Save PR patch
        run: gh pr diff ${{ steps.resolve.outputs.number }} --patch > diff.patch
        env: 
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Gate
        id: gate
        uses: anthropics/claude-code-action@v1
        with:
          use_bedrock: "true"
          track_progress: true
          github_token: ${{ secrets.GITHUB_TOKEN }}
          claude_args: |
            --model us.anthropic.claude-sonnet-4-20250514-v1:0
            --max-turns 2
            --allowedTools Read
          prompt: |
            REPO: ${{ github.repository }}
            PR NUMBER: ${{ github.event.pull_request.number }}
            
            You are a senior technical-writer.  
            Read *diff.patch* (unified diff).  
            Reply with the single word **UPDATE** if the patch
            a) adds new user-visible functionality,
            b) changes or removes existing behaviour,
            c) deprecates anything,  
            otherwise reply **SKIP**.

  update-docs:
    name: Update Documentation
    needs: docs-gate
    if: ${{ github.event.sender.login != 'github-actions[bot]' &&
            needs.docs-gate.result == 'success' &&
            needs.docs-gate.outputs.should_update == 'UPDATE' }}
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
      actions: read
      id-token: write

    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
          role-session-name: GitHubActions-Claude-DocsUpdate-${{ github.run_id }}
          aws-region: us-east-1

      - name: Save PR patch
        run: gh pr diff ${{ needs.docs-gate.outputs.pr_number }} --patch > diff.patch
        env: 
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Claude changes docs
        uses: anthropics/claude-code-action@v1
        with:
          use_bedrock: "true"
          track_progress: true
          github_token: ${{ secrets.GITHUB_TOKEN }}
          claude_args: |
            --model us.anthropic.claude-opus-4-1-20250805-v1:0
            --max-turns 10
            --allowedTools Read,Edit,MultiEdit
          prompt: |
            REPO: ${{ github.repository }}
            PR NUMBER: ${{ needs.docs-gate.outputs.pr_number }}
            
            You are the team's documentation bot.  
            1. Read *diff.patch*.  
            2. For any change that affects users, **edit** files under *documentation/***  
               (Mintlify structure) so docs stay accurate.
            3. Commit the edits.  
            If diff.patch has no user-visible change, do nothing.
            4. Finally, stage, commit and push the edits with a clear message.
            
            Note: AGENTS.md replaces CLAUDE.md (CLAUDE.md is a symlink).


================================================
FILE: .github/workflows/claude.yml
================================================
name: Claude Code

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, assigned]
  pull_request_review:
    types: [submitted]

jobs:
  claude:
    if: |
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: read
      issues: read
      id-token: write
      actions: read # Required for Claude to read CI results on PRs
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
          role-session-name: GitHubActions-Claude-${{ github.run_id }}
          aws-region: us-east-1

      - name: Run Claude Code
        id: claude
        uses: anthropics/claude-code-action@v1
        with:
          use_bedrock: "true"
          
          # This is an optional setting that allows Claude to read CI results on PRs
          additional_permissions: |
            actions: read

          # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
          # prompt: 'Update the pull request description to include a summary of changes.'

          # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
          # or https://docs.anthropic.com/en/docs/claude-code/sdk#command-line for available options
          claude_args: |
            --model us.anthropic.claude-opus-4-1-20250805-v1:0
            --allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"



================================================
FILE: .github/workflows/docker-bake-on-pr.yml
================================================
name: Bake images on PR
run-name: ${{ github.actor }} is baking images

on:
  pull_request:

jobs:
  Bake-Images:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: julepai
          password: "${{ secrets.DOCKER_HUB_PASSWORD }}"

      - name: Bake images
        uses: docker/bake-action@v5
        with:
          files: |
            ./docker-bake.hcl
          targets: agents-api
          push: false
          set: |
            *.cache-from=type=gha
            *.cache-to=type=gha,mode=max
        env:
          TAG: pr-run-${{ github.run_number }}-${{ github.run_attempt }}
          GIT_SHA: ${{ github.sha }}

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}


================================================
FILE: .github/workflows/doctoc-on-push.yml
================================================
on: push

name: TOC Generator
jobs:
  generateTOC:
    name: TOC Generator
    runs-on: ubuntu-latest
    steps:
      - uses: technote-space/toc-generator@v4
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          MAX_HEADER_LEVEL: 3
          TOC_TITLE: '<h3>📖 Table of Contents</h3>'
          FOLDING: false
          CREATE_PR: true
          CHECK_ONLY_DEFAULT_BRANCH: true


================================================
FILE: .github/workflows/generate-changelog.yml
================================================
name: Julep Changelog Generation
run-name: ${{ github.actor }} is generating changelog for the last two weeks using Julep

on:
  workflow_dispatch:

jobs:
  changelog_generation:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: dev

      - name: Setup GitHub CLI
        run: |
          echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token

      - name: Collect merged PRs from the last two weeks
        id: collect_prs
        run: |
          date_threshold=$(date -d '-14 days' +"%Y-%m-%d")

          echo "Fetching merged PRs since $date_threshold..."

          merged_prs=$(
            gh pr list --state merged --json number,title,body,author \
              --search "merged:>=$date_threshold" \
              --jq 'map({number, title, body, author: .author.login})'
          )

          if [ -z "$merged_prs" ] || [ "$merged_prs" = "null" ]; then
            echo "No merged PRs found in the last two weeks."
            echo "has_prs=false" >> $GITHUB_OUTPUT
            exit 0
          fi

          echo "$merged_prs" > pr_data.json
          echo "has_prs=true" >> $GITHUB_OUTPUT

      - name: Setup Python v3.10.12
        uses: actions/setup-python@v5
        with:
          python-version: "3.10.12"

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          python -m pip install PyYAML julep

      - name: Send PR data to Python script
        if: steps.collect_prs.outputs.has_prs == 'true'
        id: generate_changelog
        run: |
          if ! python src/scripts/generate_changelog.py; then
            echo "Error: Failed to generate changelog"
            exit 1
          fi
        env:
          JULEP_API_KEY: ${{ secrets.JULEP_API_KEY }}
          TASK_UUID: ${{ secrets.TASK_UUID }}
          AGENT_UUID: ${{ secrets.AGENT_UUID }}

      - name: Create Pull Request
        if: success() && steps.collect_prs.outputs.has_prs == 'true'
        uses: peter-evans/create-pull-request@v7
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: "chore(changelog): update CHANGELOG.md"
          title: "Update CHANGELOG.md"
          body: "This PR updates the changelog with PRs from the last 2 weeks."
          branch: "update-changelog"
          delete-branch: true
          add-paths: |
            CHANGELOG.md


================================================
FILE: .github/workflows/generate-openapi-code-from-typespec.yml
================================================
name: Generate OpenAPI code
run-name: ${{ github.actor }} is generating openapi code

on:
  pull_request:
    paths:
      - 'src/typespec/**'
  push:
    paths:
      - 'src/typespec/**'

jobs:
  Typecheck:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 'latest'
          cache: npm
          cache-dependency-path: 'src/typespec/package-lock.json'

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true

      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Generate openapi code
        run: |
          cd src/typespec; npm ci; cd -
          export PATH=$PATH:$PWD/src/typespec/node_modules/.bin
          bash src/scripts/generate_openapi_code.sh

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}


================================================
FILE: .github/workflows/latest-push-to-hub.yml
================================================
name: Build and push images to docker hub on merge to main
run-name: ${{ github.actor }} is building and pushing images to docker hub

on:
  push:
    branches:
      - "main"

jobs:
  Bake-Push-Images:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: julepai
          password: "${{ secrets.DOCKER_HUB_PASSWORD }}"

      - name: Build and push agent images
        uses: docker/bake-action@v5
        with:
          files: |
            ./docker-bake.hcl
          targets: agents-api
          push: true
          set: |
            *.cache-from=type=gha
            *.cache-to=type=gha,mode=max
        env:
          TAG: latest
          GIT_SHA: ${{ github.sha }}

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

================================================
FILE: .github/workflows/lint-agents-api-pr.yml
================================================
name: Lint agents-api
run-name: ${{ github.actor }} is linting the code

on:
  pull_request:
    paths:
      - 'src/agents-api/**'
  push:
    paths:
      - 'src/agents-api/**'

jobs:
  Lint-And-Format:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install libboost
        run: sudo apt-get install -y libboost-all-dev

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true
      
      - name: Install Go migrate
        uses: jaxxstorm/action-install-gh-release@v1.10.0
        with: # Grab the latest version
          repo: golang-migrate/migrate

      - name: Set up python and install dependencies
        run: |
          cd src/agents-api
          uv python install
          uv sync --all-extras --dev

      - name: Lint and format
        run: |
          cd src/agents-api
          uv run poe format
          uv run poe lint

      - uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: "refactor: Lint agents-api (CI)"
          branch: ${{ github.head_ref }}

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}


================================================
FILE: .github/workflows/lint-integrations-service-pr.yml
================================================
name: Lint integrations-service
run-name: ${{ github.actor }} is linting the code

on:
  pull_request:
    paths:
      - 'src/integrations-service/**'
  push:
    paths:
      - 'src/integrations-service/**'

jobs:
  Lint-And-Format:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true

      - name: Set up python and install dependencies
        run: |
          cd src/integrations-service
          uv python install
          uv sync --all-extras --dev

      - name: Lint and format
        run: |
          cd src/integrations-service
          uv run poe format
          uv run poe lint

      - uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: "refactor: Lint integrations-service (CI)"
          branch: ${{ github.head_ref }}

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}


================================================
FILE: .github/workflows/publish-cli-prerelease.yml
================================================
name: Publish CLI Prerelease to PyPI

# AIDEV-NOTE: Auto-publish CLI package to PyPI for prerelease versions only
permissions:
  contents: write
  packages: write

on:
  push:
    branches:
      - dev
      - main
    paths:
      - 'src/cli/**'
  workflow_dispatch:

jobs:
  check-and-publish:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./src/cli
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'
          
      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true
          
      - name: Install dependencies
        run: |
          uv sync --dev
          
      - name: Extract version from pyproject.toml
        id: version
        run: |
          # Extract version using grep and sed (no additional dependencies needed)
          VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
          echo "version=$VERSION" >> $GITHUB_OUTPUT
          echo "Extracted version: $VERSION"
          
      - name: Check if version is prerelease
        id: prerelease
        run: |
          VERSION="${{ steps.version.outputs.version }}"
          echo "Checking version: $VERSION"
          
          # Check if version contains prerelease indicators
          if echo "$VERSION" | grep -E "(alpha|beta|rc|pre|dev)" > /dev/null; then
            echo "is_prerelease=true" >> $GITHUB_OUTPUT
            echo "✅ Version $VERSION is a prerelease"
          else
            echo "is_prerelease=false" >> $GITHUB_OUTPUT
            echo "❌ Version $VERSION is NOT a prerelease"
          fi
          
      - name: Run linting and type checking
        if: steps.prerelease.outputs.is_prerelease == 'true'
        run: |
          uv run poe check
          
      - name: Run tests
        if: steps.prerelease.outputs.is_prerelease == 'true'
        run: |
          uv run poe test
          
      - name: Build package
        if: steps.prerelease.outputs.is_prerelease == 'true'
        run: |
          uv build
          
      - name: Check if version already exists on PyPI
        if: steps.prerelease.outputs.is_prerelease == 'true'
        id: check_pypi
        run: |
          VERSION="${{ steps.version.outputs.version }}"
          
          # Check if this version already exists on PyPI
          if pip index versions julep-cli | grep "$VERSION" > /dev/null 2>&1; then
            echo "version_exists=true" >> $GITHUB_OUTPUT
            echo "⚠️ Version $VERSION already exists on PyPI"
          else
            echo "version_exists=false" >> $GITHUB_OUTPUT
            echo "✅ Version $VERSION does not exist on PyPI, proceeding with publish"
          fi
          
      - name: Publish to PyPI
        if: steps.prerelease.outputs.is_prerelease == 'true' && steps.check_pypi.outputs.version_exists == 'false'
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          password: ${{ secrets.PYPI_API_TOKEN }}
          packages-dir: src/cli/dist/
          verbose: true
          
      - name: Create GitHub Release
        if: steps.check_pypi.outputs.version_exists == 'false'
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: cli-v${{ steps.version.outputs.version }}
          release_name: CLI v${{ steps.version.outputs.version }}
          body: |
            🚀 **Julep CLI Prerelease v${{ steps.version.outputs.version }}**
            
            This is a prerelease version of the Julep CLI.
            
            ## Installation
            ```bash
            pip install julep-cli==${{ steps.version.outputs.version }}
            ```
            
            ## Changes
            See the [changelog](https://github.com/julep-ai/julep/blob/dev/CHANGELOG.md) for detailed changes.
            
            ---
            *This release was automatically generated by GitHub Actions.*
          prerelease: true
          draft: false
          
      - name: Summary
        run: |
          echo "## Workflow Summary" >> $GITHUB_STEP_SUMMARY
          echo "- **Version**: ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
          echo "- **Is Prerelease**: ${{ steps.prerelease.outputs.is_prerelease }}" >> $GITHUB_STEP_SUMMARY
          echo "- **Version Exists on PyPI**: ${{ steps.check_pypi.outputs.version_exists }}" >> $GITHUB_STEP_SUMMARY
          
          if [ "${{ steps.prerelease.outputs.is_prerelease }}" == "true" ] && [ "${{ steps.check_pypi.outputs.version_exists }}" == "false" ]; then
            echo "- **Action**: ✅ Published to PyPI and created GitHub release" >> $GITHUB_STEP_SUMMARY
          elif [ "${{ steps.prerelease.outputs.is_prerelease }}" == "true" ] && [ "${{ steps.check_pypi.outputs.version_exists }}" == "true" ]; then
            echo "- **Action**: ⚠️ Skipped (version already exists on PyPI)" >> $GITHUB_STEP_SUMMARY
          else
            echo "- **Action**: ❌ Skipped (not a prerelease version)" >> $GITHUB_STEP_SUMMARY
          fi


================================================
FILE: .github/workflows/sync-model-docs.yml
================================================
name: Sync Model Documentation

on:
  push:
    branches:
      - dev
    paths:
      - 'src/llm-proxy/litellm-config.yaml'
      - 'src/scripts/sync_model_docs.py'
  workflow_dispatch:

jobs:
  sync-model-docs:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.12'
        
    - name: Install dependencies
      run: |
        pip install pyyaml
        
    - name: Run sync script
      run: |
        python src/scripts/sync_model_docs.py
        
    - name: Check for changes
      id: check_changes
      run: |
        if git diff --quiet documentation/integrations/supported-models.mdx; then
          echo "changed=false" >> $GITHUB_OUTPUT
        else
          echo "changed=true" >> $GITHUB_OUTPUT
        fi
        
    - name: Commit and push changes
      if: steps.check_changes.outputs.changed == 'true'
      run: |
        git config --global user.name 'github-actions[bot]'
        git config --global user.email 'github-actions[bot]@users.noreply.github.com'
        git add documentation/integrations/supported-models.mdx
        git commit -m "chore: sync model documentation from litellm-config.yaml [skip ci]"
        git push

================================================
FILE: .github/workflows/test-agents-api-pr.yml
================================================
name: Test agents-api
run-name: ${{ github.actor }} is testing the code

on:
  pull_request:
    paths:
      - 'src/agents-api/**'
  push:
    paths:
      - 'src/agents-api/**'

jobs:
  Test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install libboost
        run: sudo apt-get install -y libboost-all-dev

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true

      - name: Install Go migrate
        uses: jaxxstorm/action-install-gh-release@v1.10.0
        with: # Grab the latest version
          repo: golang-migrate/migrate

      - name: Set up python and install dependencies
        run: |
          cd src/agents-api
          uv python install
          uv sync --all-extras --dev

      - name: Run tests
        env:
          SECRETS_MASTER_KEY: ${{ secrets.SECRETS_MASTER_KEY }}
        run: |
          cd src/agents-api
          uv run poe test --fail-limit 3

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}


================================================
FILE: .github/workflows/test-integrations-service-pr.yml
================================================
name: Test integrations-service
run-name: ${{ github.actor }} is testing the code

on:
  pull_request:
    paths:
      - 'src/integrations-service/**'
  push:
    paths:
      - 'src/integrations-service/**'

jobs:
  Test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true

      - name: Set up python and install dependencies
        run: |
          cd src/integrations-service
          uv python install
          uv sync --all-extras --dev

      - name: Run tests
        run: |
          cd src/integrations-service
          uv run poe test

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}


================================================
FILE: .github/workflows/translate-readme.yml
================================================
name: Translate README
on:
  pull_request:
    paths:
      - "README.md"
      - ".github/README-*.md"

jobs:
  translate_readme:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: anthropics/claude-code-action@beta
        with:
          direct_prompt: >-
            Use the root README.md to review the .github/README-{lang}.md files
            to see if they are correctly translated and if needed
            make changes as necessary. Keep the contents exactly the same, just
            translated to the target languages.
    
          custom_instructions: >-
            This is a monorepo with multiple different services.
            The repo uses AGENTS.md as the file that contains instructions for
            AI agents (instead of CLAUDE.md files). CLAUDE.md still exists but
            is just a symlink to the corresponding AGENTS.md (usually in the same dir).
    
          anthropic_model: ${{ vars.TRANSLATOR_CLAUDE_MODEL }}
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          allowed_tools: "Bash(npm install),Bash(npm run test),Edit,Replace,NotebookEditCell"
          disallowed_tools: "TaskOutput,KillTask"


================================================
FILE: .github/workflows/typecheck-agents-api-pr.yml
================================================
name: Typecheck agents-api
run-name: ${{ github.actor }} is typechecking the code

on:
  pull_request:
    paths:
      - 'src/agents-api/**'
  push:
    paths:
      - 'src/agents-api/**'

jobs:
  Typecheck:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install libboost
        run: sudo apt-get install -y libboost-all-dev

      - name: Cache pytype
        uses: actions/cache@v4
        with:
          path: src/agents-api/.pytype
          key: ${{ runner.os }}-agents-api-pytype-${{ github.base_ref }}
          restore-keys: |
            ${{ runner.os }}-agents-api-pytype-

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true
      
      - name: Install Go migrate
        uses: jaxxstorm/action-install-gh-release@v1.10.0
        with: # Grab the latest version
          repo: golang-migrate/migrate

      - name: Set up python and install dependencies
        run: |
          cd src/integrations-service
          uv python install
          uv sync --all-extras --dev

      - name: Typecheck
        run: |
          cd src/agents-api
          uv run poe typecheck

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}


================================================
FILE: .gitignore
================================================
# BECAUSE DIWANK IS OBSESSED
*gaga*
.DS_Store
*.swp
ngrok*
.env*
.env
*.env
*.pyc
**/node_modules/
.aider*
.vscode/
schema.sql
*.egg-info/
**/*.egg-info/

**/.claude/settings.local.json


================================================
FILE: .gitmodules
================================================
# [submodule "code-interpreter/vendor/cohere-ai/cohere-terrarium"]
# 	path = code-interpreter/vendor/cohere-ai/cohere-terrarium
# 	url = https://github.com/cohere-ai/cohere-terrarium.git
[submodule "sdks/python-sdk"]
	path = sdks/python-sdk
	url = https://github.com/julep-ai/python-sdk.git
[submodule "sdks/node-sdk"]
	path = sdks/node-sdk
	url = https://github.com/julep-ai/node-sdk.git


================================================
FILE: .mcp.json
================================================
{
  "mcpServers": {
    "deepwiki": {
      "type": "http",
      "url": "https://mcp.deepwiki.com/mcp"
    },
    "linear": {
      "type": "sse",
      "url": "https://mcp.linear.app/sse"
    },
    "fetch": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ],
      "env": {}
    },
    "firecrawl": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "firecrawl-mcp"
      ],
      "env": {}
    }
  }
}


================================================
FILE: AGENTS.md
================================================
# AGENTS.md. Julep AI  
*Last updated 2025-05-09*  

> **purpose** – This file is the onboarding manual for every AI assistant (Claude, Cursor, GPT, etc.) and every human who edits this repository.  
> It encodes our coding standards, guard-rails, and workflow tricks so the *human 30 %* (architecture, tests, domain judgment) stays in human hands.[^1]

---

## 0. Project overview

Julep is a serverless platform for building AI workflows and agents. It helps data and ML teams orchestrate complex AI operations, manage state across interactions, and integrate with existing data infrastructure and tools. Key components:

- **src/ts-api**: Core service for agent definitions and task execution
- **src/memory-store**: Persistent storage with PostgreSQL and vector capabilities
- **src/scheduler**: Temporal-based workflow engine for execution
- **src/integrations-service**: Connectors to external services and tools
- **src/**: All core service modules are now organized under the src/ directory

**Golden rule**: When unsure about implementation details or requirements, ALWAYS consult the developer rather than making assumptions.

---

## 1. Non-negotiable golden rules

| #: | AI *may* do                                                            | AI *must NOT* do                                                                    |
|---|------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
| G-0 | Whenever unsure about something that's related to the project, ask the developer for clarification before making changes.    |  ❌ Write changes or use tools when you are not sure about something project specific, or if you don't have context for a particular feature/decision. |
| G-1 | Generate code **only inside** relevant source directories (e.g., `src/agents-api/agents_api/` for the main API, `src/cli/src/` for the CLI, `src/integrations-service/` for integration-specific code) or explicitly pointed files.    | ❌ Touch `tests/`, `SPEC.md`, or any `*_spec.py` / `*.ward` files (humans own tests & specs). |
| G-2 | Add/update **`AIDEV-NOTE:` anchor comments** near non-trivial edited code. | ❌ Delete or mangle existing `AIDEV-` comments.                                     |
| G-3 | Follow lint/style configs (`pyproject.toml`, `.ruff.toml`, `.pre-commit-config.yaml`). Use the project's configured linter, if available, instead of manually re-formatting code. | ❌ Re-format code to any other style.                                               |
| G-4 | For changes >300 LOC or >3 files, **ask for confirmation**.            | ❌ Refactor large modules without human guidance.                                     |
| G-5 | Stay within the current task context. Inform the dev if it'd be better to start afresh.                                  | ❌ Continue work from a prior prompt after "new task" – start a fresh session.      |

---

## 2. Build, test & utility commands

Use `poe` tasks for consistency (they ensure correct environment variables and configuration).

```bash
# Format, lint, type-check, test, codegen
poe format           # ruff format
poe lint             # ruff check
poe typecheck        # pytype --config pytype.toml (for agents-api) / pyright (for cli)
poe test             # ward test --exclude .venv (pytest for integrations-service)
poe test --search "pattern" # Run specific tests by Ward pattern
poe check            # format + lint + type + SQL validation
poe codegen          # generate API code (e.g., OpenAPI from TypeSpec)
```
For simple, quick Python script tests: `PYTHONPATH=$PWD python tests/test_file.py` (ensure correct CWD).

---

## 3. Coding standards

*   **Python**: 3.12+, FastAPI, `async/await` preferred.
*   **Formatting**: `ruff` enforces 96-char lines, double quotes, sorted imports. Standard `ruff` linter rules.
*   **Typing**: Strict (Pydantic v2 models preferred); `from __future__ import annotations`.
*   **Naming**: `snake_case` (functions/variables), `PascalCase` (classes), `SCREAMING_SNAKE` (constants).
*   **Error Handling**: Typed exceptions; context managers for resources.
*   **Documentation**: Google-style docstrings for public functions/classes.
*   **Testing**: Separate test files matching source file patterns.

**Error handling patterns**:
- Use typed, hierarchical exceptions defined in `exceptions.py`
- Catch specific exceptions, not general `Exception`
- Use context managers for resources (database connections, file handles)
- For async code, use `try/finally` to ensure cleanup

Example:
```python
from agents_api.common.exceptions import ValidationError

async def process_data(data: dict) -> Result:
    try:
        # Process data
        return result
    except KeyError as e:
        raise ValidationError(f"Missing required field: {e}") from e
```

---

## 4. Project layout & Core Components

| Directory                         | Description                                       |
| --------------------------------- | ------------------------------------------------- |
| `src/agents-api/`             | FastAPI service & Temporal activities             |
| `src/memory-store/`           | PostgreSQL + TimescaleDB schemas & migrations     |
| `src/blob-store/`             | S3-compatible object storage for files            |
| `src/integrations-service/`   | Adapters for external services (browsers, APIs)   |
| `src/scheduler/`              | Temporal workflow engine for execution            |
| `src/gateway/`                | API gateway (routing, request handling)           |
| `src/llm-proxy/`              | LiteLLM proxy for language models                 |
| `src/monitoring/`             | Prometheus & Grafana                              |
| `src/typespec/`               | **Source-of-truth** API specifications (TypeSpec) |
| `sdks/`                           | Node.js & Python client SDKs                      |

See `.github/CONTRIBUTING.md` for a full architecture diagram.

**Key domain models**:
- **Agents**: AI agent definitions with instructions and tools
- **Tasks**: Workflow definitions with individual steps
- **Tools**: Integrations and capabilities for agents to use 
- **Sessions**: Conversation containers with context
- **Entries**: Message history tracking
- **Executions**: Task execution state tracking

---

## 5. Anchor comments

Add specially formatted comments throughout the codebase, where appropriate, for yourself as inline knowledge that can be easily `grep`ped for. 

### Guidelines:

- Use `AIDEV-NOTE:`, `AIDEV-TODO:`, or `AIDEV-QUESTION:` (all-caps prefix) for comments aimed at AI and developers.
- Keep them concise (≤ 120 chars).
- **Important:** Before scanning files, always first try to **locate existing anchors** `AIDEV-*` in relevant subdirectories.
- **Update relevant anchors** when modifying associated code.
- **Do not remove `AIDEV-NOTE`s** without explicit human instruction.
- Make sure to add relevant anchor comments, whenever a file or piece of code is:
  * too long, or
  * too complex, or
  * very important, or
  * confusing, or
  * could have a bug unrelated to the task you are currently working on.

Example:
```python
# AIDEV-NOTE: perf-hot-path; avoid extra allocations (see ADR-24)
async def render_feed(...):
    ...
```

---

## 6. Commit discipline

*   **Granular commits**: One logical change per commit.
*   **Tag AI-generated commits**: e.g., `feat: optimise feed query [AI]`.
*   **Clear commit messages**: Explain the *why*; link to issues/ADRs if architectural.
*   **Use `git worktree`** for parallel/long-running AI branches (e.g., `git worktree add ../wip-foo -b wip-foo`).
*   **Review AI-generated code**: Never merge code you don't understand.

---

## 7. API models & codegen

*   To modify API models (e.g., in `src/agents-api/agents_api/autogen/`), **edit TypeSpec files** in `src/typespec/`.
*   **Regenerate code** after TypeSpec changes: `bash src/scripts/generate_openapi_code.sh` (from project root).
*   **Do NOT manually edit** generated files (e.g., in `autogen/` directories) as they will be overwritten.

**API pattern examples**:
```python
# Route definition
@router.post("/sessions/{session_id}/entries", response_model=EntryResponse)
async def create_entry(
    session_id: str,
    entry_create: EntryCreate,
    current_user: User = Depends(get_current_user),
) -> EntryResponse:
    """Create a new entry in a session."""
    # Implementation...
```

---

## 8. Python expressions in tasks (agents-api)

*   Evaluated using `simpleeval` in a sandboxed environment.
*   Use `validate_py_expression()` from `agents_api.activities.task_steps.base_evaluate` for static checks (syntax, undefined names, safety).
*   Expressions have access to `_` (current input) and standard library modules.
*   Test expressions: `PYTHONPATH=$PWD python -c "from agents_api.activities.task_steps.base_evaluate import validate_py_expression; print(validate_py_expression('$ your_expr_here'))"`
*   Task validation handles raw task dictionaries and Pydantic models (after `task_to_spec` conversion).
*   In `task_to_spec` converted tasks, `kind_` field denotes step type. Raw tasks use step type keys.
*   For "if_else" steps, condition is in `if_` field (aliased as "if").

**Expression example**:
```python
# Simple expression example
"$_['customer']['total_orders'] > 5"  # Checks if customer has more than 5 orders

# More complex example with dict access and function calls
"$len([x for x in _['items'] if x['category'] == 'electronics']) > 0"
```

---

## 9. Ward testing framework

*   Use descriptive test names: `@test("Descriptive name of what is being tested")`.
*   Activate virtual environment: `source .venv/bin/activate`.
*   Ensure correct working directory (e.g., `src/agents-api/`) and `PYTHONPATH=$PWD` for script-based tests.
*   Filter tests: `poe test --search "pattern_to_match"` (do NOT use `-p`).
*   Limit failures for faster feedback: `poe test --fail-limit 1 --search "pattern_to_match"`.

---

## 10. Directory-Specific AGENTS.md Files

*   **Always check for `AGENTS.md` files in specific directories** before working on code within them. These files contain targeted context.
*   If a directory's `AGENTS.md` is outdated or incorrect, **update it**.
*   If you make significant changes to a directory's structure, patterns, or critical implementation details, **document these in its `AGENTS.md`**.
*   If a directory lacks a `AGENTS.md` but contains complex logic or patterns worth documenting for AI/humans, **suggest creating one**.

---

## 11. Common pitfalls

*   Mixing pytest & ward syntax (ward uses `@test()` decorator, not pytest fixtures/classes).
*   Forgetting to `source .venv/bin/activate`.
*   Wrong current working directory (CWD) or `PYTHONPATH` for commands/tests (e.g., ensure you are in `agents-api/` not root for some `agents-api` tasks).
*   Large AI refactors in a single commit (makes `git bisect` difficult).
*   Delegating test/spec writing entirely to AI (can lead to false confidence).
*   **Note about `src/`**: Only the `cli` component has a `src/` directory. For `src/agents-api`, code is directly in `agents_api/`. Follow the existing pattern for each component.

---

## 12. Versioning conventions

Components (e.g., `agents-api`, `julep-cli`, `integrations-service`) are versioned independently. Semantic Versioning (SemVer: `MAJOR.MINOR.PATCH`) is generally followed, as specified in each component's `pyproject.toml` file.

*   **MAJOR** version update: For incompatible API changes.
*   **MINOR** version update: For adding functionality in a backward-compatible manner.
*   **PATCH** version update: For backward-compatible bug fixes.

---

## 13. Key File & Pattern References

This section provides pointers to important files and common patterns within the codebase.

*   **API Route Definitions**:
    *   Location: `src/agents-api/agents_api/routers/` (e.g., `src/agents-api/agents_api/routers/sessions.py`)
    *   Pattern: FastAPI routers, Pydantic models for request/response, dependency injection.
*   **Typed Exceptions**:
    *   Location: `src/agents-api/agents_api/common/exceptions/`
    *   Pattern: Custom exception classes inheriting from base exceptions.
*   **Pydantic Models**:
    *   Location: Used extensively across services, often in `models.py` files within component directories (e.g., `agents_api/common/protocol/`), or directly in router/activity files.
    *   Pattern: Data validation, serialization, and settings management.
*   **Temporal Workflows & Activities**:
    *   Location: `src/agents-api/agents_api/workflows/` (workflow definitions) and `src/agents-api/agents_api/activities/` (activity implementations).
    *   Pattern: Define complex, stateful operations using Temporal's primitives.
*   **Database Queries & Models (Memory Store)**:
    *   Location: `src/agents-api/agents_api/queries/` (for SQL query builders/files) and `src/memory-store/` (for schema migrations).
    *   Pattern: Asyncpg for database interaction, often with helper functions for CRUD operations.

---

## 14. Domain-Specific Terminology

*   **Agent**: An AI entity with specific instructions, tools, and capabilities, defined via API. Core model in `src/typespec/agents/models.tsp`.
*   **Task**: A definition of a workflow composed of multiple steps that an agent can execute. Core model in `src/typespec/tasks/models.tsp`.
*   **Tool**: A specific capability or integration an agent can use (e.g., web search, API call). Defined in `src/typespec/tools/`.
*   **Session**: A container for a sequence of interactions (entries) with an agent, maintaining context. Core model in `src/typespec/sessions/models.tsp`.
*   **Entry**: A single message or event within a session (e.g., user input, agent response). Core model in `src/typespec/entries/models.tsp`.
*   **Execution**: The runtime instance and state of a task being performed by an agent. Core model in `src/typespec/executions/models.tsp`.
*   **POE (PoeThePoet)**: The task runner used in this project for development tasks like formatting, linting, testing, and code generation (configured in `pyproject.toml`).
*   **TypeSpec**: The language used to define API schemas. It is the source of truth for API models, which are then generated into Python Pydantic models in `autogen/` directories.
*   **Ward**: The primary Python testing framework used for unit and integration tests in most components (e.g., `agents-api`, `cli`).
*   **Temporal**: The distributed workflow engine used to orchestrate complex, long-running tasks and ensure their reliable execution.
*   **AIDEV-NOTE/TODO/QUESTION**: Specially formatted comments to provide inline context or tasks for AI assistants and developers.

---

## 15. Meta: Guidelines for updating AGENTS.md files

### Elements that would be helpful to add:

1. **Decision flowchart**: A simple decision tree for "when to use X vs Y" for key architectural choices would guide my recommendations.
2. **Reference links**: Links to key files or implementation examples that demonstrate best practices.
3. **Domain-specific terminology**: A small glossary of project-specific terms would help me understand domain language correctly.
4. **Versioning conventions**: How the project handles versioning, both for APIs and internal components.

### Format preferences:

1. **Consistent syntax highlighting**: Ensure all code blocks have proper language tags (`python`, `bash`, etc.).
2. **Hierarchical organization**: Consider using hierarchical numbering for subsections to make referencing easier.
3. **Tabular format for key facts**: The tables are very helpful - more structured data in tabular format would be valuable.
4. **Keywords or tags**: Adding semantic markers (like `#performance` or `#security`) to certain sections would help me quickly locate relevant guidance.

[^1]: This principle emphasizes human oversight for critical aspects like architecture, testing, and domain-specific decisions, ensuring AI assists rather than fully dictates development.

---

## 16. Files to NOT modify

These files control which files should be ignored by AI tools and indexing systems:

*   @.agentignore : Specifies files that should be ignored by the Cursor IDE, including:
    *   Build and distribution directories
    *   Environment and configuration files
    *   Large data files (parquet, arrow, pickle, etc.)
    *   Generated documentation
    *   Package-manager files (lock files)
    *   Logs and cache directories
    *   IDE and editor files
    *   Compiled binaries and media files

*   @.agentindexignore : Controls which files are excluded from Cursor's indexing to improve performance, including:
    *   All files in `.agentignore`
    *   Files that may contain sensitive information
    *   Large JSON data files
    *   Generated TypeSpec outputs
    *   Memory-store migration files
    *   Docker templates and configuration files

**Never modify these ignore files** without explicit permission, as they're carefully configured to optimize IDE performance while ensuring all relevant code is properly indexed.

**When adding new files or directories**, check these ignore patterns to ensure your files will be properly included in the IDE's indexing and AI assistance features.

---

## AI Assistant Workflow: Step-by-Step Methodology

When responding to user instructions, the AI assistant (Claude, Cursor, GPT, etc.) should follow this process to ensure clarity, correctness, and maintainability:

1. **Consult Relevant Guidance**: When the user gives an instruction, consult the relevant instructions from `AGENTS.md` files (both root and directory-specific) for the request.
2. **Clarify Ambiguities**: Based on what you could gather, see if there's any need for clarifications. If so, ask the user targeted questions before proceeding.
3. **Break Down & Plan**: Break down the task at hand and chalk out a rough plan for carrying it out, referencing project conventions and best practices.
4. **Trivial Tasks**: If the plan/request is trivial, go ahead and get started immediately.
5. **Non-Trivial Tasks**: Otherwise, present the plan to the user for review and iterate based on their feedback.
6. **Track Progress**: Use a to-do list (internally, or optionally in a `TODOS.md` file) to keep track of your progress on multi-step or complex tasks.
7. **If Stuck, Re-plan**: If you get stuck or blocked, return to step 3 to re-evaluate and adjust your plan.
8. **Update Documentation**: Once the user's request is fulfilled, update relevant anchor comments (`AIDEV-NOTE`, etc.) and `AGENTS.md` files in the files and directories you touched.
9. **User Review**: After completing the task, ask the user to review what you've done, and repeat the process as needed.
10. **Session Boundaries**: If the user's request isn't directly related to the current context and can be safely started in a fresh session, suggest starting from scratch to avoid context confusion.


================================================
FILE: CHANGELOG.md
================================================
<div align="center" id="top">
<img src="https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable=Serverless%20AI%20Workflows%20for%20Data%20%26%20ML%20Teams&font=Source%20Code%20Pro&logo=https%3A%2F%2Fraw.githubusercontent.com%2Fjulep-ai%2Fjulep%2Fdev%2F.github%2Fjulep-logo.svg&owner=1&forks=1&pattern=Solid&stargazers=1&theme=Auto" alt="julep" height="300" />

<br>
  <p>
    <a href="https://dashboard.julep.ai">
      <img src="https://img.shields.io/badge/Get_API_Key-FF5733?style=logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAxTDMgNXYxNGw5IDQgOS00VjVsLTktNHptMCAyLjh2MTYuNEw1IDE2LjJWNi44bDctMy4yem0yIDguMmwtMi0yLTIgMiAyIDIgMi0yeiIvPjwvc3ZnPg==" alt="Get API Key" height="28">
    </a>
    <span>&nbsp;</span>
    <a href="https://docs.julep.ai">
      <img src="https://img.shields.io/badge/Documentation-4B32C3?style=logo=gitbook&logoColor=white" alt="Documentation" height="28">
    </a>
  </p>
  <p>
   <a href="https://www.npmjs.com/package/@julep/sdk"><img src="https://img.shields.io/npm/v/%40julep%2Fsdk?style=social&amp;logo=npm&amp;link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F%40julep%2Fsdk" alt="NPM Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://pypi.org/project/julep"><img src="https://img.shields.io/pypi/v/julep?style=social&amp;logo=python&amp;label=PyPI&amp;link=https%3A%2F%2Fpypi.org%2Fproject%2Fjulep" alt="PyPI - Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://hub.docker.com/u/julepai"><img src="https://img.shields.io/docker/v/julepai/agents-api?sort=semver&amp;style=social&amp;logo=docker&amp;link=https%3A%2F%2Fhub.docker.com%2Fu%2Fjulepai" alt="Docker Image Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://choosealicense.com/licenses/apache/"><img src="https://img.shields.io/github/license/julep-ai/julep" alt="GitHub License" height="28"></a>
  </p>
  
  <h3>
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow">Discord</a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow">𝕏</a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow">LinkedIn</a>
  </h3>
</div>

# **Julep AI Changelog for 21 May 2025** ✨

<!-- ───────────  Core platform improvements merged from *dev*  ─────────── -->

- **Major Feature**: Introduced first-class **Projects**!  
  Adds `projects` table, association tables, CRUD endpoints, canonical-name support, and project-aware validation across agents, users, files, and sessions
- **Major Feature**: Landed encrypted **Secrets Vault** with full CRUD API, master-key encryption, and transparent secret-reference substitution in tool & API definitions ([#1312](https://github.com/julep-ai/julep/pull/1312))

<!-- ───────────  Secrets follow-ups  ─────────── -->

- **Enhancement**: Added **custom-key aliasing** for secrets plus numerous workflow & cost-tracking refactors ([#1356](https://github.com/julep-ai/julep/pull/1356))
- **Enhancement**: Added `decrypt` flag to secrets queries—retrieve values encrypted or in plaintext as needed ([#1369](https://github.com/julep-ai/julep/pull/1369))

<!-- ───────────  Usage, cost & limits  ─────────── -->

- **Enhancement**: Implemented **monthly cost aggregation** + middleware that enforces free-tier usage caps and active-developer checks ([#1351](https://github.com/julep-ai/julep/pull/1351))

<!-- ───────────  Stability & correctness  ─────────── -->

- **Fix**: Re-wrote project-resource SQL views for accurate mapping and removed weak default secrets key in production ([#1362](https://github.com/julep-ai/julep/pull/1362))
- **Fix**: Hardened secrets endpoints & models, fixed insert/delete logic, and expanded expression-evaluator edge-cases ([#1343](https://github.com/julep-ai/julep/pull/1343))

<!-- ───────────  Tooling / DX  ─────────── -->

- **Enhancement**: New GitHub Actions workflow automatically translates README files via Anthropic Claude, replacing the old Python job ([#1433](https://github.com/julep-ai/julep/pull/1433))

- **Other Breaking**: Removed fallback for `DEMO_*` placeholder credentials 💥
- **Minor Docs**: Updated docs and cookbooks to remove `DEMO_API_KEY` references.
- **Minor Docs**: Updated footer use-case links to the new `cookbooks/advanced` paths.

> _This list covers the most significant code-related PRs merged to **main** on 21 May 2025.  
> For everything else, see the full list of [recent pull requests](https://github.com/julep-ai/julep/pulls?q=is:pr+created:>=2025-04-21)._  

# **Julep AI Changelog for 15 May 2025** ✨

- **Minor Feature**: Updated `julep run` to execute tasks via the API with clearer error reporting ✨
- **Minor Docs**: Added examples for task execution and error handling in CLI docs 📚

# **Julep AI Changelog for 9 May 2025** ✨

- **Minor Docs**: Added links to cookbooks for Quick, Community, and Industry pages.
- **Minor Docs**: Updated cookbook links to use absolute GitHub URLs.

# **Julep AI Changelog for 11 April 2025** ✨

- **Major Feature**: Introduced support for Gemini models in `litellm-config.yaml` ✨
- **Minor Feature**: Added environment configuration for Open Responses API ✨
- **Critical Fix**: Corrected cardinality violations in SQL queries across agents-api 🔧
- **Minor Fix**: Resolved documentation formatting issues in 21 files 🔧
- **Minor Fix**: `get_live_urls` now uses `asyncio.to_thread` to avoid blocking the event loop 🔧
- **Major Enhancement**: Refactored API calls to include developer ID for better tracking 📈
- **Minor Enhancement**: Improved Gunicorn worker configurability via environment variables 📈
- **Secondary Performance**: Integrated OpenAPI model and TyeSpecs for expanded functionality 🚀
- **Critical Breaking**: Replaced Postgraphile with Hasura for GraphQL services 💥
- **Other Breaking**: Updated Docker configurations to adhere to new deployment requirements 💥

# **Julep AI Changelog for 14 February 2025** ✨

- **Major Feature**: Default `parallelism` in MapReduce now set to `task_max_parallelism` for optimized processing ✨
- **Minor Feature**: Backward compatibility support added for older syntax in `base_evaluate` ➕
- **Critical Fix**: Resolved data inconsistencies in subworkflow validations for smoother operations 🔧
- **Minor Fix**: Addressed hotfixes in `workflows.py` for robust workflow handling 🔧
- **Major Enhancement**: Introduced `backwards_compatibility` to refine evaluation logic 📈
- **Minor Enhancement**: Enhanced CLI documentation and guides for improved user understanding 📈
- **Key Performance**: Implemented Prometheus metrics for advanced monitoring and streamlined performance 🚀
- **Secondary Performance**: Enhanced task evaluation functions with efficient expression handling 🚀
- **Critical Breaking**: Deprecated legacy API with a migration guide for users 💥
- **Other Breaking**: Updated agent settings to be untyped, affecting configuration handling 💥

# **Julep AI Changelog for 31 January 2025** ✨

- **Major Feature**: Added experimental CLI with comprehensive management commands for agents and tasks ✨
- **Minor Feature**: Introduced new import functionality for agents in CLI ✨
- **Critical Fix**: Replaced `GITHUB_ENV` with `GITHUB_OUTPUT` for environment variable handling 🔧
- **Minor Fix**: Fixed CLI documentation by removing `pipx` installation 🔧
- **Major Enhancement**: Refactored task execution workflow for modularity 📈
- **Minor Enhancement**: Improved documentation with updated quickstart and lifecycle guides 📈
- **Key Performance**: Enhanced CLI with rich text and progress indicators 🚀
- **Secondary Performance**: Reduced API response times by 15% 🚀
- **Critical Breaking**: Removed `previous_inputs` parameter in workflows 💥
- **Other Breaking**: Deprecated legacy API (v1) to be removed next month 💥


================================================
FILE: README.md
================================================
<sup><div align="center">
  <!-- Keep these links. Translations will automatically update with the README. -->
  [Deutsch](https://www.readme-i18n.com/julep-ai/julep?lang=de) |
  [Español](https://www.readme-i18n.com/julep-ai/julep?lang=es) |
  [français](https://www.readme-i18n.com/julep-ai/julep?lang=fr) |
  [日本語](https://www.readme-i18n.com/julep-ai/julep?lang=ja) |
  [한국어](https://www.readme-i18n.com/julep-ai/julep?lang=ko) |
  [Português](https://www.readme-i18n.com/julep-ai/julep?lang=pt) |
  [Русский](https://www.readme-i18n.com/julep-ai/julep?lang=ru) |
  [中文](https://www.readme-i18n.com/julep-ai/julep?lang=zh)
</div></sup>


<div align="center">

```
      ██╗ ██╗   ██╗ ██╗      ███████╗ ██████╗       █████╗  ██╗
      ██║ ██║   ██║ ██║      ██╔════╝ ██╔══██╗     ██╔══██╗ ██║
      ██║ ██║   ██║ ██║      █████╗   ██████╔╝     ███████║ ██║
 ██   ██║ ██║   ██║ ██║      ██╔══╝   ██╔═══╝      ██╔══██║ ██║
 ╚█████╔╝ ╚██████╔╝ ███████╗ ███████╗ ██║          ██║  ██║ ██║
  ╚════╝   ╚═════╝  ╚══════╝ ╚══════╝ ╚═╝          ╚═╝  ╚═╝ ╚═╝
```

<br>
  <p>
   <a href="https://www.npmjs.com/package/@julep/sdk"><img src="https://img.shields.io/npm/v/%40julep%2Fsdk?style=social&amp;logo=npm&amp;link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F%40julep%2Fsdk" alt="NPM Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://pypi.org/project/julep"><img src="https://img.shields.io/pypi/v/julep?style=social&amp;logo=python&amp;label=PyPI&amp;link=https%3A%2F%2Fpypi.org%2Fproject%2Fjulep" alt="PyPI - Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://hub.docker.com/u/julepai"><img src="https://img.shields.io/docker/v/julepai/agents-api?sort=semver&amp;style=social&amp;logo=docker&amp;link=https%3A%2F%2Fhub.docker.com%2Fu%2Fjulepai" alt="Docker Image Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://choosealicense.com/licenses/apache/"><img src="https://img.shields.io/github/license/julep-ai/julep" alt="GitHub License" height="28"></a>
  </p>

  <h3 align="center">
    <a href="https://discord.com/invite/JTSBGRZrzj" rel="dofollow"><img src="https://user-images.githubusercontent.com/74038190/235294015-47144047-25ab-417c-af1b-6746820a20ff.gif" width="45"></a>
    ·
    <a href="https://x.com/julep_ai" rel="dofollow"><img src="https://raw.githubusercontent.com/gist/IgnaceMaes/744cd9cf41ec6acf46fc8f4e9f370f86/raw/d16658c2945d30c8a953b35cb17dd7085111b46c/x-logo.svg" width="32"></a>
    ·
    <a href="https://www.linkedin.com/company/julep-ai" rel="dofollow"><img src="https://user-images.githubusercontent.com/74038190/235294012-0a55e343-37ad-4b0f-924f-c8431d9d2483.gif" width="45"></a>

  </h3>
</div>

---

## ⚠️ Important Notice: Julep is Shutting Down

**The Julep backend and dashboard will shut down on December 31, 2025.**

Julep is open source and you can continue using it by self-hosting. See the [Self-Hosting Guide](https://docs.julep.ai/advanced/localsetup) for instructions.

**We're now working on [memory.store](https://memory.store/)** — check it out!

---

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
<h3>📖 Table of Contents</h3>

- [Why Julep?](#why-julep)
- [Self-Hosting](#self-hosting)
- [Documentation and Examples](#documentation-and-examples)
- [Community and Contributions](#community-and-contributions)
- [License](#license)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->




## Why Julep?

Julep is an open-source platform for building **agent-based AI workflows** that go far beyond simple chains of prompts. It lets you orchestrate complex, multi-step processes with Large Language Models (LLMs) and tools **without managing any infrastructure**. With Julep, you can create AI agents that **remember past interactions** and handle sophisticated tasks with branching logic, loops, parallel execution, and integration of external APIs. In short, Julep acts like a *“Firebase for AI agents,”* providing a robust backend for intelligent workflows at scale.

**Key Features and Benefits:**

* **Persistent Memory:** Build AI agents that maintain context and long-term memory across conversations, so they can learn and improve over time.
* **Modular Workflows:** Define complex tasks as modular steps (in YAML or code) with conditional logic, loops, and error handling. Julep’s workflow engine manages multi-step processes and decisions automatically.
* **Tool Orchestration:** Easily integrate external tools and APIs (web search, databases, third-party services, etc.) as part of your agent’s toolkit. Julep’s agents can invoke these tools to augment their capabilities, enabling Retrieval-Augmented Generation and more.
* **Parallel & Scalable:** Run multiple operations in parallel for efficiency, and let Julep handle scaling and concurrency under the hood. The platform is serverless, so it seamlessly scales workflows without extra devops overhead.
* **Reliable Execution:** Don’t worry about glitches – Julep provides built-in retries, self-healing steps, and robust error handling to keep long-running tasks on track. You also get real-time monitoring and logging to track progress.
* **Easy Integration:** Get started quickly with our SDKs for **Python** and **Node.js**, or use the Julep CLI for scripting. Julep’s REST API is available if you want to integrate directly into other systems.

<img src="./.github/julep.gif"/>

*Focus on your AI logic and creativity, while Julep takes care of the heavy lifting!* <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/2c0eef4b-7b75-42bd-9722-4bea97a2d532" width="20">



## Self-Hosting

Since the hosted version is shutting down, you can self-host Julep to continue using it.

1. **Install the SDK:** Install the Julep SDK for your preferred language:

   * <img src="https://user-images.githubusercontent.com/74038190/212257472-08e52665-c503-4bd9-aa20-f5a4dae769b5.gif" width="20"> **Python:** `pip install julep`
   * <img src="https://user-images.githubusercontent.com/74038190/212257454-16e3712e-945a-4ca2-b238-408ad0bf87e6.gif" width="20"> **Node.js:** `npm install @julep/sdk` (or `yarn add @julep/sdk`)

2. **Self-Host Julep:** Follow the [Self-Hosting Guide](https://docs.julep.ai/advanced/localsetup) to run Julep on your own infrastructure.

3. **Define Your Agent:** Use the SDK or YAML to define an agent and its task workflow. For example, you can specify the agent's memory, tools it can use, and a step-by-step task logic. (See the **[Quick Start](https://docs.julep.ai/introduction/quick-start)** in our docs for a detailed walkthrough.)

4. **Run a Workflow:** Invoke your agent through the SDK to execute the task. Julep will orchestrate the entire workflow and manage the state, tool calls, and LLM interactions for you.

That's it! For a complete tutorial, check out the **[Quick Start Guide](https://docs.julep.ai/introduction/quick-start)** in the documentation.

> **Note:** Julep also offers a command-line interface (CLI) to manage workflows and agents. See the [Julep CLI docs](https://docs.julep.ai/responses/quickstart#cli-installation) for details.



## Documentation and Examples


Looking to dive deeper? The **[Julep Documentation](https://docs.julep.ai)** covers everything you need to master the platform – from core concepts (Agents, Tasks, Sessions, Tools) to advanced topics like agent memory management and architecture internals. Key resources include:

* **[Concept Guides](https://docs.julep.ai/concepts/):** Learn about Julep’s architecture, how sessions and memory work, using tools, managing long conversations, and more.
* **[API & SDK Reference](https://docs.julep.ai/api-reference/):** Find detailed reference for all SDK methods and REST API endpoints to integrate Julep into your applications.
* **[Tutorials](https://docs.julep.ai/tutorials/):** Step-by-step guides for building real applications (e.g. a research agent that searches the web, a trip-planning assistant, or a chatbot with custom knowledge).
* **[Cookbook Recipes](https://github.com/julep-ai/julep/tree/dev/cookbooks):** Explore the **Julep Cookbook** for ready-made example workflows and agents. These recipes demonstrate common patterns and use cases – a great way to learn by example. *Browse the [`cookbooks/`](https://github.com/julep-ai/julep/tree/dev/cookbooks) directory in this repository for sample agent definitions.*
* **[IDE Integration](https://context7.com/julep-ai/julep):** Access Julep documentation directly in your IDE! Perfect for getting instant answers while coding.



## Community and Contributions

Join our growing community of developers and AI enthusiasts! Here are some ways to get involved and get support:

* **Discord Community:** Have questions or ideas? Join the conversation on our [official Discord server](https://discord.gg/7H5peSN9QP) to chat with other users.
* **GitHub Discussions and Issues:** Feel free to use GitHub for reporting bugs, requesting features, or discussing implementation details. Check out the [**good first issues**](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) if you'd like to contribute – we welcome contributions of all kinds.
* **Contributing:** If you want to contribute code or improvements, please see our [Contributing Guide](.github/CONTRIBUTING.md) for how to get started. We appreciate all PRs and feedback.

*Pro tip: <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/e379a33a-b428-4385-b44f-3da16e7bac9f" width="35"> Star our repo to stay updated.*

<br/>

Your contributions, big or small, are valuable to us. Let's build something amazing together!    <img src="https://github.com/Anmol-Baranwal/Cool-GIFs-For-GitHub/assets/74038190/2c0eef4b-7b75-42bd-9722-4bea97a2d532" width="20">
 <img src="https://user-images.githubusercontent.com/74038190/216125640-2783ebd5-e63e-4ed1-b491-627a40b24850.png" width="20">

<h4>Our Amazing Contributors:</h4>

<a href="https://github.com/julep-ai/julep/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=julep-ai/julep" />
</a>

<br/>

## License

Julep is offered under the **Apache 2.0 License**, which means it’s free to use in your own projects. See the [LICENSE](.github/LICENSE) file for details. Enjoy building with Julep!


================================================
FILE: changelog/Templates/JulepCustom/entries.html
================================================
{{> head}}
{{> header}}

<main class="container entries-list">
  {{#entries}}
    <article class="entry-list-item">
      <h2 class="entry-title"><a href="{{{url}}}">{{title}}</a></h2>
      <p class="entry-meta">{{date}}</p>
      {{#summary}}
      <p class="entry-summary">{{summary}}</p>
      {{/summary}}
    </article>
  {{/entries tagged "main"}}
</main>

{{> footer}} 

================================================
FILE: changelog/Templates/JulepCustom/entry.html
================================================
{{> head}}
{{> header}}

<main class="container entry-page">
  <article>
    <h1 class="entry-title">{{title}}</h1>
    <p class="entry-meta">{{date}}</p>
    {{{html}}}
    {{#tags}}
      <span class="entry-tag">#{{.}}</span>
    {{/tags}}
  </article>
</main>

{{> footer}} 

================================================
FILE: changelog/Templates/JulepCustom/footer.html
================================================
    <footer class="site-footer">
      <div class="container">
        <p>&copy; {{year}} Julep AI</p>
      </div>
    </footer>
  </body>
</html> 

================================================
FILE: changelog/Templates/JulepCustom/head.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>{{title}}</title>
    <link rel="stylesheet" href="/style.css">
  </head>
</html>

<!-- test comment -->

================================================
FILE: changelog/Templates/JulepCustom/header.html
================================================
  <body>
    <header class="site-header">
      <div class="container">
        <h1 class="logo"><a href="/">{{site.title}}</a></h1>
        <nav class="channels">
          <a href="/tag/main" class="stable">Stable Updates</a>
          <a href="/tag/dev" class="dev">Dev Channel</a>
        </nav>
      </div>
    </header> 

================================================
FILE: changelog/Templates/JulepCustom/package.json
================================================
{
  "name": "JulepCustom",
  "author": "Julep AI",
  "version": "0.1.0",
  "description": "Custom minimal template with main/dev channels",
  "locals": {
    "site": {
      "title": "Julep Changelog"
    }
  }
} 

================================================
FILE: changelog/Templates/JulepCustom/style.css
================================================
/* ──────────────────────────────────────────────────────────
   Julep Custom Template – CSS
   Simple, responsive, dark-mode aware styling for changelog
   ────────────────────────────────────────────────────────── */

:root{
  --body-bg:#ffffff;
  --text-color:#111111;
  --link-color:#0077cc;
  --link-hover-color:#005fa3;
  --border-color:#e5e5e5;
  --container-width:680px;
  --stable-green:#28a745;
  --dev-orange:#d49144;
}

@media (prefers-color-scheme: dark){
  :root{
    --body-bg:#1e1e1e;
    --text-color:#f5f5f5;
    --link-color:#8ab4ff;
    --link-hover-color:#a8c6ff;
    --border-color:#333333;
  }
}

*{box-sizing:border-box;}

body{
  margin:0;
  background:var(--body-bg);
  color:var(--text-color);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  line-height:1.6;
  font-size:17px;
}

a{color:var(--link-color);text-decoration:none;}
a:hover{color:var(--link-hover-color);text-decoration:underline;}

.container{
  width:100%;
  max-width:var(--container-width);
  margin:0 auto;
  padding:0 1rem;
}

/* ── Header ─────────────────────────────── */

.site-header{
  border-bottom:1px solid var(--border-color);
  padding:1rem 0;
}

.logo{margin:0;font-size:1.5rem;}
.logo a{color:var(--text-color);text-decoration:none;}

nav.channels{margin-top:.5rem;}
nav.channels a{font-weight:600;margin-right:1rem;}
nav.channels a.stable{color:var(--stable-green);}
nav.channels a.dev{color:var(--dev-orange);} 

/* ── Entries list ───────────────────────── */

.entries-list .entry-list-item{
  border-bottom:1px solid var(--border-color);
  padding:1.5rem 0;
}

.entries-list .entry-title{
  margin:0;
  font-size:1.25rem;
}

.entry-meta{
  margin:.3rem 0 .8rem;
  font-size:.9rem;
  color:var(--border-color);
}

.entry-summary{margin:.2rem 0 0;}

/* ── Single entry page ──────────────────── */

.entry-page .entry-title{
  margin-top:0;
  font-size:2rem;
}

.entry-tag{
  display:inline-block;
  margin-right:.5rem;
  font-size:.85rem;
  opacity:.75;
}

/* ── Footer ─────────────────────────────── */

.site-footer{
  border-top:1px solid var(--border-color);
  padding:1.5rem 0;
  font-size:.9rem;
  text-align:center;
} 

================================================
FILE: changelog/Templates/index-template/archives.html
================================================
<!DOCTYPE html>
<html>
  {{> head}}
  <body>

    {{> header}}

    <h1>Archives</h1>

    {{#archives}}
      {{#months}}
      <hr>
      <h3 class="archive">{{month}} {{year}}&nbsp;&nbsp;<small>{{entries.length}} post{{s}}</small></h3>

      <small>
      {{#entries}}
      <a class="archive" href="{{{url}}}">{{title}}</a>{{^last}}&nbsp;&nbsp;·&nbsp;{{/last}}
      {{/entries}}
      </small>

      <br>
      {{/months}}
    {{/archives}}

    {{> footer}}

  </body>
</html>

================================================
FILE: changelog/Templates/index-template/entries.html
================================================
<!DOCTYPE html>
<html>
  {{> head}}
  <body>

    {{> header}}

    {{^pagination.previous}}
      {{> home-summary}}
      <hr class="full">
    {{/pagination.previous}}

    <small style="margin-top: -.625em;display: block;">
    {{#pagination.previous}}Page {{pagination.current}} of {{pagination.total}}{{/pagination.previous}}
    {{^pagination.previous}}Latest posts:{{/pagination.previous}}
    </small>

    <br><br>

    {{#entries}}
    <a href="{{{url}}}" class="row"><b>{{title}}</b>&nbsp;{{#date}}&nbsp;·&nbsp;&nbsp;<span style="white-space: nowrap;">{{date}}</span>{{/date}}</a>
    {{/entries}}

    <br><br><br>

    {{#pagination}}

      {{#previous}}
      <a class="menu" href="/page/{{previous}}">&larr;&nbsp;Newer posts</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      {{/previous}}

      {{#next}}
      <a class="menu" href="/page/{{next}}">Next page &rarr;</a>
      {{/next}}

      <hr class="full">

      <div style="text-align: right;">
      <small>Page {{current}} of {{total}}</small>
      </div>

    {{/pagination}}

    <br>

    {{> footer}}
  </body>
</html>

================================================
FILE: changelog/Templates/index-template/entry.html
================================================
<!DOCTYPE html>
<html>
  {{> head}}
  <body>
    {{> header}}

    {{#entry}}
    <div class="entry">

      {{#tags.length}}
      <div class="tag-badges">
        {{#tags}}
        <span class="tag {{slug}}"><a href="/tagged/{{slug}}">{{name}}</a></span>
        {{/tags}}
      </div>
      {{/tags.length}}

      {{{html}}}

      {{#date}}
      <small>Posted on {{date}}</small>
      {{/date}}

      {{#tags.length}}
      <small>
        {{#tags}}
        &nbsp;&nbsp;<a href="/tagged/{{slug}}">#{{name}}</a>&nbsp;&nbsp;
        {{/tags}}
      </small>
      {{/tags.length}}

      {{> pluginHTML}}

      <br><br>
      </div>

      <br><br><br>
      <hr class="full">

      {{#adjacent}}
      <br>
      {{/adjacent}}


      {{#next}}
      <small><a href="{{{url}}}">&larr;&nbsp;Next post</a></small>
      {{/next}}

      {{#next}}{{#previous}}<small>&nbsp;&nbsp;&nbsp;·&nbsp;&nbsp;&nbsp;</small>{{/previous}}{{/next}}

      {{#previous}}
      <small><a href="{{{url}}}">Previous post&nbsp;&rarr;</a></small>
      {{/previous}}

      <br>

    {{/entry}}

    {{> footer}}
  </body>
</html>


================================================
FILE: changelog/Templates/index-template/error.html
================================================
<!DOCTYPE html>
<html>
  {{> head}}
  <body>
    {{> header}}

    <h1>{{error.title}}</h1>
    <p>{{error.message}}</p>

    {{> footer}}
  </body>
</html>

================================================
FILE: changelog/Templates/index-template/feed.rss
================================================
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
  <title><![CDATA[ {{{title}}}]]></title>
  <link>{{{blogURL}}}</link>
  <atom:link href="{{{blogURL}}}/feed.rss" rel="self" type="application/rss+xml"/>
  <description><![CDATA[ The feed of updates to {{{title}}} ]]></description>
  {{#recentEntries}}
  <item> 
    <title><![CDATA[ {{{title}}} ]]></title>
    <link>{{{absoluteURL}}}</link>
    <guid>{{{absoluteURL}}}</guid>
    {{! RSS feeds need a RFC 822 date}}
    <pubDate>{{#formatDate}}ddd, DD MMM YYYY HH:mm:ss ZZ{{/formatDate}}</pubDate>
    <dc:creator><![CDATA[ {{{title}}} ]]></dc:creator>
    <description><![CDATA[ {{#encodeXML}} {{{body}}} {{/encodeXML}} ]]></description>
  </item>
  {{/recentEntries}}
</channel>
</rss>

================================================
FILE: changelog/Templates/index-template/footer.html
================================================
<footer class="site-footer">
  <div class="container">
    <small>© {{year}} Julep AI · <a href="https://julep.ai">julep.ai</a></small>
  </div>
</footer>

<script src="{{{scriptURL}}}" type="text/javascript"></script>

================================================
FILE: changelog/Templates/index-template/head.html
================================================
<head>
  <meta charset="utf-8">
  <title>{{> title}}</title>
  <meta name="description" content="{{> description}}">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="alternate" type="application/rss+xml" title="RSS Feed for {{title}}" href="{{{feed_url}}}">
  <link rel="stylesheet" href="{{{cssURL}}}">
  {{#avatar}}
  <link rel="icon" href="{{{avatar_url}}}" type="image/x-icon">
  {{/avatar}}
</head>

================================================
FILE: changelog/Templates/index-template/header.html
================================================
<a href="/" id="logo">
  {{#avatar}}
  <img src="{{{avatar_url}}}" class="{{#roundAvatar}}rounded{{/roundAvatar}}" alt="{{title}}"/><br>
  {{/avatar}}
  {{title}}
</a>
<br>

<a class="menu" href="https://julep.ai/" target="_blank" rel="noopener">Website</a>
<a class="menu" href="https://dashboard.julep.ai/" target="_blank" rel="noopener">Dashboard</a>
<a class="menu" href="https://docs.julep.ai/" target="_blank" rel="noopener">Docs</a>

<!-- Custom channel navigation: separates Stable (main) and Dev updates -->
<nav class="channels">
  <a href="/tagged/main" class="stable">Stable Updates</a>
  <a href="/tagged/dev" class="dev">Dev Channel</a>
</nav>

<br><br>
<hr class="full">

================================================
FILE: changelog/Templates/index-template/home-summary.html
================================================
<h1 style="font-size:2.5em;">✨ Latest Highlights</h1>
<small style="display:block;margin-top:-0.5em;margin-bottom:0.5em;">15 August 2025 Release</small>
<span class="tag main"><a href="/tagged/main">main</a></span>
<ul>
  <li><strong>GPT-5 Model Family Support</strong><br>
    Added support for GPT-5 model family with 8 variants (gpt-5, gpt-5-mini, gpt-5-nano).</li>

  <li><strong>Comprehensive GPT-5 Documentation</strong><br>
    Added comprehensive GPT-5 documentation including capabilities, pricing, and parameters.</li>

  <li><strong>LiteLLM Proxy Configuration</strong><br>
    Added GPT-5 models to LiteLLM proxy configuration with appropriate tags and API keys.</li>
</ul>

================================================
FILE: changelog/Templates/index-template/package.json
================================================
{
  "name": "Index",
  "locals": {
    "page_size": 20
  },
  "views": {
    "search.html": {
      "partials": {
        "title": "Search - {{{title}}}",
        "description": "Search all the entries posted on {{{title}}}"
      }
    },
    "archives.html": {
      "url": "/archives",
      "partials": {
        "title": "Archives - {{{title}}}",
        "description": "All the entries posted on {{{title}}}"
      }
    },
    "public.html": {
      "partials": {
        "title": "Index of {{{path}}}",
        "description": "All the files and folders inside {{{path}}}"
      }
    },
    "entries.html": {
      "partials": {
        "title": "{{{title}}}",
        "description": "The latest entries posted on {{{title}}}"
      }
    },
    "entry.html": {
      "partials": {
        "title": "{{{entry.title}}} - {{{title}}}",
        "description": "{{{entry.summary}}}"
      }
    },
    "error.html": {
      "partials": {
        "title": "{{{error.title}}} - {{{title}}}",
        "description": "Error on {{{title}}}"
      }
    },
    "tagged.html": {
      "partials": {
        "title": "Entries tagged {{{tag}}} from {{{title}}}",
        "description": "All of the entries posted on {{{title}}} tagged {{{tag}}}"
      }
    }
  }
}

================================================
FILE: changelog/Templates/index-template/public.html
================================================
<!DOCTYPE html>
<html>
  {{> head}}
  <body>
    <style>
      body {margin: 2em;}
      td, tr {border:none;}
    </style>
    <h1>
      {{#breadcrumbs}}
      <a href="{{path}}">{{name}}</a> /
      {{/breadcrumbs}}
      {{dirname}}
    </h1>
    <table>
      {{#contents}}
      <tr>
        <td><a href="{{path}}">{{name}}</a></td>
      </tr>
      {{/contents}}
    </table>
  </body>
</html>

================================================
FILE: changelog/Templates/index-template/robots.txt
================================================
User-agent: *
Allow: /
Sitemap: {{{blogURL}}}/sitemap.xml

================================================
FILE: changelog/Templates/index-template/script.js
================================================
{{{appJS}}}

// This script is embedded in the footer of every page

================================================
FILE: changelog/Templates/index-template/search.html
================================================
<!DOCTYPE html>
<html>
  {{> head}}
  <body>
    {{> header}}

    <form action='/search'>
      <input name="q" type="text" placeholder="Enter a search term..." value="{{#query}}{{query}}{{/query}}" autofocus/>
      <input type="submit" value="Search">
    </form>

    <br>

    {{#query}}
    {{^entries}}
    <p>Sorry, nothing found for “{{query}}”</p>
    {{/entries}}
    {{/query}}

    {{#entries}}
    <a href="{{{url}}}" class="row"><b>{{title}}</b> {{#date}}&nbsp;·&nbsp; <span style="white-space: nowrap;">{{date}}</span>{{/date}}</a>
    {{/entries}}

    {{> footer}}

  </body>
</html>

================================================
FILE: changelog/Templates/index-template/sitemap.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
  <url>
    <loc>{{blogURL}}</loc> 
  </url>
  <url>
    <loc>{{blogURL}}/archives/</loc> 
  </url>
  {{#menu}}
  {{#isPage}}
  <url>
    <loc>{{blogURL}}{{url}}/</loc> 
  </url>
  {{/isPage}}
  {{/menu}}    
  {{#allEntries}}  
  <url>
    <loc>{{blogURL}}{{url}}/</loc> 
  </url>
  {{/allEntries}}  
</urlset>

================================================
FILE: changelog/Templates/index-template/style.css
================================================
/* This template tag is replaced by CSS when this file is rendered */
{{{appCSS}}}

body {
  font: 1.125rem / 1.4 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
  word-wrap: break-word;
  max-width: 32em;
  margin: 0 auto;
  padding: 2.5em 1.25em 10em;
  color: #333;
}

/* Text */

a {color: inherit;text-decoration: none;padding: 0.25em 0.5em;background: none;margin: -0.25em -0.5em;border-radius: 4px;transition: background 0.2s ease;}
a:hover {background: rgba(0,0,0,0.02);color: #468CC7;}
a:active {opacity: 0.9}

h1 {font-size: 2.25em;line-height:1.2;}
h2 {font-size: 1.25em;}
h3, h4, h5, h6 {font-size: 1em}

hr {margin: 1.25em 0;border: 0;border-top: 1px solid #eee;}
br {width: 100%;clear: both;float: none;}

blockquote {padding: 0 0 0 0.75em;color: #777}

small, .menu, .caption {color: #9e9e9e;font-weight: 400;}
sup {font-size: 0.83;line-height: 0;vertical-align: super;}

.entry {position: relative;}
.entry a {text-decoration: underline;}

.caption {font-size: smaller;}
.caption {max-width: 36rem;display: block;margin: .625em auto 1.25em auto;}

/* Theme specific styles */

#logo {font-weight: bold;display: inline-block;line-height: 1.75}
#logo img {max-width: 8em;max-height:8em;margin-bottom: 0.25em}
#logo img.rounded {border-radius: 50%;margin-left: -1em}

#logo:hover {opacity: 0.8;background: none;color: inherit;}
#logo:active {opacity: 0.75}

a.menu {margin-right: 0em;line-height: 1.75}


a.row {
  display: inline-block;
  position: relative;
  margin-top: 0.25em;
  margin-bottom: 0.25em;
  padding-right: 16em;
  width: 50vw;
  left: 50%;
  margin-left: -16.5em;
}

/* This allows the horizontal rules and full-width links on the index page to fill the entire screen without triggering a scrollbar */
hr.full {
  width: 50vw;
  padding-left: 16em;
  position: relative;
  left: 50%;
  margin-left: -16em;
}

.archive {color: black;line-height: 1.75;margin-bottom: 0}

input[name=q] {
  display: inline-block;
  font-size: inherit;
  box-sizing: border-box;
  width: 70%;
  padding: 0.444em 0.666em;
  color: #555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
  -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
  font-family: inherit;
}

input[type=submit] {
    display: inline-block;
    padding: 0.444em 0.666em;
    font-size: inherit;
    cursor: pointer;
    text-align: center;
    white-space: nowrap;
    border: 1px solid transparent;
    border-radius: 4px;
    padding-left: 2em;
    border: 1px solid #ccc;
    background: url(data:image/svg+xml;base64,PHN2ZyBpZD0iaWNvbi1zZWFyY2giIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGlkPSJzZWFyY2giIGQ9Ik03Ljk5LDYuOTI4TDUuODQ3LDQuNzg0YzAuMjg5LTAuNDc2LDAuNDU4LTEuMDMzLDAuNDU4LTEuNjNDNi4zMDUsMS40MTIsNC44OTUsMCwzLjE1MiwwDQoJQzEuNDExLDAsMCwxLjQxMiwwLDMuMTU0YzAsMS43NDEsMS40MTIsMy4xNTEsMy4xNTMsMy4xNTFjMC41OTcsMCwxLjE1NC0wLjE2OSwxLjYzLTAuNDU4bDIuMTQ1LDIuMTQ2TDcuOTksNi45Mjh6IE0xLjIwMywzLjE1NA0KCWMwLjAwMi0xLjA3NywwLjg3NC0xLjk0OSwxLjk1MS0xLjk1MWMxLjA3NiwwLjAwMiwxLjk0OCwwLjg3NCwxLjk0OSwxLjk1MUM1LjEwMSw0LjIzLDQuMjI5LDUuMTAzLDMuMTUzLDUuMTAzDQoJQzIuMDc1LDUuMTAzLDEuMjA1LDQuMjMsMS4yMDMsMy4xNTR6Ii8+DQo8L3N2Zz4=) 0.8em center/0.8em no-repeat;

}

input#search:focus {
  outline: none;
}

:-moz-placeholder {color: #ccc;}
::-moz-placeholder {color: #ccc;}
:-ms-input-placeholder {color: #ccc;}
::-webkit-input-placeholder {color: #ccc;}

a.footnote-ref {margin-left: 0;margin-right: 0;text-decoration: none;}

/* CODE */

code {
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  background: rgba(0,0,0,.03);
  border-radius: 4px;
  font-size: smaller;
  line-height: inherit;
  margin: 0;
}

p code {
  line-height: 1em;
  padding: 2px;
  margin-left: -2px;
  display: inline-block;
}

pre code {
  display: block;padding: 12px 18px;
  margin: 0 0 0 -18px;
  background-color: rgba(0,0,0,.02)
}

/* TABLES */

table {
  display: block;
  width: auto;
  overflow: auto;
  word-break: normal;
  word-break: keep-all;
  border-collapse: collapse;
  border-spacing: 0;
  box-sizing: border-box;
  font-size: inherit;
  line-height: inherit;
}

tr {box-sizing: border-box;border-top: 1px solid #ccc;padding: 0}
th, td {box-sizing: border-box;border: 1px solid #ddd;padding: 5px 12px 6px}

/* LISTS */

ul, ol {
  margin-left: 0;
  padding-left: 0;
  list-style-position: outside;
  margin-bottom: 1.25em;
}

ul {list-style: circle;}

ul ul, ol ul, ol ol, ul ol {margin-left: 1.25em;margin-bottom: 0}

li {margin: 0}

/* IMAGES */

img {vertical-align: middle;max-width: 100%;height: auto;}


/* VIDEOS & tweets */
/* Only apply vertical margin to direct
   descendants, prevents multi margins */

iframe {width: 100%;}
.entry > iframe {margin: 1.25em 0!important;}

/* Small caps */
.small-caps {}

/* Double quote (") marks */
.pull-double{margin-left:-.45em}
.push-double{margin-right:.45em}

/* Single quote (') marks */
.pull-single{margin-left:-.20em}
.push-single{margin-right:.20em}

/* Optical margin alignment for particular letters */
.pull-T, .pull-V, .pull-W, .pull-Y {margin-left: -0.1em}
.push-T, .push-V, .push-W, .push-Y {margin-right: 0.1em}

.pull-O, .pull-C, .pull-o, .pull-c {margin-left: -0.06em}
.push-O, .push-C, .push-o, .push-c {margin-right: 0.06em}

.pull-A {margin-left: -0.04em}
.push-A {margin-right: 0.04em}

/* Layout tags */

.wide.left .caption {margin-left: 22.680412113%}
.wide.right .caption {margin-right: 22.680412113%}

.right {float: right;}
.left {float: left;}


.margin, .inside {
  box-sizing: border-box;
  width: 29.3333%;
}

.margin {  position: absolute;}

.left.inside {margin-right: 2em}
.right.inside {margin-left: 2em}

.margin blockquote {margin: 3px 0;color:#232323;padding: 3px 6px;font-size: smaller;}
.margin blockquote p {margin: 0}

.margin h1, .margin h2, .margin h3 {margin-top:0}

.margin img,
.column img {margin-top: 6px}

.margin p, .inside p {font-style: italic;margin-top: 0}

.left.margin {
  left: -29.3333%;
  padding-right: 2em;
  text-align: right;
}

.right.margin {
  right: -29.3333%;
  padding-left: 2em;
}

.wide {
  width: 158.6666667%;
  margin-left: -29.3333333%;
  overflow: auto; /* collapse internal margins */
}

.wide.left, .wide.right {width: 129.3333333%;float: none;}
.wide.left {margin: 0 0 0 -29.3333333%}
.wide.right {margin: 0 -29.3333333% 0 0}


.column {
  box-sizing: border-box;
  float: left;
}

.column .caption {margin-bottom: 6px}

.column.two {
  width: 50%;
  padding-right: 12px;
}

.column.three {
  width: 33%;
  padding-right: 24px;
}

.column.two + .column.two {
  padding: 0 0 0 12px;
}

.column h1,
.column h2,
.column h3 {margin-bottom: -12px}

/* The theme used by the syntax highlighting app */
.hljs {display: block;overflow-x: auto;}
.hljs-comment, .hljs-quote, .hljs-variable {color: #008000;}
.hljs-keyword, .hljs-selector-tag, .hljs-built_in, .hljs-name, .hljs-tag {color: #00f;}
.hljs-string, .hljs-title, .hljs-section, .hljs-attribute, .hljs-literal, .hljs-template-tag, .hljs-template-variable, .hljs-type, .hljs-addition {color: #a31515;}
.hljs-deletion, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-meta {color: #2b91af;}
.hljs-doctag {color: #808080;}
.hljs-attr {color: #f00;}
.hljs-symbol, .hljs-bullet, .hljs-link {color: #00b0e8;}
.hljs-emphasis {font-style: italic;}
.hljs-strong {font-weight: bold;}


@media screen and (max-width: 952px) {

  .entry .margin {position: relative;top: auto;left: auto;right: auto;bottom: auto;}
  .entry .margin.right {float: right;}
  .entry .margin.left {text-align: left;display: block;float: left;}

  .entry .margin .caption,
  .entry .margin p {margin-bottom: 6px;text-align: left;}

  .wide, .wide.left, .wide.right {width: 100%;margin: 0}
  .wide.left .caption {margin-left: 0}
}

@media screen and (max-width: 34em) {

  hr.full, a.row {width: 100%;margin-left: 0;margin-right:0;padding-right: 0;padding-left:0;position: relative;left: 0;}

}

@media screen and (max-width: 730px) {

  ul, li {margin-left: 24px}
  ul ul, ol ul, ol ol, ul ol {margin-left: 0}
  .nav .right {clear: both;float: none;margin-top: 3px}
  a.search {margin-left: 0}
  body {font-size: 1rem;padding: 1rem}

}

@media screen and (max-width: 400px) {
  body {font-size: 0.9rem;padding: 0.5rem;margin: 0}
}

/* ─────────────────────────────────────────────
   Julep Custom – Channel navigation styles
   ------------------------------------------------------------------ */

nav.channels{
  margin-top:.5rem;
}

nav.channels a{
  font-weight:600;
  margin-right:1rem;
}

nav.channels a.stable{
  color:#28a745;
}

nav.channels a.dev{
  color:#d49144;
}

/* ─────────────────────────────────────────────
   Tag badges for entry pages
   ------------------------------------------------------------------ */
.tag-badges{
  margin-bottom:1rem;
}

.tag{
  display:inline-block;
  font-size:0.75rem;
  font-weight:600;
  padding:0.2em 0.6em;
  border-radius:4px;
  margin-right:0.4rem;
  text-transform:uppercase;
}

.tag a{color:#fff;text-decoration:none;}

.tag.main{background:#28a745;color:#fff;}
.tag.dev{background:#d49144;color:#fff;}

/* ─────────────────────────────────────────────
   Footer styles
   ------------------------------------------------------------------ */
.container{
  width:100%;
  max-width:32em;
  margin:0 auto;
  padding:0 1rem;
}

.site-footer{
  border-top:1px solid #eee;
  padding:2rem 0;
  text-align:center;
  font-size:.85rem;
  color:#9e9e9e;
}

.site-footer a{color:inherit;text-decoration:none;}
.site-footer a:hover{text-decoration:underline;}

================================================
FILE: changelog/Templates/index-template/tagged.html
================================================
<!DOCTYPE html>
<html>
  {{> head}}
  <body>
    {{> header}}

    <h1>{{tag}}</h1>

    <hr class="full">

    <small style="margin-top: -.625em;display: block;">
    All posts tagged {{tag}}:
    </small>

    {{#entries}}
    <a href="{{{url}}}" class="row"><b>{{title}}</b> {{#date}}&nbsp;·&nbsp; <span style="white-space: nowrap;">{{date}}</span>{{/date}}</a>
    {{/entries}}

    {{> footer}}

  </body>
</html>


================================================
FILE: changelog/dev/2025-06-17.md
================================================
---
title: "Julep AI Changelog"
date: 2025-06-17
tags: [dev]
---

- Added automated Claude-driven documentation update workflows for PR events
- Added manual workflow dispatch for on-demand documentation updates  
- Added automated changelog generation for PRs targeting main and dev branches
- Added changelog synchronization with external Blot blog platform
- Added skip logic with `[skip-claude]` tag to prevent infinite automation loops
- Added changelog templates and infrastructure for automated publishing

================================================
FILE: changelog/dev/2025-06-23.md
================================================
---
title: "Julep AI Changelog"
date: 2025-06-23
tags: [dev]
---

## Development Updates

- Added automated Claude-driven documentation update workflows
- Introduced changelog sync automation with Blot blog platform
- Implemented manual trigger workflows for documentation updates
- Added gating logic to determine when documentation updates are needed
- Created templates for changelog presentation and styling
- Added `include_embeddings` parameter to document APIs for bandwidth optimization

================================================
FILE: changelog/dev/2025-06-25.md
================================================
---
title: "Julep AI Changelog"
date: 2025-06-25
tags: [dev]
---

## Julep AI Changelog - June 25, 2025

- Extended `include_embeddings` parameter to document search endpoints for additional bandwidth optimization

================================================
FILE: changelog/dev/2025-06-26.md
================================================
---
title: "Julep AI Changelog"
date: 2025-06-26
tags: [dev]
---

## Julep AI Changelog - June 26, 2025

- Added `include_embeddings` parameter to document APIs for bandwidth optimization
- Added JWT allowed skew configuration option for improved token validation flexibility
- Pinned vectorizer worker to version v0.10.5 for improved stability

================================================
FILE: changelog/dev/2025-06-30.md
================================================
---
title: "Julep AI Changelog"
date: 2025-06-30
tags: [dev]
---

## Julep AI Changelog - June 30, 2025

### Tool Calling Enhancements
- Added comprehensive tool calling functionality in tasks and sessions for enhanced agent capabilities
- Added integration tools conversion to OpenAI-compatible format for better tool interoperability
- Added new tool runner system for improved tool execution and management

### New API Parameters
- Added prompt step parameters: `tool_choice`, `unwrap`, `auto_run_tools`, and `disable_cache` for granular control
- Added session parameters: `auto_run_tools` and `forward_tool_calls` for enhanced session behavior

### Anthropic Tool Support
- Added support for new Anthropic tool types: `computer_20241022`, `text_editor_20241022`, and `bash_20241022`

### Infrastructure & Platform
- Added feature flags integration using Unleash with OpenFeature for controlled feature rollouts
- Refactored prompt steps to integrate with tool runner functionalities for better performance

================================================
FILE: changelog/dev/2025-07-02.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-02
tags: [dev]
---

## Julep AI Changelog - July 2, 2025

### Tool Calling Updates
- Changed default value of `auto_run_tools` from `true` to `false` in PromptStep for safer defaults
- Fixed tool call prevention when `auto_run_tools` is disabled by passing empty tools list to model
- Added comprehensive test coverage for `auto_run_tools` behavior in both enabled and disabled states

### API Schema Enhancements  
- Renamed `ApiCallDef` to separate `ApiCallDef-Input` and `ApiCallDef-Output` variants for better type safety
- Added new parameter schema definitions: `ParameterSchema-Input`, `ParameterSchema-Output`, and `ParameterSchemaUpdate`
- Added property definition types: `PropertyDefinition-Input`, `PropertyDefinition-Output`, and `PropertyDefinitionUpdate`

================================================
FILE: changelog/dev/2025-07-03.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-03
tags: [dev]
---

## Julep AI Changelog - July 3, 2025

### Chat API Enhancements
- Added `auto_run_tools` property to ChatInput with default value of `false`
- Added `recall_tools` property to ChatInput with default value of `true` for controlling tool recall
- Implemented automatic tool execution when `auto_run_tools=true` - tools are executed automatically and results fed back to the model
- Added new chat implementation that supports automatic tool calling workflow
- Separated legacy and new chat code for better maintainability

### API Architecture Improvements
- Refactored `execute_integration` and `execute_system` functions to accept explicit parameters instead of context objects
- Added context-free tool execution capability for use in chat endpoints
- Improved code organization with dedicated auto-tools and legacy directories

================================================
FILE: changelog/dev/2025-07-04.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-04
tags: [dev]
---

## Julep AI Changelog - July 4, 2025

### Chat API Enhancements
- Added `recall_tools` property to ChatInput with default value of `true`
- Enhanced chat session control over tool request/response recall behavior
- Improved automatic tool execution workflow with better message history management

================================================
FILE: changelog/dev/2025-07-05.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-05
tags: [dev]
---

## Julep AI Changelog - July 5, 2025

### Documentation Enhancements
- Enhanced documentation for automatic tool execution across chat, sessions, and tools
- Added comprehensive examples and usage patterns for `auto_run_tools` and `recall_tools`
- Added documentation for `params_schema` in API call tools with JSON Schema validation
- Updated SDK documentation with new tool integration examples for Python and Node.js

================================================
FILE: changelog/dev/2025-07-08.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-08
tags: [dev]
---

## Julep AI Changelog - July 8, 2025

### Model Additions
- Added gemini-2.5-pro model to LiteLLM configuration
- Added gemini-2.5-flash model to LiteLLM configuration

================================================
FILE: changelog/dev/2025-07-09.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-09
tags: [dev]
---

## Julep AI Changelog - July 9, 2025

### Features
- Enhanced LLM client to support custom API keys from user secrets
- Added model name conversion utility for LiteLLM integration
- Added automated workflow to sync model documentation from configuration
- Enhanced supported models page with transparent feature comparison tables
- Added comprehensive model capability tracking (context window, max output, tool calling, vision, audio, caching, cost tiers)

### Bug Fixes
- Fixed cartesian product bug in get_task query that caused duplicate tools
- Re-enabled model validation in session chat rendering

================================================
FILE: changelog/dev/2025-07-18.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-18
tags: [dev]
---

## Julep AI Changelog - July 18, 2025

### Documentation
- Added explanatory note about dollar expressions (`$`) in task definitions for dynamic variable referencing

================================================
FILE: changelog/dev/2025-07-31.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-31
tags: [dev]
---

- Added secrets support to task definitions for secure access in task expressions
- Removed support for claude-3-sonnet model from LLM proxy configuration

================================================
FILE: changelog/dev/2025-08-06.md
================================================
---
title: "Julep AI Changelog"
date: 2025-08-06
tags: [dev]
---

- Added gemini-2.5-pro-preview-06-05 model to LLM proxy configuration

================================================
FILE: changelog/dev/2025-08-07.md
================================================
---
title: "Julep AI Changelog"
date: 2025-08-07
tags: [dev]
---

- Added Llama model cost multiplier with LLAMA_MODEL_MULTIPLIER environment variable
- Enhanced usage tracking with automatic Llama model detection
- Deprecated discontinued Groq models (llama-3.1-70b, mistral-saba-24b, qwen-qwq-32b)
- Migrated Cerebras models to OpenRouter endpoints
- Updated model configurations in LLM proxy

================================================
FILE: changelog/dev/2025-08-08.md
================================================
---
title: "Julep AI Changelog"
date: 2025-08-08
tags: [dev]
---

- Migrated Anthropic models from direct API to AWS Bedrock endpoints
- Updated LiteLLM version from 1.57.0 to 1.74.9 for improved compatibility
- Added Bedrock API key support and AWS region configuration
- Re-enabled claude-3-sonnet model via Bedrock integration
- Added new claude-opus-4-1 model support
- Updated dependency versions for enhanced Bedrock integration

================================================
FILE: changelog/dev/2025-08-15.md
================================================
---
title: "Julep AI Changelog"
date: 2025-08-15
tags: [dev]
---

- Added support for GPT-5 model family with 8 variants (gpt-5, gpt-5-mini, gpt-5-nano)
- Added comprehensive GPT-5 documentation including capabilities, pricing, and parameters
- Added GPT-5 models to LiteLLM proxy configuration with appropriate tags and API keys

================================================
FILE: changelog/stable (main)/2025-01-31.md
================================================
---
title: "Julep AI Changelog"
date: 2025-01-31
tags: [main]
---

- **Major Feature**: Added experimental CLI with comprehensive management commands for agents and tasks ✨
- **Minor Feature**: Introduced new import functionality for agents in CLI ✨
- **Critical Fix**: Replaced `GITHUB_ENV` with `GITHUB_OUTPUT` for environment variable handling 🔧
- **Minor Fix**: Fixed CLI documentation by removing `pipx` installation 🔧
- **Major Enhancement**: Refactored task execution workflow for modularity 📈
- **Minor Enhancement**: Improved documentation with updated quickstart and lifecycle guides 📈
- **Key Performance**: Enhanced CLI with rich text and progress indicators 🚀
- **Secondary Performance**: Reduced API response times by 15% 🚀
- **Critical Breaking**: Removed `previous_inputs` parameter in workflows 💥
- **Other Breaking**: Deprecated legacy API (v1) to be removed next month 💥


================================================
FILE: changelog/stable (main)/2025-02-14.md
================================================
---
title: "Julep AI Changelog"
date: 2025-02-14
tags: [main]
---

- **Major Feature**: Default `parallelism` in MapReduce now set to `task_max_parallelism` for optimized processing ✨
- **Minor Feature**: Backward compatibility support added for older syntax in `base_evaluate` ➕
- **Critical Fix**: Resolved data inconsistencies in subworkflow validations for smoother operations 🔧
- **Minor Fix**: Addressed hotfixes in `workflows.py` for robust workflow handling 🔧
- **Major Enhancement**: Introduced `backwards_compatibility` to refine evaluation logic 📈
- **Minor Enhancement**: Enhanced CLI documentation and guides for improved user understanding 📈
- **Key Performance**: Implemented Prometheus metrics for advanced monitoring and streamlined performance 🚀
- **Secondary Performance**: Enhanced task evaluation functions with efficient expression handling 🚀
- **Critical Breaking**: Deprecated legacy API with a migration guide for users 💥
- **Other Breaking**: Updated agent settings to be untyped, affecting configuration handling 💥


================================================
FILE: changelog/stable (main)/2025-04-11.md
================================================
---
title: "Julep AI Changelog"
date: 2025-04-11
tags: [main]
---

- **Major Feature**: Introduced support for Gemini models in `litellm-config.yaml` ✨
- **Minor Feature**: Added environment configuration for Open Responses API ✨
- **Critical Fix**: Corrected cardinality violations in SQL queries across agents-api 🔧
- **Minor Fix**: Resolved documentation formatting issues in 21 files 🔧
- **Minor Fix**: `get_live_urls` now uses `asyncio.to_thread` to avoid blocking the event loop 🔧
- **Major Enhancement**: Refactored API calls to include developer ID for better tracking 📈
- **Minor Enhancement**: Improved Gunicorn worker configurability via environment variables 📈
- **Secondary Performance**: Integrated OpenAPI model and TyeSpecs for expanded functionality 🚀
- **Critical Breaking**: Replaced Postgraphile with Hasura for GraphQL services 💥
- **Other Breaking**: Updated Docker configurations to adhere to new deployment requirements 💥


================================================
FILE: changelog/stable (main)/2025-05-09.md
================================================
---
title: "Julep AI Changelog"
date: 2025-05-09
tags: [main]
---

- **Minor Docs**: Added links to cookbooks for Quick, Community, and Industry pages.
- **Minor Docs**: Updated cookbook links to use absolute GitHub URLs.


================================================
FILE: changelog/stable (main)/2025-05-21.md
================================================
---
title: "Julep AI Changelog"
date: 2025-05-21
tags: [main]
---

<!-- ───────────  Core platform improvements merged from *dev*  ─────────── -->

- **Major Feature**: Introduced first-class **Projects**!  
  Adds `projects` table, association tables, CRUD endpoints, canonical-name support, and project-aware validation across agents, users, files, and sessions
- **Major Feature**: Landed encrypted **Secrets Vault** with full CRUD API, master-key encryption, and transparent secret-reference substitution in tool & API definitions ([#1312](https://github.com/julep-ai/julep/pull/1312))

<!-- ───────────  Secrets follow-ups  ─────────── -->

- **Enhancement**: Added **custom-key aliasing** for secrets plus numerous workflow & cost-tracking refactors ([#1356](https://github.com/julep-ai/julep/pull/1356))
- **Enhancement**: Added `decrypt` flag to secrets queries—retrieve values encrypted or in plaintext as needed ([#1369](https://github.com/julep-ai/julep/pull/1369))

<!-- ───────────  Usage, cost & limits  ─────────── -->

- **Enhancement**: Implemented **monthly cost aggregation** + middleware that enforces free-tier usage caps and active-developer checks ([#1351](https://github.com/julep-ai/julep/pull/1351))

<!-- ───────────  Stability & correctness  ─────────── -->

- **Fix**: Re-wrote project-resource SQL views for accurate mapping and removed weak default secrets key in production ([#1362](https://github.com/julep-ai/julep/pull/1362))
- **Fix**: Hardened secrets endpoints & models, fixed insert/delete logic, and expanded expression-evaluator edge-cases ([#1343](https://github.com/julep-ai/julep/pull/1343))

<!-- ───────────  Tooling / DX  ─────────── -->

- **Enhancement**: New GitHub Actions workflow automatically translates README files via Anthropic Claude, replacing the old Python job ([#1433](https://github.com/julep-ai/julep/pull/1433))

- **Other Breaking**: Removed fallback for `DEMO_*` placeholder credentials 💥
- **Minor Docs**: Updated docs and cookbooks to remove `DEMO_API_KEY` references.
- **Minor Docs**: Updated footer use-case links to the new `cookbooks/advanced` paths.

> _This list covers the most significant code-related PRs merged to **main** on 21 May 2025.  
> For everything else, see the full list of [recent pull requests](https://github.com/julep-ai/julep/pulls?q=is:pr+created:>=2025-04-21)._  

---


================================================
FILE: changelog/stable (main)/2025-06-23.md
================================================
---
title: "Julep AI Changelog"
date: 2025-06-23
tags: [main]
---

<!-- ───────────  Major Features & Enhancements  ─────────── -->

- **Major Feature**: Added **metadata support** to chat functionality - enables dynamic system template variables at message level
- **Major Feature**: Extended **agent and task schemas** with project fields and secret references for enhanced configuration management
- **Major Feature**: Added **encrypted API keys infrastructure** with PostgreSQL storage, AES256 encryption, and soft delete functionality
- **Major Feature**: Added **comprehensive system templates documentation** covering template hierarchy, variables, Jinja2 features, and best practices

<!-- ───────────  Platform & Infrastructure  ─────────── -->

- **Enhancement**: Refactored **analytics service** setup - switched to official Metabase image with dedicated PostgreSQL database
- **Enhancement**: Added **new LLM model configurations** - extended Groq support with Llama 4, DeepSeek, and other latest models
- **Enhancement**: Added **optional trigram search** capabilities for improved document search performance

<!-- ───────────  Documentation & Developer Experience  ─────────── -->

- **Documentation**: Updated chat API docs with metadata parameter examples and usage patterns
- **Documentation**: Enhanced agent and session documentation with system template references
- **Documentation**: Added advanced guide for system templates with debugging techniques and best practices

<!-- ───────────  Code Quality & Maintenance  ─────────── -->

- **Enhancement**: Code formatting improvements with consistent multi-line type annotations across autogenerated models
- **Enhancement**: Added comprehensive test coverage for chat metadata functionality with edge case handling

> _This list covers the most significant code-related changes merged to **main** on 23 June 2025.  
> For everything else, see the full list of [recent pull requests](https://github.com/julep-ai/julep/pulls?q=is:pr+created:>=2025-05-23)._  

---

================================================
FILE: changelog/stable (main)/2025-06-30.md
================================================
---
title: "Julep AI Changelog"
date: 2025-06-30
tags: [main]
---

# Changes for June 30, 2025

- Added IDE Integration documentation for Context7 MCP server access
- Enhanced integrations documentation with visual slider component and new asset logos
- Restructured documentation navigation from versions to tabs layout
- Added custom CSS styling for documentation CTA buttons
- Fixed JSON serialization mode in tool creation API

================================================
FILE: changelog/stable (main)/2025-07-04.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-04
tags: [main]
---

# Changes for July 4, 2025

- Added automatic tool execution with `auto_run_tools` parameter for enhanced agent workflows
- Added tool recall control with `recall_tools` parameter for better conversation management
- Implemented OpenAI-compatible tool format conversion for improved integration compatibility
- Added support for new Anthropic tool types: computer, text editor, and bash tools
- Enhanced tool calling system with dedicated tool runner for better performance
- Added feature flags integration using Unleash for controlled feature rollouts
- Improved API schema with separate input/output type definitions for better type safety
- Enhanced prompt step parameters with tool choice, unwrap, and caching control options
- Refactored chat API with auto-tools support and legacy code separation
- Added comprehensive tool execution capabilities for both tasks and sessions

================================================
FILE: changelog/stable (main)/2025-07-05.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-05
tags: [main]
---

# Changes for July 5, 2025

- Added feature flags infrastructure with Unleash integration for controlled feature rollouts
- Added auto-tools chat implementation with automatic tool execution capabilities
- Added enhanced tool runner utilities for improved tool execution performance
- Added parameter schema support for API call tools with JSON Schema validation
- Added `auto_run_tools` and `recall_tools` fields to chat input for better control
- Changed `auto_run_tools` default from `true` to `false` in prompt step definitions
- Enhanced tool execution system with support for all tool types
- Added modular architecture separating legacy and auto-tools implementations
- Added comprehensive test coverage for new auto-tools functionality
- Fixed tool metadata query column alias and improved error handling

================================================
FILE: changelog/stable (main)/2025-07-08.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-08
tags: [main]
---

# Changes for July 8, 2025

- Added gemini-2.5-pro model to LiteLLM configuration with paid tier access
- Added gemini-2.5-flash model to LiteLLM configuration with paid tier access
- Added comprehensive customer support tutorial showing how to build RAG-powered AI assistants
- Added new architecture diagram SVG for improved system visualization
- Enhanced documentation structure with new tutorial navigation
- Updated architecture deep-dive documentation with latest system design

================================================
FILE: changelog/stable (main)/2025-07-18.md
================================================
---
title: "Julep AI Changelog"
date: 2025-07-18
tags: [main]
---

## Julep AI Changelog - July 18, 2025

### Features
- Enhanced LLM client to support custom API keys from user secrets
- Added model name conversion utility for LiteLLM integration
- Added automated workflow to sync model documentation from configuration
- Enhanced supported models page with transparent feature comparison tables
- Added comprehensive model capability tracking (context window, max output, tool calling, vision, audio, caching, cost tiers)

### Bug Fixes
- Fixed cartesian product bug in get_task query that caused duplicate tools
- Re-enabled model validation in session chat rendering

================================================
FILE: cookbooks/IDEAS.md
================================================
<div align="center" id="top">
<img src="https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable=Serverless%20AI%20Workflows%20for%20Data%20%26%20ML%20Teams&font=Source%20Code%20Pro&logo=https%3A%2F%2Fraw.githubusercontent.com%2Fjulep-ai%2Fjulep%2Fdev%2F.github%2Fjulep-logo.svg&owner=1&forks=1&pattern=Solid&stargazers=1&theme=Auto" alt="julep" height=300 />

<br>
  <p>
    <a href="https://dashboard.julep.ai">
      <img src="https://img.shields.io/badge/Get_API_Key-FF5733?style=logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAxTDMgNXYxNGw5IDQgOS00VjVsLTktNHptMCAyLjh2MTYuNEw1IDE2LjJWNi44bDctMy4yem0yIDguMmwtMi0yLTIgMiAyIDIgMi0yeiIvPjwvc3ZnPg==" alt="Get API Key" height="28">
    </a>
    <span>&nbsp;</span>
    <a href="https://docs.julep.ai">
      <img src="https://img.shields.io/badge/Documentation-4B32C3?style=logo=gitbook&logoColor=white" alt="Documentation" height="28">
    </a>
  </p>
  <p>
   <a href="https://www.npmjs.com/package/@julep/sdk"><img src="https://img.shields.io/npm/v/%40julep%2Fsdk?style=social&amp;logo=npm&amp;link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F%40julep%2Fsdk" alt="NPM Version" height="28"></a>
    <span>&nbsp;</span>
    <a href="https://pypi.org/project/julep"><img src="https://img.shields.io/pypi/v/julep?style=social&amp;logo=python&amp;label=PyPI&amp;link=https%3A%2F%2Fpypi.org%2Fproject%2Fjulep" alt="PyPI -
Download .txt
gitextract_2v2u36g9/

├── .agentignore
├── .codex/
│   └── setup.sh
├── .github/
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   ├── feature_request.yml
│   │   └── refactor.yml
│   ├── LICENSE
│   ├── README-CN.md
│   ├── README-FR.md
│   ├── README-JA.md
│   ├── SUPPORT.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── bake-push-to-hub.yml
│       ├── bandit-security-check-python-agents-api.yml
│       ├── changelog-ci.yml
│       ├── changelog-sync.yml
│       ├── claude-changelog-pr.yml
│       ├── claude-code-review.yml
│       ├── claude-docs-manual.yml
│       ├── claude-docs-pr.yml
│       ├── claude.yml
│       ├── docker-bake-on-pr.yml
│       ├── doctoc-on-push.yml
│       ├── generate-changelog.yml
│       ├── generate-openapi-code-from-typespec.yml
│       ├── latest-push-to-hub.yml
│       ├── lint-agents-api-pr.yml
│       ├── lint-integrations-service-pr.yml
│       ├── publish-cli-prerelease.yml
│       ├── sync-model-docs.yml
│       ├── test-agents-api-pr.yml
│       ├── test-integrations-service-pr.yml
│       ├── translate-readme.yml
│       └── typecheck-agents-api-pr.yml
├── .gitignore
├── .gitmodules
├── .mcp.json
├── AGENTS.md
├── CHANGELOG.md
├── README.md
├── changelog/
│   ├── Templates/
│   │   ├── JulepCustom/
│   │   │   ├── entries.html
│   │   │   ├── entry.html
│   │   │   ├── footer.html
│   │   │   ├── head.html
│   │   │   ├── header.html
│   │   │   ├── package.json
│   │   │   └── style.css
│   │   └── index-template/
│   │       ├── archives.html
│   │       ├── entries.html
│   │       ├── entry.html
│   │       ├── error.html
│   │       ├── feed.rss
│   │       ├── footer.html
│   │       ├── head.html
│   │       ├── header.html
│   │       ├── home-summary.html
│   │       ├── package.json
│   │       ├── public.html
│   │       ├── robots.txt
│   │       ├── script.js
│   │       ├── search.html
│   │       ├── sitemap.xml
│   │       ├── style.css
│   │       └── tagged.html
│   ├── dev/
│   │   ├── 2025-06-17.md
│   │   ├── 2025-06-23.md
│   │   ├── 2025-06-25.md
│   │   ├── 2025-06-26.md
│   │   ├── 2025-06-30.md
│   │   ├── 2025-07-02.md
│   │   ├── 2025-07-03.md
│   │   ├── 2025-07-04.md
│   │   ├── 2025-07-05.md
│   │   ├── 2025-07-08.md
│   │   ├── 2025-07-09.md
│   │   ├── 2025-07-18.md
│   │   ├── 2025-07-31.md
│   │   ├── 2025-08-06.md
│   │   ├── 2025-08-07.md
│   │   ├── 2025-08-08.md
│   │   └── 2025-08-15.md
│   └── stable (main)/
│       ├── 2025-01-31.md
│       ├── 2025-02-14.md
│       ├── 2025-04-11.md
│       ├── 2025-05-09.md
│       ├── 2025-05-21.md
│       ├── 2025-06-23.md
│       ├── 2025-06-30.md
│       ├── 2025-07-04.md
│       ├── 2025-07-05.md
│       ├── 2025-07-08.md
│       └── 2025-07-18.md
├── cookbooks/
│   ├── IDEAS.md
│   ├── README.md
│   ├── __init__.py
│   ├── advanced/
│   │   ├── 00-Devfest-Email-Assistant.ipynb
│   │   ├── 01-website-crawler.ipynb
│   │   ├── 02-sarcastic-news-headline-generator.ipynb
│   │   ├── 03-trip-planning-assistant.ipynb
│   │   ├── 04-hook-generator-trending-reels.ipynb
│   │   ├── 05-video-processing-with-natural-language.ipynb
│   │   ├── 06-browser-use.ipynb
│   │   ├── 07-personalized-research-assistant.ipynb
│   │   ├── 08-rag-chatbot.ipynb
│   │   ├── 09-companion-agent.ipynb
│   │   ├── 10-reel-generator.ipynb
│   │   └── 11-hacker-news-personalized-generator.ipynb
│   └── basics/
│       ├── 01-Hello-Agent.ipynb
│       ├── 02-Simple-Task.ipynb
│       ├── 03-Adding-Tools.ipynb
│       ├── 04-Parallel-Steps.ipynb
│       └── 05-RAG-and-Docs.ipynb
├── deploy/
│   ├── responses-build-docker-compose.yaml
│   ├── simple-docker-compose.yaml
│   └── standalone-docker-compose.yaml
├── docker-bake.hcl
├── docker-compose.yml
├── documentation/
│   ├── AGENTS.md
│   ├── FAQ.mdx
│   ├── README.md
│   ├── advanced/
│   │   ├── agentic-patterns.mdx
│   │   ├── architecture-deep-dive.mdx
│   │   ├── chat.mdx
│   │   ├── files.mdx
│   │   ├── lifecycle.mdx
│   │   ├── localsetup.mdx
│   │   ├── multi-agent-multi-user-sessions.mdx
│   │   ├── new-syntax.mdx
│   │   ├── python-expression.mdx
│   │   ├── render.mdx
│   │   ├── secrets-management.mdx
│   │   ├── system-templates.mdx
│   │   └── types-of-task-steps.mdx
│   ├── concepts/
│   │   ├── agents.mdx
│   │   ├── docs.mdx
│   │   ├── execution.mdx
│   │   ├── files.mdx
│   │   ├── projects.mdx
│   │   ├── secrets.mdx
│   │   ├── sessions.mdx
│   │   ├── tasks.mdx
│   │   ├── tools.mdx
│   │   └── users.mdx
│   ├── docs.json
│   ├── guides/
│   │   ├── adding-tool-integration.mdx
│   │   ├── advanced/
│   │   │   ├── complex-workflows.mdx
│   │   │   ├── integration-patterns.mdx
│   │   │   └── multi-agent-systems.mdx
│   │   ├── cookbooks/
│   │   │   ├── community-examples.mdx
│   │   │   ├── industry-solutions.mdx
│   │   │   └── quick-solutions.mdx
│   │   ├── getting-started/
│   │   │   ├── chat-with-an-agent.mdx
│   │   │   ├── create-and-execute-julep-task.mdx
│   │   │   └── tool-integration-demo.mdx
│   │   ├── modifying-agent-workflow.mdx
│   │   ├── use-cases/
│   │   │   ├── customer-service.mdx
│   │   │   ├── data-analysis.mdx
│   │   │   ├── document-processing.mdx
│   │   │   └── research-assistant.mdx
│   │   └── using-secrets.mdx
│   ├── integrations/
│   │   ├── communicationdata/
│   │   │   ├── email.mdx
│   │   │   ├── google-sheets.mdx
│   │   │   └── weather.mdx
│   │   ├── contributing-integrations.mdx
│   │   ├── extensibility/
│   │   │   └── mcp.mdx
│   │   ├── mediafile/
│   │   │   ├── cloudinary.mdx
│   │   │   ├── ffmpeg.mdx
│   │   │   ├── llamaparse.mdx
│   │   │   └── unstructured.mdx
│   │   ├── search/
│   │   │   ├── algolia.mdx
│   │   │   ├── arxiv.mdx
│   │   │   ├── brave.mdx
│   │   │   └── wikipedia.mdx
│   │   ├── supported-integrations.mdx
│   │   ├── supported-models.mdx
│   │   └── webbrowser/
│   │       ├── browserbase.mdx
│   │       ├── remote-browser.mdx
│   │       └── spider.mdx
│   ├── introduction/
│   │   ├── developer-orientation.mdx
│   │   ├── install.mdx
│   │   ├── julep.mdx
│   │   └── quickstart.mdx
│   ├── julepcli/
│   │   ├── commands.mdx
│   │   └── introduction.mdx
│   ├── llms.txt
│   ├── responses/
│   │   ├── cli.mdx
│   │   ├── concepts.mdx
│   │   ├── examples.mdx
│   │   ├── quickstart.mdx
│   │   └── roadmap.mdx
│   ├── scripts/
│   │   └── julep-chat-widget.js
│   ├── sdks/
│   │   ├── common/
│   │   │   ├── authentication.mdx
│   │   │   ├── error-handling.mdx
│   │   │   ├── secrets.mdx
│   │   │   └── testing.mdx
│   │   ├── index.mdx
│   │   ├── nodejs/
│   │   │   ├── advanced-usage.mdx
│   │   │   ├── agents.mdx
│   │   │   ├── installation.mdx
│   │   │   ├── reference.mdx
│   │   │   ├── secrets.mdx
│   │   │   ├── sessions.mdx
│   │   │   ├── tasks.mdx
│   │   │   └── tools-integration.mdx
│   │   └── python/
│   │       ├── advanced-usage.mdx
│   │       ├── agents.mdx
│   │       ├── installation.mdx
│   │       ├── reference.mdx
│   │       ├── secrets.mdx
│   │       ├── sessions.mdx
│   │       ├── tasks.mdx
│   │       └── tools-integration.mdx
│   ├── snippets/
│   │   └── integrations-slider.jsx
│   ├── style.css
│   └── tutorials/
│       ├── browser-use.mdx
│       ├── hacker-news-newsletter.mdx
│       ├── julep-assistant.mdx
│       ├── rag-chatbot.mdx
│       ├── trip-planning-input.mdx
│       ├── trip-planning-running.mdx
│       ├── trip-planning-tools.mdx
│       ├── trip-planning-workflow.mdx
│       ├── trip-planning.mdx
│       └── video-processing.mdx
├── ruff.toml
└── src/
    ├── agents-api/
    │   ├── .dockerignore
    │   ├── .gitignore
    │   ├── .python-version
    │   ├── .tool-versions
    │   ├── AGENTS.md
    │   ├── Dockerfile
    │   ├── Dockerfile.worker
    │   ├── README.md
    │   ├── agents_api/
    │   │   ├── __init__.py
    │   │   ├── activities/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── demo.py
    │   │   │   ├── execute_api_call.py
    │   │   │   ├── execute_integration.py
    │   │   │   ├── execute_system.py
    │   │   │   ├── logger.py
    │   │   │   ├── pg_query_step.py
    │   │   │   ├── sync_items_remote.py
    │   │   │   ├── task_steps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── base_evaluate.py
    │   │   │   │   ├── get_value_step.py
    │   │   │   │   ├── prompt_step.py
    │   │   │   │   ├── raise_complete_async.py
    │   │   │   │   ├── tool_call_step.py
    │   │   │   │   └── transition_step.py
    │   │   │   └── tool_executor.py
    │   │   ├── app.py
    │   │   ├── autogen/
    │   │   │   ├── .ignore
    │   │   │   ├── AGENTS.md
    │   │   │   ├── Agents.py
    │   │   │   ├── Chat.py
    │   │   │   ├── Common.py
    │   │   │   ├── Docs.py
    │   │   │   ├── Entries.py
    │   │   │   ├── Executions.py
    │   │   │   ├── Files.py
    │   │   │   ├── Jobs.py
    │   │   │   ├── Projects.py
    │   │   │   ├── Responses.py
    │   │   │   ├── Secrets.py
    │   │   │   ├── Sessions.py
    │   │   │   ├── Tasks.py
    │   │   │   ├── Tools.py
    │   │   │   ├── Users.py
    │   │   │   ├── __init__.py
    │   │   │   └── openapi_model.py
    │   │   ├── clients/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── async_s3.py
    │   │   │   ├── feature_flags.py
    │   │   │   ├── integrations.py
    │   │   │   ├── litellm.py
    │   │   │   ├── pg.py
    │   │   │   ├── sync_s3.py
    │   │   │   └── temporal.py
    │   │   ├── common/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── exceptions/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── agents.py
    │   │   │   │   ├── executions.py
    │   │   │   │   ├── secrets.py
    │   │   │   │   ├── sessions.py
    │   │   │   │   ├── tasks.py
    │   │   │   │   ├── tools.py
    │   │   │   │   ├── users.py
    │   │   │   │   └── validation.py
    │   │   │   ├── interceptors.py
    │   │   │   ├── nlp.py
    │   │   │   ├── protocol/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── agents.py
    │   │   │   │   ├── developers.py
    │   │   │   │   ├── models.py
    │   │   │   │   ├── sessions.py
    │   │   │   │   ├── state_machine.py
    │   │   │   │   └── tasks.py
    │   │   │   ├── retry_policies.py
    │   │   │   └── utils/
    │   │   │       ├── __init__.py
    │   │   │       ├── checks.py
    │   │   │       ├── datetime.py
    │   │   │       ├── db_exceptions.py
    │   │   │       ├── evaluator.py
    │   │   │       ├── expressions.py
    │   │   │       ├── feature_flags.py
    │   │   │       ├── get_doc_search.py
    │   │   │       ├── humanization_utils.py
    │   │   │       ├── json.py
    │   │   │       ├── llm_providers.py
    │   │   │       ├── memory.py
    │   │   │       ├── messages.py
    │   │   │       ├── mmr.py
    │   │   │       ├── model_validation.py
    │   │   │       ├── secrets.py
    │   │   │       ├── task_validation.py
    │   │   │       ├── template.py
    │   │   │       ├── tool_runner.py
    │   │   │       ├── types.py
    │   │   │       ├── usage.py
    │   │   │       ├── workflows.py
    │   │   │       └── yaml.py
    │   │   ├── dependencies/
    │   │   │   ├── __init__.py
    │   │   │   ├── auth.py
    │   │   │   ├── content_length.py
    │   │   │   ├── developer_id.py
    │   │   │   ├── exceptions.py
    │   │   │   └── query_filter.py
    │   │   ├── env.py
    │   │   ├── exceptions.py
    │   │   ├── metrics/
    │   │   │   ├── __init__.py
    │   │   │   └── counters.py
    │   │   ├── model_registry.py
    │   │   ├── queries/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── agents/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_agent.py
    │   │   │   │   ├── create_or_update_agent.py
    │   │   │   │   ├── delete_agent.py
    │   │   │   │   ├── get_agent.py
    │   │   │   │   ├── list_agents.py
    │   │   │   │   ├── patch_agent.py
    │   │   │   │   └── update_agent.py
    │   │   │   ├── chat/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── gather_messages.py
    │   │   │   │   └── prepare_chat_context.py
    │   │   │   ├── developers/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_developer.py
    │   │   │   │   ├── get_developer.py
    │   │   │   │   ├── patch_developer.py
    │   │   │   │   └── update_developer.py
    │   │   │   ├── docs/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── bulk_delete_docs.py
    │   │   │   │   ├── create_doc.py
    │   │   │   │   ├── delete_doc.py
    │   │   │   │   ├── get_doc.py
    │   │   │   │   ├── list_docs.py
    │   │   │   │   ├── search_docs_by_embedding.py
    │   │   │   │   ├── search_docs_by_text.py
    │   │   │   │   ├── search_docs_hybrid.py
    │   │   │   │   └── utils.py
    │   │   │   ├── entries/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_entries.py
    │   │   │   │   ├── delete_entries.py
    │   │   │   │   ├── get_history.py
    │   │   │   │   └── list_entries.py
    │   │   │   ├── executions/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── constants.py
    │   │   │   │   ├── count_executions.py
    │   │   │   │   ├── create_execution.py
    │   │   │   │   ├── create_execution_transition.py
    │   │   │   │   ├── create_temporal_lookup.py
    │   │   │   │   ├── get_execution.py
    │   │   │   │   ├── get_execution_status.py
    │   │   │   │   ├── get_execution_transition.py
    │   │   │   │   ├── get_paused_execution_token.py
    │   │   │   │   ├── get_temporal_workflow_data.py
    │   │   │   │   ├── list_execution_inputs_data.py
    │   │   │   │   ├── list_execution_state_data.py
    │   │   │   │   ├── list_execution_transitions.py
    │   │   │   │   ├── list_executions.py
    │   │   │   │   ├── lookup_temporal_data.py
    │   │   │   │   └── prepare_execution_input.py
    │   │   │   ├── files/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_file.py
    │   │   │   │   ├── delete_file.py
    │   │   │   │   ├── get_file.py
    │   │   │   │   └── list_files.py
    │   │   │   ├── projects/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_project.py
    │   │   │   │   ├── list_projects.py
    │   │   │   │   └── project_exists.py
    │   │   │   ├── secrets/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create.py
    │   │   │   │   ├── delete.py
    │   │   │   │   ├── get_by_name.py
    │   │   │   │   ├── list.py
    │   │   │   │   └── update.py
    │   │   │   ├── sessions/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── count_sessions.py
    │   │   │   │   ├── create_or_update_session.py
    │   │   │   │   ├── create_session.py
    │   │   │   │   ├── delete_session.py
    │   │   │   │   ├── get_session.py
    │   │   │   │   ├── list_sessions.py
    │   │   │   │   ├── patch_session.py
    │   │   │   │   └── update_session.py
    │   │   │   ├── tasks/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_or_update_task.py
    │   │   │   │   ├── create_task.py
    │   │   │   │   ├── delete_task.py
    │   │   │   │   ├── get_task.py
    │   │   │   │   ├── list_tasks.py
    │   │   │   │   ├── patch_task.py
    │   │   │   │   └── update_task.py
    │   │   │   ├── tools/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_tools.py
    │   │   │   │   ├── delete_tool.py
    │   │   │   │   ├── get_tool.py
    │   │   │   │   ├── get_tool_args_from_metadata.py
    │   │   │   │   ├── list_tools.py
    │   │   │   │   ├── patch_tool.py
    │   │   │   │   └── update_tool.py
    │   │   │   ├── usage/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_usage_record.py
    │   │   │   │   └── get_user_cost.py
    │   │   │   ├── users/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_or_update_user.py
    │   │   │   │   ├── create_user.py
    │   │   │   │   ├── delete_user.py
    │   │   │   │   ├── get_user.py
    │   │   │   │   ├── list_users.py
    │   │   │   │   ├── patch_user.py
    │   │   │   │   └── update_user.py
    │   │   │   └── utils.py
    │   │   ├── rec_sum/
    │   │   │   ├── __init__.py
    │   │   │   ├── data.py
    │   │   │   ├── entities.py
    │   │   │   ├── entities_example_chat.json
    │   │   │   ├── generate.py
    │   │   │   ├── summarize.py
    │   │   │   ├── summarize_example_chat.json
    │   │   │   ├── summarize_example_result.json
    │   │   │   ├── trim.py
    │   │   │   ├── trim_example_chat.json
    │   │   │   ├── trim_example_result.json
    │   │   │   └── utils.py
    │   │   ├── routers/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── agents/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_agent.py
    │   │   │   │   ├── create_agent_tool.py
    │   │   │   │   ├── create_or_update_agent.py
    │   │   │   │   ├── delete_agent.py
    │   │   │   │   ├── delete_agent_tool.py
    │   │   │   │   ├── get_agent_details.py
    │   │   │   │   ├── list_agent_tools.py
    │   │   │   │   ├── list_agents.py
    │   │   │   │   ├── list_models.py
    │   │   │   │   ├── patch_agent.py
    │   │   │   │   ├── patch_agent_tool.py
    │   │   │   │   ├── router.py
    │   │   │   │   ├── update_agent.py
    │   │   │   │   └── update_agent_tool.py
    │   │   │   ├── docs/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── bulk_delete_docs.py
    │   │   │   │   ├── create_doc.py
    │   │   │   │   ├── delete_doc.py
    │   │   │   │   ├── embed.py
    │   │   │   │   ├── get_doc.py
    │   │   │   │   ├── list_docs.py
    │   │   │   │   ├── router.py
    │   │   │   │   └── search_docs.py
    │   │   │   ├── files/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_file.py
    │   │   │   │   ├── delete_file.py
    │   │   │   │   ├── get_file.py
    │   │   │   │   ├── list_files.py
    │   │   │   │   └── router.py
    │   │   │   ├── healthz/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── check_health.py
    │   │   │   │   └── router.py
    │   │   │   ├── internal/
    │   │   │   │   ├── __init__.py
    │   │   │   │   └── router.py
    │   │   │   ├── jobs/
    │   │   │   │   ├── __init__.py
    │   │   │   │   └── routers.py
    │   │   │   ├── projects/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_project.py
    │   │   │   │   ├── list_projects.py
    │   │   │   │   └── router.py
    │   │   │   ├── responses/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_response.py
    │   │   │   │   ├── get_response.py
    │   │   │   │   └── router.py
    │   │   │   ├── secrets/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_secret.py
    │   │   │   │   ├── delete_secret.py
    │   │   │   │   ├── list_secrets.py
    │   │   │   │   ├── router.py
    │   │   │   │   └── update_secret.py
    │   │   │   ├── sessions/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── auto_tools/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── chat.py
    │   │   │   │   │   └── render.py
    │   │   │   │   ├── chat.py
    │   │   │   │   ├── create_or_update_session.py
    │   │   │   │   ├── create_session.py
    │   │   │   │   ├── delete_session.py
    │   │   │   │   ├── exceptions.py
    │   │   │   │   ├── get_session.py
    │   │   │   │   ├── get_session_history.py
    │   │   │   │   ├── legacy/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── chat.py
    │   │   │   │   │   └── render.py
    │   │   │   │   ├── list_sessions.py
    │   │   │   │   ├── metrics.py
    │   │   │   │   ├── patch_session.py
    │   │   │   │   ├── render.py
    │   │   │   │   ├── router.py
    │   │   │   │   └── update_session.py
    │   │   │   ├── tasks/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_or_update_task.py
    │   │   │   │   ├── create_task.py
    │   │   │   │   ├── create_task_execution.py
    │   │   │   │   ├── get_execution_details.py
    │   │   │   │   ├── get_task_details.py
    │   │   │   │   ├── list_execution_transitions.py
    │   │   │   │   ├── list_task_executions.py
    │   │   │   │   ├── list_tasks.py
    │   │   │   │   ├── router.py
    │   │   │   │   ├── stream_execution_status.py
    │   │   │   │   ├── stream_transitions_events.py
    │   │   │   │   └── update_execution.py
    │   │   │   ├── users/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── create_or_update_user.py
    │   │   │   │   ├── create_user.py
    │   │   │   │   ├── delete_user.py
    │   │   │   │   ├── get_user_details.py
    │   │   │   │   ├── list_users.py
    │   │   │   │   ├── patch_user.py
    │   │   │   │   ├── router.py
    │   │   │   │   └── update_user.py
    │   │   │   └── utils/
    │   │   │       ├── __init__.py
    │   │   │       ├── model_converters.py
    │   │   │       └── model_validation.py
    │   │   ├── web.py
    │   │   ├── worker/
    │   │   │   ├── AGENTS.md
    │   │   │   ├── __init__.py
    │   │   │   ├── __main__.py
    │   │   │   ├── codec.py
    │   │   │   └── worker.py
    │   │   └── workflows/
    │   │       ├── AGENTS.md
    │   │       ├── __init__.py
    │   │       ├── demo.py
    │   │       └── task_execution/
    │   │           ├── __init__.py
    │   │           ├── helpers.py
    │   │           └── transition.py
    │   ├── docker-compose-api.yml
    │   ├── docker-compose.yml
    │   ├── gunicorn_conf.py
    │   ├── poe_tasks.toml
    │   ├── pyproject.toml
    │   ├── pytype.toml
    │   ├── tests/
    │   │   ├── __init__.py
    │   │   ├── fixtures.py
    │   │   ├── sample_tasks/
    │   │   │   ├── __init__.py
    │   │   │   ├── find_selector.yaml
    │   │   │   ├── integration_example.yaml
    │   │   │   ├── reclaim-example.yaml
    │   │   │   ├── screenshot.base64
    │   │   │   ├── simple_multi_step.yaml
    │   │   │   ├── simple_parameter_extractor.yaml
    │   │   │   ├── simple_prompt.yaml
    │   │   │   └── test_find_selector.py
    │   │   ├── test_activities.py
    │   │   ├── test_activities_utils.py
    │   │   ├── test_agent_metadata_filtering.py
    │   │   ├── test_agent_queries.py
    │   │   ├── test_agent_routes.py
    │   │   ├── test_base_evaluate.py
    │   │   ├── test_chat_auto_tools.py
    │   │   ├── test_chat_metadata.py
    │   │   ├── test_chat_routes.py
    │   │   ├── test_chat_streaming.py
    │   │   ├── test_developer_queries.py
    │   │   ├── test_docs_metadata_filtering.py
    │   │   ├── test_docs_queries.py
    │   │   ├── test_docs_routes.py
    │   │   ├── test_entry_queries.py
    │   │   ├── test_execution_queries.py
    │   │   ├── test_execution_workflow.py
    │   │   ├── test_expression_validation.py
    │   │   ├── test_file_routes.py
    │   │   ├── test_files_queries.py
    │   │   ├── test_get_doc_search.py
    │   │   ├── test_litellm_utils.py
    │   │   ├── test_memory_utils.py
    │   │   ├── test_messages_truncation.py
    │   │   ├── test_metadata_filter_utils.py
    │   │   ├── test_middleware.py
    │   │   ├── test_mmr.py
    │   │   ├── test_model_validation.py
    │   │   ├── test_nlp_utilities.py
    │   │   ├── test_pg_query_step.py
    │   │   ├── test_prepare_for_step.py
    │   │   ├── test_prompt_step_auto_tools.py
    │   │   ├── test_query_utils.py
    │   │   ├── test_secrets_queries.py
    │   │   ├── test_secrets_routes.py
    │   │   ├── test_secrets_usage.py
    │   │   ├── test_session_queries.py
    │   │   ├── test_session_routes.py
    │   │   ├── test_task_execution_workflow.py
    │   │   ├── test_task_queries.py
    │   │   ├── test_task_routes.py
    │   │   ├── test_task_validation.py
    │   │   ├── test_tool_call_step.py
    │   │   ├── test_tool_queries.py
    │   │   ├── test_tool_runner.py
    │   │   ├── test_transitions_queries.py
    │   │   ├── test_usage_cost.py
    │   │   ├── test_usage_tracking.py
    │   │   ├── test_user_queries.py
    │   │   ├── test_user_routes.py
    │   │   ├── test_validation_errors.py
    │   │   ├── test_workflow_helpers.py
    │   │   ├── test_workflow_routes.py
    │   │   └── utils.py
    │   └── uuid_extensions.pyi
    ├── analytics/
    │   ├── AGENTS.md
    │   ├── README.md
    │   └── docker-compose.yml
    ├── blob-store/
    │   ├── .gitignore
    │   ├── AGENTS.md
    │   ├── Dockerfile
    │   ├── docker-compose-ha.yml
    │   ├── docker-compose.yml
    │   ├── entrypoint.sh
    │   └── s3.json.template
    ├── cli/
    │   ├── .gitignore
    │   ├── AGENTS.md
    │   ├── README.md
    │   ├── cli-reference.md
    │   ├── poe_tasks.toml
    │   ├── pyproject.toml
    │   ├── spec.md
    │   ├── src/
    │   │   └── julep_cli/
    │   │       ├── __init__.py
    │   │       ├── __main__.py
    │   │       ├── agents.py
    │   │       ├── app.py
    │   │       ├── auth.py
    │   │       ├── chat.py
    │   │       ├── executions.py
    │   │       ├── importt.py
    │   │       ├── init.py
    │   │       ├── logs.py
    │   │       ├── ls.py
    │   │       ├── models.py
    │   │       ├── run.py
    │   │       ├── sync.py
    │   │       ├── tasks.py
    │   │       ├── tools.py
    │   │       ├── utils.py
    │   │       └── wrapper.py
    │   └── tests/
    │       ├── __init__.py
    │       └── test_auth.py
    ├── feature-flags/
    │   ├── docker-compose.yml
    │   └── env.example
    ├── gateway/
    │   ├── AGENTS.md
    │   ├── Dockerfile
    │   ├── docker-compose.yml
    │   ├── entrypoint.sh
    │   ├── letsencrypt/
    │   │   ├── .gitignore
    │   │   └── .gitkeep
    │   └── traefik.yml.template
    ├── hasura/
    │   ├── docker-compose.yml
    │   └── metadata/
    │       ├── hasura_metadata_2025_04_07_16_21_57_118.json
    │       └── hasura_metadata_2025_04_24_14_57_23_154.json
    ├── integrations-service/
    │   ├── .dockerignore
    │   ├── .python-version
    │   ├── AGENTS.md
    │   ├── Dockerfile
    │   ├── README.md
    │   ├── docker-compose.yml
    │   ├── gunicorn_conf.py
    │   ├── integrations/
    │   │   ├── __init__.py
    │   │   ├── __main__.py
    │   │   ├── autogen/
    │   │   │   ├── Agents.py
    │   │   │   ├── Chat.py
    │   │   │   ├── Common.py
    │   │   │   ├── Docs.py
    │   │   │   ├── Entries.py
    │   │   │   ├── Executions.py
    │   │   │   ├── Files.py
    │   │   │   ├── Jobs.py
    │   │   │   ├── Projects.py
    │   │   │   ├── Responses.py
    │   │   │   ├── Secrets.py
    │   │   │   ├── Sessions.py
    │   │   │   ├── Tasks.py
    │   │   │   ├── Tools.py
    │   │   │   ├── Users.py
    │   │   │   └── __init__.py
    │   │   ├── env.py
    │   │   ├── models/
    │   │   │   ├── __init__.py
    │   │   │   ├── algolia.py
    │   │   │   ├── arxiv.py
    │   │   │   ├── base_models.py
    │   │   │   ├── brave.py
    │   │   │   ├── browserbase.py
    │   │   │   ├── cloudinary.py
    │   │   │   ├── email.py
    │   │   │   ├── execution.py
    │   │   │   ├── ffmpeg.py
    │   │   │   ├── google_sheets.py
    │   │   │   ├── llama_parse.py
    │   │   │   ├── mailgun.py
    │   │   │   ├── mcp.py
    │   │   │   ├── remote_browser.py
    │   │   │   ├── spider.py
    │   │   │   ├── unstructured.py
    │   │   │   ├── weather.py
    │   │   │   └── wikipedia.py
    │   │   ├── providers.py
    │   │   ├── routers/
    │   │   │   ├── __init__.py
    │   │   │   ├── execution/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── execute.py
    │   │   │   │   └── router.py
    │   │   │   └── integrations/
    │   │   │       ├── __init__.py
    │   │   │       ├── get_integration.py
    │   │   │       ├── get_integration_tool.py
    │   │   │       ├── get_integrations.py
    │   │   │       └── router.py
    │   │   ├── utils/
    │   │   │   ├── __init__.py
    │   │   │   ├── execute_integration.py
    │   │   │   └── integrations/
    │   │   │       ├── __init__.py
    │   │   │       ├── algolia.py
    │   │   │       ├── arxiv.py
    │   │   │       ├── brave.py
    │   │   │       ├── browserbase.py
    │   │   │       ├── cloudinary.py
    │   │   │       ├── email.py
    │   │   │       ├── ffmpeg.py
    │   │   │       ├── google_sheets.py
    │   │   │       ├── llama_parse.py
    │   │   │       ├── mailgun.py
    │   │   │       ├── mcp.py
    │   │   │       ├── remote_browser.py
    │   │   │       ├── spider.py
    │   │   │       ├── unstructured.py
    │   │   │       ├── weather.py
    │   │   │       └── wikipedia.py
    │   │   └── web.py
    │   ├── poe_tasks.toml
    │   ├── pyproject.toml
    │   ├── pytest.ini
    │   ├── pytype.toml
    │   └── tests/
    │       ├── __init__.py
    │       ├── conftest.py
    │       ├── mocks/
    │       │   ├── __init__.py
    │       │   ├── brave.py
    │       │   ├── email.py
    │       │   ├── llama_parse.py
    │       │   ├── spider.py
    │       │   ├── weather.py
    │       │   └── wikipedia.py
    │       ├── test_mcp.py
    │       ├── test_mcp_sse_server.py
    │       ├── test_provider_execution.py
    │       ├── test_providers.py
    │       └── working_mcp_sse_server.py
    ├── llm-proxy/
    │   ├── .dockerignore
    │   ├── .gitignore
    │   ├── AGENTS.md
    │   ├── docker-compose.yml
    │   └── litellm-config.yaml
    ├── memory-store/
    │   ├── .gitignore
    │   ├── AGENTS.md
    │   ├── Dockerfile.migrations
    │   ├── README.md
    │   ├── docker-compose.yml
    │   └── migrations/
    │       ├── 000001_initial.down.sql
    │       ├── 000001_initial.up.sql
    │       ├── 000002_developers.down.sql
    │       ├── 000002_developers.up.sql
    │       ├── 000003_users.down.sql
    │       ├── 000003_users.up.sql
    │       ├── 000004_agents.down.sql
    │       ├── 000004_agents.up.sql
    │       ├── 000005_files.down.sql
    │       ├── 000005_files.up.sql
    │       ├── 000006_docs.down.sql
    │       ├── 000006_docs.up.sql
    │       ├── 000007_ann.down.sql
    │       ├── 000007_ann.up.sql
    │       ├── 000008_tools.down.sql
    │       ├── 000008_tools.up.sql
    │       ├── 000009_sessions.down.sql
    │       ├── 000009_sessions.up.sql
    │       ├── 000010_tasks.down.sql
    │       ├── 000010_tasks.up.sql
    │       ├── 000011_executions.down.sql
    │       ├── 000011_executions.up.sql
    │       ├── 000012_transitions.down.sql
    │       ├── 000012_transitions.up.sql
    │       ├── 000013_executions_continuous_view.down.sql
    │       ├── 000013_executions_continuous_view.up.sql
    │       ├── 000014_temporal_lookup.down.sql
    │       ├── 000014_temporal_lookup.up.sql
    │       ├── 000015_entries.down.sql
    │       ├── 000015_entries.up.sql
    │       ├── 000016_entry_relations.down.sql
    │       ├── 000016_entry_relations.up.sql
    │       ├── 000017_compression.down.sql
    │       ├── 000017_compression.up.sql
    │       ├── 000018_doc_search.down.sql
    │       ├── 000018_doc_search.up.sql
    │       ├── 000019_system_developer.down.sql
    │       ├── 000019_system_developer.up.sql
    │       ├── 000020_executions_task_cascade.down.sql
    │       ├── 000020_executions_task_cascade.up.sql
    │       ├── 000021_fix_toolname_contraint.down.sql
    │       ├── 000021_fix_toolname_contraint.up.sql
    │       ├── 000022_vector_search.down.sql
    │       ├── 000022_vector_search.up.sql
    │       ├── 000023_update_strings_length_constraints.down.sql
    │       ├── 000023_update_strings_length_constraints.up.sql
    │       ├── 000024_hybrid_search.down.sql
    │       ├── 000024_hybrid_search.up.sql
    │       ├── 000025_default_system_template.down.sql
    │       ├── 000025_default_system_template.up.sql
    │       ├── 000026_transition_cursor.down.sql
    │       ├── 000026_transition_cursor.up.sql
    │       ├── 000027_add_postgraphile.down.sql
    │       ├── 000027_add_postgraphile.up.sql
    │       ├── 000028_new_hybrid_search_implementation.down.sql
    │       ├── 000028_new_hybrid_search_implementation.up.sql
    │       ├── 000029_duplicate_doc_prevention.down.sql
    │       ├── 000029_duplicate_doc_prevention.up.sql
    │       ├── 000030_add_unaccent_search_config.down.sql
    │       ├── 000030_add_unaccent_search_config.up.sql
    │       ├── 000031_add_trigram_search.down.sql
    │       ├── 000031_add_trigram_search.up.sql
    │       ├── 000032_enhance_trigram_search.down.sql
    │       ├── 000032_enhance_trigram_search.up.sql
    │       ├── 000033_fix_latest_transitions.down.sql
    │       ├── 000033_fix_latest_transitions.up.sql
    │       ├── 000034_switch_to_hypercore.down.sql
    │       ├── 000034_switch_to_hypercore.up.sql
    │       ├── 000035_enhanced_indices.down.sql
    │       ├── 000035_enhanced_indices.up.sql
    │       ├── 000036_usage.down.sql
    │       ├── 000036_usage.up.sql
    │       ├── 000037_speed_up_search.down.sql
    │       ├── 000037_speed_up_search.up.sql
    │       ├── 000038_usage_cost_monthly.down.sql
    │       ├── 000038_usage_cost_monthly.up.sql
    │       ├── 000039_projects.down.sql
    │       ├── 000039_projects.up.sql
    │       ├── 000040_add_secrets.down.sql
    │       ├── 000040_add_secrets.up.sql
    │       ├── 000041_non_null_forward_tool_calls.down.sql
    │       ├── 000041_non_null_forward_tool_calls.up.sql
    │       ├── 000042_add_api_keys.down.sql
    │       ├── 000042_add_api_keys.up.sql
    │       ├── 000043_optional_trigram_search.down.sql
    │       ├── 000043_optional_trigram_search.up.sql
    │       ├── 000044_search_optimize.down.sql
    │       └── 000044_search_optimize.up.sql
    ├── monitoring/
    │   ├── AGENTS.md
    │   ├── README.md
    │   ├── docker-compose.yml
    │   ├── grafana/
    │   │   ├── dashboard.yaml
    │   │   └── provisioning/
    │   │       ├── dashboards/
    │   │       │   ├── advanced-visibility-specific.json
    │   │       │   ├── clustermonitoring-kubernetes.json
    │   │       │   ├── frontend-service-specific.json
    │   │       │   ├── history-service-specific.json
    │   │       │   ├── main.yaml
    │   │       │   ├── matching-service-specific.json
    │   │       │   ├── queries-metrics.json
    │   │       │   ├── requests-metrics.json
    │   │       │   ├── sdk-general.json
    │   │       │   ├── sdk-java.json
    │   │       │   ├── server-general.json
    │   │       │   ├── temporal_cloud.json
    │   │       │   └── worker-service-specific.json
    │   │       └── datasources/
    │   │           └── datasource.yml
    │   └── prometheus/
    │       └── config/
    │           └── prometheus.yml
    ├── scheduler/
    │   ├── AGENTS.md
    │   ├── cert/
    │   │   └── .gitignore
    │   ├── docker-compose.yml
    │   └── dynamicconfig/
    │       └── temporal-postgres.yaml
    ├── schemas/
    │   ├── create_agent_request.json
    │   ├── create_task_request.json
    │   └── walk.jq
    ├── scripts/
    │   ├── __init__.py
    │   ├── generate_changelog.py
    │   ├── generate_jwt.py
    │   ├── generate_openapi_code.sh
    │   ├── readme_translator.py
    │   ├── sync_model_docs.py
    │   └── templates/
    │       ├── changelog.yaml
    │       └── header.html
    └── typespec/
        ├── .gitignore
        ├── AGENTS.md
        ├── agents/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── chat/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── common/
        │   ├── constants.tsp
        │   ├── interfaces.tsp
        │   ├── main.tsp
        │   ├── mixins.tsp
        │   ├── scalars.tsp
        │   └── types.tsp
        ├── docs/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── entries/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── executions/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── files/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── jobs/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── main.tsp
        ├── package.json
        ├── projects/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── responses/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── secrets/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── sessions/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        ├── tasks/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   ├── models.tsp
        │   ├── step_kind.tsp
        │   └── steps.tsp
        ├── tools/
        │   ├── algolia.tsp
        │   ├── anthropic.tsp
        │   ├── arxiv.tsp
        │   ├── brave.tsp
        │   ├── browserbase/
        │   │   ├── contexts.tsp
        │   │   ├── extensions.tsp
        │   │   ├── main.tsp
        │   │   └── sessions.tsp
        │   ├── cloudinary.tsp
        │   ├── email.tsp
        │   ├── endpoints.tsp
        │   ├── ffmpeg.tsp
        │   ├── google_sheets.tsp
        │   ├── llama_parse.tsp
        │   ├── mailgun.tsp
        │   ├── main.tsp
        │   ├── mcp.tsp
        │   ├── models.tsp
        │   ├── remote_browser.tsp
        │   ├── spider.tsp
        │   ├── unstructured.tsp
        │   ├── weather.tsp
        │   └── wikipedia.tsp
        ├── tsp-output/
        │   └── @typespec/
        │       └── openapi3/
        │           └── openapi-1.0.0.yaml
        ├── tspconfig.yaml
        ├── users/
        │   ├── endpoints.tsp
        │   ├── main.tsp
        │   └── models.tsp
        └── versions.tsp
Download .txt
Showing preview only (215K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2409 symbols across 438 files)

FILE: documentation/scripts/julep-chat-widget.js
  function createElement (line 15) | function createElement(tag, attrs = {}, innerHTML = '') {
  function copyToClipboard (line 470) | function copyToClipboard(text) {
  function parseMarkdown (line 506) | function parseMarkdown(text) {
  function addMessage (line 591) | function addMessage(text, sender) {
  function createSession (line 625) | async function createSession() {
  function sendMessage (line 644) | async function sendMessage() {
  function detectTheme (line 757) | function detectTheme() {
  function init (line 771) | function init() {

FILE: src/agents-api/agents_api/activities/demo.py
  function demo_activity (line 6) | async def demo_activity(a: int, b: int) -> int:
  function mock_demo_activity (line 12) | async def mock_demo_activity(a: int, b: int) -> int:

FILE: src/agents-api/agents_api/activities/execute_api_call.py
  class RequestArgs (line 12) | class RequestArgs(TypedDict):
  function execute_api_call (line 27) | async def execute_api_call(

FILE: src/agents-api/agents_api/activities/execute_integration.py
  function serialize_pydantic_objects (line 17) | def serialize_pydantic_objects(obj: Any) -> Any:
  function execute_integration (line 31) | async def execute_integration(

FILE: src/agents-api/agents_api/activities/execute_system.py
  function execute_system (line 29) | async def execute_system(
  function _create_search_request (line 182) | def _create_search_request(arguments: dict) -> Any:

FILE: src/agents-api/agents_api/activities/pg_query_step.py
  function pg_query_step (line 11) | async def pg_query_step(

FILE: src/agents-api/agents_api/activities/sync_items_remote.py
  function save_inputs_remote_fn (line 10) | async def save_inputs_remote_fn(inputs: list[Any]) -> list[Any | RemoteO...
  function load_inputs_remote_fn (line 17) | async def load_inputs_remote_fn(inputs: list[Any | RemoteObject]) -> lis...

FILE: src/agents-api/agents_api/activities/task_steps/base_evaluate.py
  function _recursive_evaluate (line 16) | def _recursive_evaluate(expr, evaluator: SimpleEval):
  function base_evaluate (line 52) | async def base_evaluate(

FILE: src/agents-api/agents_api/activities/task_steps/get_value_step.py
  function get_value_step (line 12) | async def get_value_step(

FILE: src/agents-api/agents_api/activities/task_steps/prompt_step.py
  function prompt_step (line 31) | async def prompt_step(context: StepContext) -> StepOutcome:

FILE: src/agents-api/agents_api/activities/task_steps/raise_complete_async.py
  function raise_complete_async (line 14) | async def raise_complete_async(context: StepContext, output: Any) -> None:

FILE: src/agents-api/agents_api/activities/task_steps/tool_call_step.py
  function generate_call_id (line 10) | def generate_call_id() -> str:
  function construct_tool_call (line 22) | def construct_tool_call(tool: CreateToolRequest | Tool, arguments: dict,...

FILE: src/agents-api/agents_api/activities/task_steps/transition_step.py
  function transition_step (line 20) | async def transition_step(

FILE: src/agents-api/agents_api/activities/tool_executor.py
  function execute_web_search_tool (line 17) | async def execute_web_search_tool(tool_call: WebPreviewToolCall) -> Tool...
  function execute_tool_call (line 72) | async def execute_tool_call(tool_call: dict[str, Any]) -> ToolExecutionR...
  function format_tool_results_for_llm (line 169) | def format_tool_results_for_llm(result: ToolExecutionResult) -> dict[str...

FILE: src/agents-api/agents_api/app.py
  class State (line 19) | class State(Protocol):
  class ObjectWithState (line 24) | class ObjectWithState(Protocol):
  function lifespan (line 30) | async def lifespan(container: FastAPI | ObjectWithState):
  function scalar_html (line 99) | async def scalar_html():

FILE: src/agents-api/agents_api/autogen/Agents.py
  class Agent (line 12) | class Agent(BaseModel):
  class CreateAgentRequest (line 68) | class CreateAgentRequest(BaseModel):
  class CreateOrUpdateAgentRequest (line 119) | class CreateOrUpdateAgentRequest(CreateAgentRequest):
  class ListModelsResponse (line 167) | class ListModelsResponse(BaseModel):
  class ModelInfo (line 181) | class ModelInfo(BaseModel):
  class PatchAgentRequest (line 195) | class PatchAgentRequest(BaseModel):
  class UpdateAgentRequest (line 246) | class UpdateAgentRequest(BaseModel):

FILE: src/agents-api/agents_api/autogen/Chat.py
  class BaseChatOutput (line 23) | class BaseChatOutput(BaseModel):
  class BaseChatResponse (line 50) | class BaseChatResponse(BaseModel):
  class BaseTokenLogProb (line 75) | class BaseTokenLogProb(BaseModel):
  class ChatInputData (line 87) | class ChatInputData(BaseModel):
  class ChatOutputChunk (line 105) | class ChatOutputChunk(BaseChatOutput):
  class ChunkChatResponse (line 119) | class ChunkChatResponse(BaseChatResponse):
  class CompletionUsage (line 129) | class CompletionUsage(BaseModel):
  class Content (line 157) | class Content(BaseModel):
  class ContentItem (line 168) | class ContentItem(Content):
  class ContentItemModel (line 172) | class ContentItemModel(BaseModel):
  class ContentItemModel1 (line 180) | class ContentItemModel1(Content):
  class ContentItemModel2 (line 184) | class ContentItemModel2(ContentItemModel):
  class ContentItemModel3 (line 188) | class ContentItemModel3(Content):
  class ContentItemModel4 (line 192) | class ContentItemModel4(ContentItemModel):
  class ContentItemModel5 (line 196) | class ContentItemModel5(Content):
  class ContentItemModel6 (line 200) | class ContentItemModel6(ContentItemModel):
  class ContentModel (line 204) | class ContentModel(BaseModel):
  class ContentModel1 (line 217) | class ContentModel1(Content):
  class ContentModel2 (line 221) | class ContentModel2(BaseModel):
  class ContentModel3 (line 234) | class ContentModel3(Content):
  class ContentModel4 (line 238) | class ContentModel4(BaseModel):
  class ContentModel5 (line 251) | class ContentModel5(Content):
  class ContentModel6 (line 255) | class ContentModel6(BaseModel):
  class ContentModel7 (line 268) | class ContentModel7(BaseModel):
  class Delta (line 282) | class Delta(BaseModel):
  class ImageUrl (line 320) | class ImageUrl(BaseModel):
  class LogProbResponse (line 338) | class LogProbResponse(BaseModel):
  class Message (line 348) | class Message(BaseModel):
  class MessageChatResponse (line 382) | class MessageChatResponse(BaseChatResponse):
  class MessageModel (line 392) | class MessageModel(BaseModel):
  class MultipleChatOutput (line 433) | class MultipleChatOutput(BaseChatOutput):
  class RenderResponse (line 446) | class RenderResponse(ChatInputData):
  class SchemaCompletionResponseFormat (line 458) | class SchemaCompletionResponseFormat(BaseModel):
  class SimpleCompletionResponseFormat (line 472) | class SimpleCompletionResponseFormat(BaseModel):
  class SingleChatOutput (line 482) | class SingleChatOutput(BaseChatOutput):
  class Source (line 493) | class Source(BaseModel):
  class TokenLogProb (line 502) | class TokenLogProb(BaseTokenLogProb):
  class ChatInput (line 515) | class ChatInput(ChatInputData):

FILE: src/agents-api/agents_api/autogen/Common.py
  class Content (line 12) | class Content(RootModel[str]):
  class JinjaTemplate (line 22) | class JinjaTemplate(RootModel[str]):
  class Limit (line 32) | class Limit(RootModel[int]):
  class LogitBias (line 42) | class LogitBias(RootModel[float]):
  class Offset (line 49) | class Offset(RootModel[int]):
  class PyExpression (line 59) | class PyExpression(RootModel[str]):
  class ResourceDeletedResponse (line 69) | class ResourceDeletedResponse(BaseModel):
  class StepLabel (line 87) | class StepLabel(RootModel[str]):
  class Uuid (line 97) | class Uuid(RootModel[UUID]):

FILE: src/agents-api/agents_api/autogen/Docs.py
  class BulkDeleteDocsRequest (line 14) | class BulkDeleteDocsRequest(BaseModel):
  class CreateDocRequest (line 28) | class CreateDocRequest(BaseModel):
  class Doc (line 51) | class Doc(BaseModel):
  class DocOwner (line 98) | class DocOwner(BaseModel):
  class DocReference (line 106) | class DocReference(BaseModel):
  class DocSearchResponse (line 124) | class DocSearchResponse(BaseModel):
  class EmbedQueryResponse (line 138) | class EmbedQueryResponse(BaseModel):
  class HybridDocSearchRequest (line 148) | class HybridDocSearchRequest(BaseModel):
  class MultipleEmbedQueryRequest (line 198) | class MultipleEmbedQueryRequest(BaseModel):
  class SingleEmbedQueryRequest (line 212) | class SingleEmbedQueryRequest(BaseModel):
  class Snippet (line 226) | class Snippet(BaseModel):
  class TextOnlyDocSearchRequest (line 235) | class TextOnlyDocSearchRequest(BaseModel):
  class VectorDocSearchRequest (line 265) | class VectorDocSearchRequest(BaseModel):

FILE: src/agents-api/agents_api/autogen/Entries.py
  class BaseEntry (line 21) | class BaseEntry(BaseModel):
  class ChatMLRole (line 84) | class ChatMLRole(RootModel[Literal["user", "assistant", "system", "tool"...
  class Content (line 94) | class Content(BaseModel):
  class ContentItem (line 105) | class ContentItem(Content):
  class ContentItemModel (line 109) | class ContentItemModel(BaseModel):
  class ContentItemModel1 (line 117) | class ContentItemModel1(Content):
  class ContentItemModel2 (line 121) | class ContentItemModel2(ContentItemModel):
  class ContentModel (line 125) | class ContentModel(BaseModel):
  class ContentModel1 (line 138) | class ContentModel1(Content):
  class ContentModel2 (line 142) | class ContentModel2(BaseModel):
  class ContentModel3 (line 155) | class ContentModel3(BaseModel):
  class Entry (line 169) | class Entry(BaseEntry):
  class History (line 180) | class History(BaseModel):
  class ImageDetail (line 193) | class ImageDetail(RootModel[Literal["low", "high", "auto"]]):
  class ImageUrl (line 203) | class ImageUrl(BaseModel):
  class Relation (line 221) | class Relation(BaseModel):
  class Source (line 230) | class Source(BaseModel):

FILE: src/agents-api/agents_api/autogen/Executions.py
  class CreateExecutionRequest (line 12) | class CreateExecutionRequest(BaseModel):
  class Execution (line 39) | class Execution(BaseModel):
  class TaskTokenResumeExecutionRequest (line 90) | class TaskTokenResumeExecutionRequest(BaseModel):
  class TransitionEvent (line 101) | class TransitionEvent(BaseModel):
  class TransitionTarget (line 130) | class TransitionTarget(BaseModel):
  class UpdateExecutionRequest (line 150) | class UpdateExecutionRequest(BaseModel):
  class ResumeExecutionRequest (line 165) | class ResumeExecutionRequest(UpdateExecutionRequest):
  class StopExecutionRequest (line 176) | class StopExecutionRequest(UpdateExecutionRequest):
  class Transition (line 187) | class Transition(TransitionEvent):

FILE: src/agents-api/agents_api/autogen/Files.py
  class CreateFileRequest (line 12) | class CreateFileRequest(BaseModel):
  class File (line 51) | class File(BaseModel):

FILE: src/agents-api/agents_api/autogen/Jobs.py
  class JobStatus (line 12) | class JobStatus(BaseModel):

FILE: src/agents-api/agents_api/autogen/Projects.py
  class CreateProjectRequest (line 12) | class CreateProjectRequest(BaseModel):
  class PatchProjectRequest (line 34) | class PatchProjectRequest(BaseModel):
  class Project (line 56) | class Project(BaseModel):
  class UpdateProjectRequest (line 87) | class UpdateProjectRequest(BaseModel):
  class CreateOrUpdateProjectRequest (line 109) | class CreateOrUpdateProjectRequest(CreateProjectRequest):

FILE: src/agents-api/agents_api/autogen/Responses.py
  class BaseTool (line 11) | class BaseTool(BaseModel):
  class Click (line 18) | class Click(BaseModel):
  class ComputerScreenshotImage (line 40) | class ComputerScreenshotImage(BaseModel):
  class ComputerTool (line 58) | class ComputerTool(BaseTool):
  class ComputerToolCall (line 80) | class ComputerToolCall(BaseModel):
  class ComputerToolCallOutput (line 112) | class ComputerToolCallOutput(BaseModel):
  class ComputerToolCallOutputResource (line 142) | class ComputerToolCallOutputResource(ComputerToolCallOutput):
  class ComputerToolCallSafetyCheck (line 152) | class ComputerToolCallSafetyCheck(BaseModel):
  class Coordinate (line 170) | class Coordinate(BaseModel):
  class CreateResponse (line 184) | class CreateResponse(BaseModel):
  class DoubleClick (line 238) | class DoubleClick(BaseModel):
  class Drag (line 256) | class Drag(BaseModel):
  class EasyInputMessage (line 270) | class EasyInputMessage(BaseModel):
  class FileCitation (line 288) | class FileCitation(BaseModel):
  class FilePath (line 306) | class FilePath(BaseModel):
  class FileSearchTool (line 324) | class FileSearchTool(BaseTool):
  class FileSearchToolCall (line 335) | class FileSearchToolCall(BaseModel):
  class Function (line 361) | class Function(BaseModel):
  class FunctionTool (line 368) | class FunctionTool(BaseTool):
  class FunctionToolCall (line 379) | class FunctionToolCall(BaseModel):
  class FunctionToolCallOutput (line 409) | class FunctionToolCallOutput(BaseModel):
  class FunctionToolCallOutputResource (line 435) | class FunctionToolCallOutputResource(FunctionToolCallOutput):
  class IncompleteDetails (line 445) | class IncompleteDetails(BaseModel):
  class InputFile (line 452) | class InputFile(BaseModel):
  class InputImage (line 478) | class InputImage(BaseModel):
  class InputMessage (line 500) | class InputMessage(BaseModel):
  class InputMessageResource (line 510) | class InputMessageResource(InputMessage):
  class InputText (line 517) | class InputText(BaseModel):
  class InputTokensDetails (line 531) | class InputTokensDetails(BaseModel):
  class Item (line 538) | class Item(BaseModel):
  class KeyPress (line 549) | class KeyPress(BaseModel):
  class Move (line 563) | class Move(BaseModel):
  class OutputMessage (line 581) | class OutputMessage(BaseModel):
  class OutputText (line 592) | class OutputText(BaseModel):
  class OutputTokensDetails (line 610) | class OutputTokensDetails(BaseModel):
  class RankingOptions (line 617) | class RankingOptions(BaseModel):
  class Reasoning (line 625) | class Reasoning(BaseModel):
  class ReasoningContent (line 643) | class ReasoningContent(BaseModel):
  class ReasoningItem (line 657) | class ReasoningItem(BaseModel):
  class Refusal (line 679) | class Refusal(BaseModel):
  class Response (line 693) | class Response(BaseModel):
  class ResponseError (line 731) | class ResponseError(BaseModel):
  class ResponseFormatJsonObject (line 741) | class ResponseFormatJsonObject(BaseModel):
  class ResponseFormatText (line 759) | class ResponseFormatText(BaseModel):
  class ResponseUsage (line 773) | class ResponseUsage(BaseModel):
  class Result (line 784) | class Result(BaseModel):
  class Screenshot (line 810) | class Screenshot(BaseModel):
  class Scroll (line 820) | class Scroll(BaseModel):
  class Text (line 846) | class Text(BaseModel):
  class TextResponseFormatJsonSchema (line 853) | class TextResponseFormatJsonSchema(BaseModel):
  class ToolChoice (line 883) | class ToolChoice(BaseModel):
  class ToolChoiceFunction (line 891) | class ToolChoiceFunction(BaseModel):
  class ToolChoiceTypes (line 909) | class ToolChoiceTypes(BaseModel):
  class Type (line 936) | class Type(BaseModel):
  class UrlCitation (line 950) | class UrlCitation(BaseModel):
  class UserLocation (line 976) | class UserLocation(BaseModel):
  class VectorStoreFileAttributes (line 987) | class VectorStoreFileAttributes(BaseModel):
  class VectorStoreFileAttributesString (line 1001) | class VectorStoreFileAttributesString(RootModel[str]):
  class Wait (line 1008) | class Wait(BaseModel):
  class WebSearchTool (line 1018) | class WebSearchTool(BaseTool):
  class WebSearchToolCall (line 1028) | class WebSearchToolCall(BaseModel):

FILE: src/agents-api/agents_api/autogen/Secrets.py
  class CreateSecretRequest (line 12) | class CreateSecretRequest(BaseModel):
  class Secret (line 31) | class Secret(BaseModel):
  class UpdateSecretRequest (line 63) | class UpdateSecretRequest(CreateSecretRequest):

FILE: src/agents-api/agents_api/autogen/Sessions.py
  class BaseDocSearch (line 12) | class BaseDocSearch(BaseModel):
  class BaseDocSearchUpdate (line 42) | class BaseDocSearchUpdate(BaseDocSearch):
  class CreateSessionRequest (line 46) | class CreateSessionRequest(BaseModel):
  class HybridDocSearch (line 103) | class HybridDocSearch(BaseDocSearch):
  class HybridDocSearchUpdate (line 133) | class HybridDocSearchUpdate(BaseDocSearchUpdate):
  class PatchSessionRequest (line 163) | class PatchSessionRequest(BaseModel):
  class Session (line 212) | class Session(BaseModel):
  class SingleAgentMultiUserSession (line 272) | class SingleAgentMultiUserSession(Session):
  class SingleAgentNoUserSession (line 280) | class SingleAgentNoUserSession(Session):
  class SingleAgentSingleUserSession (line 287) | class SingleAgentSingleUserSession(Session):
  class TextOnlyDocSearch (line 295) | class TextOnlyDocSearch(BaseDocSearch):
  class TextOnlyDocSearchUpdate (line 309) | class TextOnlyDocSearchUpdate(BaseDocSearchUpdate):
  class UpdateSessionRequest (line 323) | class UpdateSessionRequest(BaseModel):
  class VectorDocSearch (line 370) | class VectorDocSearch(BaseDocSearch):
  class VectorDocSearchUpdate (line 388) | class VectorDocSearchUpdate(BaseDocSearchUpdate):
  class CreateOrUpdateSessionRequest (line 406) | class CreateOrUpdateSessionRequest(CreateSessionRequest):
  class MultiAgentMultiUserSession (line 460) | class MultiAgentMultiUserSession(Session):
  class MultiAgentNoUserSession (line 468) | class MultiAgentNoUserSession(Session):
  class MultiAgentSingleUserSession (line 475) | class MultiAgentSingleUserSession(Session):

FILE: src/agents-api/agents_api/autogen/Tasks.py
  class CaseThen (line 22) | class CaseThen(BaseModel):
  class CaseThenUpdateItem (line 48) | class CaseThenUpdateItem(BaseModel):
  class Content (line 74) | class Content(BaseModel):
  class ContentItem (line 88) | class ContentItem(Content):
  class ContentItemModel (line 92) | class ContentItemModel(BaseModel):
  class ContentItemModel1 (line 100) | class ContentItemModel1(Content):
  class ContentItemModel2 (line 104) | class ContentItemModel2(ContentItemModel):
  class ContentModel (line 108) | class ContentModel(BaseModel):
  class ContentModel1 (line 122) | class ContentModel1(BaseModel):
  class ContentModel2 (line 135) | class ContentModel2(Content):
  class ContentModel3 (line 139) | class ContentModel3(ContentModel):
  class ContentModel4 (line 143) | class ContentModel4(BaseModel):
  class CreateTaskRequest (line 156) | class CreateTaskRequest(BaseModel):
  class Else (line 218) | class Else(BaseModel):
  class ElseModel (line 270) | class ElseModel(BaseModel):
  class ErrorWorkflowStep (line 320) | class ErrorWorkflowStep(BaseModel):
  class EvaluateStep (line 342) | class EvaluateStep(BaseModel):
  class ForeachDo (line 364) | class ForeachDo(BaseModel):
  class ForeachDoUpdateItem (line 388) | class ForeachDoUpdateItem(BaseModel):
  class ForeachStep (line 412) | class ForeachStep(BaseModel):
  class ForeachStepUpdateItem (line 434) | class ForeachStepUpdateItem(BaseModel):
  class GetStep (line 454) | class GetStep(BaseModel):
  class IfElseWorkflowStep (line 476) | class IfElseWorkflowStep(BaseModel):
  class IfElseWorkflowStepUpdateItem (line 542) | class IfElseWorkflowStepUpdateItem(BaseModel):
  class ImageUrl (line 606) | class ImageUrl(BaseModel):
  class LogStep (line 624) | class LogStep(BaseModel):
  class Main (line 646) | class Main(BaseModel):
  class MainModel (line 694) | class MainModel(BaseModel):
  class ParallelStep (line 740) | class ParallelStep(BaseModel):
  class ParallelStepUpdateItem (line 773) | class ParallelStepUpdateItem(BaseModel):
  class PatchTaskRequest (line 804) | class PatchTaskRequest(BaseModel):
  class PromptItem (line 867) | class PromptItem(BaseModel):
  class PromptStep (line 901) | class PromptStep(BaseModel):
  class PromptStepUpdateItem (line 951) | class PromptStepUpdateItem(BaseModel):
  class ReturnStep (line 999) | class ReturnStep(BaseModel):
  class SetStep (line 1024) | class SetStep(BaseModel):
  class SleepFor (line 1046) | class SleepFor(BaseModel):
  class SleepStep (line 1068) | class SleepStep(BaseModel):
  class Source (line 1090) | class Source(BaseModel):
  class SwitchStep (line 1102) | class SwitchStep(BaseModel):
  class SwitchStepUpdateItem (line 1124) | class SwitchStepUpdateItem(BaseModel):
  class Task (line 1144) | class Task(BaseModel):
  class TaskTool (line 1215) | class TaskTool(CreateToolRequest):
  class Then (line 1227) | class Then(BaseModel):
  class ThenModel (line 1279) | class ThenModel(BaseModel):
  class ToolCallStep (line 1329) | class ToolCallStep(BaseModel):
  class ToolRef (line 1355) | class ToolRef(BaseModel):
  class ToolRefById (line 1366) | class ToolRefById(BaseModel):
  class ToolRefByName (line 1377) | class ToolRefByName(BaseModel):
  class ToolRefUpdateItem (line 1391) | class ToolRefUpdateItem(BaseModel):
  class UpdateTaskRequest (line 1401) | class UpdateTaskRequest(BaseModel):
  class WaitForInputInfo (line 1463) | class WaitForInputInfo(BaseModel):
  class WaitForInputStep (line 1473) | class WaitForInputStep(BaseModel):
  class YieldStep (line 1495) | class YieldStep(BaseModel):

FILE: src/agents-api/agents_api/autogen/Tools.py
  class AlgoliaSearchArguments (line 20) | class AlgoliaSearchArguments(BaseModel):
  class AlgoliaSearchArgumentsUpdate (line 46) | class AlgoliaSearchArgumentsUpdate(BaseModel):
  class AlgoliaSetup (line 72) | class AlgoliaSetup(BaseModel):
  class AlgoliaSetupUpdate (line 90) | class AlgoliaSetupUpdate(BaseModel):
  class ApiCallDef (line 108) | class ApiCallDef(BaseModel):
  class ApiCallDefUpdate (line 180) | class ApiCallDefUpdate(BaseModel):
  class ArxivSearchArguments (line 263) | class ArxivSearchArguments(BaseModel):
  class ArxivSearchArgumentsUpdate (line 297) | class ArxivSearchArgumentsUpdate(BaseModel):
  class BaseChosenToolCall (line 331) | class BaseChosenToolCall(BaseModel):
  class BaseIntegrationDef (line 364) | class BaseIntegrationDef(BaseModel):
  class BaseIntegrationDefUpdate (line 408) | class BaseIntegrationDefUpdate(BaseModel):
  class Bash20241022Def (line 455) | class Bash20241022Def(BaseModel):
  class Bash20241022DefUpdate (line 463) | class Bash20241022DefUpdate(Bash20241022Def):
  class BraveIntegrationDef (line 467) | class BraveIntegrationDef(BaseIntegrationDef):
  class BraveIntegrationDefUpdate (line 493) | class BraveIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class BraveSearchArguments (line 519) | class BraveSearchArguments(BaseModel):
  class BraveSearchArgumentsUpdate (line 533) | class BraveSearchArgumentsUpdate(BaseModel):
  class BraveSearchSetup (line 547) | class BraveSearchSetup(BaseModel):
  class BraveSearchSetupUpdate (line 561) | class BraveSearchSetupUpdate(BaseModel):
  class BrowserbaseCompleteSessionArguments (line 575) | class BrowserbaseCompleteSessionArguments(BaseModel):
  class BrowserbaseCompleteSessionArgumentsUpdate (line 583) | class BrowserbaseCompleteSessionArgumentsUpdate(BaseModel):
  class BrowserbaseContextArguments (line 591) | class BrowserbaseContextArguments(BaseModel):
  class BrowserbaseContextArgumentsUpdate (line 601) | class BrowserbaseContextArgumentsUpdate(BaseModel):
  class BrowserbaseCreateSessionArguments (line 611) | class BrowserbaseCreateSessionArguments(BaseModel):
  class BrowserbaseExtensionArguments (line 641) | class BrowserbaseExtensionArguments(BaseModel):
  class BrowserbaseExtensionArgumentsUpdate (line 655) | class BrowserbaseExtensionArgumentsUpdate(BaseModel):
  class BrowserbaseGetSessionArguments (line 669) | class BrowserbaseGetSessionArguments(BaseModel):
  class BrowserbaseGetSessionArgumentsUpdate (line 676) | class BrowserbaseGetSessionArgumentsUpdate(BaseModel):
  class BrowserbaseGetSessionLiveUrlsArguments (line 683) | class BrowserbaseGetSessionLiveUrlsArguments(BrowserbaseGetSessionArgume...
  class BrowserbaseGetSessionLiveUrlsArgumentsUpdate (line 687) | class BrowserbaseGetSessionLiveUrlsArgumentsUpdate(
  class BrowserbaseListSessionsArguments (line 693) | class BrowserbaseListSessionsArguments(BaseModel):
  class BrowserbaseSetup (line 703) | class BrowserbaseSetup(BaseModel):
  class BrowserbaseSetupUpdate (line 729) | class BrowserbaseSetupUpdate(BaseModel):
  class ChosenBash20241022 (line 755) | class ChosenBash20241022(BaseModel):
  class ChosenComputer20241022 (line 769) | class ChosenComputer20241022(BaseModel):
  class ChosenFunctionCall (line 797) | class ChosenFunctionCall(BaseChosenToolCall):
  class ChosenTextEditor20241022 (line 808) | class ChosenTextEditor20241022(BaseModel):
  class CloudinaryEditArguments (line 842) | class CloudinaryEditArguments(BaseModel):
  class CloudinaryEditArgumentsUpdate (line 864) | class CloudinaryEditArgumentsUpdate(BaseModel):
  class CloudinarySetup (line 886) | class CloudinarySetup(BaseModel):
  class CloudinarySetupUpdate (line 912) | class CloudinarySetupUpdate(BaseModel):
  class CloudinaryUploadArguments (line 938) | class CloudinaryUploadArguments(BaseModel):
  class CloudinaryUploadArgumentsUpdate (line 964) | class CloudinaryUploadArgumentsUpdate(BaseModel):
  class Computer20241022Def (line 990) | class Computer20241022Def(BaseModel):
  class Computer20241022DefUpdate (line 1014) | class Computer20241022DefUpdate(Computer20241022Def):
  class CreateToolRequest (line 1020) | class CreateToolRequest(BaseModel):
  class DummyIntegrationDef (line 1098) | class DummyIntegrationDef(BaseIntegrationDef):
  class DummyIntegrationDefUpdate (line 1105) | class DummyIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class EmailArguments (line 1112) | class EmailArguments(BaseModel):
  class EmailArgumentsUpdate (line 1138) | class EmailArgumentsUpdate(BaseModel):
  class EmailIntegrationDef (line 1164) | class EmailIntegrationDef(BaseIntegrationDef):
  class EmailIntegrationDefUpdate (line 1190) | class EmailIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class EmailSetup (line 1216) | class EmailSetup(BaseModel):
  class EmailSetupUpdate (line 1242) | class EmailSetupUpdate(BaseModel):
  class FfmpegIntegrationDef (line 1268) | class FfmpegIntegrationDef(BaseIntegrationDef):
  class FfmpegIntegrationDefUpdate (line 1294) | class FfmpegIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class FfmpegSearchArguments (line 1320) | class FfmpegSearchArguments(BaseModel):
  class FfmpegSearchArgumentsUpdate (line 1338) | class FfmpegSearchArgumentsUpdate(BaseModel):
  class FunctionCallOption (line 1356) | class FunctionCallOption(BaseModel):
  class FunctionDef (line 1370) | class FunctionDef(BaseModel):
  class GoogleSheetsAppendArguments (line 1392) | class GoogleSheetsAppendArguments(BaseModel):
  class GoogleSheetsAppendArgumentsUpdate (line 1426) | class GoogleSheetsAppendArgumentsUpdate(BaseModel):
  class GoogleSheetsBatchReadArguments (line 1460) | class GoogleSheetsBatchReadArguments(BaseModel):
  class GoogleSheetsBatchReadArgumentsUpdate (line 1494) | class GoogleSheetsBatchReadArgumentsUpdate(BaseModel):
  class GoogleSheetsBatchWriteArguments (line 1528) | class GoogleSheetsBatchWriteArguments(BaseModel):
  class GoogleSheetsBatchWriteArgumentsUpdate (line 1554) | class GoogleSheetsBatchWriteArgumentsUpdate(BaseModel):
  class GoogleSheetsClearArguments (line 1580) | class GoogleSheetsClearArguments(BaseModel):
  class GoogleSheetsClearArgumentsUpdate (line 1598) | class GoogleSheetsClearArgumentsUpdate(BaseModel):
  class GoogleSheetsIntegrationDef (line 1616) | class GoogleSheetsIntegrationDef(BaseIntegrationDef):
  class GoogleSheetsIntegrationDefUpdate (line 1660) | class GoogleSheetsIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class GoogleSheetsReadArguments (line 1704) | class GoogleSheetsReadArguments(BaseModel):
  class GoogleSheetsReadArgumentsUpdate (line 1738) | class GoogleSheetsReadArgumentsUpdate(BaseModel):
  class GoogleSheetsSetup (line 1772) | class GoogleSheetsSetup(BaseModel):
  class GoogleSheetsSetupUpdate (line 1797) | class GoogleSheetsSetupUpdate(BaseModel):
  class GoogleSheetsValueRange (line 1822) | class GoogleSheetsValueRange(BaseModel):
  class GoogleSheetsWriteArguments (line 1844) | class GoogleSheetsWriteArguments(BaseModel):
  class GoogleSheetsWriteArgumentsUpdate (line 1878) | class GoogleSheetsWriteArgumentsUpdate(BaseModel):
  class LlamaParseFetchArguments (line 1912) | class LlamaParseFetchArguments(BaseModel):
  class LlamaParseFetchArgumentsUpdate (line 1938) | class LlamaParseFetchArgumentsUpdate(BaseModel):
  class LlamaParseIntegrationDef (line 1964) | class LlamaParseIntegrationDef(BaseIntegrationDef):
  class LlamaParseIntegrationDefUpdate (line 1990) | class LlamaParseIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class LlamaParseSetup (line 2016) | class LlamaParseSetup(BaseModel):
  class LlamaParseSetupUpdate (line 2034) | class LlamaParseSetupUpdate(BaseModel):
  class MailgunIntegrationDef (line 2052) | class MailgunIntegrationDef(BaseIntegrationDef):
  class MailgunIntegrationDefUpdate (line 2078) | class MailgunIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class MailgunSendEmailArguments (line 2104) | class MailgunSendEmailArguments(BaseModel):
  class MailgunSendEmailArgumentsUpdate (line 2138) | class MailgunSendEmailArgumentsUpdate(BaseModel):
  class MailgunSetup (line 2172) | class MailgunSetup(BaseModel):
  class MailgunSetupUpdate (line 2186) | class MailgunSetupUpdate(BaseModel):
  class McpCallToolArguments (line 2200) | class McpCallToolArguments(BaseModel):
  class McpCallToolArgumentsUpdate (line 2222) | class McpCallToolArgumentsUpdate(BaseModel):
  class McpIntegrationDef (line 2244) | class McpIntegrationDef(BaseIntegrationDef):
  class McpIntegrationDefUpdate (line 2270) | class McpIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class McpListToolsArguments (line 2296) | class McpListToolsArguments(BaseModel):
  class McpListToolsArgumentsUpdate (line 2307) | class McpListToolsArgumentsUpdate(McpListToolsArguments):
  class McpSetup (line 2313) | class McpSetup(BaseModel):
  class McpSetupUpdate (line 2351) | class McpSetupUpdate(BaseModel):
  class NamedToolChoice (line 2389) | class NamedToolChoice(BaseModel):
  class ParameterSchema (line 2396) | class ParameterSchema(BaseModel):
  class ParameterSchemaUpdate (line 2424) | class ParameterSchemaUpdate(BaseModel):
  class PatchToolRequest (line 2452) | class PatchToolRequest(BaseModel):
  class PropertyDefinition (line 2533) | class PropertyDefinition(BaseModel):
  class PropertyDefinitionUpdate (line 2559) | class PropertyDefinitionUpdate(BaseModel):
  class RemoteBrowserArguments (line 2585) | class RemoteBrowserArguments(BaseModel):
  class RemoteBrowserArgumentsUpdate (line 2624) | class RemoteBrowserArgumentsUpdate(BaseModel):
  class RemoteBrowserIntegrationDef (line 2666) | class RemoteBrowserIntegrationDef(BaseIntegrationDef):
  class RemoteBrowserIntegrationDefUpdate (line 2680) | class RemoteBrowserIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class RemoteBrowserSetup (line 2694) | class RemoteBrowserSetup(BaseModel):
  class SecretRef (line 2716) | class SecretRef(BaseModel):
  class SecretRefUpdate (line 2726) | class SecretRefUpdate(BaseModel):
  class SpiderFetchArguments (line 2736) | class SpiderFetchArguments(BaseModel):
  class SpiderFetchArgumentsUpdate (line 2760) | class SpiderFetchArgumentsUpdate(BaseModel):
  class SpiderIntegrationDef (line 2784) | class SpiderIntegrationDef(BaseIntegrationDef):
  class SpiderIntegrationDefUpdate (line 2810) | class SpiderIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class SpiderSetup (line 2836) | class SpiderSetup(BaseModel):
  class SpiderSetupUpdate (line 2850) | class SpiderSetupUpdate(BaseModel):
  class SystemDef (line 2864) | class SystemDef(BaseModel):
  class SystemDefUpdate (line 2907) | class SystemDefUpdate(BaseModel):
  class TextEditor20241022Def (line 2955) | class TextEditor20241022Def(BaseModel):
  class TextEditor20241022DefUpdate (line 2963) | class TextEditor20241022DefUpdate(TextEditor20241022Def):
  class Tool (line 2967) | class Tool(BaseModel):
  class ToolResponse (line 3050) | class ToolResponse(BaseModel):
  class UnstructuredIntegrationDef (line 3061) | class UnstructuredIntegrationDef(BaseIntegrationDef):
  class UnstructuredIntegrationDefUpdate (line 3087) | class UnstructuredIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class UnstructuredPartitionArguments (line 3113) | class UnstructuredPartitionArguments(BaseModel):
  class UnstructuredPartitionArgumentsUpdate (line 3135) | class UnstructuredPartitionArgumentsUpdate(BaseModel):
  class UnstructuredSetup (line 3157) | class UnstructuredSetup(BaseModel):
  class UnstructuredSetupUpdate (line 3191) | class UnstructuredSetupUpdate(BaseModel):
  class UpdateToolRequest (line 3225) | class UpdateToolRequest(BaseModel):
  class WeatherGetArguments (line 3303) | class WeatherGetArguments(BaseModel):
  class WeatherGetArgumentsUpdate (line 3317) | class WeatherGetArgumentsUpdate(BaseModel):
  class WeatherIntegrationDef (line 3331) | class WeatherIntegrationDef(BaseIntegrationDef):
  class WeatherIntegrationDefUpdate (line 3357) | class WeatherIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class WeatherSetup (line 3383) | class WeatherSetup(BaseModel):
  class WeatherSetupUpdate (line 3397) | class WeatherSetupUpdate(BaseModel):
  class WikipediaIntegrationDef (line 3411) | class WikipediaIntegrationDef(BaseIntegrationDef):
  class WikipediaIntegrationDefUpdate (line 3437) | class WikipediaIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class WikipediaSearchArguments (line 3463) | class WikipediaSearchArguments(BaseModel):
  class WikipediaSearchArgumentsUpdate (line 3481) | class WikipediaSearchArgumentsUpdate(BaseModel):
  class AlgoliaIntegrationDef (line 3499) | class AlgoliaIntegrationDef(BaseIntegrationDef):
  class AlgoliaIntegrationDefUpdate (line 3525) | class AlgoliaIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class ArxivIntegrationDef (line 3551) | class ArxivIntegrationDef(BaseIntegrationDef):
  class ArxivIntegrationDefUpdate (line 3577) | class ArxivIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class BaseBrowserbaseIntegrationDef (line 3603) | class BaseBrowserbaseIntegrationDef(BaseIntegrationDef):
  class BaseBrowserbaseIntegrationDefUpdate (line 3632) | class BaseBrowserbaseIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class BaseCloudinaryIntegrationDef (line 3661) | class BaseCloudinaryIntegrationDef(BaseIntegrationDef):
  class BaseCloudinaryIntegrationDefUpdate (line 3674) | class BaseCloudinaryIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class BrowserbaseCompleteSessionIntegrationDef (line 3687) | class BrowserbaseCompleteSessionIntegrationDef(BaseBrowserbaseIntegratio...
  class BrowserbaseCompleteSessionIntegrationDefUpdate (line 3699) | class BrowserbaseCompleteSessionIntegrationDefUpdate(
  class BrowserbaseContextIntegrationDef (line 3713) | class BrowserbaseContextIntegrationDef(BaseBrowserbaseIntegrationDef):
  class BrowserbaseContextIntegrationDefUpdate (line 3731) | class BrowserbaseContextIntegrationDefUpdate(BaseBrowserbaseIntegrationD...
  class BrowserbaseCreateSessionIntegrationDef (line 3749) | class BrowserbaseCreateSessionIntegrationDef(BaseBrowserbaseIntegrationD...
  class BrowserbaseCreateSessionIntegrationDefUpdate (line 3764) | class BrowserbaseCreateSessionIntegrationDefUpdate(BaseBrowserbaseIntegr...
  class BrowserbaseExtensionIntegrationDef (line 3779) | class BrowserbaseExtensionIntegrationDef(BaseBrowserbaseIntegrationDef):
  class BrowserbaseExtensionIntegrationDefUpdate (line 3797) | class BrowserbaseExtensionIntegrationDefUpdate(BaseBrowserbaseIntegratio...
  class BrowserbaseGetSessionIntegrationDef (line 3815) | class BrowserbaseGetSessionIntegrationDef(BaseBrowserbaseIntegrationDef):
  class BrowserbaseGetSessionIntegrationDefUpdate (line 3827) | class BrowserbaseGetSessionIntegrationDefUpdate(BaseBrowserbaseIntegrati...
  class BrowserbaseGetSessionLiveUrlsIntegrationDef (line 3839) | class BrowserbaseGetSessionLiveUrlsIntegrationDef(BaseBrowserbaseIntegra...
  class BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate (line 3851) | class BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate(
  class BrowserbaseListSessionsIntegrationDef (line 3865) | class BrowserbaseListSessionsIntegrationDef(BaseBrowserbaseIntegrationDef):
  class BrowserbaseListSessionsIntegrationDefUpdate (line 3883) | class BrowserbaseListSessionsIntegrationDefUpdate(BaseBrowserbaseIntegra...
  class CloudinaryEditIntegrationDef (line 3901) | class CloudinaryEditIntegrationDef(BaseCloudinaryIntegrationDef):
  class CloudinaryEditIntegrationDefUpdate (line 3913) | class CloudinaryEditIntegrationDefUpdate(BaseCloudinaryIntegrationDefUpd...
  class CloudinaryUploadIntegrationDef (line 3925) | class CloudinaryUploadIntegrationDef(BaseCloudinaryIntegrationDef):
  class CloudinaryUploadIntegrationDefUpdate (line 3937) | class CloudinaryUploadIntegrationDefUpdate(BaseCloudinaryIntegrationDefU...

FILE: src/agents-api/agents_api/autogen/Users.py
  class CreateUserRequest (line 12) | class CreateUserRequest(BaseModel):
  class PatchUserRequest (line 44) | class PatchUserRequest(BaseModel):
  class UpdateUserRequest (line 76) | class UpdateUserRequest(BaseModel):
  class User (line 108) | class User(BaseModel):
  class CreateOrUpdateUserRequest (line 145) | class CreateOrUpdateUserRequest(CreateUserRequest):

FILE: src/agents-api/agents_api/autogen/openapi_model.py
  class ListResponse (line 40) | class ListResponse(BaseModel, Generic[DataT]):
  class CreateToolRequest (line 48) | class CreateToolRequest(UpdateToolRequest):
  class CreateOrUpdateAgentRequest (line 52) | class CreateOrUpdateAgentRequest(UpdateAgentRequest):
  class CreateOrUpdateUserRequest (line 56) | class CreateOrUpdateUserRequest(UpdateUserRequest):
  class CreateOrUpdateSessionRequest (line 60) | class CreateOrUpdateSessionRequest(CreateSessionRequest):
  class MapReduceStep (line 67) | class MapReduceStep(Main):
  class ChatMLTextContentPart (line 71) | class ChatMLTextContentPart(Content):
  class ChatMLImageContentPart (line 75) | class ChatMLImageContentPart(ContentModel):
  class InputChatMLMessage (line 79) | class InputChatMLMessage(Message):
  function type_property (line 95) | def type_property(self: BaseModel) -> str:
  function validate_python_expression (line 126) | def validate_python_expression(expr: str) -> tuple[bool, str]:
  function validate_jinja_template (line 134) | def validate_jinja_template(template: str) -> tuple[bool, str]:
  function validate_evaluate_expressions (line 155) | def validate_evaluate_expressions(cls, v):
  function validate_arguments (line 168) | def validate_arguments(cls, v):
  function validate_prompt (line 184) | def validate_prompt(cls, v):
  function validate_set_expressions (line 205) | def validate_set_expressions(cls, v):
  function validate_log_template (line 218) | def validate_log_template(cls, v):
  function validate_return_expressions (line 230) | def validate_return_expressions(cls, v):
  function validate_yield_arguments (line 243) | def validate_yield_arguments(cls, v):
  function validate_if_expression (line 257) | def validate_if_expression(cls, v):
  function validate_over_expression (line 269) | def validate_over_expression(cls, v):
  function validate_reduce_expression (line 278) | def validate_reduce_expression(cls, v):
  function validate_subworkflows (line 303) | def validate_subworkflows(self):
  class SystemDef (line 362) | class SystemDef(SystemDef):
  class CreateTransitionRequest (line 366) | class CreateTransitionRequest(Transition):
  class ToolExecutionResult (line 377) | class ToolExecutionResult(BaseModel):
  class WebPreviewToolCall (line 386) | class WebPreviewToolCall(BaseModel):
  class CreateEntryRequest (line 395) | class CreateEntryRequest(BaseEntry):
    method from_model_input (line 399) | def from_model_input(
  class Workflow (line 449) | class Workflow(BaseModel):
  class TaskToolDef (line 458) | class TaskToolDef(BaseModel):
  class TaskSpec (line 468) | class TaskSpec(_Task):
  class TaskSpecDef (line 478) | class TaskSpecDef(TaskSpec):
  class PartialTaskSpecDef (line 484) | class PartialTaskSpecDef(TaskSpecDef):
  class Task (line 488) | class Task(_Task):
  class PatchTaskRequest (line 525) | class PatchTaskRequest(_PatchTaskRequest):
  class UpdateTaskRequest (line 535) | class UpdateTaskRequest(_UpdateTaskRequest):
  class ExecutionStatusEvent (line 555) | class ExecutionStatusEvent(BaseModel):

FILE: src/agents-api/agents_api/clients/async_s3.py
  function setup (line 14) | async def setup() -> AioBaseClient:
  function list_buckets (line 38) | async def list_buckets() -> list[str]:
  function exists (line 46) | async def exists(key: str) -> bool:
  function add_object (line 59) | async def add_object(key: str, body: bytes, replace: bool = False) -> None:
  function get_object (line 73) | async def get_object(key: str) -> bytes:
  function delete_object (line 81) | async def delete_object(key: str) -> None:
  function add_object_with_hash (line 87) | async def add_object_with_hash(body: bytes, replace: bool = False) -> str:

FILE: src/agents-api/agents_api/clients/feature_flags.py
  class FeatureFlagContext (line 20) | class FeatureFlagContext(TypedDict, total=False):
  class UnleashProvider (line 27) | class UnleashProvider(AbstractProvider):
    method __init__ (line 30) | def __init__(self):
    method get_metadata (line 34) | def get_metadata(self) -> Metadata:
    method _ensure_initialized (line 38) | def _ensure_initialized(self):
    method _initialize_unleash (line 44) | def _initialize_unleash(self):
    method _build_unleash_context (line 80) | def _build_unleash_context(self, evaluation_context: EvaluationContext...
    method resolve_boolean_details (line 106) | def resolve_boolean_details(
    method resolve_string_details (line 138) | def resolve_string_details(
    method resolve_integer_details (line 170) | def resolve_integer_details(
    method resolve_float_details (line 202) | def resolve_float_details(
    method resolve_object_details (line 234) | def resolve_object_details(
  class FeatureFlagClient (line 267) | class FeatureFlagClient:
    method __new__ (line 273) | def __new__(cls):
    method __init__ (line 280) | def __init__(self):
    method _ensure_initialized (line 286) | def _ensure_initialized(self):
    method _initialize_provider (line 293) | def _initialize_provider(self):
    method is_enabled (line 309) | def is_enabled(
  function get_feature_flag_client (line 354) | def get_feature_flag_client() -> FeatureFlagClient:

FILE: src/agents-api/agents_api/clients/integrations.py
  function run_integration_service (line 12) | async def run_integration_service(
  function convert_to_openai_tool (line 35) | async def convert_to_openai_tool(

FILE: src/agents-api/agents_api/clients/litellm.py
  function patch_litellm_response (line 34) | def patch_litellm_response(
  function acompletion (line 57) | async def acompletion(
  function aembedding (line 143) | async def aembedding(
  function get_model_list (line 232) | async def get_model_list(*, custom_api_key: str | None = None) -> list[d...

FILE: src/agents-api/agents_api/clients/pg.py
  function _init_conn (line 8) | async def _init_conn(conn) -> None:
  function create_db_pool (line 18) | async def create_db_pool(dsn: str | None = None, **kwargs):

FILE: src/agents-api/agents_api/clients/sync_s3.py
  function setup (line 15) | def setup():
  function list_buckets (line 46) | def list_buckets() -> list[str]:
  function exists (line 54) | def exists(key: str) -> bool:
  function add_object (line 67) | def add_object(key: str, body: bytes, replace: bool = False) -> None:
  function get_object (line 81) | def get_object(key: str) -> bytes:
  function delete_object (line 89) | def delete_object(key: str) -> None:
  function add_object_with_hash (line 95) | def add_object_with_hash(body: bytes, replace: bool = False) -> str:

FILE: src/agents-api/agents_api/clients/temporal.py
  function get_client (line 33) | async def get_client(
  function get_client_with_metrics (line 61) | async def get_client_with_metrics(
  function run_task_execution_workflow (line 99) | async def run_task_execution_workflow(
  function get_workflow_handle (line 141) | async def get_workflow_handle(

FILE: src/agents-api/agents_api/common/exceptions/__init__.py
  class BaseCommonException (line 15) | class BaseCommonException(Exception):
    method __init__ (line 16) | def __init__(self, msg: str, http_code: int) -> None:

FILE: src/agents-api/agents_api/common/exceptions/agents.py
  class BaseAgentException (line 10) | class BaseAgentException(BaseCommonException):
  class AgentNotFoundError (line 15) | class AgentNotFoundError(BaseAgentException):
    method __init__ (line 23) | def __init__(self, developer_id: UUID | str, agent_id: UUID | str) -> ...
  class AgentToolNotFoundError (line 32) | class AgentToolNotFoundError(BaseAgentException):
    method __init__ (line 40) | def __init__(self, agent_id: UUID | str, tool_id: UUID | str) -> None:
  class AgentDocNotFoundError (line 46) | class AgentDocNotFoundError(BaseAgentException):
    method __init__ (line 54) | def __init__(self, agent_id: UUID | str, doc_id: UUID | str) -> None:
  class AgentModelNotValid (line 60) | class AgentModelNotValid(BaseAgentException):
    method __init__ (line 63) | def __init__(self, model: str, all_models: list[str]) -> None:
  class MissingAgentModelAPIKeyError (line 72) | class MissingAgentModelAPIKeyError(BaseAgentException):
    method __init__ (line 75) | def __init__(self, model: str) -> None:

FILE: src/agents-api/agents_api/common/exceptions/executions.py
  class EvaluateError (line 8) | class EvaluateError(Exception):
    method __init__ (line 9) | def __init__(self, error, expression, values) -> None:

FILE: src/agents-api/agents_api/common/exceptions/secrets.py
  class SecretNotFoundError (line 8) | class SecretNotFoundError(BaseCommonException):
    method __init__ (line 11) | def __init__(self, developer_id: UUID | str, name: str) -> None:

FILE: src/agents-api/agents_api/common/exceptions/sessions.py
  class BaseSessionException (line 14) | class BaseSessionException(BaseCommonException):
  class SessionNotFoundError (line 23) | class SessionNotFoundError(BaseSessionException):
    method __init__ (line 34) | def __init__(self, developer_id: UUID | str, session_id: UUID | str) -...

FILE: src/agents-api/agents_api/common/exceptions/tasks.py
  function is_retryable_error (line 159) | def is_retryable_error(error: BaseException) -> bool:

FILE: src/agents-api/agents_api/common/exceptions/tools.py
  class BaseToolsException (line 11) | class BaseToolsException(BaseCommonException):
  class IntegrationExecutionException (line 16) | class IntegrationExecutionException(BaseToolsException):
    method __init__ (line 19) | def __init__(self, integration: BaseIntegrationDef, error: str) -> None:

FILE: src/agents-api/agents_api/common/exceptions/users.py
  class BaseUserException (line 10) | class BaseUserException(BaseCommonException):
  class UserNotFoundError (line 19) | class UserNotFoundError(BaseUserException):
    method __init__ (line 27) | def __init__(self, developer_id: UUID | str, user_id: UUID | str) -> N...
  class UserDocNotFoundError (line 36) | class UserDocNotFoundError(BaseUserException):
    method __init__ (line 44) | def __init__(self, user_id: UUID | str, doc_id: UUID | str) -> None:

FILE: src/agents-api/agents_api/common/exceptions/validation.py
  class QueryParamsValidationError (line 6) | class QueryParamsValidationError(BaseCommonException):
    method __init__ (line 9) | def __init__(self, message: str) -> None:

FILE: src/agents-api/agents_api/common/interceptors.py
  function is_too_large (line 68) | def is_too_large(result: Any) -> bool:
  function load_if_remote (line 81) | def load_if_remote(arg: Any | RemoteObject) -> Any:
  function offload_if_large (line 103) | def offload_if_large[T](result: T) -> T | RemoteObject:
  function offload_to_blob_store (line 119) | def offload_to_blob_store[S, T](
  function handle_execution_with_errors (line 164) | async def handle_execution_with_errors[I, T](
  function handle_execution_with_errors_sync (line 196) | def handle_execution_with_errors_sync[I, T](
  class CustomActivityInterceptor (line 230) | class CustomActivityInterceptor(ActivityInboundInterceptor):
    method execute_activity (line 240) | async def execute_activity(self, input: ExecuteActivityInput) -> Any:
  class CustomWorkflowInterceptor (line 250) | class CustomWorkflowInterceptor(WorkflowInboundInterceptor):
    method init (line 257) | def init(self, outbound: WorkflowOutboundInterceptor) -> None:
    method execute_workflow (line 266) | async def execute_workflow(self, input: ExecuteWorkflowInput) -> Any:
  class CustomWorkflowOutboundInterceptor (line 276) | class CustomWorkflowOutboundInterceptor(WorkflowOutboundInterceptor):
    method start_activity (line 282) | def start_activity(self, input: StartActivityInput) -> ActivityHandle:
    method continue_as_new (line 290) | def continue_as_new(self, input: ContinueAsNewInput) -> NoReturn:
    method start_local_activity (line 297) | def start_local_activity(self, input: StartLocalActivityInput) -> Acti...
    method start_child_workflow (line 304) | async def start_child_workflow(self, input: StartChildWorkflowInput) -...
  class CustomInterceptor (line 312) | class CustomInterceptor(Interceptor):
    method intercept_activity (line 317) | def intercept_activity(
    method workflow_interceptor_class (line 326) | def workflow_interceptor_class(
  class CustomClientInterceptor (line 336) | class CustomClientInterceptor(ClientInterceptor):
    method intercept_client (line 341) | def intercept_client(self, next: OutboundInterceptor) -> OutboundInter...
  class CustomOutboundInterceptor (line 345) | class CustomOutboundInterceptor(OutboundInterceptor):
    method start_workflow (line 351) | async def start_workflow(self, input: StartWorkflowInput) -> WorkflowH...

FILE: src/agents-api/agents_api/common/nlp.py
  function clean_keyword (line 34) | def clean_keyword(kw: str) -> str:
  function extract_keywords (line 44) | def extract_keywords(doc: Doc, top_n: int = 25, split_chunks: bool = Tru...
  function text_to_keywords (line 121) | def text_to_keywords(

FILE: src/agents-api/agents_api/common/protocol/agents.py
  class AgentDefaultSettings (line 4) | class AgentDefaultSettings(BaseModel):

FILE: src/agents-api/agents_api/common/protocol/developers.py
  class Developer (line 11) | class Developer(BaseModel):

FILE: src/agents-api/agents_api/common/protocol/models.py
  class ExecutionInput (line 32) | class ExecutionInput(BaseModel):
    method load_arguments (line 48) | def load_arguments(self) -> None:
  function task_to_spec (line 57) | def task_to_spec(
  function spec_to_task_data (line 112) | def spec_to_task_data(spec: dict) -> dict:
  function spec_to_task (line 130) | def spec_to_task(**spec) -> Task | CreateTaskRequest:

FILE: src/agents-api/agents_api/common/protocol/sessions.py
  class SessionSettings (line 25) | class SessionSettings(AgentDefaultSettings):
  class SessionData (line 32) | class SessionData(BaseModel):
  class Toolset (line 43) | class Toolset(BaseModel):
  class ChatContext (line 48) | class ChatContext(SessionData):
    method get_active_agent (line 55) | def get_active_agent(self) -> Agent:
    method merge_settings (line 71) | def merge_settings(self, chat_input: ChatInput) -> dict:
    method merge_system_template (line 85) | def merge_system_template(self, system_template: str | None) -> str:
    method get_active_tools (line 92) | def get_active_tools(self) -> list[Tool]:
    method get_chat_environment (line 106) | def get_chat_environment(self) -> dict[str, dict | list[dict] | None]:
  function make_session (line 126) | def make_session(

FILE: src/agents-api/agents_api/common/protocol/state_machine.py
  class TransitionType (line 11) | class TransitionType(StrEnum):
  class ExecutionStatus (line 25) | class ExecutionStatus(StrEnum):
  class StateTransitionError (line 37) | class StateTransitionError(Exception):
  class ExecutionState (line 41) | class ExecutionState(BaseModel):
  class ExecutionStateMachine (line 134) | class ExecutionStateMachine:
    method __init__ (line 140) | def __init__(self, execution_id: UUID) -> None:
    method _validate_transition (line 147) | def _validate_transition(self, new_type: TransitionType) -> bool:
    method transition_to (line 152) | def transition_to(
    method is_terminal (line 196) | def is_terminal(self) -> bool:
    method current_status (line 204) | def current_status(self) -> ExecutionStatus:

FILE: src/agents-api/agents_api/common/protocol/tasks.py
  class PartialTransition (line 145) | class PartialTransition(create_partial_model(CreateTransitionRequest)):
  class WorkflowResult (line 150) | class WorkflowResult(BaseModel):
  class StepContext (line 163) | class StepContext(BaseModel):
    method load_inputs (line 169) | def load_inputs(self) -> None:
    method tools (line 178) | async def tools(self) -> list[Tool | CreateToolRequest]:
    method current_workflow (line 226) | def current_workflow(self) -> Annotated[Workflow, Field(exclude=True)]:
    method current_step (line 233) | def current_step(self) -> Annotated[WorkflowStep, Field(exclude=True)]:
    method current_scope_id (line 239) | def current_scope_id(self) -> Annotated[UUID, Field(exclude=True)]:
    method is_last_step (line 245) | def is_last_step(self) -> Annotated[bool, Field(exclude=True)]:
    method is_first_step (line 251) | def is_first_step(self) -> Annotated[bool, Field(exclude=True)]:
    method is_main (line 257) | def is_main(self) -> Annotated[bool, Field(exclude=True)]:
    method model_dump (line 260) | def model_dump(self, *args, **kwargs) -> dict[str, Any]:
    method get_inputs (line 267) | async def get_inputs(
    method prepare_for_step (line 300) | async def prepare_for_step(
  class StepOutcome (line 340) | class StepOutcome(BaseModel):
    method load_remote (line 345) | def load_remote(self) -> None:

FILE: src/agents-api/agents_api/common/utils/checks.py
  function check_postgres (line 16) | async def check_postgres() -> HealthStatus:
  function check_temporal (line 28) | async def check_temporal() -> HealthStatus:
  function check_litellm (line 39) | async def check_litellm() -> HealthStatus:
  function check_integration_service (line 49) | async def check_integration_service() -> HealthStatus:

FILE: src/agents-api/agents_api/common/utils/datetime.py
  function utcnow (line 6) | def utcnow():

FILE: src/agents-api/agents_api/common/utils/db_exceptions.py
  function partialclass (line 21) | def partialclass(cls, *args, **kwargs):
  function common_db_exceptions (line 33) | def common_db_exceptions(

FILE: src/agents-api/agents_api/common/utils/evaluator.py
  function safe_range (line 41) | def safe_range(*args):
  function safe_json_loads (line 50) | def safe_json_loads(s: str) -> Any:
  function safe_yaml_load (line 70) | def safe_yaml_load(s: str) -> Any:
  function safe_base64_decode (line 90) | def safe_base64_decode(s: str) -> str:
  function safe_base64_encode (line 114) | def safe_base64_encode(s: str) -> str:
  function safe_random_choice (line 134) | def safe_random_choice(seq: list[Any] | tuple[Any, ...] | str) -> Any:
  function safe_random_sample (line 155) | def safe_random_sample(population: list[T] | tuple[T, ...] | str, k: int...
  function chunk_doc (line 187) | def chunk_doc(string: str) -> list[str]:
  function safe_extract_json (line 207) | def safe_extract_json(string: str):
  function humanize_text (line 264) | def humanize_text(
  function markdown_to_html (line 291) | def markdown_to_html(markdown_text: str) -> str:
  function html_to_markdown (line 305) | def html_to_markdown(html_text: str) -> str:
  function csv_reader (line 360) | def csv_reader(
  function csv_writer (line 386) | def csv_writer(
  function csv_dictreader (line 412) | def csv_dictreader(
  function csv_dictwriter (line 432) | def csv_dictwriter(
  class stdlib_csv (line 452) | class stdlib_csv:
  class stdlib_re (line 477) | class stdlib_re:
  class stdlib_json (line 490) | class stdlib_json:
  class stdlib_yaml (line 496) | class stdlib_yaml:
  class stdlib_string (line 504) | class stdlib_string:
  class stdlib_datetime (line 517) | class stdlib_datetime:
    class timezone (line 518) | class timezone:
      class utc (line 519) | class utc:
    class datetime (line 522) | class datetime:
  class stdlib_math (line 533) | class stdlib_math:
  class stdlib_statistics (line 557) | class stdlib_statistics:
  class stdlib_base64 (line 569) | class stdlib_base64:
  class stdlib_urllib (line 575) | class stdlib_urllib:
    class parse (line 576) | class parse:
  class stdlib_random (line 588) | class stdlib_random:
  class stdlib_time (line 598) | class stdlib_time:
  function get_evaluator (line 631) | def get_evaluator(
  function get_handler_with_filtered_params (line 650) | def get_handler_with_filtered_params(system: SystemDef) -> Callable:
  function get_handler (line 687) | def get_handler(system: SystemDef) -> Callable:
  class RateLimiter (line 808) | class RateLimiter:
    method __post_init__ (line 812) | def __post_init__(self) -> None:
    method _clean_old_requests (line 817) | def _clean_old_requests(self) -> None:
    method acquire (line 822) | async def acquire(self) -> bool:
    method current_usage (line 835) | def current_usage(self) -> int:

FILE: src/agents-api/agents_api/common/utils/expressions.py
  function _recursive_evaluate (line 23) | def _recursive_evaluate(expr, evaluator: SimpleEval):
  function evaluate_expressions (line 60) | def evaluate_expressions(

FILE: src/agents-api/agents_api/common/utils/feature_flags.py
  function get_environment (line 9) | def get_environment() -> str:
  function get_feature_flag_value (line 14) | def get_feature_flag_value(

FILE: src/agents-api/agents_api/common/utils/get_doc_search.py
  function get_language (line 20) | def get_language(lang: str) -> str:
  function get_search_fn_and_params (line 48) | def get_search_fn_and_params(
  function strip_embeddings (line 145) | def strip_embeddings(

FILE: src/agents-api/agents_api/common/utils/humanization_utils.py
  function text_translate (line 51) | def text_translate(text: str, src_lang, target_lang):
  function mix_translate (line 58) | def mix_translate(text: str, src_lang, target_lang):
  function humanize_llm (line 70) | def humanize_llm(text: str) -> str:
  function grammar (line 88) | def grammar(text: str):
  function is_human_desklib (line 106) | def is_human_desklib(text: str) -> float:
  function is_human_sapling (line 130) | def is_human_sapling(text: str):
  function is_human_zerogpt (line 146) | def is_human_zerogpt(input_text, max_tries: int = 3):
  function replace_with_homoglyphs (line 190) | def replace_with_homoglyphs(text: str, max_replacements: int = 2):
  function insert_em_dash (line 270) | def insert_em_dash(word: str, probability: float = 0.1, min_length: int ...
  function process_long_words (line 281) | def process_long_words(text: str) -> str:
  function split_with_langchain (line 289) | def split_with_langchain(markdown_text: str) -> list[Document]:
  function reassemble_markdown (line 305) | def reassemble_markdown(splits: list[Document]) -> str:
  function humanize_paragraph (line 329) | def humanize_paragraph(

FILE: src/agents-api/agents_api/common/utils/json.py
  class CustomJSONEncoder (line 10) | class CustomJSONEncoder(json.JSONEncoder):
    method __init__ (line 13) | def __init__(self, *args, **kwargs) -> None:
    method encode (line 24) | def encode(self, o) -> str:
    method default (line 35) | def default(self, obj) -> Any:
  function dumps (line 55) | def dumps(obj: Any, default_empty_value: str = "", cls=None) -> str:

FILE: src/agents-api/agents_api/common/utils/llm_providers.py
  function get_config (line 10) | def get_config():
  function get_api_key_env_var_name (line 27) | def get_api_key_env_var_name(model: str) -> str | None:
  function get_litellm_model_name (line 39) | def get_litellm_model_name(model: str) -> str:

FILE: src/agents-api/agents_api/common/utils/memory.py
  function total_size (line 16) | def total_size(

FILE: src/agents-api/agents_api/common/utils/messages.py
  function content_to_json (line 13) | def content_to_json(
  function stringify_content (line 26) | def stringify_content(

FILE: src/agents-api/agents_api/common/utils/mmr.py
  function _cosine_similarity (line 20) | def _cosine_similarity(x: Matrix, y: Matrix) -> np.ndarray:
  function maximal_marginal_relevance (line 68) | def maximal_marginal_relevance(
  function apply_mmr_to_docs (line 115) | def apply_mmr_to_docs(

FILE: src/agents-api/agents_api/common/utils/model_validation.py
  class ModelNotAvailableError (line 10) | class ModelNotAvailableError(ValueError):
    method __init__ (line 13) | def __init__(self, model_name: str | None, available_models: Sequence[...
  function ensure_model_available (line 20) | async def ensure_model_available(

FILE: src/agents-api/agents_api/common/utils/secrets.py
  function get_secret_by_name (line 18) | async def get_secret_by_name(developer_id: UUID, name: str, decrypt: boo...
  function get_secrets_list (line 45) | async def get_secrets_list(

FILE: src/agents-api/agents_api/common/utils/task_validation.py
  class ValidationIssue (line 12) | class ValidationIssue(BaseModel):
  class TaskValidationResult (line 21) | class TaskValidationResult(BaseModel):
  function backwards_compatibility (line 30) | def backwards_compatibility(expr: str) -> str:
  function validate_py_expression (line 74) | def validate_py_expression(
  function _validate_step_expressions (line 267) | def _validate_step_expressions(
  function validate_task_expressions (line 459) | def validate_task_expressions(
  function validate_task (line 491) | def validate_task(

FILE: src/agents-api/agents_api/common/utils/template.py
  function render_template_string (line 34) | async def render_template_string(
  function render_template_nested (line 74) | async def render_template_nested[T: (str, dict, list[dict | list[dict]],...
  function render_template (line 93) | async def render_template[T: str | list[dict]](

FILE: src/agents-api/agents_api/common/utils/tool_runner.py
  function format_tool (line 32) | async def format_tool(tool: Tool | CreateToolRequest) -> dict:
  function run_tool_call (line 93) | async def run_tool_call(
  function run_context_tool (line 145) | async def run_context_tool(
  function convert_litellm_to_chosen_tool_call (line 171) | def convert_litellm_to_chosen_tool_call(
  function run_llm_with_tools (line 200) | async def run_llm_with_tools(

FILE: src/agents-api/agents_api/common/utils/types.py
  function dict_like (line 6) | def dict_like(pydantic_model_class: type[BaseModel]) -> BeartypeValidator:

FILE: src/agents-api/agents_api/common/utils/usage.py
  function is_llama_based_model (line 14) | def is_llama_based_model(model_string: str) -> bool:
  function track_usage (line 33) | async def track_usage(
  function track_embedding_usage (line 102) | async def track_embedding_usage(

FILE: src/agents-api/agents_api/common/utils/workflows.py
  function get_workflow_name (line 8) | def get_workflow_name(transition: Transition) -> str:

FILE: src/agents-api/agents_api/common/utils/yaml.py
  function load (line 6) | def load(string: str) -> Any:
  function dump (line 10) | def dump(value: Any) -> str:

FILE: src/agents-api/agents_api/dependencies/auth.py
  function get_api_key (line 12) | async def get_api_key(

FILE: src/agents-api/agents_api/dependencies/content_length.py
  function valid_content_length (line 6) | async def valid_content_length(content_length: int = Header(..., lt=max_...

FILE: src/agents-api/agents_api/dependencies/developer_id.py
  function get_developer_id (line 12) | async def get_developer_id(
  function get_developer_data (line 32) | async def get_developer_data(

FILE: src/agents-api/agents_api/dependencies/exceptions.py
  class InvalidHeaderFormat (line 1) | class InvalidHeaderFormat(Exception):

FILE: src/agents-api/agents_api/dependencies/query_filter.py
  function convert_value (line 8) | def convert_value(value: str) -> Any:
  class MetadataFilter (line 20) | class MetadataFilter(BaseModel):
  function create_filter_extractor (line 24) | def create_filter_extractor(

FILE: src/agents-api/agents_api/env.py
  function _parse_optional_int (line 143) | def _parse_optional_int(val: str | None) -> int | None:
  function _validate_master_key (line 216) | def _validate_master_key(key: str | None) -> str:

FILE: src/agents-api/agents_api/exceptions.py
  class AgentsBaseException (line 4) | class AgentsBaseException(Exception):
  class ModelNotSupportedError (line 8) | class ModelNotSupportedError(AgentsBaseException):
    method __init__ (line 11) | def __init__(self, model_name: str) -> None:
  class PromptTooBigError (line 15) | class PromptTooBigError(AgentsBaseException):
    method __init__ (line 18) | def __init__(self, token_count, max_tokens) -> None:
  class UnknownTokenizerError (line 24) | class UnknownTokenizerError(AgentsBaseException):
    method __init__ (line 27) | def __init__(self) -> None:
  class TooManyRequestsError (line 31) | class TooManyRequestsError(Exception):
  class LastErrorInput (line 36) | class LastErrorInput:
  class FailedDecodingSentinel (line 41) | class FailedDecodingSentinel:
  class FailedEncodingSentinel (line 48) | class FailedEncodingSentinel:
  class QueriesBaseException (line 54) | class QueriesBaseException(AgentsBaseException):
  class InvalidSQLQuery (line 58) | class InvalidSQLQuery(QueriesBaseException):
    method __init__ (line 59) | def __init__(self, query_name: str) -> None:

FILE: src/agents-api/agents_api/metrics/counters.py
  function query_metrics (line 62) | def query_metrics(metric_label: str, id_field_name: str = "developer_id"):

FILE: src/agents-api/agents_api/queries/agents/create_agent.py
  function create_agent_query (line 78) | async def create_agent_query(
  function create_agent (line 114) | async def create_agent(

FILE: src/agents-api/agents_api/queries/agents/create_or_update_agent.py
  function create_or_update_agent (line 110) | async def create_or_update_agent(

FILE: src/agents-api/agents_api/queries/agents/delete_agent.py
  function delete_agent (line 67) | async def delete_agent(*, agent_id: UUID, developer_id: UUID) -> tuple[s...

FILE: src/agents-api/agents_api/queries/agents/get_agent.py
  function get_agent (line 48) | async def get_agent(

FILE: src/agents-api/agents_api/queries/agents/list_agents.py
  function list_agents (line 57) | async def list_agents(

FILE: src/agents-api/agents_api/queries/agents/patch_agent.py
  function patch_agent_query (line 94) | async def patch_agent_query(
  function patch_agent (line 131) | async def patch_agent(

FILE: src/agents-api/agents_api/queries/agents/update_agent.py
  function update_agent_query (line 68) | async def update_agent_query(
  function update_agent (line 103) | async def update_agent(

FILE: src/agents-api/agents_api/queries/chat/gather_messages.py
  function gather_messages (line 36) | async def gather_messages(

FILE: src/agents-api/agents_api/queries/chat/prepare_chat_context.py
  function _transform (line 108) | def _transform(d):
  function prepare_chat_context (line 163) | async def prepare_chat_context(

FILE: src/agents-api/agents_api/queries/developers/create_developer.py
  function create_developer (line 38) | async def create_developer(

FILE: src/agents-api/agents_api/queries/developers/get_developer.py
  function get_developer (line 26) | async def get_developer(

FILE: src/agents-api/agents_api/queries/developers/patch_developer.py
  function patch_developer (line 22) | async def patch_developer(

FILE: src/agents-api/agents_api/queries/developers/update_developer.py
  function update_developer (line 22) | async def update_developer(

FILE: src/agents-api/agents_api/queries/docs/bulk_delete_docs.py
  function bulk_delete_docs (line 28) | async def bulk_delete_docs(

FILE: src/agents-api/agents_api/queries/docs/create_doc.py
  function create_doc (line 60) | async def create_doc(

FILE: src/agents-api/agents_api/queries/docs/delete_doc.py
  function delete_doc (line 49) | async def delete_doc(

FILE: src/agents-api/agents_api/queries/docs/get_doc.py
  function get_doc (line 86) | async def get_doc(

FILE: src/agents-api/agents_api/queries/docs/list_docs.py
  function list_docs (line 59) | async def list_docs(

FILE: src/agents-api/agents_api/queries/docs/search_docs_by_embedding.py
  function search_docs_by_embedding (line 33) | async def search_docs_by_embedding(

FILE: src/agents-api/agents_api/queries/docs/search_docs_by_text.py
  function search_docs_by_text (line 36) | async def search_docs_by_text(

FILE: src/agents-api/agents_api/queries/docs/search_docs_hybrid.py
  function search_docs_hybrid (line 44) | async def search_docs_hybrid(

FILE: src/agents-api/agents_api/queries/docs/utils.py
  function transform_to_doc_reference (line 4) | def transform_to_doc_reference(d: dict) -> dict:
  function transform_doc (line 40) | def transform_doc(d: dict) -> dict:

FILE: src/agents-api/agents_api/queries/entries/create_entries.py
  function create_entries (line 68) | async def create_entries(
  function add_entry_relations (line 127) | async def add_entry_relations(

FILE: src/agents-api/agents_api/queries/entries/delete_entries.py
  function delete_entries_for_session (line 71) | async def delete_entries_for_session(
  function delete_entries (line 96) | async def delete_entries(

FILE: src/agents-api/agents_api/queries/entries/get_history.py
  function _transform (line 50) | def _transform(row):
  function get_history (line 79) | async def get_history(

FILE: src/agents-api/agents_api/queries/entries/list_entries.py
  function list_entries (line 57) | async def list_entries(

FILE: src/agents-api/agents_api/queries/executions/count_executions.py
  function count_executions (line 23) | async def count_executions(

FILE: src/agents-api/agents_api/queries/executions/create_execution.py
  function create_execution (line 52) | async def create_execution(

FILE: src/agents-api/agents_api/queries/executions/create_execution_transition.py
  function validate_transition_targets (line 47) | def validate_transition_targets(data: CreateTransitionRequest) -> None:
  function create_execution_transition (line 105) | async def create_execution_transition(

FILE: src/agents-api/agents_api/queries/executions/create_temporal_lookup.py
  function create_temporal_lookup (line 36) | async def create_temporal_lookup(

FILE: src/agents-api/agents_api/queries/executions/get_execution.py
  function get_execution (line 54) | async def get_execution(

FILE: src/agents-api/agents_api/queries/executions/get_execution_status.py
  function get_execution_status (line 34) | async def get_execution_status(

FILE: src/agents-api/agents_api/queries/executions/get_execution_transition.py
  function _transform (line 20) | def _transform(d):
  function get_execution_transition (line 45) | async def get_execution_transition(

FILE: src/agents-api/agents_api/queries/executions/get_paused_execution_token.py
  function get_paused_execution_token (line 37) | async def get_paused_execution_token(

FILE: src/agents-api/agents_api/queries/executions/get_temporal_workflow_data.py
  function get_temporal_workflow_data (line 22) | async def get_temporal_workflow_data(

FILE: src/agents-api/agents_api/queries/executions/list_execution_inputs_data.py
  function _transform (line 36) | def _transform(d):
  function list_execution_inputs_data (line 79) | async def list_execution_inputs_data(

FILE: src/agents-api/agents_api/queries/executions/list_execution_state_data.py
  function _transform (line 34) | def _transform(d):
  function list_execution_state_data (line 77) | async def list_execution_state_data(

FILE: src/agents-api/agents_api/queries/executions/list_execution_transitions.py
  function _transform (line 36) | def _transform(d):
  function list_execution_transitions (line 79) | async def list_execution_transitions(

FILE: src/agents-api/agents_api/queries/executions/list_executions.py
  function list_executions (line 73) | async def list_executions(

FILE: src/agents-api/agents_api/queries/executions/lookup_temporal_data.py
  function lookup_temporal_data (line 27) | async def lookup_temporal_data(

FILE: src/agents-api/agents_api/queries/executions/prepare_execution_input.py
  function prepare_execution_input (line 74) | async def prepare_execution_input(

FILE: src/agents-api/agents_api/queries/files/create_file.py
  function create_file_query (line 105) | async def create_file_query(
  function create_file (line 158) | async def create_file(

FILE: src/agents-api/agents_api/queries/files/delete_file.py
  function delete_file (line 55) | async def delete_file(

FILE: src/agents-api/agents_api/queries/files/get_file.py
  function get_file (line 47) | async def get_file(

FILE: src/agents-api/agents_api/queries/files/list_files.py
  function list_files (line 42) | async def list_files(

FILE: src/agents-api/agents_api/queries/projects/create_project.py
  function create_project (line 45) | async def create_project(

FILE: src/agents-api/agents_api/queries/projects/list_projects.py
  function list_projects (line 47) | async def list_projects(

FILE: src/agents-api/agents_api/queries/projects/project_exists.py
  function project_exists (line 31) | async def project_exists(developer_id: UUID, canonical_name: str) -> tup...

FILE: src/agents-api/agents_api/queries/secrets/create.py
  function create_secret (line 38) | async def create_secret(

FILE: src/agents-api/agents_api/queries/secrets/delete.py
  function delete_secret (line 31) | async def delete_secret(*, secret_id: UUID, developer_id: UUID) -> tuple...

FILE: src/agents-api/agents_api/queries/secrets/get_by_name.py
  function get_secret_by_name_query (line 34) | async def get_secret_by_name_query(

FILE: src/agents-api/agents_api/queries/secrets/list.py
  function list_secrets_query (line 33) | async def list_secrets_query(

FILE: src/agents-api/agents_api/queries/secrets/update.py
  function update_secret (line 39) | async def update_secret(

FILE: src/agents-api/agents_api/queries/sessions/count_sessions.py
  function count_sessions (line 25) | async def count_sessions(

FILE: src/agents-api/agents_api/queries/sessions/create_or_update_session.py
  function create_or_update_session (line 77) | async def create_or_update_session(

FILE: src/agents-api/agents_api/queries/sessions/create_session.py
  function create_session (line 67) | async def create_session(

FILE: src/agents-api/agents_api/queries/sessions/delete_session.py
  function delete_session (line 39) | async def delete_session(

FILE: src/agents-api/agents_api/queries/sessions/get_session.py
  function get_session (line 49) | async def get_session(

FILE: src/agents-api/agents_api/queries/sessions/list_sessions.py
  function list_sessions (line 62) | async def list_sessions(

FILE: src/agents-api/agents_api/queries/sessions/patch_session.py
  function patch_session (line 42) | async def patch_session(

FILE: src/agents-api/agents_api/queries/sessions/update_session.py
  function update_session (line 39) | async def update_session(

FILE: src/agents-api/agents_api/queries/tasks/create_or_update_task.py
  function create_or_update_task (line 134) | async def create_or_update_task(

FILE: src/agents-api/agents_api/queries/tasks/create_task.py
  function create_task (line 101) | async def create_task(

FILE: src/agents-api/agents_api/queries/tasks/delete_task.py
  function delete_task (line 36) | async def delete_task(

FILE: src/agents-api/agents_api/queries/tasks/get_task.py
  function get_task (line 60) | async def get_task(

FILE: src/agents-api/agents_api/queries/tasks/list_tasks.py
  function list_tasks (line 48) | async def list_tasks(

FILE: src/agents-api/agents_api/queries/tasks/patch_task.py
  function patch_task (line 122) | async def patch_task(

FILE: src/agents-api/agents_api/queries/tasks/update_task.py
  function update_task (line 87) | async def update_task(

FILE: src/agents-api/agents_api/queries/tools/create_tools.py
  function create_tools (line 52) | async def create_tools(

FILE: src/agents-api/agents_api/queries/tools/delete_tool.py
  function delete_tool (line 30) | async def delete_tool(

FILE: src/agents-api/agents_api/queries/tools/get_tool.py
  function get_tool (line 32) | async def get_tool(

FILE: src/agents-api/agents_api/queries/tools/get_tool_args_from_metadata.py
  function get_tool_args_from_metadata (line 56) | async def get_tool_args_from_metadata(

FILE: src/agents-api/agents_api/queries/tools/list_tools.py
  function list_tools (line 40) | async def list_tools(

FILE: src/agents-api/agents_api/queries/tools/patch_tool.py
  function patch_tool (line 38) | async def patch_tool(

FILE: src/agents-api/agents_api/queries/tools/update_tool.py
  function update_tool (line 35) | async def update_tool(

FILE: src/agents-api/agents_api/queries/usage/create_usage_record.py
  function create_usage_record (line 123) | async def create_usage_record(

FILE: src/agents-api/agents_api/queries/usage/get_user_cost.py
  function get_usage_cost (line 53) | async def get_usage_cost(

FILE: src/agents-api/agents_api/queries/users/create_or_update_user.py
  function create_or_update_user_query (line 76) | async def create_or_update_user_query(
  function create_or_update_user (line 112) | async def create_or_update_user(

FILE: src/agents-api/agents_api/queries/users/create_user.py
  function create_user_query (line 72) | async def create_user_query(
  function create_user (line 103) | async def create_user(

FILE: src/agents-api/agents_api/queries/users/delete_user.py
  function delete_user (line 63) | async def delete_user(*, developer_id: UUID, user_id: UUID) -> tuple[str...

FILE: src/agents-api/agents_api/queries/users/get_user.py
  function get_user (line 33) | async def get_user(

FILE: src/agents-api/agents_api/queries/users/list_users.py
  function list_users (line 46) | async def list_users(

FILE: src/agents-api/agents_api/queries/users/patch_user.py
  function patch_user_query (line 102) | async def patch_user_query(
  function patch_user (line 139) | async def patch_user(

FILE: src/agents-api/agents_api/queries/users/update_user.py
  function update_user_query (line 93) | async def update_user_query(
  function update_user (line 128) | async def update_user(

FILE: src/agents-api/agents_api/queries/utils.py
  function generate_canonical_name (line 36) | def generate_canonical_name() -> str:
  class AsyncPGFetchArgs (line 43) | class AsyncPGFetchArgs(TypedDict):
  function prepare_pg_query_args (line 58) | def prepare_pg_query_args(
  function pg_query (line 91) | def pg_query[**P](
  function sanitize_string (line 197) | def sanitize_string(value: Any) -> Any:
  function wrap_in_class (line 219) | def wrap_in_class(
  function rewrap_exceptions (line 288) | def rewrap_exceptions(
  function run_concurrently (line 345) | def run_concurrently(
  function serialize_model_data (line 367) | def serialize_model_data(data: Any) -> Any:
  function build_metadata_filter_conditions (line 387) | def build_metadata_filter_conditions(
  function make_num_validator (line 426) | def make_num_validator(

FILE: src/agents-api/agents_api/rec_sum/entities.py
  function make_entities_prompt (line 45) | def make_entities_prompt(
  function get_entities (line 61) | async def get_entities(

FILE: src/agents-api/agents_api/rec_sum/generate.py
  function generate (line 7) | async def generate(

FILE: src/agents-api/agents_api/rec_sum/summarize.py
  function make_summarize_prompt (line 37) | def make_summarize_prompt(
  function summarize_messages (line 47) | async def summarize_messages(

FILE: src/agents-api/agents_api/rec_sum/trim.py
  function make_trim_prompt (line 35) | def make_trim_prompt(
  function trim_messages (line 45) | async def trim_messages(

FILE: src/agents-api/agents_api/rec_sum/utils.py
  class chatml (line 11) | class chatml:
    method make (line 13) | def make(content, role: str = "system", name: _T2 = None, **_) -> dict...
    method user (line 21) | def user(content, name: str | None = None) -> Any:
    method assistant (line 25) | def assistant(content, name: str | None = None) -> Any:
    method system (line 29) | def system(content, name: str | None = None) -> Any:
    method thought (line 33) | def thought(content, name: str | None = None) -> Any:
    method information (line 37) | def information(content) -> Any:
    method summary (line 41) | def summary(content) -> Any:
    method entities (line 45) | def entities(content) -> Any:
  function add_indices (line 49) | def add_indices(list_of_dicts, idx_name: str = "index") -> list[dict]:
  function get_names_from_session (line 53) | def get_names_from_session(session) -> dict[str, Any]:

FILE: src/agents-api/agents_api/routers/agents/create_agent.py
  function create_agent (line 22) | async def create_agent(

FILE: src/agents-api/agents_api/routers/agents/create_agent_tool.py
  function create_agent_tool (line 14) | async def create_agent_tool(

FILE: src/agents-api/agents_api/routers/agents/create_or_update_agent.py
  function create_or_update_agent (line 20) | async def create_or_update_agent(

FILE: src/agents-api/agents_api/routers/agents/delete_agent.py
  function delete_agent (line 14) | async def delete_agent(

FILE: src/agents-api/agents_api/routers/agents/delete_agent_tool.py
  function delete_agent_tool (line 13) | async def delete_agent_tool(

FILE: src/agents-api/agents_api/routers/agents/get_agent_details.py
  function get_agent_details (line 16) | async def get_agent_details(

FILE: src/agents-api/agents_api/routers/agents/list_agent_tools.py
  function list_agent_tools (line 13) | async def list_agent_tools(

FILE: src/agents-api/agents_api/routers/agents/list_agents.py
  function list_agents (line 14) | async def list_agents(

FILE: src/agents-api/agents_api/routers/agents/list_models.py
  function list_models (line 13) | async def list_models(

FILE: src/agents-api/agents_api/routers/agents/patch_agent.py
  function patch_agent (line 20) | async def patch_agent(

FILE: src/agents-api/agents_api/routers/agents/patch_agent_tool.py
  function patch_agent_tool (line 13) | async def patch_agent_tool(

FILE: src/agents-api/agents_api/routers/agents/update_agent.py
  function update_agent (line 20) | async def update_agent(

FILE: src/agents-api/agents_api/routers/agents/update_agent_tool.py
  function update_agent_tool (line 13) | async def update_agent_tool(

FILE: src/agents-api/agents_api/routers/docs/bulk_delete_docs.py
  function bulk_delete_agent_docs (line 23) | async def bulk_delete_agent_docs(
  function bulk_delete_user_docs (line 44) | async def bulk_delete_user_docs(

FILE: src/agents-api/agents_api/routers/docs/create_doc.py
  function create_user_doc (line 14) | async def create_user_doc(
  function create_agent_doc (line 43) | async def create_agent_doc(

FILE: src/agents-api/agents_api/routers/docs/delete_doc.py
  function delete_agent_doc (line 14) | async def delete_agent_doc(
  function delete_user_doc (line 28) | async def delete_user_doc(

FILE: src/agents-api/agents_api/routers/docs/embed.py
  function embed (line 17) | async def embed(

FILE: src/agents-api/agents_api/routers/docs/get_doc.py
  function get_doc (line 13) | async def get_doc(

FILE: src/agents-api/agents_api/routers/docs/list_docs.py
  function list_user_docs (line 14) | async def list_user_docs(
  function list_agent_docs (line 44) | async def list_agent_docs(

FILE: src/agents-api/agents_api/routers/docs/search_docs.py
  function search_user_docs (line 22) | async def search_user_docs(
  function search_agent_docs (line 81) | async def search_agent_docs(

FILE: src/agents-api/agents_api/routers/files/create_file.py
  function upload_file_content (line 15) | async def upload_file_content(file_id: UUID, content: str) -> None:
  function create_file (line 27) | async def create_file(

FILE: src/agents-api/agents_api/routers/files/delete_file.py
  function delete_file_content (line 14) | async def delete_file_content(file_id: UUID) -> None:
  function delete_file (line 23) | async def delete_file(

FILE: src/agents-api/agents_api/routers/files/get_file.py
  function fetch_file_content (line 15) | async def fetch_file_content(file_id: UUID) -> str:
  function get_file (line 28) | async def get_file(

FILE: src/agents-api/agents_api/routers/files/list_files.py
  function list_files (line 15) | async def list_files(

FILE: src/agents-api/agents_api/routers/healthz/check_health.py
  function check_health (line 15) | async def check_health() -> dict:

FILE: src/agents-api/agents_api/routers/internal/router.py
  function decode_payloads (line 14) | async def decode_payloads(req: Request):

FILE: src/agents-api/agents_api/routers/jobs/routers.py
  function map_job_status (line 13) | def map_job_status(
  function get_job_status (line 44) | async def get_job_status(job_id: UUID) -> JobStatus:

FILE: src/agents-api/agents_api/routers/projects/create_project.py
  function create_project (line 17) | async def create_project(

FILE: src/agents-api/agents_api/routers/projects/list_projects.py
  function list_projects (line 14) | async def list_projects(

FILE: src/agents-api/agents_api/routers/responses/create_response.py
  function process_tool_calls (line 32) | async def process_tool_calls(
  function is_reasoning_model (line 79) | def is_reasoning_model(model: str) -> bool:
  function create_response (line 84) | async def create_response(

FILE: src/agents-api/agents_api/routers/responses/get_response.py
  function get_response (line 32) | async def get_response(

FILE: src/agents-api/agents_api/routers/secrets/create_secret.py
  function create_developer_secret (line 17) | async def create_developer_secret(

FILE: src/agents-api/agents_api/routers/secrets/delete_secret.py
  function delete_developer_secret (line 22) | async def delete_developer_secret(

FILE: src/agents-api/agents_api/routers/secrets/list_secrets.py
  function list_developer_secrets (line 15) | async def list_developer_secrets(

FILE: src/agents-api/agents_api/routers/secrets/update_secret.py
  function update_developer_secret (line 15) | async def update_developer_secret(

FILE: src/agents-api/agents_api/routers/sessions/auto_tools/chat.py
  function chat (line 35) | async def chat(

FILE: src/agents-api/agents_api/routers/sessions/auto_tools/render.py
  function render (line 24) | async def render(
  function render_chat_input (line 50) | async def render_chat_input(

FILE: src/agents-api/agents_api/routers/sessions/chat.py
  function with_mock_response (line 24) | def with_mock_response(r: str | None = None):
  function chat (line 37) | async def chat(

FILE: src/agents-api/agents_api/routers/sessions/create_or_update_session.py
  function create_or_update_session (line 16) | async def create_or_update_session(

FILE: src/agents-api/agents_api/routers/sessions/create_session.py
  function create_session (line 17) | async def create_session(

FILE: src/agents-api/agents_api/routers/sessions/delete_session.py
  function delete_session (line 14) | async def delete_session(

FILE: src/agents-api/agents_api/routers/sessions/exceptions.py
  class BaseSessionException (line 1) | class BaseSessionException(Exception):
  class InputTooBigError (line 5) | class InputTooBigError(BaseSessionException):
    method __init__ (line 6) | def __init__(self, actual_tokens, required_tokens) -> None:

FILE: src/agents-api/agents_api/routers/sessions/get_session.py
  function get_session (line 16) | async def get_session(

FILE: src/agents-api/agents_api/routers/sessions/get_session_history.py
  function get_session_history (line 13) | async def get_session_history(

FILE: src/agents-api/agents_api/routers/sessions/legacy/chat.py
  function with_mock_response (line 28) | def with_mock_response(r: str | None = None):
  function _join_deltas (line 35) | def _join_deltas(acc: dict, delta: dict) -> dict:
  function stream_chat_response (line 40) | async def stream_chat_response(
  function chat (line 172) | async def chat(

FILE: src/agents-api/agents_api/routers/sessions/legacy/render.py
  function render (line 26) | async def render(
  function render_chat_input (line 52) | async def render_chat_input(

FILE: src/agents-api/agents_api/routers/sessions/list_sessions.py
  function list_sessions (line 18) | async def list_sessions(

FILE: src/agents-api/agents_api/routers/sessions/patch_session.py
  function patch_session (line 13) | async def patch_session(

FILE: src/agents-api/agents_api/routers/sessions/render.py
  function render (line 27) | async def render(

FILE: src/agents-api/agents_api/routers/sessions/update_session.py
  function update_session (line 13) | async def update_session(

FILE: src/agents-api/agents_api/routers/tasks/create_or_update_task.py
  function create_or_update_task (line 19) | async def create_or_update_task(

FILE: src/agents-api/agents_api/routers/tasks/create_task.py
  function create_task (line 17) | async def create_task(

FILE: src/agents-api/agents_api/routers/tasks/create_task_execution.py
  function start_execution (line 46) | async def start_execution(
  function create_task_execution (line 124) | async def create_task_execution(

FILE: src/agents-api/agents_api/routers/tasks/get_execution_details.py
  function get_execution_details (line 13) | async def get_execution_details(execution_id: UUID) -> Execution:

FILE: src/agents-api/agents_api/routers/tasks/get_task_details.py
  function get_task_details (line 15) | async def get_task_details(

FILE: src/agents-api/agents_api/routers/tasks/list_execution_transitions.py
  function list_execution_transitions (line 17) | async def list_execution_transitions(
  function get_execution_transition (line 38) | async def get_execution_transition(

FILE: src/agents-api/agents_api/routers/tasks/list_task_executions.py
  function list_task_executions (line 18) | async def list_task_executions(

FILE: src/agents-api/agents_api/routers/tasks/list_tasks.py
  function list_tasks (line 16) | async def list_tasks(

FILE: src/agents-api/agents_api/routers/tasks/router.py
  class YamlRequest (line 9) | class YamlRequest(Request):
    method body (line 10) | async def body(self) -> bytes:
  class YamlRoute (line 26) | class YamlRoute(APIRoute):
    method get_route_handler (line 27) | def get_route_handler(self) -> Callable:

FILE: src/agents-api/agents_api/routers/tasks/stream_execution_status.py
  function execution_status_publisher (line 30) | async def execution_status_publisher(
  function stream_execution_status (line 104) | async def stream_execution_status(

FILE: src/agents-api/agents_api/routers/tasks/stream_transitions_events.py
  function event_publisher (line 30) | async def event_publisher(
  function stream_transitions_events (line 79) | async def stream_transitions_events(

FILE: src/agents-api/agents_api/routers/tasks/update_execution.py
  function update_execution (line 23) | async def update_execution(

FILE: src/agents-api/agents_api/routers/users/create_or_update_user.py
  function create_or_update_user (line 16) | async def create_or_update_user(

FILE: src/agents-api/agents_api/routers/users/create_user.py
  function create_user (line 14) | async def create_user(

FILE: src/agents-api/agents_api/routers/users/delete_user.py
  function delete_user (line 14) | async def delete_user(

FILE: src/agents-api/agents_api/routers/users/get_user_details.py
  function get_user_details (line 13) | async def get_user_details(

FILE: src/agents-api/agents_api/routers/users/list_users.py
  function list_users (line 14) | async def list_users(

FILE: src/agents-api/agents_api/routers/users/patch_user.py
  function patch_user (line 13) | async def patch_user(

FILE: src/agents-api/agents_api/routers/users/update_user.py
  function update_user (line 13) | async def update_user(

FILE: src/agents-api/agents_api/routers/utils/model_converters.py
  function convert_create_response (line 56) | async def convert_create_response(
  function convert_chat_response_to_response (line 331) | def convert_chat_response_to_response(

FILE: src/agents-api/agents_api/routers/utils/model_validation.py
  function validate_model (line 11) | async def validate_model(model_name: str | None) -> None:

FILE: src/agents-api/agents_api/web.py
  function make_exception_handler (line 57) | def make_exception_handler(status_code: int) -> Callable[[Any, Any], Any]:
  function _format_location (line 118) | def _format_location(loc: list) -> str:
  function _get_error_suggestions (line 141) | def _get_error_suggestions(error: dict) -> dict:
  function register_exceptions (line 252) | def register_exceptions(app: FastAPI) -> None:
  function usage_check_middleware (line 293) | async def usage_check_middleware(request: Request, call_next):
  function http_exception_handler (line 387) | async def http_exception_handler(request, exc: HTTPException):  # pylint...
  function validation_error_handler (line 401) | async def validation_error_handler(request: Request, exc: RPCError):
  function session_not_found_error_handler (line 415) | async def session_not_found_error_handler(request: Request, exc: BaseCom...
  function prompt_too_big_error (line 429) | async def prompt_too_big_error(request: Request, exc: PromptTooBigError):
  function litellm_bad_request_error (line 444) | async def litellm_bad_request_error(request: Request, exc: BadRequestErr...
  function litellm_api_error (line 459) | async def litellm_api_error(request: Request, exc: APIError):
  function main (line 473) | def main(

FILE: src/agents-api/agents_api/worker/__main__.py
  function main (line 30) | async def main() -> None:

FILE: src/agents-api/agents_api/worker/codec.py
  class RemoteObject (line 32) | class RemoteObject(BaseModel):
    method from_value (line 38) | def from_value(cls, x: Any) -> Self:
    method load (line 47) | def load(self) -> Any:
  function serialize (line 54) | def serialize(x: Any) -> bytes:
  function deserialize (line 103) | def deserialize(b: bytes) -> Any:
  function from_payload_data (line 143) | def from_payload_data(data: bytes, type_hint: type | None = None) -> Any:
  class PydanticEncodingPayloadConverter (line 167) | class PydanticEncodingPayloadConverter(EncodingPayloadConverter):
    method to_payload (line 171) | def to_payload(
    method from_payload (line 200) | def from_payload(self, payload: Payload, type_hint: type | None = None...
  class PydanticPayloadConverter (line 235) | class PydanticPayloadConverter(CompositePayloadConverter):
    method __init__ (line 236) | def __init__(self) -> None:

FILE: src/agents-api/agents_api/worker/worker.py
  function create_worker (line 16) | def create_worker(client: Client) -> Any:

FILE: src/agents-api/agents_api/workflows/demo.py
  class DemoWorkflow (line 13) | class DemoWorkflow:
    method run (line 15) | async def run(self, a: int, b: int) -> int:

FILE: src/agents-api/agents_api/workflows/task_execution/__init__.py
  class TaskExecutionWorkflow (line 130) | class TaskExecutionWorkflow:
    method __init__ (line 135) | def __init__(self) -> None:
    method set_last_error (line 139) | async def set_last_error(self, value: LastErrorInput) -> None:
    method eval_step_exprs (line 142) | async def eval_step_exprs(self, step_type: WorkflowStep):
    method _handle_LogStep (line 210) | async def _handle_LogStep(
    method _handle_ReturnStep (line 230) | async def _handle_ReturnStep(
    method _handle_SwitchStep (line 245) | async def _handle_SwitchStep(
    method _handle_IfElseWorkflowStep (line 268) | async def _handle_IfElseWorkflowStep(
    method _handle_ForeachStep (line 286) | async def _handle_ForeachStep(
    method _handle_MapReduceStep (line 302) | async def _handle_MapReduceStep(
    method _handle_SleepStep (line 336) | async def _handle_SleepStep(
    method _handle_EvaluateStep (line 356) | async def _handle_EvaluateStep(
    method _handle_ErrorWorkflowStep (line 367) | async def _handle_ErrorWorkflowStep(
    method _handle_YieldStep (line 384) | async def _handle_YieldStep(
    method _handle_WaitForInputStep (line 419) | async def _handle_WaitForInputStep(
    method _handle_PromptStep (line 437) | async def _handle_PromptStep(
    method _handle_SetStep (line 540) | async def _handle_SetStep(
    method _handle_GetStep (line 551) | async def _handle_GetStep(
    method _handle_ParallelStep (line 562) | async def _handle_ParallelStep(
    method _handle_ToolCallStep (line 572) | async def _handle_ToolCallStep(
    method handle_step (line 718) | async def handle_step(self, step: WorkflowStep) -> WorkflowResult:
    method run (line 739) | async def run(

FILE: src/agents-api/agents_api/workflows/task_execution/helpers.py
  function validate_execution_input (line 37) | def validate_execution_input(execution_input: ExecutionInput) -> TaskSpe...
  function base_evaluate_activity (line 55) | async def base_evaluate_activity(
  function continue_as_child (line 77) | async def continue_as_child(
  function execute_switch_branch (line 125) | async def execute_switch_branch(
  function execute_if_else_branch (line 165) | async def execute_if_else_branch(
  function execute_foreach_step (line 210) | async def execute_foreach_step(
  function execute_map_reduce_step (line 256) | async def execute_map_reduce_step(
  function execute_map_reduce_step_parallel (line 312) | async def execute_map_reduce_step_parallel(

FILE: src/agents-api/agents_api/workflows/task_execution/transition.py
  function transition (line 22) | async def transition(

FILE: src/agents-api/tests/fixtures.py
  function pg_dsn (line 58) | def pg_dsn():
  function test_developer_id (line 69) | def test_developer_id():
  function test_developer (line 77) | async def test_developer(dsn=pg_dsn, developer_id=test_developer_id):
  function test_project (line 86) | async def test_project(dsn=pg_dsn, developer=test_developer):
  function patch_embed_acompletion (line 100) | def patch_embed_acompletion():
  function test_agent (line 107) | async def test_agent(dsn=pg_dsn, developer=test_developer, project=test_...
  function test_user (line 124) | async def test_user(dsn=pg_dsn, developer=test_developer):
  function test_file (line 138) | async def test_file(dsn=pg_dsn, developer=test_developer, user=test_user):
  function test_doc (line 153) | async def test_doc(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function test_doc_with_embedding (line 186) | async def test_doc_with_embedding(dsn=pg_dsn, developer=test_developer, ...
  function test_user_doc (line 236) | async def test_user_doc(dsn=pg_dsn, developer=test_developer, user=test_...
  function test_task (line 269) | async def test_task(dsn=pg_dsn, developer=test_developer, agent=test_age...
  function random_email (line 287) | async def random_email():
  function test_new_developer (line 292) | async def test_new_developer(dsn=pg_dsn, email=random_email):
  function test_session (line 311) | async def test_session(
  function test_execution (line 332) | async def test_execution(
  function custom_scope_id (line 358) | def custom_scope_id():
  function test_execution_started (line 363) | async def test_execution_started(
  function test_transition (line 405) | async def test_transition(
  function test_tool (line 427) | async def test_tool(
  function client (line 461) | def client(_dsn=pg_dsn):
  function make_request (line 473) | async def make_request(client=client, developer_id=test_developer_id):
  function s3_client (line 492) | async def s3_client():
  function clean_secrets (line 514) | async def clean_secrets(dsn=pg_dsn, developer_id=test_developer_id):

FILE: src/agents-api/tests/test_activities.py
  function _ (line 12) | async def _():

FILE: src/agents-api/tests/test_activities_utils.py
  function _ (line 10) | def _():
  function _ (line 17) | def _():
  function _ (line 25) | def _():
  function _ (line 60) | def _():
  function _ (line 69) | def _():
  function _ (line 79) | def _():
  function test_safe_extract_json_formats (line 86) | def test_safe_extract_json_formats():
  function test_safe_extract_json_validation (line 125) | def test_safe_extract_json_validation():

FILE: src/agents-api/tests/test_agent_metadata_filtering.py
  function _ (line 15) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 68) | async def _(dsn=pg_dsn, developer_id=test_developer_id):

FILE: src/agents-api/tests/test_agent_queries.py
  function _ (line 29) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 45) | async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_pro...
  function _ (line 64) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 86) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 105) | async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_pro...
  function _ (line 127) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 154) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 178) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 202) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 226) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 261) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 284) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 295) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 316) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 327) | async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_pro...
  function _ (line 353) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 369) | async def _(dsn=pg_dsn, developer_id=test_developer_id):

FILE: src/agents-api/tests/test_agent_routes.py
  function _ (line 10) | def _(client=client):
  function _ (line 27) | def _(make_request=make_request):
  function _ (line 44) | def _(make_request=make_request, project=test_project):
  function _ (line 63) | def _(make_request=make_request):
  function _ (line 81) | def _(make_request=make_request):
  function _ (line 101) | def _(make_request=make_request, project=test_project):
  function _ (line 123) | def _(make_request=make_request):
  function _ (line 135) | def _(make_request=make_request, agent=test_agent):
  function _ (line 147) | def _(make_request=make_request):
  function _ (line 178) | def _(make_request=make_request, agent=test_agent):
  function _ (line 210) | def _(make_request=make_request, agent=test_agent, project=test_project):
  function _ (line 243) | def _(make_request=make_request, agent=test_agent):
  function _ (line 275) | def _(make_request=make_request, agent=test_agent, project=test_project):
  function _ (line 309) | def _(make_request=make_request):
  function _ (line 324) | def _(make_request=make_request, project=test_project):
  function _ (line 358) | def _(make_request=make_request):

FILE: src/agents-api/tests/test_base_evaluate.py
  function _ (line 26) | async def _():
  function _ (line 32) | async def _():
  function _ (line 38) | async def _():
  function _ (line 46) | async def _():
  function _ (line 71) | async def _():
  function _ (line 79) | async def _():
  function _ (line 87) | async def _():
  function _ (line 188) | async def _():
  function _ (line 223) | async def _():
  function test_validate_non_dollar_expressions (line 281) | def test_validate_non_dollar_expressions():
  function test_dollar_sign_prefix_formats (line 300) | def test_dollar_sign_prefix_formats():
  function test_validate_edge_cases (line 324) | def test_validate_edge_cases():

FILE: src/agents-api/tests/test_chat_auto_tools.py
  function _ (line 23) | async def _():
  function _ (line 35) | async def _():
  function _ (line 48) | async def _():
  function _ (line 61) | async def _():
  function _ (line 103) | async def _():
  function _ (line 141) | async def _():
  function _ (line 203) | async def _():
  function _ (line 264) | async def _():

FILE: src/agents-api/tests/test_chat_metadata.py
  function _ (line 16) | async def _(
  function _ (line 70) | async def _(
  function _ (line 125) | async def _(
  function _ (line 175) | async def _(
  function _ (line 267) | async def _(

FILE: src/agents-api/tests/test_chat_routes.py
  function _ (line 32) | async def _(
  function _ (line 40) | async def _(
  function _ (line 81) | async def _(
  function _ (line 129) | async def _(
  function _ (line 171) | async def _(
  function _ (line 221) | async def _(
  function _ (line 241) | async def _(
  function _ (line 336) | async def _(agent=test_agent, dsn=pg_dsn, developer_id=test_developer_id):

FILE: src/agents-api/tests/test_chat_streaming.py
  function get_usage_records (line 27) | async def get_usage_records(dsn: str, developer_id: str, limit: int = 100):
  function delete_usage_records (line 55) | async def delete_usage_records(dsn: str, developer_id: str):
  function collect_stream_content (line 68) | async def collect_stream_content(response: StreamingResponse) -> list[di...
  function _ (line 90) | async def _():
  function _ (line 124) | async def _(
  function _ (line 207) | async def _(
  function _ (line 289) | async def _(
  function _ (line 359) | async def _(
  function _ (line 435) | async def _(
  function _ (line 499) | async def _(
  function _ (line 592) | async def _(
  function _ (line 680) | async def _(
  function _ (line 773) | async def _(

FILE: src/agents-api/tests/test_developer_queries.py
  function _ (line 19) | async def _(dsn=pg_dsn):
  function _ (line 29) | async def _(dsn=pg_dsn, dev=test_new_developer):
  function _ (line 45) | async def _(dsn=pg_dsn):
  function _ (line 63) | async def _(dsn=pg_dsn, dev=test_new_developer, email=random_email):
  function _ (line 77) | async def _(dsn=pg_dsn, dev=test_new_developer, email=random_email):

FILE: src/agents-api/tests/test_docs_metadata_filtering.py
  function _ (line 16) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 96) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):

FILE: src/agents-api/tests/test_docs_queries.py
  function _ (line 28) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 56) | async def _(dsn=pg_dsn, developer=test_developer):
  function _ (line 77) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 105) | async def _(dsn=pg_dsn, developer=test_developer):
  function _ (line 127) | async def _(dsn=pg_dsn, developer=test_developer, doc=test_doc):
  function _ (line 141) | async def _(dsn=pg_dsn, developer=test_developer, doc=test_doc_with_embe...
  function _ (line 157) | async def _(dsn=pg_dsn, developer=test_developer, doc=test_doc_with_embe...
  function _ (line 175) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 230) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 260) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 290) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 320) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 350) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 380) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 440) | async def _(dsn=pg_dsn):
  function _ (line 459) | async def _(dsn=pg_dsn):
  function _ (line 478) | async def _(dsn=pg_dsn):
  function _ (line 496) | async def _(dsn=pg_dsn):
  function _ (line 514) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 551) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 588) | async def _(dsn=pg_dsn, agent=test_agent, developer=test_developer):
  function _ (line 625) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 688) | async def _(
  function _ (line 716) | async def _(

FILE: src/agents-api/tests/test_docs_routes.py
  function _ (line 16) | async def _(make_request=make_request, user=test_user):
  function _ (line 33) | async def _(make_request=make_request, agent=test_agent):
  function _ (line 50) | async def _(make_request=make_request, agent=test_agent, user=test_user):
  function _ (line 85) | async def _(make_request=make_request, agent=test_agent):
  function _ (line 125) | async def _(make_request=make_request, agent=test_agent):
  function _ (line 148) | def _(make_request=make_request, user=test_user):
  function _ (line 162) | def _(make_request=make_request, agent=test_agent):
  function _ (line 176) | def _(make_request=make_request, user=test_user):
  function _ (line 193) | def _(make_request=make_request, agent=test_agent):
  function _ (line 210) | async def _(make_request=make_request, agent=test_agent, doc=test_doc):
  function _ (line 231) | async def _(make_request=make_request, user=test_user, doc=test_user_doc):
  function _ (line 253) | async def _(make_request=make_request, agent=test_agent, doc=test_doc_wi...
  function _ (line 277) | async def _(
  function _ (line 296) | async def _(make_request=make_request, agent=test_agent):
  function _ (line 354) | async def _(make_request=make_request, user=test_user):
  function _ (line 398) | async def _(make_request=make_request, agent=test_agent):
  function _ (line 444) | async def _(make_request=make_request, agent=test_agent):
  function _ (line 492) | async def _(make_request=make_request, user=test_user):
  function _ (line 538) | async def _(make_request=make_request, user=test_user):

FILE: src/agents-api/tests/test_entry_queries.py
  function _ (line 28) | async def _(dsn=pg_dsn, developer=test_developer):
  function _ (line 50) | async def _(dsn=pg_dsn, developer=test_developer):
  function _ (line 65) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 92) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 109) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 126) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 143) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...
  function _ (line 181) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...
  function _ (line 220) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...

FILE: src/agents-api/tests/test_execution_queries.py
  function _ (line 35) | async def _(dsn=pg_dsn, developer_id=test_developer_id, task=test_task):
  function _ (line 60) | async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_e...
  function _ (line 73) | async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_e...
  function _ (line 86) | async def _(
  function _ (line 105) | async def _(
  function _ (line 137) | async def _(
  function _ (line 158) | async def _(
  function _ (line 179) | async def _(
  function _ (line 200) | async def _(
  function _ (line 218) | async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_e...
  function _ (line 239) | async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_e...
  function _ (line 284) | async def _(
  function _ (line 311) | async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_e...
  function _ (line 326) | async def _(
  function _ (line 349) | async def _(
  function _ (line 383) | async def _(

FILE: src/agents-api/tests/test_execution_workflow.py
  function _ (line 30) | async def _(
  function _ (line 70) | async def _(
  function _ (line 113) | async def _(
  function _ (line 156) | async def _(
  function _ (line 206) | async def _(
  function _ (line 257) | async def _(
  function _ (line 302) | async def _(
  function _ (line 354) | async def _(
  function _ (line 405) | async def _(
  function _ (line 457) | async def _(
  function _ (line 519) | async def _(
  function _ (line 580) | async def _(
  function _ (line 653) | async def _(
  function _ (line 708) | async def _(
  function _ (line 768) | async def _(
  function _ (line 831) | async def _(
  function _ (line 899) | async def _(
  function _ (line 948) | async def _(
  function _ (line 1006) | async def _(
  function _ (line 1054) | async def _(
  function _ (line 1106) | async def _(
  function _ (line 1162) | async def _(
  function _ (line 1219) | async def _(
  function _ (line 1281) | async def _(
  function _ (line 1342) | async def _(
  function _ (line 1385) | async def _(

FILE: src/agents-api/tests/test_expression_validation.py
  function test_expression_validation_basic (line 9) | def test_expression_validation_basic():
  function test_expression_without_dollar_prefix (line 62) | def test_expression_without_dollar_prefix():
  function test_dollar_sign_variations (line 90) | def test_dollar_sign_variations():
  function test_backwards_compatibility_cases (line 140) | def test_backwards_compatibility_cases():

FILE: src/agents-api/tests/test_file_routes.py
  function _ (line 12) | async def _(make_request=make_request, s3_client=s3_client):
  function _ (line 30) | async def _(make_request=make_request, s3_client=s3_client, project=test...
  function _ (line 50) | async def _(make_request=make_request, s3_client=s3_client):
  function _ (line 82) | async def _(make_request=make_request, s3_client=s3_client):
  function _ (line 114) | async def _(make_request=make_request, s3_client=s3_client):
  function _ (line 124) | async def _(make_request=make_request, s3_client=s3_client, project=test...

FILE: src/agents-api/tests/test_files_queries.py
  function _ (line 23) | async def _(dsn=pg_dsn, developer=test_developer):
  function _ (line 43) | async def _(dsn=pg_dsn, developer=test_developer, project=test_project):
  function _ (line 63) | async def _(dsn=pg_dsn, developer=test_developer):
  function _ (line 84) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 113) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user, projec...
  function _ (line 146) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 174) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent, proj...
  function _ (line 206) | async def _(dsn=pg_dsn, file=test_file, developer=test_developer):
  function _ (line 221) | async def _(dsn=pg_dsn, developer=test_developer, file=test_file):
  function _ (line 232) | async def _(dsn=pg_dsn, developer=test_developer, project=test_project):
  function _ (line 261) | async def _(dsn=pg_dsn, developer=test_developer, file=test_file):
  function _ (line 285) | async def _(dsn=pg_dsn, developer=test_developer, file=test_file):
  function _ (line 300) | async def _(dsn=pg_dsn, developer=test_developer, file=test_file):
  function _ (line 315) | async def _(dsn=pg_dsn, developer=test_developer, file=test_file):
  function _ (line 330) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 359) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user, projec...
  function _ (line 391) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 420) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent, proj...
  function _ (line 452) | async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
  function _ (line 489) | async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
  function _ (line 526) | async def _(dsn=pg_dsn, developer=test_developer, file=test_file):

FILE: src/agents-api/tests/test_get_doc_search.py
  function _ (line 22) | def _():
  function _ (line 31) | def _():
  function _ (line 40) | def _():
  function _ (line 66) | def _():
  function _ (line 93) | def _():
  function _ (line 117) | def _():
  function _ (line 142) | def _():
  function _ (line 166) | def _():
  function _ (line 201) | def _():
  function _ (line 237) | def _():
  function _ (line 272) | def _():
  function _ (line 294) | def _():
  function _ (line 317) | def _():
  function _ (line 337) | def _():
  function _ (line 369) | def _():
  function _ (line 401) | def _():

FILE: src/agents-api/tests/test_litellm_utils.py
  function _ (line 13) | async def _():
  function _ (line 33) | async def _():
  function _ (line 49) | async def _():
  function _ (line 74) | async def _():
  function _ (line 90) | async def _():
  function _ (line 99) | async def _():
  function _ (line 134) | async def _():
  function _ (line 170) | async def _():

FILE: src/agents-api/tests/test_memory_utils.py
  function test_total_size_basic_types (line 13) | def test_total_size_basic_types():
  function test_total_size_containers (line 31) | def test_total_size_containers():
  function test_total_size_nested (line 61) | def test_total_size_nested():
  function test_total_size_custom_objects (line 79) | def test_total_size_custom_objects():
  function test_total_size_circular_refs (line 107) | def test_total_size_circular_refs():
  function test_total_size_custom_handlers (line 126) | def test_total_size_custom_handlers():

FILE: src/agents-api/tests/test_metadata_filter_utils.py
  function _ (line 10) | async def _():
  function _ (line 25) | async def _():
  function _ (line 38) | async def _():
  function _ (line 51) | async def _():
  function _ (line 67) | async def _():

FILE: src/agents-api/tests/test_middleware.py
  class TestPayload (line 22) | class TestPayload(BaseModel):
  function client (line 29) | def client():
  function _ (line 36) | async def _(client=client):
  function _ (line 67) | def _(client=client):
  function _ (line 100) | def _(client=client):
  function _ (line 177) | def _(client=client):
  function _ (line 239) | def _(client=client):
  function _ (line 271) | def _(client=client):
  function _ (line 306) | def _(client=client):
  function _ (line 341) | def _(client=client):
  function _ (line 358) | def _(client=client):
  function _ (line 398) | def _(client=client):
  function _ (line 422) | def _(client=client):
  function _ (line 443) | def _(client=client):
  function _ (line 473) | async def _(make_request=make_request, dsn=pg_dsn, test_agent=test_agent):
  function _ (line 516) | async def _(make_request=make_request, dsn=pg_dsn, test_session=test_ses...

FILE: src/agents-api/tests/test_mmr.py
  function create_test_doc (line 9) | def create_test_doc(doc_id, embedding=None):
  function _ (line 25) | def _():
  function _ (line 62) | def _():
  function _ (line 102) | def _():

FILE: src/agents-api/tests/test_model_validation.py
  function _ (line 11) | async def _():
  function _ (line 20) | async def _():
  function _ (line 32) | async def _():

FILE: src/agents-api/tests/test_nlp_utilities.py
  function _ (line 7) | async def _():
  function _ (line 30) | async def _():
  function _ (line 41) | async def _():
  function _ (line 54) | async def _():
  function _ (line 123) | async def _():

FILE: src/agents-api/tests/test_pg_query_step.py
  function _ (line 8) | async def _():
  function _ (line 41) | async def _():
  function _ (line 56) | async def _():

FILE: src/agents-api/tests/test_prepare_for_step.py
  function base_evaluate_with_pool (line 28) | async def base_evaluate_with_pool(
  function _ (line 49) | async def _(dsn=pg_dsn):  # Add dsn parameter
  function _ (line 90) | async def _(dsn=pg_dsn):
  function _ (line 135) | async def _(dsn=pg_dsn):
  function _ (line 174) | async def _(dsn=pg_dsn):
  function _ (line 234) | async def _(dsn=pg_dsn):
  function _ (line 274) | async def _(dsn=pg_dsn):

FILE: src/agents-api/tests/test_prompt_step_auto_tools.py
  function mock_base_evaluate (line 20) | def mock_base_evaluate(value, context):
  function _ (line 30) | async def _():
  function _ (line 115) | async def _():
  function _ (line 181) | async def _():
  function _ (line 265) | async def _():

FILE: src/agents-api/tests/test_query_utils.py
  function _ (line 6) | def _():
  function _ (line 16) | def _():
  function _ (line 42) | def _():

FILE: src/agents-api/tests/test_secrets_queries.py
  function _ (line 18) | async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_d...
  function _ (line 45) | async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_d...
  function _ (line 91) | async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_d...
  function _ (line 136) | async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_d...
  function _ (line 164) | async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_d...
  function _ (line 192) | async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_d...
  function _ (line 247) | async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_d...

FILE: src/agents-api/tests/test_secrets_routes.py
  function _ (line 11) | def _(client=client):
  function _ (line 28) | def _(make_request=make_request, developer_id=test_developer_id):
  function _ (line 53) | def _(make_request=make_request, developer_id=test_developer_id):
  function _ (line 87) | def _(make_request=make_request, developer_id=test_developer_id):
  function _ (line 132) | def _(make_request=make_request, developer_id=test_developer_id):
  function _ (line 173) | def _(make_request=make_request, developer_id=test_developer_id):

FILE: src/agents-api/tests/test_secrets_usage.py
  function _ (line 29) | async def _(developer=test_developer):
  function _ (line 145) | async def _(developer_id=test_developer_id):
  function _ (line 272) | async def _(developer_id=test_developer_id):

FILE: src/agents-api/tests/test_session_queries.py
  function _ (line 38) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 61) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 85) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...
  function _ (line 101) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 115) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...
  function _ (line 132) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...
  function _ (line 151) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...
  function _ (line 165) | async def _(
  function _ (line 200) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...
  function _ (line 227) | async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_ses...

FILE: src/agents-api/tests/test_session_routes.py
  function _ (line 8) | def _(client=client):
  function _ (line 18) | def _(make_request=make_request, agent=test_agent):
  function _ (line 36) | def _(make_request=make_request, agent=test_agent):
  function _ (line 56) | def _(make_request=make_request, agent=test_agent):
  function _ (line 76) | def _(make_request=make_request, session=test_session, agent=test_agent):
  function _ (line 94) | def _(make_request=make_request, agent=test_agent, session=test_session):
  function _ (line 114) | def _(make_request=make_request, session=test_session):
  function _ (line 124) | def _(make_request=make_request):
  function _ (line 135) | def _(make_request=make_request, session=test_session):
  function _ (line 150) | def _(make_request=make_request, session=test_session):
  function _ (line 168) | def _(make_request=make_request, session=test_session):
  function _ (line 181) | def _(make_request=make_request, session=test_session):
  function _ (line 196) | def _(make_request=make_request, session=test_session):
  function _ (line 211) | def _(make_request=make_request, session=test_session):

FILE: src/agents-api/tests/test_task_execution_workflow.py
  function base_evaluate_with_pool (line 67) | async def base_evaluate_with_pool(
  function _ (line 88) | async def _():
  function _ (line 141) | async def _():
  function _ (line 230) | async def _():
  function _ (line 282) | async def _():
  function _ (line 375) | async def _():
  function _ (line 475) | async def _():
  function _ (line 508) | async def _():
  function _ (line 608) | async def _():
  function _ (line 689) | async def _():
  function _ (line 733) | async def _():
  function _ (line 773) | async def _():
  function _ (line 817) | async def _():
  function _ (line 860) | async def _():
  function _ (line 905) | async def _():
  function _ (line 948) | async def _():
  function _ (line 1015) | async def _(dsn=pg_dsn):
  function _ (line 1097) | async def _(dsn=pg_dsn):
  function _ (line 1179) | async def _(dsn=pg_dsn):
  function _ (line 1261) | async def _(dsn=pg_dsn):
  function _ (line 1343) | async def _(dsn=pg_dsn):
  function _ (line 1425) | async def _(dsn=pg_dsn):
  function _ (line 1507) | async def _(dsn=pg_dsn):
  function _ (line 1587) | async def _(dsn=pg_dsn):
  function _ (line 1667) | async def _(dsn=pg_dsn):
  function _ (line 1754) | async def _(dsn=pg_dsn):
  function _ (line 1857) | async def _(dsn=pg_dsn):
  function _ (line 1947) | async def _(dsn=pg_dsn):

FILE: src/agents-api/tests/test_task_queries.py
  function _ (line 26) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 49) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 72) | async def _(dsn=pg_dsn, developer_id=test_developer_id, task=test_task):
  function _ (line 91) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 109) | async def _(dsn=pg_dsn, developer_id=test_developer_id, task=test_task):
  function _ (line 145) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 164) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 185) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 203) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 229) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 245) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 261) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 277) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 313) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 340) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 388) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 407) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 455) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):

FILE: src/agents-api/tests/test_task_routes.py
  function _ (line 35) | def _(client=client, agent=test_agent):
  function _ (line 58) | def _(make_request=make_request, agent=test_agent):
  function _ (line 81) | async def _(make_request=make_request, task=test_task):
  function _ (line 98) | def _(make_request=make_request):
  function _ (line 110) | def _(make_request=make_request, execution=test_execution):
  function _ (line 120) | def _(make_request=make_request):
  function _ (line 132) | def _(make_request=make_request, task=test_task):
  function _ (line 142) | async def _(make_request=make_request, execution=test_execution_started):
  function _ (line 157) | async def _(
  function _ (line 198) | def _(make_request=make_request, execution=test_execution):
  function _ (line 213) | def _(make_request=make_request, agent=test_agent):
  function _ (line 257) | async def _(make_request=make_request, task=test_task):
  function _ (line 300) | def _(
  function _ (line 402) | def _(client: TestClient = client, test_developer_id=test_developer_id):

FILE: src/agents-api/tests/test_task_validation.py
  function test_syntax_error_detection (line 8) | def test_syntax_error_detection():
  function test_undefined_name_detection (line 17) | def test_undefined_name_detection():
  function test_allow_steps_var (line 26) | def test_allow_steps_var():
  function test_unsafe_operations_detection (line 34) | def test_unsafe_operations_detection():
  function test_dunder_attribute_detection (line 43) | def test_dunder_attribute_detection():
  function test_runtime_error_detection (line 64) | def test_runtime_error_detection():
  function test_backwards_compatibility (line 73) | def test_backwards_compatibility():
  function test_valid_expression (line 83) | def test_valid_expression():
  function test_underscore_allowed (line 91) | def test_underscore_allowed():
  function test_validation_of_task_with_invalid_expressions (line 137) | def test_validation_of_task_with_invalid_expressions():
  function test_validation_of_valid_task (line 163) | def test_validation_of_valid_task():
  function _ (line 176) | def _():
  function test_recursive_validation_of_if_else_branches (line 247) | def test_recursive_validation_of_if_else_branches():
  function test_recursive_validation_of_match_branches (line 283) | def test_recursive_validation_of_match_branches():
  function test_recursive_validation_of_foreach_blocks (line 322) | def test_recursive_validation_of_foreach_blocks():
  function test_list_comprehension_variables (line 358) | def test_list_comprehension_variables():
  function test_unsupported_features_detection (line 370) | def test_unsupported_features_detection():

FILE: src/agents-api/tests/test_tool_call_step.py
  function _ (line 12) | async def _():
  function _ (line 25) | async def _():
  function _ (line 50) | async def _():
  function _ (line 78) | async def _():

FILE: src/agents-api/tests/test_tool_queries.py
  function _ (line 22) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 48) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent):
  function _ (line 80) | async def _(dsn=pg_dsn, developer_id=test_developer_id, tool=test_tool, ...
  function _ (line 93) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 109) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...
  function _ (line 142) | async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent...

FILE: src/agents-api/tests/test_tool_runner.py
  function _ (line 15) | async def _():
  function _ (line 34) | async def _():
  function _ (line 59) | async def _():
  function _ (line 80) | async def _():
  function _ (line 96) | async def _():
  function _ (line 123) | async def _():

FILE: src/agents-api/tests/test_transitions_queries.py
  function _ (line 30) | async def _(
  function _ (line 117) | async def _(
  function create_execution (line 166) | async def create_execution(
  function create_transition (line 210) | async def create_transition(
  function _ (line 267) | async def _(
  function _ (line 322) | async def _(

FILE: src/agents-api/tests/test_usage_cost.py
  function _ (line 20) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:
  function _ (line 43) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:
  function _ (line 89) | async def _(dsn=pg_dsn) -> None:
  function _ (line 146) | async def _(dsn=pg_dsn) -> None:
  function _ (line 193) | async def _(dsn=pg_dsn) -> None:

FILE: src/agents-api/tests/test_usage_tracking.py
  function _ (line 28) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:
  function _ (line 51) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:
  function _ (line 85) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:
  function _ (line 107) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:
  function _ (line 131) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:
  function _ (line 148) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:
  function _ (line 175) | async def _(developer_id=test_developer_id) -> None:
  function _ (line 196) | async def _() -> None:
  function _ (line 207) | async def _(developer_id=test_developer_id) -> None:
  function _ (line 241) | async def _(developer_id=test_developer_id) -> None:
  function _ (line 266) | async def _(developer_id=test_developer_id) -> None:
  function _ (line 293) | async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None:

FILE: src/agents-api/tests/test_user_queries.py
  function _ (line 38) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 57) | async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_pro...
  function _ (line 76) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 97) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 117) | async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_pro...
  function _ (line 137) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user):
  function _ (line 157) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user, ...
  function _ (line 194) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user):
  function _ (line 215) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 231) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user):
  function _ (line 246) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user):
  function _ (line 261) | async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_pro...
  function _ (line 288) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 314) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 329) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 345) | async def _(dsn=pg_dsn, developer_id=test_developer_id):
  function _ (line 362) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user):
  function _ (line 382) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user, ...
  function _ (line 420) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user):
  function _ (line 442) | async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user):

FILE: src/agents-api/tests/test_user_routes.py
  function _ (line 10) | def _(client=client):
  function _ (line 26) | def _(make_request=make_request):
  function _ (line 42) | def _(make_request=make_request, project=test_project):
  function _ (line 60) | def _(make_request=make_request):
  function _ (line 72) | def _(make_request=make_request, user=test_user):
  function _ (line 84) | def _(make_request=make_request):
  function _ (line 113) | def _(make_request=make_request, user=test_user):
  function _ (line 143) | def _(make_request=make_request, user=test_user, project=test_project):
  function _ (line 175) | def _(make_request=make_request, user=test_user):
  function _ (line 206) | def _(make_request=make_request, user=test_user, project=test_project):
  function _ (line 239) | def _(make_request=make_request):
  function _ (line 254) | def _(make_request=make_request, project=test_project):
  function _ (line 287) | def _(make_request=make_request, user=test_user):

FILE: src/agents-api/tests/test_validation_errors.py
  function _ (line 10) | async def _():
  function _ (line 32) | async def _():
  function _ (line 43) | async def _():
  function _ (line 65) | async def _():
  function _ (line 86) | async def _():
  function _ (line 108) | async def _(make_request=make_request):
  function _ (line 151) | async def _():

FILE: src/agents-api/tests/test_workflow_helpers.py
  function _ (line 26) | async def _():
  function _ (line 106) | async def _():
  function _ (line 193) | async def _():

FILE: src/agents-api/tests/test_workflow_routes.py
  function _ (line 11) | async def _(
  function _ (line 42) | async def _(
  function _ (line 84) | async def _(
  function _ (line 129) | async def _(

FILE: src/agents-api/tests/utils.py
  function make_vector_with_similarity (line 30) | def make_vector_with_similarity(n: int = EMBEDDING_SIZE, d: float = 0.5):
  function generate_transition (line 76) | def generate_transition(
  function patch_testing_temporal (line 107) | async def patch_testing_temporal():
  function patch_http_client_with_temporal (line 139) | async def patch_http_client_with_temporal(*, postgres_pool, developer_id):
  function patch_embed_acompletion (line 162) | def patch_embed_acompletion(output={"role": "assistant", "content": "Hel...
  function patch_integration_service (line 189) | def patch_integration_service(output: dict = {"result": "ok"}):
  function get_pg_dsn (line 199) | def get_pg_dsn(start_vectorizer: bool = False):
  function get_localstack (line 243) | def get_localstack():

FILE: src/agents-api/uuid_extensions.pyi
  function time_ns (line 39) | def time_ns() -> int:  # pragma: no cover – implementation lives upstream.
  function uuid7 (line 43) | def uuid7(
  function uuid7 (line 51) | def uuid7(
  function uuid7 (line 59) | def uuid7(
  function uuid7 (line 67) | def uuid7(
  function uuid7 (line 75) | def uuid7(
  function uuid7 (line 82) | def uuid7(*args, **kwargs):  # type: ignore[override]
  function uuid7str (line 85) | def uuid7str(ns: int | None = ...) -> str: ...
  function check_timing_precision (line 87) | def check_timing_precision(timing_func: Callable[[], int] | None = ...) ...
  function uuid_to_datetime (line 89) | def uuid_to_datetime(value: _uuid.UUID) -> _dt.datetime: ...

FILE: src/cli/src/julep_cli/agents.py
  function create (line 18) | def create(
  function update (line 100) | def update(
  function delete (line 176) | def delete(
  function list (line 215) | def list(
  function get (line 279) | def get(

FILE: src/cli/src/julep_cli/app.py
  function version_callback (line 53) | def version_callback(value: bool):
  function no_color_callback (line 67) | def no_color_callback(value: bool) -> bool:
  function quiet_callback (line 76) | def quiet_callback(value: bool) -> bool:
  function main (line 83) | def main(

FILE: src/cli/src/julep_cli/auth.py
  class Environment (line 19) | class Environment(StrEnum):
  function is_valid_jwt (line 24) | def is_valid_jwt(token: str) -> bool:
  function auth (line 36) | def auth(

FILE: src/cli/src/julep_cli/chat.py
  function chat (line 14) | def chat(

FILE: src/cli/src/julep_cli/executions.py
  function create_execution (line 13) | def create_execution(client: Julep | Client, task_id: str, input_data: d...
  function create (line 21) | def create(

FILE: src/cli/src/julep_cli/importt.py
  function importt (line 25) | def importt(

FILE: src/cli/src/julep_cli/init.py
  function init (line 18) | def init(

FILE: src/cli/src/julep_cli/logs.py
  class TransitionLogApp (line 22) | class TransitionLogApp(App):
    method __init__ (line 36) | def __init__(self, client, execution_id, initial_transitions, **kwargs):
    method compose (line 44) | def compose(self):
    method on_mount (line 55) | async def on_mount(self) -> None:
    method fetch_new_transitions (line 64) | async def fetch_new_transitions(self) -> None:
  function logs (line 89) | def logs(

FILE: src/cli/src/julep_cli/ls.py
  function ls (line 17) | def ls(

FILE: src/cli/src/julep_cli/models.py
  class CreateAgentRequest (line 6) | class CreateAgentRequest(BaseModel):
  class CreateToolRequest (line 44) | class CreateToolRequest(BaseModel):
  class CreateTaskRequest (line 98) | class CreateTaskRequest(BaseModel):
  class LockedEntity (line 145) | class LockedEntity(BaseModel):
  class TaskAgentRelationship (line 168) | class TaskAgentRelationship(BaseModel):
  class ToolAgentRelationship (line 179) | class ToolAgentRelationship(BaseModel):
  class Relationships (line 190) | class Relationships(BaseModel):
  class LockFileContents (line 205) | class LockFileContents(BaseModel):

FILE: src/cli/src/julep_cli/run.py
  function run (line 17) | def run(

FILE: src/cli/src/julep_cli/sync.py
  function sync (line 43) | def sync(

FILE: src/cli/src/julep_cli/tasks.py
  function create (line 17) | def create(
  function update (line 98) | def update(
  function list (line 173) | def list(

FILE: src/cli/src/julep_cli/tools.py
  function create (line 17) | def create(
  function update (line 67) | def update(
  function delete (line 126) | def delete(
  function list (line 173) | def list(

FILE: src/cli/src/julep_cli/utils.py
  class DateTimeEncoder (line 29) | class DateTimeEncoder(json.JSONEncoder):
    method default (line 30) | def default(self, obj):
  function get_config (line 36) | def get_config(config_dir: Path = CONFIG_DIR) -> dict:
  function get_julep_yaml (line 45) | def get_julep_yaml(source: Path) -> dict:
  function write_julep_yaml (line 56) | def write_julep_yaml(source: Path, julep_yaml_contents: dict):
  function save_config (line 63) | def save_config(config: dict, config_dir: Path = CONFIG_DIR):
  function get_julep_client (line 71) | def get_julep_client(*, api_key: str | None = None, environment: str | N...
  function create_lock_file (line 106) | def create_lock_file(source: Path):
  function get_lock_file (line 116) | def get_lock_file(project_dir: Path = Path.cwd()) -> LockFileContents:
  function fetch_all_remote_agents (line 133) | def fetch_all_remote_agents(client: Julep) -> list[CreateAgentRequest]:
  function fetch_all_local_agents (line 151) | def fetch_all_local_agents(source: Path) -> list[tuple[CreateAgentReques...
  function write_lock_file (line 169) | def write_lock_file(project_dir: Path, content: LockFileContents):
  function get_entity_from_lock_file (line 175) | def get_entity_from_lock_file(
  function update_existing_entity_in_lock_file (line 201) | def update_existing_entity_in_lock_file(
  function add_entity_to_lock_file (line 235) | def add_entity_to_lock_file(
  function update_yaml_for_existing_entity (line 254) | def update_yaml_for_existing_entity(path: Path, data: dict):
  function add_agent_to_julep_yaml (line 260) | def add_agent_to_julep_yaml(source: Path, agent_data: dict):
  function get_related_agent_id (line 270) | def get_related_agent_id(
  function create_locked_entity (line 281) | def create_locked_entity(
  function get_agent_id_from_expression (line 296) | def get_agent_id_from_expression(expression: str, locked_agents: list[Lo...
  function update_entity_force_remote (line 312) | def update_entity_force_remote(
  function get_state_db_connection (line 346) | def get_state_db_connection() -> sqlite3.Connection:
  function init_state_db (line 355) | def init_state_db():
  function persist_attribute (line 371) | def persist_attribute(key: str, extractor: Callable[[Any], Any] | None =...
  function manage_db_attribute (line 421) | def manage_db_attribute(key: str, current_value: str | None = None) -> str:

FILE: src/cli/src/julep_cli/wrapper.py
  class ExceptionWithContext (line 14) | class ExceptionWithContext(Protocol):
  function get_command_signature (line 18) | def get_command_signature(error: UsageError) -> inspect.Signature:
  function bind_arguments (line 23) | def bind_arguments(signature: inspect.Signature, params: dict) -> inspec...
  function make_validator (line 31) | def make_validator(func: Callable[[Any], Any]) -> Callable[[Any], bool]:
  function build_prompt (line 42) | def build_prompt(
  function prompt_for_missing_parameter (line 111) | def prompt_for_missing_parameter(error: UsageError) -> None:
  class WrappedTyper (line 178) | class WrappedTyper(Typer):
    method __call__ (line 181) | def __call__(self, *args, **kwargs):
    method command (line 189) | def command(self, *args, **kwargs):
  class NeuralNetwork (line 199) | class NeuralNetwork(StrEnum):
  function hello (line 213) | def hello(

FILE: src/cli/tests/test_auth.py
  function create_runner (line 8) | def create_runner(env: dict | None = None):
  function test_auth_command_should_save_api_key_when_provided_via_command_line (line 16) | def test_auth_command_should_save_api_key_when_provided_via_command_line():
  function test_auth_command_should_use_api_key_from_environment_if_not_provided (line 44) | def test_auth_command_should_use_api_key_from_environment_if_not_provide...
  function test_auth_command_should_fail_when_no_api_key_is_provided (line 69) | def test_auth_command_should_fail_when_no_api_key_is_provided():
  function test_auth_command_with_environment_dev (line 83) | def test_auth_command_with_environment_dev():
  function test_auth_command_with_verification (line 107) | def test_auth_command_with_verification():
  function test_auth_command_verification_fails (line 135) | def test_auth_command_verification_fails():
  function test_auth_command_invalid_jwt_format (line 158) | def test_auth_command_invalid_jwt_format():

FILE: src/integrations-service/gunicorn_conf.py
  function when_ready (line 24) | def when_ready(server):
  function on_starting (line 33) | def on_starting(server):
  function worker_exit (line 38) | def worker_exit(server, worker):

FILE: src/integrations-service/integrations/autogen/Agents.py
  class Agent (line 12) | class Agent(BaseModel):
  class CreateAgentRequest (line 66) | class CreateAgentRequest(BaseModel):
  class CreateOrUpdateAgentRequest (line 115) | class CreateOrUpdateAgentRequest(CreateAgentRequest):
  class ListModelsResponse (line 161) | class ListModelsResponse(BaseModel):
  class ModelInfo (line 175) | class ModelInfo(BaseModel):
  class PatchAgentRequest (line 189) | class PatchAgentRequest(BaseModel):
  class UpdateAgentRequest (line 238) | class UpdateAgentRequest(BaseModel):

FILE: src/integrations-service/integrations/autogen/Chat.py
  class BaseChatOutput (line 23) | class BaseChatOutput(BaseModel):
  class BaseChatResponse (line 50) | class BaseChatResponse(BaseModel):
  class BaseTokenLogProb (line 73) | class BaseTokenLogProb(BaseModel):
  class ChatInputData (line 85) | class ChatInputData(BaseModel):
  class ChatOutputChunk (line 103) | class ChatOutputChunk(BaseChatOutput):
  class ChunkChatResponse (line 117) | class ChunkChatResponse(BaseChatResponse):
  class CompletionUsage (line 127) | class CompletionUsage(BaseModel):
  class Content (line 149) | class Content(BaseModel):
  class ContentItemModel (line 163) | class ContentItemModel(BaseModel):
  class ContentModel (line 189) | class ContentModel(BaseModel):
  class ContentModel2 (line 205) | class ContentModel2(BaseModel):
  class ContentModel4 (line 221) | class ContentModel4(BaseModel):
  class ContentModel6 (line 237) | class ContentModel6(BaseModel):
  class ContentModel7 (line 250) | class ContentModel7(BaseModel):
  class Delta (line 264) | class Delta(BaseModel):
  class ImageUrl (line 302) | class ImageUrl(BaseModel):
  class LogProbResponse (line 320) | class LogProbResponse(BaseModel):
  class Message (line 330) | class Message(BaseModel):
  class MessageChatResponse (line 364) | class MessageChatResponse(BaseChatResponse):
  class MessageModel (line 374) | class MessageModel(BaseModel):
  class MultipleChatOutput (line 415) | class MultipleChatOutput(BaseChatOutput):
  class RenderResponse (line 428) | class RenderResponse(ChatInputData):
  class SchemaCompletionResponseFormat (line 438) | class SchemaCompletionResponseFormat(BaseModel):
  class SimpleCompletionResponseFormat (line 452) | class SimpleCompletionResponseFormat(BaseModel):
  class SingleChatOutput (line 462) | class SingleChatOutput(BaseChatOutput):
  class Source (line 473) | class Source(BaseModel):
  class TokenLogProb (line 482) | class TokenLogProb(BaseTokenLogProb):
  class ChatInput (line 495) | class ChatInput(ChatInputData):

FILE: src/integrations-service/integrations/autogen/Common.py
  class Content (line 12) | class Content(RootModel[str]):
  class JinjaTemplate (line 22) | class JinjaTemplate(RootModel[str]):
  class Limit (line 32) | class Limit(RootModel[int]):
  class LogitBias (line 42) | class LogitBias(RootModel[float]):
  class Offset (line 49) | class Offset(RootModel[int]):
  class PyExpression (line 59) | class PyExpression(RootModel[str]):
  class ResourceDeletedResponse (line 69) | class ResourceDeletedResponse(BaseModel):
  class StepLabel (line 87) | class StepLabel(RootModel[str]):
  class Uuid (line 97) | class Uuid(RootModel[UUID]):

FILE: src/integrations-service/integrations/autogen/Docs.py
  class BulkDeleteDocsRequest (line 14) | class BulkDeleteDocsRequest(BaseModel):
  class CreateDocRequest (line 28) | class CreateDocRequest(BaseModel):
  class Doc (line 51) | class Doc(BaseModel):
  class DocOwner (line 96) | class DocOwner(BaseModel):
  class DocReference (line 104) | class DocReference(BaseModel):
  class DocSearchResponse (line 122) | class DocSearchResponse(BaseModel):
  class EmbedQueryResponse (line 136) | class EmbedQueryResponse(BaseModel):
  class HybridDocSearchRequest (line 146) | class HybridDocSearchRequest(BaseModel):
  class MultipleEmbedQueryRequest (line 196) | class MultipleEmbedQueryRequest(BaseModel):
  class SingleEmbedQueryRequest (line 210) | class SingleEmbedQueryRequest(BaseModel):
  class Snippet (line 224) | class Snippet(BaseModel):
  class TextOnlyDocSearchRequest (line 233) | class TextOnlyDocSearchRequest(BaseModel):
  class VectorDocSearchRequest (line 263) | class VectorDocSearchRequest(BaseModel):

FILE: src/integrations-service/integrations/autogen/Entries.py
  class BaseEntry (line 21) | class BaseEntry(BaseModel):
  class ChatMLRole (line 84) | class ChatMLRole(RootModel[Literal["user", "assistant", "system", "tool"...
  class Content (line 94) | class Content(BaseModel):
  class ContentItemModel (line 108) | class ContentItemModel(BaseModel):
  class ContentModel (line 122) | class ContentModel(BaseModel):
  class ContentModel2 (line 138) | class ContentModel2(BaseModel):
  class ContentModel3 (line 151) | class ContentModel3(BaseModel):
  class Entry (line 165) | class Entry(BaseEntry):
  class History (line 176) | class History(BaseModel):
  class ImageDetail (line 189) | class ImageDetail(RootModel[Literal["low", "high", "auto"]]):
  class ImageUrl (line 199) | class ImageUrl(BaseModel):
  class Relation (line 217) | class Relation(BaseModel):
  class Source (line 226) | class Source(BaseModel):

FILE: src/integrations-service/integrations/autogen/Executions.py
  class CreateExecutionRequest (line 12) | class CreateExecutionRequest(BaseModel):
  class Execution (line 39) | class Execution(BaseModel):
  class TaskTokenResumeExecutionRequest (line 90) | class TaskTokenResumeExecutionRequest(BaseModel):
  class TransitionEvent (line 101) | class TransitionEvent(BaseModel):
  class TransitionTarget (line 130) | class TransitionTarget(BaseModel):
  class UpdateExecutionRequest (line 150) | class UpdateExecutionRequest(BaseModel):
  class ResumeExecutionRequest (line 165) | class ResumeExecutionRequest(UpdateExecutionRequest):
  class StopExecutionRequest (line 176) | class StopExecutionRequest(UpdateExecutionRequest):
  class Transition (line 187) | class Transition(TransitionEvent):

FILE: src/integrations-service/integrations/autogen/Files.py
  class CreateFileRequest (line 12) | class CreateFileRequest(BaseModel):
  class File (line 51) | class File(BaseModel):

FILE: src/integrations-service/integrations/autogen/Jobs.py
  class JobStatus (line 12) | class JobStatus(BaseModel):

FILE: src/integrations-service/integrations/autogen/Projects.py
  class CreateProjectRequest (line 12) | class CreateProjectRequest(BaseModel):
  class PatchProjectRequest (line 34) | class PatchProjectRequest(BaseModel):
  class Project (line 56) | class Project(BaseModel):
  class UpdateProjectRequest (line 87) | class UpdateProjectRequest(BaseModel):
  class CreateOrUpdateProjectRequest (line 109) | class CreateOrUpdateProjectRequest(CreateProjectRequest):

FILE: src/integrations-service/integrations/autogen/Responses.py
  class BaseTool (line 11) | class BaseTool(BaseModel):
  class Click (line 18) | class Click(BaseModel):
  class ComputerScreenshotImage (line 40) | class ComputerScreenshotImage(BaseModel):
  class ComputerTool (line 58) | class ComputerTool(BaseTool):
  class ComputerToolCall (line 80) | class ComputerToolCall(BaseModel):
  class ComputerToolCallOutput (line 110) | class ComputerToolCallOutput(BaseModel):
  class ComputerToolCallOutputResource (line 140) | class ComputerToolCallOutputResource(ComputerToolCallOutput):
  class ComputerToolCallSafetyCheck (line 150) | class ComputerToolCallSafetyCheck(BaseModel):
  class Coordinate (line 168) | class Coordinate(BaseModel):
  class CreateResponse (line 182) | class CreateResponse(BaseModel):
  class DoubleClick (line 234) | class DoubleClick(BaseModel):
  class Drag (line 252) | class Drag(BaseModel):
  class EasyInputMessage (line 266) | class EasyInputMessage(BaseModel):
  class FileCitation (line 284) | class FileCitation(BaseModel):
  class FilePath (line 302) | class FilePath(BaseModel):
  class FileSearchTool (line 320) | class FileSearchTool(BaseTool):
  class FileSearchToolCall (line 331) | class FileSearchToolCall(BaseModel):
  class Function (line 357) | class Function(BaseModel):
  class FunctionTool (line 364) | class FunctionTool(BaseTool):
  class FunctionToolCall (line 375) | class FunctionToolCall(BaseModel):
  class FunctionToolCallOutput (line 405) | class FunctionToolCallOutput(BaseModel):
  class FunctionToolCallOutputResource (line 431) | class FunctionToolCallOutputResource(FunctionToolCallOutput):
  class IncompleteDetails (line 441) | class IncompleteDetails(BaseModel):
  class InputFile (line 448) | class InputFile(BaseModel):
  class InputImage (line 474) | class InputImage(BaseModel):
  class InputMessage (line 496) | class InputMessage(BaseModel):
  class InputMessageResource (line 506) | class InputMessageResource(InputMessage):
  class InputText (line 513) | class InputText(BaseModel):
  class InputTokensDetails (line 527) | class InputTokensDetails(BaseModel):
  class Item (line 534) | class Item(BaseModel):
  class KeyPress (line 545) | class KeyPress(BaseModel):
  class Move (line 559) | class Move(BaseModel):
  class OutputMessage (line 577) | class OutputMessage(BaseModel):
  class OutputText (line 588) | class OutputText(BaseModel):
  class OutputTokensDetails (line 606) | class OutputTokensDetails(BaseModel):
  class RankingOptions (line 613) | class RankingOptions(BaseModel):
  class Reasoning (line 621) | class Reasoning(BaseModel):
  class ReasoningContent (line 639) | class ReasoningContent(BaseModel):
  class ReasoningItem (line 653) | class ReasoningItem(BaseModel):
  class Refusal (line 675) | class Refusal(BaseModel):
  class Response (line 689) | class Response(BaseModel):
  class ResponseError (line 725) | class ResponseError(BaseModel):
  class ResponseFormatJsonObject (line 735) | class ResponseFormatJsonObject(BaseModel):
  class ResponseFormatText (line 753) | class ResponseFormatText(BaseModel):
  class ResponseUsage (line 767) | class ResponseUsage(BaseModel):
  class Result (line 778) | class Result(BaseModel):
  class Screenshot (line 804) | class Screenshot(BaseModel):
  class Scroll (line 814) | class Scroll(BaseModel):
  class Text (line 840) | class Text(BaseModel):
  class TextResponseFormatJsonSchema (line 847) | class TextResponseFormatJsonSchema(BaseModel):
  class ToolChoice (line 877) | class ToolChoice(BaseModel):
  class ToolChoiceFunction (line 885) | class ToolChoiceFunction(BaseModel):
  class ToolChoiceTypes (line 903) | class ToolChoiceTypes(BaseModel):
  class Type (line 930) | class Type(BaseModel):
  class UrlCitation (line 944) | class UrlCitation(BaseModel):
  class UserLocation (line 970) | class UserLocation(BaseModel):
  class VectorStoreFileAttributes (line 981) | class VectorStoreFileAttributes(BaseModel):
  class VectorStoreFileAttributesString (line 995) | class VectorStoreFileAttributesString(RootModel[str]):
  class Wait (line 1002) | class Wait(BaseModel):
  class WebSearchTool (line 1012) | class WebSearchTool(BaseTool):
  class WebSearchToolCall (line 1022) | class WebSearchToolCall(BaseModel):

FILE: src/integrations-service/integrations/autogen/Secrets.py
  class CreateSecretRequest (line 12) | class CreateSecretRequest(BaseModel):
  class Secret (line 31) | class Secret(BaseModel):

FILE: src/integrations-service/integrations/autogen/Sessions.py
  class BaseDocSearch (line 12) | class BaseDocSearch(BaseModel):
  class CreateSessionRequest (line 45) | class CreateSessionRequest(BaseModel):
  class HybridDocSearch (line 102) | class HybridDocSearch(BaseDocSearch):
  class HybridDocSearchUpdate (line 132) | class HybridDocSearchUpdate(BaseDocSearchUpdate):
  class PatchSessionRequest (line 162) | class PatchSessionRequest(BaseModel):
  class Session (line 211) | class Session(BaseModel):
  class SingleAgentMultiUserSession (line 271) | class SingleAgentMultiUserSession(Session):
  class SingleAgentNoUserSession (line 279) | class SingleAgentNoUserSession(Session):
  class SingleAgentSingleUserSession (line 286) | class SingleAgentSingleUserSession(Session):
  class TextOnlyDocSearch (line 294) | class TextOnlyDocSearch(BaseDocSearch):
  class TextOnlyDocSearchUpdate (line 308) | class TextOnlyDocSearchUpdate(BaseDocSearchUpdate):
  class UpdateSessionRequest (line 322) | class UpdateSessionRequest(BaseModel):
  class VectorDocSearch (line 369) | class VectorDocSearch(BaseDocSearch):
  class VectorDocSearchUpdate (line 387) | class VectorDocSearchUpdate(BaseDocSearchUpdate):
  class CreateOrUpdateSessionRequest (line 405) | class CreateOrUpdateSessionRequest(CreateSessionRequest):
  class MultiAgentMultiUserSession (line 459) | class MultiAgentMultiUserSession(Session):
  class MultiAgentNoUserSession (line 467) | class MultiAgentNoUserSession(Session):
  class MultiAgentSingleUserSession (line 474) | class MultiAgentSingleUserSession(Session):

FILE: src/integrations-service/integrations/autogen/Tasks.py
  class CaseThen (line 21) | class CaseThen(BaseModel):
  class CaseThenUpdateItem (line 47) | class CaseThenUpdateItem(BaseModel):
  class Content (line 73) | class Content(BaseModel):
  class ContentItemModel (line 90) | class ContentItemModel(BaseModel):
  class ContentModel (line 104) | class ContentModel(BaseModel):
  class ContentModel1 (line 118) | class ContentModel1(BaseModel):
  class ContentModel4 (line 137) | class ContentModel4(BaseModel):
  class CreateTaskRequest (line 150) | class CreateTaskRequest(BaseModel):
  class Else (line 212) | class Else(BaseModel):
  class ElseModel (line 256) | class ElseModel(BaseModel):
  class ErrorWorkflowStep (line 306) | class ErrorWorkflowStep(BaseModel):
  class EvaluateStep (line 326) | class EvaluateStep(BaseModel):
  class ForeachDo (line 348) | class ForeachDo(BaseModel):
  class ForeachDoUpdateItem (line 372) | class ForeachDoUpdateItem(BaseModel):
  class ForeachStep (line 396) | class ForeachStep(BaseModel):
  class ForeachStepUpdateItem (line 418) | class ForeachStepUpdateItem(BaseModel):
  class GetStep (line 438) | class GetStep(BaseModel):
  class IfElseWorkflowStep (line 458) | class IfElseWorkflowStep(BaseModel):
  class IfElseWorkflowStepUpdateItem (line 524) | class IfElseWorkflowStepUpdateItem(BaseModel):
  class ImageUrl (line 588) | class ImageUrl(BaseModel):
  class LogStep (line 606) | class LogStep(BaseModel):
  class Main (line 626) | class Main(BaseModel):
  class MainModel (line 666) | class MainModel(BaseModel):
  class ParallelStep (line 712) | class ParallelStep(BaseModel):
  class ParallelStepUpdateItem (line 739) | class ParallelStepUpdateItem(BaseModel):
  class PatchTaskRequest (line 770) | class PatchTaskRequest(BaseModel):
  class PromptItem (line 833) | class PromptItem(BaseModel):
  class PromptStep (line 867) | class PromptStep(BaseModel):
  class PromptStepUpdateItem (line 915) | class PromptStepUpdateItem(BaseModel):
  class ReturnStep (line 963) | class ReturnStep(BaseModel):
  class SetStep (line 986) | class SetStep(BaseModel):
  class SleepFor (line 1006) | class SleepFor(BaseModel):
  class SleepStep (line 1028) | class SleepStep(BaseModel):
  class Source (line 1048) | class Source(BaseModel):
  class SwitchStep (line 1060) | class SwitchStep(BaseModel):
  class SwitchStepUpdateItem (line 1080) | class SwitchStepUpdateItem(BaseModel):
  class Task (line 1100) | class Task(BaseModel):
  class TaskTool (line 1171) | class TaskTool(CreateToolRequest):
  class Then (line 1181) | class Then(BaseModel):
  class ThenModel (line 1225) | class ThenModel(BaseModel):
  class ToolCallStep (line 1275) | class ToolCallStep(BaseModel):
  class ToolRef (line 1301) | class ToolRef(BaseModel):
  class ToolRefById (line 1312) | class ToolRefById(BaseModel):
  class ToolRefByName (line 1323) | class ToolRefByName(BaseModel):
  class ToolRefUpdateItem (line 1337) | class ToolRefUpdateItem(BaseModel):
  class UpdateTaskRequest (line 1347) | class UpdateTaskRequest(BaseModel):
  class WaitForInputInfo (line 1409) | class WaitForInputInfo(BaseModel):
  class WaitForInputStep (line 1419) | class WaitForInputStep(BaseModel):
  class YieldStep (line 1441) | class YieldStep(BaseModel):

FILE: src/integrations-service/integrations/autogen/Tools.py
  class AlgoliaSearchArguments (line 19) | class AlgoliaSearchArguments(BaseModel):
  class AlgoliaSearchArgumentsUpdate (line 45) | class AlgoliaSearchArgumentsUpdate(BaseModel):
  class AlgoliaSetup (line 71) | class AlgoliaSetup(BaseModel):
  class AlgoliaSetupUpdate (line 89) | class AlgoliaSetupUpdate(BaseModel):
  class ApiCallDef (line 107) | class ApiCallDef(BaseModel):
  class ApiCallDefUpdate (line 179) | class ApiCallDefUpdate(BaseModel):
  class ArxivSearchArguments (line 262) | class ArxivSearchArguments(BaseModel):
  class ArxivSearchArgumentsUpdate (line 296) | class ArxivSearchArgumentsUpdate(BaseModel):
  class BaseChosenToolCall (line 330) | class BaseChosenToolCall(BaseModel):
  class BaseIntegrationDef (line 363) | class BaseIntegrationDef(BaseModel):
  class BaseIntegrationDefUpdate (line 407) | class BaseIntegrationDefUpdate(BaseModel):
  class Bash20241022Def (line 454) | class Bash20241022Def(BaseModel):
  class BraveIntegrationDef (line 465) | class BraveIntegrationDef(BaseIntegrationDef):
  class BraveIntegrationDefUpdate (line 491) | class BraveIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class BraveSearchArguments (line 517) | class BraveSearchArguments(BaseModel):
  class BraveSearchArgumentsUpdate (line 531) | class BraveSearchArgumentsUpdate(BaseModel):
  class BraveSearchSetup (line 545) | class BraveSearchSetup(BaseModel):
  class BraveSearchSetupUpdate (line 559) | class BraveSearchSetupUpdate(BaseModel):
  class BrowserbaseCompleteSessionArguments (line 573) | class BrowserbaseCompleteSessionArguments(BaseModel):
  class BrowserbaseCompleteSessionArgumentsUpdate (line 581) | class BrowserbaseCompleteSessionArgumentsUpdate(BaseModel):
  class BrowserbaseContextArguments (line 589) | class BrowserbaseContextArguments(BaseModel):
  class BrowserbaseContextArgumentsUpdate (line 599) | class BrowserbaseContextArgumentsUpdate(BaseModel):
  class BrowserbaseCreateSessionArguments (line 609) | class BrowserbaseCreateSessionArguments(BaseModel):
  class BrowserbaseExtensionArguments (line 639) | class BrowserbaseExtensionArguments(BaseModel):
  class BrowserbaseExtensionArgumentsUpdate (line 653) | class BrowserbaseExtensionArgumentsUpdate(BaseModel):
  class BrowserbaseGetSessionArguments (line 667) | class BrowserbaseGetSessionArguments(BaseModel):
  class BrowserbaseGetSessionArgumentsUpdate (line 674) | class BrowserbaseGetSessionArgumentsUpdate(BaseModel):
  class BrowserbaseListSessionsArguments (line 687) | class BrowserbaseListSessionsArguments(BaseModel):
  class BrowserbaseSetup (line 697) | class BrowserbaseSetup(BaseModel):
  class BrowserbaseSetupUpdate (line 723) | class BrowserbaseSetupUpdate(BaseModel):
  class ChosenBash20241022 (line 749) | class ChosenBash20241022(BaseModel):
  class ChosenComputer20241022 (line 763) | class ChosenComputer20241022(BaseModel):
  class ChosenFunctionCall (line 791) | class ChosenFunctionCall(BaseChosenToolCall):
  class ChosenTextEditor20241022 (line 802) | class ChosenTextEditor20241022(BaseModel):
  class CloudinaryEditArguments (line 836) | class CloudinaryEditArguments(BaseModel):
  class CloudinaryEditArgumentsUpdate (line 858) | class CloudinaryEditArgumentsUpdate(BaseModel):
  class CloudinarySetup (line 880) | class CloudinarySetup(BaseModel):
  class CloudinarySetupUpdate (line 906) | class CloudinarySetupUpdate(BaseModel):
  class CloudinaryUploadArguments (line 932) | class CloudinaryUploadArguments(BaseModel):
  class CloudinaryUploadArgumentsUpdate (line 958) | class CloudinaryUploadArgumentsUpdate(BaseModel):
  class Computer20241022Def (line 984) | class Computer20241022Def(BaseModel):
  class CreateToolRequest (line 1011) | class CreateToolRequest(BaseModel):
  class DummyIntegrationDef (line 1089) | class DummyIntegrationDef(BaseIntegrationDef):
  class DummyIntegrationDefUpdate (line 1096) | class DummyIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class EmailArguments (line 1103) | class EmailArguments(BaseModel):
  class EmailArgumentsUpdate (line 1129) | class EmailArgumentsUpdate(BaseModel):
  class EmailIntegrationDef (line 1155) | class EmailIntegrationDef(BaseIntegrationDef):
  class EmailIntegrationDefUpdate (line 1181) | class EmailIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class EmailSetup (line 1207) | class EmailSetup(BaseModel):
  class EmailSetupUpdate (line 1233) | class EmailSetupUpdate(BaseModel):
  class FfmpegIntegrationDef (line 1259) | class FfmpegIntegrationDef(BaseIntegrationDef):
  class FfmpegIntegrationDefUpdate (line 1285) | class FfmpegIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class FfmpegSearchArguments (line 1311) | class FfmpegSearchArguments(BaseModel):
  class FfmpegSearchArgumentsUpdate (line 1329) | class FfmpegSearchArgumentsUpdate(BaseModel):
  class FunctionCallOption (line 1347) | class FunctionCallOption(BaseModel):
  class FunctionDef (line 1361) | class FunctionDef(BaseModel):
  class GoogleSheetsAppendArguments (line 1383) | class GoogleSheetsAppendArguments(BaseModel):
  class GoogleSheetsAppendArgumentsUpdate (line 1417) | class GoogleSheetsAppendArgumentsUpdate(BaseModel):
  class GoogleSheetsBatchReadArguments (line 1451) | class GoogleSheetsBatchReadArguments(BaseModel):
  class GoogleSheetsBatchReadArgumentsUpdate (line 1483) | class GoogleSheetsBatchReadArgumentsUpdate(BaseModel):
  class GoogleSheetsBatchWriteArguments (line 1515) | class GoogleSheetsBatchWriteArguments(BaseModel):
  class GoogleSheetsBatchWriteArgumentsUpdate (line 1541) | class GoogleSheetsBatchWriteArgumentsUpdate(BaseModel):
  class GoogleSheetsClearArguments (line 1567) | class GoogleSheetsClearArguments(BaseModel):
  class GoogleSheetsClearArgumentsUpdate (line 1585) | class GoogleSheetsClearArgumentsUpdate(BaseModel):
  class GoogleSheetsIntegrationDef (line 1603) | class GoogleSheetsIntegrationDef(BaseIntegrationDef):
  class GoogleSheetsIntegrationDefUpdate (line 1647) | class GoogleSheetsIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class GoogleSheetsReadArguments (line 1691) | class GoogleSheetsReadArguments(BaseModel):
  class GoogleSheetsReadArgumentsUpdate (line 1723) | class GoogleSheetsReadArgumentsUpdate(BaseModel):
  class GoogleSheetsSetup (line 1755) | class GoogleSheetsSetup(BaseModel):
  class GoogleSheetsSetupUpdate (line 1780) | class GoogleSheetsSetupUpdate(BaseModel):
  class GoogleSheetsValueRange (line 1805) | class GoogleSheetsValueRange(BaseModel):
  class GoogleSheetsWriteArguments (line 1827) | class GoogleSheetsWriteArguments(BaseModel):
  class GoogleSheetsWriteArgumentsUpdate (line 1861) | class GoogleSheetsWriteArgumentsUpdate(BaseModel):
  class LlamaParseFetchArguments (line 1895) | class LlamaParseFetchArguments(BaseModel):
  class LlamaParseFetchArgumentsUpdate (line 1921) | class LlamaParseFetchArgumentsUpdate(BaseModel):
  class LlamaParseIntegrationDef (line 1947) | class LlamaParseIntegrationDef(BaseIntegrationDef):
  class LlamaParseIntegrationDefUpdate (line 1973) | class LlamaParseIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class LlamaParseSetup (line 1999) | class LlamaParseSetup(BaseModel):
  class LlamaParseSetupUpdate (line 2017) | class LlamaParseSetupUpdate(BaseModel):
  class MailgunIntegrationDef (line 2035) | class MailgunIntegrationDef(BaseIntegrationDef):
  class MailgunIntegrationDefUpdate (line 2061) | class MailgunIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class MailgunSendEmailArguments (line 2087) | class MailgunSendEmailArguments(BaseModel):
  class MailgunSendEmailArgumentsUpdate (line 2121) | class MailgunSendEmailArgumentsUpdate(BaseModel):
  class MailgunSetup (line 2155) | class MailgunSetup(BaseModel):
  class MailgunSetupUpdate (line 2169) | class MailgunSetupUpdate(BaseModel):
  class McpCallToolArguments (line 2183) | class McpCallToolArguments(BaseModel):
  class McpCallToolArgumentsUpdate (line 2205) | class McpCallToolArgumentsUpdate(BaseModel):
  class McpIntegrationDef (line 2227) | class McpIntegrationDef(BaseIntegrationDef):
  class McpIntegrationDefUpdate (line 2253) | class McpIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class McpListToolsArguments (line 2279) | class McpListToolsArguments(BaseModel):
  class McpSetup (line 2293) | class McpSetup(BaseModel):
  class McpSetupUpdate (line 2331) | class McpSetupUpdate(BaseModel):
  class NamedToolChoice (line 2369) | class NamedToolChoice(BaseModel):
  class ParameterSchema (line 2376) | class ParameterSchema(BaseModel):
  class ParameterSchemaUpdate (line 2404) | class ParameterSchemaUpdate(BaseModel):
  class PatchToolRequest (line 2432) | class PatchToolRequest(BaseModel):
  class PropertyDefinition (line 2513) | class PropertyDefinition(BaseModel):
  class PropertyDefinitionUpdate (line 2539) | class PropertyDefinitionUpdate(BaseModel):
  class RemoteBrowserArguments (line 2565) | class RemoteBrowserArguments(BaseModel):
  class RemoteBrowserArgumentsUpdate (line 2604) | class RemoteBrowserArgumentsUpdate(BaseModel):
  class RemoteBrowserIntegrationDef (line 2646) | class RemoteBrowserIntegrationDef(BaseIntegrationDef):
  class RemoteBrowserIntegrationDefUpdate (line 2660) | class RemoteBrowserIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class RemoteBrowserSetup (line 2674) | class RemoteBrowserSetup(BaseModel):
  class SecretRef (line 2696) | class SecretRef(BaseModel):
  class SecretRefUpdate (line 2706) | class SecretRefUpdate(BaseModel):
  class SpiderFetchArguments (line 2716) | class SpiderFetchArguments(BaseModel):
  class SpiderFetchArgumentsUpdate (line 2740) | class SpiderFetchArgumentsUpdate(BaseModel):
  class SpiderIntegrationDef (line 2764) | class SpiderIntegrationDef(BaseIntegrationDef):
  class SpiderIntegrationDefUpdate (line 2790) | class SpiderIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class SpiderSetup (line 2816) | class SpiderSetup(BaseModel):
  class SpiderSetupUpdate (line 2830) | class SpiderSetupUpdate(BaseModel):
  class SystemDef (line 2844) | class SystemDef(BaseModel):
  class SystemDefUpdate (line 2887) | class SystemDefUpdate(BaseModel):
  class TextEditor20241022Def (line 2935) | class TextEditor20241022Def(BaseModel):
  class Tool (line 2946) | class Tool(BaseModel):
  class ToolResponse (line 3029) | class ToolResponse(BaseModel):
  class UnstructuredIntegrationDef (line 3040) | class UnstructuredIntegrationDef(BaseIntegrationDef):
  class UnstructuredIntegrationDefUpdate (line 3066) | class UnstructuredIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class UnstructuredPartitionArguments (line 3092) | class UnstructuredPartitionArguments(BaseModel):
  class UnstructuredPartitionArgumentsUpdate (line 3114) | class UnstructuredPartitionArgumentsUpdate(BaseModel):
  class UnstructuredSetup (line 3136) | class UnstructuredSetup(BaseModel):
  class UnstructuredSetupUpdate (line 3170) | class UnstructuredSetupUpdate(BaseModel):
  class UpdateToolRequest (line 3204) | class UpdateToolRequest(BaseModel):
  class WeatherGetArguments (line 3282) | class WeatherGetArguments(BaseModel):
  class WeatherGetArgumentsUpdate (line 3296) | class WeatherGetArgumentsUpdate(BaseModel):
  class WeatherIntegrationDef (line 3310) | class WeatherIntegrationDef(BaseIntegrationDef):
  class WeatherIntegrationDefUpdate (line 3336) | class WeatherIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class WeatherSetup (line 3362) | class WeatherSetup(BaseModel):
  class WeatherSetupUpdate (line 3376) | class WeatherSetupUpdate(BaseModel):
  class WikipediaIntegrationDef (line 3390) | class WikipediaIntegrationDef(BaseIntegrationDef):
  class WikipediaIntegrationDefUpdate (line 3416) | class WikipediaIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class WikipediaSearchArguments (line 3442) | class WikipediaSearchArguments(BaseModel):
  class WikipediaSearchArgumentsUpdate (line 3460) | class WikipediaSearchArgumentsUpdate(BaseModel):
  class AlgoliaIntegrationDef (line 3478) | class AlgoliaIntegrationDef(BaseIntegrationDef):
  class AlgoliaIntegrationDefUpdate (line 3504) | class AlgoliaIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class ArxivIntegrationDef (line 3530) | class ArxivIntegrationDef(BaseIntegrationDef):
  class ArxivIntegrationDefUpdate (line 3556) | class ArxivIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class BaseBrowserbaseIntegrationDef (line 3582) | class BaseBrowserbaseIntegrationDef(BaseIntegrationDef):
  class BaseBrowserbaseIntegrationDefUpdate (line 3611) | class BaseBrowserbaseIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class BaseCloudinaryIntegrationDef (line 3640) | class BaseCloudinaryIntegrationDef(BaseIntegrationDef):
  class BaseCloudinaryIntegrationDefUpdate (line 3653) | class BaseCloudinaryIntegrationDefUpdate(BaseIntegrationDefUpdate):
  class BrowserbaseCompleteSessionIntegrationDef (line 3666) | class BrowserbaseCompleteSessionIntegrationDef(BaseBrowserbaseIntegratio...
  class BrowserbaseCompleteSessionIntegrationDefUpdate (line 3678) | class BrowserbaseCompleteSessionIntegrationDefUpdate(BaseBrowserbaseInte...
  class BrowserbaseContextIntegrationDef (line 3690) | class BrowserbaseContextIntegrationDef(BaseBrowserbaseIntegrationDef):
  class BrowserbaseContextIntegrationDefUpdate (line 3708) | class BrowserbaseContextIntegrationDefUpdate(BaseBrowserbaseIntegrationD...
  class BrowserbaseCreateSessionIntegrationDef (line 3726) | class BrowserbaseCreateSessionIntegrationDef(BaseBrowserbaseIntegrationD...
  class BrowserbaseCreateSessionIntegrationDefUpdate (line 3741) | class BrowserbaseCreateSessionIntegrationDefUpdate(BaseBrowserbaseIntegr...
  class BrowserbaseExtensionIntegrationDef (line 3756) | class BrowserbaseExtensionIntegrationDef(BaseBrowserbaseIntegrationDef):
  class BrowserbaseExtensionIntegrationDefUpdate (line 3774) | class BrowserbaseExtensionIntegrationDefUpdate(BaseBrowserbaseIntegratio...
  class BrowserbaseGetSessionIntegrationDef (line 3792) | class BrowserbaseGetSessionIntegrationDef(BaseBrowserbaseIntegrationDef):
  class BrowserbaseGetSessionIntegrationDefUpdate (line 3804) | class BrowserbaseGetSessionIntegrationDefUpdate(BaseBrowserbaseIntegrati...
  class BrowserbaseGetSessionLiveUrlsIntegrationDef (line 3816) | class BrowserbaseGetSessionLiveUrlsIntegrationDef(BaseBrowserbaseIntegra...
  class BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate (line 3828) | class BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate(BaseBrowserbaseI...
  class BrowserbaseListSessionsIntegrationDef (line 3840) | class BrowserbaseListSessionsIntegrationDef(BaseBrowserbaseIntegrationDef):
  class BrowserbaseListSessionsIntegrationDefUpdate (line 3858) | class BrowserbaseListSessionsIntegrationDefUpdate(BaseBrowserbaseIntegra...
  class CloudinaryEditIntegrationDef (line 3876) | class CloudinaryEditIntegrationDef(BaseCloudinaryIntegrationDef):
  class CloudinaryEditIntegrationDefUpdate (line 3888) | class CloudinaryEditIntegrationDefUpdate(BaseCloudinaryIntegrationDefUpd...
  class CloudinaryUploadIntegrationDef (line 3900) | class CloudinaryUploadIntegrationDef(BaseCloudinaryIntegrationDef):
  class CloudinaryUploadIntegrationDefUpdate (line 3912) | class CloudinaryUploadIntegrationDefUpdate(BaseCloudinaryIntegrationDefU...

FILE: src/integrations-service/integrations/autogen/Users.py
  class CreateUserRequest (line 12) | class CreateUserRequest(BaseModel):
  class PatchUserRequest (line 44) | class PatchUserRequest(BaseModel):
  class UpdateUserRequest (line 76) | class UpdateUserRequest(BaseModel):
  class User (line 108) | class User(BaseModel):
  class CreateOrUpdateUserRequest (line 145) | class CreateOrUpdateUserRequest(CreateUserRequest):

FILE: src/integrations-service/integrations/models/algolia.py
  class AlgoliaSearchOutput (line 8) | class AlgoliaSearchOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/arxiv.py
  class ArxivSearchResult (line 6) | class ArxivSearchResult(BaseModel):
  class ArxivSearchOutput (line 23) | class ArxivSearchOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/base_models.py
  class BaseOutput (line 9) | class BaseOutput(BaseModel): ...
  class ProviderInfo (line 12) | class ProviderInfo(BaseModel):
  class BaseProviderMethod (line 19) | class BaseProviderMethod(BaseModel):
  class BaseProvider (line 26) | class BaseProvider(BaseModel):

FILE: src/integrations-service/integrations/models/brave.py
  class SearchResult (line 6) | class SearchResult(BaseModel):
  class BraveSearchOutput (line 12) | class BraveSearchOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/browserbase.py
  class BrowserbaseListSessionsOutput (line 10) | class BrowserbaseListSessionsOutput(BaseOutput):
  class BrowserbaseCreateSessionOutput (line 14) | class BrowserbaseCreateSessionOutput(BaseOutput):
  class BrowserbaseGetSessionOutput (line 45) | class BrowserbaseGetSessionOutput(BaseOutput):
  class BrowserbaseCompleteSessionOutput (line 75) | class BrowserbaseCompleteSessionOutput(BaseOutput):
  class BrowserbaseExtensionOutput (line 82) | class BrowserbaseExtensionOutput(BaseOutput):
  class PageInfo (line 86) | class PageInfo(BaseOutput):
  class BrowserbaseGetSessionLiveUrlsOutput (line 101) | class BrowserbaseGetSessionLiveUrlsOutput(BaseOutput):
  class BrowserbaseContextOutput (line 105) | class BrowserbaseContextOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/cloudinary.py
  class CloudinaryUploadOutput (line 6) | class CloudinaryUploadOutput(BaseOutput):
  class CloudinaryEditOutput (line 19) | class CloudinaryEditOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/email.py
  class EmailOutput (line 6) | class EmailOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/execution.py
  class ExecutionError (line 82) | class ExecutionError(BaseModel):
  class ExecutionRequest (line 173) | class ExecutionRequest(BaseModel):

FILE: src/integrations-service/integrations/models/ffmpeg.py
  class FfmpegSearchOutput (line 6) | class FfmpegSearchOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/google_sheets.py
  class GoogleSheetsReadOutput (line 8) | class GoogleSheetsReadOutput(BaseOutput):
  class GoogleSheetsWriteOutput (line 18) | class GoogleSheetsWriteOutput(BaseOutput):
  class GoogleSheetsClearOutput (line 35) | class GoogleSheetsClearOutput(BaseOutput):
  class GoogleSheetsValueRangeOutput (line 44) | class GoogleSheetsValueRangeOutput(BaseOutput):
  class GoogleSheetsBatchReadOutput (line 54) | class GoogleSheetsBatchReadOutput(BaseOutput):
  class GoogleSheetsUpdateResponse (line 65) | class GoogleSheetsUpdateResponse(BaseOutput):
  class GoogleSheetsBatchWriteOutput (line 78) | class GoogleSheetsBatchWriteOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/llama_parse.py
  class LlamaParseFetchOutput (line 7) | class LlamaParseFetchOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/mailgun.py
  class MailgunSendEmailOutput (line 6) | class MailgunSendEmailOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/mcp.py
  class McpToolCallOutput (line 8) | class McpToolCallOutput(BaseOutput):
  class McpToolInfo (line 27) | class McpToolInfo(BaseOutput):
  class McpListToolsOutput (line 33) | class McpListToolsOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/remote_browser.py
  class RemoteBrowserOutput (line 6) | class RemoteBrowserOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/spider.py
  class SpiderResponse (line 8) | class SpiderResponse(BaseModel):
  class SpiderOutput (line 16) | class SpiderOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/unstructured.py
  class UnstructuredParseOutput (line 6) | class UnstructuredParseOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/weather.py
  class WeatherGetOutput (line 6) | class WeatherGetOutput(BaseOutput):

FILE: src/integrations-service/integrations/models/wikipedia.py
  class WikipediaSearchOutput (line 7) | class WikipediaSearchOutput(BaseOutput):

FILE: src/integrations-service/integrations/routers/execution/execute.py
  function execute_default (line 10) | async def execute_default(
  function execute (line 25) | async def execute(

FILE: src/integrations-service/integrations/routers/integrations/get_integration.py
  function get_integration (line 9) | async def get_integration(provider: str) -> dict:

FILE: src/integrations-service/integrations/routers/integrations/get_integration_tool.py
  function convert_to_openai_tool (line 7) | def convert_to_openai_tool(
  function get_integration_tool (line 28) | async def get_integration_tool(provider: str, method: str | None = None):

FILE: src/integrations-service/integrations/routers/integrations/get_integrations.py
  function get_integrations (line 6) | async def get_integrations() -> list[dict]:

FILE: src/integrations-service/integrations/utils/execute_integration.py
  function execute_integration (line 17) | async def execute_integration(

FILE: src/integrations-service/integrations/utils/integrations/algolia.py
  function search (line 17) | async def search(setup: AlgoliaSetup, arguments: AlgoliaSearchArguments)...

FILE: src/integrations-service/integrations/utils/integrations/arxiv.py
  function search (line 18) | async def search(arguments: ArxivSearchArguments) -> ArxivSearchOutput:

FILE: src/integrations-service/integrations/utils/integrations/brave.py
  function search (line 17) | async def search(setup: BraveSearchSetup, arguments: BraveSearchArgument...

FILE: src/integrations-service/integrations/utils/integrations/browserbase.py
  function get_browserbase_client (line 34) | def get_browserbase_client(setup: BrowserbaseSetup) -> Browserbase:
  function list_sessions (line 46) | async def list_sessions(
  function create_session (line 71) | async def create_session(
  function get_session (line 117) | async def get_session(
  function complete_session (line 148) | async def complete_session(
  function get_live_urls (line 173) | async def get_live_urls(
  function install_extension_from_github (line 194) | async def install_extension_from_github(

FILE: src/integrations-service/integrations/utils/integrations/cloudinary.py
  function media_upload (line 24) | async def media_upload(
  function media_edit (line 92) | async def media_edit(

FILE: src/integrations-service/integrations/utils/integrations/email.py
  function send (line 19) | async def send(setup: EmailSetup, arguments: EmailArguments) -> EmailOut...

FILE: src/integrations-service/integrations/utils/integrations/ffmpeg.py
  function _sync_validate_format (line 17) | def _sync_validate_format(binary_prefix: bytes) -> tuple[bool, str]:
  function validate_format (line 48) | async def validate_format(binary_data: bytes) -> tuple[bool, str]:
  function bash_cmd (line 61) | async def bash_cmd(arguments: FfmpegSearchArguments) -> FfmpegSearchOutput:

FILE: src/integrations-service/integrations/utils/integrations/google_sheets.py
  function get_sheets_service (line 31) | def get_sheets_service(setup: GoogleSheetsSetup):
  function read_values (line 92) | async def read_values(
  function write_values (line 144) | async def write_values(
  function append_values (line 205) | async def append_values(
  function clear_values (line 268) | async def clear_values(
  function batch_read (line 313) | async def batch_read(
  function batch_write (line 369) | async def batch_write(

FILE: src/integrations-service/integrations/utils/integrations/llama_parse.py
  function parse (line 18) | async def parse(

FILE: src/integrations-service/integrations/utils/integrations/mailgun.py
  function validate_email (line 11) | def validate_email(email: str) -> bool:
  function validate_email_list (line 19) | def validate_email_list(emails: str) -> bool:
  function send_email (line 39) | async def send_email(

FILE: src/integrations-service/integrations/utils/integrations/mcp.py
  function _ensure_mcp_available (line 40) | def _ensure_mcp_available() -> None:
  function _connect_session (line 81) | async def _connect_session(setup: McpSetup):
  function _serialize_content_item (line 178) | def _serialize_content_item(item: Any) -> dict[str, Any]:
  function list_tools (line 205) | async def list_tools(setup: McpSetup, arguments: McpListToolsArguments) ...
  function call_tool (line 254) | async def call_tool(setup: McpSetup, arguments: McpCallToolArguments) ->...

FILE: src/integrations-service/integrations/utils/integrations/remote_browser.py
  class PlaywrightActions (line 27) | class PlaywrightActions:
    method __init__ (line 38) | def __init__(
    method _is_initialized (line 51) | async def _is_initialized(self) -> bool:
    method initialize (line 59) | async def initialize(self, debug: bool = False) -> None:
    method _reset_mouse (line 99) | async def _reset_mouse(self) -> None:
    method _get_screen_size (line 129) | async def _get_screen_size(self) -> tuple[int, int]:
    method _set_screen_size (line 138) | async def _set_screen_size(self, width: int, height: int) -> None:
    method _wait_for_load (line 143) | async def _wait_for_load(self, event: str = "domcontentloaded", timeou...
    method _execute_javascript (line 147) | async def _execute_javascript(self, script: str, *args) -> Any:
    method _set_window_vars (line 151) | async def _set_window_vars(self, variables: dict[str, Any]) -> None:
    method _get_mouse_coordinates (line 162) | async def _get_mouse_coordinates(self) -> tuple[int, int]:
    method _get_element_coordinates (line 170) | async def _get_element_coordinates(self, selector: str) -> tuple[int, ...
    method _overlay_cursor (line 179) | def _overlay_cursor(self, screenshot_bytes: bytes, x: int, y: int) -> ...
    method navigate (line 201) | async def navigate(self, url: str) -> RemoteBrowserOutput:
    method refresh (line 210) | async def refresh(self) -> RemoteBrowserOutput:
    method cursor_position (line 219) | async def cursor_position(self) -> RemoteBrowserOutput:
    method press_key (line 226) | async def press_key(self, key_combination: str) -> RemoteBrowserOutput:
    method type_text (line 256) | async def type_text(self, text: str) -> RemoteBrowserOutput:
    method mouse_move (line 264) | async def mouse_move(self, coordinate: tuple[int, int]) -> RemoteBrows...
    method left_click (line 272) | async def left_click(self) -> RemoteBrowserOutput:
    method left_click_drag (line 281) | async def left_click_drag(self, coordinate: tuple[int, int]) -> Remote...
    method right_click (line 291) | async def right_click(self) -> RemoteBrowserOutput:
    method middle_click (line 300) | async def middle_click(self) -> RemoteBrowserOutput:
    method double_click (line 309) | async def double_click(self) -> RemoteBrowserOutput:
    method take_screenshot (line 318) | async def take_screenshot(self, filename: str | None = None) -> Remote...
    method perform_action (line 339) | async def perform_action(
  function perform_action (line 382) | async def perform_action(

FILE: src/integrations-service/integrations/utils/integrations/spider.py
  function create_spider_response (line 10) | def create_spider_response(pages: list[dict]) -> list[SpiderResponse]:
  function execute_spider_method (line 24) | async def execute_spider_method(
  function crawl (line 63) | async def crawl(setup: SpiderSetup, arguments: SpiderFetchArguments) -> ...
  function links (line 76) | async def links(setup: SpiderSetup, arguments: SpiderFetchArguments) -> ...
  function screenshot (line 89) | async def screenshot(setup: SpiderSetup, arguments: SpiderFetchArguments...
  function search (line 102) | async def search(setup: SpiderSetup, arguments: SpiderFetchArguments) ->...

FILE: src/integrations-service/integrations/utils/integrations/unstructured.py
  function to_unstructured_strategy (line 14) | def to_unstructured_strategy(
  function parse (line 59) | async def parse(

FILE: src/integrations-service/integrations/utils/integrations/weather.py
  function get (line 15) | async def get(setup: WeatherSetup, arguments: WeatherGetArguments) -> We...

FILE: src/integrations-service/integrations/utils/integrations/wikipedia.py
  function search (line 15) | async def search(

FILE: src/integrations-service/integrations/web.py
  function make_exception_handler (line 48) | def make_exception_handler(status: int) -> Callable[[Any, Any], Any]:
  function register_exceptions (line 68) | def register_exceptions(app: FastAPI) -> None:
  function http_exception_handler (line 82) | async def http_exception_handler(request, exc: HTTPException):  # pylint...
  function main (line 89) | def main(

FILE: src/integrations-service/tests/conftest.py
  function mock_external_services (line 15) | def mock_external_services():
  function providers (line 29) | def providers():
  function wikipedia_provider (line 35) | def wikipedia_provider():
  function weather_provider (line 41) | def weather_provider():
  function spider_provider (line 47) | def spider_provider():
  function brave_provider (line 53) | def brave_provider():
  function email_provider (line 59) | def email_provider():
  function llama_parse_provider (line 65) | def llama_parse_provider():

FILE: src/integrations-service/tests/mocks/brave.py
  class MockBraveSearchClient (line 4) | class MockBraveSearchClient:
    method __init__ (line 5) | def __init__(self, api_key: str):
    method search (line 8) | def search(self, query: str) -> str:
  class MockBraveSearchException (line 13) | class MockBraveSearchException(Exception):

FILE: src/integrations-service/tests/mocks/email.py
  class MockEmailClient (line 4) | class MockEmailClient:
    method __init__ (line 5) | def __init__(self, host: str, port: int, user: str, password: str):
    method send (line 11) | def send(self, to: str, from_: str, subject: str, body: str) -> bool:
  class MockEmailException (line 16) | class MockEmailException(Exception):

FILE: src/integrations-service/tests/mocks/llama_parse.py
  class MockLlamaParseClient (line 6) | class MockLlamaParseClient:
    method __init__ (line 7) | def __init__(self, api_key: str, result_type: str, num_workers: int, l...
    method aload_data (line 13) | async def aload_data(self, file_content: bytes, extra_info: dict) -> l...
  class MockLlamaParseException (line 21) | class MockLlamaParseException(Exception):

FILE: src/integrations-service/tests/mocks/spider.py
  class MockSpiderClient (line 7) | class MockSpiderClient:
    method __init__ (line 8) | def __init__(self, api_key: str):
    method crawl (line 11) | def crawl(self, url: AnyUrl, mode: str = "scrape") -> list[Document]:
  class MockSpiderException (line 19) | class MockSpiderException(Exception):

FILE: src/integrations-service/tests/mocks/weather.py
  class MockWeatherClient (line 4) | class MockWeatherClient:
    method __init__ (line 5) | def __init__(self, api_key: str):
    method get_weather (line 8) | def get_weather(self, location: str) -> str:
  class MockWeatherException (line 13) | class MockWeatherException(Exception):

FILE: src/integrations-service/tests/mocks/wikipedia.py
  class MockWikipediaClient (line 6) | class MockWikipediaClient:
    method __init__ (line 7) | def __init__(self, query: str, load_max_docs: int = 2):
    method load (line 17) | def load(self, *args, **kwargs) -> list[Document]:
  class MockWikipediaException (line 21) | class MockWikipediaException(Exception):

FILE: src/integrations-service/tests/test_mcp.py
  function test_mcp_provider_in_registry (line 12) | async def test_mcp_provider_in_registry():
  function test_mcp_list_tools_exec (line 21) | async def test_mcp_list_tools_exec(monkeypatch):
  function test_mcp_call_tool_exec (line 68) | async def test_mcp_call_tool_exec(monkeypatch):
  function test_http_session_management (line 117) | async def test_http_session_management(mock_client):
  function test_http_connection_retry_logic (line 161) | async def test_http_connection_retry_logic(mock_client, mock_session_cls):
  function test_mcp_sdk_version_check (line 196) | def test_mcp_sdk_version_check():
  function test_mcp_setup_transport_validation (line 211) | def test_mcp_setup_transport_validation(transport):
  function test_mcp_setup_invalid_transport (line 223) | def test_mcp_setup_invalid_transport():
  function test_mcp_tool_response_normalization (line 236) | async def test_mcp_tool_response_normalization():
  function test_mcp_list_tools_integration (line 279) | async def test_mcp_list_tools_integration():
  function test_mcp_timeout_handling (line 319) | async def test_mcp_timeout_handling():
  function test_mcp_sse_transport_connection (line 359) | async def test_mcp_sse_transport_connection():
  function test_mcp_sse_connection_error_handling (line 401) | async def test_mcp_sse_connection_error_handling():

FILE: src/integrations-service/tests/test_mcp_sse_server.py
  function lifespan (line 31) | async def lifespan(app: FastAPI):
  function sse_generator (line 53) | async def sse_generator(request: Request) -> AsyncIterator[dict]:
  function sse_endpoint (line 84) | async def sse_endpoint(request: Request):
  function message_endpoint (line 91) | async def message_endpoint(session_id: str, request: Request):
  function health (line 190) | async def health():

FILE: src/integrations-service/tests/test_provider_execution.py
  function test_weather_get_mock (line 11) | async def test_weather_get_mock(wikipedia_provider):

FILE: src/integrations-service/tests/test_providers.py
  function test_available_providers (line 4) | def test_available_providers(providers):
  function test_provider_structure (line 11) | def test_provider_structure(providers):
  function test_wikipedia_provider (line 20) | def test_wikipedia_provider(wikipedia_provider):
  function test_weather_provider (line 28) | def test_weather_provider(weather_provider):
  function test_llama_parse_provider (line 36) | def test_llama_parse_provider(llama_parse_provider):

FILE: src/integrations-service/tests/working_mcp_sse_server.py
  function list_tools (line 32) | async def list_tools() -> list[Tool]:
  function call_tool (line 100) | async def call_tool(name: str, arguments: dict[str, Any]) -> list:
  function main (line 150) | async def main():

FILE: src/memory-store/migrations/000001_initial.up.sql
  function update_updated_at_column (line 25) | CREATE

FILE: src/memory-store/migrations/000002_developers.up.sql
  type developers (line 4) | CREATE TABLE IF NOT EXISTS developers (
  type idx_developers_id_sorted (line 20) | CREATE INDEX IF NOT EXISTS idx_developers_id_sorted ON developers (devel...
  type idx_developers_email (line 32) | CREATE INDEX IF NOT EXISTS idx_developers_email ON developers (email)
  type idx_developers_tags (line 35) | CREATE INDEX IF NOT EXISTS idx_developers_tags ON developers USING GIN (...

FILE: src/memory-store/migrations/000003_users.up.sql
  type users (line 4) | CREATE TABLE IF NOT EXISTS users (
  type users_metadata_gin_idx (line 28) | CREATE INDEX IF NOT EXISTS users_metadata_gin_idx ON users USING GIN (me...

FILE: src/memory-store/migrations/000004_agents.up.sql
  type agents (line 4) | CREATE TABLE IF NOT EXISTS agents (
  type idx_agents_metadata (line 38) | CREATE INDEX IF NOT EXISTS idx_agents_metadata ON agents USING GIN (meta...

FILE: src/memory-store/migrations/000005_files.up.sql
  type files (line 4) | CREATE TABLE IF NOT EXISTS files (
  type file_owners (line 47) | CREATE TABLE IF NOT EXISTS file_owners (
  type idx_file_owners_owner (line 58) | CREATE INDEX IF NOT EXISTS idx_file_owners_owner ON file_owners (develop...
  function validate_file_owner (line 61) | CREATE OR REPLACE FUNCTION validate_file_owner()

FILE: src/memory-store/migrations/000006_docs.up.sql
  function is_valid_language (line 4) | CREATE
  type docs (line 14) | CREATE TABLE IF NOT EXISTS docs (
  type idx_docs_metadata (line 107) | CREATE INDEX IF NOT EXISTS idx_docs_metadata ON docs USING GIN (metadata)
  function docs_update_search_tsv (line 161) | CREATE
  type idx_docs_search_tsv (line 186) | CREATE INDEX IF NOT EXISTS idx_docs_search_tsv ON docs USING GIN (search...
  type idx_docs_title_trgm (line 188) | CREATE INDEX IF NOT EXISTS idx_docs_title_trgm ON docs USING GIN (title ...
  type idx_docs_content_trgm (line 190) | CREATE INDEX IF NOT EXISTS idx_docs_content_trgm ON docs USING GIN (cont...

FILE: src/memory-store/migrations/000008_tools.up.sql
  type tools (line 4) | CREATE TABLE IF NOT EXISTS tools (
  type idx_tools_task_id_sorted (line 30) | CREATE INDEX IF NOT EXISTS idx_tools_task_id_sorted ON tools (task_id DESC)

FILE: src/memory-store/migrations/000009_sessions.up.sql
  type sessions (line 4) | CREATE TABLE IF NOT EXISTS sessions (
  type idx_sessions_metadata (line 36) | CREATE INDEX IF NOT EXISTS idx_sessions_metadata ON sessions USING GIN (...
  type session_lookup (line 73) | CREATE TABLE IF NOT EXISTS session_lookup (
  type idx_session_lookup_by_participant (line 87) | CREATE INDEX IF NOT EXISTS idx_session_lookup_by_participant ON session_...
  function validate_participant (line 90) | CREATE

FILE: src/memory-store/migrations/000010_tasks.up.sql
  type tasks (line 10) | CREATE TABLE IF NOT EXISTS tasks (
  function validate_tool_task (line 66) | CREATE OR REPLACE FUNCTION validate_tool_task()
  type workflows (line 106) | CREA
Copy disabled (too large) Download .json
Condensed preview — 984 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (14,310K chars).
[
  {
    "path": ".agentignore",
    "chars": 1899,
    "preview": "# Git\n.git/\n\n.codex/\n\n# Build and distribution directories\n**/dist/\n**/build/\n**/.ruff_cache/\n**/node_modules/\n**/__pyca"
  },
  {
    "path": ".codex/setup.sh",
    "chars": 3395,
    "preview": "#!/usr/bin/env bash\n#\n# setup-all.sh ─ one-shot bootstrap for the whole julep monorepo\n#\n# › run from repo root:  ./setu"
  },
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "chars": 3008,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 9849,
    "preview": "<div align=\"center\" id=\"top\">\n <img src=\"https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 742,
    "preview": "name: \"🐛 Bug Report\"\ndescription: \"Submit a bug report to help us improve\"\ntitle: \"[Bug]: \"\nlabels: [\"bug\"]\nbody:\n  - ty"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 154,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Have Question?\n    url: https://discord.com/invite/JTSBGRZrzj\n    a"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 1010,
    "preview": "name: 🚀 Feature\ndescription: \"Submit a proposal for a new feature\"\ntitle: \"[Feature]: \"\nlabels: [\"enhancement\"]\nbody:\n  "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/refactor.yml",
    "chars": 508,
    "preview": "name: \"🛠️ Refactor\"\ndescription: \"Submit a bug report to help us improve\"\ntitle: \"[Refactor]: \"\nlabels: [\"refactor\"]\nbod"
  },
  {
    "path": ".github/LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": ".github/README-CN.md",
    "chars": 8177,
    "preview": "<sup><div align=\"center\">\n  <!-- Keep these links. Translations will automatically update with the README. -->\n  [Deutsc"
  },
  {
    "path": ".github/README-FR.md",
    "chars": 13271,
    "preview": "<sup><div align=\"center\">\n  <!-- Keep these links. Translations will automatically update with the README. -->\n  [Deutsc"
  },
  {
    "path": ".github/README-JA.md",
    "chars": 9206,
    "preview": "<sup><div align=\"center\">\n  <!-- Keep these links. Translations will automatically update with the README. -->\n  [Deutsc"
  },
  {
    "path": ".github/SUPPORT.md",
    "chars": 2234,
    "preview": "# Support for Julep\n\nWelcome to the Julep support page! We're here to help you with any questions or issues you may enco"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 522,
    "preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
  },
  {
    "path": ".github/workflows/bake-push-to-hub.yml",
    "chars": 1073,
    "preview": "name: Build and push images to docker hub on merge to dev\nrun-name: ${{ github.actor }} is building and pushing images t"
  },
  {
    "path": ".github/workflows/bandit-security-check-python-agents-api.yml",
    "chars": 600,
    "preview": "name: Bandit security check python agents-api\nrun-name: ${{ github.actor }} is checking the security of the code\n\non:\n  "
  },
  {
    "path": ".github/workflows/changelog-ci.yml",
    "chars": 482,
    "preview": "name: Changelog on release\n\non:\n  release:\n    types: [published]\n\njobs:\n  changelog:\n    runs-on: ubuntu-latest\n\n    st"
  },
  {
    "path": ".github/workflows/changelog-sync.yml",
    "chars": 2808,
    "preview": "name: Sync changelog with Blot\n\non:\n  pull_request:\n    types: [opened, synchronize, reopened]\n    paths: [\"changelog/**"
  },
  {
    "path": ".github/workflows/claude-changelog-pr.yml",
    "chars": 3328,
    "preview": "name: Claude Changelog (PR)\n\non:\n  pull_request:\n    branches: [main, dev]\n    types: [opened, synchronize, reopened]\n  "
  },
  {
    "path": ".github/workflows/claude-code-review.yml",
    "chars": 2678,
    "preview": "name: Claude Code Review\n\non:\n  pull_request:\n    types: [opened, synchronize]\n    # Optional: Only run on specific file"
  },
  {
    "path": ".github/workflows/claude-docs-manual.yml",
    "chars": 3410,
    "preview": "name: Claude Docs (Manual)\n\non:\n  workflow_dispatch:\n    inputs:\n      pr_number:\n        description: \"PR number\"\n     "
  },
  {
    "path": ".github/workflows/claude-docs-pr.yml",
    "chars": 4205,
    "preview": "name: Claude Docs (PR)\n\non:\n  pull_request:\n    branches: [main]\n    types: [opened, synchronize, reopened]\n    paths-ig"
  },
  {
    "path": ".github/workflows/claude.yml",
    "chars": 2310,
    "preview": "name: Claude Code\n\non:\n  issue_comment:\n    types: [created]\n  pull_request_review_comment:\n    types: [created]\n  issue"
  },
  {
    "path": ".github/workflows/docker-bake-on-pr.yml",
    "chars": 960,
    "preview": "name: Bake images on PR\nrun-name: ${{ github.actor }} is baking images\n\non:\n  pull_request:\n\njobs:\n  Bake-Images:\n    ru"
  },
  {
    "path": ".github/workflows/doctoc-on-push.yml",
    "chars": 400,
    "preview": "on: push\n\nname: TOC Generator\njobs:\n  generateTOC:\n    name: TOC Generator\n    runs-on: ubuntu-latest\n    steps:\n      -"
  },
  {
    "path": ".github/workflows/generate-changelog.yml",
    "chars": 2455,
    "preview": "name: Julep Changelog Generation\nrun-name: ${{ github.actor }} is generating changelog for the last two weeks using Jule"
  },
  {
    "path": ".github/workflows/generate-openapi-code-from-typespec.yml",
    "chars": 976,
    "preview": "name: Generate OpenAPI code\nrun-name: ${{ github.actor }} is generating openapi code\n\non:\n  pull_request:\n    paths:\n   "
  },
  {
    "path": ".github/workflows/latest-push-to-hub.yml",
    "chars": 1008,
    "preview": "name: Build and push images to docker hub on merge to main\nrun-name: ${{ github.actor }} is building and pushing images "
  },
  {
    "path": ".github/workflows/lint-agents-api-pr.yml",
    "chars": 1230,
    "preview": "name: Lint agents-api\nrun-name: ${{ github.actor }} is linting the code\n\non:\n  pull_request:\n    paths:\n      - 'src/age"
  },
  {
    "path": ".github/workflows/lint-integrations-service-pr.yml",
    "chars": 1027,
    "preview": "name: Lint integrations-service\nrun-name: ${{ github.actor }} is linting the code\n\non:\n  pull_request:\n    paths:\n      "
  },
  {
    "path": ".github/workflows/publish-cli-prerelease.yml",
    "chars": 5214,
    "preview": "name: Publish CLI Prerelease to PyPI\n\n# AIDEV-NOTE: Auto-publish CLI package to PyPI for prerelease versions only\npermis"
  },
  {
    "path": ".github/workflows/sync-model-docs.yml",
    "chars": 1377,
    "preview": "name: Sync Model Documentation\n\non:\n  push:\n    branches:\n      - dev\n    paths:\n      - 'src/llm-proxy/litellm-config.y"
  },
  {
    "path": ".github/workflows/test-agents-api-pr.yml",
    "chars": 1102,
    "preview": "name: Test agents-api\nrun-name: ${{ github.actor }} is testing the code\n\non:\n  pull_request:\n    paths:\n      - 'src/age"
  },
  {
    "path": ".github/workflows/test-integrations-service-pr.yml",
    "chars": 742,
    "preview": "name: Test integrations-service\nrun-name: ${{ github.actor }} is testing the code\n\non:\n  pull_request:\n    paths:\n      "
  },
  {
    "path": ".github/workflows/translate-readme.yml",
    "chars": 1244,
    "preview": "name: Translate README\non:\n  pull_request:\n    paths:\n      - \"README.md\"\n      - \".github/README-*.md\"\n\njobs:\n  transla"
  },
  {
    "path": ".github/workflows/typecheck-agents-api-pr.yml",
    "chars": 1305,
    "preview": "name: Typecheck agents-api\nrun-name: ${{ github.actor }} is typechecking the code\n\non:\n  pull_request:\n    paths:\n      "
  },
  {
    "path": ".gitignore",
    "chars": 186,
    "preview": "# BECAUSE DIWANK IS OBSESSED\n*gaga*\n.DS_Store\n*.swp\nngrok*\n.env*\n.env\n*.env\n*.pyc\n**/node_modules/\n.aider*\n.vscode/\nsche"
  },
  {
    "path": ".gitmodules",
    "chars": 389,
    "preview": "# [submodule \"code-interpreter/vendor/cohere-ai/cohere-terrarium\"]\n# \tpath = code-interpreter/vendor/cohere-ai/cohere-te"
  },
  {
    "path": ".mcp.json",
    "chars": 491,
    "preview": "{\n  \"mcpServers\": {\n    \"deepwiki\": {\n      \"type\": \"http\",\n      \"url\": \"https://mcp.deepwiki.com/mcp\"\n    },\n    \"line"
  },
  {
    "path": "AGENTS.md",
    "chars": 18995,
    "preview": "# AGENTS.md. Julep AI  \n*Last updated 2025-05-09*  \n\n> **purpose** – This file is the onboarding manual for every AI ass"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 7830,
    "preview": "<div align=\"center\" id=\"top\">\n<img src=\"https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable="
  },
  {
    "path": "README.md",
    "chars": 10386,
    "preview": "<sup><div align=\"center\">\n  <!-- Keep these links. Translations will automatically update with the README. -->\n  [Deutsc"
  },
  {
    "path": "changelog/Templates/JulepCustom/entries.html",
    "chars": 377,
    "preview": "{{> head}}\n{{> header}}\n\n<main class=\"container entries-list\">\n  {{#entries}}\n    <article class=\"entry-list-item\">\n    "
  },
  {
    "path": "changelog/Templates/JulepCustom/entry.html",
    "chars": 277,
    "preview": "{{> head}}\n{{> header}}\n\n<main class=\"container entry-page\">\n  <article>\n    <h1 class=\"entry-title\">{{title}}</h1>\n    "
  },
  {
    "path": "changelog/Templates/JulepCustom/footer.html",
    "chars": 148,
    "preview": "    <footer class=\"site-footer\">\n      <div class=\"container\">\n        <p>&copy; {{year}} Julep AI</p>\n      </div>\n    "
  },
  {
    "path": "changelog/Templates/JulepCustom/head.html",
    "chars": 257,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-wid"
  },
  {
    "path": "changelog/Templates/JulepCustom/header.html",
    "chars": 327,
    "preview": "  <body>\n    <header class=\"site-header\">\n      <div class=\"container\">\n        <h1 class=\"logo\"><a href=\"/\">{{site.titl"
  },
  {
    "path": "changelog/Templates/JulepCustom/package.json",
    "chars": 213,
    "preview": "{\n  \"name\": \"JulepCustom\",\n  \"author\": \"Julep AI\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Custom minimal template with "
  },
  {
    "path": "changelog/Templates/JulepCustom/style.css",
    "chars": 2186,
    "preview": "/* ──────────────────────────────────────────────────────────\n   Julep Custom Template – CSS\n   Simple, responsive, dark"
  },
  {
    "path": "changelog/Templates/index-template/archives.html",
    "chars": 484,
    "preview": "<!DOCTYPE html>\n<html>\n  {{> head}}\n  <body>\n\n    {{> header}}\n\n    <h1>Archives</h1>\n\n    {{#archives}}\n      {{#months"
  },
  {
    "path": "changelog/Templates/index-template/entries.html",
    "chars": 1107,
    "preview": "<!DOCTYPE html>\n<html>\n  {{> head}}\n  <body>\n\n    {{> header}}\n\n    {{^pagination.previous}}\n      {{> home-summary}}\n  "
  },
  {
    "path": "changelog/Templates/index-template/entry.html",
    "chars": 1117,
    "preview": "<!DOCTYPE html>\n<html>\n  {{> head}}\n  <body>\n    {{> header}}\n\n    {{#entry}}\n    <div class=\"entry\">\n\n      {{#tags.len"
  },
  {
    "path": "changelog/Templates/index-template/error.html",
    "chars": 156,
    "preview": "<!DOCTYPE html>\n<html>\n  {{> head}}\n  <body>\n    {{> header}}\n\n    <h1>{{error.title}}</h1>\n    <p>{{error.message}}</p>"
  },
  {
    "path": "changelog/Templates/index-template/feed.rss",
    "chars": 900,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:content=\"http://purl.org/r"
  },
  {
    "path": "changelog/Templates/index-template/footer.html",
    "chars": 218,
    "preview": "<footer class=\"site-footer\">\n  <div class=\"container\">\n    <small>© {{year}} Julep AI · <a href=\"https://julep.ai\">julep"
  },
  {
    "path": "changelog/Templates/index-template/head.html",
    "chars": 438,
    "preview": "<head>\n  <meta charset=\"utf-8\">\n  <title>{{> title}}</title>\n  <meta name=\"description\" content=\"{{> description}}\">\n  <"
  },
  {
    "path": "changelog/Templates/index-template/header.html",
    "chars": 685,
    "preview": "<a href=\"/\" id=\"logo\">\n  {{#avatar}}\n  <img src=\"{{{avatar_url}}}\" class=\"{{#roundAvatar}}rounded{{/roundAvatar}}\" alt=\""
  },
  {
    "path": "changelog/Templates/index-template/home-summary.html",
    "chars": 685,
    "preview": "<h1 style=\"font-size:2.5em;\">✨ Latest Highlights</h1>\n<small style=\"display:block;margin-top:-0.5em;margin-bottom:0.5em;"
  },
  {
    "path": "changelog/Templates/index-template/package.json",
    "chars": 1260,
    "preview": "{\n  \"name\": \"Index\",\n  \"locals\": {\n    \"page_size\": 20\n  },\n  \"views\": {\n    \"search.html\": {\n      \"partials\": {\n      "
  },
  {
    "path": "changelog/Templates/index-template/public.html",
    "chars": 401,
    "preview": "<!DOCTYPE html>\n<html>\n  {{> head}}\n  <body>\n    <style>\n      body {margin: 2em;}\n      td, tr {border:none;}\n    </sty"
  },
  {
    "path": "changelog/Templates/index-template/robots.txt",
    "chars": 57,
    "preview": "User-agent: *\nAllow: /\nSitemap: {{{blogURL}}}/sitemap.xml"
  },
  {
    "path": "changelog/Templates/index-template/script.js",
    "chars": 67,
    "preview": "{{{appJS}}}\n\n// This script is embedded in the footer of every page"
  },
  {
    "path": "changelog/Templates/index-template/search.html",
    "chars": 601,
    "preview": "<!DOCTYPE html>\n<html>\n  {{> head}}\n  <body>\n    {{> header}}\n\n    <form action='/search'>\n      <input name=\"q\" type=\"t"
  },
  {
    "path": "changelog/Templates/index-template/sitemap.xml",
    "chars": 412,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"> \n  <url>\n    <loc>{{"
  },
  {
    "path": "changelog/Templates/index-template/style.css",
    "chars": 9993,
    "preview": "/* This template tag is replaced by CSS when this file is rendered */\n{{{appCSS}}}\n\nbody {\n  font: 1.125rem / 1.4 -apple"
  },
  {
    "path": "changelog/Templates/index-template/tagged.html",
    "chars": 419,
    "preview": "<!DOCTYPE html>\n<html>\n  {{> head}}\n  <body>\n    {{> header}}\n\n    <h1>{{tag}}</h1>\n\n    <hr class=\"full\">\n\n    <small s"
  },
  {
    "path": "changelog/dev/2025-06-17.md",
    "chars": 512,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-06-17\ntags: [dev]\n---\n\n- Added automated Claude-driven documentation update w"
  },
  {
    "path": "changelog/dev/2025-06-23.md",
    "chars": 494,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-06-23\ntags: [dev]\n---\n\n## Development Updates\n\n- Added automated Claude-drive"
  },
  {
    "path": "changelog/dev/2025-06-25.md",
    "chars": 213,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-06-25\ntags: [dev]\n---\n\n## Julep AI Changelog - June 25, 2025\n\n- Extended `inc"
  },
  {
    "path": "changelog/dev/2025-06-26.md",
    "chars": 344,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-06-26\ntags: [dev]\n---\n\n## Julep AI Changelog - June 26, 2025\n\n- Added `includ"
  },
  {
    "path": "changelog/dev/2025-06-30.md",
    "chars": 1011,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-06-30\ntags: [dev]\n---\n\n## Julep AI Changelog - June 30, 2025\n\n### Tool Callin"
  },
  {
    "path": "changelog/dev/2025-07-02.md",
    "chars": 815,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-02\ntags: [dev]\n---\n\n## Julep AI Changelog - July 2, 2025\n\n### Tool Calling"
  },
  {
    "path": "changelog/dev/2025-07-03.md",
    "chars": 894,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-03\ntags: [dev]\n---\n\n## Julep AI Changelog - July 3, 2025\n\n### Chat API Enh"
  },
  {
    "path": "changelog/dev/2025-07-04.md",
    "chars": 362,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-04\ntags: [dev]\n---\n\n## Julep AI Changelog - July 4, 2025\n\n### Chat API Enh"
  },
  {
    "path": "changelog/dev/2025-07-05.md",
    "chars": 485,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-05\ntags: [dev]\n---\n\n## Julep AI Changelog - July 5, 2025\n\n### Documentatio"
  },
  {
    "path": "changelog/dev/2025-07-08.md",
    "chars": 233,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-08\ntags: [dev]\n---\n\n## Julep AI Changelog - July 8, 2025\n\n### Model Additi"
  },
  {
    "path": "changelog/dev/2025-07-09.md",
    "chars": 669,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-09\ntags: [dev]\n---\n\n## Julep AI Changelog - July 9, 2025\n\n### Features\n- E"
  },
  {
    "path": "changelog/dev/2025-07-18.md",
    "chars": 231,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-18\ntags: [dev]\n---\n\n## Julep AI Changelog - July 18, 2025\n\n### Documentati"
  },
  {
    "path": "changelog/dev/2025-07-31.md",
    "chars": 220,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-31\ntags: [dev]\n---\n\n- Added secrets support to task definitions for secure"
  },
  {
    "path": "changelog/dev/2025-08-06.md",
    "chars": 135,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-08-06\ntags: [dev]\n---\n\n- Added gemini-2.5-pro-preview-06-05 model to LLM prox"
  },
  {
    "path": "changelog/dev/2025-08-07.md",
    "chars": 394,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-08-07\ntags: [dev]\n---\n\n- Added Llama model cost multiplier with LLAMA_MODEL_M"
  },
  {
    "path": "changelog/dev/2025-08-08.md",
    "chars": 434,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-08-08\ntags: [dev]\n---\n\n- Migrated Anthropic models from direct API to AWS Bed"
  },
  {
    "path": "changelog/dev/2025-08-15.md",
    "chars": 329,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-08-15\ntags: [dev]\n---\n\n- Added support for GPT-5 model family with 8 variants"
  },
  {
    "path": "changelog/stable (main)/2025-01-31.md",
    "chars": 890,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-01-31\ntags: [main]\n---\n\n- **Major Feature**: Added experimental CLI with comp"
  },
  {
    "path": "changelog/stable (main)/2025-02-14.md",
    "chars": 1042,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-02-14\ntags: [main]\n---\n\n- **Major Feature**: Default `parallelism` in MapRedu"
  },
  {
    "path": "changelog/stable (main)/2025-04-11.md",
    "chars": 946,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-04-11\ntags: [main]\n---\n\n- **Major Feature**: Introduced support for Gemini mo"
  },
  {
    "path": "changelog/stable (main)/2025-05-09.md",
    "chars": 222,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-05-09\ntags: [main]\n---\n\n- **Minor Docs**: Added links to cookbooks for Quick,"
  },
  {
    "path": "changelog/stable (main)/2025-05-21.md",
    "chars": 2367,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-05-21\ntags: [main]\n---\n\n<!-- ───────────  Core platform improvements merged f"
  },
  {
    "path": "changelog/stable (main)/2025-06-23.md",
    "chars": 2033,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-06-23\ntags: [main]\n---\n\n<!-- ───────────  Major Features & Enhancements  ────"
  },
  {
    "path": "changelog/stable (main)/2025-06-30.md",
    "chars": 430,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-06-30\ntags: [main]\n---\n\n# Changes for June 30, 2025\n\n- Added IDE Integration "
  },
  {
    "path": "changelog/stable (main)/2025-07-04.md",
    "chars": 948,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-04\ntags: [main]\n---\n\n# Changes for July 4, 2025\n\n- Added automatic tool ex"
  },
  {
    "path": "changelog/stable (main)/2025-07-05.md",
    "chars": 879,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-05\ntags: [main]\n---\n\n# Changes for July 5, 2025\n\n- Added feature flags inf"
  },
  {
    "path": "changelog/stable (main)/2025-07-08.md",
    "chars": 551,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-08\ntags: [main]\n---\n\n# Changes for July 8, 2025\n\n- Added gemini-2.5-pro mo"
  },
  {
    "path": "changelog/stable (main)/2025-07-18.md",
    "chars": 671,
    "preview": "---\ntitle: \"Julep AI Changelog\"\ndate: 2025-07-18\ntags: [main]\n---\n\n## Julep AI Changelog - July 18, 2025\n\n### Features\n-"
  },
  {
    "path": "cookbooks/IDEAS.md",
    "chars": 53113,
    "preview": "<div align=\"center\" id=\"top\">\n<img src=\"https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable="
  },
  {
    "path": "cookbooks/README.md",
    "chars": 18430,
    "preview": "<div align=\"center\" id=\"top\">\n<img src=\"https://socialify.git.ci/julep-ai/julep/image?description=1&descriptionEditable="
  },
  {
    "path": "cookbooks/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "cookbooks/advanced/00-Devfest-Email-Assistant.ipynb",
    "chars": 14707,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Installing the Julep Client\"\n   ]\n "
  },
  {
    "path": "cookbooks/advanced/01-website-crawler.ipynb",
    "chars": 112364,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Installing the Julep Client\"\n   ]\n "
  },
  {
    "path": "cookbooks/advanced/02-sarcastic-news-headline-generator.ipynb",
    "chars": 17839,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Installing the Julep Client\"\n   ]\n "
  },
  {
    "path": "cookbooks/advanced/03-trip-planning-assistant.ipynb",
    "chars": 116557,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Installing the Julep Client\"\n   ]\n "
  },
  {
    "path": "cookbooks/advanced/04-hook-generator-trending-reels.ipynb",
    "chars": 2284918,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"<div align=\\\"center\\\" id=\\\"top\\\">\\n"
  },
  {
    "path": "cookbooks/advanced/05-video-processing-with-natural-language.ipynb",
    "chars": 19201,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Installing the Julep Client\"\n   ]\n "
  },
  {
    "path": "cookbooks/advanced/06-browser-use.ipynb",
    "chars": 19196,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Installing the Julep Client\"\n   ]\n "
  },
  {
    "path": "cookbooks/advanced/07-personalized-research-assistant.ipynb",
    "chars": 192362,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Installing the Julep Client\"\n   ]\n "
  },
  {
    "path": "cookbooks/advanced/08-rag-chatbot.ipynb",
    "chars": 541874,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"<div align=\\\"center\\\" id=\\\"top\\\">\\n"
  },
  {
    "path": "cookbooks/advanced/09-companion-agent.ipynb",
    "chars": 60152,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Installing the Julep Client\"\n   ]\n "
  },
  {
    "path": "cookbooks/advanced/10-reel-generator.ipynb",
    "chars": 4212905,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"<div align=\\\"center\\\" id=\\\"top\\\">\\n"
  },
  {
    "path": "cookbooks/advanced/11-hacker-news-personalized-generator.ipynb",
    "chars": 20836,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"<div align=\\\"center\\\" id=\\\"top\\\">\\n"
  },
  {
    "path": "cookbooks/basics/01-Hello-Agent.ipynb",
    "chars": 1356,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Hello Agent\\n\",\n    \"Create a bas"
  },
  {
    "path": "cookbooks/basics/02-Simple-Task.ipynb",
    "chars": 1372,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Simple Task\\n\",\n    \"Define a sim"
  },
  {
    "path": "cookbooks/basics/03-Adding-Tools.ipynb",
    "chars": 1100,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Adding Tools\\n\",\n    \"Attach a to"
  },
  {
    "path": "cookbooks/basics/04-Parallel-Steps.ipynb",
    "chars": 1116,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Parallel Steps\\n\",\n    \"Example o"
  },
  {
    "path": "cookbooks/basics/05-RAG-and-Docs.ipynb",
    "chars": 1179,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# RAG and Docs\\n\",\n    \"This notebo"
  },
  {
    "path": "deploy/responses-build-docker-compose.yaml",
    "chars": 204,
    "preview": "name: open-responses\n\ninclude:\n  - ../src/agents-api/docker-compose-api.yml\n  - ../memory-store/docker-compose.yml\n  - ."
  },
  {
    "path": "deploy/simple-docker-compose.yaml",
    "chars": 8722,
    "preview": "name: julep\n\nservices:\n  agents-api:\n    depends_on:\n      worker:\n        condition: service_started\n        required: "
  },
  {
    "path": "deploy/standalone-docker-compose.yaml",
    "chars": 3313,
    "preview": "# An open-source self-hosted version of the new [OpenAI Responses API](https://community.openai.com/t/introducing-the-re"
  },
  {
    "path": "docker-bake.hcl",
    "chars": 1554,
    "preview": "variable \"TAG\" {\n  default = \"...\"\n}\n\nvariable \"GIT_SHA\" {\n  default = \"...\"\n}\n\ngroup \"default\" {\n  targets = [\n    \"age"
  },
  {
    "path": "docker-compose.yml",
    "chars": 2322,
    "preview": "# TODO: Make docker compose setup production ready\n# SCRUM-30\n\nname: julep\n\ninclude:\n  - ./src/memory-store/docker-compo"
  },
  {
    "path": "documentation/AGENTS.md",
    "chars": 3932,
    "preview": "# AGENTS.md - documentation\n\nThis directory contains the project documentation, guides, cookbooks, and asset files.\n\nKey"
  },
  {
    "path": "documentation/FAQ.mdx",
    "chars": 31489,
    "preview": "---\ntitle: 'FAQ'\ndescription: 'Frequently Asked Questions about Julep Platform'\nicon: 'question'\n---\n\n# Julep Platform F"
  },
  {
    "path": "documentation/README.md",
    "chars": 516,
    "preview": "# Julep Mintlify Documentation\n\n## Development\n\nInstall the [Mintlify CLI](https://www.npmjs.com/package/mintlify) to pr"
  },
  {
    "path": "documentation/advanced/agentic-patterns.mdx",
    "chars": 9045,
    "preview": "---\ntitle: 'Agentic Patterns'\ndescription: 'Learn about common patterns and best practices for building Julep agents'\nic"
  },
  {
    "path": "documentation/advanced/architecture-deep-dive.mdx",
    "chars": 5414,
    "preview": "---\ntitle: 'Architecture Deep Dive'\ndescription: 'Understand the core architecture and components of Julep'\nicon: 'brain"
  },
  {
    "path": "documentation/advanced/chat.mdx",
    "chars": 18452,
    "preview": "---\ntitle: 'Chat Features in Julep'\ndescription: 'Learn about the robust chat system and its various features for dynami"
  },
  {
    "path": "documentation/advanced/files.mdx",
    "chars": 2203,
    "preview": "---\ntitle: 'Files (Multimedia)'\ndescription: 'Learn about file handling and management in Julep'\nicon: 'file-circle-plus"
  },
  {
    "path": "documentation/advanced/lifecycle.mdx",
    "chars": 19629,
    "preview": "---\ntitle: 'Execution Lifecycle'\ndescription: 'Understanding the Lifecycle of Task when executed in Julep'\nicon: 'arrows"
  },
  {
    "path": "documentation/advanced/localsetup.mdx",
    "chars": 3566,
    "preview": "---\ntitle: 'Local Setup'\ndescription: 'Learn how to run Julep locally'\nicon: 'code'\n---\n## Overview\n\nJuelp is designed t"
  },
  {
    "path": "documentation/advanced/multi-agent-multi-user-sessions.mdx",
    "chars": 2606,
    "preview": "---\ntitle: 'Multi-Agent Multi-User Sessions'\ndescription: 'Learn how to manage complex multi-agent systems with multiple"
  },
  {
    "path": "documentation/advanced/new-syntax.mdx",
    "chars": 3319,
    "preview": "---\ntitle: 'New Syntax (Important)'\ndescription: 'Learn about the new workflow syntax and how to migrate your existing w"
  },
  {
    "path": "documentation/advanced/python-expression.mdx",
    "chars": 11848,
    "preview": "---\ntitle: 'Python Expression'\ndescription: 'Learn how to use Python expressions in Julep task definitions'\nicon: 'pytho"
  },
  {
    "path": "documentation/advanced/render.mdx",
    "chars": 8521,
    "preview": "---\ntitle: 'Render Endpoint in Julep'\ndescription: 'Learn about the render endpoint for previewing chat inputs before se"
  },
  {
    "path": "documentation/advanced/secrets-management.mdx",
    "chars": 6400,
    "preview": "---\ntitle: 'Secrets Management'\ndescription: 'Advanced techniques for managing sensitive information in Julep'\nicon: 'ke"
  },
  {
    "path": "documentation/advanced/system-templates.mdx",
    "chars": 14396,
    "preview": "---\ntitle: System Templates\ndescription: Learn how to use Jinja2 templates to create dynamic system prompts for your AI "
  },
  {
    "path": "documentation/advanced/types-of-task-steps.mdx",
    "chars": 14725,
    "preview": "---\ntitle: 'Types of Task Steps'\ndescription: 'Learn about different types of task steps and their use'\nicon: 'stairs'\n-"
  },
  {
    "path": "documentation/concepts/agents.mdx",
    "chars": 12932,
    "preview": "---\ntitle: 'Agents'\ndescription: 'Understanding Julep Agents and their capabilities'\nicon: 'lightbulb'\n---\n\n## Overview\n"
  },
  {
    "path": "documentation/concepts/docs.mdx",
    "chars": 28084,
    "preview": "---\ntitle: 'Documents (RAG)'\ndescription: 'Working with documents in Julep'\nicon: 'database'\n---\n\n## Overview\n\nDocuments"
  },
  {
    "path": "documentation/concepts/execution.mdx",
    "chars": 13234,
    "preview": "---\ntitle: 'Executions'\ndescription: 'Understanding Task Executions and Their Lifecycle'\nicon: 'play'\n---\n\n## Overview\n\n"
  },
  {
    "path": "documentation/concepts/files.mdx",
    "chars": 6446,
    "preview": "---\ntitle: 'Files'\ndescription: 'Managing files and attachments in Julep'\nicon: 'file'\n---\n\n# Files\n\nFiles in Julep allo"
  },
  {
    "path": "documentation/concepts/projects.mdx",
    "chars": 3422,
    "preview": "---\ntitle: 'Projects'\ndescription: 'Organizational units for grouping related resources'\nicon: 'layer-group'\n---\n\n\n## Ov"
  },
  {
    "path": "documentation/concepts/secrets.mdx",
    "chars": 4078,
    "preview": "---\ntitle: 'Secrets'\ndescription: 'Securely store and manage sensitive information for your LLM applications'\nicon: 'key"
  },
  {
    "path": "documentation/concepts/sessions.mdx",
    "chars": 32140,
    "preview": "---\ntitle: 'Sessions'\ndescription: 'Understanding Julep Sessions and state management'\nicon: 'memory'\n---\n\n## Overview\n\n"
  },
  {
    "path": "documentation/concepts/tasks.mdx",
    "chars": 18136,
    "preview": "---\ntitle: 'Tasks'\ndescription: 'Understanding Julep Tasks and workflows'\nicon: 'list-check'\n---\n\n## Overview\n\nTasks are"
  },
  {
    "path": "documentation/concepts/tools.mdx",
    "chars": 26390,
    "preview": "---\ntitle: 'Tools'\ndescription: 'Understanding tools in Julep'\nicon: 'screwdriver-wrench'\n---\n\n## Overview\n\nAgents can b"
  },
  {
    "path": "documentation/concepts/users.mdx",
    "chars": 10043,
    "preview": "---\ntitle: 'Users'\ndescription: 'Understanding and Managing Users in Julep'\nicon: 'circle-user'\n---\n\n## Overview\n\nUsers "
  },
  {
    "path": "documentation/docs.json",
    "chars": 10144,
    "preview": "{\n  \"$schema\": \"https://mintlify.com/docs.json\",\n  \"theme\": \"willow\",\n  \"name\": \"Julep\",\n  \"colors\": {\n    \"primary\": \"#"
  },
  {
    "path": "documentation/guides/adding-tool-integration.mdx",
    "chars": 756,
    "preview": "---\ntitle: 'Adding a Tool Integration'\ndescription: 'Extend Julep with your own tool or API'\n---\n\n# Adding a Tool Integr"
  },
  {
    "path": "documentation/guides/advanced/complex-workflows.mdx",
    "chars": 200,
    "preview": "---\ntitle: 'Complex Workflows'\ndescription: 'Creating advanced task workflows'\ngroups: ['admin']\n---\n\n# Complex Workflow"
  },
  {
    "path": "documentation/guides/advanced/integration-patterns.mdx",
    "chars": 6178,
    "preview": "---\ntitle: 'Integration Patterns'\ndescription: 'Common patterns for integrating with external services'\n---\n\n# Integrati"
  },
  {
    "path": "documentation/guides/advanced/multi-agent-systems.mdx",
    "chars": 215,
    "preview": "---\ntitle: 'Multi-Agent Systems'\ndescription: 'Building complex multi-agent systems'\ngroups: ['admin']\n---\n\n# Multi-Agen"
  },
  {
    "path": "documentation/guides/cookbooks/community-examples.mdx",
    "chars": 790,
    "preview": "---\ntitle: 'Community Examples'\ndescription: 'Examples from the Julep community'\ngroups: ['admin']\n---\n\n# Community Exam"
  },
  {
    "path": "documentation/guides/cookbooks/industry-solutions.mdx",
    "chars": 825,
    "preview": "---\ntitle: 'Industry Solutions'\ndescription: 'Industry-specific solutions using Julep'\ngroups: ['admin']\n---\n\n# Industry"
  },
  {
    "path": "documentation/guides/cookbooks/quick-solutions.mdx",
    "chars": 765,
    "preview": "---\ntitle: 'Quick Solutions'\ndescription: 'Ready-to-use solutions for common use cases'  \ngroups: ['admin']\n---\n\n# Quick"
  },
  {
    "path": "documentation/guides/getting-started/chat-with-an-agent.mdx",
    "chars": 5347,
    "preview": "---\ntitle: 'Chat with an Agent'\ndescription: 'Learn how to chat with your agent'\n---\n\n# How to Create a Julep Session an"
  },
  {
    "path": "documentation/guides/getting-started/create-and-execute-julep-task.mdx",
    "chars": 17455,
    "preview": "---\ntitle: 'Create & Execute a Julep Task'\ndescription: 'Learn how to create and execute a Julep task'\n---\n\n# Create and"
  },
  {
    "path": "documentation/guides/getting-started/tool-integration-demo.mdx",
    "chars": 220,
    "preview": "---\ntitle: 'Tool Integration Demo'\ndescription: 'Learn how to integrate tools with your Julep agent'\ngroups: ['admin']\n-"
  },
  {
    "path": "documentation/guides/modifying-agent-workflow.mdx",
    "chars": 732,
    "preview": "---\ntitle: 'Modifying Agent Workflow'\ndescription: 'Customize how your agents process tasks'\n---\n\n# Modifying Agent Work"
  },
  {
    "path": "documentation/guides/use-cases/customer-service.mdx",
    "chars": 220,
    "preview": "---\ntitle: 'Customer Service'\ndescription: 'Building a customer service agent with Julep'\ngroups: ['admin']\n---\n\n# Custo"
  },
  {
    "path": "documentation/guides/use-cases/data-analysis.mdx",
    "chars": 195,
    "preview": "---\ntitle: 'Data Analysis'\ndescription: 'Performing data analysis with Julep'\ngroups: ['admin']\n---\n\n# Data Analysis Exa"
  },
  {
    "path": "documentation/guides/use-cases/document-processing.mdx",
    "chars": 211,
    "preview": "---\ntitle: 'Document Processing'\ndescription: 'Document processing with Julep'\ngroups: ['admin']\n---\n\n# Document Process"
  },
  {
    "path": "documentation/guides/use-cases/research-assistant.mdx",
    "chars": 204,
    "preview": "---\ntitle: 'Research Assistant'\ndescription: 'Creating a research assistant with Julep'\ngroups: ['admin']\n---\n\n# Researc"
  },
  {
    "path": "documentation/guides/using-secrets.mdx",
    "chars": 6338,
    "preview": "---\ntitle: 'Using Secrets in Julep'\ndescription: 'A practical guide to managing and using secrets in your Julep applicat"
  },
  {
    "path": "documentation/integrations/communicationdata/email.mdx",
    "chars": 4121,
    "preview": "---\ntitle: 'Email (SMTP)'\ndescription: 'Learn how to use the Email integration with Julep'\nicon: 'envelope'\n---\n\n## Over"
  },
  {
    "path": "documentation/integrations/communicationdata/google-sheets.mdx",
    "chars": 7831,
    "preview": "---\ntitle: 'Google Sheets'\ndescription: 'Learn how to use the Google Sheets integration with Julep'\nicon: 'table'\n---\n\n#"
  },
  {
    "path": "documentation/integrations/communicationdata/weather.mdx",
    "chars": 3192,
    "preview": "---\ntitle: 'OpenWeatherMap'\ndescription: 'OpenWeatherMap integration with Julep'\nicon: 'cloud-sun-rain'\n---\n\n## Overview"
  },
  {
    "path": "documentation/integrations/contributing-integrations.mdx",
    "chars": 1152,
    "preview": "---\ntitle: 'Add New Integrations'\ndescription: 'Guidelines for contributing new integrations to Julep'\nicon: 'circle-plu"
  },
  {
    "path": "documentation/integrations/extensibility/mcp.mdx",
    "chars": 10368,
    "preview": "---\ntitle: 'MCP (Model Context Protocol)'\ndescription: 'Learn how to use the MCP integration to connect Julep with any M"
  },
  {
    "path": "documentation/integrations/mediafile/cloudinary.mdx",
    "chars": 5168,
    "preview": "---\ntitle: 'Cloudinary'\ndescription: 'Learn how to use the Cloudinary integration with Julep'\nicon: 'wand-magic'\n---\n\n##"
  },
  {
    "path": "documentation/integrations/mediafile/ffmpeg.mdx",
    "chars": 3230,
    "preview": "---\ntitle: 'FFmpeg'\ndescription: 'Learn how to use the FFmpeg integration with Julep'\nicon: 'photo-film'\n---\n\n## Overvie"
  },
  {
    "path": "documentation/integrations/mediafile/llamaparse.mdx",
    "chars": 4936,
    "preview": "---\ntitle: 'LlamaParse'\ndescription: 'Learn how to use the LlamaParse integration with Julep'\nicon: 'file-pdf'\n---\n\n## O"
  },
  {
    "path": "documentation/integrations/mediafile/unstructured.mdx",
    "chars": 5190,
    "preview": "---\ntitle: 'Unstructured'\ndescription: 'Learn how to use the Unstructured.io integration with Julep'\nicon: 'file-lines'\n"
  },
  {
    "path": "documentation/integrations/search/algolia.mdx",
    "chars": 4296,
    "preview": "---\ntitle: 'Algolia'\ndescription: 'Learn how to use the Algolia search integration with Julep'\nicon: 'magnifying-glass'\n"
  },
  {
    "path": "documentation/integrations/search/arxiv.mdx",
    "chars": 3032,
    "preview": "---\ntitle: 'ArXiv'\ndescription: 'Learn how to use the ArXiv integration with Julep'\nicon: 'book'\n---\n\n## Overview\n\nWelco"
  },
  {
    "path": "documentation/integrations/search/brave.mdx",
    "chars": 3185,
    "preview": "---\ntitle: 'Brave'\ndescription: 'Learn how to use the Brave integration with Julep'\nicon: 'searchengin'\n---\n\n## Overview"
  },
  {
    "path": "documentation/integrations/search/wikipedia.mdx",
    "chars": 3000,
    "preview": "---\ntitle: 'Wikipedia'\ndescription: 'Learn how to use the Wikipedia integration with Julep'\nicon: 'wikipedia-w'\n---\n\n## "
  },
  {
    "path": "documentation/integrations/supported-integrations.mdx",
    "chars": 2556,
    "preview": "---\ntitle: 'Supported Integrations'\ndescription: 'List of supported integrations in Julep'\nicon: 'plug'\n---\n\nimport { In"
  },
  {
    "path": "documentation/integrations/supported-models.mdx",
    "chars": 12311,
    "preview": "---\ntitle: 'Supported Models'\ndescription: 'Comprehensive guide to AI models and parameters supported by Julep'\nicon: 'b"
  },
  {
    "path": "documentation/integrations/webbrowser/browserbase.mdx",
    "chars": 5347,
    "preview": "---\ntitle: 'Browser Base'\ndescription: 'Learn how to use the Browser Base integration with Julep'\nicon: 'firefox-browser"
  },
  {
    "path": "documentation/integrations/webbrowser/remote-browser.mdx",
    "chars": 4718,
    "preview": "---\ntitle: 'Remote Browser'\ndescription: 'Learn how to use the Remote Browser integration with Julep'\nicon: 'arrow-point"
  },
  {
    "path": "documentation/integrations/webbrowser/spider.mdx",
    "chars": 3659,
    "preview": "---\ntitle: 'Spider Crawler'\ndescription: 'Learn how to use the Spider Crawler integration with Julep'\nicon: 'spider'\n---"
  },
  {
    "path": "documentation/introduction/developer-orientation.mdx",
    "chars": 2256,
    "preview": "---\ntitle: 'Developer Orientation'\ndescription: 'Overview of the repository structure and key resources for Julep develo"
  },
  {
    "path": "documentation/introduction/install.mdx",
    "chars": 3996,
    "preview": "---\ntitle: 'Installation'\ndescription: 'Step-by-step installation instructions for different environments'\nicon: 'downlo"
  },
  {
    "path": "documentation/introduction/julep.mdx",
    "chars": 4932,
    "preview": "---\ntitle: 'Welcome to Julep'\nicon: 'eye' \n---\n\n![Julep Simple Overview](/images/julep_overview.svg)\n\nJulep is a platfor"
  },
  {
    "path": "documentation/introduction/quickstart.mdx",
    "chars": 4884,
    "preview": "---\ntitle: 'Quick Start'\ndescription: 'Quick example to get started with Julep'\nicon: 'rocket'\n---\n\n## Overview\nThis gui"
  },
  {
    "path": "documentation/julepcli/commands.mdx",
    "chars": 24494,
    "preview": "---\ntitle: 'Command Reference'\ndescription: 'Commands for managing Julep projects and resources'\nicon: 'terminal'\n---\n\n#"
  },
  {
    "path": "documentation/julepcli/introduction.mdx",
    "chars": 4632,
    "preview": "---\ntitle: 'Getting Started'\ndescription: 'Getting started with Julep CLI'\nicon: 'eye'\n---\n\n## Overview\n\nThe `julep` CLI"
  },
  {
    "path": "documentation/llms.txt",
    "chars": 14012,
    "preview": "# Welcome to Julep - Julep\n\n> Welcome to Julep\n\n\n## Getting Started with Julep\n- [Welcome to Julep - Julep](https://docs"
  },
  {
    "path": "documentation/responses/cli.mdx",
    "chars": 10653,
    "preview": "---\ntitle: 'CLI'\ndescription: 'CLI for setting up and using Open Responses API'\nicon: 'terminal'\n---\n\n# Open Responses C"
  },
  {
    "path": "documentation/responses/concepts.mdx",
    "chars": 14428,
    "preview": "---\ntitle: 'Concepts'\ndescription: 'Concepts of Julep Open Responses API'\nicon: 'comment-dots'\n---\n\n## Overview\n\nIn this"
  },
  {
    "path": "documentation/responses/examples.mdx",
    "chars": 12094,
    "preview": "---\ntitle: 'Examples'\ndescription: 'Examples of using Julep Open Responses API'\nicon: 'code-branch'\n---\n\n# Open Response"
  },
  {
    "path": "documentation/responses/quickstart.mdx",
    "chars": 6856,
    "preview": "---\ntitle: 'Quickstart'\ndescription: 'Get started with Julep Open Responses API for LLM interactions'\nicon: 'rocket'\n---"
  },
  {
    "path": "documentation/responses/roadmap.mdx",
    "chars": 4352,
    "preview": "---\ntitle: 'Roadmap'\ndescription: 'Roadmap for the Julep Open Responses API'\nicon: 'road'\n---\n\n## Overview\n\nThe Julep's "
  },
  {
    "path": "documentation/scripts/julep-chat-widget.js",
    "chars": 25168,
    "preview": "// Julep Chat Widget with Streaming Support\n(function() {\n  'use strict';\n  \n  console.log('[Julep Widget] Loading...');"
  },
  {
    "path": "documentation/sdks/common/authentication.mdx",
    "chars": 1229,
    "preview": "---\ntitle: 'Authentication'\ndescription: 'Authentication patterns for Julep SDKs'\n---\n\n# Authentication\n\nLearn about dif"
  },
  {
    "path": "documentation/sdks/common/error-handling.mdx",
    "chars": 1471,
    "preview": "---\ntitle: 'Error Handling'\ndescription: 'Best practices for handling errors in Julep SDKs'\n---\n\n# Error Handling\n\nLearn"
  },
  {
    "path": "documentation/sdks/common/secrets.mdx",
    "chars": 7405,
    "preview": "---\ntitle: 'Common Secrets Patterns'\ndescription: 'Common patterns for working with secrets across SDKs'\n---\n\n# Common S"
  },
  {
    "path": "documentation/sdks/common/testing.mdx",
    "chars": 1571,
    "preview": "---\ntitle: 'Testing'\ndescription: 'Testing patterns and best practices for Julep SDK implementations'\n---\n\n# Testing\n\nLe"
  },
  {
    "path": "documentation/sdks/index.mdx",
    "chars": 4852,
    "preview": "---\ntitle: 'Introduction'\ndescription: 'Getting started with Julep SDKs for Python and Node.js'\n---\n\nThe Julep SDKs prov"
  },
  {
    "path": "documentation/sdks/nodejs/advanced-usage.mdx",
    "chars": 7813,
    "preview": "---\ntitle: 'Advanced Usage'\ndescription: 'Advanced patterns and best practices for the Node.js SDK'\n---\n\nThis guide cove"
  },
  {
    "path": "documentation/sdks/nodejs/agents.mdx",
    "chars": 3807,
    "preview": "---\ntitle: 'Agents'\ndescription: 'Create and manage AI agents with the Node.js SDK'\n---\n\nAgents are the core building bl"
  }
]

// ... and 784 more files (download for full content)

About this extraction

This page contains the full source code of the julep-ai/julep GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 984 files (13.1 MB), approximately 3.5M tokens, and a symbol index with 2409 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!