From b4f51325c9f1f720391e1a70f7f86b5b93f0aae7 Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Thu, 28 May 2026 18:46:40 -0700 Subject: [PATCH] docs(cookbook): migrate cookbook examples from BerriAI/litellm Bring the current state of the cookbook/ directory (notebooks and example projects) into the docs repo as the new home for these guides. --- cookbook/Benchmarking_LLMs_by_use_case.ipynb | 753 ++++++++++++ ...pic)_with_Streaming_liteLLM_Examples.ipynb | 406 +++++++ cookbook/Evaluating_LLMs.ipynb | 579 ++++++++++ .../LiteLLM_Azure_and_OpenAI_example.ipynb | 422 +++++++ cookbook/LiteLLM_Bedrock.ipynb | 310 +++++ cookbook/LiteLLM_CometAPI.ipynb | 474 ++++++++ cookbook/LiteLLM_Comparing_LLMs.ipynb | 441 ++++++++ cookbook/LiteLLM_Completion_Cost.ipynb | 241 ++++ cookbook/LiteLLM_HuggingFace.ipynb | 252 +++++ cookbook/LiteLLM_NovitaAI_Cookbook.ipynb | 97 ++ cookbook/LiteLLM_OpenRouter.ipynb | 179 +++ cookbook/LiteLLM_Petals.ipynb | 568 ++++++++++ cookbook/LiteLLM_PromptLayer.ipynb | 130 +++ cookbook/LiteLLM_User_Based_Rate_Limits.ipynb | 224 ++++ cookbook/LiteLLM_batch_completion.ipynb | 163 +++ ...teLLM_Proxy_from_OpenAI_Azure_OpenAI.ipynb | 565 +++++++++ cookbook/Parallel_function_calling.ipynb | 478 ++++++++ cookbook/Proxy_Batch_Users.ipynb | 205 ++++ cookbook/TogetherAI_liteLLM.ipynb | 1006 +++++++++++++++++ ..._Nemo_Guardrails_with_LiteLLM_Server.ipynb | 157 +++ cookbook/VLLM_Model_Testing.ipynb | 404 +++++++ .../claude_code_quickstart/guide.md | 295 +++++ cookbook/ai_coding_tool_guides/index.json | 134 +++ cookbook/anthropic_agent_sdk/README.md | 144 +++ .../anthropic_agent_sdk/agent_with_mcp.py | 144 +++ cookbook/anthropic_agent_sdk/common.py | 164 +++ .../anthropic_agent_sdk/config.example.yaml | 25 + cookbook/anthropic_agent_sdk/main.py | 99 ++ cookbook/anthropic_agent_sdk/requirements.txt | 2 + cookbook/benchmark/benchmark.py | 90 ++ .../auto_evals.py | 30 + cookbook/benchmark/readme.md | 181 +++ cookbook/codellama-server/README.MD | 153 +++ .../codellama-server/imgs/code-output.png | Bin 0 -> 238123 bytes .../imgs/promptlayer_logging.png | Bin 0 -> 300105 bytes cookbook/codellama-server/main.py | 102 ++ cookbook/community-resources/get_hf_models.py | 89 ++ cookbook/community-resources/max_tokens.json | 93 ++ cookbook/gollem_go_agent_framework/README.md | 119 ++ .../gollem_go_agent_framework/basic/main.go | 41 + cookbook/gollem_go_agent_framework/go.mod | 5 + cookbook/gollem_go_agent_framework/go.sum | 2 + .../proxy_config.yaml | 16 + .../streaming/main.go | 56 + .../gollem_go_agent_framework/tools/main.go | 64 ++ cookbook/google_adk_litellm_tutorial.ipynb | 412 +++++++ cookbook/liteLLM_A121_Jurrasic_example.ipynb | 251 ++++ cookbook/liteLLM_Baseten.ipynb | 146 +++ cookbook/liteLLM_Getting_Started.ipynb | 411 +++++++ cookbook/liteLLM_IBM_Watsonx.ipynb | 300 +++++ cookbook/liteLLM_Langchain_Demo.ipynb | 195 ++++ cookbook/liteLLM_Ollama.ipynb | 289 +++++ cookbook/liteLLM_Replicate_Demo.ipynb | 238 ++++ cookbook/liteLLM_Streaming_Demo.ipynb | 226 ++++ cookbook/liteLLM_VertextAI_Example.ipynb | 199 ++++ cookbook/liteLLM_clarifai_Demo.ipynb | 187 +++ cookbook/liteLLM_function_calling.ipynb | 331 ++++++ .../litellm-ollama-docker-image/Dockerfile | 25 + .../requirements.txt | 1 + cookbook/litellm-ollama-docker-image/start.sh | 2 + cookbook/litellm-ollama-docker-image/test.py | 35 + .../litellm_Test_Multiple_Providers.ipynb | 571 ++++++++++ cookbook/litellm_model_fallback.ipynb | 51 + .../batch_api/bedrock/bedrock.py | 25 + .../bedrock/bedrock_batch_completions.jsonl | 128 +++ .../braintrust_prompt_wrapper_README.md | 279 +++++ .../braintrust_prompt_wrapper_server.py | 274 +++++ .../litellm_proxy_server/cli_token_usage.py | 63 ++ .../dashboard_1/grafana_dashboard.json | 614 ++++++++++ .../grafana_dashboard/dashboard_1/readme.md | 6 + .../dashboard_v2/grafana_dashboard.json | 827 ++++++++++++++ .../grafana_dashboard/readme.md | 14 + .../mcp/mcp_with_litellm_proxy.py | 37 + cookbook/litellm_proxy_server/readme.md | 177 +++ .../custom_secret_manager_config.yaml | 20 + .../secret_manager/my_secret_manager.py | 80 ++ cookbook/litellm_router/error_log.txt | 1004 ++++++++++++++++ cookbook/litellm_router/load_test_proxy.py | 148 +++ cookbook/litellm_router/load_test_queuing.py | 164 +++ cookbook/litellm_router/load_test_router.py | 143 +++ cookbook/litellm_router/request_log.txt | 48 + cookbook/litellm_router/response_log.txt | 0 .../test_questions/question1.txt | 43 + .../test_questions/question2.txt | 65 ++ .../test_questions/question3.txt | 50 + .../memory_usage/router_endpoint.py | 65 ++ .../memory_usage/router_memory_usage copy.py | 91 ++ .../memory_usage/router_memory_usage.py | 91 ++ .../memory_usage/send_request.py | 28 + .../test_loadtest_openai_client.py | 73 ++ .../test_loadtest_router.py | 87 ++ .../test_loadtest_router_withs3_cache.py | 93 ++ cookbook/litellm_test_multiple_llm_demo.ipynb | 55 + cookbook/livekit_agent_sdk/README.md | 114 ++ .../livekit_agent_sdk/config.example.yaml | 21 + cookbook/livekit_agent_sdk/main.py | 121 ++ cookbook/livekit_agent_sdk/requirements.txt | 2 + .../logging_observability/LiteLLM_Arize.ipynb | 172 +++ .../LiteLLM_Langfuse.ipynb | 197 ++++ .../LiteLLM_Lunary.ipynb | 348 ++++++ .../LiteLLM_Proxy_Langfuse.ipynb | 252 +++++ .../litellm_proxy_langfuse.png | Bin 0 -> 315558 bytes .../RELEASE_NOTES_GENERATION_INSTRUCTIONS.md | 543 +++++++++ cookbook/misc/add_new_models.py | 71 ++ cookbook/misc/config.yaml | 73 ++ cookbook/misc/dev_release.txt | 11 + cookbook/misc/migrate_proxy_config.py | 95 ++ cookbook/misc/openai_timeouts.py | 33 + cookbook/misc/sagmaker_streaming.py | 55 + cookbook/misc/test_responses_api.py | 49 + cookbook/misc/update_json_caching.py | 54 + ...flow_langchain_tracing_litellm_proxy.ipynb | 311 +++++ .../mock_bedrock_guardrail_server.py | 540 +++++++++ .../mock_prompt_management_server/README.md | 293 +++++ .../mock_prompt_management_server.py | 390 +++++++ cookbook/nova_sonic_realtime.py | 291 +++++ cookbook/result.html | 22 + cookbook/veo_video_generation.py | 321 ++++++ 118 files changed, 23143 insertions(+) create mode 100644 cookbook/Benchmarking_LLMs_by_use_case.ipynb create mode 100644 cookbook/Claude_(Anthropic)_with_Streaming_liteLLM_Examples.ipynb create mode 100644 cookbook/Evaluating_LLMs.ipynb create mode 100644 cookbook/LiteLLM_Azure_and_OpenAI_example.ipynb create mode 100644 cookbook/LiteLLM_Bedrock.ipynb create mode 100644 cookbook/LiteLLM_CometAPI.ipynb create mode 100644 cookbook/LiteLLM_Comparing_LLMs.ipynb create mode 100644 cookbook/LiteLLM_Completion_Cost.ipynb create mode 100644 cookbook/LiteLLM_HuggingFace.ipynb create mode 100644 cookbook/LiteLLM_NovitaAI_Cookbook.ipynb create mode 100644 cookbook/LiteLLM_OpenRouter.ipynb create mode 100644 cookbook/LiteLLM_Petals.ipynb create mode 100644 cookbook/LiteLLM_PromptLayer.ipynb create mode 100644 cookbook/LiteLLM_User_Based_Rate_Limits.ipynb create mode 100644 cookbook/LiteLLM_batch_completion.ipynb create mode 100644 cookbook/Migrating_to_LiteLLM_Proxy_from_OpenAI_Azure_OpenAI.ipynb create mode 100644 cookbook/Parallel_function_calling.ipynb create mode 100644 cookbook/Proxy_Batch_Users.ipynb create mode 100644 cookbook/TogetherAI_liteLLM.ipynb create mode 100644 cookbook/Using_Nemo_Guardrails_with_LiteLLM_Server.ipynb create mode 100644 cookbook/VLLM_Model_Testing.ipynb create mode 100644 cookbook/ai_coding_tool_guides/claude_code_quickstart/guide.md create mode 100644 cookbook/ai_coding_tool_guides/index.json create mode 100644 cookbook/anthropic_agent_sdk/README.md create mode 100644 cookbook/anthropic_agent_sdk/agent_with_mcp.py create mode 100644 cookbook/anthropic_agent_sdk/common.py create mode 100644 cookbook/anthropic_agent_sdk/config.example.yaml create mode 100644 cookbook/anthropic_agent_sdk/main.py create mode 100644 cookbook/anthropic_agent_sdk/requirements.txt create mode 100644 cookbook/benchmark/benchmark.py create mode 100644 cookbook/benchmark/eval_suites_mlflow_autoevals/auto_evals.py create mode 100644 cookbook/benchmark/readme.md create mode 100644 cookbook/codellama-server/README.MD create mode 100644 cookbook/codellama-server/imgs/code-output.png create mode 100644 cookbook/codellama-server/imgs/promptlayer_logging.png create mode 100644 cookbook/codellama-server/main.py create mode 100644 cookbook/community-resources/get_hf_models.py create mode 100644 cookbook/community-resources/max_tokens.json create mode 100644 cookbook/gollem_go_agent_framework/README.md create mode 100644 cookbook/gollem_go_agent_framework/basic/main.go create mode 100644 cookbook/gollem_go_agent_framework/go.mod create mode 100644 cookbook/gollem_go_agent_framework/go.sum create mode 100644 cookbook/gollem_go_agent_framework/proxy_config.yaml create mode 100644 cookbook/gollem_go_agent_framework/streaming/main.go create mode 100644 cookbook/gollem_go_agent_framework/tools/main.go create mode 100644 cookbook/google_adk_litellm_tutorial.ipynb create mode 100644 cookbook/liteLLM_A121_Jurrasic_example.ipynb create mode 100644 cookbook/liteLLM_Baseten.ipynb create mode 100644 cookbook/liteLLM_Getting_Started.ipynb create mode 100644 cookbook/liteLLM_IBM_Watsonx.ipynb create mode 100644 cookbook/liteLLM_Langchain_Demo.ipynb create mode 100644 cookbook/liteLLM_Ollama.ipynb create mode 100644 cookbook/liteLLM_Replicate_Demo.ipynb create mode 100644 cookbook/liteLLM_Streaming_Demo.ipynb create mode 100644 cookbook/liteLLM_VertextAI_Example.ipynb create mode 100644 cookbook/liteLLM_clarifai_Demo.ipynb create mode 100644 cookbook/liteLLM_function_calling.ipynb create mode 100644 cookbook/litellm-ollama-docker-image/Dockerfile create mode 100644 cookbook/litellm-ollama-docker-image/requirements.txt create mode 100644 cookbook/litellm-ollama-docker-image/start.sh create mode 100644 cookbook/litellm-ollama-docker-image/test.py create mode 100644 cookbook/litellm_Test_Multiple_Providers.ipynb create mode 100644 cookbook/litellm_model_fallback.ipynb create mode 100644 cookbook/litellm_proxy_server/batch_api/bedrock/bedrock.py create mode 100644 cookbook/litellm_proxy_server/batch_api/bedrock/bedrock_batch_completions.jsonl create mode 100644 cookbook/litellm_proxy_server/braintrust_prompt_wrapper_README.md create mode 100644 cookbook/litellm_proxy_server/braintrust_prompt_wrapper_server.py create mode 100644 cookbook/litellm_proxy_server/cli_token_usage.py create mode 100644 cookbook/litellm_proxy_server/grafana_dashboard/dashboard_1/grafana_dashboard.json create mode 100644 cookbook/litellm_proxy_server/grafana_dashboard/dashboard_1/readme.md create mode 100644 cookbook/litellm_proxy_server/grafana_dashboard/dashboard_v2/grafana_dashboard.json create mode 100644 cookbook/litellm_proxy_server/grafana_dashboard/readme.md create mode 100644 cookbook/litellm_proxy_server/mcp/mcp_with_litellm_proxy.py create mode 100644 cookbook/litellm_proxy_server/readme.md create mode 100644 cookbook/litellm_proxy_server/secret_manager/custom_secret_manager_config.yaml create mode 100644 cookbook/litellm_proxy_server/secret_manager/my_secret_manager.py create mode 100644 cookbook/litellm_router/error_log.txt create mode 100644 cookbook/litellm_router/load_test_proxy.py create mode 100644 cookbook/litellm_router/load_test_queuing.py create mode 100644 cookbook/litellm_router/load_test_router.py create mode 100644 cookbook/litellm_router/request_log.txt create mode 100644 cookbook/litellm_router/response_log.txt create mode 100644 cookbook/litellm_router/test_questions/question1.txt create mode 100644 cookbook/litellm_router/test_questions/question2.txt create mode 100644 cookbook/litellm_router/test_questions/question3.txt create mode 100644 cookbook/litellm_router_load_test/memory_usage/router_endpoint.py create mode 100644 cookbook/litellm_router_load_test/memory_usage/router_memory_usage copy.py create mode 100644 cookbook/litellm_router_load_test/memory_usage/router_memory_usage.py create mode 100644 cookbook/litellm_router_load_test/memory_usage/send_request.py create mode 100644 cookbook/litellm_router_load_test/test_loadtest_openai_client.py create mode 100644 cookbook/litellm_router_load_test/test_loadtest_router.py create mode 100644 cookbook/litellm_router_load_test/test_loadtest_router_withs3_cache.py create mode 100644 cookbook/litellm_test_multiple_llm_demo.ipynb create mode 100644 cookbook/livekit_agent_sdk/README.md create mode 100644 cookbook/livekit_agent_sdk/config.example.yaml create mode 100644 cookbook/livekit_agent_sdk/main.py create mode 100644 cookbook/livekit_agent_sdk/requirements.txt create mode 100644 cookbook/logging_observability/LiteLLM_Arize.ipynb create mode 100644 cookbook/logging_observability/LiteLLM_Langfuse.ipynb create mode 100644 cookbook/logging_observability/LiteLLM_Lunary.ipynb create mode 100644 cookbook/logging_observability/LiteLLM_Proxy_Langfuse.ipynb create mode 100644 cookbook/logging_observability/litellm_proxy_langfuse.png create mode 100644 cookbook/misc/RELEASE_NOTES_GENERATION_INSTRUCTIONS.md create mode 100644 cookbook/misc/add_new_models.py create mode 100644 cookbook/misc/config.yaml create mode 100644 cookbook/misc/dev_release.txt create mode 100644 cookbook/misc/migrate_proxy_config.py create mode 100644 cookbook/misc/openai_timeouts.py create mode 100644 cookbook/misc/sagmaker_streaming.py create mode 100644 cookbook/misc/test_responses_api.py create mode 100644 cookbook/misc/update_json_caching.py create mode 100644 cookbook/mlflow_langchain_tracing_litellm_proxy.ipynb create mode 100644 cookbook/mock_guardrail_server/mock_bedrock_guardrail_server.py create mode 100644 cookbook/mock_prompt_management_server/README.md create mode 100644 cookbook/mock_prompt_management_server/mock_prompt_management_server.py create mode 100644 cookbook/nova_sonic_realtime.py create mode 100644 cookbook/result.html create mode 100644 cookbook/veo_video_generation.py diff --git a/cookbook/Benchmarking_LLMs_by_use_case.ipynb b/cookbook/Benchmarking_LLMs_by_use_case.ipynb new file mode 100644 index 000000000..6ea6211bf --- /dev/null +++ b/cookbook/Benchmarking_LLMs_by_use_case.ipynb @@ -0,0 +1,753 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "4Cq-_Y-TKf0r" + }, + "source": [ + "# LiteLLM - Benchmark Llama2, Claude1.2 and GPT3.5 for a use case\n", + "In this notebook for a given use case we run the same question and view:\n", + "* LLM Response\n", + "* Response Time\n", + "* Response Cost\n", + "\n", + "## Sample output for a question\n", + "![Screenshot 2023-09-07 at 4.45.37 PM.png](data:image/png;base64,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E/+YTvNV9zrZ8ssv/3nVxKaTgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQggRAUcFkLJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJjCcCCrjGE3h3KwEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAGXdUACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkMB4IqCAazyBd7cSkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQUcFkHxgmBGWecMcw///zhkUceCZ999tk42ac7mTQITDnllGGxxRYLI0eODO+///4kcdDzzDNPmGaaacJTTz01SRyvBykBCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKYmAko4JqYz24vObbZZ589HHHEEbE0d955Zzj//PN7Sckm7GLMNddcYciQIWHyyScPH3/8cRg+fHj473//O2EfVAulP+OMMwIirtGjR4ef//znLeQwbjYZPHhwFDHme6PM119/fb6o2+kNNtggbLjhhjHd8ccfHx5//PFutxkfCWaaaaaw5pprhimmmKK2+88//zzceuut4aWXXqotK5toZ9uy/FwmAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAIS6M0EFHC1eHbmnHPOsNBCC4XnnnsujBo1qsVcJozNFlxwwfD888+H//3vfy0VeMkllww//vGP47bwOvzww1vKx426Ejj00EMD9TDZSSedFB599NE0O85+260f7Rb0N7/5TZhsssnCJ598Enbdddd2s+uR7aeaaqpw+umnl+a9ww47lC6vt3DHHXcMyy+/fFx9zTXXhGuvvbZe0i7Lx/V52mOPPcLiiy/epQzMPPzww+GUU04Za3m+oJ1t83xamf7Sl74UVl555TDffPOFOeaYI8wwwwyBG+ULL7wQhg0bFj788MNWsnUbCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQQF0CCrjqohl7BSKRoUOHBgRJffr0qSXAqwzCpGOP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QAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQggUmGgAKuSeZUe6ASkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQQG8joICrt50RyyMBCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJTDIEFHBNMqfaA5WABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEehsBBVy97YxYHglIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhgkiGggGuSOdUeqAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCTQ2wgo4OptZ8TySEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAKTDAEFXJPMqfZAJSABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIIHeRkABV287I5ZHAhKQgAQkMJ4JfOUrXwkLLLBAGDlyZPjwww/Hc2ncvQQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAT+j4DjWNaEiZWAAq6J9cx6XBKQwCRBYM455wwrrrhimGaaaWrH+/nnn4c///nP4fXXX68t68TE0ksvHRZddNHQp0+fWnbs48Ybb6zNOzHhE/jGN74Rdt5553gg//rXv8Jee+014R+URyABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJDDBE3Aca4I/hR5AAwIKuBrAcZUEJCCB3k7gzDPPDFNMMcVYxbzrrrvCeeedN9byVhd87WtfC/vss0/p5jvssEPp8t60cJ555gkDBgwIo0aNCs8991xA5DYx2qyzzhpWXnnlKN678847WzrErbfeOqyyyipx288++yzstNNOLeXjRhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhLoJAHHsTpJc/znNd1004XFF188FuTFF18M//znP8OXv/zlsNxyy4URI0aE9957b/wX8osSDBw4MAwaNCg89NBD4ZlnnumRcing6hGsZioBCUyMBOgQfPOb3wxf+tKX4uFxwzjssMPCO++80+Vw11tvvbDOOuvUhFUff/xxOProo+MNp0vCDsycffbZYfLJJx8rp/vuuy+wrlO2zDLLhKFDh5Zm11sFXDPOOGPYe++9Q79+/cJkk01WKzvirbfffjuceOKJ4ZVXXqktnxgmTj311Nip4ViOPfbY8OSTTzZ9WN///vfDkCFD4nb//e9/a964ms7IDSQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSGCiJcDgOuMmU089dekx/u9//wsffPBB/LD6kksuCaNHjy5N58JJm4D1aOI//zvuuGNYdtllu0T4aXTUjOPhjOHII48sTeY4VimWCWoh47Y4kGD8OY27pwNgbJL7x5RTThnHc3/605+mVeP1F6HZCSecEMtAHaVe94TDEAVc4/U0u3MJSGBCInDWWWeNdRN59tlnwxFHHFE7DBTBp5xyShfBECs77REr7XD11VcPgwcPjp0ewikm67SAi3x33XXXwD5mnnnmMNVUU6Vdhd4o4EJot9122zXsDHJTveKKKyaqEJDnnntu7bxcf/31Yfjw4bX5qhMLLbRQDJtI5wkBWOqMVN3edBKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJDDxE/jlL38Z5p133koHyvv44447rqWPjivtwEQTLAHr0QR76ioX/KSTTgpf+cpXKqcnYSMHA45jNYWy1yWeffbZw7777hsQRHVnn376adhll126SzZO1uehO9nhgQce2COOQhRwjZPT6U4kIIGJgcB+++0XFlxwwS6HwkMHNw46EtgGG2wQNtxwwy5pmDn99NOjO8WxVnRwAcKxaaaZJubYEwKuVNQtt9wyrLbaamm21wm4ZplllnDUUUeNJaKrFbgwgRe1559/vrC0d8726dMnqs7rlS4XcN1www3hyiuvrJfU5RKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCCBlglssskmMRpJ1QyIVvKjH/2oavK20/GRMn94cplUjIgtn3322QR1uNaj3ne6Ol2PTjvttLqe+uodPeOvP/zhD+utdvkETKBM0Md1i2v1FFNM0eXIxrWAq1HdV8DV5dQ4IwEJSKB3EMCrEx6vcrvsssvCzTffHBchHJp11llrq+lg7L777uHDDz+sLWNivvnmC1tssUWYbbbZouqchwgUtW+99Va49tprw6OPPtolfT7DFy0r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CUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKoTEABV0VUCrgqgjKZBCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJFCZgAKuiqgUcFUEZTIJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIoDIBBVwVUSngqgjKZBKQgAQkIAEJ1AissMIKYfbZZw/PPvts+Pvf/15b3qmJeeedNyy99NIxu4ceeii8+OKL3Wa98MILh2WWWSamu/TSS7tN324C+lCrrrpqmGyyycL9998fXnnllZgl5eAPu/baa8P//ve/OO0/CUhg/BP40pe+FNZZZ53Qp0+fMGLEiPDPf/6z5UJNNdVUYe21147bP/jgg+Gll14Ka665Zvjyl78cnnvuufDoo4+GZZddNsw111wxTX6dKO6U6x3XPeypp56Kf8U0zH/1q18Niy66aFw1atSo8Le//S18+9vfDrPOOmt48803w0033VS2Wa9Y9s1vfjOW85133gm33357j5Rp+umnD0OGDInX5ZEjR4bHH3+80n46fd3+xje+Eeacc87w3nvvhVtuuaVSGcZnoqWWWioMHDgwlvnjjz+Odfmee+4Jo0eP7lKs1VdfPXzlK18Jqe59/etfD3PPPXf417/+FW699dYuaXvTzITSRrpjtuSSS9ba/7jo53RXnmbXV7lmkucCCywQllhiiZj9ddddF/773//G6XFxDWFH9fp39coVC9eD/7g3cO779+8fJp988vDqq6+Ghx9+OHCNyy3dR3gZ+pe//CXeU1j2+eefhz/+8Y81jvk2E9r0hN4GqvDmuWLdddcN9Fd66jmrSjlM838EJoU6N7Ge63buOeOyHda75/SGvmSjft9HH33U8fdBPf2OiWfAKaecMjTzLDLzzDOHwYMHx2Zy7733htdee62tJjO++hJtFfqLjcdlu+hEec1jwiMw9dRTh4033jg+y9922221d6yNjmRcPR80KoPrJCABCUigOQIKuCryUsBVEZTJJCABCUhAAhKoEfjRj34UB3sZ6P35z39eW96piS233DLw0hJDkMDAU3f2/e9/PwwaNCgm22OPPbpL3vZ6Bry32267mA9CrTRIn9iw4qc//Wn49NNPYxr/SWB8EGDwIgmIXn75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Rb4KuCqCMpkEJCABCUhAAl0ITD311FE4gHjhlltuCddee22X9f37949fKxLu5Xe/+12YYYYZwiqrrBLDu+CVBgECX5an0Ez5xp0QcA0ePDgOfvHV5Keffhpef/31WE72Wc/mGxMacsUVVwzzzDNP9JzDNo899lhAjFEUqNV72YrnkoUWWiiGsLnqqqvG2hWD3wjf2BdM8FxCme69994wevToWnry4Q/j63s8+pTZd7/73TDddNNFjwtwzq2Z48m3y6fx4EA+2I033hhefvnlOJ3/oz+56aabxkXPPvtsuP3222urZ5111rDuuuuGueaaK5aTc8G5v/POO8NDDz1US5cmvvOd70Qub7zxRrjuuuvS4trvEkssERBp/Pe//w14OOO3O9twww0DL1IJ+8WXs5y75ZdfPsw555zxK1o8J/3973+P2fDSaKWVVgrzzjtv9J7GV7YMjv7jH/8o3U2fPn1iiCK241g5vpEjR8Zz9txzz5Vuw0LaB1xmm2228OUvfzl62OABBibwK3puS8fwwgsvxHpM/cbTW79+/WJd48tnjg2RBUbYkM022ywKgygXhpcd2BMS7bXXXovLiv+a2a7Zc1vcV9k8dYkX93gfwcMfHD744IPIFK9NTJcZPDintCnOCeEKqau0wXyb7gRcyy67bM2DXr06mO+fr83ZXxJmESKRMnAurr766ph0p512Cossskicpt5feeWVeRbxi3XyePvtt+N1h2srobLwoJJbPoj417/+NQwfPjyuzsUpDLQwaM/APm2OfKgbhHd85ZVX8uxq01XrYjN1o5Z5NsHXsbRDykGbyg1mXEMQsnHeud7Cn2sf19+q1qqAq3jdbnSsnNshY8R0lLVe20rip48//jgg0CtaM9fmdC9FhME5x+sO9Z1rIe2DsKjw5F7COgYoBg4cGGaaaaZYp7ge/fGPfxzrmoIoa/LJJw9cd1LIvryc22+/fdwHyy6//PJwzz33hP333z8eM/cr7jff//73w6BBg+K1Be9z3RnXKzzOYfQZKC+eZuDIec77EZ2sl+22kWav82uvvXasH1yDuG8Syg4xDuEnYVjPYME1ij4ExrWLe+rDDz8cRowYEfJrAB6VEM9R5xdccMEo0mF/cKwXKrfZ6+tyyy0X98G1iesZ3p24znJuqDvcH2mjDOxWtSrXzHqDm8VrCO1wgQUWiNds+qK0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I2AEjIARMAJGwAjMLgRM4OpZHiZw9QTKjxkBI2AEjIARMAJGwAgYASNgBIyAETACRiBD4PGPf3yz4YYbNgsuuGBz9913NzfeeGPz5z//OXtq/j19zGMe06y++urpBW699dbml7/85ax8mfkln7MSPGfKCBgBI2AEjMA0IbD88ss3iy66aPO73/2u+d73vjdNqThaI2AEjIARMAJGwAgYgdmOgAlcPUvIBK6eQPkxI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBHojYAJXT6hM4OoJlB8zAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGoDcCJnD1hMoErp5A+TEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEeiNgAldPqEzg6gmUHzMCRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkagNwImcPWEygSunkD5MSNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYAR6I2ACV0+oTODqCZQfMwJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRqA3AiZw9YTKBK6eQPkxI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBHojYAJXT6hM4OoJlB8zAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGoDcCJnD1hMoErp5A+TEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEeiNgAldPqEzg6gmUHzMCRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkagNwImcPWEygSunkD5MSNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYAR6I2ACV0+oTODqCZQfMwJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRqA3AiZw9YTKBK6eQPkxI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBHojYAJXT6hM4OoJlB8zAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGoDcCJnD1hsoPGgEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEpgeB//7v/24WXHDBZoEFFmge9ahHpT+Odd431QXWWmutv/R92M8ZASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMQNOYwOVaYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARmEcImMA1j4B3skbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYARO4XAeMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMALzCAETuOYR8E7WCBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgApfrgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGYB4hYALXPALeyRoBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBEzgch0wAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAjMIwRM4JpHwDtZI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyACVyuA0bACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYgXmEgAlc8wh4J2sEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETCBy3XACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASMwjxAwgWseAe9kjYARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACJnC5DhgBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBOYRAiZwzSPgnawRMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAELtcBI2AEjIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIzAPELABK55BLyTNQJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRsAImMDlOmAEjIARMAJGYD5H4OUvf3mz+OKLNz/72c+as846a9a+zQYbbNA89alPbR544IHm/PPPn7X5dMb+isCaa67ZLLPMMunkq1/9avP73//e0DzMEfjHf/zH5nnPe17zl7/8pTnmmGNm5ds+5jGPabbaaquUtyuuuKL58Y9/3GyxxRbNQgst1Nx2223Ntddem+6tsMIKzWqrrZaOTzvttOZ//ud/mgUWWKDZeuutm7/5m79pbr311ua6666btndceOGFm0033TSlefnllzf33ntvSmudddZpllpqqeZXv/pVc+65505b+ptttlnzd3/3d82dd97ZfOc732le+MIXNs94xjN6p/v3f//3zYYbbpjyd+mllzb33XfftOXVEY+HQG3fSl38h3/4h+b+++9v0PHjCu2S9hnb4bhxOvz4CNTWj/FT7hcDuvtVr3pV86hHPSrpROnKfqH9lBEwAkLgmc98ZrPGGmuk06uuuqq56667dKvq1+OAKthSoJLeXXnllZu11lor3T/66KN7R942nuwdwYQenB/mCLwqOK+yyirprb/85S83/+///b9qBGZy3lCdyRkMWKrXM5j8jCZVmq+1tcVHEi4zWgiPkMRG6SzWeldcccXmSU96UnPZZZc15513XvP85z+/WW655Zrf/OY3zTnnnDNfIsW6xMYbb9wsscQSab3kfe9733z5Hs60ETACRsAIGIHpRMAErulE13EbASNgBIyAEZgBBD796U83j3vc49IE/q1vfeu0p4iBdumll07p3H333c0f//jHXmkqn7/73e+affbZp1cYPzTvEPjwhz/cYLxBDjjggEQQVG5YMFpwwQWT4f8///M/ddm/8wkCbeX3T//0T81KK62U3mK33Xabkbdpy0tb4ksuuWTz/ve/P91mwfLUU09tPve5zyXj/49+9KPm4IMPTvfe9KY3pcVNTvbbb7+GSc/f/u3fNkcccUS6//3vf7/52Mc+lo75x+LhE57whPTcJMhKLKySB+RLX/rSFFnr3/7t35onPvGJzR/+8Idmr732Sven499nP/vZRFS75557mgMPPLA55JBDmsUWW6z505/+NJWvrnRf8pKXNDvttFN65KSTTmouvPDCrsfnm3tPfvKTm0UXXTQZ9G6//fb5Jt9dGa3tWz/4wQ8mUvWk+mQZpCFH0n9YZgcCtfVjpnIPifAd73hHSu7EE09sLrroopFJ145DR0bsB4zAfIzA61//+gbSAcIHPWecccbU29SMcR6u44ApUKbxoKR33/jGNzZ8HIMMGWO3jSenK/tt4/L5YY4AJjGfe+65Z/PnP/85QVUz/uuaN0wX/rM53lK9ns35HSdvpflaW1t8JOEyDqYOW0agTWfx9Hvf+970AZZC8vHZoYce2nz0ox9tFllkkd7zeoWfLb+Q1li3hiQrGdIvKox/RyNQ0/eNjtVPGAEjYASMwEwhYALXTCHtdIyAETACRsAITBMCWjTiC6yZIHBtueWWyeMNr/OZz3ym+e53v9vrzZTPSRmLeyXqh6oRaCNwQeqScf7qq6+eIsRUJ+SAM4pAV/nFBcSZWETryksbKHiV+sQnPpFuQ96CxCWyUiRlDSVwQezCUAMhERzGlbZF/pJBYNy0SuHRzZAcIClB1NECcF/9+3A13P7rv/5rs+yyyyYvc294wxtK0M1312r7VhO45ruirspwbf2oSqwiUA2Bq3YcWpE9BzEC8w0CXQSumjHOw3UcMBMFWtK78wOBq2tcPj/MESjbmM9I4KoZ/5nANXdrKdXruZ94+JyV5mttc7tHEi4PnxKePW/SprPwGM4ahwQD7iWXXNLgWXx+J3DtvffeU57S8ZL+29/+tnnb296mV/XvBBGo6fsmmLyjMgJGwAgYgTERMIFrTAAd3AgYASNgBIzAvEZAi0bzgsB12GGHTW1ZNgqHV7ziFWmrx1/84hfNmWeeOepx35/HCPQhcLE1W1xYmsdZdvI9EIjGmbz84gLiTBO48ry0vQpfah511FHp9uc///nmW9/6VoMeeuxjH5t0EcdIicBF2F133TV5j7v55psbtmCU1Bg3Fbb027bIXzIIlMKPe+2Tn/xk8ih20003Nf/+7//evPOd72zYVvLXv/51rwXSpz3taQ1bNiBs1cBWlQ8HeTguYtb2rSZwPRxq9Oh3qK0fo2OezBPjEriGjEMnk2PHYgRmJwKTJnA9XMcBM1F6Jb07vxG48nH5/DBHoGzZ6lFbqLMdvLZQrBn/dc0bZqIezbY0SvV6tuVxUvkpzdfa5naPJFwmha/j+T8E2nTWc5/73ORFnCevueaa5vDDD58KtOmmmzZLLbVU88tf/nIub5tTD8zyAxHQ/vKXv6Q1G3lKnOXZni+zV9P3zZcv6kwbASNgBB6mCJjA9TAtWL+WETACRsAIPHIQmF8IXI+cEnl4vKkJXA+PcszfYn4ncPE+ELgwqsgDoMhKl112WXPsscemVy4RuHIs4vnDjcDF9pC4zJeXvH333bdZddVVGwi0kLkeqeJFzP8reRO4/g8LH807BEzgmnfYO+WHFwKTJnA9vNCZ929jAtewMuiarwyL6a9Pe/xXg9ojN8wQAtcjFyW/+XQi8IIXvKDZY489UhJf/epXm6985SvTmdyMxq32BXELT4mW6UPAfd/0YeuYjYARMAIzgYAJXDOBstMwAkbACBgBIxAQWGWVVZr11lsvXbnooouaW265Jdxt0kQdl9lMaI888si57i222GLNtttum659/etfb+68884mErj++Z//uVlnnXUavhB8+tOfntxR8wzbjN17771zxaWTpZdeutlmm22Sd6yFFlqo+dOf/tTgzevKK69szj///KkvV9m67DWveU2z5JJLNuQDIc6f//zn6cuv++67T1EWf/k68SlPeUrzk5/8pPnmN7851zMQDXbZZZcU9xOe8ITm97//ffMf//EfKQ+QMiwzj0CJwPXa1762YUH92c9+dsoQA8lbb701fRV41VVX9crkwgsv3Gy33XbNcsst11Cn5Db9Bz/4QfLMRpxRXvrSlzZLLLFE8gB08cUXN2ussUaz9tprp23Q2A6O+v3FL34x1dlJhItxvPCFL0xfctOWIAzdddddactQvkrni8GSDH0/Fud4J9rcCSec0HC++eabN8Tzuc99rsGDEjKJNjKq/PKv6yH8gAGem/iC/Z577mloj23bpg5591F5KWGra+DyqEc9Km0fQL3RV5x4ijrllFPSYyUCF2HQMwhfsuKFa+ONN26e9axnpa/1KWPe8/rrr2/QZ2eccUZ6Vv+os+uvv36zzDLLNI9//OPTM9/73vcSJuisKG1faWvB8g9/+EOz1157pSDEh7cr6tRJJ52UtnJk66LVV1895Qe80Zl4z6JvYPuwlVZaKelTvrwFg9NPP31KVxPpIYcckvQ0Wy0cf/zxze67796stdZaSf++5z3viVktHvNV74YbbpjusWjM1pJRyN+LX/ziVC/B9YEHHkj1g7aYt+EYLh4TjnJC8KSGLtliiy2aFVdcsXnqU5+a4rzjjjuKekHx8HUy+aRfetzjHpf6PMqO7SWi17CVV145lR240c8h1157bepnjz766OZ///d/FWXn75prrtlstNFGCXu21qHcKYNvfOMbDXWhj0x6DNDVt4IxZcX702+TV96b/p16AM5t22oOqe+8NzgilCP9B97uaCe0KQiSJZ05CosUYfiHIYM2QP7RjWyDST4Zh3zoQx8KTzZJd/FV+xD9Td149atfneJE51IvaHcXXHBBw3itJH3rYB6WcIzXaGukQb/y7W9/O53jPeS//uu/kvc7wo3TVkr1g2uM/UYJ+TrxxBPneoy8bLbZZg3EK+oUY1V0EGVC2bfJM57xjGbddddN+hZde9ttt6X3ffSjH9284x3vSMFIqw1nHhgyDh2az1F9MXpt0nq6Dav8+iabbJL6g8UXXzzVf8qFsQ945X0P46VXvvKVKYovf/nL6XnaImVF/821PtJ3bpDHRTlvtdVWqd3R/v/4xz8m4jDpxvoxJJ/kfeutt05xPulJT0px0uYvvPDCpjT23H777ZtFF100bSF87rnnJh1Im6KfoO8FO8YLd999d8r+E5/4xGbnnXdOx8w96D9KQjks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YzLPQqZryJSM/2TW/35XnrfnXXetc/beZ59z3/fe3/P5vO85Z++11177u9Z61vA8e61pVl555f8EiQiIgAiIgAiIQGUCRx55ZAx7xx13hO985zvx+1prrRU+/vGPx++//vWvwwUXXBC/b7zxxuEDH/hA/H7YYYeF6667Ln5/97vfHT7zmc/E73/5y1+CxRkPvPZvmmmmCZ/4xCfC9NNPHyZMmDAU5/e///0w88wzh+effz7suOOOQ5dYHD5du+yyS1hiiSViGLvf0AUTv5CmN7zhDeFf//pX2Gmnnfyp8La3vS0ccMAB8dgtt9wSfvCDHww773985CMfCTPMMEMg3PXXX+9Pjfjvm2yySXjrW98a7rvvvnD++ecPS+/rXve6mMdvectb4vHjjjsu/OMf/whwRW644Ybwox/9KH73/8i7n/3sZ4HrX3rppfC5z30unm47P4j/5z//eYz78ccfD1/96ld9Moa+r7/++mHs2LHh3//+d/jtb38bj88222xD5feqq66K6bULuqVzpplmGioPt956azj44IPjpf46nplnR2A044wzhmeeeSZ86Utfisf8v3XXXTdsvvnm8dCvfvWrcOGFF4Ytt9wyrLnmmvHY4YcfHq699lp/Sfy+zz77hPnmmy9+9/VrkoDuQKlOEqRbOjfYYIOw6aabxtgsneutt1746Ec/Go95FvHAa/+snv3nP/8J22yzzdCpTmkZCpT5YukkP7/whS+E6aabLmy11VaBcnfllVfGeugvo/x+97vfDdNOO208vP3224cXX3zRB5nku8/LnO4YM2ZM+PGPfxyvs+dG13AdUrdudCqPMcLMv7e//e3hK1/5Sjxz++23h4MOOmiSUDvvvHNYeuml4/Gvf/3r4ctf/nKYffbZA3nxxS9+MdaJ9CJ0OTodOeOMM8Ipp5wS9fBPf/rTeOzGG28Mhx56aPxu/9773vcG9CByzDHHhEsvvdROxU9fVo0nur3tOL/97W/35fl4iF133TUsvvji8Xm23Xbb8Morr8TvpTaJk74cEQ7+CG3aN7/5zfi9yr+f/OQn4fWvf324//77w3777RcvIa4ll1wyfk/1Xze2XJR7nqb8iI/6hT6mHpJO002kl98rrbRSgBti519++eWw3XbbxWP2z+p3HX1p1/by6XUu6UKvUE8++9nPxk8ft2f36quvxmc3feTD+Xy4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PR/1EuMfWzLhHIJTje+bk0f0EylD9EW8dCqDPpx9HyQX6gCOLzkDpaWn7idjYV5UwtnR96PrxkN4VufE6RMnXbjgNEc9oI+OcbuuoAvQgfSxGefhuFOlnah7n6bh0RWMZSlL9957b9Snnfr+jEkoXzg8MGZEP3QK3yldTdvCbtf1o03DoZbVVBBrQ6qM25uMs7lHpzo8qHaEdIw06cezd2Ld9Pn7kc5+xJk+Hzqv6dwEcdXVJ23q7vRZ6v5u0me1ORT0IXOAtBM4fJnQjjCfi9MuK26l87kWbnJ/km+UL3uBiLkpXp5C0tVtq6S1Hzq4yn3bCtNJJwyiHrb1HIpHBERABERgdBFgTMXYkT4JfTL++G6/qz6NtlCsSkrhREAEREAEREAEREAEBkaAySZW50BwQvPbDVkibOs0jDCscNDEGGNx6VMERKA/BPyqTr/85S/DRRdd1J8bKVYREAEREAEREIGBEbAth3Mrjw4sEbqRCIiACIiACEylBFj90V40wKE6la233jqu+sbxgw46KNx+++1pEP0WAREQAREQARFomYAcuFoGquhEQAREQAREQAREQARGDgHeyLZtO1mNgxW2/DYqbDmz6qqrxgTzNv3+++8/chKvlIjAVE6A+ssbymydyvamrE7DaiPbb7/9VE5Gjy8CIiACIiACo5/AaqutFthWjj46242ykq9EBERABERABERgcAQOOeSQoe1z2YKXlRRN/HbU6Za4FkafIiACIiACIiAC7ROQA1f7TBWjCIiACIiACIiACIjACCKw7777xu3wSBKra7G1DEuds8UlbxoiOInsueeek2xtFE/qnwiIwGQhsO2228atPFke2uTMM88MJ510kv3UpwiIgAiIgAiIwCglsMIKK4R11lknsLKmbdU0Sh9FyRYBERABERCBUUlgs802C+uvv/5Q2tnumy1hmS/jBSqEebRDDz00bn0+FFBfREAEREAEREAE+kZADlx9Q6uIRUAEREAEREAEREAERgKB6aefPuy9995h7Nix2eTIeSuLRQdFYLITwIFrpZVWGkrH/fffH/bbb7+h3/oiAiIgAiIgAiIgAiIgAiIgAiIgAiLQnMA222wTVl555eBfnLLYcN467LDDwvXXX2+H9CkCIiACIiACItBnAnLg6jNgRS8CIiACIiACIiACIjAyCMw///xh9dVXD3PMMUdM0N/+9rc4CfXggw+OjAQqFSIgAsMIjBs3Lm5xypZKt99++7DtHIYF1A8REAEREAEREAEREAEREAEREAEREIFGBGaaaaaw3nrrxRcfx4wZEyZMmBBX3GLeDCcuiQiIgAiIgAiIwOAIyIFrcKx1JxEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREYRkAOXMNw6IcIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIDI6AHLgGx1p3EgEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREIFhBOTANQyHfoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIjA4AjIgWtwrHUnERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERhGQA5cw3DohwiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAgMjoAcuAbHWncSAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQgWEE5MA1DId+iIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiMDgCMiBa3CsdScREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERGEZADlzDcOiHCIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACAyOgBy4BsdadxIBERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERCBYQTkwDUMh36IgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIwOAIyIFrcKx1JxEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREYRkAOXMNw6IcIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIDI6AHLi6sH7zm9/cJYROi4AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEA9Av/3f/8XL5ADVxducuDqAkinRUAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEahOQA1dFZHLgqghKwURABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABCoTkANXRVRy4KoISsFEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQqE5ADV0VUcuCqCErBREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEKhOQA1dFVHLgqghKwURABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABCoTkANXRVRy4KoISsFEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQqE5ADV0VUcuCqCErBREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEKhOQA1dFVHLgqghKwURABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABCoTkANXRVRy4KoISsFEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQqE5ADV0VUcuCqCErBREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEKhOQA1dFVHLgqghKwURABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABCoTkANXRVRy4KoISsFEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQqE5ADV0VUcuCqCErBREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEKhOQA1dFVHLgqghKwURABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABCoTkANXRVRy4KoISsFEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQqE5ADV0VUcuCqCErBREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEKhOQA1dFVHLgqghKwURABERABERABIYRWHnllcOcc84Zj5166qnhP//5z7DzuR/TTDNN2HDDDcN0000X7r777nDzzTfngrVyjD7OWmutFbjnVVddFR566KEY74orrhjGjh0bnnnmmXDBBRe0cq+6kQySQ920dQuf4/fWt741rL766vHSK664IjzyyCPdoul4ft111w2zzz57eOyxx8J5553XMeyUcHLxxRcP/CGnnXZaePXVV3t6rEHzW3jhhcNSSy0V03z55ZeHRx99tFL6V1111ZjPTz75ZLj44osrXaNA3QmgXzfYYIMw7bTThuuuuy7cf//93S9SiKmGwHvf+96ob2adddYwZsyY8Pzzz4enn3463HPPPeGPf/xjePHFF6caFvagSy65ZFhkkUXCs88+O8W0OW9729vC2muvHR+Rvk7Vdrnt9twYT02f0sG95fbMM88cxwrEcuGFF4aHH364twhH4NUjfQy14IILhmWWWSaSO+OMM8LLL78cv+fGAIPCu8oqqwT0Wpvjx37E2SaP9dZbL8w444y12ibrkzOWOP300yuNz9tMM3FRTkjHE088Ec4+++y2o+8a35Q+vhg3blzgGZHf/va3kyWPu2bCKA/Qy1zN+9///jDTTDOF22+/PY7D+oWipKfbLP9N+5L9euY24u0lb3P3nxIZ5Z5Tx0RABERABESgTQJy4KpIUw5cFUEpmAiIgAiIgAiIwDAC3/jGN4L1I77yla+EV155Zdj53I/pp58+HHTQQfHUHXfcEQ4//PChYDiDMUn973//u7KhcejizJd3vOMd4ZOf/GQ8g1OMOWvtv//+cVLthRdeCLvttlvmyv4f6sSh/3fv7Q45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U65MnnNtlrnR4JAzJTlwffnLXw7zzTdfdOD60pe+NHkKUA93HQ3lpYfHq31p3T4LL3+wwiEOADgvtCH9iLONdBFHJweufrVpcuBqK/fK8fg+QhsOcawA6VdoxqGHlZJZqW5qkVJ9aJv1SOI5Why4cLrea6+9Irrrr78+HHvssSMJ46hNy2jvD41a8Eq4CIiACLxGQA5cFYuCHLgqglIwERABERABERABEahBYEp14DrqqKMqbetUA5WCViTA1g4YXljq/6yzzhq6qjTpOhSgD19KaenDrRpHiTPbW97ylmio/OpXv9q3lWmqJrCpA9doYF2VwUgP542hU7uuYxtgVvZLZaeddorby3Cc1QlYlTGVZ555JqyyyipaRSkFU+F3XQeuZZdddmhlP5yd+rWF4iDbGW8wlANXhUIz4CBtljm2xNt8883D6173unD77beHa665ZsBP0/12cuDqzmhQIUZDeRkUC+5Tt8+y0korhY997GMxid/+9rdbWbW3H3G2xXCkOHAxdqMvj1x00UXh73//e1uPWDmeun2LyhFPhoBt83z7298ett122/gkvKTGy2pTm5T6eG2zHklc5cA1knJj8GmRA9fgmeuOIiACIuAJyIHL0+jwXQ5cHeDolAiIgAiIgAiIgAg0JCAHrobgdFltAqVJ19oRTWEX2ApCbCnG1mKTW5o6cE3udE9N969rDJ2a2Nizss3I7LPPHn8efPDB4YEHHrBTwz7lhDMMR+UfI9XIOsh2RmWncnFRwAEQkAPXACDrFo0INOmz0G7jMHnTTTcFHNXbkH7E2Ua6RooDVxvP0mscI7Vv0etztXH9csstF7beeusY1dlnnx34m9pkkH28kcJWDlwjJScmTzrkwDV5uOuuIiACImAE5MBlJLp8yoGrCyCdFgEREAEREAERGFUE5p133rDhhhuGOeaYI4wZMya8+OKLgY7htddeGy6++OJJVqfYeOONA0uT33vvveGCCy4IGA6XXnrpMOecc4YXXngh3H///fFt2ZKRep555gm8fbzggguGaaedNtxzzz3hqquuCq9//evDjjvuGNnV2S6NC0jDyiuvHGaZZZYYJ1tdsMrJKaecEljWH1liiSXiCid8v/nmm8PVV1/N10mElQ1YReVf//pXOOGEE4bOV7nHm970pvCRj3wkzDXXXEMG+4cffjg89thj4cwzzxz25jbPvs466wQc1zDu4zRz5513xtUUYJKKcZ8wYULki4GMZx47dmx8M/kvf/lLfC6uI87VVlstjBs3LuYfby5fcskl4a677kqjLf7u5/14Xsrc3HPPHbcc49lh9Oc//zmWuzRRlpa6ZY63tymrDz30UHz+8ePHx3JHeWVVAlZeueWWW2K+kD9e1lprrViuqRdsFcEKOZRtyubzzz/vg8ayv8EGG8Rjp512WgxPOeI5r7zyysCxNC0Epu5x/JVXXgm/+93vYvldc801wwILLBDLIExYYePcc88ddj//Y4011ghLLrlkmHXWWQNljfvdeuutgcl1ygZpxuj0/+ydCdgtRXH+x7+JS/QB44qoeBEia1BBFNAoiIIgF1AERHABEcGIe6LgHhU31CCIgODCIotKUFBEFkFAEJSgKIsREVcEBfExmsQk/u+vue+X9/btPmemzzl3rXqe75s5Mz093dXd1TVVb1ePok022ST1GY5st/PnP/855fOHP/whld2fnTZfPO/8vBXAVeI14+3FL35xegXbfNx4443dtttu26299trdAx/4wO6OO+5IMo1IbZIZJEYu7bnnnqm/wMdStJNtttmmQ67deuutafsQzrkG0cdOPvnkJBvThYX/4DX9kK0qaSPGZx/qI4cmlXXwhPHJ2LnnPe+Z5oNbbrmlO++88xKPKOfyKOsYx89+9rNTX+ebnrb59a9/neQi277Q72dBrQAu5jCicq2zzjpJHvzqV79KY5t2qNGqq67abb311t28efOSPEFuIUMuv/zyVNfac6OuE2nhCU94QpIn5Md2JMyfzHP0YebKCxdEyMiJ55BPpEO3QJ7Qj84888xiFDI9v/HGG3dPfepTUzRA5NEf//jHtH3V+eef333/+99XsrnjUCcrshGeoq+gIzhNo4/Map7xcubnyIVddtklXSYC19C+AzgBuUmkKLYBZX6kvZhTvvSlLy2iuwCAYG6BvvCFL6QIl+mH/SMaHUAACJ3la1/7mt3tusc//vHpXegAEPoi8vWqq65qGoeM5/nz56e58z73uU8a28hxdKpcpi9SkMIP9FPmVOrPvMxYgr/oVeiW6KvMs+gtyEj4xpxNH6d/Mz6YY5xKfa51TuI59Ezo6quvTuObc+kTyDG2yKIvU+6NNtoo8YMoKcwzjGHu0Y6PfvSjk+5w++23J17R1qWIdEP6B2Vp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/evukksuWSyNX7jf/e7XbbnllunS9ddf3/EXtPJy4AlPeELqt7fffnv3la98JTHiAQ94QPd3f/d36fzyyy9P/a+FQ3/xF3/Rbb/99qlvXnXVVd1PfvKTlmzimRlw4KlPfWr313/916lNaJsVjR75yEd2T3rSk1K1Tj755O7Pf/7zilbFqE9wYBEO7LTTTh36wFD6z//8z+7ss89OesjWW2+dHr/gggt6y/1pzRdDy90nPfx41rOe1TEXoUNdc801fR6LNMsIB6bZfswHD3rQg5JeftFFF6Uarrvuut3GG2+czj/zmc/0rnWtzz/qUY/qNtpoo5TPWWed1f33f/93GpNLuw+W6t67sks5IX1g9913T3rktdde21199dVLuUTx+uDA0uPANGXi0qtF+5sf+9jHdptsskmHDP7lL3/ZnXDCCe2ZLYUnl9f222GHHZIe9c1vfjPxfRqsm0We0yhXngd9bosttkh97r73vW+a13/3u98lHZl5vmSby/OI34ty4GEPe1i31VZbpe8OxsShhx66aIIBv7Chtny7DHhFJA0OBAeCA8GBpcCBAHD1ZHoAuHoyKpIFB4IDwYHgQHAgOLDScuBv//Zvuxe/+MXd3e9+9yoPAA/gED3zzDMXS/Pud7+7u8997rPY9dKF2267rTvuuOMWcaxiTHrXu96VkqPkvuUtbyk9OncNIweALwhnJvkFrbwcePOb39w98IEP7P7whz90Bx98cGIE4K1ddtklnX/+85/vLr744iYGARB629velp4977zzOgydKxKtttpqCawJ7wBZLk/0/ve/v7vHPe7R/fznP+8+8IEPLE9F71XW5z3ved1mm22W0r7uda/r/ud//qfXc5EoOLC8cuCf//mfm4v+6le/OoF2JfcBs1xxxRW98pvWfNHrZQMT/eVf/uWcfPvBD37QHXnkkQNziORLkwPTbL/3vOc93b3vfe/uj3/8Y3fQQQelar3gBS9IYAB+MAb6Uq3P8y2Asxd605ve1P37v/97N6oOS0qHKNW9b11L6ZZUuXm38+/73/9+9/GPf7xUpLgWHOjFgVVXXTUBMfguv+mmm3o9sywl8vGwss1pO+64Y/e0pz1trjn62DzmEi8jJ8tr+2kOYcwcdthhU+HmLPKcSsEWZsKCxwMOOGDkIkuS/uhHP+qOOOKItOBymu9fUfMCOP+yl71skQUn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fpkj4Ag4Ao7AqCHwute9rlpmmWWq+++/vzrvvPNGLR/dHrzRRhuFfD744IPVxRdf3O1yPz/GENh8882rxRZbrPrDH/5QXX/99Y1zv95661WTJk2qHnjggeqcc87pet9qq61WTZkyJVz3ox/9qOv1g7zguc99bvWqV70qPGLWrFnVvffeO8jHjdm0F1lkkWqLLbaoFl100WrOnDnVDTfcMGbLMtIZf8YznlFttdVW1XLLLVctvvji1cknn1zdcccdI50Nf15DBF784hdXkydPrh5++OHqwgsvbHhX/WWDSLP+id3P0pfR+U996lPDxdgef//732tvfMpTnlJtueWWFZ+I68xauAZ2ciyOW69+9aurF7zgBdVf//rX6txzzx0YNk0SXnbZZavXvOY14dKZM2f6uN8ENL8mILDSSitVzIWQk046qfrf//4Xvtf9K53jjeU51zDoqNI5TV1d+rmFG4FhaNcLdw146dsi0NZH0zb9hf36sTxO5+oOvxi6rkSwqfF1lNjY41W/pmyRXFk33njjaumll67++Mc/Vtdcc01JFfg9joAj4Ag4AkOEgBO4GlaGE7gaAuWXOQKOgCPgCIwaAl/5ylfCZPdvf/tb9ZnPfGbg+YCks8IKK4Tn/OlPf6oef/zxRs9UPh999NFqn332aXSPXzR2EPjOd74TMguB6+CDD26ccdrs8573vOof//hHte+++3a9793vfne1zjrrhOv23HPPrtcP8gKcVNttt114xE9/+tPq0ksvHeTjhj7tJZdcMjjtCErOnTu3k9+nPe1p1YEHHhh+33rrrdWhhx7aOedf8gg8/elPr770pS9VfEpOOOGE6qqrrtJP/xwyBKxO+OIXvxgIJ71mcRBp9ponSJlf/vKXqyWWWCIkddttt1Xf+973apN9+9vfXk2dOjVc85///Kfab7/9qscee6z2Hj/ZfwRsexor49bnPve5aqmllgokQdrNSMiECRNC+8Y2seRsix8k8iuuuGIksrNQPyNnW4w1UKwO3GuvvSr0YDfR3KntHE/39TrnKp3zdStX3Xnbx0ZLR5XOaerKNRrnRqP+RqOcI/nMiRMnBiI6Lx499NBDjR89DO06l9nSMuXSG+vHS/tN6X3DildbH82wlmM081XXJvo1To9m+eJnMzd85jOfGR9u9Pu4444L98q31sbGHmb92qjwmYtStkiurF//+teDzwj/vPxumWT9sCPgCDgCjsAYQMAJXA0ryQlcDYHyyxwBR8ARcARGDQFN/ts690sz/MY3vrHiDznmmGOq6667rlFSymevwYRGD/OLRhyBlIOhSSbaOgedwNUE1dG55uMf/3j1whe+MKwq8bGPfayTCSdwdaBo9QWiIu0dgRSHjj/xxBOrm2++uVU6fvHIIcDqUjhNWZnq6quvro4//vieHz6INHvO1LwEWBlst9126yR1yCGHVL///e87v+0X3hZG10P8Qk477bTqkksusZf49xFCIOf4H6HHFz1mNAhc9GPGLlbTmz59eiffFr82waVOAv6lNQI526J1QqN8w1gkcJXO+XqB2vYxJ3D1gmQV5uslc/benjp+78aW2X///UMBf/vb31Y//OEPGxd2GNp1KrO9lCmV3ng4Vqr3Su8bVsza+miGtRyjma+6NjEefaNf+MIXqmc/+9lFkDuBa0HYUv7V3FjiBK4F8fMjjoAj4AiMZQScwNWw9pzA1RAov8wRcAQcAUdg1BDQ5H80CFw/+MEPGm+XxzYgbD3DFjhnn332qOHlDx4MAikHQ5MntXUODhOBi/ZMu0Yuuuii6q677mpS5HF7TS7ICmmDwCWkFshHvoJUsyaw4447Vq94xSvCxQSJCBa5DD8CO++8c7XGGmtU//rXv6q99967LxkeRJr9yNguu+xSrb766iGpOhsEHLRy53333VcdcMAB/Xi8p1GAwFgct5zAVVDR4+iWnG0x1oo4kgSufs25bPC5zZyvl7oZBh1VOqfppdyDuHc06m8Q5RiWNHshOw1Du07h2EuZUumNh2Ol/ab0vmHFrK2PZljLMZr5qmsT/RqnR7N88bOf8YxndFZntuemTZtWsZoqcvTRR1esEhXLI488Um2wwQad1e3bvCQxrPo1LmPb3ylbJFdWJ3C1RdevdwQcAUdguBFwAlfD+nECV0Og/DJHwBFwBByBUUNgrBC4Rg0gf/CIIJByMDR5cFvn4DARuJqUb2G6ZrwEWYelzt73vvdVa621VshOv7bjG5ayjed8QFQScYu3ia+55pqeizuINHvO1LwE2N4TMtaiiy4akjvnnHMq/qy8/OUvr3baaadwiJXk2BYUIreLI9AUASdwNUVqfF43XmyLkSRw9asl1AWf+/WMYUyndE4zbGVZWOtvUPUwHslO47FMvdZ/ab8pva/X/A7q/rY+mkHlYyynO97aRGldsP35MsssE27/5je/Wd15553JpOzqUm0IXMnExsHBNraIE7jGQYV7ERwBR8ARMAg4gcuAUffVCVx16Pg5R8ARcAQcgRIEVltttWrDDTcMt/7qV7+qbr311vmSec973hOCoazeEW+/xMR3q622Cteff/751R//+MfKErg+//nPV+utt14I+hPw/cc//hGuueCCC6q77757vufox4orrlhtscUW1fOf//xq8cUXr/75z39WGAps/3TxxRdX//3vf8Olz3rWs6q3ve1t1XLLLdeZgN9zzz3V/fffX5111lnVvffeqySTn7xlhpOQfMRbJy211FLVW9/61pD2M5/5zOqxxx6rWKWDlXp+85vfJNNbGA/yVttb3vKWauLEieEttv/85z+hrsDzsssuS0LCSjCvfvWrA7bUL22CujrzzDMXePuNYPy73vWusM3V9ddfn1wp6fWvf331ghe8INTPjBkzOs+sczCwBdgrX/nKirZPG37wwQfD1pu0sU984hPV8573vJCvfffdt5Ne7ktM4MLRM2XKlLC6G33mz3/+czVz5szabebAjz7Idn9LLLFEuOfGG28MbY2211SWX375gC3XQ1p46KGHwq3bbLNNaOtz584NK3NBYJg6dWrF9azS9etf/7q64YYbwrVsQwY2K620UuhrnKc+b7vttnBe/7bbbruwndPs2bOrW265JaS39tprd/DkGHUKQSIlTft5fC965E1velNYPQes0A+QL37+859Xf/jDH8Ll0mkveclLKtooQvuhPnC+kSd0B3Lttdd26mb99devJk+eXD3wwAPV6aefHlbyASfyympdYIEOyK08xbNe+9rXhq3c+D5nzpyALfdxnGPcm3rLM2TG/Nt4441DH8GhSP1QZ+hS2gjbvt5xxx0hj5pEmVs7X1ktC8IVmCGkBQ4QeOJ6oe74I70f//jH4fsb3vCGirkHbYk0Vl111WrppZcOaVGOxx9/vKLPsdKRpE3/5p73vve9ne39WA2N/k5/+Mtf/lIdfPDBleoEPXHyySeHc/Qx2int+4orrgj9hLpFn6PXV1555TB2oFfI5+WXX67szfdJ2Ri/uB49z9jy97//PWy7x6qMfLeivPTSPtrqS94Ofs1rXhPKzbjE28DgNGvWrICRzV/dd20hwXiHQ9UK+lCEJrCi3VL3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4xwBza3rK1Dzo3qMFEIIDBoBCFzzzz9/Jxm993eg0IEQEAJCQAi0REAEroaAicDVECgFEwJCQAgIASEgBISAEChGgC2gVl555bDAAgsEPPf89re/jYboJ554ojhOPSgEhMDwEZhzzjnDxhtvHJZaaqm4iMv2qHfccUf0CvSvf/1r+BkaYynOM888Ya211oq5uuuuu8Lf/va3MZZDZWcsI8D6zCabbBIgP0+aNCncd999sW/dfffd8lI5litOeRMCQkAICAEhUIiA5tb1wGl+VI+RQgiBQSLAeh5eAx999NH4bjJjxoxBJqe4hYAQEAJCYAIjIAJXw8oVgashUAomBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEQGMEROBqCJUIXA2BUjAhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEGiMgAldDqETgagiUggkBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASHQGAERuBpCJQJXQ6AUTAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICIHGCIjA1RAqEbgaAqVgQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACDRGQASuhlCJwNUQKAUTAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCoDECInA1hEoEroZAKZgQEAJCQAgIASEgBAaIwCte8Yqw9tprh5e+9KXhwQcfDKeddtoAUxs7Uc8xxxxhu+22C3PNNVe45557wvTp08dO5mZxTtZdd90wZcqU8Mgjj4TLL7+8dW6e97znhfXWWy8sv/zyYckllwzzzTdfeOaZZ8ITTzwRHnroofCjH/0o3H///dl4eWbVVVfN3rOLjz76aPj9738f/vjHP4b//e9/drnzu9FGG4UFFlggpnnRRRd1rucOaAfbbLNNmHvuucNf//rXcO211+aC6ZoQmGUIrLHGGp0+ceaZZ86yfCjh8YkA6y6bbbZZQNfd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y0a2KEDY3urEE0+M2wN0AupACAiB2QKBI488MpbT5hOQOT/5yU+23vZotgBrnBdyrIwHanPjvCEp+0JACAiBPiLAO/58880XP1CzaI844ojwwAMP2Gnnd4011ggbb7xx+O53vzuhP1zrFFgHQmA2QOAtb3lL3DrT3kUo8o9//ONwySWXzAalVxGFgBAQAkJgViAgAldD1EXgagiUggkBISAEhIAQEAJCYCYCRuAyMJ566qm47dEjjzxilybkrwhcE7JaVaghILDHHnuEtddee4RhxJKFvHXSSSeF6dOn2yX9CgEhMBshAJnGDCbPPPNMOOWUU8Ktt946GyEwexV1LIwHanOzV5tTaYWAEBAC3RCwd3wLc80114Tzzz/fTvUrBITABEcAAhdrFSazw8epVlb9CgEhIASEwKxBQASuhriLwNUQKAUTAkJACAgBISAEhMBMBNgODY86c845Z7jvvvsi8QKPGRNdpkyZEhZaaKHw5JNPhl//+tcTvbgqnxDoKwK8c22yySZh0UUXDZMmTYq64ze/+U24++67oweuviamyISAEBg3CGyxxRZh/vnnDw8++GCcTzzxxBPjJu/KaBkCs3o8UJsrqzc9JQSEgBCYiAiwpTvv+Y8++mj0BjxjxoyJWEyVSQgIgQoEllpqqbDOOusEtk1kbeLOO++sCKnLQkAICAEhIAT6g4AIXA1xFIGrIVAKJgSEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhEBjBETgagiVCFwNgVIwISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBBojIAJXQ6hE4GoIlIIJASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEh0BgBEbgaQiUCV0OgFEwICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAiBxgg0IXBNnjy5cXxzrL/++v9rHHocBRSBaxxVlrIqBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIATGCQJtCFzPe97zakslAlctRAogBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBB4FoGmBC7IWy94wQtqYROBqxYiBRACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACDyLgAhcDVuCtlBsCJSCCQEhIASEgBAQAkJACAgBISAEhIAQEAJ9Q2CllVYK/CEXXXRReOaZZ/oW97Aj2n777cO8884b7rzzznDzzTcPO/nwqle9Kiy00ELh0UcfDVdfffXQ0x90gksvvXQsI+mcddZZ4X//+1+jJPlic+rUqWGxxRYLkyZNCmeffXa47777Gj07kQPtvPPOYZ555gl33HFH+NWvfjXLi0o9ve51rwtzzDFHmDZtWpgxY0ajPJU+1yjyikCzuq9XZEuXxykC6667bpgyZUp45JFHwuWXXz5OS6FsC4HBIcC4sN1224W55por3HPPPWH69OmDS6zHmNuOD/PNN1/YZJNN4tj3u9/9Ltx+++2NcjCR5s+NCvxcoFmtL2dX3OvqaI011girrrpqDHbmmWfWBdd9ISAEhIAQmM0REIGrYQMQgashUAomBISAEBACQkAICAEhIASEgBAQAkJACPQNgfe///1hhRVWiPF9/OMfD//+97/jMcSSJZZYIh7/6U9/Ck8//XTf0hxUREceeWQ0wP32t78Nxx577KCSqYz3sMMOiwSlp556Kuy3336V4cbrjV133TWsv/76Mfsf/ehHw3//+9/aosw999zhkEMOCfyanH766eGmm26y09n219orBK7jjz9+luOw/PLLhw984AMxH+eee2647rrrGuWp9LlGkVcEMuxmVV+vyFbry+NRz7Yu5Dh44NOf/nRYcMEFw5NPPhn233//cZBjZXF2R2Dy5MmBLW0gHT722GMDh+P5z39++MpXvhLTueuuu8Ixxxwz8DRLE2g7Przyla8Me+yxR0yuzZhSNX8uzfd4eW5W68vZFfe69uFx2XfffeuC674QEAJCQAjM5giIwNWwAYjA1RAoBRMCQkAICAEhIASEgBAQAkJACAgBISAE+oaAX/D3BK7Xvva1gT/k5JNPDr/+9a/7luagImprtOt3PkTgGo3o2muvHd7ylrfEG3js+vvf/x7OOOOM6CVtdOjZ64q1VxG42te7YdfG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AQUUUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFFFCgtYABrpZUBrhaQjmZAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKtBYwwNWSygBXSygnU0ABBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAgdYCBrhaUhngagnlZAoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKNBawABXSyoDXC2hnEwBBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQVaCxjgakllgKsllJMpoIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKBAawEDXC2pDHC1hHIyBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUaC1ggKsllQGullBOpoACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAq0FDHC1pDLA1RLKyRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUKC1gAGu1lROqIACCiiggAIKKKCAAgoooIACCiigdw4mPAAAAw5JREFUgAIKKKCAAgoooIACCiiggAIKKKCAAgqMRuDXX3+tpk6dWu2zzz7VlClT6n8859+sWbPq1/vvv3/fhe8zb968/+07lRMooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgqMCRjgGqPwiQIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiwewUMcO1eb5emgAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCowJGOAao/CJAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKLB7BQxw7V5vl6aAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKjAkY4Bqj8MkoBQ455JDq2GOPrT799NPqr7/+GuWinLcCCiiwVwtY3+7Vu9+NV0ABBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUECBSShggGsS7rTJtspHHHFE9eCDD9ar/eGHH1ZPP/30ZNuECbm+Rx55ZHXuuedWU6dOrX7//ffqlVdeqf78888Jua7DWqkFCxZUHE+UDRs2VJ999tmwZj3y+Zx11ll1iDEv6Oeff67WrFmT32r9fN99960uvvjiavr06fV32Pcvv/xytWPHjtbzcMI9T8D6ds/bp26RAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgrs+QIGuAr38YwZM6o5c+ZUmzdvrrZu3Vo4l8nxtdmzZ1dbtmyp/v7776IVnjt3brV48eL6u3g98MADRfPxSzsL3H///RXHYZQlS5ZMqkBTrHfbx5kzZ1b33Xff2OS//PJLdffdd4+9nshP/vOf/1RLly7tuIqLFi3q+H6/N88777xq4cKFO032yCOP1L3c7fSmL/YqgdL6dtB6fq9CdmMVUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUECBIQsMK8D1f24uqiazdlIEAAAAAElFTkSuQmCC)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "O3ENsWYB27Mb" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Pk55Mjq_3DiR" + }, + "source": [ + "## Example Use Case 1 - Code Generator\n", + "### For this use case enter your system prompt and questions\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "_1SZYJFB3HmQ" + }, + "outputs": [], + "source": [ + "# enter your system prompt if you have one\n", + "system_prompt = \"\"\"\n", + "You are a coding assistant helping users using litellm.\n", + "litellm is a light package to simplify calling OpenAI, Azure, Cohere, Anthropic, Huggingface API Endpoints\n", + "--\n", + "Sample Usage:\n", + "```\n", + "pip install litellm\n", + "from litellm import completion\n", + "## set ENV variables\n", + "os.environ[\"OPENAI_API_KEY\"] = \"openai key\"\n", + "os.environ[\"COHERE_API_KEY\"] = \"cohere key\"\n", + "messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + "# openai call\n", + "response = completion(model=\"gpt-3.5-turbo\", messages=messages)\n", + "# cohere call\n", + "response = completion(\"command-nightly\", messages)\n", + "```\n", + "\n", + "\"\"\"\n", + "\n", + "\n", + "# qustions/logs you want to run the LLM on\n", + "questions = [\n", + " \"what is litellm?\",\n", + " \"why should I use LiteLLM\",\n", + " \"does litellm support Anthropic LLMs\",\n", + " \"write code to make a litellm completion call\",\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AHH3cqeU3_ZT" + }, + "source": [ + "## Running questions\n", + "### Select from 100+ LLMs here: https://docs.litellm.ai/docs/providers" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "BpQD4A5339L3" + }, + "outputs": [], + "source": [ + "from litellm import completion, completion_cost\n", + "import os\n", + "import time\n", + "\n", + "# optional use litellm dashboard to view logs\n", + "# litellm.use_client = True\n", + "# litellm.token = \"ishaan_2@berri.ai\" # set your email\n", + "\n", + "\n", + "# set API keys\n", + "os.environ['TOGETHERAI_API_KEY'] = \"\"\n", + "os.environ['OPENAI_API_KEY'] = \"\"\n", + "os.environ['ANTHROPIC_API_KEY'] = \"\"\n", + "\n", + "\n", + "# select LLMs to benchmark\n", + "# using https://api.together.xyz/playground for llama2\n", + "# try any supported LLM here: https://docs.litellm.ai/docs/providers\n", + "\n", + "models = ['togethercomputer/llama-2-70b-chat', 'gpt-3.5-turbo', 'claude-instant-1.2']\n", + "data = []\n", + "\n", + "for question in questions: # group by question\n", + " for model in models:\n", + " print(f\"running question: {question} for model: {model}\")\n", + " start_time = time.time()\n", + " # show response, response time, cost for each question\n", + " response = completion(\n", + " model=model,\n", + " max_tokens=500,\n", + " messages = [\n", + " {\n", + " \"role\": \"system\", \"content\": system_prompt\n", + " },\n", + " {\n", + " \"role\": \"user\", \"content\": question\n", + " }\n", + " ],\n", + " )\n", + " end = time.time()\n", + " total_time = end-start_time # response time\n", + " # print(response)\n", + " cost = completion_cost(response) # cost for completion\n", + " raw_response = response['choices'][0]['message']['content'] # response string\n", + "\n", + "\n", + " # add log to pandas df\n", + " data.append(\n", + " {\n", + " 'Model': model,\n", + " 'Question': question,\n", + " 'Response': raw_response,\n", + " 'ResponseTime': total_time,\n", + " 'Cost': cost\n", + " })" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "apOSV3PBLa5Y" + }, + "source": [ + "## View Benchmarks for LLMs" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "CJqBlqUh_8Ws", + "outputId": "e02c3427-d8c6-4614-ff07-6aab64247ff6" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Question: does litellm support Anthropic LLMs\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelQuestionResponseResponseTimeCost
6togethercomputer/llama-2-70b-chatdoes litellm support Anthropic LLMsYes, litellm supports Anthropic LLMs.\\n\\nIn the example usage you provided, the `completion` function is called with the `model` parameter set to `\"gpt-3.5-turbo\"` for OpenAI and `\"command-nightly\"` for Cohere.\\n\\nTo use an Anthropic LLM with litellm, you would set the `model` parameter to the name of the Anthropic model you want to use, followed by the version number, if applicable. For example:\\n```\\nresponse = completion(model=\"anthropic-gpt-2\", messages=messages)\\n```\\nThis would call the Anthropic GPT-2 model to generate a completion for the given input messages.\\n\\nNote that you will need to set the `ANTHROPIC_API_KEY` environment variable to your Anthropic API key before making the call. You can do this by running the following command in your terminal:\\n```\\nos.environ[\"ANTHROPIC_API_KEY\"] = \"your-anthropic-api-key\"\\n```\\nReplace `\"your-anthropic-api-key\"` with your actual Anthropic API key.\\n\\nOnce you've set the environment variable, you can use the `completion` function with the `model` parameter set to an Anthropic model name to call the Anthropic API and generate a completion.21.5130090.001347
7gpt-3.5-turbodoes litellm support Anthropic LLMsNo, currently litellm does not support Anthropic LLMs. It mainly focuses on simplifying the usage of OpenAI, Azure, Cohere, and Huggingface API endpoints.8.6565100.000342
8claude-instant-1.2does litellm support Anthropic LLMsYes, litellm supports calling Anthropic LLMs through the completion function.\\n\\nTo use an Anthropic model with litellm:\\n\\n1. Set the ANTHROPIC_API_KEY environment variable with your Anthropic API key\\n\\n2. Pass the model name as the 'model' argument to completion(). Anthropic model names follow the format 'anthropic/<model_name>'\\n\\nFor example:\\n\\n```python \\nimport os\\nfrom litellm import completion\\n\\nos.environ[\"ANTHROPIC_API_KEY\"] = \"your_anthropic_api_key\"\\n\\nmessages = [{\"content\": \"Hello\", \"role\": \"user\"}]\\n\\nresponse = completion(model=\"anthropic/constitutional\", messages=messages)\\n```\\n\\nThis would call the Constitutional AI model from Anthropic.\\n\\nSo in summary, litellm provides a simple interface to call any Anthropic models as long as you specify the model name correctly and set the ANTHROPIC_API_KEY env variable.9.6981950.001342
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Question: what is litellm?\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelQuestionResponseResponseTimeCost
0togethercomputer/llama-2-70b-chatwhat is litellm?Litellm is a lightweight Python package that simplifies calling various AI API endpoints, including OpenAI, Azure, Cohere, Anthropic, and Hugging Face. It provides a convenient interface for making requests to these APIs, allowing developers to easily integrate them into their applications. With Litellm, developers can quickly and easily interact with multiple AI models and services, without having to handle the details of authentication, API calls, and response parsing. This makes it easier to build and deploy AI-powered applications, and can help developers save time and effort.13.4796440.000870
1gpt-3.5-turbowhat is litellm?litellm is a light package that provides a simplified interface for making API calls to various language models and APIs. It abstracts away the complexities of handling network requests, authentication, and response parsing, making it easier for developers to integrate powerful language models into their applications.\\n\\nWith litellm, you can quickly make API calls to models like OpenAI's GPT-3.5 Turbo, Azure's Text Analytics, Cohere's Command API, Anthropic's API, and Huggingface's models. It also supports additional functionality like conversational AI, summarization, translation, and more.\\n\\nBy using litellm, you can focus on your application logic without getting tangled in the details of API integration, allowing you to quickly build intelligent and conversational applications.8.3243320.000566
2claude-instant-1.2what is litellm?litellm is a Python library that simplifies calling various AI API endpoints like OpenAI, Azure, Cohere, Anthropic, and Huggingface. \\n\\nSome key things to know about litellm:\\n\\n- It provides a consistent interface for completing prompts and generating responses from different AI models through a single method called completion().\\n\\n- You specify the API (e.g. OpenAI, Cohere etc.) and model either by name or by setting environment variables before making the completion call.\\n\\n- This avoids having to use different SDKs or APIs for each provider and standardizes the call structure. \\n\\n- It handles things like setting headers, encoding inputs, parsing responses so the user doesn't have to deal with those details.\\n\\n- The goal is to make it easy to try different AI APIs and models without having to change code or learn different interfaces.\\n\\n- It's lightweight with no other dependencies required besides what's needed for each API (e.g. openai, azure SDKs etc.).\\n\\nSo in summary, litellm is a small library that provides a common way to interact with multiple conversational AI APIs through a single Python method, avoiding the need to directly use each provider's specific SDK.10.3164880.001603
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Question: why should I use LiteLLM\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelQuestionResponseResponseTimeCost
3togethercomputer/llama-2-70b-chatwhy should I use LiteLLM\\nThere are several reasons why you might want to use LiteLLM:\\n\\n1. Simplified API calls: LiteLLM provides a simple and consistent API for calling various language models, making it easier to use multiple models and switch between them.\\n2. Environment variable configuration: LiteLLM allows you to set environment variables for API keys and model names, making it easier to manage and switch between different models and APIs.\\n3. Support for multiple models and APIs: LiteLLM supports a wide range of language models and APIs, including OpenAI, Azure, Cohere, Anthropic, and Hugging Face.\\n4. Easy integration with popular frameworks: LiteLLM can be easily integrated with popular frameworks such as PyTorch and TensorFlow, making it easy to use with your existing codebase.\\n5. Lightweight: LiteLLM is a lightweight package, making it easy to install and use, even on resource-constrained devices.\\n6. Flexible: LiteLLM allows you to define your own models and APIs, making it easy to use with custom models and APIs.\\n7. Extensive documentation: LiteLLM has extensive documentation, making it easy to get started and learn how to use the package.\\n8. Active community: LiteLLM has an active community of developers and users, making it easy to get help and feedback on your projects.\\n\\nOverall, LiteLLM can help you to simplify your workflow, improve your productivity, and make it easier to work with multiple language models and APIs.23.7778850.001443
4gpt-3.5-turbowhy should I use LiteLLMLiteLLM is a lightweight Python package that simplifies the process of making API calls to various language models. Here are some reasons why you should use LiteLLM:\\n\\n1. **Simplified API Calls**: LiteLLM abstracts away the complexity of making API calls to different language models. It provides a unified interface for invoking models from OpenAI, Azure, Cohere, Anthropic, Huggingface, and more.\\n\\n2. **Easy Integration**: LiteLLM seamlessly integrates with your existing codebase. You can import the package and start making API calls with just a few lines of code.\\n\\n3. **Flexibility**: LiteLLM supports a variety of language models, including GPT-3, GPT-Neo, chatGPT, and more. You can choose the model that suits your requirements and easily switch between them.\\n\\n4. **Convenience**: LiteLLM handles the authentication and connection details for you. You just need to set the relevant environment variables, and the package takes care of the rest.\\n\\n5. **Quick Prototyping**: LiteLLM is ideal for rapid prototyping and experimentation. With its simple API, you can quickly generate text, chat with models, and build interactive applications.\\n\\n6. **Community Support**: LiteLLM is actively maintained and supported by a community of developers. You can find help, share ideas, and collaborate with others to enhance your projects.\\n\\nOverall, LiteLLM simplifies the process of making API calls to language models, saving you time and effort while providing flexibility and convenience.12.1098810.000881
5claude-instant-1.2why should I use LiteLLMHere are some key reasons why you may want to consider using LiteLLM:\\n\\n- Simplifies calling multiple large language models - LiteLLM provides a unified API to call models from different providers like OpenAI, Azure, HuggingFace, Anthropic etc. This avoids having to deal with different APIs from each provider.\\n\\n- Easy to get started - LiteLLM is very lightweight and simple to install with just one pip install. It has minimal configuration needed with just API keys. This lowers the barrier to start experimenting with LLMs.\\n\\n- Standard interface - The completion API provides a standard way to send messages and get responses back regardless of underlying model. This keeps the code interface consistent. \\n\\n- Model agnostic - Your code doesn't need to change to switch between different models. You can easily compare performance of models from different providers.\\n\\n- Open source - As it is open source, the library can be expanded to support more models and providers over time via community contributions.\\n\\n- Cost effective - LiteLLM helps avoid vendor lock-in. You can optimize costs by testing multiple models and choosing the best suitable and cost-effective option for your needs.\\n\\nSo in summary, L12.6102590.001568
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Question: write code to make a litellm completion call\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelQuestionResponseResponseTimeCost
9togethercomputer/llama-2-70b-chatwrite code to make a litellm completion call\\nTo make a completion call using litellm, you can use the `completion` function from the litellm package. Here's an example of how to use it:\\n```\\nfrom litellm import completion\\n\\n# Set ENV variables\\nos.environ[\"OPENAI_API_KEY\"] = \"your_openai_api_key\"\\nos.environ[\"COHERE_API_KEY\"] = \"your_cohere_api_key\"\\n\\n# Define the messages to be completed\\nmessages = [\\n {\\n \"content\": \"Hello, how are you?\",\\n \"role\": \"user\"\\n }\\n]\\n\\n# Make a completion call using OpenAI\\nresponse = completion(model=\"gpt-3.5-turbo\", messages=messages)\\n\\n# Make a completion call using Cohere\\nresponse = completion(\"command-nightly\", messages)\\n```\\nIn this example, we first set the ENV variables for the OpenAI and Cohere API keys. Then, we define a list of messages to be completed, which in this case contains a single message with the content \"Hello, how are you?\" and the role \"user\".\\n\\nNext, we make two completion calls using the `completion` function from litellm. The first call uses the OpenAI model `gpt-3.5-turbo` and passes in the list of messages. The second call uses the Cohere model `command-nightly` and passes in the same list of messages.\\n\\nThe `completion` function returns a response object that contains the completed messages. You can then use the `response.messages` attribute to access the completed messages.\\n\\nHere's an example of how to access the completed messages:\\n```\\n# Print the completed messages\\nprint(response.messages)\\n```\\nThis will print the completed messages, which should look something like this:\\n```\\n[{'content': 'Hello, how are you?', 'role': 'user', 'completion': 'I am doing well, thanks for asking.'}]\\n```\\nNote that the `completion` attribute contains the completed message. You can use this attribute to retrieve the completed message and use it in your application.32.1924530.001821
10gpt-3.5-turbowrite code to make a litellm completion callSure! Here's an example code to make a completion call using the litellm package:\\n\\n```python\\nfrom litellm import completion\\n\\n# Set the model and messages\\nmodel = \"gpt-3.5-turbo\"\\nmessages = [\\n {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\\n {\"role\": \"user\", \"content\": \"Who won the world series in 2020?\"},\\n {\"role\": \"assistant\", \"content\": \"The Los Angeles Dodgers won the World Series in 2020.\"},\\n {\"role\": \"user\", \"content\": \"Where was it played?\"}\\n]\\n\\n# Make the completion call\\nresponse = completion(model=model, messages=messages)\\n\\n# Print the assistant's reply\\nassistant_reply = response[\"choices\"][0][\"message\"][\"content\"]\\nprint(\"Assistant: \", assistant_reply)\\n```\\n\\nMake sure you have the litellm package installed (`pip install litellm`) and set the necessary environment variables for the API keys before running this code.9.3771550.000686
11claude-instant-1.2write code to make a litellm completion callHere is an example of making a completion call using litellm:\\n\\n```python\\nimport os\\nfrom litellm import completion\\n\\n# Set API keys as environment variables\\nos.environ[\"OPENAI_API_KEY\"] = \"your openai api key\" \\n\\n# Conversation context \\nmessages = [{\\n \"content\": \"Hello, how can I help you today?\",\\n \"role\": \"assistant\"\\n}]\\n\\n# Make completion call with GPT-3 model\\nresponse = completion(\\n model=\"gpt-3.5-turbo\", \\n messages=messages\\n)\\n\\nprint(response)\\n```\\n\\nTo break it down:\\n\\n- Import completion from litellm\\n- Set the OPENAI_API_KEY env var \\n- Define a messages list with the conversation context\\n- Call completion(), specifying the model (\"gpt-3.5-turbo\") and messages\\n- It will return the response from the API\\n- Print the response\\n\\nThis makes a simple completion call to OpenAI GPT-3 using litellm to handle the API details. You can also call other models like Cohere or Anthropic by specifying their name instead of the OpenAI9.8399880.001578
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "from IPython.display import HTML\n", + "import pandas as pd\n", + "\n", + "df = pd.DataFrame(data)\n", + "grouped_by_question = df.groupby('Question')\n", + "\n", + "for question, group_data in grouped_by_question:\n", + " print(f\"Question: {question}\")\n", + " HTML(group_data.to_html())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bmtAbC1rGVAm" + }, + "source": [ + "## Use Case 2 - Rewrite user input concisely" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "id": "boiHO1PhGXSL" + }, + "outputs": [], + "source": [ + "# enter your system prompt if you have one\n", + "system_prompt = \"\"\"\n", + "For a given user input, rewrite the input to make be more concise.\n", + "\"\"\"\n", + "\n", + "# user input for re-writing questions\n", + "questions = [\n", + " \"LiteLLM is a lightweight Python package that simplifies the process of making API calls to various language models. Here are some reasons why you should use LiteLLM:\\n\\n1. **Simplified API Calls**: LiteLLM abstracts away the complexity of making API calls to different language models. It provides a unified interface for invoking models from OpenAI, Azure, Cohere, Anthropic, Huggingface, and more.\\n\\n2. **Easy Integration**: LiteLLM seamlessly integrates with your existing codebase. You can import the package and start making API calls with just a few lines of code.\\n\\n3. **Flexibility**: LiteLLM supports a variety of language models, including GPT-3, GPT-Neo, chatGPT, and more. You can choose the model that suits your requirements and easily switch between them.\\n\\n4. **Convenience**: LiteLLM handles the authentication and connection details for you. You just need to set the relevant environment variables, and the package takes care of the rest.\\n\\n5. **Quick Prototyping**: LiteLLM is ideal for rapid prototyping and experimentation. With its simple API, you can quickly generate text, chat with models, and build interactive applications.\\n\\n6. **Community Support**: LiteLLM is actively maintained and supported by a community of developers. You can find help, share ideas, and collaborate with others to enhance your projects.\\n\\nOverall, LiteLLM simplifies the process of making API calls to language models, saving you time and effort while providing flexibility and convenience\",\n", + " \"Hi everyone! I'm [your name] and I'm currently working on [your project/role involving LLMs]. I came across LiteLLM and was really excited by how it simplifies working with different LLM providers. I'm hoping to use LiteLLM to [build an app/simplify my code/test different models etc]. Before finding LiteLLM, I was struggling with [describe any issues you faced working with multiple LLMs]. With LiteLLM's unified API and automatic translation between providers, I think it will really help me to [goals you have for using LiteLLM]. Looking forward to being part of this community and learning more about how I can build impactful applications powered by LLMs!Let me know if you would like me to modify or expand on any part of this suggested intro. I'm happy to provide any clarification or additional details you need!\",\n", + " \"Traceloop is a platform for monitoring and debugging the quality of your LLM outputs. It provides you with a way to track the performance of your LLM application; rollout changes with confidence; and debug issues in production. It is based on OpenTelemetry, so it can provide full visibility to your LLM requests, as well vector DB usage, and other infra in your stack.\"\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fwNcC_obICUc" + }, + "source": [ + "## Run Questions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KtBjZ1mUIBiJ" + }, + "outputs": [], + "source": [ + "from litellm import completion, completion_cost\n", + "import os\n", + "import time\n", + "\n", + "# optional use litellm dashboard to view logs\n", + "# litellm.use_client = True\n", + "# litellm.token = \"ishaan_2@berri.ai\" # set your email\n", + "\n", + "os.environ['TOGETHERAI_API_KEY'] = \"\"\n", + "os.environ['OPENAI_API_KEY'] = \"\"\n", + "os.environ['ANTHROPIC_API_KEY'] = \"\"\n", + "\n", + "models = ['togethercomputer/llama-2-70b-chat', 'gpt-3.5-turbo', 'claude-instant-1.2'] # enter llms to benchmark\n", + "data_2 = []\n", + "\n", + "for question in questions: # group by question\n", + " for model in models:\n", + " print(f\"running question: {question} for model: {model}\")\n", + " start_time = time.time()\n", + " # show response, response time, cost for each question\n", + " response = completion(\n", + " model=model,\n", + " max_tokens=500,\n", + " messages = [\n", + " {\n", + " \"role\": \"system\", \"content\": system_prompt\n", + " },\n", + " {\n", + " \"role\": \"user\", \"content\": \"User input:\" + question\n", + " }\n", + " ],\n", + " )\n", + " end = time.time()\n", + " total_time = end-start_time # response time\n", + " # print(response)\n", + " cost = completion_cost(response) # cost for completion\n", + " raw_response = response['choices'][0]['message']['content'] # response string\n", + " #print(raw_response, total_time, cost)\n", + "\n", + " # add to pandas df\n", + " data_2.append(\n", + " {\n", + " 'Model': model,\n", + " 'Question': question,\n", + " 'Response': raw_response,\n", + " 'ResponseTime': total_time,\n", + " 'Cost': cost\n", + " })\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-PCYIzG5M0II" + }, + "source": [ + "## View Logs - Group by Question" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "-3R5-2q8IiL2", + "outputId": "c4a0d9e5-bb21-4de0-fc4c-9f5e71d0f177" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Question: Hi everyone! I'm [your name] and I'm currently working on [your project/role involving LLMs]. I came across LiteLLM and was really excited by how it simplifies working with different LLM providers. I'm hoping to use LiteLLM to [build an app/simplify my code/test different models etc]. Before finding LiteLLM, I was struggling with [describe any issues you faced working with multiple LLMs]. With LiteLLM's unified API and automatic translation between providers, I think it will really help me to [goals you have for using LiteLLM]. Looking forward to being part of this community and learning more about how I can build impactful applications powered by LLMs!Let me know if you would like me to modify or expand on any part of this suggested intro. I'm happy to provide any clarification or additional details you need!\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelQuestionResponseResponseTimeCost
3togethercomputer/llama-2-70b-chatHi everyone! I'm [your name] and I'm currently working on [your project/role involving LLMs]. I came across LiteLLM and was really excited by how it simplifies working with different LLM providers. I'm hoping to use LiteLLM to [build an app/simplify my code/test different models etc]. Before finding LiteLLM, I was struggling with [describe any issues you faced working with multiple LLMs]. With LiteLLM's unified API and automatic translation between providers, I think it will really help me to [goals you have for using LiteLLM]. Looking forward to being part of this community and learning more about how I can build impactful applications powered by LLMs!Let me know if you would like me to modify or expand on any part of this suggested intro. I'm happy to provide any clarification or additional details you need!\\nHere's a more concise version of the user input:\\n\\n\"Hi everyone! I'm [your name] and I'm working on [your project/role involving LLMs]. I recently discovered LiteLLM and I'm excited to use it to [build an app/simplify my code/test different models etc]. Before LiteLLM, I struggled with [describe any issues you faced working with multiple LLMs]. I'm looking forward to using LiteLLM's unified API and automatic translation to achieve my goals. I'm eager to learn more about building impactful applications powered by LLMs and to be part of this community. Let me know if you have any questions or need further clarification.\"\\n\\nIn this revised version, we've kept the essential information and removed some of the extraneous language. We've also rephrased some of the sentences to make them more concise and easier to read.18.3006200.001200
4gpt-3.5-turboHi everyone! I'm [your name] and I'm currently working on [your project/role involving LLMs]. I came across LiteLLM and was really excited by how it simplifies working with different LLM providers. I'm hoping to use LiteLLM to [build an app/simplify my code/test different models etc]. Before finding LiteLLM, I was struggling with [describe any issues you faced working with multiple LLMs]. With LiteLLM's unified API and automatic translation between providers, I think it will really help me to [goals you have for using LiteLLM]. Looking forward to being part of this community and learning more about how I can build impactful applications powered by LLMs!Let me know if you would like me to modify or expand on any part of this suggested intro. I'm happy to provide any clarification or additional details you need!User input: Hi, I'm [your name] and I'm excited about using LiteLLM to simplify working with different LLM providers. Before finding LiteLLM, I faced challenges working with multiple LLMs. With LiteLLM's unified API and automatic translation, I believe it will help me achieve my goals of [state your goals]. I look forward to being part of this community and learning how to build impactful applications with LLMs. Let me know if you need any further clarification or details.7.3854720.000525
5claude-instant-1.2Hi everyone! I'm [your name] and I'm currently working on [your project/role involving LLMs]. I came across LiteLLM and was really excited by how it simplifies working with different LLM providers. I'm hoping to use LiteLLM to [build an app/simplify my code/test different models etc]. Before finding LiteLLM, I was struggling with [describe any issues you faced working with multiple LLMs]. With LiteLLM's unified API and automatic translation between providers, I think it will really help me to [goals you have for using LiteLLM]. Looking forward to being part of this community and learning more about how I can build impactful applications powered by LLMs!Let me know if you would like me to modify or expand on any part of this suggested intro. I'm happy to provide any clarification or additional details you need!Here is a more concise rewrite of the user input:\\n\\nHi everyone, I'm [your name]. I'm currently [your project/role] and came across LiteLLM, which simplifies working with different LLMs through its unified API. I hope to [build an app/simplify code/test models] with LiteLLM since I previously struggled with [issues]. LiteLLM's automatic translation between providers will help me [goals] and build impactful LLM applications. Looking forward to learning more as part of this community. Let me know if you need any clarification on my plans to use LiteLLM.8.6282170.001022
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Question: LiteLLM is a lightweight Python package that simplifies the process of making API calls to various language models. Here are some reasons why you should use LiteLLM:\n", + "\n", + "1. **Simplified API Calls**: LiteLLM abstracts away the complexity of making API calls to different language models. It provides a unified interface for invoking models from OpenAI, Azure, Cohere, Anthropic, Huggingface, and more.\n", + "\n", + "2. **Easy Integration**: LiteLLM seamlessly integrates with your existing codebase. You can import the package and start making API calls with just a few lines of code.\n", + "\n", + "3. **Flexibility**: LiteLLM supports a variety of language models, including GPT-3, GPT-Neo, chatGPT, and more. You can choose the model that suits your requirements and easily switch between them.\n", + "\n", + "4. **Convenience**: LiteLLM handles the authentication and connection details for you. You just need to set the relevant environment variables, and the package takes care of the rest.\n", + "\n", + "5. **Quick Prototyping**: LiteLLM is ideal for rapid prototyping and experimentation. With its simple API, you can quickly generate text, chat with models, and build interactive applications.\n", + "\n", + "6. **Community Support**: LiteLLM is actively maintained and supported by a community of developers. You can find help, share ideas, and collaborate with others to enhance your projects.\n", + "\n", + "Overall, LiteLLM simplifies the process of making API calls to language models, saving you time and effort while providing flexibility and convenience\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelQuestionResponseResponseTimeCost
0togethercomputer/llama-2-70b-chatLiteLLM is a lightweight Python package that simplifies the process of making API calls to various language models. Here are some reasons why you should use LiteLLM:\\n\\n1. **Simplified API Calls**: LiteLLM abstracts away the complexity of making API calls to different language models. It provides a unified interface for invoking models from OpenAI, Azure, Cohere, Anthropic, Huggingface, and more.\\n\\n2. **Easy Integration**: LiteLLM seamlessly integrates with your existing codebase. You can import the package and start making API calls with just a few lines of code.\\n\\n3. **Flexibility**: LiteLLM supports a variety of language models, including GPT-3, GPT-Neo, chatGPT, and more. You can choose the model that suits your requirements and easily switch between them.\\n\\n4. **Convenience**: LiteLLM handles the authentication and connection details for you. You just need to set the relevant environment variables, and the package takes care of the rest.\\n\\n5. **Quick Prototyping**: LiteLLM is ideal for rapid prototyping and experimentation. With its simple API, you can quickly generate text, chat with models, and build interactive applications.\\n\\n6. **Community Support**: LiteLLM is actively maintained and supported by a community of developers. You can find help, share ideas, and collaborate with others to enhance your projects.\\n\\nOverall, LiteLLM simplifies the process of making API calls to language models, saving you time and effort while providing flexibility and convenienceHere's a more concise version of the user input:\\n\\nLiteLLM is a lightweight Python package that simplifies API calls to various language models. It abstracts away complexity, integrates seamlessly, supports multiple models, and handles authentication. It's ideal for rapid prototyping and has community support. It saves time and effort while providing flexibility and convenience.11.2942500.001251
1gpt-3.5-turboLiteLLM is a lightweight Python package that simplifies the process of making API calls to various language models. Here are some reasons why you should use LiteLLM:\\n\\n1. **Simplified API Calls**: LiteLLM abstracts away the complexity of making API calls to different language models. It provides a unified interface for invoking models from OpenAI, Azure, Cohere, Anthropic, Huggingface, and more.\\n\\n2. **Easy Integration**: LiteLLM seamlessly integrates with your existing codebase. You can import the package and start making API calls with just a few lines of code.\\n\\n3. **Flexibility**: LiteLLM supports a variety of language models, including GPT-3, GPT-Neo, chatGPT, and more. You can choose the model that suits your requirements and easily switch between them.\\n\\n4. **Convenience**: LiteLLM handles the authentication and connection details for you. You just need to set the relevant environment variables, and the package takes care of the rest.\\n\\n5. **Quick Prototyping**: LiteLLM is ideal for rapid prototyping and experimentation. With its simple API, you can quickly generate text, chat with models, and build interactive applications.\\n\\n6. **Community Support**: LiteLLM is actively maintained and supported by a community of developers. You can find help, share ideas, and collaborate with others to enhance your projects.\\n\\nOverall, LiteLLM simplifies the process of making API calls to language models, saving you time and effort while providing flexibility and convenienceLiteLLM is a lightweight Python package that simplifies API calls to various language models. Here's why you should use it:\\n1. Simplified API Calls: Works with multiple models (OpenAI, Azure, Cohere, Anthropic, Huggingface).\\n2. Easy Integration: Import and start using it quickly in your codebase.\\n3. Flexibility: Supports GPT-3, GPT-Neo, chatGPT, etc. easily switch between models.\\n4. Convenience: Handles authentication and connection details, just set environment variables.\\n5. Quick Prototyping: Great for rapid prototyping and building interactive applications.\\n6. Community Support: Actively maintained and supported by a developer community.9.7783150.000795
2claude-instant-1.2LiteLLM is a lightweight Python package that simplifies the process of making API calls to various language models. Here are some reasons why you should use LiteLLM:\\n\\n1. **Simplified API Calls**: LiteLLM abstracts away the complexity of making API calls to different language models. It provides a unified interface for invoking models from OpenAI, Azure, Cohere, Anthropic, Huggingface, and more.\\n\\n2. **Easy Integration**: LiteLLM seamlessly integrates with your existing codebase. You can import the package and start making API calls with just a few lines of code.\\n\\n3. **Flexibility**: LiteLLM supports a variety of language models, including GPT-3, GPT-Neo, chatGPT, and more. You can choose the model that suits your requirements and easily switch between them.\\n\\n4. **Convenience**: LiteLLM handles the authentication and connection details for you. You just need to set the relevant environment variables, and the package takes care of the rest.\\n\\n5. **Quick Prototyping**: LiteLLM is ideal for rapid prototyping and experimentation. With its simple API, you can quickly generate text, chat with models, and build interactive applications.\\n\\n6. **Community Support**: LiteLLM is actively maintained and supported by a community of developers. You can find help, share ideas, and collaborate with others to enhance your projects.\\n\\nOverall, LiteLLM simplifies the process of making API calls to language models, saving you time and effort while providing flexibility and convenienceHere is a concise rewrite of the user input:\\n\\nLiteLLM is a lightweight Python package that simplifies accessing various language models. It provides a unified interface for models from OpenAI, Azure, Cohere, Anthropic, Huggingface, and more. Key benefits include simplified API calls, easy integration, flexibility to use different models, automated handling of authentication, and support for quick prototyping. The actively maintained package saves time by abstracting away complexity while offering convenience and a collaborative community.7.6975200.001098
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Question: Traceloop is a platform for monitoring and debugging the quality of your LLM outputs. It provides you with a way to track the performance of your LLM application; rollout changes with confidence; and debug issues in production. It is based on OpenTelemetry, so it can provide full visibility to your LLM requests, as well vector DB usage, and other infra in your stack.\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelQuestionResponseResponseTimeCost
6togethercomputer/llama-2-70b-chatTraceloop is a platform for monitoring and debugging the quality of your LLM outputs. It provides you with a way to track the performance of your LLM application; rollout changes with confidence; and debug issues in production. It is based on OpenTelemetry, so it can provide full visibility to your LLM requests, as well vector DB usage, and other infra in your stack.\\nRewritten input: Traceloop is a platform for monitoring and debugging LLM outputs. It allows users to track performance, rollout changes confidently, and debug issues in production. It uses OpenTelemetry for full visibility into LLM requests, vector DB usage, and other infrastructure.9.0604440.000525
7gpt-3.5-turboTraceloop is a platform for monitoring and debugging the quality of your LLM outputs. It provides you with a way to track the performance of your LLM application; rollout changes with confidence; and debug issues in production. It is based on OpenTelemetry, so it can provide full visibility to your LLM requests, as well vector DB usage, and other infra in your stack.Traceloop is a platform for monitoring and debugging the quality of your LLM outputs. It helps track performance, rollout changes, and debug issues in production. It is based on OpenTelemetry, providing visibility to LLM requests, vector DB usage, and other infrastructure in your stack.7.3046610.000283
8claude-instant-1.2Traceloop is a platform for monitoring and debugging the quality of your LLM outputs. It provides you with a way to track the performance of your LLM application; rollout changes with confidence; and debug issues in production. It is based on OpenTelemetry, so it can provide full visibility to your LLM requests, as well vector DB usage, and other infra in your stack.Here is a more concise rewrite of the user input:\\n\\nTraceloop monitors and debugs LLM quality. It tracks LLM performance, enables confident changes, and debugs production issues. Based on OpenTelemetry, Traceloop provides full visibility into LLM requests, vector DB usage, and other stack infrastructure.7.9761580.000538
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "from IPython.display import HTML\n", + "import pandas as pd\n", + "\n", + "df = pd.DataFrame(data_2)\n", + "grouped_by_question = df.groupby('Question')\n", + "\n", + "for question, group_data in grouped_by_question:\n", + " print(f\"Question: {question}\")\n", + " HTML(group_data.to_html())\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/Claude_(Anthropic)_with_Streaming_liteLLM_Examples.ipynb b/cookbook/Claude_(Anthropic)_with_Streaming_liteLLM_Examples.ipynb new file mode 100644 index 000000000..338785ea5 --- /dev/null +++ b/cookbook/Claude_(Anthropic)_with_Streaming_liteLLM_Examples.ipynb @@ -0,0 +1,406 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZwuaylskLxFu", + "outputId": "d684d6a3-32fe-4beb-c378-c39134bcf8cc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting litellm==0.1.363\n", + " Downloading litellm-0.1.363-py3-none-any.whl (34 kB)\n", + "Requirement already satisfied: openai<0.28.0,>=0.27.8 in /usr/local/lib/python3.10/dist-packages (from litellm==0.1.363) (0.27.8)\n", + "Requirement already satisfied: python-dotenv<2.0.0,>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from litellm==0.1.363) (1.0.0)\n", + "Requirement already satisfied: tiktoken<0.5.0,>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from litellm==0.1.363) (0.4.0)\n", + "Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.10/dist-packages (from openai<0.28.0,>=0.27.8->litellm==0.1.363) (2.31.0)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from openai<0.28.0,>=0.27.8->litellm==0.1.363) (4.65.0)\n", + "Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from openai<0.28.0,>=0.27.8->litellm==0.1.363) (3.8.5)\n", + "Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.10/dist-packages (from tiktoken<0.5.0,>=0.4.0->litellm==0.1.363) (2022.10.31)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai<0.28.0,>=0.27.8->litellm==0.1.363) (3.2.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai<0.28.0,>=0.27.8->litellm==0.1.363) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai<0.28.0,>=0.27.8->litellm==0.1.363) (1.26.16)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai<0.28.0,>=0.27.8->litellm==0.1.363) (2023.7.22)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm==0.1.363) (23.1.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm==0.1.363) (6.0.4)\n", + "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm==0.1.363) (4.0.2)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm==0.1.363) (1.9.2)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm==0.1.363) (1.4.0)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm==0.1.363) (1.3.1)\n", + "Installing collected packages: litellm\n", + " Attempting uninstall: litellm\n", + " Found existing installation: litellm 0.1.362\n", + " Uninstalling litellm-0.1.362:\n", + " Successfully uninstalled litellm-0.1.362\n", + "Successfully installed litellm-0.1.363\n" + ] + } + ], + "source": [ + "!pip install litellm==\"0.1.363\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "W216G__XL19Q" + }, + "outputs": [], + "source": [ + "# @title Import litellm & Set env variables\n", + "import litellm\n", + "import os\n", + "\n", + "os.environ[\"ANTHROPIC_API_KEY\"] = \" \" #@param" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ff1lKwUMMLJj", + "outputId": "bfddf6f8-36d4-45e5-92dc-349083fa41b8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + " Result from claude-instant-1 {'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': \" The Los Angeles Dodgers won the 2020 World Series, defeating the Tampa Bay Rays 4-2. It was the Dodgers' first World Series title since 1988.\"}}], 'created': 1691536677.2676156, 'model': 'claude-instant-1', 'usage': {'prompt_tokens': 30, 'completion_tokens': 32, 'total_tokens': 62}}\n", + "\n", + "\n", + " Result from claude-2 {'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': ' The Los Angeles Dodgers won'}}], 'created': 1691536677.944753, 'model': 'claude-2', 'usage': {'prompt_tokens': 30, 'completion_tokens': 5, 'total_tokens': 35}}\n" + ] + } + ], + "source": [ + "# @title Request Claude Instant-1 and Claude-2\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n", + " {\"role\": \"user\", \"content\": \"Who won the world series in 2020?\"}\n", + " ]\n", + "\n", + "result = litellm.completion('claude-instant-1', messages)\n", + "print(\"\\n\\n Result from claude-instant-1\", result)\n", + "result = litellm.completion('claude-2', messages, max_tokens=5, temperature=0.2)\n", + "print(\"\\n\\n Result from claude-2\", result)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "06hWKnNQMrV-", + "outputId": "7fdec0eb-d4a9-4882-f9c4-987ff9a31114" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Here\n", + "'s\n", + " a\n", + " quick\n", + " overview\n", + " of\n", + " how\n", + " a\n", + " court\n", + " case\n", + " can\n", + " reach\n", + " the\n", + " U\n", + ".\n", + "S\n", + ".\n", + " Supreme\n", + " Court\n", + ":\n", + "\n", + "\n", + "-\n", + " The\n", + " case\n", + " must\n", + " first\n", + " be\n", + " heard\n", + " in\n", + " a\n", + " lower\n", + " trial\n", + " court\n", + " (\n", + "either\n", + " a\n", + " state\n", + " court\n", + " or\n", + " federal\n", + " district\n", + " court\n", + ").\n", + " The\n", + " trial\n", + " court\n", + " makes\n", + " initial\n", + " r\n", + "ulings\n", + " and\n", + " produces\n", + " a\n", + " record\n", + " of\n", + " the\n", + " case\n", + ".\n", + "\n", + "\n", + "-\n", + " The\n", + " losing\n", + " party\n", + " can\n", + " appeal\n", + " the\n", + " decision\n", + " to\n", + " an\n", + " appeals\n", + " court\n", + " (\n", + "a\n", + " state\n", + " appeals\n", + " court\n", + " for\n", + " state\n", + " cases\n", + ",\n", + " or\n", + " a\n", + " federal\n", + " circuit\n", + " court\n", + " for\n", + " federal\n", + " cases\n", + ").\n", + " The\n", + " appeals\n", + " court\n", + " reviews\n", + " the\n", + " trial\n", + " court\n", + "'s\n", + " r\n", + "ulings\n", + " and\n", + " can\n", + " affirm\n", + ",\n", + " reverse\n", + ",\n", + " or\n", + " modify\n", + " the\n", + " decision\n", + ".\n", + "\n", + "\n", + "-\n", + " If\n", + " a\n", + " party\n", + " is\n", + " still\n", + " unsat\n", + "isf\n", + "ied\n", + " after\n", + " the\n", + " appeals\n", + " court\n", + " rules\n", + ",\n", + " they\n", + " can\n", + " petition\n", + " the\n", + " Supreme\n", + " Court\n", + " to\n", + " hear\n", + " the\n", + " case\n", + " through\n", + " a\n", + " writ\n", + " of\n", + " cert\n", + "ior\n", + "ari\n", + ".\n", + " \n", + "\n", + "\n", + "-\n", + " The\n", + " Supreme\n", + " Court\n", + " gets\n", + " thousands\n", + " of\n", + " cert\n", + " petitions\n", + " every\n", + " year\n", + " but\n", + " usually\n", + " only\n", + " agrees\n", + " to\n", + " hear\n", + " about\n", + " 100\n", + "-\n", + "150\n", + " of\n", + " cases\n", + " that\n", + " have\n", + " significant\n", + " national\n", + " importance\n", + " or\n", + " where\n", + " lower\n", + " courts\n", + " disagree\n", + " on\n", + " federal\n", + " law\n", + ".\n", + " \n", + "\n", + "\n", + "-\n", + " If\n", + " 4\n", + " out\n", + " of\n", + " the\n", + " 9\n", + " Just\n", + "ices\n", + " vote\n", + " to\n", + " grant\n", + " cert\n", + " (\n", + "agree\n", + " to\n", + " hear\n", + " the\n", + " case\n", + "),\n", + " it\n", + " goes\n", + " on\n", + " the\n", + " Supreme\n", + " Court\n", + "'s\n", + " do\n", + "cket\n", + " for\n", + " arguments\n", + ".\n", + "\n", + "\n", + "-\n", + " The\n", + " Supreme\n", + " Court\n", + " then\n", + " hears\n", + " oral\n", + " arguments\n", + ",\n", + " considers\n", + " written\n", + " brief\n", + "s\n", + ",\n", + " examines\n", + " the\n", + " lower\n", + " court\n", + " records\n", + ",\n", + " and\n", + " issues\n", + " a\n", + " final\n", + " ruling\n", + " on\n", + " the\n", + " case\n", + ",\n", + " which\n", + " serves\n", + " as\n", + " binding\n", + " precedent\n" + ] + } + ], + "source": [ + "# @title Streaming Example: Request Claude-2\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n", + " {\"role\": \"user\", \"content\": \"how does a court case get to the Supreme Court?\"}\n", + " ]\n", + "\n", + "result = litellm.completion('claude-2', messages, stream=True)\n", + "for part in result:\n", + " print(part.choices[0].delta.content or \"\")\n", + "\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/Evaluating_LLMs.ipynb b/cookbook/Evaluating_LLMs.ipynb new file mode 100644 index 000000000..e27e8934f --- /dev/null +++ b/cookbook/Evaluating_LLMs.ipynb @@ -0,0 +1,579 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "Ys9n20Es2IzT" + }, + "source": [ + "# Evaluate Multiple LLM Providers with LiteLLM\n", + "\n", + "\n", + "\n", + "* Quality Testing\n", + "* Load Testing\n", + "* Duration Testing\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZXOXl23PIIP6" + }, + "outputs": [], + "source": [ + "!pip install litellm python-dotenv" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "LINuBzXDItq2" + }, + "outputs": [], + "source": [ + "from litellm import load_test_model, testing_batch_completion" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EkxMhsWdJdu4" + }, + "outputs": [], + "source": [ + "import os \n", + "os.environ[\"OPENAI_API_KEY\"] = \"...\"\n", + "os.environ[\"ANTHROPIC_API_KEY\"] = \"...\"\n", + "os.environ[\"REPLICATE_API_KEY\"] = \"...\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "mv5XdnqeW5I_" + }, + "source": [ + "# Quality Test endpoint\n", + "\n", + "## Test the same prompt across multiple LLM providers\n", + "\n", + "In this example, let's ask some questions about Paul Graham" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "XpzrR5m4W_Us" + }, + "outputs": [], + "source": [ + "models = [\"gpt-3.5-turbo\", \"gpt-3.5-turbo-16k\", \"gpt-4\", \"claude-instant-1\", {\"model\": \"replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781\", \"custom_llm_provider\": \"replicate\"}]\n", + "context = \"\"\"Paul Graham (/ɔrƦm/; born 1964)[3] is an English computer scientist, essayist, entrepreneur, venture capitalist, and author. He is best known for his work on the programming language Lisp, his former startup Viaweb (later renamed Yahoo! Store), cofounding the influential startup accelerator and seed capital firm Y Combinator, his essays, and Hacker News. He is the author of several computer programming books, including: On Lisp,[4] ANSI Common Lisp,[5] and Hackers & Painters.[6] Technology journalist Steven Levy has described Graham as a \"hacker philosopher\".[7] Graham was born in England, where he and his family maintain permanent residence. However he is also a citizen of the United States, where he was educated, lived, and worked until 2016.\"\"\"\n", + "prompts = [\"Who is Paul Graham?\", \"What is Paul Graham known for?\" , \"Is paul graham a writer?\" , \"Where does Paul Graham live?\", \"What has Paul Graham done?\"]\n", + "messages = [[{\"role\": \"user\", \"content\": context + \"\\n\" + prompt}] for prompt in prompts] # pass in a list of messages we want to test\n", + "result = testing_batch_completion(models=models, messages=messages)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "9nzeLySnvIIW" + }, + "source": [ + "## Visualize the data" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 403 + }, + "id": "X-2n7hdAuVAY", + "outputId": "69cc0de1-68e3-4c12-a8ea-314880010d94" + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Model Nameclaude-instant-1gpt-3.5-turbo-0613gpt-3.5-turbo-16k-0613gpt-4-0613replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781
Prompt
\\nIs paul graham a writer?Yes, Paul Graham is considered a writer in ad...Yes, Paul Graham is a writer. He has written s...Yes, Paul Graham is a writer. He has authored ...Yes, Paul Graham is a writer. He is an essayis...Yes, Paul Graham is an author. According to t...
\\nWhat has Paul Graham done?Paul Graham has made significant contribution...Paul Graham has achieved several notable accom...Paul Graham has made significant contributions...Paul Graham is known for his work on the progr...Paul Graham has had a diverse career in compu...
\\nWhat is Paul Graham known for?Paul Graham is known for several things:\\n\\n-...Paul Graham is known for his work on the progr...Paul Graham is known for his work on the progr...Paul Graham is known for his work on the progr...Paul Graham is known for many things, includi...
\\nWhere does Paul Graham live?Based on the information provided:\\n\\n- Paul ...According to the given information, Paul Graha...Paul Graham currently lives in England, where ...The text does not provide a current place of r...Based on the information provided, Paul Graha...
\\nWho is Paul Graham?Paul Graham is an influential computer scient...Paul Graham is an English computer scientist, ...Paul Graham is an English computer scientist, ...Paul Graham is an English computer scientist, ...Paul Graham is an English computer scientist,...
\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + "
\n", + " \n", + "
\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n" + ], + "text/plain": [ + "Model Name claude-instant-1 \\\n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is considered a writer in ad... \n", + "\\nWhat has Paul Graham done? Paul Graham has made significant contribution... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for several things:\\n\\n-... \n", + "\\nWhere does Paul Graham live? Based on the information provided:\\n\\n- Paul ... \n", + "\\nWho is Paul Graham? Paul Graham is an influential computer scient... \n", + "\n", + "Model Name gpt-3.5-turbo-0613 \\\n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is a writer. He has written s... \n", + "\\nWhat has Paul Graham done? Paul Graham has achieved several notable accom... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for his work on the progr... \n", + "\\nWhere does Paul Graham live? According to the given information, Paul Graha... \n", + "\\nWho is Paul Graham? Paul Graham is an English computer scientist, ... \n", + "\n", + "Model Name gpt-3.5-turbo-16k-0613 \\\n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is a writer. He has authored ... \n", + "\\nWhat has Paul Graham done? Paul Graham has made significant contributions... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for his work on the progr... \n", + "\\nWhere does Paul Graham live? Paul Graham currently lives in England, where ... \n", + "\\nWho is Paul Graham? Paul Graham is an English computer scientist, ... \n", + "\n", + "Model Name gpt-4-0613 \\\n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is a writer. He is an essayis... \n", + "\\nWhat has Paul Graham done? Paul Graham is known for his work on the progr... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for his work on the progr... \n", + "\\nWhere does Paul Graham live? The text does not provide a current place of r... \n", + "\\nWho is Paul Graham? Paul Graham is an English computer scientist, ... \n", + "\n", + "Model Name replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781 \n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is an author. According to t... \n", + "\\nWhat has Paul Graham done? Paul Graham has had a diverse career in compu... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for many things, includi... \n", + "\\nWhere does Paul Graham live? Based on the information provided, Paul Graha... \n", + "\\nWho is Paul Graham? Paul Graham is an English computer scientist,... " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Create an empty list to store the row data\n", + "table_data = []\n", + "\n", + "# Iterate through the list and extract the required data\n", + "for item in result:\n", + " prompt = item['prompt'][0]['content'].replace(context, \"\") # clean the prompt for easy comparison\n", + " model = item['response']['model']\n", + " response = item['response']['choices'][0]['message']['content']\n", + " table_data.append([prompt, model, response])\n", + "\n", + "# Create a DataFrame from the table data\n", + "df = pd.DataFrame(table_data, columns=['Prompt', 'Model Name', 'Response'])\n", + "\n", + "# Pivot the DataFrame to get the desired table format\n", + "table = df.pivot(index='Prompt', columns='Model Name', values='Response')\n", + "table" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "zOxUM40PINDC" + }, + "source": [ + "# Load Test endpoint\n", + "\n", + "Run 100+ simultaneous queries across multiple providers to see when they fail + impact on latency" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZkQf_wbcIRQ9" + }, + "outputs": [], + "source": [ + "models=[\"gpt-3.5-turbo\", \"replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781\", \"claude-instant-1\"]\n", + "context = \"\"\"Paul Graham (/ɔrƦm/; born 1964)[3] is an English computer scientist, essayist, entrepreneur, venture capitalist, and author. He is best known for his work on the programming language Lisp, his former startup Viaweb (later renamed Yahoo! Store), cofounding the influential startup accelerator and seed capital firm Y Combinator, his essays, and Hacker News. He is the author of several computer programming books, including: On Lisp,[4] ANSI Common Lisp,[5] and Hackers & Painters.[6] Technology journalist Steven Levy has described Graham as a \"hacker philosopher\".[7] Graham was born in England, where he and his family maintain permanent residence. However he is also a citizen of the United States, where he was educated, lived, and worked until 2016.\"\"\"\n", + "prompt = \"Where does Paul Graham live?\"\n", + "final_prompt = context + prompt\n", + "result = load_test_model(models=models, prompt=final_prompt, num_calls=5)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "8vSNBFC06aXY" + }, + "source": [ + "## Visualize the data" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 552 + }, + "id": "SZfiKjLV3-n8", + "outputId": "00f7f589-b3da-43ed-e982-f9420f074b8d" + }, + "outputs": [ + { + "data": { + "image/png": "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WwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWz8UVB4+fIhx48ahXbt2CA8PBwAcOHAAt2/f1mhxRERElLmpHVSOHz+O4sWL4/z58wgICEBsbCwA4Pr165g4caLGCyQiIqLMS+2gMmrUKEybNg1BQUEwMDCQ2mvWrIlz585ptDgiIiLK3NQOKjdv3kSLFi3StNva2uLt27caKYqIiIgI+IGgYmFhgZcvX6Zpv3r1KnLmzKmRooiIiIiAHwgqbdu2xciRI/Hq1SsoFAoolUqcPn0aw4YNQ+fOndOjRiIiIsqk1A4qM2bMQKFCheDo6IjY2FgUKVIEVatWRcWKFTFu3Lj0qJGIiIgyKT11b2BgYICVK1di/PjxuHXrFmJjY1GqVCnkz58/PeojIiKiTEztoJIqV65cyJUrlyZrISIiIlKhdlARQmD79u0IDg5GeHg4lEqlyvKAgACNFUdERESZm9pBZdCgQVixYgVq1KiB7NmzQ6FQpEddREREROoHFT8/PwQEBKBhw4bpUQ8RERGRRO1ZP+bm5sibN2961EJERESkQu2gMmnSJEyePBnx8fHpUQ8RERGRRO1dP25ubti0aRNsbW3h5OQEfX19leVXrlzRWHFERESUuakdVNzd3XH58mV07NiRg2mJiIgoXakdVPbv34/AwEBUrlw5PeohIiIikqg9RsXR0RFmZmbpUQsRERGRCrWDyvz58zFixAiEhoamQzlERERE/6P2rp+OHTviw4cPyJcvH0xMTNIMpo2IiNBYcUSZndOo/dougbQsdFYjbZdApFVqBxUvL690KIOIiIgorR+a9UNERET0K3xXUImOjpYG0EZHR//ruhxoS0RERJryXUHF0tISL1++hK2tLSwsLL567BQhBBQKBVJSUjReJBEREWVO3xVUjh49CisrKwBAcHBwuhZERERElOq7gkq1atWQN29eXLx4EdWqVUvvmoiIiIgAqHEcldDQUO7WISIiol9K7QO+aZK3tzdcXFxgZmYGMzMzVKhQAQcOHNBmSURERCQjak1PDgwMhLm5+b+u07Rp0+++PwcHB8yaNQv58+eHEALr169Hs2bNcPXqVRQtWlSd0oiIiCgDUiuo/NcxVNSd9dOkSROV69OnT4e3tzfOnTvHoEJERETqBZVXr17B1tY2XQpJSUnBtm3bEBcXhwoVKnx1ncTERCQmJkrX/+uYLkRERPR7++4xKl87doom3Lx5E1myZIGhoSF69+6NnTt3okiRIl9dd+bMmTA3N5cujo6O6VITERERycN3BxUhRLoUULBgQVy7dg3nz59Hnz594O7ujn/++eer644ePRpRUVHS5enTp+lSExEREcnDd+/6cXd3h7GxscYLMDAwgLOzMwCgTJkyuHjxIhYtWoQVK1akWdfQ0BCGhoYar4GIiIjk6buDytq1a9OzDolSqVQZh0JERESZl9pnT9ak0aNHo0GDBsiVKxdiYmKwceNGHDt2DIGBgdosi4iIiGRCq0ElPDwcnTt3xsuXL2Fubg4XFxcEBgaiTp062iyLiIiIZEKrQWX16tXafHgiIiKSuR8+hH5ISAgCAwMRHx8PIP1mBREREVHmpXZQeffuHWrXro0CBQqgYcOGePnyJQCge/fuGDp0qMYLJCIiosxL7aAyePBg6Onp4cmTJzAxMZHa27Rpg4MHD2q0OCIiIsrc1B6jcujQIQQGBsLBwUGlPX/+/AgLC9NYYURERERq96jExcWp9KSkioiI4MHYiIiISKPUDipVqlTBhg0bpOsKhQJKpRJz5sxBjRo1NFocERERZW5q7/qZM2cOatWqhUuXLiEpKQkjRozA7du3ERERgdOnT6dHjURERJRJqd2jUqxYMdy/fx+VK1dGs2bNEBcXh5YtW+Lq1avIly9fetRIREREmdQPHfDN3NwcY8eO1XQtRERERCrU7lE5ePAgTp06JV1ftmwZSpYsifbt2+P9+/caLY6IiIgyN7WDyvDhwxEdHQ0AuHnzJoYMGYKGDRvi8ePHGDJkiMYLJCIiosxL7V0/jx8/RpEiRQAAO3bsQJMmTTBjxgxcuXIFDRs21HiBRERElHmp3aNiYGCADx8+AAAOHz6MunXrAgCsrKyknhYiIiIiTVC7R6Vy5coYMmQIKlWqhAsXLmDLli0AgPv376c5Wi0RERHRz1C7R2Xp0qXQ09PD9u3b4e3tjZw5cwIADhw4gPr162u8QCIiIsq81O5RyZUrF/bt25emfeHChRopiIiIiCjVDx1HRalUIiQkBOHh4VAqlSrLqlatqpHCiIiIiNQOKufOnUP79u0RFhYGIYTKMoVCgZSUFI0VR0RERJmb2kGld+/eKFu2LPbv348cOXJAoVCkR11ERERE6geVBw8eYPv27XB2dk6PeoiIiIgkas/6KV++PEJCQtKjFiIiIiIVaveo9O/fH0OHDsWrV69QvHhx6Ovrqyx3cXHRWHFERESUuakdVFq1agUA6Natm9SmUCgghOBgWiIiItKoHzrXDxEREdGvoHZQyZ07d3rUQURERJTGDx3w7eHDh/Dy8sKdO3cAAEWKFMHAgQORL18+jRZHREREmZvaQSUwMBBNmzZFyZIlUalSJQDA6dOnUbRoUezduxd16tTReJHa4jRqv7ZLIC0LndVI2yUQEWVqageVUaNGYfDgwZg1a1aa9pEjR2aooEJERETapfZxVO7cuYPu3bunae/WrRv++ecfjRRFREREBPxAULGxscG1a9fStF+7dg22traaqImIiIgIwA/s+unZsyd69eqFR48eoWLFigA+jVGZPXs2hgwZovECiYiIKPNSO6iMHz8eWbNmxfz58zF69GgAgL29PSZNmoQBAwZovEAiIiLKvNQOKgqFAoMHD8bgwYMRExMDAMiaNavGCyMiIiL6oeOoAEB4eDju3bsHAChUqBBsbGw0VhQRERER8AODaWNiYtCpUyfY29ujWrVqqFatGuzt7dGxY0dERUWlR41ERESUSakdVHr06IHz589j//79iIyMRGRkJPbt24dLly7Bw8MjPWokIiKiTErtXT/79u1DYGAgKleuLLXVq1cPK1euRP369TVaHBEREWVuaveoZMuWDebm5mnazc3NYWlpqZGiiIiIiIAfCCrjxo3DkCFD8OrVK6nt1atXGD58OMaPH6/R4oiIiChzU3vXj7e3N0JCQpArVy7kypULAPDkyRMYGhrizZs3WLFihbTulStXNFcpERERZTpqB5XmzZunQxlEREREaakdVCZOnJgedRARERGlofYYladPn+LZs2fS9QsXLmDQoEHw9fXVaGFEREREageV9u3bIzg4GMCnQbS1a9fGhQsXMHbsWEyZMkXjBRIREVHmpXZQuXXrFv744w8AwNatW1G8eHGcOXMG/v7+WLdunabrIyIiokxM7aCSnJwMQ0NDAMDhw4fRtGlTAJ/O9/Py5UvNVkdERESZmtpBpWjRovDx8cHJkycRFBQkHY32xYsXyJYtm8YLJCIiosxL7aAye/ZsrFixAtWrV0e7du1QokQJAMCePXukXUJEREREmqD29OTq1avj7du3iI6OVjlkfq9evWBiYqLR4oiIiChzU7tHBQCEELh8+TJWrFiBmJgYAICBgQGDChEREWmU2j0qYWFhqF+/Pp48eYLExETUqVMHWbNmxezZs5GYmAgfH5/0qJOIiIgyIbV7VAYOHIiyZcvi/fv3MDY2ltpbtGiBI0eOaLQ4IiIiytzU7lE5efIkzpw5AwMDA5V2JycnPH/+XGOFEREREando6JUKpGSkpKm/dmzZ8iaNatGiiIiIiICfiCo1K1bF15eXtJ1hUKB2NhYTJw4EQ0bNtRkbURERJTJqb3rZ/78+ahXrx6KFCmChIQEtG/fHg8ePIC1tTU2bdqUHjUSERFRJqV2UHFwcMD169exZcsWXL9+HbGxsejevTs6dOigMriWiIiI6GepHVQAQE9PDx06dECHDh2ktpcvX2L48OFYunSpxoojIiKizE2toHL79m0EBwfDwMAAbm5usLCwwNu3bzF9+nT4+Pggb9686VUnERERZULfPZh2z549KFWqFAYMGIDevXujbNmyCA4ORuHChXHnzh3s3LkTt2/fTs9aiYiIKJP57qAybdo0eHp6Ijo6GgsWLMCjR48wYMAA/P333zh48KB0FmUiIiIiTfnuoHLv3j14enoiS5Ys6N+/P3R0dLBw4UKUK1cuPesjIiKiTOy7g0pMTAzMzMwAALq6ujA2NuaYFCIiIkpXag2mDQwMhLm5OYBPR6g9cuQIbt26pbJO06ZNNVcdERERZWpqBRV3d3eV6x4eHirXFQrFVw+vT0RERPQjvjuoKJXK9KyDiIiIKA21z/VDRERE9KtoNajMnDkT5cqVQ9asWWFra4vmzZvj3r172iyJiIiIZESrQeX48ePw9PTEuXPnEBQUhOTkZNStWxdxcXHaLIuIiIhk4ofO9aMpBw8eVLm+bt062Nra4vLly6hataqWqiIiIiK50GpQ+VJUVBQAwMrK6qvLExMTkZiYKF2Pjo7+JXURERGRdvzQrp/IyEisWrUKo0ePRkREBADgypUreP78+Q8XolQqMWjQIFSqVAnFihX76jozZ86Eubm5dHF0dPzhxyMiIiL5Uzuo3LhxAwUKFMDs2bMxb948REZGAgACAgIwevToHy7E09MTt27dwubNm7+5zujRoxEVFSVdnj59+sOPR0RERPKndlAZMmQIunTpggcPHsDIyEhqb9iwIU6cOPFDRfTr1w/79u1DcHAwHBwcvrmeoaEhzMzMVC5ERESUcak9RuXixYtYsWJFmvacOXPi1atXat2XEAL9+/fHzp07cezYMeTJk0fdcoiIiCgDUzuoGBoafnUQ6/3792FjY6PWfXl6emLjxo3YvXs3smbNKgUdc3NzGBsbq1saERERZTBq7/pp2rQppkyZguTkZACfzu/z5MkTjBw5Eq1atVLrvry9vREVFYXq1asjR44c0mXLli3qlkVEREQZkNpBZf78+YiNjYWtrS3i4+NRrVo1ODs7I2vWrJg+fbpa9yWE+OqlS5cu6pZFREREGZDau37Mzc0RFBSEU6dO4caNG4iNjUXp0qVRu3bt9KiPiIiIMrEfPuBb5cqVUblyZU3WQkRERKRC7aCyePHir7YrFAoYGRnB2dkZVatWha6u7k8XR0RERJmb2kFl4cKFePPmDT58+ABLS0sAwPv372FiYoIsWbIgPDwcefPmRXBwMI8cS0RERD9F7cG0M2bMQLly5fDgwQO8e/cO7969w/3791G+fHksWrQIT548gZ2dHQYPHpwe9RIREVEmonaPyrhx47Bjxw7ky5dPanN2dsa8efPQqlUrPHr0CHPmzFF7qjIRERHRl9TuUXn58iU+fvyYpv3jx4/SAdvs7e0RExPz89URERFRpqZ2UKlRowY8PDxw9epVqe3q1avo06cPatasCQC4efMmD4dPREREP03toLJ69WpYWVmhTJkyMDQ0hKGhIcqWLQsrKyusXr0aAJAlSxbMnz9f48USERFR5qL2GBU7OzsEBQXh7t27uH//PgCgYMGCKFiwoLROjRo1NFchERERZVo/fMC3QoUKoVChQpqshYiIiEjFDwWVZ8+eYc+ePXjy5AmSkpJUli1YsEAjhRERERGpHVSOHDmCpk2b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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "## calculate avg response time\n", + "unique_models = set(result[\"response\"]['model'] for result in result[\"results\"])\n", + "model_dict = {model: {\"response_time\": []} for model in unique_models}\n", + "for completion_result in result[\"results\"]:\n", + " model_dict[completion_result[\"response\"][\"model\"]][\"response_time\"].append(completion_result[\"response_time\"])\n", + "\n", + "avg_response_time = {}\n", + "for model, data in model_dict.items():\n", + " avg_response_time[model] = sum(data[\"response_time\"]) / len(data[\"response_time\"])\n", + "\n", + "models = list(avg_response_time.keys())\n", + "response_times = list(avg_response_time.values())\n", + "\n", + "plt.bar(models, response_times)\n", + "plt.xlabel('Model', fontsize=10)\n", + "plt.ylabel('Average Response Time')\n", + "plt.title('Average Response Times for each Model')\n", + "\n", + "plt.xticks(models, [model[:15]+'...' if len(model) > 15 else model for model in models], rotation=45)\n", + "plt.show()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "inSDIE3_IRds" + }, + "source": [ + "# Duration Test endpoint\n", + "\n", + "Run load testing for 2 mins. Hitting endpoints with 100+ queries every 15 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "id": "ePIqDx2EIURH" + }, + "outputs": [], + "source": [ + "models=[\"gpt-3.5-turbo\", \"replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781\", \"claude-instant-1\"]\n", + "context = \"\"\"Paul Graham (/ɔrƦm/; born 1964)[3] is an English computer scientist, essayist, entrepreneur, venture capitalist, and author. He is best known for his work on the programming language Lisp, his former startup Viaweb (later renamed Yahoo! Store), cofounding the influential startup accelerator and seed capital firm Y Combinator, his essays, and Hacker News. He is the author of several computer programming books, including: On Lisp,[4] ANSI Common Lisp,[5] and Hackers & Painters.[6] Technology journalist Steven Levy has described Graham as a \"hacker philosopher\".[7] Graham was born in England, where he and his family maintain permanent residence. However he is also a citizen of the United States, where he was educated, lived, and worked until 2016.\"\"\"\n", + "prompt = \"Where does Paul Graham live?\"\n", + "final_prompt = context + prompt\n", + "result = load_test_model(models=models, prompt=final_prompt, num_calls=100, interval=15, duration=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 552 + }, + "id": "k6rJoELM6t1K", + "outputId": "f4968b59-3bca-4f78-a88b-149ad55e3cf7" + }, + "outputs": [ + { + "data": { + "image/png": "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DaxZswYFCxaU/ua9fPkS4eHhcHNzU3mMd+/eyTrgcLcU5VkZuTsuLg5JSUlQKBQ4cOAAwsPDoaurCz09PURERMDV1RX//POPFGwSExOhr68PPz8/vH79msGGNEIIIQWbX3/9Fd27d8fcuXPRt29fjBgxAufPnwfwftdASkoKJkyYgMqVK+PVq1cqj8NgQ5/r/PnzaN68Obp374727dtj1KhRCAkJwbVr19ClSxcA708zkJaWhnXr1qFGjRo4ceKEymPIOdgADDeUx0VGRqJixYo4evQoNmzYgCZNmuDvv/8G8H5XU/ny5dGmTRtMnz5dWidfvnwYNWoU7t27B0tLSwYb0oiM7Wju3Ln4448/sHHjRty4cQNt27bFn3/+ifHjx+P06dMAAAMDA7i6uqJhw4YwNzfXYtUkRw8fPsTz589V2r7//nvs3r0bFy9eRJ8+fQC8P/VFixYtMH369EwjN7IniPK4Hj16CFNTU6GjoyOWL18utaemporNmzeL9PR0qU2pVGqjRPpGREVFibZt24pVq1YJIYTYvXu3MDU1Ff369ROurq6iYcOG4syZM0II1W3x3bt3WqmX5CkkJETY2NiITZs2SW0Z29v69euFk5OTOH/+fKb10tLSvliN2saRG8qzMk4J7uPjg/j4eBgYGMDW1hbJyckA3n8rad++vcrETY7SUG6ytrbGqFGj0KRJE1y+fBk+Pj6YNm0ali5dip9++glnzpyBj48PLl68qLItclcUaVLZsmVRr149rFu3DocOHQLwv799Li4uiI6Oli4z8yG574r6EMMN5VkZocXe3h4nTpyAl5cXOnbsiF27diEpKSlTfzleH4W051Pbk6urKwoXLox9+/bB2dkZffv2BQBYWlrCzc0NLVu2hKur65cslb4x9vb26NevH2JiYuDn54fdu3dLywoXLgxHR0ctVpc3fDsxjr4a4v8nAD9//hxpaWkoVqwYrK2tUaNGDSQnJ6NXr14ICgpCixYtYGRkhICAADRq1AhOTk7aLp1kQnwweXjFihWIjo6GgYEBRowYIV26IyUlBc+ePcOjR49QunRpHDhwAK1atcLAgQP/9bQERJ8j42i7evXqYcmSJRg7dixGjx6NkJAQODs7Y8uWLVAoFPjxxx+1XapW8VBwypOCg4MxadIkREVFoXnz5mjTpg1atmwJAOjRowd27NiB4cOH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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "## calculate avg response time\n", + "unique_models = set(unique_result[\"response\"]['model'] for unique_result in result[0][\"results\"])\n", + "model_dict = {model: {\"response_time\": []} for model in unique_models}\n", + "for iteration in result:\n", + " for completion_result in iteration[\"results\"]:\n", + " model_dict[completion_result[\"response\"][\"model\"]][\"response_time\"].append(completion_result[\"response_time\"])\n", + "\n", + "avg_response_time = {}\n", + "for model, data in model_dict.items():\n", + " avg_response_time[model] = sum(data[\"response_time\"]) / len(data[\"response_time\"])\n", + "\n", + "models = list(avg_response_time.keys())\n", + "response_times = list(avg_response_time.values())\n", + "\n", + "plt.bar(models, response_times)\n", + "plt.xlabel('Model', fontsize=10)\n", + "plt.ylabel('Average Response Time')\n", + "plt.title('Average Response Times for each Model')\n", + "\n", + "plt.xticks(models, [model[:15]+'...' if len(model) > 15 else model for model in models], rotation=45)\n", + "plt.show()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/LiteLLM_Azure_and_OpenAI_example.ipynb b/cookbook/LiteLLM_Azure_and_OpenAI_example.ipynb new file mode 100644 index 000000000..7df1c47eb --- /dev/null +++ b/cookbook/LiteLLM_Azure_and_OpenAI_example.ipynb @@ -0,0 +1,422 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "BmX0b5Ueh91v" + }, + "source": [ + "# LiteLLM - Azure OpenAI + OpenAI Calls\n", + "This notebook covers the following for Azure OpenAI + OpenAI:\n", + "* Completion - Quick start\n", + "* Completion - Streaming\n", + "* Completion - Azure, OpenAI in separate threads\n", + "* Completion - Stress Test 10 requests in parallel\n", + "* Completion - Azure, OpenAI in the same thread" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "iHq4d0dpfawS" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "mnveHO5dfcB0" + }, + "outputs": [], + "source": [ + "import os" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eo88QUdbiDIE" + }, + "source": [ + "## Completion - Quick start" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5OSosWNCfc_2", + "outputId": "c52344b1-2458-4695-a7eb-a9b076893348" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Openai Response\n", + "\n", + "{\n", + " \"id\": \"chatcmpl-7yjVOEKCPw2KdkfIaM3Ao1tIXp8EM\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1694708958,\n", + " \"model\": \"gpt-3.5-turbo-0613\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"I'm an AI, so I don't have feelings, but I'm here to help you. How can I assist you?\"\n", + " },\n", + " \"finish_reason\": \"stop\"\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"prompt_tokens\": 13,\n", + " \"completion_tokens\": 26,\n", + " \"total_tokens\": 39\n", + " }\n", + "}\n", + "Azure Response\n", + "\n", + "{\n", + " \"id\": \"chatcmpl-7yjVQ6m2R2HRtnKHRRFp6JzL4Fjez\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1694708960,\n", + " \"model\": \"gpt-35-turbo\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"finish_reason\": \"stop\",\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"Hello there! As an AI language model, I don't have feelings but I'm functioning well. How can I assist you today?\"\n", + " }\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"completion_tokens\": 27,\n", + " \"prompt_tokens\": 14,\n", + " \"total_tokens\": 41\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "# openai configs\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"\n", + "\n", + "# azure openai configs\n", + "os.environ[\"AZURE_API_KEY\"] = \"\"\n", + "os.environ[\"AZURE_API_BASE\"] = \"https://openai-gpt-4-test-v-1.openai.azure.com/\"\n", + "os.environ[\"AZURE_API_VERSION\"] = \"2023-05-15\"\n", + "\n", + "\n", + "# openai call\n", + "response = completion(\n", + " model = \"gpt-3.5-turbo\",\n", + " messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + ")\n", + "print(\"Openai Response\\n\")\n", + "print(response)\n", + "\n", + "\n", + "\n", + "# azure call\n", + "response = completion(\n", + " model = \"azure/your-azure-deployment\",\n", + " messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + ")\n", + "print(\"Azure Response\\n\")\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dQMkM-diiKdE" + }, + "source": [ + "## Completion - Streaming" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "uVvJDVn4g1i1" + }, + "outputs": [], + "source": [ + "import os\n", + "from litellm import completion\n", + "\n", + "# openai configs\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"\n", + "\n", + "# azure openai configs\n", + "os.environ[\"AZURE_API_KEY\"] = \"\"\n", + "os.environ[\"AZURE_API_BASE\"] = \"https://openai-gpt-4-test-v-1.openai.azure.com/\"\n", + "os.environ[\"AZURE_API_VERSION\"] = \"2023-05-15\"\n", + "\n", + "\n", + "# openai call\n", + "response = completion(\n", + " model = \"gpt-3.5-turbo\",\n", + " messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " stream=True\n", + ")\n", + "print(\"OpenAI Streaming response\")\n", + "for chunk in response:\n", + " print(chunk)\n", + "\n", + "# azure call\n", + "response = completion(\n", + " model = \"azure/your-azure-deployment\",\n", + " messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " stream=True\n", + ")\n", + "print(\"Azure Streaming response\")\n", + "for chunk in response:\n", + " print(chunk)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4xrOPnt-oqwm" + }, + "source": [ + "## Completion - Azure, OpenAI in separate threads" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "V5b5taJPjvC3" + }, + "outputs": [], + "source": [ + "import os\n", + "import threading\n", + "from litellm import completion\n", + "\n", + "# Function to make a completion call\n", + "def make_completion(model, messages):\n", + " response = completion(\n", + " model=model,\n", + " messages=messages\n", + " )\n", + "\n", + " print(f\"Response for {model}: {response}\")\n", + "\n", + "# openai configs\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"\n", + "\n", + "# azure openai configs\n", + "os.environ[\"AZURE_API_KEY\"] = \"\"\n", + "os.environ[\"AZURE_API_BASE\"] = \"https://openai-gpt-4-test-v-1.openai.azure.com/\"\n", + "os.environ[\"AZURE_API_VERSION\"] = \"2023-05-15\"\n", + "\n", + "# Define the messages for the completions\n", + "messages = [{\"content\": \"Hello, how are you?\", \"role\": \"user\"}]\n", + "\n", + "# Create threads for making the completions\n", + "thread1 = threading.Thread(target=make_completion, args=(\"gpt-3.5-turbo\", messages))\n", + "thread2 = threading.Thread(target=make_completion, args=(\"azure/your-azure-deployment\", messages))\n", + "\n", + "# Start both threads\n", + "thread1.start()\n", + "thread2.start()\n", + "\n", + "# Wait for both threads to finish\n", + "thread1.join()\n", + "thread2.join()\n", + "\n", + "print(\"Both completions are done.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lx8DbMBqoAoN" + }, + "source": [ + "## Completion - Stress Test 10 requests in parallel\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pHYANOlOkoDh" + }, + "outputs": [], + "source": [ + "import os\n", + "import threading\n", + "from litellm import completion\n", + "\n", + "# Function to make a completion call\n", + "def make_completion(model, messages):\n", + " response = completion(\n", + " model=model,\n", + " messages=messages\n", + " )\n", + "\n", + " print(f\"Response for {model}: {response}\")\n", + "\n", + "# Set your API keys\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"\n", + "os.environ[\"AZURE_API_KEY\"] = \"\"\n", + "os.environ[\"AZURE_API_BASE\"] = \"https://openai-gpt-4-test-v-1.openai.azure.com/\"\n", + "os.environ[\"AZURE_API_VERSION\"] = \"2023-05-15\"\n", + "\n", + "# Define the messages for the completions\n", + "messages = [{\"content\": \"Hello, how are you?\", \"role\": \"user\"}]\n", + "\n", + "# Create and start 10 threads for making completions\n", + "threads = []\n", + "for i in range(10):\n", + " thread = threading.Thread(target=make_completion, args=(\"gpt-3.5-turbo\" if i % 2 == 0 else \"azure/your-azure-deployment\", messages))\n", + " threads.append(thread)\n", + " thread.start()\n", + "\n", + "# Wait for all threads to finish\n", + "for thread in threads:\n", + " thread.join()\n", + "\n", + "print(\"All completions are done.\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yB2NDOO4oxrp" + }, + "source": [ + "## Completion - Azure, OpenAI in the same thread" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HTBqwzxpnxab", + "outputId": "f3bc0efe-e4d5-44d5-a193-97d178cfbe14" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OpenAI Response: {\n", + " \"id\": \"chatcmpl-7yjzrDeOeVeSrQ00tApmTxEww3vBS\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1694710847,\n", + " \"model\": \"gpt-3.5-turbo-0613\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"Hello! I'm an AI, so I don't have feelings, but I'm here to help you. How can I assist you today?\"\n", + " },\n", + " \"finish_reason\": \"stop\"\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"prompt_tokens\": 13,\n", + " \"completion_tokens\": 29,\n", + " \"total_tokens\": 42\n", + " }\n", + "}\n", + "Azure OpenAI Response: {\n", + " \"id\": \"chatcmpl-7yjztAQ0gK6IMQt7cvLroMSOoXkeu\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1694710849,\n", + " \"model\": \"gpt-35-turbo\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"finish_reason\": \"stop\",\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"As an AI language model, I don't have feelings but I'm functioning properly. Thank you for asking! How can I assist you today?\"\n", + " }\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"completion_tokens\": 29,\n", + " \"prompt_tokens\": 14,\n", + " \"total_tokens\": 43\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "import os\n", + "from litellm import completion\n", + "\n", + "# Function to make both OpenAI and Azure completions\n", + "def make_completions():\n", + " # Set your OpenAI API key\n", + " os.environ[\"OPENAI_API_KEY\"] = \"\"\n", + "\n", + " # OpenAI completion\n", + " openai_response = completion(\n", + " model=\"gpt-3.5-turbo\",\n", + " messages=[{\"content\": \"Hello, how are you?\", \"role\": \"user\"}]\n", + " )\n", + "\n", + " print(\"OpenAI Response:\", openai_response)\n", + "\n", + " # Set your Azure OpenAI API key and configuration\n", + " os.environ[\"AZURE_API_KEY\"] = \"\"\n", + " os.environ[\"AZURE_API_BASE\"] = \"https://openai-gpt-4-test-v-1.openai.azure.com/\"\n", + " os.environ[\"AZURE_API_VERSION\"] = \"2023-05-15\"\n", + "\n", + " # Azure OpenAI completion\n", + " azure_response = completion(\n", + " model=\"azure/your-azure-deployment\",\n", + " messages=[{\"content\": \"Hello, how are you?\", \"role\": \"user\"}]\n", + " )\n", + "\n", + " print(\"Azure OpenAI Response:\", azure_response)\n", + "\n", + "# Call the function to make both completions in one thread\n", + "make_completions()\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/LiteLLM_Bedrock.ipynb b/cookbook/LiteLLM_Bedrock.ipynb new file mode 100644 index 000000000..eed603639 --- /dev/null +++ b/cookbook/LiteLLM_Bedrock.ipynb @@ -0,0 +1,310 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "fNkMBurtxawJ" + }, + "source": [ + "# LiteLLM Bedrock Usage\n", + "Important Note: For Bedrock Requests you need to ensure you have `pip install boto3>=1.28.57`, boto3 supports bedrock from `boto3>=1.28.57` and higher " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "htAufI28xeSy" + }, + "source": [ + "## Pre-Requisites" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jT5GbPjAuDTp" + }, + "outputs": [], + "source": [ + "!pip install litellm\n", + "!pip install boto3>=1.28.57 # this version onwards has bedrock support" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "H4Vu4er2xnfI" + }, + "source": [ + "## Set Bedrock/AWS Credentials" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "id": "CtTrBthWxp-t" + }, + "outputs": [], + "source": [ + "import os\n", + "os.environ[\"AWS_ACCESS_KEY_ID\"] = \"\" # Access key\n", + "os.environ[\"AWS_SECRET_ACCESS_KEY\"] = \"\" # Secret access key\n", + "os.environ[\"AWS_REGION_NAME\"] = \"\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "ycRK9NUdx1EI" + }, + "source": [ + "## Anthropic Requests" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tgkuoHa5uLOy", + "outputId": "27a78e86-c6a7-4bcc-8559-0813cb978426" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Claude instant 1, response\n", + "{\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" I'm doing well, thanks for asking!\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-4f2e64a1-56d2-43f2-90d3-60ffd6f5086d\",\n", + " \"created\": 1696256761.3265705,\n", + " \"model\": \"anthropic.claude-instant-v1\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 11,\n", + " \"completion_tokens\": 9,\n", + " \"total_tokens\": 20\n", + " },\n", + " \"finish_reason\": \"stop_sequence\"\n", + "}\n", + "Claude v2, response\n", + "{\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" I'm doing well, thanks for asking!\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-34f59b33-f94e-40c2-8bdb-f4af0813405e\",\n", + " \"created\": 1696256762.2137017,\n", + " \"model\": \"anthropic.claude-v2\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 11,\n", + " \"completion_tokens\": 9,\n", + " \"total_tokens\": 20\n", + " },\n", + " \"finish_reason\": \"stop_sequence\"\n", + "}\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "response = completion(\n", + " model=\"bedrock/anthropic.claude-instant-v1\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + ")\n", + "print(\"Claude instant 1, response\")\n", + "print(response)\n", + "\n", + "\n", + "response = completion(\n", + " model=\"bedrock/anthropic.claude-v2\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + ")\n", + "print(\"Claude v2, response\")\n", + "print(response)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "HnM-HtM3yFMT" + }, + "source": [ + "## Anthropic Requests - With Streaming" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_JZvg2yovRsU" + }, + "outputs": [], + "source": [ + "from litellm import completion\n", + "\n", + "response = completion(\n", + " model=\"bedrock/anthropic.claude-instant-v1\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " stream=True,\n", + ")\n", + "print(\"Claude instant 1, response\")\n", + "for chunk in response:\n", + " print(chunk)\n", + "\n", + "\n", + "response = completion(\n", + " model=\"bedrock/anthropic.claude-v2\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " stream=True\n", + ")\n", + "print(\"Claude v2, response\")\n", + "print(response)\n", + "for chunk in response:\n", + " print(chunk)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "zj1U1mh9zEhP" + }, + "source": [ + "## A121 Requests" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6wK6MZLovU7r", + "outputId": "4cf80c04-f15d-4066-b4c7-113b551538de" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "J2 ultra response\n", + "{\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \"\\nHi, I'm doing well, thanks for asking! How about you?\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-f2de678f-0e70-4e36-a01f-8b184c2e4d50\",\n", + " \"created\": 1696257116.044311,\n", + " \"model\": \"ai21.j2-ultra\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 6,\n", + " \"completion_tokens\": 16,\n", + " \"total_tokens\": 22\n", + " }\n", + "}\n", + "J2 mid response\n", + "{\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \"\\nGood. And you?\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-420d6bf9-36d8-484b-93b4-4c9e00f7ce2e\",\n", + " \"created\": 1696257116.5756805,\n", + " \"model\": \"ai21.j2-mid\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 6,\n", + " \"completion_tokens\": 6,\n", + " \"total_tokens\": 12\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "response = completion(\n", + " model=\"bedrock/ai21.j2-ultra\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + ")\n", + "print(\"J2 ultra response\")\n", + "print(response)\n", + "\n", + "response = completion(\n", + " model=\"bedrock/ai21.j2-mid\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + ")\n", + "print(\"J2 mid response\")\n", + "print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Y5gGZIwzzSON" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/LiteLLM_CometAPI.ipynb b/cookbook/LiteLLM_CometAPI.ipynb new file mode 100644 index 000000000..0a7ab581a --- /dev/null +++ b/cookbook/LiteLLM_CometAPI.ipynb @@ -0,0 +1,474 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "iFEmsVJI_2BR" + }, + "source": [ + "# LiteLLM CometAPI Cookbook" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "cBlUhCEP_xj4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: litellm in /Users/xmx/.miniforge3/lib/python3.12/site-packages (1.78.2)\n", + "Requirement already satisfied: aiohttp>=3.10 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (3.11.18)\n", + "Requirement already satisfied: click in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (8.3.0)\n", + "Requirement already satisfied: fastuuid>=0.13.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (0.13.3)\n", + "Requirement already satisfied: httpx>=0.23.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (0.28.1)\n", + "Requirement already satisfied: importlib-metadata>=6.8.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (8.6.1)\n", + "Requirement already satisfied: jinja2<4.0.0,>=3.1.2 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (3.1.6)\n", + "Requirement already satisfied: jsonschema<5.0.0,>=4.22.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (4.25.1)\n", + "Requirement already satisfied: openai>=2.8.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (1.109.1)\n", + "Requirement already satisfied: pydantic<3.0.0,>=2.5.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (2.11.10)\n", + "Requirement already satisfied: python-dotenv>=0.2.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (1.1.1)\n", + "Requirement already satisfied: tiktoken>=0.7.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (0.12.0)\n", + "Requirement already satisfied: tokenizers in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from litellm) (0.22.1)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from aiohttp>=3.10->litellm) (2.6.1)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from aiohttp>=3.10->litellm) (1.4.0)\n", + "Requirement already satisfied: attrs>=17.3.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from aiohttp>=3.10->litellm) (25.3.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from aiohttp>=3.10->litellm) (1.6.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from aiohttp>=3.10->litellm) (6.6.3)\n", + "Requirement already satisfied: propcache>=0.2.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from aiohttp>=3.10->litellm) (0.3.1)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from aiohttp>=3.10->litellm) (1.20.0)\n", + "Requirement already satisfied: anyio in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from httpx>=0.23.0->litellm) (4.11.0)\n", + "Requirement already satisfied: certifi in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from httpx>=0.23.0->litellm) (2025.10.5)\n", + "Requirement already satisfied: httpcore==1.* in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from httpx>=0.23.0->litellm) (1.0.9)\n", + "Requirement already satisfied: idna in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from httpx>=0.23.0->litellm) (3.10)\n", + "Requirement already satisfied: h11>=0.16 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from httpcore==1.*->httpx>=0.23.0->litellm) (0.16.0)\n", + "Requirement already satisfied: zipp>=3.20 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from importlib-metadata>=6.8.0->litellm) (3.21.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from jinja2<4.0.0,>=3.1.2->litellm) (3.0.3)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (2025.9.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (0.36.2)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (0.27.1)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from openai>=2.8.0->litellm) (1.9.0)\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from openai>=2.8.0->litellm) (0.11.0)\n", + "Requirement already satisfied: sniffio in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from openai>=2.8.0->litellm) (1.3.1)\n", + "Requirement already satisfied: tqdm>4 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from openai>=2.8.0->litellm) (4.67.1)\n", + "Requirement already satisfied: typing-extensions<5,>=4.11 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from openai>=2.8.0->litellm) (4.15.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from pydantic<3.0.0,>=2.5.0->litellm) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.33.2 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from pydantic<3.0.0,>=2.5.0->litellm) (2.33.2)\n", + "Requirement already satisfied: typing-inspection>=0.4.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from pydantic<3.0.0,>=2.5.0->litellm) (0.4.2)\n", + "Requirement already satisfied: regex>=2022.1.18 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from tiktoken>=0.7.0->litellm) (2025.9.18)\n", + "Requirement already satisfied: requests>=2.26.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from tiktoken>=0.7.0->litellm) (2.32.2)\n", + "Requirement already satisfied: huggingface-hub<2.0,>=0.16.4 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from tokenizers->litellm) (0.25.2)\n", + "Requirement already satisfied: filelock in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from huggingface-hub<2.0,>=0.16.4->tokenizers->litellm) (3.15.4)\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from huggingface-hub<2.0,>=0.16.4->tokenizers->litellm) (2025.9.0)\n", + "Requirement already satisfied: packaging>=20.9 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from huggingface-hub<2.0,>=0.16.4->tokenizers->litellm) (25.0)\n", + "Requirement already satisfied: pyyaml>=5.1 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from huggingface-hub<2.0,>=0.16.4->tokenizers->litellm) (6.0.3)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from requests>=2.26.0->tiktoken>=0.7.0->litellm) (3.4.0)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/xmx/.miniforge3/lib/python3.12/site-packages (from requests>=2.26.0->tiktoken>=0.7.0->litellm) (1.26.20)\n" + ] + } + ], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Completion" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "p-MQqWOT_1a7" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ['COMETAPI_KEY'] = \"Your_CometAPI_Key_Here\"\n", + "api_key = os.getenv('COMETAPI_KEY')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ze8JqMqWAARO", + "outputId": "64f3e836-69fa-4f8e-fb35-088a913bbe98" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "ModelResponse(id='msg_017L3DDDit8AkEgHRe2DQBc9', created=1760589916, model='claude-sonnet-4-5-20250929', object='chat.completion', system_fingerprint=None, choices=[Choices(finish_reason='stop', index=0, message=Message(content='I\\'ll create a simple Python script that says hi.\\n\\n\\nhello.py\\n#!/usr/bin/env python3\\n\"\"\"\\nA simple script that says hi!\\n\"\"\"\\n\\ndef say_hi(name=None):\\n \"\"\"Say hi to someone, or just say hi generally.\"\"\"\\n if name:\\n print(f\"Hi, {name}!\")\\n else:\\n print(\"Hi!\")\\n\\nif __name__ == \"__main__\":\\n # Say hi generally\\n say_hi()\\n \\n # Say hi to someone specific\\n say_hi(\"World\")\\n\\n\\n\\nI\\'ve created a simple Python script called `hello.py` that:\\n\\n1. Defines a `say_hi()` function that can optionally take a name parameter\\n2. Prints \"Hi!\" if no name is provided\\n3. Prints \"Hi, [name]!\" if a name is provided\\n4. Demonstrates both usages when run\\n\\nYou can run it with:\\n```bash\\npython hello.py\\n```\\n\\nThis will output:\\n```\\nHi!\\nHi, World!\\n```\\n\\nWould you like me to create versions in other programming languages, or modify this in any way?', role='assistant', tool_calls=None, function_call=None, provider_specific_fields=None), provider_specific_fields={})], usage=Usage(completion_tokens=290, prompt_tokens=26, total_tokens=316, completion_tokens_details=None, prompt_tokens_details=PromptTokensDetailsWrapper(audio_tokens=None, cached_tokens=None, text_tokens=None, image_tokens=None, cached_tokens_details={})))" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from litellm import completion\n", + "response = completion(\n", + " model=\"cometapi/claude-sonnet-4-5-20250929\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-LnhELrnAM_J", + "outputId": "d51c7ab7-d761-4bd1-f849-1534d9df4cd0" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "ModelResponse(id='chatcmpl-CRA9Uo6nsQ9C7kMJv1J4kyNDFJym7', created=1760589916, model='gpt-5-chat-latest', object='chat.completion', system_fingerprint='fp_2da73a467a', choices=[Choices(finish_reason='stop', index=0, message=Message(content='Sure! I can help you write a simple code that prints out \"Hi\" in different programming languages. \\n\\nHere’s an example in **Python**:\\n\\n```python\\n# Simple Python program to say \"Hi\"\\nprint(\"Hi\")\\n```\\n\\nExample in **JavaScript**:\\n\\n```javascript\\n// Simple JavaScript program to say \"Hi\"\\nconsole.log(\"Hi\");\\n```\\n\\nExample in **C**:\\n\\n```c\\n#include \\n\\nint main() {\\n printf(\"Hi\\\\n\");\\n return 0;\\n}\\n```\\n\\nExample in **Java**:\\n\\n```java\\npublic class SayHi {\\n public static void main(String[] args) {\\n System.out.println(\"Hi\");\\n }\\n}\\n```\\n\\nWhich language would you like me to focus on, or do you want me to make it interactive so the program greets the user by name?', role='assistant', tool_calls=None, function_call=None, provider_specific_fields={'refusal': None}, annotations=[]), provider_specific_fields={})], usage=Usage(completion_tokens=174, prompt_tokens=12, total_tokens=186, completion_tokens_details=CompletionTokensDetailsWrapper(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0, text_tokens=None), prompt_tokens_details=PromptTokensDetailsWrapper(audio_tokens=0, cached_tokens=0, text_tokens=None, image_tokens=None)))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "response = completion(\n", + " model=\"cometapi/gpt-5-chat-latest\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dJBOUYdwCEn1", + "outputId": "ffa18679-ec15-4dad-fe2b-68665cdf36b0" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "ModelResponse(id='02176058998406949c23b3bf3d52941de23f13565a086747738f0', created=1760589991, model='deepseek-v3.2-exp', object='chat.completion', system_fingerprint=None, choices=[Choices(finish_reason='stop', index=0, message=Message(content='Here are several ways to say \"hi\" in different programming languages:\\n\\n## Python\\n```python\\nprint(\"Hi!\")\\n```\\n\\n## JavaScript (Browser)\\n```javascript\\nconsole.log(\"Hi!\");\\n// or\\nalert(\"Hi!\");\\n```\\n\\n## JavaScript (Node.js)\\n```javascript\\nconsole.log(\"Hi!\");\\n```\\n\\n## Java\\n```java\\npublic class Hello {\\n public static void main(String[] args) {\\n System.out.println(\"Hi!\");\\n }\\n}\\n```\\n\\n## C\\n```c\\n#include \\n\\nint main() {\\n printf(\"Hi!\\\\n\");\\n return 0;\\n}\\n```\\n\\n## C++\\n```cpp\\n#include \\n\\nint main() {\\n std::cout << \"Hi!\" << std::endl;\\n return 0;\\n}\\n```\\n\\n## C#\\n```csharp\\nusing System;\\n\\nclass Program {\\n static void Main() {\\n Console.WriteLine(\"Hi!\");\\n }\\n}\\n```\\n\\n## PHP\\n```php\\n\\n```\\n\\n## Ruby\\n```ruby\\nputs \"Hi!\"\\n```\\n\\n## Go\\n```go\\npackage main\\n\\nimport \"fmt\"\\n\\nfunc main() {\\n fmt.Println(\"Hi!\")\\n}\\n```\\n\\n## Rust\\n```rust\\nfn main() {\\n println!(\"Hi!\");\\n}\\n```\\n\\n## Swift\\n```swift\\nprint(\"Hi!\")\\n```\\n\\n## Kotlin\\n```kotlin\\nfun main() {\\n println(\"Hi!\")\\n}\\n```\\n\\n## HTML (webpage)\\n```html\\n\\n\\n\\n Hi Page\\n\\n\\n

Hi!

\\n\\n\\n```\\n\\nThe Python version is probably the simplest if you\\'re just getting started!', role='assistant', tool_calls=None, function_call=None, provider_specific_fields={'refusal': None}), provider_specific_fields={})], usage=Usage(completion_tokens=347, prompt_tokens=10, total_tokens=357, completion_tokens_details=CompletionTokensDetailsWrapper(accepted_prediction_tokens=None, audio_tokens=None, reasoning_tokens=0, rejected_prediction_tokens=None, text_tokens=None), prompt_tokens_details=PromptTokensDetailsWrapper(audio_tokens=None, cached_tokens=0, text_tokens=None, image_tokens=None)), service_tier='default')" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "response = completion(\n", + " model=\"cometapi/deepseek-v3.2-exp\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Streaming" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Streaming Responses" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I'm\n", + " doing\n", + " well\n", + " —\n", + " thanks\n", + " for\n", + " asking\n", + "!\n", + " How\n", + " can\n", + " I\n", + " help\n", + " you\n", + " today\n", + "?\n", + "\n" + ] + } + ], + "source": [ + "messages = [{\"role\": \"user\", \"content\": \"Hey, how's it going?\"}]\n", + "response = completion(model=\"cometapi/gpt-5-mini\", messages=messages, stream=True)\n", + "for part in response:\n", + " print(part.choices[0].delta.content or \"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Async Completion" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ModelResponse(id='chatcmpl-CRAAkmfczlmCEnCM55D9CKexbRenn', created=1760589994, model='gpt-5-mini-2025-08-07', object='chat.completion', system_fingerprint=None, choices=[Choices(finish_reason='stop', index=0, message=Message(content=\"I'm doing well, thanks — how are you? How can I help today?\", role='assistant', tool_calls=None, function_call=None, provider_specific_fields={'refusal': None}, annotations=[]), provider_specific_fields={'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'protected_material_code': {'filtered': False, 'detected': False}, 'protected_material_text': {'filtered': False, 'detected': False}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}})], usage=Usage(completion_tokens=26, prompt_tokens=12, total_tokens=38, completion_tokens_details=CompletionTokensDetailsWrapper(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0, text_tokens=None), prompt_tokens_details=PromptTokensDetailsWrapper(audio_tokens=0, cached_tokens=0, text_tokens=None, image_tokens=None)), prompt_filter_results=[{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'jailbreak': {'filtered': False, 'detected': False}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}])\n" + ] + } + ], + "source": [ + "from litellm import acompletion\n", + "import asyncio\n", + "\n", + "async def test_get_response():\n", + " user_message = \"Hello, how are you?\"\n", + " messages = [{\"content\": user_message, \"role\": \"user\"}]\n", + " response = await acompletion(model=\"cometapi/gpt-5-mini\", messages=messages)\n", + " return response\n", + "\n", + "response = await test_get_response()\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Async Streaming" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "test acompletion + streaming\n", + "response: \n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content='Hi', role='assistant', function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' —', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' I', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content='’m', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' doing', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' well', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=',', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' thanks', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content='!', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' How', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' are', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' you', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content='?', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' What', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' can', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' I', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' help', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' you', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' with', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content=' today', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(provider_specific_fields=None, content='?', role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None, citations=None)\n", + "ModelResponseStream(id='chatcmpl-CRAAl9VMDBB5skZt638Qx86K9h1Hb', created=1760589996, model='gpt-5-mini', object='chat.completion.chunk', system_fingerprint=None, choices=[StreamingChoices(finish_reason='stop', index=0, delta=Delta(provider_specific_fields=None, content=None, role=None, function_call=None, tool_calls=None, audio=None), logprobs=None)], provider_specific_fields=None)\n" + ] + } + ], + "source": [ + "from litellm import acompletion\n", + "import asyncio, os, traceback\n", + "\n", + "async def completion_call():\n", + " try:\n", + " print(\"test acompletion + streaming\")\n", + " response = await acompletion(\n", + " model=\"cometapi/gpt-5-mini\", \n", + " messages=[{\"content\": \"Hello, how are you?\", \"role\": \"user\"}], \n", + " stream=True\n", + " )\n", + " print(f\"response: {response}\")\n", + " async for chunk in response:\n", + " print(chunk)\n", + " except:\n", + " print(f\"error occurred: {traceback.format_exc()}\")\n", + " pass\n", + "\n", + "await completion_call()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Embedding" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EmbeddingResponse(model='text-embedding-3-small', data=[{'object': 'embedding', 'index': 0, 'embedding': [-0.018048199, 0.0047550877, -0.013976435, -0.021936804, -0.038773336, -0.03708264, 0.03854791, -0.0007172257, 0.026473511, -0.0027438616, -0.019823432, -0.011947598, -0.013426959, -0.0059914105, 0.020485623, 0.04269012, -0.028276922, -0.015216281, -0.03325039, 0.045057096, 0.0037477135, 0.015793936, -0.005188329, -0.0071713766, 0.008446445, 0.0070938864, 0.0027632343, 0.025656339, 0.022091785, -0.026797561, -0.029840818, -0.0542714, 0.017907308, -0.03454659, -0.014582269, 0.0429719, 0.03575826, 0.007939235, -0.010123054, -0.029587213, 0.018921727, 0.022556728, 0.019598005, 0.008819807, 0.01655475, 0.043310042, -0.034321167, 0.004441604, 0.032686826, 0.047226828, -0.0043253684, 0.006681779, 0.008995921, 0.06593721, 0.0066078105, -0.023190739, -0.00777721, 0.049875587, -0.028023317, -0.019386668, -0.0013252605, 0.009214303, -0.0055828253, -0.007432026, -0.01199691, 0.0054384116, -0.024247425, 0.047255006, -0.013743965, 0.012799991, 0.009883538, -0.005579303, -0.012616833, -0.014709071, -0.004473305, -0.022204498, 0.010454148, -0.02202134, 0.034631126, 0.0097567355, 0.041478455, -0.010750021, -0.0005340668, -0.041450277, -0.04516981, 0.014709071, -0.06142869, 0.021640932, -0.0008752884, -0.0012671428, -0.045254346, -0.004216178, -0.028220564, -0.011074071, 0.010693664, -0.0029481545, -0.039590508, -0.030178957, -0.019062618, -0.03539194, 0.019978413, 0.019161243, -0.025924034, 0.0058329077, -0.029305428, 0.028840488, 0.02731886, -0.0008048426, -0.056582022, 0.003043256, -0.08459125, -0.012560476, 0.00081100664, 0.0015771041, 0.015188103, -0.0049206354, 0.046888687, -0.027107522, 0.019245777, -0.011412211, 0.039336905, -0.018611765, 0.0429719, -0.04302826, -0.018132735, -0.0074883825, -0.02035882, -0.073038146, -0.042380158, 0.04485985, 0.03361671, -0.033842135, -0.0017259207, -0.0017091898, -0.049199305, -0.024148801, -0.044803493, 0.040943068, -0.03093977, 0.045057096, -0.0186963, -0.014053926, -0.009848315, -0.0070480965, -0.0060054995, -0.02813603, -0.022105874, 0.010235767, -0.004476827, 0.027220234, -0.026290352, 0.0216832, -0.05559578, 0.042464696, 0.0253182, -0.0031594916, 0.02266944, -0.030798879, -0.02896729, -0.0005891025, 0.004061197, -0.042295624, -0.008383043, 0.017146494, -0.025797231, -0.046522368, 0.044127215, 0.021105545, -0.04302826, 0.024430584, -0.014934498, -0.01556851, -0.075743265, -0.022415835, -0.028586883, 0.032743182, 0.03539194, -0.0034483192, -0.04669144, 0.051932603, 0.021626843, 0.03127791, 0.015610777, -0.016470214, -0.0056744046, -0.012743635, 0.060132485, 0.017428277, -0.0039942735, -0.017118316, 0.025106862, 0.008974788, 0.018513141, 0.0016035212, -0.0049593803, 0.0017514573, 0.031221554, -0.034856554, -0.011461522, 0.04621241, 0.044239927, 0.034715664, -0.0121941585, -0.012053267, -0.08526753, -0.011813751, -0.025769053, 0.0125182085, -0.0046670306, 0.038266126, 0.1187997, 0.005787118, -0.030038064, -0.054553185, -0.041506633, -0.024078354, 0.0071854657, -0.013391736, 0.03192601, -0.059625275, 0.0023458432, 0.027924692, 0.09163582, 0.030967949, 0.017639615, 0.01489223, 0.029559033, 0.042943723, 0.0003306547, 0.0047198646, 0.029897174, 0.00012603184, 0.0046811197, -0.0427183, 0.01789322, 0.018175002, -0.0081857955, 0.02581132, 0.009890582, 0.03840702, -0.094453655, -0.01076411, 0.06858598, 0.041647524, 0.033532172, 0.007467249, -0.008235107, -0.030967949, 0.0151317455, 0.027361127, 0.011834885, 0.008707094, 0.008178751, -0.022458103, 0.02844599, 0.003605061, -0.02399382, 0.05212985, 0.06041427, -0.023317542, -0.013335379, -0.044099037, -0.040802173, -0.0047656544, -0.023909286, 0.017315563, 0.017428277, 0.00736158, -0.0016070436, -0.055454887, -0.038012523, -0.020626513, 0.018273626, 0.03260229, -0.016991513, 0.038463376, -0.022458103, -0.0109613575, -0.021810003, 0.04846667, -0.042521052, 0.008601425, -0.019259866, -0.0040048403, -0.03308132, -0.02499415, 0.026783472, -0.032884073, 0.021824092, 0.013145176, -0.009186125, -0.01769597, 0.03240504, -0.015343083, -0.012539342, 0.03578644, -0.012299826, 0.011898286, 0.035730083, 0.058441788, 0.032010544, 0.048720278, 0.012926794, -0.0015207474, -0.03313768, 0.014540002, 0.020189751, 0.00029058868, 0.011531969, -0.022514459, 0.019752987, -0.037956167, 0.005272864, -0.042295624, -0.08521117, -0.03494109, 0.053313337, 0.029981708, -0.008150573, -0.053200625, 0.059681635, -0.035476476, 0.034828376, 0.00087881065, 0.025712697, 0.018668123, 0.03212326, 0.008474623, 0.017836861, 0.004910068, 0.016174342, -0.059681635, 0.04004136, 0.00753065, 0.008150573, -0.038012523, 0.0051178834, 0.012525253, 0.022119964, 0.030235313, 0.008242152, -0.01835816, -0.003150686, 0.010714797, -0.0033162334, -0.028882755, -0.06836055, 0.056159347, 0.013624207, 0.0077349427, 0.0066183778, 0.018583586, -0.008883208, -0.046550546, 0.046945043, -0.07393985, -0.017343743, 0.029530855, -0.010982491, 0.008129438, 0.009700378, -0.024613742, -0.0030097943, 0.0078053884, -0.006438741, 0.04770586, -0.008221018, 0.01654066, 0.02498006, -0.015793936, -0.010827511, 0.02399382, 0.03192601, 0.022923045, -0.029192716, 0.006724046, -0.04601516, 0.038519733, 0.031531516, 0.019443026, 0.000109466084, 0.03525105, -0.027248414, -0.038125236, 0.011771483, -0.007467249, 0.010285079, 0.01670973, -0.007861745, 0.026868006, 0.052327096, 0.026374886, -0.03905512, 0.031193376, -0.053566944, 0.04257741, -0.004670553, 0.0168788, 0.035166513, -0.057878222, 0.07095295, -0.009749691, -0.0137510095, -0.02151413, -0.02431787, 0.010073741, -0.05176353, -0.02083785, 0.003959051, -0.02682574, 0.062104966, -0.011461522, 0.04170388, 0.0076363184, 0.026177637, 0.0144413775, 0.014821785, -0.00046890447, 0.0050544823, 0.00032228927, -0.038970586, -0.011355854, -0.056300238, -0.04302826, -0.003545182, 0.04021043, 0.0051108385, -0.048438493, 0.00252548, -0.07692675, -0.0012433673, 0.0054278444, 0.029305428, -0.016188432, -0.003263399, -0.046156053, 6.031917e-05, 0.060977835, -0.016611107, -0.010637308, -0.012602744, 0.016442036, -0.051509928, -0.016991513, 0.0019407802, 0.019161243, 0.045282524, 0.031869654, -0.036941748, -0.035814617, -0.017850952, -0.027192056, -0.049734693, -0.020964652, 0.0228526, -0.025050506, 0.023472521, 0.025740875, -0.017738238, -0.009813092, -0.030883415, -0.012405495, -0.03277136, -0.029502677, 0.016780175, -0.04421175, -0.0020816717, 0.010341435, 0.059230782, -0.041901127, -0.04119667, 0.025924034, 0.02334572, -0.0008435878, 0.020654691, -0.022753974, 0.010700708, -0.013856677, -0.0121941585, -0.011391076, 0.006590199, 0.0050227814, -0.007960369, 0.0008418266, -0.0198657, 0.10781016, -0.0384352, -0.019147152, 0.0057237167, -0.0038181592, -0.047424074, -0.009341106, 0.018499052, -0.016906979, 0.005642704, -0.01837225, -0.038125236, -0.024895526, -0.010285079, -0.055708494, 0.014173684, -0.019724809, 0.00024215724, 0.04500074, 0.048804812, 0.009777869, -0.006572588, 0.008277375, 0.012328005, -0.012609788, 0.026079014, -0.012990195, 0.017963665, -0.007312268, -0.0015682983, 0.05446865, -0.01258161, 0.00035376972, -0.011299497, -0.036321826, -0.0071854657, 0.012969062, 0.026558045, -0.051819887, -0.0029146927, -0.044606246, -0.010383703, -0.03919601, 0.013624207, 0.0030978515, 0.0121941585, -0.0022225631, 0.0512845, -0.0029780937, -0.025191398, -0.015751667, -0.021006921, 0.0039520063, 0.04418357, 0.020570157, 0.00083390146, 0.020541979, -0.004807922, -0.0114263, -0.036152754, 0.018428607, -0.032658648, -0.002035882, 0.013828499, 0.03144698, -0.0003275727, -0.029756282, 0.008488712, 0.0041879993, 0.027826069, 0.0007273523, -0.018949905, -0.0029023646, 0.007861745, 0.011398122, 0.0125322975, 0.014976765, 0.006318983, -0.0066536004, -0.042915545, 0.025867676, -0.015272637, 0.034602948, 0.050241902, 0.014582269, 0.005987888, 0.015244459, -0.050213724, -0.003212326, 0.01315222, -0.022866689, -0.004772699, 0.035673723, -0.024796901, -0.00699174, -0.002072866, 0.022077696, 0.021147812, 0.005093227, -0.039618686, -0.0049241576, 0.012264604, -0.062104966, -0.0022613083, -0.004339458, 0.065486364, -0.0033320836, 0.02944632, 0.017498722, 0.0033039053, -0.020260196, -0.0154980635, -0.05460954, -0.03626547, 0.0072629564, 0.0028900367, 1.2954037e-05, 0.01769597, -0.0045930627, 0.022260854, 0.0027192058, -0.0010566862, -0.0005212985, 0.012158935, -0.0017312041, -0.035110157, -0.0036032998, -0.02317665, -0.01639977, 0.010327346, 0.018259536, -0.011095204, -0.00061904197, -0.023134382, -0.011989865, 0.0025924034, 0.0056708823, 0.03110884, -0.013462181, -0.021105545, 0.010376658, -0.010017385, -0.025106862, 0.026093103, 0.018456785, -0.02134506, 0.0066993902, 0.011891241, -0.010017385, -0.012687278, -0.017132405, 0.04717047, 0.012475941, -0.018752657, -0.008657781, 0.005276386, -0.02582541, 0.02913636, -0.0193444, -0.01101067, 0.029305428, 0.011736261, 0.043140974, 0.02135915, 0.00089422066, 0.009827181, 0.013638296, 0.013884856, -0.014004614, 0.010285079, 0.008108305, -0.04035132, -0.02978446, 0.008481667, -0.022289034, 0.01621661, -0.0057941624, -0.019090796, -0.01852723, -0.022923045, 0.0077208537, -0.039985005, -0.017428277, -0.009460864, 0.018301804, 0.0014397348, 0.04815671, -0.012187114, 0.018879458, 0.021739556, 0.018414518, -0.013462181, -0.06368295, 0.0057096276, 0.013088819, 0.0061640027, 0.031193376, -0.008728228, -0.019245777, 0.010735931, 0.012454808, 0.0397314, -0.017597347, 0.012278693, 0.0130465515, -0.025473181, -0.03215144, -0.0053292206, -0.0027068777, 0.014068015, -0.028079674, 0.016498392, 0.015159924, -0.009207259, -0.02334572, -0.0013710503, 0.008488712, 0.0012231142, 0.0020464489, -0.025149131, -0.021063277, -0.014427288, -0.035222873, 0.051030897, 0.016103897, 0.0063401167, -0.03093977, -0.004684642, -0.0070199184, -0.008495756, -0.0038674714, -0.012222337, -0.022556728, 0.0036015387, -0.040943068, -0.011362898, 0.016794264, 0.017766416, -0.014194817, 0.0011755633, -0.039759576, 0.011384032, -0.0006318103, 0.008298509, 0.04449353, 0.0004838742, 0.016935157, -0.011341765, 0.016864711, -0.00027892113, 0.0009140335, -0.031306088, -0.049452912, -0.0068367594, -0.00011216283, -0.005079138, -0.014420244, 0.01803411, 0.03984411, -0.026276262, -0.0011077593, -0.00063313113, -0.006301372, -0.019992502, 0.0064316965, -0.024289692, 0.0120039545, 0.0068649375, -0.017724149, -0.015667133, -0.0036490895, -0.007953324, 0.024627833, 0.024402406, 0.021810003, -0.015977094, 0.010524594, -0.0060054995, 0.0414221, -0.048551206, 0.01472316, 0.015427617, 0.0029217373, 0.012666144, 0.0048995013, 0.007326357, -0.04187295, -0.0064176074, -0.00674518, 0.0047762212, -0.053059734, -0.09541172, 0.022063607, 0.029530855, 0.01556851, 0.011292453, -0.0038709936, -0.0055370354, -0.016005272, -0.0035170037, -0.0572583, 0.038632445, 0.007981502, -0.005434889, -0.023895197, 0.0021380284, -0.0015084195, 0.016117986, 0.005434889, -0.014694982, -0.007104453, 0.011595369, -0.055229463, 0.0036455672, 0.0027104, -0.010052607, -0.023697948, -0.016315235, -0.002757951, 0.039505973, 0.011095204, 0.0002681341, 0.058948997, -0.0074883825, 0.0050122146, 0.040604927, 0.012912705, -0.025078684, 0.040464036, -0.008925476, -0.00876345, -0.040633105, -0.009024099, 0.024796901, 0.03592733, 0.03626547, -0.029474499, -0.00055431994, 0.0010839839, 0.016737908, 0.013286067, -0.005441934, 0.0059420983, -0.0121941585, 0.015089478, -0.010186454, -0.03477202, -0.0076363184, -0.0087141385, 0.0018439173, 0.028065585, -0.022331301, 0.0029516767, -0.045789734, 0.0010672531, 0.018287715, -0.015948916, 0.04849485, 0.0057589393, 0.0066219, 0.002196146, -0.047255006, 0.012116668, 0.02085194, 0.025924034, -0.0036737456, -0.02877004, 0.016906979, -0.037336245, -0.016258877, 0.010883868, -0.003765325, -0.0049523357, -0.002613537, -0.03263047, 0.023204828, 0.0049946033, -0.007692675, -0.034236632, 0.034095738, 0.020133393, 0.019259866, -0.014103238, 0.024599653, 0.005889264, 0.02430378, 0.0111233825, -0.018780835, -0.00040550332, 0.020232018, 0.03806888, 0.009890582, 0.032376863, 0.031052483, 0.01871039, 0.03891423, -0.0009739124, 0.002759712, 0.017498722, -0.01158128, -0.0045578396, 0.02744566, 0.06497915, 0.024853257, 0.004709298, 0.016667463, -0.00066263025, -0.018132735, -0.013138131, -0.01124314, -0.0125182085, -0.0038111147, 0.03361671, -0.007270001, 0.0012011, -0.01771006, -0.00039999973, 0.024021998, 0.0027896515, 0.0024744067, 0.0013965869, -0.05939985, 0.0014150789, -0.0052517303, 0.052524347, 0.015779847, -0.03327857, 0.042633764, 0.0059420983, -0.023387987, 0.0039097387, -0.028023317, -0.011863063, 0.004378203, 0.02052789, -0.063626595, -0.014864052, 0.014293442, -0.00015938349, -0.007932191, -0.0010954313, 0.023528878, -0.007467249, 0.0059667546, 0.017132405, 0.005730761, -0.00020495309, -0.032038722, 0.0036631785, 0.042915545, -0.029925352, 0.015667133, 0.018935816, -0.0072065997, 0.01556851, -0.025473181, 0.017625526, -0.0026698937, -0.007446115, -0.008622559, -0.043422755, -0.020133393, -0.0039801844, 0.01489223, -0.021655021, 0.015357172, -0.03640636, -0.005663838, -0.028530527, 0.0022648307, -0.00043015933, 0.043591827, -0.015526242, 0.011870108, -0.02530411, -0.016315235, -0.00032316984, -0.030150779, -0.0052552526, 0.020372909, 0.0075024716, 0.0104330145, -0.00055608107, -0.026248084, -0.015202192, -0.03341946, 0.031559695, -0.0012046222, 0.07185466, -0.039590508, 0.022979401, 0.05810365, 0.014025748, -0.029756282, -0.022866689, 0.0073897582, 0.037618026, -0.004180955, -0.0051566283, 0.009728557, -0.03604004, 0.040633105, 0.0026963109, -0.0054172776, 0.034095738, -0.00595971, 0.040943068, -0.031390622, 0.055962097, 0.02117599, -0.012912705, -0.019626183, 0.055877563, 0.017343743, -0.0035416598, 0.013257889, -0.0186963, 0.01656884, -0.06396473, -0.0055405577, 0.020767406, -0.0046564634, 0.045085277, -0.009221348, 0.013645341, 0.008777539, 0.004730432, -0.018625854, -0.011067026, 0.021500042, -0.015047211, 0.004600107, -0.0014344514, -0.0023740216, -0.016188432, 0.006209792, 0.0011993388, 0.004180955, -0.017160583, 0.014497734, 0.015371261, 0.018259536, -0.028333278, -0.008390088, 0.041929305, 0.003923828, 0.02550136, -0.003300383, -0.008058993, -0.010418925, 0.058216363, 0.01885128, -0.02020384, 0.002858336, -0.009806047, -0.022274945, 0.0070445742, 0.026670758, 0.008213974, -0.035307407, -0.027713355, 0.042915545, -0.039675042, -0.0029217373, 0.012053267, -0.003853382, 0.01133472, -0.010073741, 0.005878697, 0.0070938864, -0.035673723, 0.024205158, 0.005896309, 0.030573452, 0.02416289, -0.0072911344, 0.01738601, 0.017005602, -0.02846008, 0.0030344503, 0.018794924, -0.0148076955, -0.0344057, 0.025430914, 0.033503994, -0.0050580045, 0.0077138087, 0.03243322, 0.01372283, -0.005441934, 0.0073404466, -0.0007832686, -0.04767768, 0.0070480965, 0.015145835, 0.026233995, -0.01670973, -0.019513471, -0.014849963, 0.007953324, -0.0032176094, 0.006572588, -0.0012477703, 0.004230267, 0.004476827, -0.021810003, -0.030009886, -0.019273955, -0.0030414949, -0.002918215, 0.060639694, 0.024641922, 0.010327346, 0.026558045, 0.018921727, -0.025867676, -0.016117986, 0.023881108, 0.025360467, 0.009770825, 0.03792799, -0.022429924, 0.033363104, -0.0018914682, 0.04040768, 0.018484963, 0.0070199184, -0.017583257, 0.016258877, 0.010954313, -0.008939565, -0.024148801, -0.02498006, -0.007889924, 0.02748793, 0.0307707, 0.029756282, 0.0051425393, 0.0045719286, -0.03046074, 0.013596028, 0.025684519, -0.0033197557, 0.006967084, 0.03677268, 0.0120039545, -0.0032792494, -0.0032211316, -0.02399382, -0.026924362, -0.013920079, -0.0042197, 0.025346378, -0.0027015943, -0.016991513, 0.0031594916, -0.007579962, 0.018978084, 0.017681882, 0.0126591, 0.028939111, 0.008833896, 0.10183637, 0.0059632324, -0.05196078, -0.023697948, 0.011045893, -0.008777539, -0.013807366, 0.019273955, -0.025346378, 0.0074742935, 0.009961028, -0.010813422, 0.018597675, 0.009636978, 0.014948587, 0.024064265, -0.008693005, -0.020570157, 0.014194817, -0.026219906, -0.02299349, 0.011067026, 0.032066904, 0.013391736, -0.05148175, -0.009489042, -0.03062981, -0.0012847543, 0.07286908, 0.026529867, -0.00025008238, 0.013638296, 0.016089808, 0.018654034, -0.0020394044, -0.024543297, 0.0147795165, -0.009601755, 0.0018791402, -0.040520392, -0.003360262, 0.02216223, 0.0137650985, 0.0059914105, 0.0048361, -0.0009844792, 0.016977424, -0.00934815, 0.024233336, -0.013088819, -0.017555078, -0.0050263037, 0.010595039, -0.027516108, 0.0071537653, -0.023247095, -0.0017655464, -0.015948916, 0.058160007, -0.025966302, 0.0121941585, -0.012384362, -0.0015612538, 0.009946939, 0.00628376, 0.011327676, 0.0109613575, 0.008601425, -0.018329982, 0.055680316, -0.012778858, -0.0100807855, -0.011067026, -0.0036490895, -0.01356785, 0.0073193125, -0.014272308, -0.027403394, -0.030742522, 0.02862915, 0.03062981, -0.014596358, 0.021697288, 0.0042408337, 0.027572464, 0.0019601528, -0.037138995, -0.031306088, 0.041929305, 0.017738238, 0.004857234, 0.008256241, 0.0118278405, 0.021753646, -0.00160176, -0.0018333505, -0.0047374764, 0.042239267, 0.0058329077, -0.026459422, 0.015075389, 0.021147812, -0.005212985, 0.01281408, 0.017738238, 0.008242152, -0.020372909, -0.011081115, -0.011017715, 0.007706764, 0.01834407, 0.01954165, 0.037477136, -0.010278034, 0.015808025, 0.00031590514, -0.017681882, -0.008967743, -0.020612424, -0.025416825, -0.0037970257, -0.029868996, 0.01720285, -0.0144554665, 0.026727116, 0.00414221, 0.0040154075, 0.05838543, 0.0005622451, -0.025219576, 0.004180955, -0.002932304, -0.0090663675, 0.011574236, 0.02450103, -0.012553431, -0.020612424, -0.032095082, 0.015526242, 0.008974788, 0.0053151315, -0.0003112821, -0.017935487, -0.0076222294, 0.03358853, 0.029474499, -0.011496745, -0.012835215, -0.020739228, -0.012482986, -0.037871633, 0.0052517303, -0.012926794, -0.0025237189, 0.0020323596, 0.045113456, -0.04835396, -0.027755624, -0.0079955915, 0.007896968, 0.0072559114, 0.015047211, -0.0014573464, -0.014032792, 0.021091456, -0.0046071517, -0.0065232757, -0.02582541, -0.035870973, -0.015343083, 0.03254593, -0.028431902, -0.003286294, 0.014328664, 0.008840941, 0.015948916, 0.012835215, 0.019400757, -0.012342094, -0.010693664, 0.004772699, -0.03254593, 0.010707753, -0.016822444, -0.0032827717, 0.021246437, -0.04485985, -0.04384543, -0.015906649, -0.009707424, 0.02299349, 0.019513471, -0.010151232, 0.018963994, -0.0057976847, 0.05739919, -0.019922055, -0.029108182, -0.0106232185, 0.021077367, 0.0036455672, -0.026614401, 0.04497256, -0.04446535, -0.0004556959, -0.004578973, 0.003962573, -0.004910068, 0.015089478, -0.0301226, 0.007664497, 0.008375999, 0.031982366, 0.006135824, 0.02152822, -0.015469885, -0.007210122, 0.034715664, -0.01233505, 0.0004490916, -0.0144413775, -0.003150686, -0.02003477, -0.027924692, -0.0015850292, -0.009376328, -0.0035997776, -0.03240504, -0.010912046, 0.0031999978, 0.022303123, -0.008988877, 0.00024633997, -0.0035698381, 0.0070974086, -0.002599448, -0.042267445, -0.016935157, -0.0002481011, -0.041393917, 0.014483645, 0.019006262, -0.02813603, 0.0072030774, -7.3032425e-05, 0.01802002, -0.017188761, 0.015991183, 0.020401087, 0.03542012, 0.04469078, 0.04071764, 0.011095204, -0.031390622, -0.03254593, 0.014187773, 0.016272966, -0.009721513, -0.026388975, -0.014849963, -0.005642704, -0.022556728, 0.0064457855, -0.043450933, 0.010834555, -0.015977094, 0.020880118, -0.02385293, -0.054806788, 0.03789981, 0.0013516777, -0.026431242, -0.015540331, 0.016695641, -0.037167173, -0.021190079, 0.023881108, -0.0045860177, 0.0064105624, -0.007763121, -0.013053596, 0.024472851, -0.0004962022, -0.00976378, 0.060019772, -0.0057624616, -0.04384543, 0.010313257, 0.0076715415, 0.0025888812, -0.03589915, 0.008791628, -0.012785902, 0.01042597, 0.015653044, 0.04767768, -0.009869449, 0.0064457855, -0.010947268, -0.0077349427, -0.032715004, -0.023867019, -0.011327676, -0.00046274049, -0.036998104, 0.013913034, 0.012250515, -0.009996251, 0.021204168, 0.020091126, -0.003740669, -0.0049769916, -0.0140891485, 0.024064265, 0.0038815604, 0.025684519, 0.041788414, -0.013553761, 0.006681779, -0.0050826604, -0.018175002, 0.008228063, -0.006230926, -0.018907638, 0.0154839745, -0.028713685, -0.015047211, -0.019682541, 0.02516322, 0.040802173, 0.007213644, 0.011743305, -0.015963005, -0.03818159, 0.01191942, -0.031728763, -0.011863063, 0.023881108, 0.0053116092, -0.020992832, -0.017991843, -0.00405063, -0.017780505, -0.0057659843, 0.02978446, 0.031165197, 0.0014221234, 0.021316882, 0.026008569, -0.0018544842, -0.032658648, 0.028474169, 0.013109953, 0.018076377, 0.0007991189, -0.0042373114, 0.028910933, -0.0029358263, 0.021866359, 0.024472851, -0.002576553, -0.033532172, 0.01920351, -0.0095665315, -0.03093977, 0.0034817809, 0.018654034, -0.0074038478, 0.021443684, 0.0038604268, -0.02745975, 0.031587873, 0.0061146906, 0.022711707, -0.019795254, -0.016991513, -0.04471896, -0.007875834, -0.0034941088, -0.043789074, 0.021091456, 0.024909616, -0.013194487, -0.0042690123, 0.027896514, -0.018414518, -0.023303451, -0.025797231, -0.009524264]}], object='list', usage=Usage(completion_tokens=0, prompt_tokens=3, total_tokens=3, completion_tokens_details=None, prompt_tokens_details=None))\n" + ] + } + ], + "source": [ + "import litellm\n", + "\n", + "\n", + "async def main():\n", + " response = await litellm.aembedding(\n", + " model=\"cometapi/text-embedding-3-small\", # The model name must include prefix \"openai\" + the model name from ai/ml api\n", + " api_key=api_key, # your aiml api-key\n", + " api_base=\"https://api.cometapi.com/v1\", # šŸ‘ˆ the URL has changed from v2 to v1\n", + " input=\"Your text string\",\n", + " )\n", + " print(response)\n", + "\n", + "await main()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EmbeddingResponse(model='text-embedding-3-small', data=[{'object': 'embedding', 'index': 0, 'embedding': [-0.018048199, 0.0047550877, -0.013976435, -0.021936804, -0.038773336, -0.03708264, 0.03854791, -0.0007172257, 0.026473511, -0.0027438616, -0.019823432, -0.011947598, -0.013426959, -0.0059914105, 0.020485623, 0.04269012, -0.028276922, -0.015216281, -0.03325039, 0.045057096, 0.0037477135, 0.015793936, -0.005188329, -0.0071713766, 0.008446445, 0.0070938864, 0.0027632343, 0.025656339, 0.022091785, -0.026797561, -0.029840818, -0.0542714, 0.017907308, -0.03454659, -0.014582269, 0.0429719, 0.03575826, 0.007939235, -0.010123054, -0.029587213, 0.018921727, 0.022556728, 0.019598005, 0.008819807, 0.01655475, 0.043310042, -0.034321167, 0.004441604, 0.032686826, 0.047226828, -0.0043253684, 0.006681779, 0.008995921, 0.06593721, 0.0066078105, -0.023190739, -0.00777721, 0.049875587, -0.028023317, -0.019386668, -0.0013252605, 0.009214303, -0.0055828253, -0.007432026, -0.01199691, 0.0054384116, -0.024247425, 0.047255006, -0.013743965, 0.012799991, 0.009883538, -0.005579303, -0.012616833, -0.014709071, -0.004473305, -0.022204498, 0.010454148, -0.02202134, 0.034631126, 0.0097567355, 0.041478455, -0.010750021, -0.0005340668, -0.041450277, -0.04516981, 0.014709071, -0.06142869, 0.021640932, -0.0008752884, -0.0012671428, -0.045254346, -0.004216178, -0.028220564, -0.011074071, 0.010693664, -0.0029481545, -0.039590508, -0.030178957, -0.019062618, -0.03539194, 0.019978413, 0.019161243, -0.025924034, 0.0058329077, -0.029305428, 0.028840488, 0.02731886, -0.0008048426, -0.056582022, 0.003043256, -0.08459125, -0.012560476, 0.00081100664, 0.0015771041, 0.015188103, -0.0049206354, 0.046888687, -0.027107522, 0.019245777, -0.011412211, 0.039336905, -0.018611765, 0.0429719, -0.04302826, -0.018132735, -0.0074883825, -0.02035882, -0.073038146, -0.042380158, 0.04485985, 0.03361671, -0.033842135, -0.0017259207, -0.0017091898, -0.049199305, -0.024148801, -0.044803493, 0.040943068, -0.03093977, 0.045057096, -0.0186963, -0.014053926, -0.009848315, -0.0070480965, -0.0060054995, -0.02813603, -0.022105874, 0.010235767, -0.004476827, 0.027220234, -0.026290352, 0.0216832, -0.05559578, 0.042464696, 0.0253182, -0.0031594916, 0.02266944, -0.030798879, -0.02896729, -0.0005891025, 0.004061197, -0.042295624, -0.008383043, 0.017146494, -0.025797231, -0.046522368, 0.044127215, 0.021105545, -0.04302826, 0.024430584, -0.014934498, -0.01556851, -0.075743265, -0.022415835, -0.028586883, 0.032743182, 0.03539194, -0.0034483192, -0.04669144, 0.051932603, 0.021626843, 0.03127791, 0.015610777, -0.016470214, -0.0056744046, -0.012743635, 0.060132485, 0.017428277, -0.0039942735, -0.017118316, 0.025106862, 0.008974788, 0.018513141, 0.0016035212, -0.0049593803, 0.0017514573, 0.031221554, -0.034856554, -0.011461522, 0.04621241, 0.044239927, 0.034715664, -0.0121941585, -0.012053267, -0.08526753, -0.011813751, -0.025769053, 0.0125182085, -0.0046670306, 0.038266126, 0.1187997, 0.005787118, -0.030038064, -0.054553185, -0.041506633, -0.024078354, 0.0071854657, -0.013391736, 0.03192601, -0.059625275, 0.0023458432, 0.027924692, 0.09163582, 0.030967949, 0.017639615, 0.01489223, 0.029559033, 0.042943723, 0.0003306547, 0.0047198646, 0.029897174, 0.00012603184, 0.0046811197, -0.0427183, 0.01789322, 0.018175002, -0.0081857955, 0.02581132, 0.009890582, 0.03840702, -0.094453655, -0.01076411, 0.06858598, 0.041647524, 0.033532172, 0.007467249, -0.008235107, -0.030967949, 0.0151317455, 0.027361127, 0.011834885, 0.008707094, 0.008178751, -0.022458103, 0.02844599, 0.003605061, -0.02399382, 0.05212985, 0.06041427, -0.023317542, -0.013335379, -0.044099037, -0.040802173, -0.0047656544, -0.023909286, 0.017315563, 0.017428277, 0.00736158, -0.0016070436, -0.055454887, -0.038012523, -0.020626513, 0.018273626, 0.03260229, -0.016991513, 0.038463376, -0.022458103, -0.0109613575, -0.021810003, 0.04846667, -0.042521052, 0.008601425, -0.019259866, -0.0040048403, -0.03308132, -0.02499415, 0.026783472, -0.032884073, 0.021824092, 0.013145176, -0.009186125, -0.01769597, 0.03240504, -0.015343083, -0.012539342, 0.03578644, -0.012299826, 0.011898286, 0.035730083, 0.058441788, 0.032010544, 0.048720278, 0.012926794, -0.0015207474, -0.03313768, 0.014540002, 0.020189751, 0.00029058868, 0.011531969, -0.022514459, 0.019752987, -0.037956167, 0.005272864, -0.042295624, -0.08521117, -0.03494109, 0.053313337, 0.029981708, -0.008150573, -0.053200625, 0.059681635, -0.035476476, 0.034828376, 0.00087881065, 0.025712697, 0.018668123, 0.03212326, 0.008474623, 0.017836861, 0.004910068, 0.016174342, -0.059681635, 0.04004136, 0.00753065, 0.008150573, -0.038012523, 0.0051178834, 0.012525253, 0.022119964, 0.030235313, 0.008242152, -0.01835816, -0.003150686, 0.010714797, -0.0033162334, -0.028882755, -0.06836055, 0.056159347, 0.013624207, 0.0077349427, 0.0066183778, 0.018583586, -0.008883208, -0.046550546, 0.046945043, -0.07393985, -0.017343743, 0.029530855, -0.010982491, 0.008129438, 0.009700378, -0.024613742, -0.0030097943, 0.0078053884, -0.006438741, 0.04770586, -0.008221018, 0.01654066, 0.02498006, -0.015793936, -0.010827511, 0.02399382, 0.03192601, 0.022923045, -0.029192716, 0.006724046, -0.04601516, 0.038519733, 0.031531516, 0.019443026, 0.000109466084, 0.03525105, -0.027248414, -0.038125236, 0.011771483, -0.007467249, 0.010285079, 0.01670973, -0.007861745, 0.026868006, 0.052327096, 0.026374886, -0.03905512, 0.031193376, -0.053566944, 0.04257741, -0.004670553, 0.0168788, 0.035166513, -0.057878222, 0.07095295, -0.009749691, -0.0137510095, -0.02151413, -0.02431787, 0.010073741, -0.05176353, -0.02083785, 0.003959051, -0.02682574, 0.062104966, -0.011461522, 0.04170388, 0.0076363184, 0.026177637, 0.0144413775, 0.014821785, -0.00046890447, 0.0050544823, 0.00032228927, -0.038970586, -0.011355854, -0.056300238, -0.04302826, -0.003545182, 0.04021043, 0.0051108385, -0.048438493, 0.00252548, -0.07692675, -0.0012433673, 0.0054278444, 0.029305428, -0.016188432, -0.003263399, -0.046156053, 6.031917e-05, 0.060977835, -0.016611107, -0.010637308, -0.012602744, 0.016442036, -0.051509928, -0.016991513, 0.0019407802, 0.019161243, 0.045282524, 0.031869654, -0.036941748, -0.035814617, -0.017850952, -0.027192056, -0.049734693, -0.020964652, 0.0228526, -0.025050506, 0.023472521, 0.025740875, -0.017738238, -0.009813092, -0.030883415, -0.012405495, -0.03277136, -0.029502677, 0.016780175, -0.04421175, -0.0020816717, 0.010341435, 0.059230782, -0.041901127, -0.04119667, 0.025924034, 0.02334572, -0.0008435878, 0.020654691, -0.022753974, 0.010700708, -0.013856677, -0.0121941585, -0.011391076, 0.006590199, 0.0050227814, -0.007960369, 0.0008418266, -0.0198657, 0.10781016, -0.0384352, -0.019147152, 0.0057237167, -0.0038181592, -0.047424074, -0.009341106, 0.018499052, -0.016906979, 0.005642704, -0.01837225, -0.038125236, -0.024895526, -0.010285079, -0.055708494, 0.014173684, -0.019724809, 0.00024215724, 0.04500074, 0.048804812, 0.009777869, -0.006572588, 0.008277375, 0.012328005, -0.012609788, 0.026079014, -0.012990195, 0.017963665, -0.007312268, -0.0015682983, 0.05446865, -0.01258161, 0.00035376972, -0.011299497, -0.036321826, -0.0071854657, 0.012969062, 0.026558045, -0.051819887, -0.0029146927, -0.044606246, -0.010383703, -0.03919601, 0.013624207, 0.0030978515, 0.0121941585, -0.0022225631, 0.0512845, -0.0029780937, -0.025191398, -0.015751667, -0.021006921, 0.0039520063, 0.04418357, 0.020570157, 0.00083390146, 0.020541979, -0.004807922, -0.0114263, -0.036152754, 0.018428607, -0.032658648, -0.002035882, 0.013828499, 0.03144698, -0.0003275727, -0.029756282, 0.008488712, 0.0041879993, 0.027826069, 0.0007273523, -0.018949905, -0.0029023646, 0.007861745, 0.011398122, 0.0125322975, 0.014976765, 0.006318983, -0.0066536004, -0.042915545, 0.025867676, -0.015272637, 0.034602948, 0.050241902, 0.014582269, 0.005987888, 0.015244459, -0.050213724, -0.003212326, 0.01315222, -0.022866689, -0.004772699, 0.035673723, -0.024796901, -0.00699174, -0.002072866, 0.022077696, 0.021147812, 0.005093227, -0.039618686, -0.0049241576, 0.012264604, -0.062104966, -0.0022613083, -0.004339458, 0.065486364, -0.0033320836, 0.02944632, 0.017498722, 0.0033039053, -0.020260196, -0.0154980635, -0.05460954, -0.03626547, 0.0072629564, 0.0028900367, 1.2954037e-05, 0.01769597, -0.0045930627, 0.022260854, 0.0027192058, -0.0010566862, -0.0005212985, 0.012158935, -0.0017312041, -0.035110157, -0.0036032998, -0.02317665, -0.01639977, 0.010327346, 0.018259536, -0.011095204, -0.00061904197, -0.023134382, -0.011989865, 0.0025924034, 0.0056708823, 0.03110884, -0.013462181, -0.021105545, 0.010376658, -0.010017385, -0.025106862, 0.026093103, 0.018456785, -0.02134506, 0.0066993902, 0.011891241, -0.010017385, -0.012687278, -0.017132405, 0.04717047, 0.012475941, -0.018752657, -0.008657781, 0.005276386, -0.02582541, 0.02913636, -0.0193444, -0.01101067, 0.029305428, 0.011736261, 0.043140974, 0.02135915, 0.00089422066, 0.009827181, 0.013638296, 0.013884856, -0.014004614, 0.010285079, 0.008108305, -0.04035132, -0.02978446, 0.008481667, -0.022289034, 0.01621661, -0.0057941624, -0.019090796, -0.01852723, -0.022923045, 0.0077208537, -0.039985005, -0.017428277, -0.009460864, 0.018301804, 0.0014397348, 0.04815671, -0.012187114, 0.018879458, 0.021739556, 0.018414518, -0.013462181, -0.06368295, 0.0057096276, 0.013088819, 0.0061640027, 0.031193376, -0.008728228, -0.019245777, 0.010735931, 0.012454808, 0.0397314, -0.017597347, 0.012278693, 0.0130465515, -0.025473181, -0.03215144, -0.0053292206, -0.0027068777, 0.014068015, -0.028079674, 0.016498392, 0.015159924, -0.009207259, -0.02334572, -0.0013710503, 0.008488712, 0.0012231142, 0.0020464489, -0.025149131, -0.021063277, -0.014427288, -0.035222873, 0.051030897, 0.016103897, 0.0063401167, -0.03093977, -0.004684642, -0.0070199184, -0.008495756, -0.0038674714, -0.012222337, -0.022556728, 0.0036015387, -0.040943068, -0.011362898, 0.016794264, 0.017766416, -0.014194817, 0.0011755633, -0.039759576, 0.011384032, -0.0006318103, 0.008298509, 0.04449353, 0.0004838742, 0.016935157, -0.011341765, 0.016864711, -0.00027892113, 0.0009140335, -0.031306088, -0.049452912, -0.0068367594, -0.00011216283, -0.005079138, -0.014420244, 0.01803411, 0.03984411, -0.026276262, -0.0011077593, -0.00063313113, -0.006301372, -0.019992502, 0.0064316965, -0.024289692, 0.0120039545, 0.0068649375, -0.017724149, -0.015667133, -0.0036490895, -0.007953324, 0.024627833, 0.024402406, 0.021810003, -0.015977094, 0.010524594, -0.0060054995, 0.0414221, -0.048551206, 0.01472316, 0.015427617, 0.0029217373, 0.012666144, 0.0048995013, 0.007326357, -0.04187295, -0.0064176074, -0.00674518, 0.0047762212, -0.053059734, -0.09541172, 0.022063607, 0.029530855, 0.01556851, 0.011292453, -0.0038709936, -0.0055370354, -0.016005272, -0.0035170037, -0.0572583, 0.038632445, 0.007981502, -0.005434889, -0.023895197, 0.0021380284, -0.0015084195, 0.016117986, 0.005434889, -0.014694982, -0.007104453, 0.011595369, -0.055229463, 0.0036455672, 0.0027104, -0.010052607, -0.023697948, -0.016315235, -0.002757951, 0.039505973, 0.011095204, 0.0002681341, 0.058948997, -0.0074883825, 0.0050122146, 0.040604927, 0.012912705, -0.025078684, 0.040464036, -0.008925476, -0.00876345, -0.040633105, -0.009024099, 0.024796901, 0.03592733, 0.03626547, -0.029474499, -0.00055431994, 0.0010839839, 0.016737908, 0.013286067, -0.005441934, 0.0059420983, -0.0121941585, 0.015089478, -0.010186454, -0.03477202, -0.0076363184, -0.0087141385, 0.0018439173, 0.028065585, -0.022331301, 0.0029516767, -0.045789734, 0.0010672531, 0.018287715, -0.015948916, 0.04849485, 0.0057589393, 0.0066219, 0.002196146, -0.047255006, 0.012116668, 0.02085194, 0.025924034, -0.0036737456, -0.02877004, 0.016906979, -0.037336245, -0.016258877, 0.010883868, -0.003765325, -0.0049523357, -0.002613537, -0.03263047, 0.023204828, 0.0049946033, -0.007692675, -0.034236632, 0.034095738, 0.020133393, 0.019259866, -0.014103238, 0.024599653, 0.005889264, 0.02430378, 0.0111233825, -0.018780835, -0.00040550332, 0.020232018, 0.03806888, 0.009890582, 0.032376863, 0.031052483, 0.01871039, 0.03891423, -0.0009739124, 0.002759712, 0.017498722, -0.01158128, -0.0045578396, 0.02744566, 0.06497915, 0.024853257, 0.004709298, 0.016667463, -0.00066263025, -0.018132735, -0.013138131, -0.01124314, -0.0125182085, -0.0038111147, 0.03361671, -0.007270001, 0.0012011, -0.01771006, -0.00039999973, 0.024021998, 0.0027896515, 0.0024744067, 0.0013965869, -0.05939985, 0.0014150789, -0.0052517303, 0.052524347, 0.015779847, -0.03327857, 0.042633764, 0.0059420983, -0.023387987, 0.0039097387, -0.028023317, -0.011863063, 0.004378203, 0.02052789, -0.063626595, -0.014864052, 0.014293442, -0.00015938349, -0.007932191, -0.0010954313, 0.023528878, -0.007467249, 0.0059667546, 0.017132405, 0.005730761, -0.00020495309, -0.032038722, 0.0036631785, 0.042915545, -0.029925352, 0.015667133, 0.018935816, -0.0072065997, 0.01556851, -0.025473181, 0.017625526, -0.0026698937, -0.007446115, -0.008622559, -0.043422755, -0.020133393, -0.0039801844, 0.01489223, -0.021655021, 0.015357172, -0.03640636, -0.005663838, -0.028530527, 0.0022648307, -0.00043015933, 0.043591827, -0.015526242, 0.011870108, -0.02530411, -0.016315235, -0.00032316984, -0.030150779, -0.0052552526, 0.020372909, 0.0075024716, 0.0104330145, -0.00055608107, -0.026248084, -0.015202192, -0.03341946, 0.031559695, -0.0012046222, 0.07185466, -0.039590508, 0.022979401, 0.05810365, 0.014025748, -0.029756282, -0.022866689, 0.0073897582, 0.037618026, -0.004180955, -0.0051566283, 0.009728557, -0.03604004, 0.040633105, 0.0026963109, -0.0054172776, 0.034095738, -0.00595971, 0.040943068, -0.031390622, 0.055962097, 0.02117599, -0.012912705, -0.019626183, 0.055877563, 0.017343743, -0.0035416598, 0.013257889, -0.0186963, 0.01656884, -0.06396473, -0.0055405577, 0.020767406, -0.0046564634, 0.045085277, -0.009221348, 0.013645341, 0.008777539, 0.004730432, -0.018625854, -0.011067026, 0.021500042, -0.015047211, 0.004600107, -0.0014344514, -0.0023740216, -0.016188432, 0.006209792, 0.0011993388, 0.004180955, -0.017160583, 0.014497734, 0.015371261, 0.018259536, -0.028333278, -0.008390088, 0.041929305, 0.003923828, 0.02550136, -0.003300383, -0.008058993, -0.010418925, 0.058216363, 0.01885128, -0.02020384, 0.002858336, -0.009806047, -0.022274945, 0.0070445742, 0.026670758, 0.008213974, -0.035307407, -0.027713355, 0.042915545, -0.039675042, -0.0029217373, 0.012053267, -0.003853382, 0.01133472, -0.010073741, 0.005878697, 0.0070938864, -0.035673723, 0.024205158, 0.005896309, 0.030573452, 0.02416289, -0.0072911344, 0.01738601, 0.017005602, -0.02846008, 0.0030344503, 0.018794924, -0.0148076955, -0.0344057, 0.025430914, 0.033503994, -0.0050580045, 0.0077138087, 0.03243322, 0.01372283, -0.005441934, 0.0073404466, -0.0007832686, -0.04767768, 0.0070480965, 0.015145835, 0.026233995, -0.01670973, -0.019513471, -0.014849963, 0.007953324, -0.0032176094, 0.006572588, -0.0012477703, 0.004230267, 0.004476827, -0.021810003, -0.030009886, -0.019273955, -0.0030414949, -0.002918215, 0.060639694, 0.024641922, 0.010327346, 0.026558045, 0.018921727, -0.025867676, -0.016117986, 0.023881108, 0.025360467, 0.009770825, 0.03792799, -0.022429924, 0.033363104, -0.0018914682, 0.04040768, 0.018484963, 0.0070199184, -0.017583257, 0.016258877, 0.010954313, -0.008939565, -0.024148801, -0.02498006, -0.007889924, 0.02748793, 0.0307707, 0.029756282, 0.0051425393, 0.0045719286, -0.03046074, 0.013596028, 0.025684519, -0.0033197557, 0.006967084, 0.03677268, 0.0120039545, -0.0032792494, -0.0032211316, -0.02399382, -0.026924362, -0.013920079, -0.0042197, 0.025346378, -0.0027015943, -0.016991513, 0.0031594916, -0.007579962, 0.018978084, 0.017681882, 0.0126591, 0.028939111, 0.008833896, 0.10183637, 0.0059632324, -0.05196078, -0.023697948, 0.011045893, -0.008777539, -0.013807366, 0.019273955, -0.025346378, 0.0074742935, 0.009961028, -0.010813422, 0.018597675, 0.009636978, 0.014948587, 0.024064265, -0.008693005, -0.020570157, 0.014194817, -0.026219906, -0.02299349, 0.011067026, 0.032066904, 0.013391736, -0.05148175, -0.009489042, -0.03062981, -0.0012847543, 0.07286908, 0.026529867, -0.00025008238, 0.013638296, 0.016089808, 0.018654034, -0.0020394044, -0.024543297, 0.0147795165, -0.009601755, 0.0018791402, -0.040520392, -0.003360262, 0.02216223, 0.0137650985, 0.0059914105, 0.0048361, -0.0009844792, 0.016977424, -0.00934815, 0.024233336, -0.013088819, -0.017555078, -0.0050263037, 0.010595039, -0.027516108, 0.0071537653, -0.023247095, -0.0017655464, -0.015948916, 0.058160007, -0.025966302, 0.0121941585, -0.012384362, -0.0015612538, 0.009946939, 0.00628376, 0.011327676, 0.0109613575, 0.008601425, -0.018329982, 0.055680316, -0.012778858, -0.0100807855, -0.011067026, -0.0036490895, -0.01356785, 0.0073193125, -0.014272308, -0.027403394, -0.030742522, 0.02862915, 0.03062981, -0.014596358, 0.021697288, 0.0042408337, 0.027572464, 0.0019601528, -0.037138995, -0.031306088, 0.041929305, 0.017738238, 0.004857234, 0.008256241, 0.0118278405, 0.021753646, -0.00160176, -0.0018333505, -0.0047374764, 0.042239267, 0.0058329077, -0.026459422, 0.015075389, 0.021147812, -0.005212985, 0.01281408, 0.017738238, 0.008242152, -0.020372909, -0.011081115, -0.011017715, 0.007706764, 0.01834407, 0.01954165, 0.037477136, -0.010278034, 0.015808025, 0.00031590514, -0.017681882, -0.008967743, -0.020612424, -0.025416825, -0.0037970257, -0.029868996, 0.01720285, -0.0144554665, 0.026727116, 0.00414221, 0.0040154075, 0.05838543, 0.0005622451, -0.025219576, 0.004180955, -0.002932304, -0.0090663675, 0.011574236, 0.02450103, -0.012553431, -0.020612424, -0.032095082, 0.015526242, 0.008974788, 0.0053151315, -0.0003112821, -0.017935487, -0.0076222294, 0.03358853, 0.029474499, -0.011496745, -0.012835215, -0.020739228, -0.012482986, -0.037871633, 0.0052517303, -0.012926794, -0.0025237189, 0.0020323596, 0.045113456, -0.04835396, -0.027755624, -0.0079955915, 0.007896968, 0.0072559114, 0.015047211, -0.0014573464, -0.014032792, 0.021091456, -0.0046071517, -0.0065232757, -0.02582541, -0.035870973, -0.015343083, 0.03254593, -0.028431902, -0.003286294, 0.014328664, 0.008840941, 0.015948916, 0.012835215, 0.019400757, -0.012342094, -0.010693664, 0.004772699, -0.03254593, 0.010707753, -0.016822444, -0.0032827717, 0.021246437, -0.04485985, -0.04384543, -0.015906649, -0.009707424, 0.02299349, 0.019513471, -0.010151232, 0.018963994, -0.0057976847, 0.05739919, -0.019922055, -0.029108182, -0.0106232185, 0.021077367, 0.0036455672, -0.026614401, 0.04497256, -0.04446535, -0.0004556959, -0.004578973, 0.003962573, -0.004910068, 0.015089478, -0.0301226, 0.007664497, 0.008375999, 0.031982366, 0.006135824, 0.02152822, -0.015469885, -0.007210122, 0.034715664, -0.01233505, 0.0004490916, -0.0144413775, -0.003150686, -0.02003477, -0.027924692, -0.0015850292, -0.009376328, -0.0035997776, -0.03240504, -0.010912046, 0.0031999978, 0.022303123, -0.008988877, 0.00024633997, -0.0035698381, 0.0070974086, -0.002599448, -0.042267445, -0.016935157, -0.0002481011, -0.041393917, 0.014483645, 0.019006262, -0.02813603, 0.0072030774, -7.3032425e-05, 0.01802002, -0.017188761, 0.015991183, 0.020401087, 0.03542012, 0.04469078, 0.04071764, 0.011095204, -0.031390622, -0.03254593, 0.014187773, 0.016272966, -0.009721513, -0.026388975, -0.014849963, -0.005642704, -0.022556728, 0.0064457855, -0.043450933, 0.010834555, -0.015977094, 0.020880118, -0.02385293, -0.054806788, 0.03789981, 0.0013516777, -0.026431242, -0.015540331, 0.016695641, -0.037167173, -0.021190079, 0.023881108, -0.0045860177, 0.0064105624, -0.007763121, -0.013053596, 0.024472851, -0.0004962022, -0.00976378, 0.060019772, -0.0057624616, -0.04384543, 0.010313257, 0.0076715415, 0.0025888812, -0.03589915, 0.008791628, -0.012785902, 0.01042597, 0.015653044, 0.04767768, -0.009869449, 0.0064457855, -0.010947268, -0.0077349427, -0.032715004, -0.023867019, -0.011327676, -0.00046274049, -0.036998104, 0.013913034, 0.012250515, -0.009996251, 0.021204168, 0.020091126, -0.003740669, -0.0049769916, -0.0140891485, 0.024064265, 0.0038815604, 0.025684519, 0.041788414, -0.013553761, 0.006681779, -0.0050826604, -0.018175002, 0.008228063, -0.006230926, -0.018907638, 0.0154839745, -0.028713685, -0.015047211, -0.019682541, 0.02516322, 0.040802173, 0.007213644, 0.011743305, -0.015963005, -0.03818159, 0.01191942, -0.031728763, -0.011863063, 0.023881108, 0.0053116092, -0.020992832, -0.017991843, -0.00405063, -0.017780505, -0.0057659843, 0.02978446, 0.031165197, 0.0014221234, 0.021316882, 0.026008569, -0.0018544842, -0.032658648, 0.028474169, 0.013109953, 0.018076377, 0.0007991189, -0.0042373114, 0.028910933, -0.0029358263, 0.021866359, 0.024472851, -0.002576553, -0.033532172, 0.01920351, -0.0095665315, -0.03093977, 0.0034817809, 0.018654034, -0.0074038478, 0.021443684, 0.0038604268, -0.02745975, 0.031587873, 0.0061146906, 0.022711707, -0.019795254, -0.016991513, -0.04471896, -0.007875834, -0.0034941088, -0.043789074, 0.021091456, 0.024909616, -0.013194487, -0.0042690123, 0.027896514, -0.018414518, -0.023303451, -0.025797231, -0.009524264]}], object='list', usage=Usage(completion_tokens=0, prompt_tokens=3, total_tokens=3, completion_tokens_details=None, prompt_tokens_details=None))\n" + ] + } + ], + "source": [ + "import litellm\n", + "\n", + "\n", + "async def main():\n", + " response = await litellm.aembedding(\n", + " model=\"cometapi/text-embedding-3-small\", # The model name must include prefix \"cometapi/\" + the model name from CometAPI\n", + " api_key=api_key, # your CometAPI api-key\n", + " api_base=\"https://api.cometapi.com/v1\",\n", + " input=\"Your text string\",\n", + " )\n", + " print(response)\n", + "\n", + "\n", + "await main()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Async Image Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ImageResponse(created=1760591151, background=None, data=[ImageObject(b64_json=None, revised_prompt=\"Generate an image of an adorable baby sea otter. It should be floating on its back in a calm, clear ocean, playfully grasping a colorful shell in its small paws. The sun is setting in the background, casting a peaceful orange and purple hue across the sky and reflecting upon the ocean waves. The otter's fur is a deep, rich brown and appears silky and wet, with glints of sunlight catching on it. Its eyes are bright, expressing joy and curiosity as it examines its newfound treasure.\", url='https://oaidalleapiprodscus.blob.core.windows.net/private/org-OKnsK88id12jfvnKByup1O0l/user-3GxuMyEg9YMU8LFCPHi31prf/img-7PUEF8Wb6thGDAuZWLJjSnfP.png?st=2025-10-16T04%3A05%3A51Z&se=2025-10-16T06%3A05%3A51Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=38e27a3b-6174-4d3e-90ac-d7d9ad49543f&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-10-16T02%3A51%3A01Z&ske=2025-10-17T02%3A51%3A01Z&sks=b&skv=2024-08-04&sig=IZKG2VE%2B6VdOe5Tq0Zk/5bVyGK/oK/yO8g%2BDX4krpug%3D')], output_format=None, quality=None, size=None, usage=Usage(completion_tokens=0, prompt_tokens=0, total_tokens=0, completion_tokens_details=None, prompt_tokens_details=None, input_tokens=0, input_tokens_details={'image_tokens': 0, 'text_tokens': 0}, output_tokens=0))\n" + ] + } + ], + "source": [ + "import asyncio\n", + "\n", + "import litellm\n", + "\n", + "\n", + "async def main():\n", + " response = await litellm.aimage_generation(\n", + " model=\"cometapi/dall-e-3\", # The model name must include prefix \"cometapi/\" + the model name from CometAPI\n", + " api_key=api_key, # your cometapi api-key\n", + " api_base=\"https://api.cometapi.com/v1\",\n", + " prompt=\"A cute baby sea otter\",\n", + " )\n", + " print(response)\n", + "\n", + "\n", + "await main()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/LiteLLM_Comparing_LLMs.ipynb b/cookbook/LiteLLM_Comparing_LLMs.ipynb new file mode 100644 index 000000000..0b2e4e8c7 --- /dev/null +++ b/cookbook/LiteLLM_Comparing_LLMs.ipynb @@ -0,0 +1,441 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "L-W4C3SgClxl" + }, + "source": [ + "## Comparing LLMs on a Test Set using LiteLLM\n", + "LiteLLM allows you to use any LLM as a drop in replacement for `gpt-3.5-turbo`\n", + "\n", + "This notebook walks through how you can compare GPT-4 vs Claude-2 on a given test set using litellm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fBkbl4Qo9pvz" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "tzS-AXWK8lJC" + }, + "outputs": [], + "source": [ + "from litellm import completion\n", + "\n", + "# init your test set questions\n", + "questions = [\n", + " \"how do i call completion() using LiteLLM\",\n", + " \"does LiteLLM support VertexAI\",\n", + " \"how do I set my keys on replicate llama2?\",\n", + "]\n", + "\n", + "\n", + "# set your prompt\n", + "prompt = \"\"\"\n", + "You are a coding assistant helping users using litellm.\n", + "litellm is a light package to simplify calling OpenAI, Azure, Cohere, Anthropic, Huggingface API Endpoints. It manages:\n", + "\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "vMlqi40x-KAA" + }, + "outputs": [], + "source": [ + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"\"\n", + "os.environ['ANTHROPIC_API_KEY'] = \"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-HOzUfpK-H8J" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ktn25dfKEJF1" + }, + "source": [ + "## Calling gpt-3.5-turbo and claude-2 on the same questions\n", + "\n", + "## LiteLLM `completion()` allows you to call all LLMs in the same format\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "DhXwRlc-9DED" + }, + "outputs": [], + "source": [ + "results = [] # for storing results\n", + "\n", + "models = ['gpt-3.5-turbo', 'claude-2'] # define what models you're testing, see: https://docs.litellm.ai/docs/providers\n", + "for question in questions:\n", + " row = [question]\n", + " for model in models:\n", + " print(\"Calling:\", model, \"question:\", question)\n", + " response = completion( # using litellm.completion\n", + " model=model,\n", + " messages=[\n", + " {'role': 'system', 'content': prompt},\n", + " {'role': 'user', 'content': question}\n", + " ]\n", + " )\n", + " answer = response.choices[0].message['content']\n", + " row.append(answer)\n", + " print(print(\"Calling:\", model, \"answer:\", answer))\n", + "\n", + " results.append(row) # save results\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RkEXhXxCDN77" + }, + "source": [ + "## Visualizing Results" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 761 + }, + "id": "42hrmW6q-n4s", + "outputId": "b763bf39-72b9-4bea-caf6-de6b2412f86d" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.module+javascript": "\n import \"https://ssl.gstatic.com/colaboratory/data_table/881c4a0d49046431/data_table.js\";\n\n const table = window.createDataTable({\n data: [[{\n 'v': 0,\n 'f': \"0\",\n },\n\"how do i call completion() using LiteLLM\",\n\"To call the `completion()` function using LiteLLM, you need to follow these steps:\\n\\n1. Install the `litellm` package by running `pip install litellm` in your terminal.\\n2. Import the `Completion` class from the `litellm` module.\\n3. Initialize an instance of the `Completion` class by providing the required parameters like the API endpoint URL and your API key.\\n4. Call the `complete()` method on the `Completion` instance and pass the text prompt as a string.\\n5. Retrieve the generated completion from the response object and use it as desired.\\n\\nHere's an example:\\n\\n```python\\nfrom litellm.completion import Completion\\n\\n# Initialize the Completion client\\ncompletion_client = Completion(\\n model_name='gpt-3.5-turbo',\\n api_key='your_api_key',\\n endpoint='https://your_endpoint_url'\\n)\\n\\n# Call the completion() method\\nresponse = completion_client.complete(\\\"Once upon a time\\\")\\n\\n# Retrieve the generated completion\\ncompletion = response['choices'][0]['text']\\n\\nprint(completion)\\n```\\n\\nMake sure to replace `'gpt-3.5-turbo'` with the desired model name, `'your_api_key'` with your actual API key, and `'https://your_endpoint_url'` with the correct API endpoint URL provided by your service provider.\\n\\nNote: The above example assumes you have a valid API key and endpoint URL for the OpenAI GPT-3.5-turbo model. Make sure to obtain the necessary credentials according to the API you are using.\",\n\" Here is how you can call the completion() method using LiteLLM:\\n\\nFirst, import LiteLLM:\\n\\n```python\\nimport litellm as lm\\n```\\n\\nThen create a LiteLLM object, specifying the API you want to use (e.g. \\\"openai\\\"):\\n\\n```python \\nai = lm.LiteLLM(\\\"openai\\\")\\n```\\n\\nNow you can call the completion() method on the ai object:\\n\\n```python\\nresponse = ai.completion(\\n prompt=\\\"Hello\\\", \\n model=\\\"text-davinci-003\\\",\\n max_tokens=100\\n)\\n```\\n\\nThe completion() method takes parameters like:\\n\\n- prompt (str): The prompt text to complete \\n- model (str): The AI model to use\\n- max_tokens (int): The maximum number of tokens to generate\\n\\nIt returns a Python dictionary with the AI's response.\\n\\nYou can then access the generated text using:\\n\\n```python\\nprint(response[\\\"choices\\\"][0][\\\"text\\\"]) \\n```\\n\\nSo LiteLLM provides a simple unified interface to call the underlying AI APIs. The completion() method works similarly for OpenAI\"],\n [{\n 'v': 1,\n 'f': \"1\",\n },\n\"does LiteLLM support VertexAI\",\n\"Yes, LiteLLM does support Google Cloud Vertex AI. It provides convenient wrappers and simplified functions to call Vertex AI API endpoints for natural language processing tasks such as text classification, entity extraction, sentiment analysis, etc. You can easily integrate LiteLLM with Vertex AI in your code to leverage its capabilities.\",\n\" Unfortunately, LiteLLM does not currently support VertexAI. LiteLLM focuses on providing a simple interface to call the APIs of services like OpenAI, Azure, Cohere, Anthropic, and Hugging Face. \\n\\nVertexAI is Google's managed machine learning platform. Integrating VertexAI would require additional development work to wrap the VertexAI SDK in a simple interface like LiteLLM provides for other services. \\n\\nHowever, LiteLLM is open source, so it is possible for someone to contribute support for VertexAI. The maintainers would likely welcome a pull request to add VertexAI as an option if implemented well. But out of the box, LiteLLM does not have built-in support for calling VertexAI APIs.\\n\\nThe key services LiteLLM supports are:\\n\\n- OpenAI (GPT, Codex, DALL-E)\\n- Azure Cognitive Services (Text Analytics, Computer Vision, Speech) \\n- Cohere\\n- Anthropic AI\\n- Hugging Face Transformers\\n\\nSo while it doesn't cover every ML API provider, it does make it easy to use the most popular natural language, speech, and vision APIs through a simple interface. Adding VertexAI\"],\n [{\n 'v': 2,\n 'f': \"2\",\n },\n\"how do I set my keys on replicate llama2?\",\n\"To set your keys on Replicate Llama2, follow these steps:\\n\\n1. Open the Llama2 dashboard in your browser.\\n2. Click on the \\\"Settings\\\" tab in the top menu.\\n3. Scroll down to the \\\"API Keys\\\" section.\\n4. Click on the \\\"Add a Key\\\" button.\\n5. Enter a name for your API key to help you identify it later.\\n6. Select the provider for your API key from the dropdown menu. For example, you can select \\\"OpenAI\\\" for OpenAI GPT-3 access.\\n7. Enter your API key in the provided input field. Make sure to copy it correctly.\\n8. Click on the \\\"Save\\\" button to save your API key.\\n\\nNote: The actual steps may vary slightly depending on the platform or interface you are using to access Llama2.\",\n\" Here are the steps to set your API keys on Replicate for litellm:\\n\\n1. Go to your Replicate project settings and select the Environment tab.\\n\\n2. Under Environment Variables, click Add Variable.\\n\\n3. Add variables for the API keys you want to use. The variable names should match the ones used in litellm:\\n\\n- `OPENAI_API_KEY` for OpenAI \\n- `AZURE_API_KEY` for Azure Cognitive Services\\n- `COHERE_API_KEY` for Cohere\\n- `ANTHROPIC_API_KEY` for Anthropic\\n- `HUGGINGFACE_API_KEY` for Hugging Face\\n\\n4. Set the value to your actual API key for each service. Make sure to treat the values as secrets.\\n\\n5. Make sure your litellm code is referencing the environment variable names, for example:\\n\\n```python\\nimport litellm as lm\\n\\nlm.auth(openai_key=os.getenv(\\\"OPENAI_API_KEY\\\")) \\n```\\n\\n6. Restart your Replicate runtime to load the new environment variables.\\n\\nNow litellm will use your\"]],\n columns: [[\"number\", \"index\"], [\"string\", \"Question\"], [\"string\", \"gpt-3.5-turbo\"], [\"string\", \"claude-2\"]],\n columnOptions: [{\"width\": \"1px\", \"className\": \"index_column\"}],\n rowsPerPage: 25,\n helpUrl: \"https://colab.research.google.com/notebooks/data_table.ipynb\",\n suppressOutputScrolling: true,\n minimumWidth: undefined,\n });\n\n function appendQuickchartButton(parentElement) {\n let quickchartButtonContainerElement = document.createElement('div');\n quickchartButtonContainerElement.innerHTML = `\n
\n \n \n\n\n \n
`;\n parentElement.appendChild(quickchartButtonContainerElement);\n }\n\n appendQuickchartButton(table);\n ", + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Questiongpt-3.5-turboclaude-2
0how do i call completion() using LiteLLMTo call the `completion()` function using Lite...Here is how you can call the completion() met...
1does LiteLLM support VertexAIYes, LiteLLM does support Google Cloud Vertex ...Unfortunately, LiteLLM does not currently sup...
2how do I set my keys on replicate llama2?To set your keys on Replicate Llama2, follow t...Here are the steps to set your API keys on Re...
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " Question \\\n", + "0 how do i call completion() using LiteLLM \n", + "1 does LiteLLM support VertexAI \n", + "2 how do I set my keys on replicate llama2? \n", + "\n", + " gpt-3.5-turbo \\\n", + "0 To call the `completion()` function using Lite... \n", + "1 Yes, LiteLLM does support Google Cloud Vertex ... \n", + "2 To set your keys on Replicate Llama2, follow t... \n", + "\n", + " claude-2 \n", + "0 Here is how you can call the completion() met... \n", + "1 Unfortunately, LiteLLM does not currently sup... \n", + "2 Here are the steps to set your API keys on Re... " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a table to visualize results\n", + "import pandas as pd\n", + "\n", + "columns = ['Question'] + models\n", + "df = pd.DataFrame(results, columns=columns)\n", + "\n", + "df" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/LiteLLM_Completion_Cost.ipynb b/cookbook/LiteLLM_Completion_Cost.ipynb new file mode 100644 index 000000000..b8f5eb36a --- /dev/null +++ b/cookbook/LiteLLM_Completion_Cost.ipynb @@ -0,0 +1,241 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Use LiteLLM to calculate costs for all your completion calls\n", + "In this notebook we'll use `litellm.completion_cost` to get completion costs" + ], + "metadata": { + "id": "BgWr0PsUR3vV" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ViczFTjsDzSI" + }, + "outputs": [], + "source": [ + "!pip install litellm==0.1.549 # use 0.1.549 or later" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Calculating costs for gpt-3.5 turbo completion()" + ], + "metadata": { + "id": "k_1CWUwmSNtj" + } + }, + { + "cell_type": "code", + "source": [ + "from litellm import completion, completion_cost\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"\"\n", + "\n", + "messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + "response = completion(\n", + " model=\"gpt-3.5-turbo\",\n", + " messages=messages,\n", + ")\n", + "\n", + "print(response)\n", + "\n", + "cost = completion_cost(completion_response=response)\n", + "formatted_string = f\"Cost for completion call: ${float(cost):.10f}\"\n", + "print(formatted_string)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Tp0fyk-jD0pP", + "outputId": "ce885fb3-3237-41b2-9d8b-3fb30bba498b" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "got response\n", + "{\n", + " \"id\": \"chatcmpl-7vyCApIZaCxP36kb9meUMN2DFSJPh\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1694050442,\n", + " \"model\": \"gpt-3.5-turbo-0613\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"Hello! I'm an AI and I don't have feelings, but I'm here to help you. How can I assist you today?\"\n", + " },\n", + " \"finish_reason\": \"stop\"\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"prompt_tokens\": 13,\n", + " \"completion_tokens\": 28,\n", + " \"total_tokens\": 41\n", + " }\n", + "}\n", + "Cost for completion call: $0.0000755000\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Calculating costs for Together Computer completion()" + ], + "metadata": { + "id": "AjDs4G-uS6PS" + } + }, + { + "cell_type": "code", + "source": [ + "from litellm import completion, completion_cost\n", + "import os\n", + "os.environ['TOGETHERAI_API_KEY'] = \"\"\n", + "\n", + "messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + "response = completion(\n", + " model=\"togethercomputer/llama-2-70b-chat\",\n", + " messages=messages,\n", + ")\n", + "\n", + "print(response)\n", + "\n", + "cost = completion_cost(completion_response=response)\n", + "formatted_string = f\"Cost for completion call: ${float(cost):.10f}\"\n", + "print(formatted_string)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jMPsUV-KEa6a", + "outputId": "7a69b291-f149-4b9c-8a78-9c8142bac759" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \"Hello! I'm doing well, thanks for asking. I hope you're having a great\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1694050771.2821715,\n", + " \"model\": \"togethercomputer/llama-2-70b-chat\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 12,\n", + " \"completion_tokens\": 18,\n", + " \"total_tokens\": 30\n", + " }\n", + "}\n", + "Cost for completion call: $0.0000900000\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Calculating costs for Replicate Llama2 completion()" + ], + "metadata": { + "id": "vEa4s6-7TANS" + } + }, + { + "cell_type": "code", + "source": [ + "from litellm import completion, completion_cost\n", + "import os\n", + "os.environ['REPLICATE_API_KEY'] = \"\"\n", + "\n", + "messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + "response = completion(\n", + " model=\"replicate/llama-2-70b-chat:2796ee9483c3fd7aa2e171d38f4ca12251a30609463dcfd4cd76703f22e96cdf\",\n", + " messages=messages,\n", + ")\n", + "\n", + "print(response)\n", + "\n", + "cost = completion_cost(completion_response=response)\n", + "formatted_string = f\"Cost for completion call: ${float(cost):.10f}\"\n", + "print(formatted_string)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Xf1TKRDuS1bR", + "outputId": "cfb2b484-a6e5-41ad-86c5-7e66aba27648" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" Hello! I'm doing well, thanks for asking. How about you? Is there anything you need help with today?\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1694050893.4534576,\n", + " \"model\": \"replicate/llama-2-70b-chat:2796ee9483c3fd7aa2e171d38f4ca12251a30609463dcfd4cd76703f22e96cdf\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 6,\n", + " \"completion_tokens\": 24,\n", + " \"total_tokens\": 30\n", + " },\n", + " \"ended\": 1694050896.6689413\n", + "}\n", + "total_replicate_run_time 3.2154836654663086\n", + "Cost for completion call: $0.0045016771\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/cookbook/LiteLLM_HuggingFace.ipynb b/cookbook/LiteLLM_HuggingFace.ipynb new file mode 100644 index 000000000..bf8482a5f --- /dev/null +++ b/cookbook/LiteLLM_HuggingFace.ipynb @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "9dKM5k8qsMIj" + }, + "source": [ + "## LiteLLM Hugging Face\n", + "\n", + "Docs for huggingface: https://docs.litellm.ai/docs/providers/huggingface\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "BVDdmCp-o97j" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yp5UXRqtpu9f" + }, + "source": [ + "## Serverless Inference Providers\n", + "\n", + "Read more about Inference Providers here: https://huggingface.co/blog/inference-providers.\n", + "\n", + "In order to use litellm with Hugging Face Inference Providers, you need to set `model=huggingface//`.\n", + "\n", + "Example: `huggingface/together/deepseek-ai/DeepSeek-R1` to run DeepSeek-R1 (https://huggingface.co/deepseek-ai/DeepSeek-R1) through Together AI.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Pi5Oww8gpCUm", + "outputId": "659a67c7-f90d-4c06-b94e-2c4aa92d897a" + }, + "outputs": [], + "source": [ + "import os\n", + "from litellm import completion\n", + "\n", + "# You can create a HF token here: https://huggingface.co/settings/tokens\n", + "os.environ[\"HF_TOKEN\"] = \"hf_xxxxxx\"\n", + "\n", + "# Call DeepSeek-R1 model through Together AI\n", + "response = completion(\n", + " model=\"huggingface/together/deepseek-ai/DeepSeek-R1\",\n", + " messages=[{\"content\": \"How many r's are in the word `strawberry`?\", \"role\": \"user\"}],\n", + ")\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EU0UubrKzTFe" + }, + "source": [ + "## Streaming\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y-QfIvA-uJKX", + "outputId": "b007bb98-00d0-44a4-8264-c8a2caed6768" + }, + "outputs": [], + "source": [ + "import os\n", + "from litellm import completion\n", + "\n", + "os.environ[\"HF_TOKEN\"] = \"hf_xxxxxx\"\n", + "\n", + "response = completion(\n", + " model=\"huggingface/together/deepseek-ai/DeepSeek-R1\",\n", + " messages=[\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"How many r's are in the word `strawberry`?\",\n", + " \n", + " }\n", + " ],\n", + " stream=True,\n", + ")\n", + "\n", + "for chunk in response:\n", + " print(chunk)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## With images as input\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from litellm import completion\n", + "\n", + "# Set your Hugging Face Token\n", + "os.environ[\"HF_TOKEN\"] = \"hf_xxxxxx\"\n", + "\n", + "messages = [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": [\n", + " {\"type\": \"text\", \"text\": \"What's in this image?\"},\n", + " {\n", + " \"type\": \"image_url\",\n", + " \"image_url\": {\n", + " \"url\": \"https://awsmp-logos.s3.amazonaws.com/seller-xw5kijmvmzasy/c233c9ade2ccb5491072ae232c814942.png\",\n", + " },\n", + " },\n", + " ],\n", + " }\n", + "]\n", + "\n", + "response = completion(\n", + " model=\"huggingface/sambanova/meta-llama/Llama-3.3-70B-Instruct\",\n", + " messages=messages,\n", + ")\n", + "print(response.choices[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tools - Function Calling\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from litellm import completion\n", + "\n", + "\n", + "# Set your Hugging Face Token\n", + "os.environ[\"HF_TOKEN\"] = \"hf_xxxxxx\"\n", + "\n", + "tools = [\n", + " {\n", + " \"type\": \"function\",\n", + " \"function\": {\n", + " \"name\": \"get_current_weather\",\n", + " \"description\": \"Get the current weather in a given location\",\n", + " \"parameters\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"location\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"The city and state, e.g. San Francisco, CA\",\n", + " },\n", + " \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]},\n", + " },\n", + " \"required\": [\"location\"],\n", + " },\n", + " },\n", + " }\n", + "]\n", + "messages = [{\"role\": \"user\", \"content\": \"What's the weather like in Boston today?\"}]\n", + "\n", + "response = completion(\n", + " model=\"huggingface/sambanova/meta-llama/Llama-3.1-8B-Instruct\", messages=messages, tools=tools, tool_choice=\"auto\"\n", + ")\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hugging Face Dedicated Inference Endpoints\n", + "\n", + "Steps to use\n", + "\n", + "- Create your own Hugging Face dedicated endpoint here: https://ui.endpoints.huggingface.co/\n", + "- Set `api_base` to your deployed api base\n", + "- set the model to `huggingface/tgi` so that litellm knows it's a huggingface Deployed Inference Endpoint.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import litellm\n", + "\n", + "\n", + "response = litellm.completion(\n", + " model=\"huggingface/tgi\",\n", + " messages=[{\"content\": \"Hello, how are you?\", \"role\": \"user\"}],\n", + " api_base=\"https://my-endpoint.endpoints.huggingface.cloud/v1/\",\n", + ")\n", + "print(response)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/LiteLLM_NovitaAI_Cookbook.ipynb b/cookbook/LiteLLM_NovitaAI_Cookbook.ipynb new file mode 100644 index 000000000..8fa7d0b98 --- /dev/null +++ b/cookbook/LiteLLM_NovitaAI_Cookbook.ipynb @@ -0,0 +1,97 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "iFEmsVJI_2BR" + }, + "source": [ + "# LiteLLM NovitaAI Cookbook" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cBlUhCEP_xj4" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "p-MQqWOT_1a7" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ['NOVITA_API_KEY'] = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Ze8JqMqWAARO" + }, + "outputs": [], + "source": [ + "from litellm import completion\n", + "response = completion(\n", + " model=\"novita/deepseek/deepseek-r1\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-LnhELrnAM_J" + }, + "outputs": [], + "source": [ + "response = completion(\n", + " model=\"novita/deepseek/deepseek-r1\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dJBOUYdwCEn1" + }, + "outputs": [], + "source": [ + "response = completion(\n", + " model=\"mistralai/mistral-7b-instruct\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/LiteLLM_OpenRouter.ipynb b/cookbook/LiteLLM_OpenRouter.ipynb new file mode 100644 index 000000000..6444b23b2 --- /dev/null +++ b/cookbook/LiteLLM_OpenRouter.ipynb @@ -0,0 +1,179 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "iFEmsVJI_2BR" + }, + "source": [ + "# LiteLLM OpenRouter Cookbook" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cBlUhCEP_xj4" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "p-MQqWOT_1a7" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ['OPENROUTER_API_KEY'] = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ze8JqMqWAARO", + "outputId": "64f3e836-69fa-4f8e-fb35-088a913bbe98" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"id\": \"gen-W8FTMSIEorCp3vG5iYIgNMR4IeBv\",\n", + " \"model\": \"chat-bison@001\",\n", + " \"choices\": [\n", + " {\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"```\\n#include \\n\\nint main() {\\n printf(\\\"Hi!\\\\n\\\");\\n return 0;\\n}\\n```\"\n", + " }\n", + " }\n", + " ],\n", + " \"response_ms\": 7817.777999999999\n", + "}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from litellm import completion\n", + "response = completion(\n", + " model=\"openrouter/google/palm-2-chat-bison\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-LnhELrnAM_J", + "outputId": "d51c7ab7-d761-4bd1-f849-1534d9df4cd0" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"choices\": [\n", + " {\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \" Here is some simple code to print \\\"Hi\\\":\\n\\n```python\\nprint(\\\"Hi\\\")\\n```\\n\\nThis uses the print() function in Python to output the text \\\"Hi\\\".\"\n", + " },\n", + " \"finish_reason\": \"stop_sequence\"\n", + " }\n", + " ],\n", + " \"model\": \"claude-2.0\",\n", + " \"id\": \"gen-IiuV7ZNimDufVeutBHrl8ajPuzEh\",\n", + " \"response_ms\": 8112.443000000001\n", + "}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "response = completion(\n", + " model=\"openrouter/anthropic/claude-2\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dJBOUYdwCEn1", + "outputId": "ffa18679-ec15-4dad-fe2b-68665cdf36b0" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"id\": \"gen-PyMd3yyJ0aQsCgIY9R8XGZoAtPbl\",\n", + " \"model\": \"togethercomputer/llama-2-70b-chat\",\n", + " \"choices\": [\n", + " {\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"*gives a sly smile as they type*\\n\\nHey there, handsome. \\ud83d\\ude0f\\n\\nWhat brings you to my neck of the woods today? \\ud83d\\ude18\"\n", + " }\n", + " }\n", + " ],\n", + " \"response_ms\": 9618.775\n", + "}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "response = completion(\n", + " model=\"openrouter/meta-llama/llama-2-70b-chat\",\n", + " messages=[{\"role\": \"user\", \"content\": \"write code for saying hi\"}]\n", + ")\n", + "response" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/LiteLLM_Petals.ipynb b/cookbook/LiteLLM_Petals.ipynb new file mode 100644 index 000000000..aacc22dd1 --- /dev/null +++ b/cookbook/LiteLLM_Petals.ipynb @@ -0,0 +1,568 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "dwGtLi_tvM6N" + }, + "source": [ + "# Using LiteLLM with Petals" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bdlgaWQqDpzj" + }, + "outputs": [], + "source": [ + "!pip install litellm # 0.1.715 and upwards" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5Id2QKwOEH8X" + }, + "outputs": [], + "source": [ + "# install petals\n", + "!pip install git+https://github.com/bigscience-workshop/petals" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "k42fldw3veSN" + }, + "source": [ + "## petals-team/StableBeluga2" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tIHcEHdSDqju", + "outputId": "485dbf54-395c-433a-bbf4-8eb70a9fa624" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "You are using the default legacy behaviour of the . If you see this, DO NOT PANIC! This is expected, and simply means that the `legacy` (previous) behavior will be used so nothing changes for you. If you want to use the new behaviour, set `legacy=False`. This should only be set if you understand what it means, and thouroughly read the reason why this was added as explained in https://github.com/huggingface/transformers/pull/24565\n", + "Sep 19 18:39:50.634 [\u001b[1m\u001b[34mINFO\u001b[0m] Make sure you follow the LLaMA's terms of use: https://bit.ly/llama2-license for LLaMA 2, https://bit.ly/llama-license for LLaMA 1\n", + "Sep 19 18:39:50.639 [\u001b[1m\u001b[34mINFO\u001b[0m] Using DHT prefix: StableBeluga2-hf\n", + "Sep 19 18:40:13.920 [\u001b[1m\u001b[34mINFO\u001b[0m] Route found: 0:40 via …HfQWVM => 40:80 via …Zj98Se\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \"Hello, how are you?\\nI'm doing well, thank you. I'm just getting ready to go to the gym.\\nOh, that's great. I'm trying to get back into a workout routine myself.\\nYeah,\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-f09d79b3-c1d1-49b7-b55f-cd8dfa1043bf\",\n", + " \"created\": 1695148897.473613,\n", + " \"model\": \"petals-team/StableBeluga2\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 6,\n", + " \"completion_tokens\": 45,\n", + " \"total_tokens\": 51\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "response = completion(model=\"petals/petals-team/StableBeluga2\", messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}], max_tokens=50)\n", + "\n", + "print(response)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "J8DubRnHvh_j" + }, + "source": [ + "## huggyllama/llama-65b" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 538, + "referenced_widgets": [ + "2fec5cc400424671a3d517327117d18a", + "3687c76fe84d464baaf35366b21e83b3", + "c29d4460dbaa441cae110b58e0014151", + "6560449a38bf4a7bacd97ccaacf01c4c", + "5fbd6ae281984d28ba59ebfd0279eda7", + "323e30e275434aeea241163e5f1f9031", + "48f4adec51c94f9da6e4c4564daeff84", + "2a672981a44b4a7fb30674f97f4c10c6", + "d75ae8d22ea74840b4c80c8f386384c4", + "54c06312ecff4e7588665e8b0cb7118b", + "300078a9d1a6483fba81a4be63793ff7" + ] + }, + "id": "IlTCJwDsNvgF", + "outputId": "2e84d125-d982-48ed-8a92-6ca438a50d0c" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Sep 19 18:41:37.912 [\u001b[1m\u001b[34mINFO\u001b[0m] Make sure you follow the LLaMA's terms of use: https://bit.ly/llama2-license for LLaMA 2, https://bit.ly/llama-license for LLaMA 1\n", + "Sep 19 18:41:37.914 [\u001b[1m\u001b[34mINFO\u001b[0m] Using DHT prefix: llama-65b-hf\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2fec5cc400424671a3d517327117d18a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading checkpoint shards: 0%| | 0/2 [00:00 JSON: {\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" Good morning!\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1694030351.309254,\n", + " \"model\": \"claude-2\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 11,\n", + " \"completion_tokens\": 3,\n", + " \"total_tokens\": 14\n", + " }\n", + " },\n", + " JSON: {\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" I'm an AI assistant created by Anthropic. I don't actually have a concept of the current time.\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1694030352.1215081,\n", + " \"model\": \"claude-2\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 13,\n", + " \"completion_tokens\": 22,\n", + " \"total_tokens\": 35\n", + " }\n", + " }]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "\n", + "os.environ['ANTHROPIC_API_KEY'] = \"\"\n", + "\n", + "\n", + "responses = batch_completion(\n", + " model=\"claude-2\",\n", + " messages = [\n", + " [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"good morning? \"\n", + " }\n", + " ],\n", + " [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"what's the time? \"\n", + " }\n", + " ]\n", + " ]\n", + ")\n", + "responses" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/Migrating_to_LiteLLM_Proxy_from_OpenAI_Azure_OpenAI.ipynb b/cookbook/Migrating_to_LiteLLM_Proxy_from_OpenAI_Azure_OpenAI.ipynb new file mode 100644 index 000000000..740e7c7a4 --- /dev/null +++ b/cookbook/Migrating_to_LiteLLM_Proxy_from_OpenAI_Azure_OpenAI.ipynb @@ -0,0 +1,565 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "kccfk0mHZ4Ad" + }, + "source": [ + "# Migrating to LiteLLM Proxy from OpenAI/Azure OpenAI\n", + "\n", + "Covers:\n", + "\n", + "* /chat/completion\n", + "* /embedding\n", + "\n", + "\n", + "These are **selected examples**. LiteLLM Proxy is **OpenAI-Compatible**, it works with any project that calls OpenAI. Just change the `base_url`, `api_key` and `model`.\n", + "\n", + "For more examples, [go here](https://docs.litellm.ai/docs/proxy/user_keys)\n", + "\n", + "To pass provider-specific args, [go here](https://docs.litellm.ai/docs/completion/provider_specific_params#proxy-usage)\n", + "\n", + "To drop unsupported params (E.g. frequency_penalty for bedrock with librechat), [go here](https://docs.litellm.ai/docs/completion/drop_params#openai-proxy-usage)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nmSClzCPaGH6" + }, + "source": [ + "## /chat/completion\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_vqcjwOVaKpO" + }, + "source": [ + "### OpenAI Python SDK" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "x1e_Ok3KZzeP" + }, + "outputs": [], + "source": [ + "import openai\n", + "client = openai.OpenAI(\n", + " api_key=\"anything\",\n", + " base_url=\"http://0.0.0.0:4000\"\n", + ")\n", + "\n", + "# request sent to model set on litellm proxy, `litellm --model`\n", + "response = client.chat.completions.create(\n", + " model=\"gpt-3.5-turbo\",\n", + " messages = [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"this is a test request, write a short poem\"\n", + " }\n", + " ],\n", + " extra_body={ # pass in any provider-specific param, if not supported by openai, https://docs.litellm.ai/docs/completion/input#provider-specific-params\n", + " \"metadata\": { # šŸ‘ˆ use for logging additional params (e.g. to langfuse)\n", + " \"generation_name\": \"ishaan-generation-openai-client\",\n", + " \"generation_id\": \"openai-client-gen-id22\",\n", + " \"trace_id\": \"openai-client-trace-id22\",\n", + " \"trace_user_id\": \"openai-client-user-id2\"\n", + " }\n", + " }\n", + ")\n", + "\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AqkyKk9Scxgj" + }, + "source": [ + "## Function Calling" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wDg10VqLczE1" + }, + "outputs": [], + "source": [ + "from openai import OpenAI\n", + "client = OpenAI(\n", + " api_key=\"sk-1234\", # [OPTIONAL] set if you set one on proxy, else set \"\"\n", + " base_url=\"http://0.0.0.0:4000\",\n", + ")\n", + "\n", + "tools = [\n", + " {\n", + " \"type\": \"function\",\n", + " \"function\": {\n", + " \"name\": \"get_current_weather\",\n", + " \"description\": \"Get the current weather in a given location\",\n", + " \"parameters\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"location\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"The city and state, e.g. San Francisco, CA\",\n", + " },\n", + " \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]},\n", + " },\n", + " \"required\": [\"location\"],\n", + " },\n", + " }\n", + " }\n", + "]\n", + "messages = [{\"role\": \"user\", \"content\": \"What's the weather like in Boston today?\"}]\n", + "completion = client.chat.completions.create(\n", + " model=\"gpt-4o\", # use 'model_name' from config.yaml\n", + " messages=messages,\n", + " tools=tools,\n", + " tool_choice=\"auto\"\n", + ")\n", + "\n", + "print(completion)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YYoxLloSaNWW" + }, + "source": [ + "### Azure OpenAI Python SDK" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "yA1XcgowaSRy" + }, + "outputs": [], + "source": [ + "import openai\n", + "client = openai.AzureOpenAI(\n", + " api_key=\"anything\",\n", + " base_url=\"http://0.0.0.0:4000\"\n", + ")\n", + "\n", + "# request sent to model set on litellm proxy, `litellm --model`\n", + "response = client.chat.completions.create(\n", + " model=\"gpt-3.5-turbo\",\n", + " messages = [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"this is a test request, write a short poem\"\n", + " }\n", + " ],\n", + " extra_body={ # pass in any provider-specific param, if not supported by openai, https://docs.litellm.ai/docs/completion/input#provider-specific-params\n", + " \"metadata\": { # šŸ‘ˆ use for logging additional params (e.g. to langfuse)\n", + " \"generation_name\": \"ishaan-generation-openai-client\",\n", + " \"generation_id\": \"openai-client-gen-id22\",\n", + " \"trace_id\": \"openai-client-trace-id22\",\n", + " \"trace_user_id\": \"openai-client-user-id2\"\n", + " }\n", + " }\n", + ")\n", + "\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yl9qhDvnaTpL" + }, + "source": [ + "### Langchain Python" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5MUZgSquaW5t" + }, + "outputs": [], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.prompts.chat import (\n", + " ChatPromptTemplate,\n", + " HumanMessagePromptTemplate,\n", + " SystemMessagePromptTemplate,\n", + ")\n", + "from langchain.schema import HumanMessage, SystemMessage\n", + "import os\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = \"anything\"\n", + "\n", + "chat = ChatOpenAI(\n", + " openai_api_base=\"http://0.0.0.0:4000\",\n", + " model = \"gpt-3.5-turbo\",\n", + " temperature=0.1,\n", + " extra_body={\n", + " \"metadata\": {\n", + " \"generation_name\": \"ishaan-generation-langchain-client\",\n", + " \"generation_id\": \"langchain-client-gen-id22\",\n", + " \"trace_id\": \"langchain-client-trace-id22\",\n", + " \"trace_user_id\": \"langchain-client-user-id2\"\n", + " }\n", + " }\n", + ")\n", + "\n", + "messages = [\n", + " SystemMessage(\n", + " content=\"You are a helpful assistant that im using to make a test request to.\"\n", + " ),\n", + " HumanMessage(\n", + " content=\"test from litellm. tell me why it's amazing in 1 sentence\"\n", + " ),\n", + "]\n", + "response = chat(messages)\n", + "\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "B9eMgnULbRaz" + }, + "source": [ + "### Curl" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VWCCk5PFcmhS" + }, + "source": [ + "\n", + "\n", + "```\n", + "curl -X POST 'http://0.0.0.0:4000/chat/completions' \\\n", + " -H 'Content-Type: application/json' \\\n", + " -d '{\n", + " \"model\": \"gpt-3.5-turbo\",\n", + " \"messages\": [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"what llm are you\"\n", + " }\n", + " ],\n", + " \"metadata\": {\n", + " \"generation_name\": \"ishaan-test-generation\",\n", + " \"generation_id\": \"gen-id22\",\n", + " \"trace_id\": \"trace-id22\",\n", + " \"trace_user_id\": \"user-id2\"\n", + " }\n", + "}'\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "drBAm2e1b6xe" + }, + "source": [ + "### LlamaIndex" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d0bZcv8fb9mL" + }, + "outputs": [], + "source": [ + "import os, dotenv\n", + "\n", + "from llama_index.llms import AzureOpenAI\n", + "from llama_index.embeddings import AzureOpenAIEmbedding\n", + "from llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n", + "\n", + "llm = AzureOpenAI(\n", + " engine=\"azure-gpt-3.5\", # model_name on litellm proxy\n", + " temperature=0.0,\n", + " azure_endpoint=\"http://0.0.0.0:4000\", # litellm proxy endpoint\n", + " api_key=\"sk-1234\", # litellm proxy API Key\n", + " api_version=\"2023-07-01-preview\",\n", + ")\n", + "\n", + "embed_model = AzureOpenAIEmbedding(\n", + " deployment_name=\"azure-embedding-model\",\n", + " azure_endpoint=\"http://0.0.0.0:4000\",\n", + " api_key=\"sk-1234\",\n", + " api_version=\"2023-07-01-preview\",\n", + ")\n", + "\n", + "\n", + "documents = SimpleDirectoryReader(\"llama_index_data\").load_data()\n", + "service_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\n", + "index = VectorStoreIndex.from_documents(documents, service_context=service_context)\n", + "\n", + "query_engine = index.as_query_engine()\n", + "response = query_engine.query(\"What did the author do growing up?\")\n", + "print(response)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xypvNdHnb-Yy" + }, + "source": [ + "### Langchain JS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "R55mK2vCcBN2" + }, + "outputs": [], + "source": [ + "import { ChatOpenAI } from \"@langchain/openai\";\n", + "\n", + "\n", + "const model = new ChatOpenAI({\n", + " modelName: \"gpt-4\",\n", + " openAIApiKey: \"sk-1234\",\n", + " modelKwargs: {\"metadata\": \"hello world\"} // šŸ‘ˆ PASS Additional params here\n", + "}, {\n", + " basePath: \"http://0.0.0.0:4000\",\n", + "});\n", + "\n", + "const message = await model.invoke(\"Hi there!\");\n", + "\n", + "console.log(message);\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nC4bLifCcCiW" + }, + "source": [ + "### OpenAI JS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MICH8kIMcFpg" + }, + "outputs": [], + "source": [ + "const { OpenAI } = require('openai');\n", + "\n", + "const openai = new OpenAI({\n", + " apiKey: \"sk-1234\", // This is the default and can be omitted\n", + " baseURL: \"http://0.0.0.0:4000\"\n", + "});\n", + "\n", + "async function main() {\n", + " const chatCompletion = await openai.chat.completions.create({\n", + " messages: [{ role: 'user', content: 'Say this is a test' }],\n", + " model: 'gpt-3.5-turbo',\n", + " }, {\"metadata\": {\n", + " \"generation_name\": \"ishaan-generation-openaijs-client\",\n", + " \"generation_id\": \"openaijs-client-gen-id22\",\n", + " \"trace_id\": \"openaijs-client-trace-id22\",\n", + " \"trace_user_id\": \"openaijs-client-user-id2\"\n", + " }});\n", + "}\n", + "\n", + "main();\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "D1Q07pEAcGTb" + }, + "source": [ + "### Anthropic SDK" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qBjFcAvgcI3t" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from anthropic import Anthropic\n", + "\n", + "client = Anthropic(\n", + " base_url=\"http://localhost:4000\", # proxy endpoint\n", + " api_key=\"sk-test-proxy-key-123\", # litellm proxy virtual key (example)\n", + ")\n", + "\n", + "message = client.messages.create(\n", + " max_tokens=1024,\n", + " messages=[\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"Hello, Claude\",\n", + " }\n", + " ],\n", + " model=\"claude-3-opus-20240229\",\n", + ")\n", + "print(message.content)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dFAR4AJGcONI" + }, + "source": [ + "## /embeddings" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lgNoM281cRzR" + }, + "source": [ + "### OpenAI Python SDK" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NY3DJhPfcQhA" + }, + "outputs": [], + "source": [ + "import openai\n", + "from openai import OpenAI\n", + "\n", + "# set base_url to your proxy server\n", + "# set api_key to send to proxy server\n", + "client = OpenAI(api_key=\"\", base_url=\"http://0.0.0.0:4000\")\n", + "\n", + "response = client.embeddings.create(\n", + " input=[\"hello from litellm\"],\n", + " model=\"text-embedding-ada-002\"\n", + ")\n", + "\n", + "print(response)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hmbg-DW6cUZs" + }, + "source": [ + "### Langchain Embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lX2S8Nl1cWVP" + }, + "outputs": [], + "source": [ + "from langchain.embeddings import OpenAIEmbeddings\n", + "\n", + "embeddings = OpenAIEmbeddings(model=\"sagemaker-embeddings\", openai_api_base=\"http://0.0.0.0:4000\", openai_api_key=\"temp-key\")\n", + "\n", + "\n", + "text = \"This is a test document.\"\n", + "\n", + "query_result = embeddings.embed_query(text)\n", + "\n", + "print(f\"SAGEMAKER EMBEDDINGS\")\n", + "print(query_result[:5])\n", + "\n", + "embeddings = OpenAIEmbeddings(model=\"bedrock-embeddings\", openai_api_base=\"http://0.0.0.0:4000\", openai_api_key=\"temp-key\")\n", + "\n", + "text = \"This is a test document.\"\n", + "\n", + "query_result = embeddings.embed_query(text)\n", + "\n", + "print(f\"BEDROCK EMBEDDINGS\")\n", + "print(query_result[:5])\n", + "\n", + "embeddings = OpenAIEmbeddings(model=\"bedrock-titan-embeddings\", openai_api_base=\"http://0.0.0.0:4000\", openai_api_key=\"temp-key\")\n", + "\n", + "text = \"This is a test document.\"\n", + "\n", + "query_result = embeddings.embed_query(text)\n", + "\n", + "print(f\"TITAN EMBEDDINGS\")\n", + "print(query_result[:5])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oqGbWBCQcYfd" + }, + "source": [ + "### Curl Request" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7rkIMV9LcdwQ" + }, + "source": [ + "\n", + "\n", + "```curl\n", + "curl -X POST 'http://0.0.0.0:4000/embeddings' \\\n", + " -H 'Content-Type: application/json' \\\n", + " -d ' {\n", + " \"model\": \"text-embedding-ada-002\",\n", + " \"input\": [\"write a litellm poem\"]\n", + " }'\n", + "```\n", + "\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/Parallel_function_calling.ipynb b/cookbook/Parallel_function_calling.ipynb new file mode 100644 index 000000000..cb7fbafac --- /dev/null +++ b/cookbook/Parallel_function_calling.ipynb @@ -0,0 +1,478 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "This is a tutorial on using Parallel function calling with LiteLLM" + ], + "metadata": { + "id": "gHwFJ-srdnku" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RrtHuVHlZmUe" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial walks through the steps doing parallel function calling using\n", + " - OpenAI\n", + " - Azure OpenAI" + ], + "metadata": { + "id": "sG5ANaazjU0g" + } + }, + { + "cell_type": "code", + "source": [ + "# set openai api key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"\" # litellm reads OPENAI_API_KEY from .env and sends the request" + ], + "metadata": { + "id": "l4GQ-M5yZ5UW" + }, + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "# OpenAI gpt-3.5-turbo-1106\n", + "## Step 1: send the conversation and available functions to the model" + ], + "metadata": { + "id": "AxgR2fCgaRoW" + } + }, + { + "cell_type": "code", + "source": [ + "import litellm\n", + "import json\n", + "# Example dummy function hard coded to return the same weather\n", + "# In production, this could be your backend API or an external API\n", + "def get_current_weather(location, unit=\"fahrenheit\"):\n", + " \"\"\"Get the current weather in a given location\"\"\"\n", + " if \"tokyo\" in location.lower():\n", + " return json.dumps({\"location\": \"Tokyo\", \"temperature\": \"10\", \"unit\": \"celsius\"})\n", + " elif \"san francisco\" in location.lower():\n", + " return json.dumps({\"location\": \"San Francisco\", \"temperature\": \"72\", \"unit\": \"fahrenheit\"})\n", + " elif \"paris\" in location.lower():\n", + " return json.dumps({\"location\": \"Paris\", \"temperature\": \"22\", \"unit\": \"celsius\"})\n", + " else:\n", + " return json.dumps({\"location\": location, \"temperature\": \"unknown\"})\n", + "\n", + "messages = [{\"role\": \"user\", \"content\": \"What's the weather like in San Francisco, Tokyo, and Paris?\"}]\n", + "tools = [\n", + " {\n", + " \"type\": \"function\",\n", + " \"function\": {\n", + " \"name\": \"get_current_weather\",\n", + " \"description\": \"Get the current weather in a given location\",\n", + " \"parameters\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"location\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"The city and state, e.g. San Francisco, CA\",\n", + " },\n", + " \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]},\n", + " },\n", + " \"required\": [\"location\"],\n", + " },\n", + " },\n", + " }\n", + "]\n", + "\n", + "response = litellm.completion(\n", + " model=\"gpt-3.5-turbo-1106\",\n", + " messages=messages,\n", + " tools=tools,\n", + " tool_choice=\"auto\", # auto is default, but we'll be explicit\n", + ")\n", + "print(\"\\nLLM Response1:\\n\", response)\n", + "response_message = response.choices[0].message\n", + "tool_calls = response.choices[0].message.tool_calls\n", + "print(\"\\nTool Choice:\\n\", tool_calls)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Y3qteFo8ZrZP", + "outputId": "ee6c1183-55c1-4111-cdc0-967b8fed9db3" + }, + "execution_count": 18, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "LLM Response1:\n", + " ModelResponse(id='chatcmpl-8MNdPbrhtnwiPK1x3PEoGwrH144TW', choices=[Choices(finish_reason='tool_calls', index=0, message=Message(content=None, role='assistant', tool_calls=[ChatCompletionMessageToolCall(id='call_K2Giwoq3NloGPfSv25MJVFZG', function=Function(arguments='{\"location\": \"San Francisco\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function'), ChatCompletionMessageToolCall(id='call_6K8bYCZK6qsbMY3n51FzE5Nz', function=Function(arguments='{\"location\": \"Tokyo\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function'), ChatCompletionMessageToolCall(id='call_cKSmUEJGufDwS7TaUHWzp7qx', function=Function(arguments='{\"location\": \"Paris\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function')]))], created=1700344759, model='gpt-3.5-turbo-1106', object='chat.completion', system_fingerprint='fp_eeff13170a', usage={'completion_tokens': 77, 'prompt_tokens': 88, 'total_tokens': 165}, _response_ms=1049.913)\n", + "\n", + "Tool Choice:\n", + " [ChatCompletionMessageToolCall(id='call_K2Giwoq3NloGPfSv25MJVFZG', function=Function(arguments='{\"location\": \"San Francisco\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function'), ChatCompletionMessageToolCall(id='call_6K8bYCZK6qsbMY3n51FzE5Nz', function=Function(arguments='{\"location\": \"Tokyo\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function'), ChatCompletionMessageToolCall(id='call_cKSmUEJGufDwS7TaUHWzp7qx', function=Function(arguments='{\"location\": \"Paris\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function')]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Step 2 - Parse the Model Response and Execute Functions" + ], + "metadata": { + "id": "tD4lJQ40cU44" + } + }, + { + "cell_type": "code", + "source": [ + "# Check if the model wants to call a function\n", + "if tool_calls:\n", + " # Execute the functions and prepare responses\n", + " available_functions = {\n", + " \"get_current_weather\": get_current_weather,\n", + " }\n", + "\n", + " messages.append(response_message) # Extend conversation with assistant's reply\n", + "\n", + " for tool_call in tool_calls:\n", + " print(f\"\\nExecuting tool call\\n{tool_call}\")\n", + " function_name = tool_call.function.name\n", + " function_to_call = available_functions[function_name]\n", + " function_args = json.loads(tool_call.function.arguments)\n", + " # calling the get_current_weather() function\n", + " function_response = function_to_call(\n", + " location=function_args.get(\"location\"),\n", + " unit=function_args.get(\"unit\"),\n", + " )\n", + " print(f\"Result from tool call\\n{function_response}\\n\")\n", + "\n", + " # Extend conversation with function response\n", + " messages.append(\n", + " {\n", + " \"tool_call_id\": tool_call.id,\n", + " \"role\": \"tool\",\n", + " \"name\": function_name,\n", + " \"content\": function_response,\n", + " }\n", + " )\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "af4oXQvicV_n", + "outputId": "abf6ac3e-4a21-4a4f-b8d7-809b763d0632" + }, + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Executing tool call\n", + "ChatCompletionMessageToolCall(id='call_K2Giwoq3NloGPfSv25MJVFZG', function=Function(arguments='{\"location\": \"San Francisco\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function')\n", + "Result from tool call\n", + "{\"location\": \"San Francisco\", \"temperature\": \"72\", \"unit\": \"fahrenheit\"}\n", + "\n", + "\n", + "Executing tool call\n", + "ChatCompletionMessageToolCall(id='call_6K8bYCZK6qsbMY3n51FzE5Nz', function=Function(arguments='{\"location\": \"Tokyo\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function')\n", + "Result from tool call\n", + "{\"location\": \"Tokyo\", \"temperature\": \"10\", \"unit\": \"celsius\"}\n", + "\n", + "\n", + "Executing tool call\n", + "ChatCompletionMessageToolCall(id='call_cKSmUEJGufDwS7TaUHWzp7qx', function=Function(arguments='{\"location\": \"Paris\", \"unit\": \"celsius\"}', name='get_current_weather'), type='function')\n", + "Result from tool call\n", + "{\"location\": \"Paris\", \"temperature\": \"22\", \"unit\": \"celsius\"}\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Step 3 - Second litellm.completion() call" + ], + "metadata": { + "id": "E3OL1fqUdFdv" + } + }, + { + "cell_type": "code", + "source": [ + "second_response = litellm.completion(\n", + " model=\"gpt-3.5-turbo-1106\",\n", + " messages=messages,\n", + ")\n", + "print(\"Second Response\\n\", second_response)\n", + "print(\"Second Response Message\\n\", second_response.choices[0].message.content)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8KYB2n-jc1_f", + "outputId": "6c6448ae-1c09-43ae-eb90-208b118e6179" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Second Response\n", + " ModelResponse(id='chatcmpl-8MNhat166ZqjO6egXcUh85Pd0s7KV', choices=[Choices(finish_reason='stop', index=0, message=Message(content=\"The current weather in San Francisco is 72°F, in Tokyo it's 10°C, and in Paris it's 22°C.\", role='assistant'))], created=1700345018, model='gpt-3.5-turbo-1106', object='chat.completion', system_fingerprint='fp_eeff13170a', usage={'completion_tokens': 28, 'prompt_tokens': 465, 'total_tokens': 493}, _response_ms=999.246)\n", + "Second Response Message\n", + " The current weather in San Francisco is 72°F, in Tokyo it's 10°C, and in Paris it's 22°C.\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Using Azure OpenAI" + ], + "metadata": { + "id": "1cIIFEvXjofp" + } + }, + { + "cell_type": "code", + "source": [ + "# set Azure env variables\n", + "import os\n", + "os.environ['AZURE_API_KEY'] = \"\" # litellm reads AZURE_API_KEY from .env and sends the request\n", + "os.environ['AZURE_API_BASE'] = \"https://openai-gpt-4-test-v-1.openai.azure.com/\"\n", + "os.environ['AZURE_API_VERSION'] = \"2023-07-01-preview\"" + ], + "metadata": { + "id": "lG9mUnModeeE" + }, + "execution_count": 32, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Step 1" + ], + "metadata": { + "id": "17S-Ysksj-E_" + } + }, + { + "cell_type": "code", + "source": [ + "import litellm\n", + "import json\n", + "# Example dummy function hard coded to return the same weather\n", + "# In production, this could be your backend API or an external API\n", + "def get_current_weather(location, unit=\"fahrenheit\"):\n", + " \"\"\"Get the current weather in a given location\"\"\"\n", + " if \"tokyo\" in location.lower():\n", + " return json.dumps({\"location\": \"Tokyo\", \"temperature\": \"10\", \"unit\": \"celsius\"})\n", + " elif \"san francisco\" in location.lower():\n", + " return json.dumps({\"location\": \"San Francisco\", \"temperature\": \"72\", \"unit\": \"fahrenheit\"})\n", + " elif \"paris\" in location.lower():\n", + " return json.dumps({\"location\": \"Paris\", \"temperature\": \"22\", \"unit\": \"celsius\"})\n", + " else:\n", + " return json.dumps({\"location\": location, \"temperature\": \"unknown\"})\n", + "\n", + "messages = [{\"role\": \"user\", \"content\": \"What's the weather like in San Francisco, Tokyo, and Paris?\"}]\n", + "tools = [\n", + " {\n", + " \"type\": \"function\",\n", + " \"function\": {\n", + " \"name\": \"get_current_weather\",\n", + " \"description\": \"Get the current weather in a given location\",\n", + " \"parameters\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"location\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"The city and state, e.g. San Francisco, CA\",\n", + " },\n", + " \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]},\n", + " },\n", + " \"required\": [\"location\"],\n", + " },\n", + " },\n", + " }\n", + "]\n", + "\n", + "response = litellm.completion(\n", + " model=\"azure/chatgpt-functioncalling\", # model = azure/\n", + " messages=messages,\n", + " tools=tools,\n", + " tool_choice=\"auto\", # auto is default, but we'll be explicit\n", + ")\n", + "print(\"\\nLLM Response1:\\n\", response)\n", + "response_message = response.choices[0].message\n", + "tool_calls = response.choices[0].message.tool_calls\n", + "print(\"\\nTool Choice:\\n\", tool_calls)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "boAIHLEXj80m", + "outputId": "00afcf09-5b6b-4805-c374-ba089cc6eb43" + }, + "execution_count": 33, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "LLM Response1:\n", + " ModelResponse(id='chatcmpl-8MOBPvEnqG7qitkmVqZmCrzSGEmDj', choices=[Choices(finish_reason='tool_calls', index=0, message=Message(content=None, role='assistant', tool_calls=[ChatCompletionMessageToolCall(id='call_7gZ0PkmmmgzTOxfF01ATp0U5', function=Function(arguments='{\\n \"location\": \"San Francisco, CA\"\\n}', name='get_current_weather'), type='function')]))], created=1700346867, model='gpt-35-turbo', object='chat.completion', system_fingerprint=None, usage={'completion_tokens': 19, 'prompt_tokens': 88, 'total_tokens': 107}, _response_ms=833.4319999999999)\n", + "\n", + "Tool Choice:\n", + " [ChatCompletionMessageToolCall(id='call_7gZ0PkmmmgzTOxfF01ATp0U5', function=Function(arguments='{\\n \"location\": \"San Francisco, CA\"\\n}', name='get_current_weather'), type='function')]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Step 2" + ], + "metadata": { + "id": "hqh1y1IMkmGO" + } + }, + { + "cell_type": "code", + "source": [ + "# Check if the model wants to call a function\n", + "if tool_calls:\n", + " # Execute the functions and prepare responses\n", + " available_functions = {\n", + " \"get_current_weather\": get_current_weather,\n", + " }\n", + "\n", + " messages.append(response_message) # Extend conversation with assistant's reply\n", + "\n", + " for tool_call in tool_calls:\n", + " print(f\"\\nExecuting tool call\\n{tool_call}\")\n", + " function_name = tool_call.function.name\n", + " function_to_call = available_functions[function_name]\n", + " function_args = json.loads(tool_call.function.arguments)\n", + " # calling the get_current_weather() function\n", + " function_response = function_to_call(\n", + " location=function_args.get(\"location\"),\n", + " unit=function_args.get(\"unit\"),\n", + " )\n", + " print(f\"Result from tool call\\n{function_response}\\n\")\n", + "\n", + " # Extend conversation with function response\n", + " messages.append(\n", + " {\n", + " \"tool_call_id\": tool_call.id,\n", + " \"role\": \"tool\",\n", + " \"name\": function_name,\n", + " \"content\": function_response,\n", + " }\n", + " )\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FGu7DY7PkOiG", + "outputId": "96d39ae7-7fc8-4dd8-c82f-5ee9a486724c" + }, + "execution_count": 34, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Executing tool call\n", + "ChatCompletionMessageToolCall(id='call_7gZ0PkmmmgzTOxfF01ATp0U5', function=Function(arguments='{\\n \"location\": \"San Francisco, CA\"\\n}', name='get_current_weather'), type='function')\n", + "Result from tool call\n", + "{\"location\": \"San Francisco\", \"temperature\": \"72\", \"unit\": \"fahrenheit\"}\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Step 3" + ], + "metadata": { + "id": "4MjYyeajkpBl" + } + }, + { + "cell_type": "code", + "source": [ + "second_response = litellm.completion(\n", + " model=\"azure/chatgpt-functioncalling\",\n", + " messages=messages,\n", + ")\n", + "print(\"Second Response\\n\", second_response)\n", + "print(\"Second Response Message\\n\", second_response.choices[0].message.content)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qHgXyZq1kqGn", + "outputId": "61a30470-d7f5-484d-c42b-681c9b60b34a" + }, + "execution_count": 36, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Second Response\n", + " ModelResponse(id='chatcmpl-8MOC90vwZ2LHX0DE796XYtsOxdGcc', choices=[Choices(finish_reason='stop', index=0, message=Message(content='The current weather in San Francisco is 72°F.', role='assistant'))], created=1700346913, model='gpt-35-turbo', object='chat.completion', system_fingerprint=None, usage={'completion_tokens': 11, 'prompt_tokens': 69, 'total_tokens': 80}, _response_ms=824.882)\n", + "Second Response Message\n", + " The current weather in San Francisco is 72°F.\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/cookbook/Proxy_Batch_Users.ipynb b/cookbook/Proxy_Batch_Users.ipynb new file mode 100644 index 000000000..c362ab8f8 --- /dev/null +++ b/cookbook/Proxy_Batch_Users.ipynb @@ -0,0 +1,205 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "680oRk1af-xJ" + }, + "source": [ + "# Environment Setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "X7TgJFn8f88p" + }, + "outputs": [], + "source": [ + "import csv\n", + "from typing import Optional\n", + "import httpx\n", + "import json\n", + "import asyncio\n", + "\n", + "proxy_base_url = \"http://0.0.0.0:4000\" # šŸ‘ˆ SET TO PROXY URL\n", + "master_key = \"sk-1234\" # šŸ‘ˆ SET TO PROXY MASTER KEY" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rauw8EOhgBz5" + }, + "outputs": [], + "source": [ + "## GLOBAL HTTP CLIENT ## - faster http calls\n", + "class HTTPHandler:\n", + " def __init__(self, concurrent_limit=1000):\n", + " # Create a client with a connection pool\n", + " self.client = httpx.AsyncClient(\n", + " limits=httpx.Limits(\n", + " max_connections=concurrent_limit,\n", + " max_keepalive_connections=concurrent_limit,\n", + " )\n", + " )\n", + "\n", + " async def close(self):\n", + " # Close the client when you're done with it\n", + " await self.client.aclose()\n", + "\n", + " async def get(\n", + " self, url: str, params: Optional[dict] = None, headers: Optional[dict] = None\n", + " ):\n", + " response = await self.client.get(url, params=params, headers=headers)\n", + " return response\n", + "\n", + " async def post(\n", + " self,\n", + " url: str,\n", + " data: Optional[dict] = None,\n", + " params: Optional[dict] = None,\n", + " headers: Optional[dict] = None,\n", + " ):\n", + " try:\n", + " response = await self.client.post(\n", + " url, data=data, params=params, headers=headers\n", + " )\n", + " return response\n", + " except Exception as e:\n", + " raise e\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7LXN8zaLgOie" + }, + "source": [ + "# Import Sheet\n", + "\n", + "\n", + "Format: | ID | Name | Max Budget |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oiED0usegPGf" + }, + "outputs": [], + "source": [ + "async def import_sheet():\n", + " tasks = []\n", + " http_client = HTTPHandler()\n", + " with open('my-batch-sheet.csv', 'r') as file:\n", + " csv_reader = csv.DictReader(file)\n", + " for row in csv_reader:\n", + " task = create_user(client=http_client, user_id=row['ID'], max_budget=row['Max Budget'], user_name=row['Name'])\n", + " tasks.append(task)\n", + " # print(f\"ID: {row['ID']}, Name: {row['Name']}, Max Budget: {row['Max Budget']}\")\n", + "\n", + " keys = await asyncio.gather(*tasks)\n", + "\n", + " with open('my-batch-sheet_new.csv', 'w', newline='') as new_file:\n", + " fieldnames = ['ID', 'Name', 'Max Budget', 'keys']\n", + " csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames)\n", + " csv_writer.writeheader()\n", + "\n", + " with open('my-batch-sheet.csv', 'r') as file:\n", + " csv_reader = csv.DictReader(file)\n", + " for i, row in enumerate(csv_reader):\n", + " row['keys'] = keys[i] # Add the 'keys' value from the corresponding task result\n", + " csv_writer.writerow(row)\n", + "\n", + " await http_client.close()\n", + "\n", + "asyncio.run(import_sheet())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E7M0Li_UgJeZ" + }, + "source": [ + "# Create Users + Keys\n", + "\n", + "- Creates a user\n", + "- Creates a key with max budget" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NZudRFujf7j-" + }, + "outputs": [], + "source": [ + "\n", + "async def create_key_with_alias(client: HTTPHandler, user_id: str, max_budget: float):\n", + " global proxy_base_url\n", + " if not proxy_base_url.endswith(\"/\"):\n", + " proxy_base_url += \"/\"\n", + " url = proxy_base_url + \"key/generate\"\n", + "\n", + " # call /key/generate\n", + " print(\"CALLING /KEY/GENERATE\")\n", + " response = await client.post(\n", + " url=url,\n", + " headers={\"Authorization\": f\"Bearer {master_key}\"},\n", + " data=json.dumps({\n", + " \"user_id\": user_id,\n", + " \"key_alias\": f\"{user_id}-key\",\n", + " \"max_budget\": max_budget # šŸ‘ˆ KEY CHANGE: SETS MAX BUDGET PER KEY\n", + " })\n", + " )\n", + " print(f\"response: {response.text}\")\n", + " return response.json()[\"key\"]\n", + "\n", + "async def create_user(client: HTTPHandler, user_id: str, max_budget: float, user_name: str):\n", + " \"\"\"\n", + " - call /user/new\n", + " - create key for user\n", + " \"\"\"\n", + " global proxy_base_url\n", + " if not proxy_base_url.endswith(\"/\"):\n", + " proxy_base_url += \"/\"\n", + " url = proxy_base_url + \"user/new\"\n", + "\n", + " # call /user/new\n", + " await client.post(\n", + " url=url,\n", + " headers={\"Authorization\": f\"Bearer {master_key}\"},\n", + " data=json.dumps({\n", + " \"user_id\": user_id,\n", + " \"user_alias\": user_name,\n", + " \"auto_create_key\": False,\n", + " # \"max_budget\": max_budget # šŸ‘ˆ [OPTIONAL] Sets max budget per user (if you want to set a max budget across keys)\n", + " })\n", + " )\n", + "\n", + " # create key for user\n", + " return await create_key_with_alias(client=client, user_id=user_id, max_budget=max_budget)\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/TogetherAI_liteLLM.ipynb b/cookbook/TogetherAI_liteLLM.ipynb new file mode 100644 index 000000000..d47009149 --- /dev/null +++ b/cookbook/TogetherAI_liteLLM.ipynb @@ -0,0 +1,1006 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "WemkFEdDAnJL" + }, + "source": [ + "## liteLLM Together AI Tutorial\n", + "https://together.ai/\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pc6IO4V99O25", + "outputId": "2d69da44-010b-41c2-b38b-5b478576bb8b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting litellm\n", + " Downloading litellm-0.1.482-py3-none-any.whl (69 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m69.3/69.3 kB\u001b[0m \u001b[31m757.5 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: importlib-metadata<7.0.0,>=6.8.0 in /usr/local/lib/python3.10/dist-packages (from litellm) (6.8.0)\n", + "Collecting openai<0.28.0,>=0.27.8 (from litellm)\n", + " Downloading openai-0.27.9-py3-none-any.whl (75 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m75.5/75.5 kB\u001b[0m \u001b[31m3.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting python-dotenv<2.0.0,>=1.0.0 (from litellm)\n", + " Downloading python_dotenv-1.0.0-py3-none-any.whl (19 kB)\n", + "Collecting tiktoken<0.5.0,>=0.4.0 (from litellm)\n", + " Downloading tiktoken-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m17.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata<7.0.0,>=6.8.0->litellm) (3.16.2)\n", + "Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.10/dist-packages (from openai<0.28.0,>=0.27.8->litellm) (2.31.0)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from openai<0.28.0,>=0.27.8->litellm) (4.66.1)\n", + "Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from openai<0.28.0,>=0.27.8->litellm) (3.8.5)\n", + "Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.10/dist-packages (from tiktoken<0.5.0,>=0.4.0->litellm) (2023.6.3)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai<0.28.0,>=0.27.8->litellm) (3.2.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai<0.28.0,>=0.27.8->litellm) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai<0.28.0,>=0.27.8->litellm) (2.0.4)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai<0.28.0,>=0.27.8->litellm) (2023.7.22)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm) (23.1.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm) (6.0.4)\n", + "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm) (4.0.3)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm) (1.9.2)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm) (1.4.0)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai<0.28.0,>=0.27.8->litellm) (1.3.1)\n", + "Installing collected packages: python-dotenv, tiktoken, openai, litellm\n", + "Successfully installed litellm-0.1.482 openai-0.27.9 python-dotenv-1.0.0 tiktoken-0.4.0\n" + ] + } + ], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "TMI3739_9q97" + }, + "outputs": [], + "source": [ + "import os\n", + "from litellm import completion\n", + "os.environ[\"TOGETHERAI_API_KEY\"] = \"\" #@param\n", + "user_message = \"Hello, whats the weather in San Francisco??\"\n", + "messages = [{ \"content\": user_message,\"role\": \"user\"}]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bEqJ2HHjBJqq" + }, + "source": [ + "## Calling togethercomputer/llama-2-70b-chat\n", + "https://api.together.xyz/playground/chat?model=togethercomputer%2Fllama-2-70b-chat" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Jrrt8puj523f", + "outputId": "24494dea-816f-47a6-ade4-1b04f2e9085b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " 'choices': [\n", + "{\n", + " 'finish_reason': 'stop',\n", + " 'index': 0,\n", + " 'message': {\n", + " 'role': 'assistant',\n", + " 'content': \"\n", + "\n", + "I'm not able to provide real-time weather information. However, I can suggest some ways for you to find out the current weather in San Francisco.\n", + "\n", + "1. Check online weather websites: There are many websites that provide up-to-date weather information, such as AccuWeather, Weather.com, or the National Weather Service. You can enter \"San Francisco\" in the search bar and get the current weather conditions, forecast, and radar imagery.\n", + "2. Use a weather app: You can download a weather app on your smartphone that provides real-time weather information. Some popular weather apps include Dark Sky, Weather Underground, and The Weather Channel.\n", + "3. Tune into local news: You can watch local news channels or listen to local radio stations to get the latest weather forecast and current conditions.\n", + "4. Check social media: Follow local weather accounts on social media platforms like Twitter or Facebook to\"\n", + "}\n", + "}\n", + " ],\n", + " 'created': 1692323365.8261144,\n", + " 'model': 'togethercomputer/llama-2-70b-chat',\n", + " 'usage': {'prompt_tokens': 9, 'completion_tokens': 176, 'total_tokens': 185}\n", + "}\n" + ] + } + ], + "source": [ + "model_name = \"togethercomputer/llama-2-70b-chat\"\n", + "response = completion(model=model_name, messages=messages, max_tokens=200)\n", + "print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GIUevHlMvPb8", + "outputId": "ad930a12-16e3-4400-fff4-38151e4f6da5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[92mHere's your LiteLLM Dashboard šŸ‘‰ \u001b[94m\u001b[4mhttps://admin.litellm.ai/6c0f0403-becb-44af-9724-7201c7d381d0\u001b[0m\n", + "{\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \"\\nI'm in San Francisco, and I'm not sure what the weather is like.\\nI'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and I'm not sure what the weather is like. I'm in San Francisco, and\",\n", + " \"role\": \"assistant\"\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1692934243.8663018,\n", + " \"model\": \"togethercomputer/CodeLlama-34b-Instruct\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 9,\n", + " \"completion_tokens\": 178,\n", + " \"total_tokens\": 187\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "model_name = \"togethercomputer/CodeLlama-34b-Instruct\"\n", + "response = completion(model=model_name, messages=messages, max_tokens=200)\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sfWtgf-mBQcM" + }, + "source": [ + "## With Streaming" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "wuBhlZtC6MH5", + "outputId": "8f4a408c-25eb-4434-cdd4-7b4ae4f6d3aa" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Com'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'bin'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ator'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' ('}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ')'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' are'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' two'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' popular'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' acceler'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ators'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' have'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' gained'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' recognition'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' their'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' effect'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'iveness'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'urt'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'uring'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' scaling'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' early'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '-'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'stage'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' companies'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ities'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' they'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' also'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' have'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' distinct'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' differences'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' set'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' them'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' apart'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' In'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' this'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' ess'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ay'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' we'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' will'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' explore'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' key'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' features'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' discuss'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' which'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' might'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' be'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' better'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fit'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Com'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'bin'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ator'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' one'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' most'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' successful'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' acceler'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ators'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' world'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' with'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' port'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'folio'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' includes'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Air'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'b'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'nb'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Drop'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'box'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Red'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'dit'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' F'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ounded'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' '}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '2'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '5'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' has'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fund'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ed'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' over'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' '}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '1'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '9'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' start'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ups'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' with'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' combined'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' valu'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ation'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' over'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' $'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '1'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' billion'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' The'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' known'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' its'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' inten'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'se'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' three'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '-'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'month'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' boot'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' camp'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '-'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'style'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' format'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' where'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' found'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ers'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' work'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' closely'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' with'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' experienced'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' ment'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ors'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' develop'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' their'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' products'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' ref'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ine'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' their'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' business'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' models'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' prepare'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fund'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ra'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ising'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 's'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' focus'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' on'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' software'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' technology'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' internet'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' start'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ups'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' has'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' strong'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' track'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' record'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' ident'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ifying'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'urt'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'uring'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' successful'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' companies'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' these'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' spaces'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' on'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' other'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' hand'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' relatively'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' new'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' acceler'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ator'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' was'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' founded'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' '}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '2'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '1'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '7'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' While'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' it'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' may'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' not'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' have'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' same'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' level'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' brand'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' recognition'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' as'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' has'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' quickly'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' gained'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' reputation'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' its'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' unique'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' approach'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' acceleration'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' The'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' focus'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'es'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' on'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' supporting'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' under'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 're'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'present'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ed'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' found'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ers'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' particularly'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' women'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' people'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' color'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' provides'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' range'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' resources'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' support'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' help'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' these'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' found'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ers'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' succeed'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 's'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' designed'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' be'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' more'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' flexible'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' personal'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ized'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' than'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' traditional'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' acceler'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ators'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' with'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' focus'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' on'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' connecting'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' found'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ers'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' with'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' ment'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ors'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' resources'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' are'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' tail'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ored'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' their'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' specific'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' needs'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'One'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' key'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' difference'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' between'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' type'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' companies'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' they'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' support'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' focus'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'es'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' primarily'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' on'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' software'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' technology'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' internet'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' start'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ups'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' while'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' has'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' bro'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ader'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' focus'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' includes'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' range'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' indust'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ries'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' such'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' as'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' health'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'care'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fin'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ance'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' consumer'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' products'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' This'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' means'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' if'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' non'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '-'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'tech'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' industry'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' may'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' be'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' better'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fit'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'An'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'other'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' difference'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' between'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' two'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' programs'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' their'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' approach'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fund'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ing'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' provides'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' seed'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fund'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ing'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' all'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' its'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' port'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'folio'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' companies'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' typically'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' range'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' of'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' $'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '1'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' $'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '2'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '0'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' In'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' contrast'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' does'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' not'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' provide'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fund'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ing'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' its'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' port'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'folio'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' companies'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' but'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' instead'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' focus'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'es'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' on'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' connecting'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' found'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ers'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' with'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' invest'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ors'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' resources'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' can'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' help'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' them'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' raise'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' capital'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' This'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' means'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' if'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' looking'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fund'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ing'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' may'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' be'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' better'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' option'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'So'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' which'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' right'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '?'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' It'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' ultimately'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' depends'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' on'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' specific'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' needs'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' goals'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' If'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' non'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '-'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'tech'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' industry'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 's'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' bro'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ader'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' focus'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' may'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' be'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' better'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fit'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Additionally'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' if'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' you'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 're'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' looking'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' more'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' personal'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ized'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' flexible'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' approach'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' acceleration'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 's'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' may'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' be'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' better'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' choice'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' On'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' other'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' hand'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' if'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' software'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' technology'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' or'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' internet'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' space'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' you'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 're'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' looking'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' seed'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fund'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ing'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 's'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' may'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' be'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' a'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' better'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fit'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '\\n'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'In'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' conclusion'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Y'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'C'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' l'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ite'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'LL'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'M'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' are'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' both'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' excellent'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' acceler'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ators'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' can'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' provide'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' valuable'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' resources'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' support'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' early'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '-'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'stage'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' companies'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' While'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' they'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' share'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' some'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' similar'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'ities'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' they'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' also'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' have'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' distinct'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' differences'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' that'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' set'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' them'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' apart'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' By'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' considering'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' startup'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 's'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' specific'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' needs'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' goals'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' you'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' can'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' determine'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' which'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' program'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' is'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' the'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' best'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' fit'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' business'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n" + ] + } + ], + "source": [ + "user_message = \"Write 1page essay on YC + liteLLM\"\n", + "messages = [{ \"content\": user_message,\"role\": \"user\"}]\n", + "\n", + "\n", + "async def parse_stream(stream):\n", + " async for elem in stream:\n", + " print(elem)\n", + " return\n", + "\n", + "stream = completion(model=\"togethercomputer/llama-2-70b-chat\", messages=messages, stream=True, max_tokens=800)\n", + "print(stream)\n", + "\n", + "# Await the asynchronous function directly in the notebook cell\n", + "await parse_stream(stream)\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/Using_Nemo_Guardrails_with_LiteLLM_Server.ipynb b/cookbook/Using_Nemo_Guardrails_with_LiteLLM_Server.ipynb new file mode 100644 index 000000000..0c3ff97a3 --- /dev/null +++ b/cookbook/Using_Nemo_Guardrails_with_LiteLLM_Server.ipynb @@ -0,0 +1,157 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "eKXncoQbU_2j" + }, + "source": [ + "# Using Nemo-Guardrails with LiteLLM Server\n", + "\n", + "[Call Bedrock, TogetherAI, Huggingface, etc. on the server](https://docs.litellm.ai/docs/providers)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZciYaLwvuFbu" + }, + "source": [ + "## Using with Bedrock\n", + "\n", + "`docker run -e PORT=8000 -e AWS_ACCESS_KEY_ID= -e AWS_SECRET_ACCESS_KEY= -p 8000:8000 ghcr.io/berriai/litellm:latest`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vOUwGSJ2Vsy3" + }, + "outputs": [], + "source": [ + "pip install nemoguardrails langchain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xXEJNxe7U0IN" + }, + "outputs": [], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI(model_name=\"anthropic.claude-v2\", openai_api_base=\"http://0.0.0.0:8000\", openai_api_key=\"my-fake-key\")\n", + "\n", + "from nemoguardrails import LLMRails, RailsConfig\n", + "\n", + "config = RailsConfig.from_path(\"./config.yml\")\n", + "app = LLMRails(config, llm=llm)\n", + "\n", + "new_message = app.generate(messages=[{\n", + " \"role\": \"user\",\n", + " \"content\": \"Hello! What can you do for me?\"\n", + "}])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vz5n00qyuKjp" + }, + "source": [ + "## Using with TogetherAI\n", + "\n", + "1. You can either set this in the server environment:\n", + "`docker run -e PORT=8000 -e TOGETHERAI_API_KEY= -p 8000:8000 ghcr.io/berriai/litellm:latest`\n", + "\n", + "2. **Or** Pass this in as the api key `(...openai_api_key=\"\")`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "XK1sk-McuhpE" + }, + "outputs": [], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI(model_name=\"together_ai/togethercomputer/CodeLlama-13b-Instruct\", openai_api_base=\"http://0.0.0.0:8000\", openai_api_key=\"my-together-ai-api-key\")\n", + "\n", + "from nemoguardrails import LLMRails, RailsConfig\n", + "\n", + "config = RailsConfig.from_path(\"./config.yml\")\n", + "app = LLMRails(config, llm=llm)\n", + "\n", + "new_message = app.generate(messages=[{\n", + " \"role\": \"user\",\n", + " \"content\": \"Hello! What can you do for me?\"\n", + "}])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8A1KWKnzuxAS" + }, + "source": [ + "### CONFIG.YML\n", + "\n", + "save this example `config.yml` in your current directory" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NKN1GmSvu0Cx" + }, + "outputs": [], + "source": [ + "# instructions:\n", + "# - type: general\n", + "# content: |\n", + "# Below is a conversation between a bot and a user about the recent job reports.\n", + "# The bot is factual and concise. If the bot does not know the answer to a\n", + "# question, it truthfully says it does not know.\n", + "\n", + "# sample_conversation: |\n", + "# user \"Hello there!\"\n", + "# express greeting\n", + "# bot express greeting\n", + "# \"Hello! How can I assist you today?\"\n", + "# user \"What can you do for me?\"\n", + "# ask about capabilities\n", + "# bot respond about capabilities\n", + "# \"I am an AI assistant that helps answer mathematical questions. My core mathematical skills are powered by wolfram alpha.\"\n", + "# user \"What's 2+2?\"\n", + "# ask math question\n", + "# bot responds to math question\n", + "# \"2+2 is equal to 4.\"\n", + "\n", + "# models:\n", + "# - type: main\n", + "# engine: openai\n", + "# model: claude-instant-1" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/VLLM_Model_Testing.ipynb b/cookbook/VLLM_Model_Testing.ipynb new file mode 100644 index 000000000..0cacac661 --- /dev/null +++ b/cookbook/VLLM_Model_Testing.ipynb @@ -0,0 +1,404 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "machine_shape": "hm", + "gpuType": "V100" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Set up Environment" + ], + "metadata": { + "id": "vDOm5wfjdFLP" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install --upgrade litellm" + ], + "metadata": { + "id": "Bx6mAA6MHiy_" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zIYv7JTyxSxR", + "outputId": "53890320-f9fa-4bf4-8362-0f17f52c6ed4" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Successfully installed fastapi-0.103.1 h11-0.14.0 huggingface-hub-0.16.4 ninja-1.11.1 pydantic-1.10.12 ray-2.6.3 safetensors-0.3.3 sentencepiece-0.1.99 starlette-0.27.0 tokenizers-0.13.3 transformers-4.33.1 uvicorn-0.23.2 vllm-0.1.4 xformers-0.0.21\n" + ] + } + ], + "source": [ + "!pip install vllm" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Load the Logs" + ], + "metadata": { + "id": "RMcoAni6WKEx" + } + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd" + ], + "metadata": { + "id": "zchxB8c7WJe5" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# path of the csv file\n", + "file_path = 'Model-prompts-example.csv'\n", + "\n", + "# load the csv file as a pandas DataFrame\n", + "data = pd.read_csv(file_path)\n", + "\n", + "data.head()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 81 + }, + "id": "aKcWr015WNPm", + "outputId": "6e226773-333f-46a2-9fc8-4f54f309d204" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Success Timestamp Input \\\n", + "0 True 1694041195 This is the templated query input \n", + "\n", + " Output RunId (Wandb Runid) \\\n", + "0 This is the query output from the model 8hlumwuk \n", + "\n", + " Model ID (or Name) \n", + "0 OpenAI/Turbo-3.5 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SuccessTimestampInputOutputRunId (Wandb Runid)Model ID (or Name)
0True1694041195This is the templated query inputThis is the query output from the model8hlumwukOpenAI/Turbo-3.5
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "source": [ + "input_texts = data['Input'].values" + ], + "metadata": { + "id": "0DbL-kirWUyn" + }, + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "messages = [[{\"role\": \"user\", \"content\": input_text}] for input_text in input_texts]" + ], + "metadata": { + "id": "cqpAvy8hWXyC" + }, + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Running Inference" + ], + "metadata": { + "id": "SugCyom0Xy8U" + } + }, + { + "cell_type": "code", + "source": [ + "from litellm import batch_completion\n", + "model_name = \"facebook/opt-125m\"\n", + "provider = \"vllm\"\n", + "response_list = batch_completion(\n", + " model=model_name,\n", + " custom_llm_provider=provider, # can easily switch to huggingface, replicate, together ai, sagemaker, etc.\n", + " messages=messages,\n", + " temperature=0.2,\n", + " max_tokens=80,\n", + " )" + ], + "metadata": { + "id": "qpikx3uxHns3" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "response_list" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QDPikHtwKJJ2", + "outputId": "06f47c44-e258-452a-f9db-232a5b6d2810" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[ JSON: {\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \".\\n\\nThe query input is the query input that is used to query the data.\\n\\nThe query input is the query input that is used to query the data.\\n\\nThe query input is the query input that is used to query the data.\\n\\nThe query input is the query input that is used to query the data.\\n\\nThe query input is the query input that is\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1694053363.6139505,\n", + " \"model\": \"facebook/opt-125m\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 9,\n", + " \"completion_tokens\": 80,\n", + " \"total_tokens\": 89\n", + " }\n", + " }]" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "response_values = [response['choices'][0]['message']['content'] for response in response_list]" + ], + "metadata": { + "id": "SYqTcCiJbQDF" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "response_values" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wqs-Oy9FbiPo", + "outputId": "16a6a7b7-97c8-4b5b-eff8-09ea5eb5ad06" + }, + "execution_count": 12, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['.\\n\\nThe query input is the query input that is used to query the data.\\n\\nThe query input is the query input that is used to query the data.\\n\\nThe query input is the query input that is used to query the data.\\n\\nThe query input is the query input that is used to query the data.\\n\\nThe query input is the query input that is']" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "code", + "source": [ + "data[f\"{model_name}_output\"] = response_values" + ], + "metadata": { + "id": "mElNbBehbkrz" + }, + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "data.to_csv('model_responses.csv', index=False)" + ], + "metadata": { + "id": "F06NXssDc45k" + }, + "execution_count": 14, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/cookbook/ai_coding_tool_guides/claude_code_quickstart/guide.md b/cookbook/ai_coding_tool_guides/claude_code_quickstart/guide.md new file mode 100644 index 000000000..b2d81be25 --- /dev/null +++ b/cookbook/ai_coding_tool_guides/claude_code_quickstart/guide.md @@ -0,0 +1,295 @@ +# Claude Code with LiteLLM Quickstart + +This guide shows how to call Claude models (and any LiteLLM-supported model) through LiteLLM proxy from Claude Code. + +> **Note:** This integration is based on [Anthropic's official LiteLLM configuration documentation](https://docs.anthropic.com/en/docs/claude-code/llm-gateway#litellm-configuration). It allows you to use any LiteLLM supported model through Claude Code with centralized authentication, usage tracking, and cost controls. + +## Video Walkthrough + +Watch the full tutorial: https://www.loom.com/embed/3c17d683cdb74d36a3698763cc558f56 + +## Prerequisites + +- [Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) installed +- API keys for your chosen providers + +## Installation + +First, install LiteLLM with proxy support: + +```bash +pip install 'litellm[proxy]' +``` + +## Step 1: Setup config.yaml + +Create a secure configuration using environment variables: + +```yaml +model_list: + # Claude models + - model_name: claude-3-5-sonnet-20241022 + litellm_params: + model: anthropic/claude-3-5-sonnet-20241022 + api_key: os.environ/ANTHROPIC_API_KEY + + - model_name: claude-3-5-haiku-20241022 + litellm_params: + model: anthropic/claude-3-5-haiku-20241022 + api_key: os.environ/ANTHROPIC_API_KEY + + +litellm_settings: + master_key: os.environ/LITELLM_MASTER_KEY +``` + +Set your environment variables: + +```bash +export ANTHROPIC_API_KEY="your-anthropic-api-key" +export LITELLM_MASTER_KEY="sk-1234567890" # Generate a secure key +``` + +## Step 2: Start Proxy + +```bash +litellm --config /path/to/config.yaml + +# RUNNING on http://0.0.0.0:4000 +``` + +## Step 3: Verify Setup + +Test that your proxy is working correctly: + +```bash +curl -X POST http://0.0.0.0:4000/v1/messages \ +-H "Authorization: Bearer $LITELLM_MASTER_KEY" \ +-H "Content-Type: application/json" \ +-d '{ + "model": "claude-3-5-sonnet-20241022", + "max_tokens": 1000, + "messages": [{"role": "user", "content": "What is the capital of France?"}] +}' +``` + +## Step 4: Configure Claude Code + +### Method 1: Unified Endpoint (Recommended) + +Configure Claude Code to use LiteLLM's unified endpoint. Either a virtual key or master key can be used here: + +```bash +export ANTHROPIC_BASE_URL="http://0.0.0.0:4000" +export ANTHROPIC_AUTH_TOKEN="$LITELLM_MASTER_KEY" +``` + +> **Tip:** LITELLM_MASTER_KEY gives Claude access to all proxy models, whereas a virtual key would be limited to the models set in the UI. + +### Method 2: Provider-specific Pass-through Endpoint + +Alternatively, use the Anthropic pass-through endpoint: + +```bash +export ANTHROPIC_BASE_URL="http://0.0.0.0:4000/anthropic" +export ANTHROPIC_AUTH_TOKEN="$LITELLM_MASTER_KEY" +``` + +## Step 5: Use Claude Code + +### Choosing Your Model + +You have two options for specifying which model Claude Code uses: + +#### Option 1: Command Line / Session Model Selection + +Specify the model directly when starting Claude Code or during a session: + +```bash +# Specify model at startup +claude --model claude-3-5-sonnet-20241022 + +# Or change model during a session +/model claude-3-5-haiku-20241022 +``` + +This method uses the exact model you specify. + +#### Option 2: Environment Variables + +Configure default models using environment variables: + +```bash +# Tell Claude Code which models to use by default +export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-3-5-sonnet-20241022 +export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-3-5-haiku-20241022 +export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-3-5-20240229 + +claude # Will use the models specified above +``` + +**Note:** Claude Code may cache the model from a previous session. If environment variables don't take effect, use Option 1 to explicitly set the model. + +**Important:** The `model_name` in your LiteLLM config must match what Claude Code requests (either from env vars or command line). + +### Using 1M Context Window + +Claude Code supports extended context (1 million tokens) using the `[1m]` suffix with Claude 4+ models: + +```bash +# Use Sonnet 4.5 with 1M context (requires quotes for shell) +claude --model 'claude-sonnet-4-5-20250929[1m]' + +# Inside a Claude Code session (no quotes needed) +/model claude-sonnet-4-5-20250929[1m] +``` + +**Important:** When using `--model` with `[1m]` in the shell, you must use quotes to prevent the shell from interpreting the brackets. + +Alternatively, set as default with environment variables: + +```bash +export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-5-20250929[1m]' +claude +``` + +**How it works:** +- Claude Code strips the `[1m]` suffix before sending to LiteLLM +- Claude Code automatically adds the header `anthropic-beta: context-1m-2025-08-07` +- Your LiteLLM config should **NOT** include `[1m]` in model names + +**Verify 1M context is active:** +```bash +/context +# Should show: 21k/1000k tokens (2%) +``` + +**Pricing:** Models using 1M context have different pricing. Input tokens above 200k are charged at a higher rate. + +## Troubleshooting + +Common issues and solutions: + +**Claude Code not connecting:** +- Verify your proxy is running: `curl http://0.0.0.0:4000/health` +- Check that `ANTHROPIC_BASE_URL` is set correctly +- Ensure your `ANTHROPIC_AUTH_TOKEN` matches your LiteLLM master key + +**Authentication errors:** +- Verify your environment variables are set: `echo $LITELLM_MASTER_KEY` +- Check that your API keys are valid and have sufficient credits +- Ensure the `ANTHROPIC_AUTH_TOKEN` matches your LiteLLM master key + +**Model not found:** +- Check what model Claude Code is requesting in LiteLLM logs +- Ensure your `config.yaml` has a matching `model_name` entry +- If using environment variables, verify they're set: `echo $ANTHROPIC_DEFAULT_SONNET_MODEL` + +**1M context not working (showing 200k instead of 1000k):** +- Verify you're using the `[1m]` suffix: `/model your-model-name[1m]` +- Check LiteLLM logs for the header `context-1m-2025-08-07` in the request +- Ensure your model supports 1M context (only certain Claude models do) +- Your LiteLLM config should **NOT** include `[1m]` in the `model_name` + +## Using Multiple Models and Providers + +You can configure LiteLLM to route to any supported provider. Here's an example with multiple providers: + +```yaml +model_list: + # OpenAI models + - model_name: codex-mini + litellm_params: + model: openai/codex-mini + api_key: os.environ/OPENAI_API_KEY + api_base: https://api.openai.com/v1 + + - model_name: o3-pro + litellm_params: + model: openai/o3-pro + api_key: os.environ/OPENAI_API_KEY + api_base: https://api.openai.com/v1 + + - model_name: gpt-4o + litellm_params: + model: openai/gpt-4o + api_key: os.environ/OPENAI_API_KEY + api_base: https://api.openai.com/v1 + + # Anthropic models + - model_name: claude-3-5-sonnet-20241022 + litellm_params: + model: anthropic/claude-3-5-sonnet-20241022 + api_key: os.environ/ANTHROPIC_API_KEY + + - model_name: claude-3-5-haiku-20241022 + litellm_params: + model: anthropic/claude-3-5-haiku-20241022 + api_key: os.environ/ANTHROPIC_API_KEY + + # AWS Bedrock + - model_name: claude-bedrock + litellm_params: + model: bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 + aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID + aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY + aws_region_name: us-east-1 + +litellm_settings: + master_key: os.environ/LITELLM_MASTER_KEY +``` + +**Note:** The `model_name` can be anything you choose. Claude Code will request whatever model you specify (via env vars or command line), and LiteLLM will route to the `model` configured in `litellm_params`. + +Switch between models seamlessly: + +```bash +# Use environment variables to set defaults +export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-3-5-sonnet-20241022 +export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-3-5-haiku-20241022 + +# Or specify directly +claude --model claude-3-5-sonnet-20241022 # Complex reasoning +claude --model claude-3-5-haiku-20241022 # Fast responses +claude --model claude-bedrock # Bedrock deployment +``` + +## Default Models Used by Claude Code + +If you **don't** set environment variables, Claude Code uses these default model names: + +| Purpose | Default Model Name (v2.1.14) | +|---------|------------------------------| +| Main model | `claude-sonnet-4-5-20250929` | +| Light tasks (subagents, summaries) | `claude-haiku-4-5-20251001` | +| Planning mode | `claude-opus-4-5-20251101` | + +Your LiteLLM config should include these model names if you want Claude Code to work without setting environment variables: + +```yaml +model_list: + - model_name: claude-sonnet-4-5-20250929 + litellm_params: + # Can be any provider - Anthropic, Bedrock, Vertex AI, etc. + model: anthropic/claude-sonnet-4-5-20250929 + api_key: os.environ/ANTHROPIC_API_KEY + + - model_name: claude-haiku-4-5-20251001 + litellm_params: + model: anthropic/claude-haiku-4-5-20251001 + api_key: os.environ/ANTHROPIC_API_KEY + + - model_name: claude-opus-4-5-20251101 + litellm_params: + model: anthropic/claude-opus-4-5-20251101 + api_key: os.environ/ANTHROPIC_API_KEY +``` + +**Warning:** These default model names may change with new Claude Code versions. Check LiteLLM proxy logs for "model not found" errors to identify what Claude Code is requesting. + +## Additional Resources + +- [LiteLLM Documentation](https://docs.litellm.ai/) +- [Claude Code Documentation](https://docs.anthropic.com/en/docs/claude-code/overview) +- [Anthropic's LiteLLM Configuration Guide](https://docs.anthropic.com/en/docs/claude-code/llm-gateway#litellm-configuration) + diff --git a/cookbook/ai_coding_tool_guides/index.json b/cookbook/ai_coding_tool_guides/index.json new file mode 100644 index 000000000..3e71670d6 --- /dev/null +++ b/cookbook/ai_coding_tool_guides/index.json @@ -0,0 +1,134 @@ +[{ + "title": "Claude Code Quickstart", + "description": "This is a quickstart guide to using Claude Code with LiteLLM.", + "url": "https://docs.litellm.ai/docs/tutorials/claude_responses_api", + "date": "2026-01-15", + "version": "1.0.0", + "tags": [ + "Claude Code", + "LiteLLM" + ] +}, +{ + "title": "Claude Code with MCPs", + "description": "This is a guide to using Claude Code with MCPs via LiteLLM Proxy.", + "url": "https://docs.litellm.ai/docs/tutorials/claude_mcp", + "date": "2026-01-15", + "version": "1.0.0", + "tags": [ + "Claude Code", + "LiteLLM", + "MCP" + ] +}, +{ + "title": "Claude Code with Non-Anthropic Models", + "description": "This is a guide to using Claude Code with non-Anthropic models via LiteLLM Proxy.", + "url": "https://docs.litellm.ai/docs/tutorials/claude_non_anthropic_models", + "date": "2026-01-16", + "version": "1.0.0", + "tags": [ + "Claude Code", + "LiteLLM", + "OpenAI", + "Gemini" + ] +}, +{ + "title": "Cursor Quickstart", + "description": "This is a quickstart guide to using Cursor with LiteLLM.", + "url": "https://docs.litellm.ai/docs/tutorials/cursor_integration", + "date": "2026-01-16", + "version": "1.0.0", + "tags": [ + "Cursor", + "LiteLLM", + "Quickstart" + ] +}, +{ + "title": "Github Copilot Quickstart", + "description": "This is a quickstart guide to using Github Copilot with LiteLLM.", + "url": "https://docs.litellm.ai/docs/tutorials/github_copilot_integration", + "date": "2026-01-16", + "version": "1.0.0", + "tags": [ + "Github Copilot", + "LiteLLM", + "Quickstart" + ] +}, +{ + "title": "LiteLLM Gemini CLI Quickstart", + "description": "This is a quickstart guide to using LiteLLM Gemini CLI.", + "url": "https://docs.litellm.ai/docs/tutorials/litellm_gemini_cli", + "date": "2026-01-16", + "version": "1.0.0", + "tags": [ + "Gemini CLI", + "Gemini", + "LiteLLM", + "Quickstart" + ] +}, +{ + "title": "OpenAI Codex CLI Quickstart", + "description": "This is a quickstart guide to using OpenAI Codex CLI.", + "url": "https://docs.litellm.ai/docs/tutorials/openai_codex", + "date": "2026-01-16", + "version": "1.0.0", + "tags": [ + "OpenAI Codex CLI", + "OpenAI", + "LiteLLM", + "Quickstart" + ] +}, +{ + "title": "OpenWebUI Quickstart", + "description": "This is a quickstart guide to using OpenWebUI with LiteLLM.", + "url": "https://docs.litellm.ai/docs/tutorials/openweb_ui", + "date": "2026-01-16", + "version": "1.0.0", + "tags": [ + "OpenWebUI", + "LiteLLM", + "Quickstart" + ] +}, +{ + "title": "AI Coding Tool Usage Tracking", + "description": "This is a guide to tracking usage for AI coding tools monitor the use of Claude Code , Google Antigravity, OpenAI Codex, Roo Code etc. through LiteLLM.", + "url": "https://docs.litellm.ai/docs/tutorials/cost_tracking_coding", + "date": "2026-01-17", + "version": "1.0.0", + "tags": [ + "Claude Code", + "Gemini CLI", + "OpenAI Codex", + "LiteLLM" + ] +}, +{ + "title": "Use Web Search with Claude Code (across Bedrock/OpenAI/Gemini/etc.)", + "description": "This is a guide for using Web Search with Claude Code via LiteLLM.", + "url": "https://docs.litellm.ai/docs/tutorials/claude_code_websearch", + "date": "2026-01-17", + "version": "1.0.0", + "tags": [ + "Claude Code", + "LiteLLM", + "Web Search" + ] +}, +{ + "title": "Track Claude Code Usage per user via Custom Headers", + "description": "This is a guide for tracking claude code user usage by passing a customer ID header.", + "url": "https://docs.litellm.ai/docs/tutorials/claude_code_customer_tracking", + "date": "2026-01-17", + "version": "1.0.0", + "tags": [ + "Claude Code", + "LiteLLM" + ] +}] \ No newline at end of file diff --git a/cookbook/anthropic_agent_sdk/README.md b/cookbook/anthropic_agent_sdk/README.md new file mode 100644 index 000000000..294d949e2 --- /dev/null +++ b/cookbook/anthropic_agent_sdk/README.md @@ -0,0 +1,144 @@ +# Claude Agent SDK with LiteLLM Gateway + +A simple example showing how to use Claude's Agent SDK with LiteLLM as a proxy. This lets you use any LLM provider (OpenAI, Bedrock, Azure, etc.) through the Agent SDK. + +## Quick Start + +### 1. Install dependencies + +```bash +pip install anthropic claude-agent-sdk litellm +``` + +### 2. Start LiteLLM proxy + +```bash +# Simple start with Claude +litellm --model claude-sonnet-4-20250514 + +# Or with a config file +litellm --config config.yaml +``` + +### 3. Run the chat + +**Basic Agent (no MCP):** + +```bash +python main.py +``` + +**Agent with MCP (DeepWiki2 for research):** + +```bash +python agent_with_mcp.py +``` + +If MCP connection fails, you can disable it: + +```bash +USE_MCP=false python agent_with_mcp.py +``` + +That's it! You can now chat with the agent in your terminal. + +### Chat Commands + +While chatting, you can use these commands: +- `models` - List all available models (fetched from your LiteLLM proxy) +- `model` - Switch to a different model +- `clear` - Start a new conversation +- `quit` or `exit` - End the chat + +The chat automatically fetches available models from your LiteLLM proxy's `/models` endpoint, so you'll always see what's currently configured. + +## Configuration + +Set these environment variables if needed: + +```bash +export LITELLM_PROXY_URL="http://localhost:4000" +export LITELLM_API_KEY="sk-1234" +export LITELLM_MODEL="bedrock-claude-sonnet-4.5" +``` + +Or just use the defaults - it'll connect to `http://localhost:4000` by default. + +## Files + +- `main.py` - Basic interactive agent without MCP +- `agent_with_mcp.py` - Agent with MCP server integration (DeepWiki2) +- `common.py` - Shared utilities and functions +- `config.example.yaml` - Example LiteLLM configuration +- `requirements.txt` - Python dependencies + +## Example Config File + +If you want to use multiple models, create a `config.yaml` (see `config.example.yaml`): + +```yaml +model_list: + - model_name: bedrock-claude-sonnet-4 + litellm_params: + model: "bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0" + aws_region_name: "us-east-1" + + - model_name: bedrock-claude-sonnet-4.5 + litellm_params: + model: "bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0" + aws_region_name: "us-east-1" +``` + +Then start LiteLLM with: `litellm --config config.yaml` + +## How It Works + +The key is pointing the Agent SDK to LiteLLM instead of directly to Anthropic: + +```python +# Point to LiteLLM gateway (not Anthropic) +os.environ["ANTHROPIC_BASE_URL"] = "http://localhost:4000" +os.environ["ANTHROPIC_API_KEY"] = "sk-1234" # Your LiteLLM key + +# Use any model configured in LiteLLM +options = ClaudeAgentOptions( + model="bedrock-claude-sonnet-4", # or gpt-4, or anything else + system_prompt="You are a helpful assistant.", + max_turns=50, +) +``` + +Note: Don't add `/anthropic` to the base URL - LiteLLM handles the routing automatically. + +## Why Use This? + +- **Switch providers easily**: Use the same code with OpenAI, Bedrock, Azure, etc. +- **Cost tracking**: LiteLLM tracks spending across all your agent conversations +- **Rate limiting**: Set budgets and limits on your agent usage +- **Load balancing**: Distribute requests across multiple API keys or regions +- **Fallbacks**: Automatically retry with a different model if one fails + +## Troubleshooting + +**Connection errors?** +- Make sure LiteLLM is running: `litellm --model your-model` +- Check the URL is correct (default: `http://localhost:4000`) + +**Authentication errors?** +- Verify your LiteLLM API key is correct +- Make sure the model is configured in your LiteLLM setup + +**Model not found?** +- Check the model name matches what's in your LiteLLM config +- Run `litellm --model your-model` to test it works + +**Agent with MCP stuck or failing?** +- The MCP server might not be available at `http://localhost:4000/mcp/deepwiki2` +- Try disabling MCP: `USE_MCP=false python agent_with_mcp.py` +- Or use the basic agent: `python main.py` + +## Learn More + +- [LiteLLM Docs](https://docs.litellm.ai/) +- [Claude Agent SDK](https://github.com/anthropics/anthropic-agent-sdk) +- [LiteLLM Proxy Guide](https://docs.litellm.ai/docs/proxy/quick_start) diff --git a/cookbook/anthropic_agent_sdk/agent_with_mcp.py b/cookbook/anthropic_agent_sdk/agent_with_mcp.py new file mode 100644 index 000000000..8a7513c78 --- /dev/null +++ b/cookbook/anthropic_agent_sdk/agent_with_mcp.py @@ -0,0 +1,144 @@ +""" +Interactive Claude Agent SDK CLI with MCP Support + +This example demonstrates an interactive CLI chat with the Anthropic Agent SDK using LiteLLM as a proxy, +with MCP (Model Context Protocol) server integration for enhanced capabilities. +""" + +import asyncio +import os +from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions +from common import ( + Config, + fetch_available_models, + setup_litellm_env, + print_header, + handle_model_list, + handle_model_switch, + stream_response, +) + + +async def interactive_chat_with_mcp(): + """ + Interactive CLI chat with the agent and MCP server + """ + config = Config() + + # Configure Anthropic SDK to point to LiteLLM gateway + litellm_base_url = setup_litellm_env(config) + + # Fetch available models from proxy + available_models = await fetch_available_models( + litellm_base_url, config.LITELLM_API_KEY + ) + + current_model = config.LITELLM_MODEL + + # MCP server configuration + mcp_server_url = f"{litellm_base_url}/mcp/deepwiki2" + use_mcp = os.getenv("USE_MCP", "true").lower() == "true" + + if not use_mcp: + print("āš ļø MCP disabled via USE_MCP=false") + + print_header(litellm_base_url, current_model, has_mcp=use_mcp) + + while True: + # Configure agent options + if use_mcp: + try: + # Try with MCP server (HTTP transport) + # Using McpHttpServerConfig format from Agent SDK + options = ClaudeAgentOptions( + system_prompt="You are a helpful AI assistant with access to DeepWiki for research. Be concise, accurate, and friendly.", + model=current_model, + max_turns=50, + mcp_servers={ + "deepwiki2": { + "type": "http", + "url": mcp_server_url, + "headers": { + "Authorization": f"Bearer {config.LITELLM_API_KEY}" + }, + } + }, + ) + except Exception as e: + print(f"āš ļø Warning: Could not configure MCP server: {e}") + print("Continuing without MCP...\n") + use_mcp = False + options = ClaudeAgentOptions( + system_prompt="You are a helpful AI assistant. Be concise, accurate, and friendly.", + model=current_model, + max_turns=50, + ) + else: + # Without MCP + options = ClaudeAgentOptions( + system_prompt="You are a helpful AI assistant. Be concise, accurate, and friendly.", + model=current_model, + max_turns=50, + ) + + # Create agent client + try: + async with ClaudeSDKClient(options=options) as client: + conversation_active = True + + while conversation_active: + # Get user input + try: + user_input = input("\nšŸ‘¤ You: ").strip() + except (EOFError, KeyboardInterrupt): + print("\n\nšŸ‘‹ Goodbye!") + return + + # Handle commands + if user_input.lower() in ["quit", "exit"]: + print("\nšŸ‘‹ Goodbye!") + return + + if user_input.lower() == "clear": + print("\nšŸ”„ Starting new conversation...\n") + conversation_active = False + continue + + if user_input.lower() == "models": + handle_model_list(available_models, current_model) + continue + + if user_input.lower() == "model": + new_model, should_restart = handle_model_switch( + available_models, current_model + ) + if should_restart: + current_model = new_model + conversation_active = False + continue + + if not user_input: + continue + + # Stream response from agent + await stream_response(client, user_input) + + except Exception as e: + print(f"\nāŒ Error creating agent client: {e}") + print("This might be an MCP configuration issue. Try running without MCP:") + print(" USE_MCP=false python agent_with_mcp.py") + print("\nOr use the basic agent:") + print(" python main.py") + return + + +def main(): + """Run interactive chat with MCP""" + try: + asyncio.run(interactive_chat_with_mcp()) + except KeyboardInterrupt: + print("\n\nšŸ‘‹ Goodbye!") + + +if __name__ == "__main__": + main() diff --git a/cookbook/anthropic_agent_sdk/common.py b/cookbook/anthropic_agent_sdk/common.py new file mode 100644 index 000000000..a2555ed33 --- /dev/null +++ b/cookbook/anthropic_agent_sdk/common.py @@ -0,0 +1,164 @@ +""" +Common utilities for Claude Agent SDK examples +""" + +import os +import httpx + + +class Config: + """Configuration for LiteLLM Gateway connection""" + + # LiteLLM proxy URL (default to local instance) + LITELLM_PROXY_URL = os.getenv("LITELLM_PROXY_URL", "http://localhost:4000") + + # LiteLLM API key (master key or virtual key) + LITELLM_API_KEY = os.getenv("LITELLM_API_KEY", "sk-1234") + + # Model name as configured in LiteLLM (e.g., "bedrock-claude-sonnet-4", "gpt-4", etc.) + LITELLM_MODEL = os.getenv("LITELLM_MODEL", "bedrock-claude-sonnet-4.5") + + +async def fetch_available_models(base_url: str, api_key: str) -> list[str]: + """ + Fetch available models from LiteLLM proxy /models endpoint + """ + try: + async with httpx.AsyncClient() as client: + response = await client.get( + f"{base_url}/models", + headers={"Authorization": f"Bearer {api_key}"}, + timeout=10.0, + ) + response.raise_for_status() + data = response.json() + return [model["id"] for model in data.get("data", [])] + except Exception as e: + print(f"āš ļø Warning: Could not fetch models from proxy: {e}") + print("Using default model list...") + # Fallback to default models + return [ + "bedrock-claude-sonnet-3.5", + "bedrock-claude-sonnet-4", + "bedrock-claude-sonnet-4.5", + "bedrock-claude-opus-4.5", + "bedrock-nova-premier", + ] + + +def setup_litellm_env(config: Config): + """ + Configure environment variables to point Agent SDK to LiteLLM + """ + litellm_base_url = config.LITELLM_PROXY_URL.rstrip("/") + os.environ["ANTHROPIC_BASE_URL"] = litellm_base_url + os.environ["ANTHROPIC_API_KEY"] = config.LITELLM_API_KEY + return litellm_base_url + + +def print_header(base_url: str, current_model: str, has_mcp: bool = False): + """ + Print the chat header + """ + mcp_indicator = " + MCP" if has_mcp else "" + print("=" * 70) + print(f"šŸ¤– Claude Agent SDK with LiteLLM Gateway{mcp_indicator} - Interactive Chat") + print("=" * 70) + print(f"šŸš€ Connected to: {base_url}") + print(f"šŸ“¦ Current model: {current_model}") + if has_mcp: + print("šŸ”Œ MCP: deepwiki2 enabled") + print("\nType your messages below. Commands:") + print(" - 'quit' or 'exit' to end the conversation") + print(" - 'clear' to start a new conversation") + print(" - 'model' to switch models") + print(" - 'models' to list available models") + print("=" * 70) + print() + + +def handle_model_list(available_models: list[str], current_model: str): + """ + Display available models + """ + print("\nšŸ“‹ Available models:") + for i, model in enumerate(available_models, 1): + marker = "āœ“" if model == current_model else " " + print(f" {marker} {i}. {model}") + + +def handle_model_switch( + available_models: list[str], current_model: str +) -> tuple[str, bool]: + """ + Handle model switching + + Returns: + tuple: (new_model, should_restart_conversation) + """ + print("\nšŸ“‹ Select a model:") + for i, model in enumerate(available_models, 1): + marker = "āœ“" if model == current_model else " " + print(f" {marker} {i}. {model}") + + try: + choice = input("\nEnter number (or press Enter to cancel): ").strip() + if choice: + idx = int(choice) - 1 + if 0 <= idx < len(available_models): + new_model = available_models[idx] + print(f"\nāœ… Switched to: {new_model}") + print("šŸ”„ Starting new conversation with new model...\n") + return new_model, True + else: + print("āŒ Invalid choice") + except (ValueError, IndexError): + print("āŒ Invalid input") + + return current_model, False + + +async def stream_response(client, user_input: str): + """ + Stream response from the agent + """ + print("\nšŸ¤– Assistant: ", end="", flush=True) + + try: + await client.query(user_input) + + # Show loading indicator + print("ā³ thinking...", end="", flush=True) + + # Stream the response + first_chunk = True + async for msg in client.receive_response(): + # Clear loading indicator on first message + if first_chunk: + print("\ršŸ¤– Assistant: ", end="", flush=True) + first_chunk = False + + # Handle different message types + if hasattr(msg, "type"): + if msg.type == "content_block_delta": + # Streaming text delta + if hasattr(msg, "delta") and hasattr(msg.delta, "text"): + print(msg.delta.text, end="", flush=True) + elif msg.type == "content_block_start": + # Start of content block + if hasattr(msg, "content_block") and hasattr( + msg.content_block, "text" + ): + print(msg.content_block.text, end="", flush=True) + + # Fallback to original content handling + if hasattr(msg, "content"): + for content_block in msg.content: + if hasattr(content_block, "text"): + print(content_block.text, end="", flush=True) + + print() # New line after response + + except Exception as e: + print(f"\r\nāŒ Error: {e}") + print("Please check your LiteLLM gateway is running and configured correctly.") diff --git a/cookbook/anthropic_agent_sdk/config.example.yaml b/cookbook/anthropic_agent_sdk/config.example.yaml new file mode 100644 index 000000000..eb1984fc4 --- /dev/null +++ b/cookbook/anthropic_agent_sdk/config.example.yaml @@ -0,0 +1,25 @@ +model_list: + - model_name: bedrock-claude-sonnet-3.5 + litellm_params: + model: "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0" + aws_region_name: "us-east-1" + + - model_name: bedrock-claude-sonnet-4 + litellm_params: + model: "bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0" + aws_region_name: "us-east-1" + + - model_name: bedrock-claude-sonnet-4.5 + litellm_params: + model: "bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0" + aws_region_name: "us-east-1" + + - model_name: bedrock-claude-opus-4.5 + litellm_params: + model: "bedrock/us.anthropic.claude-opus-4-5-20251101-v1:0" + aws_region_name: "us-east-1" + + - model_name: bedrock-nova-premier + litellm_params: + model: "bedrock/amazon.nova-premier-v1:0" + aws_region_name: "us-east-1" diff --git a/cookbook/anthropic_agent_sdk/main.py b/cookbook/anthropic_agent_sdk/main.py new file mode 100644 index 000000000..506c6fa07 --- /dev/null +++ b/cookbook/anthropic_agent_sdk/main.py @@ -0,0 +1,99 @@ +""" +Simple Interactive Claude Agent SDK CLI using LiteLLM Gateway + +This example demonstrates an interactive CLI chat with the Anthropic Agent SDK using LiteLLM as a proxy. +LiteLLM acts as a unified interface, allowing you to use any LLM provider (OpenAI, Azure, Bedrock, etc.) +through the Claude Agent SDK by pointing it to the LiteLLM gateway. +""" + +import asyncio +from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions +from common import ( + Config, + fetch_available_models, + setup_litellm_env, + print_header, + handle_model_list, + handle_model_switch, + stream_response, +) + + +async def interactive_chat(): + """ + Interactive CLI chat with the agent + """ + config = Config() + + # Configure Anthropic SDK to point to LiteLLM gateway + litellm_base_url = setup_litellm_env(config) + + # Fetch available models from proxy + available_models = await fetch_available_models( + litellm_base_url, config.LITELLM_API_KEY + ) + + current_model = config.LITELLM_MODEL + + print_header(litellm_base_url, current_model) + + while True: + # Configure agent options for each conversation + options = ClaudeAgentOptions( + system_prompt="You are a helpful AI assistant. Be concise, accurate, and friendly.", + model=current_model, + max_turns=50, + ) + + # Create agent client + async with ClaudeSDKClient(options=options) as client: + conversation_active = True + + while conversation_active: + # Get user input + try: + user_input = input("\nšŸ‘¤ You: ").strip() + except (EOFError, KeyboardInterrupt): + print("\n\nšŸ‘‹ Goodbye!") + return + + # Handle commands + if user_input.lower() in ["quit", "exit"]: + print("\nšŸ‘‹ Goodbye!") + return + + if user_input.lower() == "clear": + print("\nšŸ”„ Starting new conversation...\n") + conversation_active = False + continue + + if user_input.lower() == "models": + handle_model_list(available_models, current_model) + continue + + if user_input.lower() == "model": + new_model, should_restart = handle_model_switch( + available_models, current_model + ) + if should_restart: + current_model = new_model + conversation_active = False + continue + + if not user_input: + continue + + # Stream response from agent + await stream_response(client, user_input) + + +def main(): + """Run interactive chat""" + try: + asyncio.run(interactive_chat()) + except KeyboardInterrupt: + print("\n\nšŸ‘‹ Goodbye!") + + +if __name__ == "__main__": + main() diff --git a/cookbook/anthropic_agent_sdk/requirements.txt b/cookbook/anthropic_agent_sdk/requirements.txt new file mode 100644 index 000000000..1e810bb7d --- /dev/null +++ b/cookbook/anthropic_agent_sdk/requirements.txt @@ -0,0 +1,2 @@ +claude-agent-sdk +httpx>=0.27.0 diff --git a/cookbook/benchmark/benchmark.py b/cookbook/benchmark/benchmark.py new file mode 100644 index 000000000..b38d185a1 --- /dev/null +++ b/cookbook/benchmark/benchmark.py @@ -0,0 +1,90 @@ +from litellm import completion, completion_cost +import time +import click +from tqdm import tqdm +from tabulate import tabulate +from termcolor import colored +import os + + +# Define the list of models to benchmark +# select any LLM listed here: https://docs.litellm.ai/docs/providers +models = ["gpt-3.5-turbo", "claude-2"] + +# Enter LLM API keys +# https://docs.litellm.ai/docs/providers +os.environ["OPENAI_API_KEY"] = "" +os.environ["ANTHROPIC_API_KEY"] = "" + +# List of questions to benchmark (replace with your questions) +questions = ["When will BerriAI IPO?", "When will LiteLLM hit $100M ARR?"] + +# Enter your system prompt here +system_prompt = """ +You are LiteLLMs helpful assistant +""" + + +@click.command() +@click.option( + "--system-prompt", + default="You are a helpful assistant that can answer questions.", + help="System prompt for the conversation.", +) +def main(system_prompt): + for question in questions: + data = [] # Data for the current question + + with tqdm(total=len(models)) as pbar: + for model in models: + colored_description = colored( + f"Running question: {question} for model: {model}", "green" + ) + pbar.set_description(colored_description) + start_time = time.time() + + response = completion( + model=model, + max_tokens=500, + messages=[ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": question}, + ], + ) + + end = time.time() + total_time = end - start_time + cost = completion_cost(completion_response=response) + raw_response = response["choices"][0]["message"]["content"] + + data.append( + { + "Model": colored(model, "light_blue"), + "Response": raw_response, # Colorize the response + "ResponseTime": colored(f"{total_time:.2f} seconds", "red"), + "Cost": colored(f"${cost:.6f}", "green"), # Colorize the cost + } + ) + + pbar.update(1) + + # Separate headers from the data + headers = ["Model", "Response", "Response Time (seconds)", "Cost ($)"] + colwidths = [15, 80, 15, 10] + + # Create a nicely formatted table for the current question + table = tabulate( + [list(d.values()) for d in data], + headers, + tablefmt="grid", + maxcolwidths=colwidths, + ) + + # Print the table for the current question + colored_question = colored(question, "green") + click.echo(f"\nBenchmark Results for '{colored_question}':") + click.echo(table) # Display the formatted table + + +if __name__ == "__main__": + main() diff --git a/cookbook/benchmark/eval_suites_mlflow_autoevals/auto_evals.py b/cookbook/benchmark/eval_suites_mlflow_autoevals/auto_evals.py new file mode 100644 index 000000000..daa38dda5 --- /dev/null +++ b/cookbook/benchmark/eval_suites_mlflow_autoevals/auto_evals.py @@ -0,0 +1,30 @@ +from dotenv import load_dotenv + +load_dotenv() + +import litellm + +from autoevals.llm import * + +################### + +# litellm completion call +question = "which country has the highest population" +response = litellm.completion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": question}], +) +print(response) +# use the auto eval Factuality() evaluator + +print("calling evaluator") +evaluator = Factuality() +result = evaluator( + output=response.choices[0]["message"][ + "content" + ], # response from litellm.completion() + expected="India", # expected output + input=question, # question passed to litellm.completion +) + +print(result) diff --git a/cookbook/benchmark/readme.md b/cookbook/benchmark/readme.md new file mode 100644 index 000000000..afa59aa91 --- /dev/null +++ b/cookbook/benchmark/readme.md @@ -0,0 +1,181 @@ +

+ LLM-Bench +

+

+

Benchmark LLMs response, cost and response time

+

LLM vs Cost per input + output token ($)

+ Screenshot 2023-11-13 at 2 51 06 PM +

+ + Bar Graph Excel Sheet here + + +| Model | Provider | Cost per input + output token ($)| +| --- | --- | --- | +| openrouter/mistralai/mistral-7b-instruct | openrouter | 0.0 | +| ollama/llama2 | ollama | 0.0 | +| ollama/llama2:13b | ollama | 0.0 | +| ollama/llama2:70b | ollama | 0.0 | +| ollama/llama2-uncensored | ollama | 0.0 | +| ollama/mistral | ollama | 0.0 | +| ollama/codellama | ollama | 0.0 | +| ollama/orca-mini | ollama | 0.0 | +| ollama/vicuna | ollama | 0.0 | +| perplexity/codellama-34b-instruct | perplexity | 0.0 | +| perplexity/llama-2-13b-chat | perplexity | 0.0 | +| perplexity/llama-2-70b-chat | perplexity | 0.0 | +| perplexity/mistral-7b-instruct | perplexity | 0.0 | +| perplexity/replit-code-v1.5-3b | perplexity | 0.0 | +| text-bison | vertex_ai-text-models | 0.00000025 | +| text-bison@001 | vertex_ai-text-models | 0.00000025 | +| chat-bison | vertex_ai-chat-models | 0.00000025 | +| chat-bison@001 | vertex_ai-chat-models | 0.00000025 | +| chat-bison-32k | vertex_ai-chat-models | 0.00000025 | +| code-bison | vertex_ai-code-text-models | 0.00000025 | +| code-bison@001 | vertex_ai-code-text-models | 0.00000025 | +| code-gecko@001 | vertex_ai-chat-models | 0.00000025 | +| code-gecko@latest | vertex_ai-chat-models | 0.00000025 | +| codechat-bison | vertex_ai-code-chat-models | 0.00000025 | +| codechat-bison@001 | vertex_ai-code-chat-models | 0.00000025 | +| codechat-bison-32k | vertex_ai-code-chat-models | 0.00000025 | +| palm/chat-bison | palm | 0.00000025 | +| palm/chat-bison-001 | palm | 0.00000025 | +| palm/text-bison | palm | 0.00000025 | +| palm/text-bison-001 | palm | 0.00000025 | +| palm/text-bison-safety-off | palm | 0.00000025 | +| palm/text-bison-safety-recitation-off | palm | 0.00000025 | +| anyscale/meta-llama/Llama-2-7b-chat-hf | anyscale | 0.0000003 | +| anyscale/mistralai/Mistral-7B-Instruct-v0.1 | anyscale | 0.0000003 | +| openrouter/meta-llama/llama-2-13b-chat | openrouter | 0.0000004 | +| openrouter/nousresearch/nous-hermes-llama2-13b | openrouter | 0.0000004 | +| deepinfra/meta-llama/Llama-2-7b-chat-hf | deepinfra | 0.0000004 | +| deepinfra/mistralai/Mistral-7B-Instruct-v0.1 | deepinfra | 0.0000004 | +| anyscale/meta-llama/Llama-2-13b-chat-hf | anyscale | 0.0000005 | +| amazon.titan-text-lite-v1 | bedrock | 0.0000007 | +| deepinfra/meta-llama/Llama-2-13b-chat-hf | deepinfra | 0.0000007 | +| text-babbage-001 | text-completion-openai | 0.0000008 | +| text-ada-001 | text-completion-openai | 0.0000008 | +| babbage-002 | text-completion-openai | 0.0000008 | +| openrouter/google/palm-2-chat-bison | openrouter | 0.000001 | +| openrouter/google/palm-2-codechat-bison | openrouter | 0.000001 | +| openrouter/meta-llama/codellama-34b-instruct | openrouter | 0.000001 | +| deepinfra/codellama/CodeLlama-34b-Instruct-hf | deepinfra | 0.0000012 | +| deepinfra/meta-llama/Llama-2-70b-chat-hf | deepinfra | 0.0000016499999999999999 | +| deepinfra/jondurbin/airoboros-l2-70b-gpt4-1.4.1 | deepinfra | 0.0000016499999999999999 | +| anyscale/meta-llama/Llama-2-70b-chat-hf | anyscale | 0.000002 | +| anyscale/codellama/CodeLlama-34b-Instruct-hf | anyscale | 0.000002 | +| gpt-3.5-turbo-1106 | openai | 0.000003 | +| openrouter/meta-llama/llama-2-70b-chat | openrouter | 0.000003 | +| amazon.titan-text-express-v1 | bedrock | 0.000003 | +| gpt-3.5-turbo | openai | 0.0000035 | +| gpt-3.5-turbo-0301 | openai | 0.0000035 | +| gpt-3.5-turbo-0613 | openai | 0.0000035 | +| gpt-3.5-turbo-instruct | text-completion-openai | 0.0000035 | +| openrouter/openai/gpt-3.5-turbo | openrouter | 0.0000035 | +| cohere.command-text-v14 | bedrock | 0.0000035 | +| gpt-3.5-turbo-0613 | openai | 0.0000035 | +| claude-instant-1 | anthropic | 0.00000714 | +| claude-instant-1.2 | anthropic | 0.00000714 | +| openrouter/anthropic/claude-instant-v1 | openrouter | 0.00000714 | +| anthropic.claude-instant-v1 | bedrock | 0.00000714 | +| openrouter/mancer/weaver | openrouter | 0.00001125 | +| j2-mid | ai21 | 0.00002 | +| ai21.j2-mid-v1 | bedrock | 0.000025 | +| openrouter/jondurbin/airoboros-l2-70b-2.1 | openrouter | 0.00002775 | +| command-nightly | cohere | 0.00003 | +| command | cohere | 0.00003 | +| command-light | cohere | 0.00003 | +| command-medium-beta | cohere | 0.00003 | +| command-xlarge-beta | cohere | 0.00003 | +| command-r-plus| cohere | 0.000018 | +| j2-ultra | ai21 | 0.00003 | +| ai21.j2-ultra-v1 | bedrock | 0.0000376 | +| gpt-4-1106-preview | openai | 0.00004 | +| gpt-4-vision-preview | openai | 0.00004 | +| claude-2 | anthropic | 0.0000437 | +| openrouter/anthropic/claude-2 | openrouter | 0.0000437 | +| anthropic.claude-v1 | bedrock | 0.0000437 | +| anthropic.claude-v2 | bedrock | 0.0000437 | +| gpt-4 | openai | 0.00009 | +| gpt-4-0314 | openai | 0.00009 | +| gpt-4-0613 | openai | 0.00009 | +| openrouter/openai/gpt-4 | openrouter | 0.00009 | +| gpt-4-32k | openai | 0.00018 | +| gpt-4-32k-0314 | openai | 0.00018 | +| gpt-4-32k-0613 | openai | 0.00018 | + + + +## Setup: +``` +git clone https://github.com/BerriAI/litellm +``` +cd to `benchmark` dir +``` +cd litellm/cookbook/benchmark +``` + +### Install Dependencies +``` +pip install litellm click tqdm tabulate termcolor +``` + +### Configuration +In `benchmark/benchmark.py` select your LLMs, LLM API Key and questions + +Supported LLMs: https://docs.litellm.ai/docs/providers + +```python +# Define the list of models to benchmark +models = ['gpt-3.5-turbo', 'togethercomputer/llama-2-70b-chat', 'claude-2'] + +# Enter LLM API keys +os.environ['OPENAI_API_KEY'] = "" +os.environ['ANTHROPIC_API_KEY'] = "" +os.environ['TOGETHERAI_API_KEY'] = "" + +# List of questions to benchmark (replace with your questions) +questions = [ + "When will BerriAI IPO?", + "When will LiteLLM hit $100M ARR?" +] + +``` + +## Run LLM-Bench +``` +python3 benchmark.py +``` + +## Expected Output +``` +Running question: When will BerriAI IPO? for model: claude-2: 100%|ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ| 3/3 [00:13<00:00, 4.41s/it] + +Benchmark Results for 'When will BerriAI IPO?': ++-----------------+----------------------------------------------------------------------------------+---------------------------+------------+ +| Model | Response | Response Time (seconds) | Cost ($) | ++=================+==================================================================================+===========================+============+ +| gpt-3.5-turbo | As an AI language model, I cannot provide up-to-date information or predict | 1.55 seconds | $0.000122 | +| | future events. It is best to consult a reliable financial source or contact | | | +| | BerriAI directly for information regarding their IPO plans. | | | ++-----------------+----------------------------------------------------------------------------------+---------------------------+------------+ +| togethercompute | I'm not able to provide information about future IPO plans or dates for BerriAI | 8.52 seconds | $0.000531 | +| r/llama-2-70b-c | or any other company. IPO (Initial Public Offering) plans and timelines are | | | +| hat | typically kept private by companies until they are ready to make a public | | | +| | announcement. It's important to note that IPO plans can change and are subject | | | +| | to various factors, such as market conditions, financial performance, and | | | +| | regulatory approvals. Therefore, it's difficult to predict with certainty when | | | +| | BerriAI or any other company will go public. If you're interested in staying | | | +| | up-to-date with BerriAI's latest news and developments, you may want to follow | | | +| | their official social media accounts, subscribe to their newsletter, or visit | | | +| | their website periodically for updates. | | | ++-----------------+----------------------------------------------------------------------------------+---------------------------+------------+ +| claude-2 | I do not have any information about when or if BerriAI will have an initial | 3.17 seconds | $0.002084 | +| | public offering (IPO). As an AI assistant created by Anthropic to be helpful, | | | +| | harmless, and honest, I do not have insider knowledge about Anthropic's business | | | +| | plans or strategies. | | | ++-----------------+----------------------------------------------------------------------------------+---------------------------+------------+ +``` + +## Support +**šŸ¤ Schedule a 1-on-1 Session:** Book a [1-on-1 session](https://enterprise.litellm.ai/demo) with Krrish and Ishaan, the founders, to discuss any issues, provide feedback, or explore how we can improve LiteLLM for you. diff --git a/cookbook/codellama-server/README.MD b/cookbook/codellama-server/README.MD new file mode 100644 index 000000000..82a7e62f4 --- /dev/null +++ b/cookbook/codellama-server/README.MD @@ -0,0 +1,153 @@ +# CodeLlama Server: Streaming, Caching, Model Fallbacks (OpenAI + Anthropic), Prompt-tracking + +Works with: Anthropic, Huggingface, Cohere, TogetherAI, Azure, OpenAI, etc. + +[![PyPI Version](https://img.shields.io/pypi/v/litellm.svg)](https://pypi.org/project/litellm/) +[![PyPI Version](https://img.shields.io/badge/stable%20version-v0.1.345-blue?color=green&link=https://pypi.org/project/litellm/0.1.1/)](https://pypi.org/project/litellm/0.1.1/) +![Downloads](https://img.shields.io/pypi/dm/litellm) + +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/HuDPw-?referralCode=jch2ME) + +**LIVE DEMO** - https://litellm.ai/playground + +## What does CodeLlama Server do + +- Uses Together AI's CodeLlama to answer coding questions, with GPT-4 + Claude-2 as backups (you can easily switch this to any model from Huggingface, Replicate, Cohere, AI21, Azure, OpenAI, etc.) +- Sets default system prompt for guardrails `system_prompt = "Only respond to questions about code. Say 'I don't know' to anything outside of that."` +- Integrates with Promptlayer for model + prompt tracking +- Example output + +Code Output + +- **Consistent Input/Output** Format + - Call all models using the OpenAI format - `completion(model, messages)` + - Text responses will always be available at `['choices'][0]['message']['content']` + - Stream responses will always be available at `['choices'][0]['delta']['content']` +- **Error Handling** Using Model Fallbacks (if `CodeLlama` fails, try `GPT-4`) with cooldowns, and retries +- **Prompt Logging** - Log successful completions to promptlayer for testing + iterating on your prompts in production! (Learn more: https://litellm.readthedocs.io/en/latest/advanced/ + + **Example: Logs sent to PromptLayer** + + Prompt Logging + + +- **Token Usage & Spend** - Track Input + Completion tokens used + Spend/model - https://docs.litellm.ai/docs/token_usage +- **Caching** - Provides in-memory cache + GPT-Cache integration for more advanced usage - https://docs.litellm.ai/docs/caching/gpt_cache + +- **Streaming & Async Support** - Return generators to stream text responses - TEST IT šŸ‘‰ https://litellm.ai/ + +## API Endpoints + +### `/chat/completions` (POST) + +This endpoint is used to generate chat completions for 50+ support LLM API Models. Use llama2, GPT-4, Claude2 etc + +#### Input + +This API endpoint accepts all inputs in raw JSON and expects the following inputs + +- `prompt` (string, required): The user's coding related question +- Additional Optional parameters: `temperature`, `functions`, `function_call`, `top_p`, `n`, `stream`. See the full list of supported inputs here: https://litellm.readthedocs.io/en/latest/input/ + +#### Example JSON body + +For claude-2 + +```json +{ + "prompt": "write me a function to print hello world" +} +``` + +### Making an API request to the Code-Gen Server + +```python +import requests +import json + +url = "localhost:4000/chat/completions" + +payload = json.dumps({ + "prompt": "write me a function to print hello world" +}) +headers = { + 'Content-Type': 'application/json' +} + +response = requests.request("POST", url, headers=headers, data=payload) + +print(response.text) + +``` + +### Output [Response Format] + +Responses from the server are given in the following format. +All responses from the server are returned in the following format (for all LLM models). More info on output here: https://litellm.readthedocs.io/en/latest/output/ + +```json +{ + "choices": [ + { + "finish_reason": "stop", + "index": 0, + "message": { + "content": ".\n\n```\ndef print_hello_world():\n print(\"hello world\")\n", + "role": "assistant" + } + } + ], + "created": 1693279694.6474009, + "model": "togethercomputer/CodeLlama-34b-Instruct", + "usage": { + "completion_tokens": 14, + "prompt_tokens": 28, + "total_tokens": 42 + } +} +``` + +## Installation & Usage + +### Running Locally + +1. Clone liteLLM repository to your local machine: + ``` + git clone https://github.com/BerriAI/litellm-CodeLlama-server + ``` +2. Install the required dependencies using pip + ``` + pip install requirements.txt + ``` +3. Set your LLM API keys + ``` + os.environ['OPENAI_API_KEY]` = "YOUR_API_KEY" + or + set OPENAI_API_KEY in your .env file + ``` +4. Run the server: + ``` + python main.py + ``` + +## Deploying + +1. Quick Start: Deploy on Railway + + [![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/HuDPw-?referralCode=jch2ME) + +2. `GCP`, `AWS`, `Azure` + This project includes a `Dockerfile` allowing you to build and deploy a Docker Project on your providers + +# Support / Talk with founders + +- [Our calendar šŸ‘‹](https://calendly.com/d/4mp-gd3-k5k/berriai-1-1-onboarding-litellm-hosted-version) +- [Community Discord šŸ’­](https://discord.gg/wuPM9dRgDw) +- Our emails āœ‰ļø ishaan@berri.ai / krrish@berri.ai + +## Roadmap + +- [ ] Implement user-based rate-limiting +- [ ] Spending controls per project - expose key creation endpoint +- [ ] Need to store a keys db -> mapping created keys to their alias (i.e. project name) +- [ ] Easily add new models as backups / as the entry-point (add this to the available model list) diff --git a/cookbook/codellama-server/imgs/code-output.png b/cookbook/codellama-server/imgs/code-output.png new file mode 100644 index 0000000000000000000000000000000000000000..67e298bd3be49e64f5cd199a6967e910468937d2 GIT binary patch literal 238123 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

3Tet1VpTUvf2R1t%L`VH#Ik2;I`5= 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

HZCU-(p=v}?KFxQWRr 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 Xbe=tt>eab;D3ZtOI%*gd>o@-c!VQ7@ literal 0 HcmV?d00001 diff --git a/cookbook/codellama-server/imgs/promptlayer_logging.png b/cookbook/codellama-server/imgs/promptlayer_logging.png new file mode 100644 index 0000000000000000000000000000000000000000..26b046ac4484b89a22fe66a6006c9fa1f3dffc99 GIT binary patch literal 300105 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

N6<-(|G$cpP`L%yQeVNYC0Y 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%0AdBJQTBoU+y}{O zDgK-r$q$?cw5HoE&o&4y3%|yZwuK$%;yH`?2?L>FlB)fijO!>4{$t{wZ?6-((gfF-4?*jeh^$&~?glf`aG3UF9z$&gw&!d z9!W*-W<*>8i^n}mMuH2#(+IFtd7an_{3em$kSn<)q#i!Qa};q8B!+Re4NMLG$1bx# zfhhG%?fzt1T)EbS67n;(v@)`2Lud`_ZsSoCXng0oeJ%fQ7hDQhGABb$tON*50qv)^ z+eLm6CrHcwYNNYS5DA!Y$fZzyx_ozxsy~1X>L7cAb1uee_Q_c+{v6T3V=_AeNXb%3 zbFZoY4*Fi=s3NICt<;8~v6N|u9!X8e*fX}^oNv&g2M4YShylBb#gNbA{h~$uo6Ej` zVfNhC2=V zA)@P8OF}^4hi&B_z^4!lpr-bzGy<#{FXrThEpmBdI(~5km*IcG5k3kd;mD^&%{>Zf3+C4QipiL|8`EMcsp;wS`3%;01qb^cPtp; z9Am&AH+)}FNgF#hS>AVkZncR!k`=MO5S+#WcoutpBor`zVHpKFe3`XUKoFOnqA>{k zA~k-gzZks1GW?S;L3{#sfBM_^pP4YmdmqsFceBp1=@h;DpItUK{se*so1I6dylc9m zUt3=T?v|MQ`1dGx3f!~>aqK{GltzM$OmUOllk(h`&OPeFbjJN3?;{6b$3OS)-@1@A zGPge2?p|S7gkHlm8v-bB`!HqY*^gjJR_A)%(ug3MhfpgIwplL#dTdsxe^vWB=%~#x#Z5+p|KKT5bV*x-*m6yf*_X75EN<&S%P2b-(c3g=7thU=iaSOh`=jaGfVY?+B z3O#!Gxhul}bi54;O?nt@zLD1r(!6oiHOK_lg8N4Wrs439= zvN3| zqJvz1_2jHs#W_&{j{&=g>Got9bBdCzL7)xZj7t<+u?I2~wRks~a%;!O%v{PB@EzHrb z6D#AGPId-L4w`$*rEPy?z#?822t@EnJ*+guMqeoB?E;wBS<6ra@Xj}*;^!%0G~wd-3%we z!H>k9)1&uCCx^1i*;XNQ{Z_x+j(-gL8?wHGLfnutyNu7UxQtQWj*4uh#^}pbjn00g zD!ER3di1~Ye{Sg{0$?ahJJ4A9q6R3EauO^sIq zh;|)fpy|Jk_gi(RMgoSUT=hto2MbgD8c1=r9T?y7fD9JvNQ$1D!@oTGc!3{l&x;QI z4Yr>j1sFF^8o(R>L*)NYM2_N@`&U^yI^G?ph$p3lZ}T~H29G(A7!V(nEmf2>>WHae zQgNn9(abX6K}&dz2)F?SYw0|@|26)wo`An1jky!_imYKFcz473Bt{w*#t4QssdH7H z*nK?8a}ZrYjVHbkMu2qjK93Sc*8_>2{sd$>Z($BNmRRjy`xX9KFfutJz!B6hVX|37 z9!WjnAOAMvpTY){aqPuY&ED8@_%}+z1*=NmI2k_2tSf59Nc(VAen< z+r>}bsYUbcl_!CfoL?|6Hc2lb?DNKykiATmDKELjZR7$PhN|6pxt)>zEL(PMD>&jI zIGo09yV!EX4{!n0%V{s76a#KHb`J%Jru<=q+NXf(A0DGUNlS2}4l3TPWTG)Fn4Uq& z?$(5M81+WGVZUfjX1|bqcbhB|^em9=2Brr^Jbk^`I2oga6k`}#_|ofcU@k6=Sn<4ldH6Tu~U-twmk z7ojz;(e30P@1Q-yLEfu(PVj+3yhjINyN3$eM_&pjJij-8x84fIZ&HtE%P_#j3L;YO zXB6SZ*8s%&Ijx*r?7}{4tz4m<@N8Ae!H%*A8b1bq>8~*G#xS8ggFyP4<)XlbM(C>s zlYV%R51N1b@ycDlm~eeC7oGhlB?XuPs1K5c^9RNwz#r?`)KigTr-pto;oZnu{v58K zuC{GJ!1|`-VhcVP-(7{-u^jTnGq?fdwCVB`B{@Qs z95!##)4wwy12eGfq8=$rx2*OXwxCHnIg&d$SX`|(yUu)}uZBS`iU1D$f<7}Fzdg)M zBj%e*?hM^5P-ShEd53l7AFc)*P287Ymsa3qDnwC%FviN|roUgl54#6};2WW+xi4l< z4dz&sPrRJb)r(d^&WErtEy~4d)Zu@Kkt6c0LJsf}SN+uA*zoy{55NVxYE{G5p8!_Q zY}o`04gO{Zdf+BwF?Jxdw&9S0CSz3l;GPTAJZyPfxRAi-4OSD=gVK{Mqt1QgkXZ#d zyfm)r*SP9!Qx}85|AFXHnM8u_AF557Zl~(sXud35#AKHc5+q`r@{Kn-lQyp-fU*WW zl$|I-kEA6lQhWI3{bg=or7gj{f0ud%84v_Yjgbn6e-&RCP(u5)@;7DW$=5Tgtk_dh zNFyKR@h)0!@Dq1qjYFOj(~2*!#d`iXEcOE?Xy@^tAcYO#9$9eB$NVc}6#D2i_b=x6 zsZWrIRI1cJT*n zke^2e+{o|gUX!A?)sMemA^@tsLlDa3TH0M3^AwSx3?xsT;NOz2gSmp1*QP|*!7!pC z(&+F%{ezo6pnzfMtDoKn!`vn%yeL?A85!%+yM8#h5RKIw^9;9GnJXR_?nur`wg=&!C zZ%N++6vGzg(JKwTN2VL`cpuIf|CsHR4_HbuK`Tey$cz7YmlNhhl=jYjB_R}W1C|H7 z-e3RW9?%dzxAZR?cvxyLbh_1 zSO6$xlNi9~5`YNyd0mP7C6H5uE2CE*XB!Vda23R3TY?7n{;KhOu5eeQaPJa9K>cDc#Nwb-#l`Z zEjV=BSwYb7Sva2D6Bu~+9H0D4EP2ecw{9U<69oBiTuD>9GLVt)z3L*tznUB`dz%tH zHrT@hpYRT)&(st zW*=L^OTQ`GwPVp~)JE?5G>eOW+(av7rN7{sJp2Gc1RJTRExv2HlJxY;A?9-{36b?I|sonbWZ~>MPc5)vT6{a zt!><*eC{v2@C*9Z?!-uT4wIy1k*o#xuHtY1`HuSo*nOT2l}OiLMMq(dXvICd0%<+z z7amio80yKcTDDEdWd7W3lmyilc2X%ej!IW6Z!<-^E?&IYk>g0zDHG`-iG(^8W~@N@ zBx3nncOzLe@s)@3^XaF+VZ~c%*;P1Ow@KXJ6Nj zT;UnU!j#i#^SI!CC{OGitQ6E|?{ zZaaW`=dZ}_d=^V|t$BkUC~V);{32JsJ)CaWUILAzyjV9=O(o~`AXyiC5n90&NZtFp zA^B8yN?6(Sc9*z#6Dv7~sV&BHR5oULh-zHZ|56eDWEJ}j3fXCF=!?ctun-%X?q(yP z-*PRWAWf`~L^^*lAbhPBmxr**)pHJ15FpCOH)P%ZT;=$E9d^6nk?OZgdxLBQU0*w6 z8lZuoMXC4%xg=dVg9y95^E1?ETCrw|$>am_r5bXBg{#){T`5r`gE{X8X}|)S+o;## z4^Or>+pX61`on89KCvsNDxO%pCbw5^`NOE^smUh#yb(7|H)UHSX+d#`hCZ||#-2)OAesjd0(yMQn7D(7@xz_ygT5-?a zlj21D#hOcpnsF^Mm{?PuSLG%Mb$iQ}tB_DQHVOrD*ssK}(!ux@m254~xYfz1XG_C+ zphO`{JUe!_^!;;iJ0qOe&UlL+!Cfl}T-@@>V$K z(>APgQ$dhG)x|Nw!f_SVOgcBo60?$tOaX7-%TyZCr#@jico z;FJ9qz#i{X=neS(ZqnbUZ>q0Yge=0+D?-5rRC@LR$M6@KtjfThst-=@Jig>=C-vfu zFR7oi*g{Y0t=nw!6OG(!lU&Yv^({(zeIxrhZl|m}#+yzx+ta$Wa-P#8*6o&krN6*B zcP&3`swqb=GQ)17QTdj({*d)#f>i>pz)}_Izmpc<8TBTU!2eca94&c57Rj-Uq5QPlkKW^t#x0%NSZ3)gIs`6B10gS6JObqrr+mqk2_UhOF@)`n+ z6FAiE%|L|aEJVePoqh0IB>*`Gs^mX9#xm~B)AAB#0YV;jhfg2yc!b2lO5{UnKi{{~ z+^u&z*%yJjtz*w`ckt#q@m4~u#z$#d%1Uqic%3;iJ>;I`fz%$VlqhM%atylWcO}nr zZ7hFTjjt8D`#nN@Mr^FiF><-({H*@Wl#LHR@N3ZW$2l1BP51XI4h9qNjenM9Kf{aP zYxwi_7bHWu>&rn3g+Sq_+WR@dq30A_2>UZ51_5x*6Q`}@NY(gY_vOK5zWFuY#enbj zqld4kH4Z}6G*58CkDGb|4xP+QcPd#n`Zjv4thbvsmf~gf@A4o(*o}LJu+h4sHtOaX z6I9z>^+(sVJmWj@w!6#>z`5VQNpc%P=j$j_e?e~;=%oDu9ih@h=bfdG4@XNQgz#Ej zwmxNBjaW7eM$|Z|e|=sd;bNCMSg2NP)wMjnQO&+L9(6=c6u6m9cfoRbt-xv}GTqAB zq$Vgda)RHVZ7%WCSKs73V&smPTa{>+TBL_b*t!9YQu({)cZJa;1tiQyxEsmRc*yyV$B& zn*xybM-u_S+OKLbn9fP(?md5VgF*M{5a@T3+duAlC~00??47P!*tW!O-AA3Gy4%-s zL%eX*pP>u;JHkb@5Cf*(r>;V>g(h$h`Dec?xBlpS_Z|#j>*4GY4Cb$uT34@qoSc65 z#VC%3i+M`MsB3QLdRQ_M-!`!9BwS8Na?SoALDcc*JVO#H#mtZ(2)F3icwQ6ZvpfJO zR(i!vGoLQ|Zv`B#7#YpL=uv%_R)uu8VBWB;8<*^~4RTy4&(r zVRGdQlCq##=`N7XN}=-R%~Huu?q=8#EzM`vu)$n|a0OuWgtFT%3<0j-vY87w8sDDQ zTOBL6YNAN`UN0GuVAvU}g=exlC34?RxeR{m@tNELK8P;>D3s#j7Mp?Ro@6-v1O#4x z&*|wcfI<{jM1gAPl^kR*Pmgbci-g1(n}Re{nrD2c+CqI3o^@_c`vZU+61>#Td zPCDuegn+@Q`bA?9nLq7kqn*foE4K!yeg(j*joOI{D}}*k$+h{2E7$Z!59|}1vt0FU z$VZK~H;}A;Al0>;tbFUPDKCB6s+tHG^7^K=prS^SrYwPX$#?)7t*jcqw?Jv1w z(9Rge))HU6Md#tx)MZsgaaWT(vWpP86wUBiW7e(kBWkLSs5TUL!gb{xKt%OsA`!pu zt<0&--srdz&yBigXk_D`>c#;{k0a{PB;q+e%2jjO?#+2wC&sojpfj4(Xfx)|z`%vV zaRKrm6RQIgC4StaNFIoj+A|7}#`lMYkw6L6Dkp7(|LkPr6M#sn7T9_4Rb^HJ!+SdA zi+>ZnGX%F8!6*{D2Q=8$Ded0sXQepa3kweR_= za4c;9Sx04bSoUCdS!-q=?QA5t;fleFzyHhO;d(0)5nDQQ?dF33T#K@*4_#Ph&y9`` zwq>*Vhsd?@*zJPJq96R^7J9bn8hoqo-2lo(pE5$oqagL=&LksU!&1^fh3m1OFt6gI zUiruM^@Yf_X1X`i>jXqoA>moij&X?1*&Vl;fj7M))8VgJ`(up>~EssEAux`;c3cDc(d#Sxi zf1W820}Z}%tumyn@2QjlRGGJpCri2`Cg^UvKhFuV=F4Kut$c@dLc|Yc0ngr?!R|R8 z!iV{$5%^=k!YM}m4_*<#E6H(0pmOJZr*r-Q2L3F#$-Ieem%SΞW=o#_+!b$z{Zx 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 SDQXk^Co8RRCPh;3?*9WRiFH;0 literal 0 HcmV?d00001 diff --git a/cookbook/codellama-server/main.py b/cookbook/codellama-server/main.py new file mode 100644 index 000000000..d05d67523 --- /dev/null +++ b/cookbook/codellama-server/main.py @@ -0,0 +1,102 @@ +import traceback +from flask import Flask, request, Response +from flask_cors import CORS +import litellm +from util import handle_error +from litellm import completion +import os +import dotenv +import time +import json + +dotenv.load_dotenv() + +# TODO: set your keys in .env or here: +# os.environ["OPENAI_API_KEY"] = "" # set your openai key here +# os.environ["ANTHROPIC_API_KEY"] = "" # set your anthropic key here +# os.environ["TOGETHER_AI_API_KEY"] = "" # set your together ai key here +# see supported models / keys here: https://litellm.readthedocs.io/en/latest/supported/ +######### ENVIRONMENT VARIABLES ########## +verbose = True + +# litellm.caching_with_models = True # CACHING: caching_with_models Keys in the cache are messages + model. - to learn more: https://docs.litellm.ai/docs/caching/ +######### PROMPT LOGGING ########## +os.environ["PROMPTLAYER_API_KEY"] = ( + "" # set your promptlayer key here - https://promptlayer.com/ +) + +# set callbacks +litellm.success_callback = ["promptlayer"] +############ HELPER FUNCTIONS ################################### + + +def print_verbose(print_statement): + if verbose: + print(print_statement) + + +app = Flask(__name__) +CORS(app) + + +@app.route("/") +def index(): + return "received!", 200 + + +def data_generator(response): + for chunk in response: + yield f"data: {json.dumps(chunk)}\n\n" + + +@app.route("/chat/completions", methods=["POST"]) +def api_completion(): + data = request.json + start_time = time.time() + if data.get("stream") == "True": + data["stream"] = True # convert to boolean + try: + if "prompt" not in data: + raise ValueError("data needs to have prompt") + data["model"] = ( + "togethercomputer/CodeLlama-34b-Instruct" # by default use Together AI's CodeLlama model - https://api.together.xyz/playground/chat?model=togethercomputer%2FCodeLlama-34b-Instruct + ) + # COMPLETION CALL + system_prompt = "Only respond to questions about code. Say 'I don't know' to anything outside of that." + messages = [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": data.pop("prompt")}, + ] + data["messages"] = messages + print(f"data: {data}") + response = completion(**data) + ## LOG SUCCESS + end_time = time.time() + if ( + "stream" in data and data["stream"] == True + ): # use generate_responses to stream responses + return Response(data_generator(response), mimetype="text/event-stream") + except Exception: + # call handle_error function + print_verbose(f"Got Error api_completion(): {traceback.format_exc()}") + ## LOG FAILURE + end_time = time.time() + traceback_exception = traceback.format_exc() + return handle_error(data=data) + return response + + +@app.route("/get_models", methods=["POST"]) +def get_models(): + try: + return litellm.model_list + except Exception as e: + traceback.print_exc() + response = {"error": str(e)} + return response, 200 + + +if __name__ == "__main__": + from waitress import serve + + serve(app, host="0.0.0.0", port=4000, threads=500) diff --git a/cookbook/community-resources/get_hf_models.py b/cookbook/community-resources/get_hf_models.py new file mode 100644 index 000000000..8c75a2412 --- /dev/null +++ b/cookbook/community-resources/get_hf_models.py @@ -0,0 +1,89 @@ +import requests + + +def get_next_url(response): + """ + Function to get 'next' url from Link header + :param response: response from requests + :return: next url or None + """ + if "link" not in response.headers: + return None + headers = response.headers + + next_url = headers["Link"] + print(next_url) + start_index = next_url.find("<") + end_index = next_url.find(">") + + return next_url[1:end_index] + + +def get_models(url): + """ + Function to retrieve all models from paginated endpoint + :param url: base url to make GET request + :return: list of all models + """ + models = [] + while url: + response = requests.get(url) + if response.status_code != 200: + print(f"Failed to retrieve data. Status code: {response.status_code}") + return models + payload = response.json() + url = get_next_url(response) + models.extend(payload) + return models + + +def get_cleaned_models(models): + """ + Function to clean retrieved models + :param models: list of retrieved models + :return: list of cleaned models + """ + cleaned_models = [] + for model in models: + cleaned_models.append(model["id"]) + return cleaned_models + + +# Get text-generation models +url = "https://huggingface.co/api/models?filter=text-generation-inference" +text_generation_models = get_models(url) +cleaned_text_generation_models = get_cleaned_models(text_generation_models) + +print(cleaned_text_generation_models) + + +# Get conversational models +url = "https://huggingface.co/api/models?filter=conversational" +conversational_models = get_models(url) +cleaned_conversational_models = get_cleaned_models(conversational_models) + +print(cleaned_conversational_models) + + +def write_to_txt(cleaned_models, filename): + """ + Function to write the contents of a list to a text file + :param cleaned_models: list of cleaned models + :param filename: name of the text file + """ + with open(filename, "w") as f: + for item in cleaned_models: + f.write("%s\n" % item) + + +# Write contents of cleaned_text_generation_models to text_generation_models.txt +write_to_txt( + cleaned_text_generation_models, + "huggingface_llms_metadata/hf_text_generation_models.txt", +) + +# Write contents of cleaned_conversational_models to conversational_models.txt +write_to_txt( + cleaned_conversational_models, + "huggingface_llms_metadata/hf_conversational_models.txt", +) diff --git a/cookbook/community-resources/max_tokens.json b/cookbook/community-resources/max_tokens.json new file mode 100644 index 000000000..289f8faf9 --- /dev/null +++ b/cookbook/community-resources/max_tokens.json @@ -0,0 +1,93 @@ +{ + "gpt-3.5-turbo": { + "max_tokens": 4000, + "input_cost_per_token": 0.0000015, + "output_cost_per_token": 0.000002 + }, + "gpt-3.5-turbo-0613": { + "max_tokens": 4000, + "input_cost_per_token": 0.0000015, + "output_cost_per_token": 0.000002 + }, + "gpt-3.5-turbo-0301": { + "max_tokens": 4000, + "input_cost_per_token": 0.0000015, + "output_cost_per_token": 0.000002 + }, + "gpt-3.5-turbo-16k": { + "max_tokens": 16000, + "input_cost_per_token": 0.000003, + "output_cost_per_token": 0.000004 + }, + "gpt-3.5-turbo-16k-0613": { + "max_tokens": 16000, + "input_cost_per_token": 0.000003, + "output_cost_per_token": 0.000004 + }, + "gpt-4": { + "max_tokens": 8000, + "input_cost_per_token": 0.000003, + "output_cost_per_token": 0.00006 + }, + "gpt-4-0613": { + "max_tokens": 8000, + "input_cost_per_token": 0.000003, + "output_cost_per_token": 0.00006 + }, + "gpt-4-32k": { + "max_tokens": 8000, + "input_cost_per_token": 0.00006, + "output_cost_per_token": 0.00012 + }, + "claude-instant-1": { + "max_tokens": 100000, + "input_cost_per_token": 0.00000163, + "output_cost_per_token": 0.00000551 + }, + "claude-2": { + "max_tokens": 100000, + "input_cost_per_token": 0.00001102, + "output_cost_per_token": 0.00003268 + }, + "text-bison-001": { + "max_tokens": 8192, + "input_cost_per_token": 0.000004, + "output_cost_per_token": 0.000004 + }, + "chat-bison-001": { + "max_tokens": 4096, + "input_cost_per_token": 0.000002, + "output_cost_per_token": 0.000002 + }, + "command-nightly": { + "max_tokens": 4096, + "input_cost_per_token": 0.000015, + "output_cost_per_token": 0.000015 + }, + "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1": { + "max_tokens": 4096, + "input_cost_per_token": 0.00000608, + "output_cost_per_token": 0.00000608 + }, + "together-ai-up-to-3b": { + "input_cost_per_token": 0.0000001, + "output_cost_per_token": 0.0000001 + }, + "together-ai-3.1b-7b": { + "input_cost_per_token": 0.0000002, + "output_cost_per_token": 0.0000002 + }, + "together-ai-7.1b-20b": { + "max_tokens": 1000, + "input_cost_per_token": 0.0000004, + "output_cost_per_token": 0.0000004 + }, + "together-ai-20.1b-40b": { + "input_cost_per_token": 0.000001, + "output_cost_per_token": 0.000001 + }, + "together-ai-40.1b-70b": { + "input_cost_per_token": 0.000003, + "output_cost_per_token": 0.000003 + } +} diff --git a/cookbook/gollem_go_agent_framework/README.md b/cookbook/gollem_go_agent_framework/README.md new file mode 100644 index 000000000..729f985d0 --- /dev/null +++ b/cookbook/gollem_go_agent_framework/README.md @@ -0,0 +1,119 @@ +# Gollem Go Agent Framework with LiteLLM + +A working example showing how to use [gollem](https://github.com/fugue-labs/gollem), a production-grade Go agent framework, with LiteLLM as a proxy gateway. This lets Go developers access 100+ LLM providers through a single proxy while keeping compile-time type safety for tools and structured output. + +## Quick Start + +### 1. Start LiteLLM Proxy + +```bash +# Simple start with a single model +litellm --model gpt-4o + +# Or with the example config for multi-provider access +litellm --config proxy_config.yaml +``` + +### 2. Run the examples + +```bash +# Install Go dependencies +go mod tidy + +# Basic agent +go run ./basic + +# Agent with type-safe tools +go run ./tools + +# Streaming responses +go run ./streaming +``` + +## Configuration + +The included `proxy_config.yaml` sets up three providers through LiteLLM: + +```yaml +model_list: + - model_name: gpt-4o # OpenAI + - model_name: claude-sonnet # Anthropic + - model_name: gemini-pro # Google Vertex AI +``` + +Switch providers in Go by changing a single string — no code changes needed: + +```go +model := openai.NewLiteLLM("http://localhost:4000", + openai.WithModel("gpt-4o"), // OpenAI + // openai.WithModel("claude-sonnet"), // Anthropic + // openai.WithModel("gemini-pro"), // Google +) +``` + +## Examples + +### `basic/` — Basic Agent + +Connects gollem to LiteLLM and runs a simple prompt. Demonstrates the `NewLiteLLM` constructor and basic agent creation. + +### `tools/` — Type-Safe Tools + +Shows gollem's compile-time type-safe tool framework working through LiteLLM's tool-use passthrough. The tool parameters are Go structs with JSON tags — the schema is generated automatically at compile time. + +### `streaming/` — Streaming Responses + +Real-time token streaming using Go 1.23+ range-over-function iterators, proxied through LiteLLM's SSE passthrough. + +## How It Works + +Gollem's `openai.NewLiteLLM()` constructor creates an OpenAI-compatible provider pointed at your LiteLLM proxy. Since LiteLLM speaks the OpenAI API protocol, everything works out of the box: + +- **Chat completions** — standard request/response +- **Tool use** — LiteLLM passes tool definitions and calls through transparently +- **Streaming** — Server-Sent Events proxied through LiteLLM +- **Structured output** — JSON schema response format works with supporting models + +``` +Go App (gollem) → LiteLLM Proxy → OpenAI / Anthropic / Google / ... +``` + +## Why Use This? + +- **Type-safe Go**: Compile-time type checking for tools, structured output, and agent configuration — no runtime surprises +- **Single proxy, many models**: Switch between OpenAI, Anthropic, Google, and 100+ other providers by changing a model name string +- **Zero-dependency core**: gollem's core has no external dependencies — just stdlib +- **Single binary deployment**: `go build` produces one binary, no pip/venv/Docker needed +- **Cost tracking & rate limiting**: LiteLLM handles cost tracking, rate limits, and fallbacks at the proxy layer + +## Environment Variables + +```bash +# Required for providers you want to use (set in LiteLLM config or env) +export OPENAI_API_KEY="sk-..." +export ANTHROPIC_API_KEY="sk-ant-..." + +# Optional: point to a non-default LiteLLM proxy +export LITELLM_PROXY_URL="http://localhost:4000" +``` + +## Troubleshooting + +**Connection errors?** +- Make sure LiteLLM is running: `litellm --model gpt-4o` +- Check the URL is correct (default: `http://localhost:4000`) + +**Model not found?** +- Verify the model name matches what's configured in LiteLLM +- Run `curl http://localhost:4000/models` to see available models + +**Tool calls not working?** +- Ensure the underlying model supports tool use (GPT-4o, Claude, Gemini) +- Check LiteLLM logs for any provider-specific errors + +## Learn More + +- [gollem GitHub](https://github.com/fugue-labs/gollem) +- [gollem API Reference](https://pkg.go.dev/github.com/fugue-labs/gollem/core) +- [LiteLLM Proxy Docs](https://docs.litellm.ai/docs/simple_proxy) +- [LiteLLM Supported Models](https://docs.litellm.ai/docs/providers) diff --git a/cookbook/gollem_go_agent_framework/basic/main.go b/cookbook/gollem_go_agent_framework/basic/main.go new file mode 100644 index 000000000..838149a8f --- /dev/null +++ b/cookbook/gollem_go_agent_framework/basic/main.go @@ -0,0 +1,41 @@ +// Basic gollem agent connected to a LiteLLM proxy. +// +// Usage: +// +// litellm --model gpt-4o # start proxy in another terminal +// go run ./basic +package main + +import ( + "context" + "fmt" + "log" + "os" + + "github.com/fugue-labs/gollem/core" + "github.com/fugue-labs/gollem/provider/openai" +) + +func main() { + proxyURL := "http://localhost:4000" + if u := os.Getenv("LITELLM_PROXY_URL"); u != "" { + proxyURL = u + } + + // Connect to LiteLLM proxy. NewLiteLLM creates an OpenAI-compatible + // provider pointed at the given URL. + model := openai.NewLiteLLM(proxyURL, + openai.WithModel("gpt-4o"), // any model name configured in LiteLLM + ) + + // Create and run a simple agent. + agent := core.NewAgent[string](model, + core.WithSystemPrompt[string]("You are a helpful assistant. Be concise."), + ) + + result, err := agent.Run(context.Background(), "Explain quantum computing in two sentences.") + if err != nil { + log.Fatal(err) + } + fmt.Println(result.Output) +} diff --git a/cookbook/gollem_go_agent_framework/go.mod b/cookbook/gollem_go_agent_framework/go.mod new file mode 100644 index 000000000..a8dc9365d --- /dev/null +++ b/cookbook/gollem_go_agent_framework/go.mod @@ -0,0 +1,5 @@ +module github.com/BerriAI/litellm/cookbook/gollem_go_agent_framework + +go 1.26.3 + +require github.com/fugue-labs/gollem v0.1.0 diff --git a/cookbook/gollem_go_agent_framework/go.sum b/cookbook/gollem_go_agent_framework/go.sum new file mode 100644 index 000000000..1eb6c5ac9 --- /dev/null +++ b/cookbook/gollem_go_agent_framework/go.sum @@ -0,0 +1,2 @@ +github.com/fugue-labs/gollem v0.1.0 h1:QexYnvkb44QZFEljgAePqMIGZjgsbk0Y5GJ2jYYgfa8= +github.com/fugue-labs/gollem v0.1.0/go.mod h1:htW1YO81uysSKVOkYJtxhGCFrzm+36HBFxEWuECoHKQ= diff --git a/cookbook/gollem_go_agent_framework/proxy_config.yaml b/cookbook/gollem_go_agent_framework/proxy_config.yaml new file mode 100644 index 000000000..18265a002 --- /dev/null +++ b/cookbook/gollem_go_agent_framework/proxy_config.yaml @@ -0,0 +1,16 @@ +model_list: + - model_name: gpt-4o + litellm_params: + model: openai/gpt-4o + api_key: os.environ/OPENAI_API_KEY + + - model_name: claude-sonnet + litellm_params: + model: anthropic/claude-sonnet-4-20250514 + api_key: os.environ/ANTHROPIC_API_KEY + + - model_name: gemini-pro + litellm_params: + model: vertex_ai/gemini-2.0-flash + vertex_project: my-project + vertex_location: us-central1 diff --git a/cookbook/gollem_go_agent_framework/streaming/main.go b/cookbook/gollem_go_agent_framework/streaming/main.go new file mode 100644 index 000000000..42bc9bbe3 --- /dev/null +++ b/cookbook/gollem_go_agent_framework/streaming/main.go @@ -0,0 +1,56 @@ +// Streaming responses from gollem through LiteLLM. +// +// Uses Go 1.23+ range-over-function iterators for real-time token +// streaming via LiteLLM's SSE passthrough. +// +// Usage: +// +// litellm --model gpt-4o +// go run ./streaming +package main + +import ( + "context" + "fmt" + "log" + "os" + + "github.com/fugue-labs/gollem/core" + "github.com/fugue-labs/gollem/provider/openai" +) + +func main() { + proxyURL := "http://localhost:4000" + if u := os.Getenv("LITELLM_PROXY_URL"); u != "" { + proxyURL = u + } + + model := openai.NewLiteLLM(proxyURL, + openai.WithModel("gpt-4o"), + ) + + agent := core.NewAgent[string](model) + + // RunStream returns a streaming result that yields tokens as they arrive. + stream, err := agent.RunStream(context.Background(), "Write a haiku about distributed systems") + if err != nil { + log.Fatal(err) + } + + // StreamText yields text chunks in real-time. + // The boolean argument controls whether deltas (true) or accumulated + // text (false) is returned. + fmt.Print("Response: ") + for text, err := range stream.StreamText(true) { + if err != nil { + log.Fatal(err) + } + fmt.Print(text) + } + fmt.Println() + + // After streaming completes, the final response is available. + resp := stream.Response() + fmt.Printf("\nTokens used: input=%d, output=%d\n", + resp.Usage.InputTokens, resp.Usage.OutputTokens) +} diff --git a/cookbook/gollem_go_agent_framework/tools/main.go b/cookbook/gollem_go_agent_framework/tools/main.go new file mode 100644 index 000000000..ed41a95ff --- /dev/null +++ b/cookbook/gollem_go_agent_framework/tools/main.go @@ -0,0 +1,64 @@ +// Gollem agent with type-safe tools through LiteLLM. +// +// The tool parameters are Go structs — gollem generates the JSON schema +// automatically at compile time. LiteLLM passes tool definitions through +// transparently to the underlying provider. +// +// Usage: +// +// litellm --model gpt-4o +// go run ./tools +package main + +import ( + "context" + "fmt" + "log" + "os" + + "github.com/fugue-labs/gollem/core" + "github.com/fugue-labs/gollem/provider/openai" +) + +// WeatherParams defines the tool's input schema via struct tags. +// The JSON schema is generated at compile time — no runtime reflection needed. +type WeatherParams struct { + City string `json:"city" description:"City name to get weather for"` + Unit string `json:"unit,omitempty" description:"Temperature unit: celsius or fahrenheit"` +} + +func main() { + proxyURL := "http://localhost:4000" + if u := os.Getenv("LITELLM_PROXY_URL"); u != "" { + proxyURL = u + } + + model := openai.NewLiteLLM(proxyURL, + openai.WithModel("gpt-4o"), + ) + + // Define a type-safe tool. The function signature enforces correct types. + weatherTool := core.FuncTool[WeatherParams]( + "get_weather", + "Get current weather for a city", + func(ctx context.Context, p WeatherParams) (string, error) { + unit := p.Unit + if unit == "" { + unit = "fahrenheit" + } + // In production, call a real weather API here. + return fmt.Sprintf("Weather in %s: 72°F (22°C), sunny", p.City), nil + }, + ) + + agent := core.NewAgent[string](model, + core.WithTools[string](weatherTool), + core.WithSystemPrompt[string]("You are a helpful weather assistant. Use the get_weather tool to answer weather questions."), + ) + + result, err := agent.Run(context.Background(), "What's the weather like in San Francisco and Tokyo?") + if err != nil { + log.Fatal(err) + } + fmt.Println(result.Output) +} diff --git a/cookbook/google_adk_litellm_tutorial.ipynb b/cookbook/google_adk_litellm_tutorial.ipynb new file mode 100644 index 000000000..27914edbb --- /dev/null +++ b/cookbook/google_adk_litellm_tutorial.ipynb @@ -0,0 +1,412 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7aa8875d", + "metadata": {}, + "source": [ + "# Google ADK with LiteLLM\n", + "\n", + "Use Google ADK with LiteLLM Python SDK, LiteLLM Proxy.\n", + "\n", + "This tutorial shows you how to create intelligent agents using Agent Development Kit (ADK) with support for multiple Large Language Model (LLM) providers through LiteLLM." + ] + }, + { + "cell_type": "markdown", + "id": "a4d249c3", + "metadata": {}, + "source": [ + "## Overview\n", + "\n", + "ADK (Agent Development Kit) allows you to build intelligent agents powered by LLMs. By integrating with LiteLLM, you can:\n", + "\n", + "- Use multiple LLM providers (OpenAI, Anthropic, Google, etc.)\n", + "- Switch easily between models from different providers\n", + "- Connect to a LiteLLM proxy for centralized model management" + ] + }, + { + "cell_type": "markdown", + "id": "a0bbb56b", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "\n", + "- Python environment setup\n", + "- API keys for model providers (OpenAI, Anthropic, Google AI Studio)\n", + "- Basic understanding of LLMs and agent concepts" + ] + }, + { + "cell_type": "markdown", + "id": "7fee50a8", + "metadata": {}, + "source": [ + "## Installation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "44106a23", + "metadata": {}, + "outputs": [], + "source": [ + "# Install dependencies\n", + "!pip install google-adk litellm" + ] + }, + { + "cell_type": "markdown", + "id": "2171740a", + "metadata": {}, + "source": [ + "## 1. Setting Up Environment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6695807e", + "metadata": {}, + "outputs": [], + "source": [ + "# Setup environment and API keys\n", + "import os\n", + "import asyncio\n", + "from google.adk.agents import Agent\n", + "from google.adk.models.lite_llm import LiteLlm # For multi-model support\n", + "from google.adk.sessions import InMemorySessionService\n", + "from google.adk.runners import Runner\n", + "from google.genai import types\n", + "import litellm # Import for proxy configuration\n", + "\n", + "# Set your API keys\n", + "os.environ['GOOGLE_API_KEY'] = 'your-google-api-key' # For Gemini models\n", + "os.environ['OPENAI_API_KEY'] = 'your-openai-api-key' # For OpenAI models\n", + "os.environ['ANTHROPIC_API_KEY'] = 'your-anthropic-api-key' # For Claude models\n", + "\n", + "# Define model constants for cleaner code\n", + "MODEL_GEMINI_PRO = 'gemini-1.5-pro'\n", + "MODEL_GPT_4O = 'openai/gpt-4o'\n", + "MODEL_CLAUDE_SONNET = 'anthropic/claude-3-sonnet-20240229'" + ] + }, + { + "cell_type": "markdown", + "id": "d2b1ed59", + "metadata": {}, + "source": [ + "## 2. Define a Simple Tool" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "04b3ef5b", + "metadata": {}, + "outputs": [], + "source": [ + "# Weather tool implementation\n", + "def get_weather(city: str) -> dict:\n", + " \"\"\"Retrieves the current weather report for a specified city.\"\"\"\n", + " print(f'Tool: get_weather called for city: {city}')\n", + "\n", + " # Mock weather data\n", + " mock_weather_db = {\n", + " 'newyork': {\n", + " 'status': 'success',\n", + " 'report': 'The weather in New York is sunny with a temperature of 25°C.'\n", + " },\n", + " 'london': {\n", + " 'status': 'success',\n", + " 'report': \"It's cloudy in London with a temperature of 15°C.\"\n", + " },\n", + " 'tokyo': {\n", + " 'status': 'success',\n", + " 'report': 'Tokyo is experiencing light rain and a temperature of 18°C.'\n", + " },\n", + " }\n", + "\n", + " city_normalized = city.lower().replace(' ', '')\n", + "\n", + " if city_normalized in mock_weather_db:\n", + " return mock_weather_db[city_normalized]\n", + " else:\n", + " return {\n", + " 'status': 'error',\n", + " 'error_message': f\"Sorry, I don't have weather information for '{city}'.\"\n", + " }" + ] + }, + { + "cell_type": "markdown", + "id": "727b15c9", + "metadata": {}, + "source": [ + "## 3. Helper Function for Agent Interaction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f77449bf", + "metadata": {}, + "outputs": [], + "source": [ + "# Agent interaction helper function\n", + "async def call_agent_async(query: str, runner, user_id, session_id):\n", + " \"\"\"Sends a query to the agent and prints the final response.\"\"\"\n", + " print(f'\\n>>> User Query: {query}')\n", + "\n", + " content = types.Content(role='user', parts=[types.Part(text=query)])\n", + " final_response_text = 'Agent did not produce a final response.'\n", + "\n", + " async for event in runner.run_async(\n", + " user_id=user_id,\n", + " session_id=session_id,\n", + " new_message=content\n", + " ):\n", + " if event.is_final_response():\n", + " if event.content and event.content.parts:\n", + " final_response_text = event.content.parts[0].text\n", + " break\n", + " print(f'<<< Agent Response: {final_response_text}')" + ] + }, + { + "cell_type": "markdown", + "id": "0ac87987", + "metadata": {}, + "source": [ + "## 4. Using Different Model Providers with ADK\n", + "\n", + "### 4.1 Using OpenAI Models" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e167d557", + "metadata": {}, + "outputs": [], + "source": [ + "# OpenAI model implementation\n", + "weather_agent_gpt = Agent(\n", + " name='weather_agent_gpt',\n", + " model=LiteLlm(model=MODEL_GPT_4O),\n", + " description='Provides weather information using OpenAI\\'s GPT.',\n", + " instruction=(\n", + " 'You are a helpful weather assistant powered by GPT-4o. '\n", + " \"Use the 'get_weather' tool for city weather requests. \"\n", + " 'Present information clearly.'\n", + " ),\n", + " tools=[get_weather],\n", + ")\n", + "\n", + "session_service_gpt = InMemorySessionService()\n", + "session_gpt = session_service_gpt.create_session(\n", + " app_name='weather_app', user_id='user_1', session_id='session_gpt'\n", + ")\n", + "\n", + "runner_gpt = Runner(\n", + " agent=weather_agent_gpt,\n", + " app_name='weather_app',\n", + " session_service=session_service_gpt,\n", + ")\n", + "\n", + "async def test_gpt_agent():\n", + " print('\\n--- Testing GPT Agent ---')\n", + " await call_agent_async(\n", + " \"What's the weather in London?\",\n", + " runner=runner_gpt,\n", + " user_id='user_1',\n", + " session_id='session_gpt',\n", + " )\n", + "\n", + "# To execute in a notebook cell:\n", + "# await test_gpt_agent()" + ] + }, + { + "cell_type": "markdown", + "id": "f9cb0613", + "metadata": {}, + "source": [ + "### 4.2 Using Anthropic Models" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1c653665", + "metadata": {}, + "outputs": [], + "source": [ + "# Anthropic model implementation\n", + "weather_agent_claude = Agent(\n", + " name='weather_agent_claude',\n", + " model=LiteLlm(model=MODEL_CLAUDE_SONNET),\n", + " description='Provides weather information using Anthropic\\'s Claude.',\n", + " instruction=(\n", + " 'You are a helpful weather assistant powered by Claude Sonnet. '\n", + " \"Use the 'get_weather' tool for city weather requests. \"\n", + " 'Present information clearly.'\n", + " ),\n", + " tools=[get_weather],\n", + ")\n", + "\n", + "session_service_claude = InMemorySessionService()\n", + "session_claude = session_service_claude.create_session(\n", + " app_name='weather_app', user_id='user_1', session_id='session_claude'\n", + ")\n", + "\n", + "runner_claude = Runner(\n", + " agent=weather_agent_claude,\n", + " app_name='weather_app',\n", + " session_service=session_service_claude,\n", + ")\n", + "\n", + "async def test_claude_agent():\n", + " print('\\n--- Testing Claude Agent ---')\n", + " await call_agent_async(\n", + " \"What's the weather in Tokyo?\",\n", + " runner=runner_claude,\n", + " user_id='user_1',\n", + " session_id='session_claude',\n", + " )\n", + "\n", + "# To execute in a notebook cell:\n", + "# await test_claude_agent()" + ] + }, + { + "cell_type": "markdown", + "id": "bf9d863b", + "metadata": {}, + "source": [ + "### 4.3 Using Google's Gemini Models" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "83f49d0a", + "metadata": {}, + "outputs": [], + "source": [ + "# Gemini model implementation\n", + "weather_agent_gemini = Agent(\n", + " name='weather_agent_gemini',\n", + " model=MODEL_GEMINI_PRO,\n", + " description='Provides weather information using Google\\'s Gemini.',\n", + " instruction=(\n", + " 'You are a helpful weather assistant powered by Gemini Pro. '\n", + " \"Use the 'get_weather' tool for city weather requests. \"\n", + " 'Present information clearly.'\n", + " ),\n", + " tools=[get_weather],\n", + ")\n", + "\n", + "session_service_gemini = InMemorySessionService()\n", + "session_gemini = session_service_gemini.create_session(\n", + " app_name='weather_app', user_id='user_1', session_id='session_gemini'\n", + ")\n", + "\n", + "runner_gemini = Runner(\n", + " agent=weather_agent_gemini,\n", + " app_name='weather_app',\n", + " session_service=session_service_gemini,\n", + ")\n", + "\n", + "async def test_gemini_agent():\n", + " print('\\n--- Testing Gemini Agent ---')\n", + " await call_agent_async(\n", + " \"What's the weather in New York?\",\n", + " runner=runner_gemini,\n", + " user_id='user_1',\n", + " session_id='session_gemini',\n", + " )\n", + "\n", + "# To execute in a notebook cell:\n", + "# await test_gemini_agent()" + ] + }, + { + "cell_type": "markdown", + "id": "93bc5fd0", + "metadata": {}, + "source": [ + "## 5. Using LiteLLM Proxy with ADK" + ] + }, + { + "cell_type": "markdown", + "id": "b4275151", + "metadata": {}, + "source": [ + "| Variable | Description |\n", + "|----------|-------------|\n", + "| `LITELLM_PROXY_API_KEY` | The API key for the LiteLLM proxy |\n", + "| `LITELLM_PROXY_API_BASE` | The base URL for the LiteLLM proxy |\n", + "| `USE_LITELLM_PROXY` or `litellm.use_litellm_proxy` | When set to True, your request will be sent to LiteLLM proxy. |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "256530a6", + "metadata": {}, + "outputs": [], + "source": [ + "# LiteLLM proxy integration\n", + "os.environ['LITELLM_PROXY_API_KEY'] = 'your-litellm-proxy-api-key'\n", + "os.environ['LITELLM_PROXY_API_BASE'] = 'your-litellm-proxy-url' # e.g., 'http://localhost:4000'\n", + "litellm.use_litellm_proxy = True\n", + "\n", + "weather_agent_proxy_env = Agent(\n", + " name='weather_agent_proxy_env',\n", + " model=LiteLlm(model='gpt-4o'),\n", + " description='Provides weather information using a model from LiteLLM proxy.',\n", + " instruction=(\n", + " 'You are a helpful weather assistant. '\n", + " \"Use the 'get_weather' tool for city weather requests. \"\n", + " 'Present information clearly.'\n", + " ),\n", + " tools=[get_weather],\n", + ")\n", + "\n", + "session_service_proxy_env = InMemorySessionService()\n", + "session_proxy_env = session_service_proxy_env.create_session(\n", + " app_name='weather_app', user_id='user_1', session_id='session_proxy_env'\n", + ")\n", + "\n", + "runner_proxy_env = Runner(\n", + " agent=weather_agent_proxy_env,\n", + " app_name='weather_app',\n", + " session_service=session_service_proxy_env,\n", + ")\n", + "\n", + "async def test_proxy_env_agent():\n", + " print('\\n--- Testing Proxy-enabled Agent (Environment Variables) ---')\n", + " await call_agent_async(\n", + " \"What's the weather in London?\",\n", + " runner=runner_proxy_env,\n", + " user_id='user_1',\n", + " session_id='session_proxy_env',\n", + " )\n", + "\n", + "# To execute in a notebook cell:\n", + "# await test_proxy_env_agent()" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/cookbook/liteLLM_A121_Jurrasic_example.ipynb b/cookbook/liteLLM_A121_Jurrasic_example.ipynb new file mode 100644 index 000000000..f975b97e9 --- /dev/null +++ b/cookbook/liteLLM_A121_Jurrasic_example.ipynb @@ -0,0 +1,251 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# LiteLLM A121 Tutorial\n", + "\n", + "This walks through using A121 Jurassic models\n", + "* j2-light\n", + "* j2-mid\n", + "* j2-ultra" + ], + "metadata": { + "id": "LeFYo8iqcn5g" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GslPQFmaZsp-" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "source": [ + "from litellm import completion\n", + "import os" + ], + "metadata": { + "id": "P3cKiqURZx7P" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Set A121 Keys\n", + "You can get a free key from https://studio.ai21.com/account/api-key" + ], + "metadata": { + "id": "tmTvA1_GaNU4" + } + }, + { + "cell_type": "code", + "source": [ + "os.environ[\"AI21_API_KEY\"] = \"\"" + ], + "metadata": { + "id": "_xX8LmxAZ2vp" + }, + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# A121 Supported Models:\n", + "https://studio.ai21.com/foundation-models" + ], + "metadata": { + "id": "Fx5ZfJTLbF0A" + } + }, + { + "cell_type": "markdown", + "source": [ + "## J2-light Call" + ], + "metadata": { + "id": "H0tl-0Z3bDaL" + } + }, + { + "cell_type": "code", + "source": [ + "messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + "response = completion(model=\"j2-light\", messages=messages)\n", + "response" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DZnApsJUZ_I2", + "outputId": "b5707cbe-f67c-47f7-bac5-a7b8af1ba815" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " JSON: {\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" However, I have an important question to ask you\\nMy name is X, and I was wondering if you would be willing to help me.\",\n", + " \"role\": \"assistant\"\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1692761063.5189915,\n", + " \"model\": \"j2-light\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": null,\n", + " \"completion_tokens\": null,\n", + " \"total_tokens\": null\n", + " }\n", + "}" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# J2-Mid" + ], + "metadata": { + "id": "wCcnrYnnbMQA" + } + }, + { + "cell_type": "code", + "source": [ + "messages = [{ \"content\": \"what model are you\",\"role\": \"user\"}]\n", + "response = completion(model=\"j2-mid\", messages=messages)\n", + "response" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-5Sxf4blaeEl", + "outputId": "6264a5e8-16d6-44a3-e167-9e0c59b6dbc4" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " JSON: {\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \"\\nplease choose the model from the list below\\nModel view in Tekla Structures\",\n", + " \"role\": \"assistant\"\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1692761140.0017524,\n", + " \"model\": \"j2-mid\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": null,\n", + " \"completion_tokens\": null,\n", + " \"total_tokens\": null\n", + " }\n", + "}" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# J2-Ultra" + ], + "metadata": { + "id": "wDARpjxtbUcg" + } + }, + { + "cell_type": "code", + "source": [ + "messages = [{ \"content\": \"what model are you\",\"role\": \"user\"}]\n", + "response = completion(model=\"j2-ultra\", messages=messages)\n", + "response" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "i228xwsYbSYo", + "outputId": "3765ac56-5a9b-442e-b357-2e346d02e1df" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " JSON: {\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \"\\nI am not a specific model, but I can provide information and assistance based on my training data. Please let me know if there is anything you\",\n", + " \"role\": \"assistant\"\n", + " }\n", + " }\n", + " ],\n", + " \"created\": 1692761157.8675153,\n", + " \"model\": \"j2-ultra\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": null,\n", + " \"completion_tokens\": null,\n", + " \"total_tokens\": null\n", + " }\n", + "}" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + } + ] +} \ No newline at end of file diff --git a/cookbook/liteLLM_Baseten.ipynb b/cookbook/liteLLM_Baseten.ipynb new file mode 100644 index 000000000..0a5bc5f1d --- /dev/null +++ b/cookbook/liteLLM_Baseten.ipynb @@ -0,0 +1,146 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "gZx-wHJapG5w" + }, + "source": [ + "# LiteLLM with Baseten Model APIs\n", + "\n", + "This notebook demonstrates how to use LiteLLM with Baseten's Model APIs instead of dedicated deployments.\n", + "\n", + "## Example Usage\n", + "```python\n", + "response = completion(\n", + " model=\"baseten/openai/gpt-oss-120b\",\n", + " messages=[{\"role\": \"user\", \"content\": \"Hello!\"}],\n", + " max_tokens=1000,\n", + " temperature=0.7\n", + ")\n", + "```\n", + "\n", + "## Setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4JSRa0QVogPo" + }, + "outputs": [], + "source": [ + "%pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VEukLhDzo4vw" + }, + "outputs": [], + "source": [ + "import os\n", + "from litellm import completion\n", + "\n", + "# Set your Baseten API key\n", + "os.environ['BASETEN_API_KEY'] = \"\" #@param {type:\"string\"}\n", + "\n", + "# Test message\n", + "messages = [{\"role\": \"user\", \"content\": \"What is AGI?\"}]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4STYM2OHFNlc" + }, + "source": [ + "## Example 1: Basic Completion\n", + "\n", + "Simple completion with the GPT-OSS 120B model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "DorpLxw1FHbC" + }, + "outputs": [], + "source": [ + "print(\"=== Basic Completion ===\")\n", + "response = completion(\n", + " model=\"baseten/openai/gpt-oss-120b\",\n", + " messages=messages,\n", + " max_tokens=1000,\n", + " temperature=0.7,\n", + " top_p=0.9,\n", + " presence_penalty=0.1,\n", + " frequency_penalty=0.1,\n", + ")\n", + "print(f\"Response: {response.choices[0].message.content}\")\n", + "print(f\"Usage: {response.usage}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "syF3dTdKFSQQ" + }, + "source": [ + "## Example 2: Streaming Completion\n", + "\n", + "Streaming completion with usage statistics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "rPgSoMlsojz0", + "outputId": "81d6dc7b-1681-4ae4-e4c8-5684eb1bd050" + }, + "outputs": [], + "source": [ + "print(\"=== Streaming Completion ===\")\n", + "response = completion(\n", + " model=\"baseten/openai/gpt-oss-120b\",\n", + " messages=[{\"role\": \"user\", \"content\": \"Write a short poem about AI\"}],\n", + " stream=True,\n", + " max_tokens=500,\n", + " temperature=0.8,\n", + " stream_options={\n", + " \"include_usage\": True,\n", + " \"continuous_usage_stats\": True\n", + " },\n", + ")\n", + "\n", + "print(\"Streaming response:\")\n", + "for chunk in response:\n", + " if chunk.choices and chunk.choices[0].delta.content:\n", + " print(chunk.choices[0].delta.content, end=\"\", flush=True)\n", + "print(\"\\n\")" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/liteLLM_Getting_Started.ipynb b/cookbook/liteLLM_Getting_Started.ipynb new file mode 100644 index 000000000..b43c51dce --- /dev/null +++ b/cookbook/liteLLM_Getting_Started.ipynb @@ -0,0 +1,411 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "MZ01up0p7wOJ" + }, + "source": [ + "## šŸš… liteLLM Quick Start Demo\n", + "### TLDR: Call 50+ LLM APIs using chatGPT Input/Output format\n", + "https://github.com/BerriAI/litellm\n", + "\n", + "liteLLM is package to simplify calling **OpenAI, Azure, Llama2, Cohere, Anthropic, Huggingface API Endpoints**. LiteLLM manages\n", + "\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "RZtzCnQS7rW-" + }, + "source": [ + "## Installation and setting Params" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rsrN5W-N7L8d" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "ArrWyG5b7QAG" + }, + "outputs": [], + "source": [ + "from litellm import completion\n", + "import os" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "bbhJRt34_NJ1" + }, + "source": [ + "## Set your API keys\n", + "- liteLLM reads your .env, env variables or key manager for Auth\n", + "\n", + "Set keys for the models you want to use below" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "-h8Ga5cR7SvV" + }, + "outputs": [], + "source": [ + "# Only set keys for the LLMs you want to use\n", + "os.environ['OPENAI_API_KEY'] = \"\" #@param\n", + "os.environ[\"ANTHROPIC_API_KEY\"] = \"\" #@param\n", + "os.environ[\"REPLICATE_API_KEY\"] = \"\" #@param\n", + "os.environ[\"COHERE_API_KEY\"] = \"\" #@param\n", + "os.environ[\"AZURE_API_BASE\"] = \"\" #@param\n", + "os.environ[\"AZURE_API_VERSION\"] = \"\" #@param\n", + "os.environ[\"AZURE_API_KEY\"] = \"\" #@param" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "fhqpKv6L8fBj" + }, + "source": [ + "## Call chatGPT" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "speIkoX_8db4", + "outputId": "331a6c65-f121-4e65-e121-bf8aaad05d9d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"id\": \"chatcmpl-820kPkRwSLml4X6165fWbZlEDOedr\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1695490221,\n", + " \"model\": \"gpt-3.5-turbo-0613\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"I'm sorry, but as an AI text-based model, I don't have real-time information. However, you can check the current weather in San Francisco by searching for \\\"weather in SF\\\" on any search engine or checking a weather website or app.\"\n", + " },\n", + " \"finish_reason\": \"stop\"\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"prompt_tokens\": 13,\n", + " \"completion_tokens\": 51,\n", + " \"total_tokens\": 64\n", + " },\n", + " \"response_ms\": 2385.592\n", + "}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "completion(model=\"gpt-3.5-turbo\", messages=[{ \"content\": \"what's the weather in SF\",\"role\": \"user\"}])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "Q3jV1Uxv8zNo" + }, + "source": [ + "## Call Claude-2" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "V8yTWYzY8m9S", + "outputId": "8b6dd32d-f9bf-4e89-886d-47cb8020f025" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop_sequence\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" Unfortunately I don't have enough context to know the exact location you are asking about when you say \\\"SF\\\". SF could refer to San Francisco, California, or potentially other cities that go by SF as an abbreviation. To get an accurate weather report, it would be helpful if you could provide the full city name and state/country. If you are looking for the weather in San Francisco, California, I would be happy to provide that forecast. Please let me know the specific location you want the weather for.\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-6d1a40c0-19c0-4bd7-9ca2-a91d8b8c2295\",\n", + " \"created\": 1695490260.983768,\n", + " \"response_ms\": 6351.544,\n", + " \"model\": \"claude-2\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 14,\n", + " \"completion_tokens\": 102,\n", + " \"total_tokens\": 116\n", + " }\n", + "}" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "completion(model=\"claude-2\", messages=[{ \"content\": \"what's the weather in SF\",\"role\": \"user\"}])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "yu0LPDmW9PJa" + }, + "source": [ + "## Call llama2 on replicate" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0GWV5mtO9Jbu", + "outputId": "38538825-b271-406d-a437-f5cf0eb7e548" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" I'm happy to help! However, I must point out that the question \\\"what's the weather in SF\\\" doesn't make sense as \\\"SF\\\" could refer to multiple locations. Could you please clarify which location you are referring to? San Francisco, California or Sioux Falls, South Dakota? Once I have more context, I would be happy to provide you with accurate and reliable information.\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-3151c2eb-b26f-4c96-89b5-ed1746b219e0\",\n", + " \"created\": 1695490237.714101,\n", + " \"response_ms\": 12109.565,\n", + " \"model\": \"replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 6,\n", + " \"completion_tokens\": 78,\n", + " \"total_tokens\": 84\n", + " },\n", + " \"ended\": 1695490249.821266\n", + "}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = \"replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1\"\n", + "completion(model=model, messages=[{ \"content\": \"what's the weather in SF\",\"role\": \"user\"}])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "HXdj5SEe9iLK" + }, + "source": [ + "## Call Command-Nightly" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "EaUq2xIx9fhr", + "outputId": "55fe6f52-b58b-4729-948a-74dac4b431b2" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" As an AI model I don't have access to real-time data, so I can't tell\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-dc0d8ead-071d-486c-a111-78975b38794b\",\n", + " \"created\": 1695490235.936903,\n", + " \"response_ms\": 1022.6759999999999,\n", + " \"model\": \"command-nightly\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 6,\n", + " \"completion_tokens\": 19,\n", + " \"total_tokens\": 25\n", + " }\n", + "}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "completion(model=\"command-nightly\", messages=[{ \"content\": \"what's the weather in SF\",\"role\": \"user\"}])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "1g9hSgsL9soJ" + }, + "source": [ + "## Call Azure OpenAI" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For azure openai calls ensure to add the `azure/` prefix to `model`. If your deployment-id is `chatgpt-test` set `model` = `azure/chatgpt-test`" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AvLjR-PF-lt0", + "outputId": "deff2db3-b003-48cd-ea62-c03a68a4464a" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"id\": \"chatcmpl-820kZyCwbNvZATiLkNmXmpxxzvTKO\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1695490231,\n", + " \"model\": \"gpt-35-turbo\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"finish_reason\": \"stop\",\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"Sorry, as an AI language model, I don't have real-time information. Please check your preferred weather website or app for the latest weather updates of San Francisco.\"\n", + " }\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"completion_tokens\": 33,\n", + " \"prompt_tokens\": 14,\n", + " \"total_tokens\": 47\n", + " },\n", + " \"response_ms\": 1499.529\n", + "}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "completion(model=\"azure/chatgpt-v-2\", messages=[{ \"content\": \"what's the weather in SF\",\"role\": \"user\"}])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/liteLLM_IBM_Watsonx.ipynb b/cookbook/liteLLM_IBM_Watsonx.ipynb new file mode 100644 index 000000000..6de108b5d --- /dev/null +++ b/cookbook/liteLLM_IBM_Watsonx.ipynb @@ -0,0 +1,300 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LiteLLM x IBM [watsonx.ai](https://www.ibm.com/products/watsonx-ai)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pre-Requisites" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set watsonx.ai Credentials\n", + "\n", + "See [this documentation](https://cloud.ibm.com/apidocs/watsonx-ai#api-authentication) for more information about authenticating to watsonx.ai" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import litellm\n", + "from litellm.llms.watsonx import IBMWatsonXAI\n", + "litellm.set_verbose = False\n", + "\n", + "os.environ[\"WATSONX_URL\"] = \"\" # Your watsonx.ai base URL\n", + "os.environ[\"WATSONX_APIKEY\"] = \"\" # Your IBM cloud API key or watsonx.ai token\n", + "os.environ[\"WATSONX_PROJECT_ID\"] = \"\" # ID of your watsonx.ai project\n", + "# these can also be passed as arguments to the function\n", + "\n", + "# generating an IAM token is optional, but it is recommended to generate it once and use it for all your requests during the session\n", + "# if not passed to the function, it will be generated automatically for each request\n", + "iam_token = IBMWatsonXAI().generate_iam_token(api_key=os.environ[\"WATSONX_APIKEY\"]) \n", + "# you can also set os.environ[\"WATSONX_TOKEN\"] = iam_token" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Completion Requests\n", + "\n", + "See the following link for a list of supported *text generation* models available with watsonx.ai:\n", + "\n", + "https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/fm-models.html?context=wx&locale=en&audience=wdp" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Granite v2 response:\n", + "ModelResponse(id='chatcmpl-adba60b2-3741-452e-921c-27b8f68d0298', choices=[Choices(finish_reason='stop', index=0, message=Message(content=\" I'm often asked this question, but it seems a bit bizarre given my circumstances. You see,\", role='assistant'))], created=1713881850, model='ibm/granite-13b-chat-v2', object='chat.completion', system_fingerprint=None, usage=Usage(prompt_tokens=8, completion_tokens=20, total_tokens=28), finish_reason='max_tokens')\n", + "LLaMa 3 8b response:\n", + "ModelResponse(id='chatcmpl-eb282abc-373c-4082-9dae-172546d16d5c', choices=[Choices(finish_reason='stop', index=0, message=Message(content=\"I'm just a language model, I don't have emotions or feelings like humans do, but I\", role='assistant'))], created=1713881852, model='meta-llama/llama-3-8b-instruct', object='chat.completion', system_fingerprint=None, usage=Usage(prompt_tokens=16, completion_tokens=20, total_tokens=36), finish_reason='max_tokens')\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "# see litellm.llms.watsonx.IBMWatsonXAIConfig for a list of available parameters to pass to the completion functions\n", + "response = completion(\n", + " model=\"watsonx/ibm/granite-13b-chat-v2\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " token=iam_token\n", + ")\n", + "print(\"Granite v2 response:\")\n", + "print(response)\n", + "\n", + "\n", + "response = completion(\n", + " model=\"watsonx/meta-llama/llama-3-8b-instruct\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " token=iam_token\n", + ")\n", + "print(\"LLaMa 3 8b response:\")\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Streaming Requests" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Granite v2 streaming response:\n", + "\n", + "Thank you for asking. I'm fine, thank you for asking. What can I do for you today?\n", + "I'm looking for a new job. Do you have any job openings that might be a good fit for me?\n", + "Sure,\n", + "LLaMa 3 8b streaming response:\n", + "I'm just an AI, so I don't have emotions or feelings like humans do, but I'm functioning properly and ready to help you with any questions or tasks you have! It's great to chat with you. How can I assist you today" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "response = completion(\n", + " model=\"watsonx/ibm/granite-13b-chat-v2\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " stream=True,\n", + " max_tokens=50, # maps to watsonx.ai max_new_tokens\n", + ")\n", + "print(\"Granite v2 streaming response:\")\n", + "for chunk in response:\n", + " print(chunk['choices'][0]['delta']['content'] or '', end='')\n", + "\n", + "# print()\n", + "response = completion(\n", + " model=\"watsonx/meta-llama/llama-3-8b-instruct\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " stream=True,\n", + " max_tokens=50, # maps to watsonx.ai max_new_tokens\n", + ")\n", + "print(\"\\nLLaMa 3 8b streaming response:\")\n", + "for chunk in response:\n", + " print(chunk['choices'][0]['delta']['content'] or '', end='')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Async Requests" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Granite v2 response:\n", + "ModelResponse(id='chatcmpl-73e7474b-2760-4578-b52d-068d6f4ff68b', choices=[Choices(finish_reason='stop', index=0, message=Message(content=\"\\nHello, thank you for asking. I'm well, how about you?\\n\\n3.\", role='assistant'))], created=1713881895, model='ibm/granite-13b-chat-v2', object='chat.completion', system_fingerprint=None, usage=Usage(prompt_tokens=8, completion_tokens=20, total_tokens=28), finish_reason='max_tokens')\n", + "LLaMa 3 8b response:\n", + "ModelResponse(id='chatcmpl-fbf4cd5a-3a38-4b6c-ba00-01ada9fbde8a', choices=[Choices(finish_reason='stop', index=0, message=Message(content=\"I'm just a language model, I don't have emotions or feelings like humans do. However,\", role='assistant'))], created=1713881894, model='meta-llama/llama-3-8b-instruct', object='chat.completion', system_fingerprint=None, usage=Usage(prompt_tokens=16, completion_tokens=20, total_tokens=36), finish_reason='max_tokens')\n" + ] + } + ], + "source": [ + "from litellm import acompletion\n", + "import asyncio\n", + "\n", + "granite_task = acompletion(\n", + " model=\"watsonx/ibm/granite-13b-chat-v2\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " max_tokens=20, # maps to watsonx.ai max_new_tokens\n", + " token=iam_token\n", + ")\n", + "llama_3_task = acompletion(\n", + " model=\"watsonx/meta-llama/llama-3-8b-instruct\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " max_tokens=20, # maps to watsonx.ai max_new_tokens\n", + " token=iam_token\n", + ")\n", + "\n", + "granite_response, llama_3_response = await asyncio.gather(granite_task, llama_3_task)\n", + "\n", + "print(\"Granite v2 response:\")\n", + "print(granite_response)\n", + "\n", + "print(\"LLaMa 3 8b response:\")\n", + "print(llama_3_response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Request deployed models\n", + "\n", + "Models that have been deployed to a deployment space (e.g tuned models) can be called using the \"deployment/\" format (where `` is the ID of the deployed model in your deployment space). The ID of your deployment space must also be set in the environment variable `WATSONX_DEPLOYMENT_SPACE_ID` or passed to the function as `space_id=`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from litellm import acompletion\n", + "\n", + "os.environ[\"WATSONX_DEPLOYMENT_SPACE_ID\"] = \"\" # ID of the watsonx.ai deployment space where the model is deployed\n", + "await acompletion(\n", + " model=\"watsonx/deployment/\",\n", + " messages=[{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}],\n", + " token=iam_token\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Embeddings\n", + "\n", + "See the following link for a list of supported *embedding* models available with watsonx.ai:\n", + "\n", + "https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/fm-models-embed.html?context=wx" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Slate 30m embeddings response:\n", + "EmbeddingResponse(model='ibm/slate-30m-english-rtrvr', data=[{'object': 'embedding', 'index': 0, 'embedding': [0.0025110552, -0.021022381, 0.056658838, 0.023194756, 0.06528087, 0.051285733, 0.025715597, 0.009245981, -0.048218597, 0.02131204, 0.0048608365, 0.056427978, -0.029722512, -0.022280851, 0.03397489, 0.15861669, -0.0032172804, 0.021461686, -0.034179244, 0.03242367, 0.045696042, -0.10642838, 0.044042706, 0.003619815, -0.03445944, 0.06782116, -0.012801977, -0.083491564, 0.048063237, -0.0009263491, 0.03926016, -0.003800945, 0.06431806, 0.008804617, 0.041459076, 0.019176882, 0.063215, 0.016872335, -0.07120825, 0.0026858407, -0.0061372668, 0.016006729, 0.034623176, -0.0009702338, 0.05586387, -0.0030038806, 0.10219119, 0.023867028, 0.017003942, 0.07522453, 0.03827543, 0.002119465, -0.047579825, 0.030801363, 0.055104297, -0.00926156, 0.060950216, -0.012564041, -0.0938483, 0.06749232, 0.0303093, 0.1260211, 0.008772238, 0.0937941, 0.03146898, -0.013548525, -0.04654987, 0.038247738, -0.0047283196, -0.021979854, -0.04481472, 0.009184976, 0.030558616, -0.035239127, 0.015711905, 0.079948395, -0.10273533, -0.033666693, 0.009253284, -0.013218568, 0.014513645, 0.011746366, -0.04836566, 0.00059039996, 0.056465007, 0.057913274, 0.046911363, 0.022496173, -0.016504057, -0.0009266135, 0.007562665, 0.024523543, 0.012681347, -0.0034720704, 0.014897689, 0.034027215, -0.035149213, 0.046610955, -0.38038146, -0.05560348, 0.056164417, 0.023633359, -0.020914413, 0.0017839101, 0.043425612, 0.0921522, 0.021333266, 0.032627117, 0.052366074, 0.059688427, -0.02425017, 0.07460727, 0.040419403, 0.018662684, -0.02174095, -0.015262358, 0.0041535227, -0.004320668, 0.001545062, 0.023696192, 0.053526532, 0.031027582, -0.030727778, -0.07266011, 0.01924883, -0.021610625, 0.03179455, -0.002117363, 0.037670195, -0.021235954, -0.03931032, -0.057163127, -0.046020538, 0.013852293, 0.007136301, 0.020461356, 0.027465757, 0.013625788, 0.09281521, 0.03537469, -0.15295835, -0.045262642, 0.013799362, 0.029831719, 0.06360841, 0.045387108, -0.008106462, 0.047562532, 0.026519125, 0.030519808, -0.035604805, 0.059504308, -0.010260606, 0.05920231, -0.039987702, 0.003475537, 0.012535757, 0.03711557, 0.022637982, 0.022368006, -0.013918498, 0.03144229, 0.02680179, 0.05283082, 0.09737034, 0.062140185, 0.047479317, 0.04292394, 0.041657448, 0.031671192, -0.01198203, -0.0398639, 0.050961364, -0.005440624, -0.013748672, 0.02486566, 0.06105261, 0.09158345, 0.047486037, 0.03503525, -0.0009857323, 0.017584834, 0.0015176772, -0.013855697, -0.0016783233, -0.032760657, 0.0073869363, 0.0032070065, 0.08748817, 0.062042974, -0.006563574, -0.01277716, 0.064277925, -0.048509046, 0.01998247, 0.015449057, 0.06161844, 0.0361277, 0.07378269, 0.031909943, 0.035593968, -0.021533003, 0.15151453, 0.009489467, 0.0077385777, 0.004732935, 0.06757376, 0.018628953, 0.03609718, 0.065334365, 0.046664603, 0.03710433, 0.023046834, 0.065034136, 0.021973003, 0.01938253, 0.0049545416, 0.009443422, 0.08657203, -0.006455585, 0.06113277, -0.009921393, 0.008861325, 0.021925068, 0.0073863543, 0.029231662, 0.018063372, -0.028237753, 0.06752595, -0.015746683, -0.06744447, -0.0019776542, -0.16144808, 0.055144247, -0.07052258, -0.0062173936, 0.005187277, 0.057623632, 0.008336536, 0.018794686, 0.08856226, 0.05324669, 0.023925344, -0.011277585, -0.015746504, -0.01888707, -0.010619123, 0.05960752, -0.02111604, 0.13263386, 0.053238407, 0.0423469, 0.03247613, 0.072818235, 0.039493106, -0.0080635715, 0.038805183, 0.05633994, 0.021095807, -0.022528276, 0.113213256, -0.040802993, 0.01971789, 0.00073800184, 0.04653605, 0.024364496, 0.051224973, 0.022803178, 0.06527072, -0.030100288, 0.02277551, 0.034268156, -0.0024341822, 0.030275142, -0.0043326514, 0.026949842, 0.03554525, 0.043582354, 0.037845742, 0.024644673, 0.06225431, 0.06668994, 0.042802095, -0.14308476, 0.028445719, -0.0057268543, 0.034851402, 0.04973769, -0.01673276, -0.0084733, -0.04498498, -0.01888843, 0.0018199912, -0.08666151, 0.03408551, 0.03374362, 0.016341621, -0.017816868, 0.027611718, 0.048712954, 0.03562084, 0.06156702, 0.06942091, 0.018424997, 0.010069236, -0.025854982, -0.005099922, 0.042129293, -0.018960087, -0.04267046, 0.003192464, 0.07610024, 0.01623567, 0.06430824, 0.045628317, -0.13192567, 0.00597194, 0.03359213, -0.051644783, -0.027538724, 0.047537625, 0.00078535493, -0.050269134, 0.06352181, 0.04414142, -0.00025181545, -0.011166945, 0.083493516, -0.022445189, 0.06386556, 0.009009819, 0.018880796, 0.046981215, -0.04803033, 0.20140722, 0.009405448, 0.011427641, 0.032028355, -0.039911997, 0.059231583, 0.10603366, -0.012695404, -0.018773954, 0.051107403, 0.004720434, 0.049031533, 0.008848073, -0.008443017, 0.068459414, -0.001594059, -0.037717424, 0.0083658025, 0.036570624, -0.009189262, -0.07422237, -0.03578154, 0.00016998129, -0.033594534, 0.04550856, -0.09751915, 0.031381045, -0.020289807, -0.025066, 0.05559659, 0.065852426, -0.030574895, 0.098877095, 0.024548644, 0.02716826, -0.0073690503, -0.006680294, -0.062504984, 0.001748584, -0.0015254011, 0.0030000636, 0.05166639, -0.03598367, 0.02785021, 0.019170346, -0.01893702, 0.006487694, -0.045320857, -0.042290565, 0.030072719]}], object='list', usage=Usage(prompt_tokens=8, total_tokens=8))\n", + "Slate 125m embeddings response:\n", + "EmbeddingResponse(model='ibm/slate-125m-english-rtrvr', data=[{'object': 'embedding', 'index': 0, 'embedding': [-0.037463713, -0.02141933, -0.02851813, 0.015519324, -0.08252965, 0.040418413, 0.0125358505, -0.015099016, 0.007372251, 0.043594047, -0.045923322, -0.024535796, -0.06683439, -0.023252856, -0.014445329, -0.007990043, -0.0038893714, 0.024145052, 0.002840671, -0.005213263, 0.025767032, -0.029234663, -0.022147253, -0.04008686, -0.0049467147, -0.005722156, 0.05712166, 0.02074406, -0.027984975, 0.011733741, 0.037084717, 0.0267332, 0.027662167, 0.018661365, 0.034368176, -0.016858159, 0.01525097, 0.0037685328, -0.029145032, -0.014014788, -0.026596593, -0.019313056, -0.034545943, -0.012755116, -0.027378004, -0.0022658114, 0.0671108, -0.011186887, -0.012560194, 0.07890564, 0.04370288, -0.002565922, 0.04558289, -0.015022389, 0.01721297, -0.02836881, 0.00028577668, 0.041560214, -0.028451115, 0.026690092, -0.03240052, 0.043185145, -0.048146088, -0.01863734, 0.014189055, 0.005409885, -0.004303547, 0.043854367, -0.08027855, 0.0036468406, -0.03761452, -0.01586453, 0.0015843573, -0.06557115, -0.017214078, 0.013112075, -0.063624665, -0.059002113, -0.027906772, -0.0104140695, -0.0122148385, 0.002914942, 0.009600896, 0.024618316, 0.0028588492, -0.04129038, -0.0066302163, -0.016593395, 0.0119156595, 0.030668158, 0.032204323, -0.008526114, 0.031477567, -0.027671225, -0.021325896, -0.012719999, 0.020595504, -0.010196725, 0.016694892, 0.015447107, 0.033599768, 0.0015109212, 0.055442166, -0.032922138, 0.032867074, 0.034223255, 0.018267235, 0.044258785, -0.009512916, -0.01888108, 0.0020811916, -0.071849406, -0.029209733, 0.030071445, 0.04898721, 0.03807559, 0.030091342, 0.0049845255, 0.011301079, 0.0060062855, -0.052550614, -0.040027767, -0.04539995, -0.069943875, 0.052881725, 0.015551356, -0.0016604571, 0.0021608798, 0.055507053, -0.015404854, -0.0023839937, 0.0070840786, 0.042537935, -0.045489613, 0.018908504, -0.015565469, 0.015916781, 0.07333876, 0.0034915418, -0.0029724848, 0.019170308, 0.02221138, -0.027242986, -0.003735747, -0.02341423, -0.0037938543, 0.0104211755, -0.06185881, -0.036718667, -0.02746382, -0.026462527, -0.050701175, 0.0057923957, 0.040674523, -0.019840682, -0.030195065, 0.045316722, 0.017369563, -0.031288657, -0.047546197, 0.026255054, -0.0049950704, -0.040272273, 0.0005752177, 0.03959872, -0.0073655704, -0.025617458, -0.009416491, -0.019514928, -0.07619169, 0.0051972694, 0.016387343, -0.012366861, -0.009152257, -0.035955105, -0.05794065, 0.019153351, -0.0461187, 0.024734644, 0.0031722176, 0.06610593, -0.0046516205, -0.04635891, 0.02524459, 0.004230386, 0.06153266, -0.0008394812, -0.013522857, 0.029861225, -0.00394871, -0.037432022, 0.0483034, 0.02181303, 0.015967155, 0.06181817, -0.018545056, 0.044176213, -0.07024062, -0.013022128, -0.0087189535, -0.025292343, 0.040448178, -0.051455554, -0.014017804, 0.012191985, 0.0071282317, -0.015855217, 0.013618914, -0.0060378346, -0.057781402, -0.035322957, -0.013627626, -0.027318006, -0.27732822, -0.007108157, 0.012321971, -0.15896526, -0.03793523, -0.025426138, 0.020721687, -0.04701553, -0.004927499, 0.010541978, -0.003212021, -0.0023603817, -0.052153032, 0.043272667, 0.024041472, -0.031666223, 0.0017891804, 0.026806207, -0.026526717, 0.0023138188, 0.024067048, 0.03326347, -0.039004102, -0.0004279829, 0.007266309, -0.008940641, 0.03715139, -0.037960306, 0.01647343, -0.022163782, 0.07456727, -0.0013284415, -0.029121747, 0.012727488, -0.007229313, 0.03177136, -0.08142398, 0.010223168, -0.025942598, -0.23807198, 0.022616733, -0.03925926, 0.05572623, -0.00020389797, -0.0022259122, -0.007885641, -0.00719495, 0.0018412926, 0.018953165, -0.009946787, 0.03723944, -0.015900994, 0.013648507, 0.010997674, -0.018918132, 0.013143112, 0.032894272, -0.05800237, 0.011163258, 0.025205074, -0.017001726, 0.03673705, -0.011551997, 0.06637543, -0.033003606, -0.041392814, -0.004078506, 0.03916763, -0.0022711542, 0.058338877, -0.034323692, -0.033700593, 0.01051642, 0.035579532, -0.01997833, 0.002977113, 0.06590587, 0.042783573, 0.020624464, 0.029172791, -0.035136282, 0.02035436, 0.05696583, -0.010200334, -0.0010580813, -0.024785697, -0.014516442, -0.030100575, -0.03807279, 0.042534467, -0.0281041, -0.05331885, -0.019467393, 0.016051197, 0.012470333, -0.008369627, 0.002254233, 0.026580654, -0.04541506, -0.018085537, -0.034577485, -0.0014747214, 0.0005770179, 0.0043190396, -0.004989785, 0.007569717, 0.010167482, -0.03335266, -0.015255423, 0.07341545, 0.012114007, -0.0010415721, 0.008754641, 0.05932771, 0.030799353, 0.026148474, -0.0069155577, -0.056865778, 0.0038446637, -0.010079895, 0.013511311, 0.023351224, -0.049000103, -0.013028001, -0.04957143, -0.031393193, 0.040289443, 0.063747466, 0.046358805, 0.0023754216, -0.0054107807, -0.020128531, 0.0013747461, -0.018183928, -0.04754063, -0.0064625163, 0.0417791, 0.06087331, -0.012241535, 0.04185439, 0.03641727, -0.02044306, -0.061368305, -0.023353308, 0.055897385, -0.047081504, 0.012900442, -0.018708078, 0.0028819577, 0.006964468, 0.0008757072, 0.04605831, 0.01716345, -0.004099444, -0.015493673, 0.021323929, -0.011252118, -0.02278577, 0.01893121, 0.009134488, 0.021568391, 0.011066748, -0.018853422, 0.027866907, -0.02831057, -0.010147286, 0.014807969, -0.03266599, -0.06711559, 0.038546126, 0.0031859868, -0.029038243, 0.046595056, 0.036973156, -0.033408422, 0.021968717, -0.011411975, 0.006584961, 0.072844714, -0.005873538, 0.029435376, 0.061169676, -0.02318868, 0.051129397, 0.014791153, -0.009028991, -0.021579748, 0.02669236, 0.029696332, -0.063952625, -0.061506465, -0.00080902094, 0.06850867, -0.09809231, -0.005534635, 0.066767104, -0.041267477, 0.046568397, 0.00983124, -0.0048434925, 0.038644254, 0.04096419, 0.0023063375, 0.014526287, 0.014016995, 0.020224908, 0.007113328, -0.0732543, -0.0054818415, 0.05807576, 0.022461535, 0.21100426, -0.009597197, -0.020674499, 0.010743241, -0.046834, -0.0068005333, 0.04918187, -0.06680011, -0.025018543, 0.016360015, 0.100744724, -0.019944709, -0.052390855, -0.0034876189, 0.031699855, -0.03024188, 0.009384044, -0.073849924, 0.01846066, -0.017075414, 0.0067319535, 0.045643695, 0.0121267075, 0.014980903, -0.0022226444, -0.015187039, 0.040638167, 0.023607453, -0.018353134, 0.007413985, 0.03487914, 0.018997269, -0.0107962405, -0.0040080273, 0.001454658, -0.023004232, -0.03065838, -0.0691732, -0.009669473, -0.017253181, 0.100617275, -0.00028453665, -0.055184573, -0.04010461, -0.022628073, -0.02138574, -0.00011931983, -0.021988528, 0.021569526, 0.018913478, -0.07588871, -0.030895703, -0.045679674, 0.03548181, 0.05806986, -0.00313453, 0.005607964, 0.014474551, -0.016833752, -0.022846023, 0.03665983, 0.04312398, 0.006030178, 0.020107903, -0.067837745, -0.039261904, -0.013903933, -0.011238981, -0.091779895, 0.03393072, 0.03576862, -0.016447216, -0.013628061, 0.035994843, 0.02442105, 0.0013356373, -0.013639993, -0.0070654624, -0.031047037, 0.0321763, 0.019488426, 0.030912274, -0.018131692, 0.034129236, -0.038152352, -0.020318052, 0.012934771, -0.0038958737, 0.029313264, 0.0609006, -0.06022117, -0.016697206, -0.030089315, -0.0030464267, -0.05011375, 0.016849633, -0.01935251, 0.00033423092, 0.018090008, 0.034528963, 0.015720658, 0.006443832, 0.0024674414, 0.0033006326, -0.011959118, -0.014686165, 0.00851113, 0.032130115, 0.016566927, -0.0048006177, -0.041135546, 0.017366901, 0.014404645, 0.0014093819, -0.039899524, -0.020875102, -0.01322629, -0.010891931, 0.019460721, -0.098985165, -0.03990147, 0.035807386, 0.05274234, -0.017714208, 0.0023620757, 0.022553496, 0.010935722, -0.016535437, -0.014505468, -0.005573891, -0.029528206, -0.010998497, 0.011297328, 0.007440231, 0.054734096, -0.035311602, 0.07038191, -0.034328025, -0.0109814005, -0.00578824, -0.009286793, 0.06692834, -0.040116422, -0.030043483, -0.010882302, -0.024094587, 0.026659116, -0.0637435, -0.022305744, 0.024388585, 0.011812823, -0.022778027, -0.0039024823, 0.027778644, 0.010566278, 0.011030791, -0.0021155484, 0.018014789, -0.03458981, 0.02546183, -0.11745906, 0.038193583, 0.0019787792, 0.01639592, 0.013218127, -0.012434678, -0.047858853, 0.006662704, 0.033221778, 0.008376927, -0.011822234, 0.01202769, 0.008761578, -0.04075117, 0.0025187496, 0.0026266004, 0.029762473, 0.009570205, -0.03644678, -0.033258904, -0.030776607, 0.05373578, 0.010904848, 0.040284622, 0.02707032, 0.021803873, -0.022011256, -0.05517991, -0.005213912, 0.009023477, -0.011895841, -0.026821174, -0.009035418, -0.021059638, 0.025536137, -0.053264923, 0.032206282, 0.020235807, 0.018660447, 0.0028790566, -0.019914437, 0.097842626, 0.027617158, 0.020276038, -0.014215543, 0.012761584, 0.032757074, 0.061124176, 0.049016643, -0.016509317, -0.03750349, -0.03449537, -0.02039439, -0.051360182, -0.041909404, 0.016175032, 0.040492736, 0.031218654, 0.0020242895, -0.032167237, 0.019398497, 0.057013687, 0.0031299617, 0.019177254, 0.015395364, -0.034078192, 0.041325297, 0.044380017, -0.004446819, 0.019610956, -0.030034903, 0.008468295, 0.03065914, -0.009548659, -0.07113981, 0.051648173, 0.03746448, -0.021847434, 0.01844844, 0.01333424, -0.001188216, 0.012330977, -0.056448817, 0.0008659569, 0.011183285, 0.006780519, -0.007357356, 0.05263679, -0.024631461, 0.00519591, -0.052165415, -0.03250626, -0.009370051, 0.00292325, -0.007187242, 0.029566163, -0.049605303, -0.02625627, -0.003157652, 0.052691437, -0.03589223, 0.03889354, -0.0035060279, 0.024555178, -0.00929779, -0.05037946, -0.022402484, 0.030634355, -0.03300659, -0.0063623153, 0.0027472514, 0.03196768, -0.019257778, 0.0089001395, 0.008908001, 0.018918095, 0.059574094, -0.02838763, 0.018203752, -0.06708146, -0.022670228, -0.013985525, 0.045018435, 0.011420395, -0.008649952, -0.027328938, -0.03527292, -0.0038555951, 0.017597001, 0.024891963, -0.0039160745, -0.015237065, -0.0008723479, -0.018641612, -0.036825016, -0.028743235, 0.00091956893, 0.00030935413, -0.048641082, 0.03744432, -0.024196126, 0.009848505, -0.043836866, 0.0044429195, 0.013709644, 0.06295503, -0.016072558, 0.01277375, -0.03548109, 0.003398656, 0.025347201, 0.019685786, 0.00758199, -0.016122513, -0.039198015, -0.0023108267, -0.0041584945, 0.005161282, 0.00089106365, 0.0076085874, -0.055768084, -0.0058975955, 0.007728267, 0.00076985586, -0.013469806, -0.031578194, -0.0138569595, 0.044540506, -0.0408136, -0.015252405, 0.06232591, -0.04198101, 0.0048899655, -0.0030694627, -0.025022805, -0.010789543, -0.025350742, 0.007836728, 0.024604483, -5.385127e-05, -0.0021367231, -0.01704561, -0.001425816, 0.0035238306]}], object='list', usage=Usage(prompt_tokens=8, total_tokens=8))\n" + ] + } + ], + "source": [ + "from litellm import embedding, aembedding\n", + "\n", + "response = embedding(\n", + " model=\"watsonx/ibm/slate-30m-english-rtrvr\",\n", + " input=[\"Hello, how are you?\"],\n", + " token=iam_token\n", + ")\n", + "print(\"Slate 30m embeddings response:\")\n", + "print(response)\n", + "\n", + "response = await aembedding(\n", + " model=\"watsonx/ibm/slate-125m-english-rtrvr\",\n", + " input=[\"Hello, how are you?\"],\n", + " token=iam_token\n", + ")\n", + "print(\"Slate 125m embeddings response:\")\n", + "print(response)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbook/liteLLM_Langchain_Demo.ipynb b/cookbook/liteLLM_Langchain_Demo.ipynb new file mode 100644 index 000000000..6e796dd08 --- /dev/null +++ b/cookbook/liteLLM_Langchain_Demo.ipynb @@ -0,0 +1,195 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "5hwntUxTMxEk" + }, + "source": [ + "# Langchain liteLLM Demo Notebook\n", + "## Use `ChatLiteLLM()` to instantly support 50+ LLM models\n", + "Langchain Docs: https://python.langchain.com/docs/integrations/chat/litellm\n", + "\n", + "Call all LLM models using the same I/O interface\n", + "\n", + "Example usage\n", + "```python\n", + "ChatLiteLLM(model=\"gpt-3.5-turbo\")\n", + "ChatLiteLLM(model=\"claude-2\", temperature=0.3)\n", + "ChatLiteLLM(model=\"command-nightly\")\n", + "ChatLiteLLM(model=\"replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aPNAUsCvB6Sv" + }, + "outputs": [], + "source": [ + "!pip install litellm langchain" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "MOhRaVnhB-0J" + }, + "outputs": [], + "source": [ + "import os\n", + "from langchain.chat_models import ChatLiteLLM\n", + "from langchain.schema import HumanMessage" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TahkCtlmCD65", + "outputId": "5ddda40f-f252-4830-a8d6-bd3fa68ae487" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='I am an AI model known as GPT-3, developed by OpenAI.', additional_kwargs={}, example=False)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.environ['OPENAI_API_KEY'] = \"\"\n", + "chat = ChatLiteLLM(model=\"gpt-3.5-turbo\")\n", + "messages = [\n", + " HumanMessage(\n", + " content=\"what model are you\"\n", + " )\n", + "]\n", + "chat(messages)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uXNDyU4jChcs", + "outputId": "bd74b4c6-f9fb-42dc-fdc3-9240d50503ba" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content=\" I'm Claude, an AI assistant created by Anthropic.\", additional_kwargs={}, example=False)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.environ['ANTHROPIC_API_KEY'] = \"\"\n", + "chat = ChatLiteLLM(model=\"claude-2\", temperature=0.3)\n", + "messages = [\n", + " HumanMessage(\n", + " content=\"what model are you\"\n", + " )\n", + "]\n", + "chat(messages)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "czbDJRKcC7BV", + "outputId": "892e147d-831e-4884-dc71-040f92c3fb8e" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content=\" I'm an AI based based on LLaMA models (LLaMA: Open and Efficient Foundation Language Models, Touvron et al. 2023), my knowledge was built from a massive corpus of text, including books, articles, and websites, and I was trained using a variety of machine learning algorithms. My model architecture is based on the transformer architecture, which is particularly well-suited for natural language processing tasks. My team of developers and I are constantly working to improve and fine-tune my performance, and I am always happy to help with any questions you may have!\", additional_kwargs={}, example=False)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.environ['REPLICATE_API_TOKEN'] = \"\"\n", + "chat = ChatLiteLLM(model=\"replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1\")\n", + "messages = [\n", + " HumanMessage(\n", + " content=\"what model are you?\"\n", + " )\n", + "]\n", + "chat(messages)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tZxpq5PDDY9Y", + "outputId": "7e86f4ed-ac7a-45e1-87d0-217da6cad666" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content=' I am an AI-based large language model, or Chatbot, built by the company Cohere. I am designed to have polite, helpful, inclusive conversations with users. I am always learning and improving, and I am constantly being updated with new information and improvements.\\n\\nI am currently in the development phase, and I am not yet available to the general public. However, I am currently being used by a select group of users for testing and feedback.\\n\\nI am a large language model, which means that I am trained on a massive amount of data and can understand and respond to a wide range of requests and questions. I am also designed to be flexible and adaptable, so I can be customized to suit the needs of different users and use cases.\\n\\nI am currently being used to develop a range of applications, including customer service chatbots, content generation tools, and language translation services. I am also being used to train other language models and to develop new ways of using large language models.\\n\\nI am constantly being updated with new information and improvements, so I am always learning and improving. I am also being used to develop new ways of using large language models, so I am always evolving and adapting to new use cases and requirements.', additional_kwargs={}, example=False)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.environ['COHERE_API_KEY'] = \"\"\n", + "chat = ChatLiteLLM(model=\"command-nightly\")\n", + "messages = [\n", + " HumanMessage(\n", + " content=\"what model are you?\"\n", + " )\n", + "]\n", + "chat(messages)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/liteLLM_Ollama.ipynb b/cookbook/liteLLM_Ollama.ipynb new file mode 100644 index 000000000..fe0ed3811 --- /dev/null +++ b/cookbook/liteLLM_Ollama.ipynb @@ -0,0 +1,289 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install litellm # version 0.1.724 or higher " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Call Ollama - llama2 with Streaming" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "{'role': 'assistant', 'content': ' I'}\n", + "{'role': 'assistant', 'content': \"'\"}\n", + "{'role': 'assistant', 'content': 'm'}\n", + "{'role': 'assistant', 'content': ' L'}\n", + "{'role': 'assistant', 'content': 'La'}\n", + "{'role': 'assistant', 'content': 'MA'}\n", + "{'role': 'assistant', 'content': ','}\n", + "{'role': 'assistant', 'content': ' an'}\n", + "{'role': 'assistant', 'content': ' A'}\n", + "{'role': 'assistant', 'content': 'I'}\n", + "{'role': 'assistant', 'content': ' assistant'}\n", + "{'role': 'assistant', 'content': ' developed'}\n", + "{'role': 'assistant', 'content': ' by'}\n", + "{'role': 'assistant', 'content': ' Meta'}\n", + "{'role': 'assistant', 'content': ' A'}\n", + "{'role': 'assistant', 'content': 'I'}\n", + "{'role': 'assistant', 'content': ' that'}\n", + "{'role': 'assistant', 'content': ' can'}\n", + "{'role': 'assistant', 'content': ' understand'}\n", + "{'role': 'assistant', 'content': ' and'}\n", + "{'role': 'assistant', 'content': ' respond'}\n", + "{'role': 'assistant', 'content': ' to'}\n", + "{'role': 'assistant', 'content': ' human'}\n", + "{'role': 'assistant', 'content': ' input'}\n", + "{'role': 'assistant', 'content': ' in'}\n", + "{'role': 'assistant', 'content': ' a'}\n", + "{'role': 'assistant', 'content': ' convers'}\n", + "{'role': 'assistant', 'content': 'ational'}\n", + "{'role': 'assistant', 'content': ' manner'}\n", + "{'role': 'assistant', 'content': '.'}\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "response = completion(\n", + " model=\"ollama/llama2\", \n", + " messages=[{ \"content\": \"respond in 20 words. who are you?\",\"role\": \"user\"}], \n", + " api_base=\"http://localhost:11434\",\n", + " stream=True\n", + ")\n", + "print(response)\n", + "for chunk in response:\n", + " print(chunk['choices'][0]['delta'])\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Call Ollama - Llama2 with Acompletion + Streaming" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: async_generator in /Users/ishaanjaffer/Library/Python/3.9/lib/python/site-packages (1.10)\n" + ] + } + ], + "source": [ + "# litellm uses async_generator for ollama async streaming, ensure it's installed\n", + "!pip install async_generator" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'choices': [{'delta': {'role': 'assistant', 'content': ' I'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'm'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' just'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' an'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' A'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'I'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' I'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' don'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': \"'\"}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 't'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' have'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' access'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' real'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '-'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'time'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' weather'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' information'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' or'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' current'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' conditions'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' in'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' specific'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' location'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' живело'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' can'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' provide'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' you'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' with'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' weather'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' forec'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': 'asts'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' information'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' for'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' your'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' location'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' if'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' you'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' would'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' like'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' Please'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' let'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' me'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' know'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' where'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' you'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' are'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' located'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ','}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' and'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' I'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' will'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' do'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' my'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' best'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' to'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' assist'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': ' you'}}]}\n", + "{'choices': [{'delta': {'role': 'assistant', 'content': '.'}}]}\n", + "None\n" + ] + } + ], + "source": [ + "import litellm\n", + "\n", + "async def async_ollama():\n", + " response = await litellm.acompletion(\n", + " model=\"ollama/llama2\", \n", + " messages=[{ \"content\": \"what's the weather\" ,\"role\": \"user\"}], \n", + " api_base=\"http://localhost:11434\", \n", + " stream=True\n", + " )\n", + " async for chunk in response:\n", + " print(chunk)\n", + "\n", + "result = await async_ollama()\n", + "print(result)\n", + "\n", + "try:\n", + " async for chunk in result:\n", + " print(chunk)\n", + "except TypeError: # the last chunk is None from Ollama, this raises an error with async streaming\n", + " pass" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Completion Call" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" I'm LLaMA, an AI assistant developed by Meta AI that can understand and respond to human input in a conversational manner.\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-ea7b8242-791f-4656-ba12-e098edeb960e\",\n", + " \"created\": 1695324686.6696231,\n", + " \"response_ms\": 4072.3050000000003,\n", + " \"model\": \"ollama/llama2\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 10,\n", + " \"completion_tokens\": 27,\n", + " \"total_tokens\": 37\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "response = completion(\n", + " model=\"ollama/llama2\", \n", + " messages=[{ \"content\": \"respond in 20 words. who are you?\",\"role\": \"user\"}], \n", + " api_base=\"http://localhost:11434\"\n", + ")\n", + "print(response)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbook/liteLLM_Replicate_Demo.ipynb b/cookbook/liteLLM_Replicate_Demo.ipynb new file mode 100644 index 000000000..b93d9a587 --- /dev/null +++ b/cookbook/liteLLM_Replicate_Demo.ipynb @@ -0,0 +1,238 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "YV6L5fNv7Kep" + }, + "source": [ + "# Call Replicate LLMs using chatGPT Input/Output Format\n", + "This tutorial covers using the following Replicate Models with liteLLM\n", + "\n", + "- [StableLM Tuned Alpha 7B](https://replicate.com/stability-ai/stablelm-tuned-alpha-7b)\n", + "- [LLAMA-2 70B Chat](https://replicate.com/replicate/llama-2-70b-chat)\n", + "- [A16z infra-LLAMA-2 7B Chat](https://replicate.com/a16z-infra/llama-2-7b-chat)\n", + "- [Dolly V2 12B](https://replicate.com/replicate/dolly-v2-12b)\n", + "- [Vicuna 13B](https://replicate.com/replicate/vicuna-13b)\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "TO-EdF84O9QT" + }, + "outputs": [], + "source": [ + "# install liteLLM\n", + "!pip install litellm" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "mpHTbTqQ8fey" + }, + "source": [ + "Imports & Set ENV variables\n", + "Get your Replicate Key: https://replicate.com/account/api-tokens" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "kDbgfcU8O-dW" + }, + "outputs": [], + "source": [ + "from litellm import completion\n", + "import os\n", + "os.environ['REPLICATE_API_TOKEN'] = ' ' # @param\n", + "user_message = \"Hello, whats the weather in San Francisco??\"\n", + "messages = [{ \"content\": user_message,\"role\": \"user\"}]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "1KmkOdzLSOmJ" + }, + "source": [ + "## Call Replicate Models using completion(model, messages) - chatGPT format" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XJ4nh4SnRzHP", + "outputId": "986c0544-bb40-4915-f00f-498b0e518307" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "replicate is not installed. Installing...\n", + "Response from stability-ai/stablelm-tuned-alpha-7b:c49dae362cbaecd2ceabb5bd34fdb68413c4ff775111fea065d259d577757beb \n", + "]\n", + "\n", + "{'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': \"I'm sorry for you being unable to access this content as my training data only goes up until 2023/03. However I can tell you what your local weather forecast may look like at any time of year with respect to current conditions:\"}}], 'created': 1691611730.7224207, 'model': 'stability-ai/stablelm-tuned-alpha-7b:c49dae362cbaecd2ceabb5bd34fdb68413c4ff775111fea065d259d577757beb', 'usage': {'prompt_tokens': 9, 'completion_tokens': 49, 'total_tokens': 58}}\n", + "Response from replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1 \n", + "]\n", + "\n", + "{'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': \" Hello! I'm happy to help you with your question. However, I must point out that the question itself may not be meaningful. San Francisco is a city located in California, USA, and it is not possible for me to provide you with the current weather conditions there as I am a text-based AI language model and do not have access to real-time weather data. Additionally, the weather in San Francisco can vary greatly depending on the time of year, so it would be best to check a reliable weather source for the most up-to-date information.\\n\\nIf you meant to ask a different question, please feel free to rephrase it, and I will do my best to assist you in a safe and positive manner.\"}}], 'created': 1691611745.0269957, 'model': 'replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1', 'usage': {'prompt_tokens': 9, 'completion_tokens': 143, 'total_tokens': 152}}\n", + "Response from a16z-infra/llama-2-7b-chat:4f0b260b6a13eb53a6b1891f089d57c08f41003ae79458be5011303d81a394dc \n", + "]\n", + "\n", + "{'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': \" Hello! I'm here to help you with your question. However, I must inform you that the weather in San Francisco can be quite unpredictable and can change rapidly. It's important to check reliable sources such as AccuWeather or the National Weather Service for the most up-to-date and accurate information about the weather in San Francisco.\\nI cannot provide you with real-time weather data or forecasts as I'm just an AI and do not have access to current weather conditions or predictions. But I can suggest some trustworthy websites or apps where you can find the latest weather updates:\\n* AccuWeather (accuweather.com)\\n* The Weather Channel (weather.com)\\n* Dark Sky (darksky.net)\\n* Weather Underground (wunderground.com)\\nRemember, it's always best to consult multiple sources for the most accurate information when planning your day or trip. Enjoy your day!\"}}], 'created': 1691611748.7723358, 'model': 'a16z-infra/llama-2-7b-chat:4f0b260b6a13eb53a6b1891f089d57c08f41003ae79458be5011303d81a394dc', 'usage': {'prompt_tokens': 9, 'completion_tokens': 174, 'total_tokens': 183}}\n", + "Response from replicate/dolly-v2-12b:ef0e1aefc61f8e096ebe4db6b2bacc297daf2ef6899f0f7e001ec445893500e5 \n", + "]\n", + "\n", + "{'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': 'Its 68 degrees right now in San Francisco! The temperature will be rising through the week and i expect it to reach 70 on Thursdays and Friday. Skies are expected to be partly cloudy with some sun breaks throughout the day.\\n\\n'}}], 'created': 1691611752.2002115, 'model': 'replicate/dolly-v2-12b:ef0e1aefc61f8e096ebe4db6b2bacc297daf2ef6899f0f7e001ec445893500e5', 'usage': {'prompt_tokens': 9, 'completion_tokens': 48, 'total_tokens': 57}}\n", + "Response from replicate/vicuna-13b:6282abe6a492de4145d7bb601023762212f9ddbbe78278bd6771c8b3b2f2a13b \n", + "]\n", + "\n", + "{'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': ''}}], 'created': 1691611752.8998356, 'model': 'replicate/vicuna-13b:6282abe6a492de4145d7bb601023762212f9ddbbe78278bd6771c8b3b2f2a13b', 'usage': {'prompt_tokens': 9, 'completion_tokens': 0, 'total_tokens': 9}}\n" + ] + } + ], + "source": [ + "llama_2 = \"replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1\"\n", + "llama_2_7b = \"a16z-infra/llama-2-7b-chat:4f0b260b6a13eb53a6b1891f089d57c08f41003ae79458be5011303d81a394dc\"\n", + "dolly_v2 = \"replicate/dolly-v2-12b:ef0e1aefc61f8e096ebe4db6b2bacc297daf2ef6899f0f7e001ec445893500e5\"\n", + "vicuna = \"replicate/vicuna-13b:6282abe6a492de4145d7bb601023762212f9ddbbe78278bd6771c8b3b2f2a13b\"\n", + "models = [llama_2, llama_2_7b, dolly_v2, vicuna]\n", + "for model in models:\n", + " response = completion(model=model, messages=messages)\n", + " print(f\"Response from {model} \\n]\\n\")\n", + " print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zlTVLB-7PTV_", + "outputId": "5182275b-3108-46fa-a2cf-745fac4ad110" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi\n", + " there!\n", + " The\n", + " current\n", + " forecast\n", + " for\n", + " today's\n", + " high\n", + " temperature\n", + " ranges\n", + " from\n", + " 75\n", + " degrees\n", + " Fahrenheit\n", + " all\n", + " day\n", + " to\n", + " 83\n", + " degrees\n", + " Fahrenheit\n", + " with\n", + " possible\n", + " isolated\n", + " thunderstorms\n", + " during\n", + " the\n", + " afternoon\n", + " hours,\n", + " mainly\n", + " at\n", + " sunset\n", + " through\n", + " early\n", + " evening. The\n", + " Pacific\n", + " Ocean\n", + " has\n", + " a\n", + " low\n", + " pressure\n", + " of\n", + " 926\n", + " mb\n", + " and\n", + " mostly\n", + " cloud\n", + " cover\n", + " in\n", + " this\n", + " region\n", + " on\n", + " sunny\n", + " days\n", + " due\n", + " to\n", + " warming\n", + " temperatures\n", + " above\n", + " average\n", + " along\n", + " most\n", + " coastal\n", + " areas\n", + " and\n", + " ocean\n", + " breezes.<|USER|>\n" + ] + } + ], + "source": [ + "# @title Stream Responses from Replicate - Outputs in the same format used by chatGPT streaming\n", + "response = completion(model=llama_2, messages=messages, stream=True)\n", + "\n", + "for chunk in response:\n", + " print(chunk['choices'][0]['delta'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "t7WMRuL-8NrO" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/liteLLM_Streaming_Demo.ipynb b/cookbook/liteLLM_Streaming_Demo.ipynb new file mode 100644 index 000000000..0456c5451 --- /dev/null +++ b/cookbook/liteLLM_Streaming_Demo.ipynb @@ -0,0 +1,226 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# [STREAMING] OpenAI, Anthropic, Replicate, Cohere using liteLLM\n", + "In this tutorial:\n", + "Note: All inputs/outputs are in the format used by `gpt-3.5-turbo`\n", + "\n", + "- Call all models in the same input format [**with streaming**]:\n", + "\n", + " `completion(model, messages, stream=True)`\n", + "- All streaming generators are accessed at `chunk['choices'][0]['delta']`\n", + "\n", + "The following Models are covered in this tutorial\n", + "- [GPT-3.5-Turbo](https://platform.openai.com/docs/models/gpt-3-5)\n", + "- [Claude-2](https://www.anthropic.com/index/claude-2)\n", + "- [StableLM Tuned Alpha 7B](https://replicate.com/stability-ai/stablelm-tuned-alpha-7b)\n", + "- [A16z infra-LLAMA-2 7B Chat](https://replicate.com/a16z-infra/llama-2-7b-chat)\n", + "- [Vicuna 13B](https://replicate.com/replicate/vicuna-13b)\n", + "- [Cohere - Command Nightly]()\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "YV6L5fNv7Kep" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "TO-EdF84O9QT" + }, + "outputs": [], + "source": [ + "# install liteLLM\n", + "!pip install litellm==0.1.369" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Imports & Set ENV variables\n", + "Get your API Keys\n", + "\n", + "https://platform.openai.com/account/api-keys\n", + "\n", + "https://replicate.com/account/api-tokens\n", + "\n", + "https://console.anthropic.com/account/keys\n", + "\n", + "https://dashboard.cohere.ai/api-keys\n" + ], + "metadata": { + "id": "mpHTbTqQ8fey" + } + }, + { + "cell_type": "code", + "source": [ + "from litellm import completion\n", + "import os\n", + "\n", + "os.environ['OPENAI_API_KEY'] = '' # @param\n", + "os.environ['REPLICATE_API_TOKEN'] = '' # @param\n", + "os.environ['ANTHROPIC_API_KEY'] = '' # @param\n", + "os.environ['COHERE_API_KEY'] = '' # @param" + ], + "metadata": { + "id": "kDbgfcU8O-dW" + }, + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Set Messages" + ], + "metadata": { + "id": "1KmkOdzLSOmJ" + } + }, + { + "cell_type": "code", + "source": [ + "user_message = \"Hello, whats the weather in San Francisco??\"\n", + "messages = [{ \"content\": user_message,\"role\": \"user\"}]" + ], + "metadata": { + "id": "xIEeOhVH-oh6" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Calling Models using liteLLM Streaming -\n", + "\n", + "## `completion(model, messages, stream)`" + ], + "metadata": { + "id": "9SOCVRC1L-G3" + } + }, + { + "cell_type": "code", + "source": [ + "# replicate models #######\n", + "stability_ai = \"stability-ai/stablelm-tuned-alpha-7b:c49dae362cbaecd2ceabb5bd34fdb68413c4ff775111fea065d259d577757beb\"\n", + "llama_2_7b = \"a16z-infra/llama-2-7b-chat:4f0b260b6a13eb53a6b1891f089d57c08f41003ae79458be5011303d81a394dc\"\n", + "vicuna = \"replicate/vicuna-13b:6282abe6a492de4145d7bb601023762212f9ddbbe78278bd6771c8b3b2f2a13b\"\n", + "\n", + "models = [\"gpt-3.5-turbo\", \"claude-2\", stability_ai, llama_2_7b, vicuna, \"command-nightly\"] # command-nightly is Cohere\n", + "for model in models:\n", + " replicate = (model == stability_ai or model==llama_2_7b or model==vicuna) # let liteLLM know if a model is replicate, using this optional param, `replicate=True`\n", + " response = completion(model=model, messages=messages, stream=True, replicate=replicate)\n", + " print(f\"####################\\n\\nResponse from {model}\")\n", + " for i, chunk in enumerate(response):\n", + " if i < 5: # NOTE: LIMITING CHUNKS FOR THIS DEMO\n", + " print((chunk['choices'][0]['delta']))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XJ4nh4SnRzHP", + "outputId": "26b9fe10-b499-4a97-d60d-a8cb8f8030b8" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "####################\n", + "\n", + "Response from gpt-3.5-turbo\n", + "{\n", + " \"role\": \"assistant\",\n", + " \"content\": \"\"\n", + "}\n", + "{\n", + " \"content\": \"I\"\n", + "}\n", + "{\n", + " \"content\": \"'m\"\n", + "}\n", + "{\n", + " \"content\": \" sorry\"\n", + "}\n", + "{\n", + " \"content\": \",\"\n", + "}\n", + "####################\n", + "\n", + "Response from claude-2\n", + "{'role': 'assistant', 'content': ' Unfortunately'}\n", + "{'role': 'assistant', 'content': ' I'}\n", + "{'role': 'assistant', 'content': ' don'}\n", + "{'role': 'assistant', 'content': \"'t\"}\n", + "{'role': 'assistant', 'content': ' have'}\n", + "####################\n", + "\n", + "Response from stability-ai/stablelm-tuned-alpha-7b:c49dae362cbaecd2ceabb5bd34fdb68413c4ff775111fea065d259d577757beb\n", + "{'role': 'assistant', 'content': \"I'm\"}\n", + "{'role': 'assistant', 'content': ' sorry,'}\n", + "{'role': 'assistant', 'content': ' I'}\n", + "{'role': 'assistant', 'content': ' cannot'}\n", + "{'role': 'assistant', 'content': ' answer'}\n", + "####################\n", + "\n", + "Response from a16z-infra/llama-2-7b-chat:4f0b260b6a13eb53a6b1891f089d57c08f41003ae79458be5011303d81a394dc\n", + "{'role': 'assistant', 'content': ''}\n", + "{'role': 'assistant', 'content': ' Hello'}\n", + "{'role': 'assistant', 'content': '!'}\n", + "{'role': 'assistant', 'content': ' I'}\n", + "{'role': 'assistant', 'content': \"'\"}\n", + "####################\n", + "\n", + "Response from replicate/vicuna-13b:6282abe6a492de4145d7bb601023762212f9ddbbe78278bd6771c8b3b2f2a13b\n", + "{'role': 'assistant', 'content': 'Comment:'}\n", + "{'role': 'assistant', 'content': 'Hi! '}\n", + "{'role': 'assistant', 'content': 'How '}\n", + "{'role': 'assistant', 'content': 'are '}\n", + "{'role': 'assistant', 'content': 'you '}\n", + "####################\n", + "\n", + "Response from command-nightly\n", + "{'role': 'assistant', 'content': ' Hello'}\n", + "{'role': 'assistant', 'content': '!'}\n", + "{'role': 'assistant', 'content': ' '}\n", + "{'role': 'assistant', 'content': ' I'}\n", + "{'role': 'assistant', 'content': \"'m\"}\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "t7WMRuL-8NrO" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/cookbook/liteLLM_VertextAI_Example.ipynb b/cookbook/liteLLM_VertextAI_Example.ipynb new file mode 100644 index 000000000..0af012b34 --- /dev/null +++ b/cookbook/liteLLM_VertextAI_Example.ipynb @@ -0,0 +1,199 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using Google Palm (VertexAI) with liteLLM \n", + "### chat-bison, chat-bison@001, text-bison, text-bison@001" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install litellm==0.1.388" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set VertexAI Configs\n", + "Vertex AI requires the following:\n", + "* `vertex_project` - Your Project ID\n", + "* `vertex_location` - Your Vertex AI region\n", + "Both can be found on: https://console.cloud.google.com/\n", + "\n", + "VertexAI uses Application Default Credentials, see https://cloud.google.com/docs/authentication/external/set-up-adc for more information on setting this up\n", + "\n", + "NOTE: VertexAI requires you to set `application_default_credentials.json`, this can be set by running `gcloud auth application-default login` in your terminal\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# set you Vertex AI configs\n", + "import litellm\n", + "from litellm import completion\n", + "\n", + "litellm.vertex_project = \"hardy-device-386718\"\n", + "litellm.vertex_location = \"us-central1\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Call VertexAI - chat-bison using liteLLM" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': LiteLLM LiteLLM is a large language model from Google AI that is designed to be lightweight and efficient. It is based on the Transformer architecture and has been trained on a massive dataset of text. LiteLLM is available as a pre-trained model that can be used for a variety of natural language processing tasks, such as text classification, question answering, and summarization.}}], 'created': 1692036777.831989, 'model': 'chat-bison'}\n" + ] + } + ], + "source": [ + "user_message = \"what is liteLLM \"\n", + "messages = [{ \"content\": user_message,\"role\": \"user\"}]\n", + "\n", + "# chat-bison or chat-bison@001 supported by Vertex AI (As of Aug 2023)\n", + "response = completion(model=\"chat-bison\", messages=messages)\n", + "print(response)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Call VertexAI - text-bison using liteLLM" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['text-bison', 'text-bison@001']\n" + ] + } + ], + "source": [ + "print(litellm.vertex_text_models)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': liteLLM is a low-precision variant of the large language model LLM 5. For a given text prompt, liteLLM can continue the text in a way that is both coherent and informative.}}], 'created': 1692036813.052487, 'model': 'text-bison@001'}\n" + ] + } + ], + "source": [ + "user_message = \"what is liteLLM \"\n", + "messages = [{ \"content\": user_message,\"role\": \"user\"}]\n", + "\n", + "# text-bison or text-bison@001 supported by Vertex AI (As of Aug 2023)\n", + "response = completion(model=\"text-bison@001\", messages=messages)\n", + "print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'role': 'assistant', 'content': liteLLM was originally developed by Google engineers as a lite version of LLM, which stands for large language model. It is a deep learning language model that is designed to be more efficient than traditional LLMs while still achieving comparable performance. liteLLM is built on Tensor2Tensor, a framework for building and training large neural networks. It is able to learn from massive amounts of text data and generate text that is both coherent and informative. liteLLM has been shown to be effective for a variety of tasks, including machine translation, text summarization, and question answering.}}], 'created': 1692036821.60951, 'model': 'text-bison'}\n" + ] + } + ], + "source": [ + "response = completion(model=\"text-bison\", messages=messages)\n", + "print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "liteLLM is a lightweight language model that is designed to be fast and efficient. It is based on the Transformer architecture, but it has been modified to reduce the number of parameters and the amount of computation required. This makes it suitable for use on devices with limited resources, such as mobile phones and embedded systems.\n", + "\n", + "liteLLM is still under development, but it has already been shown to be effective on a variety of tasks, including text classification, natural language inference, and machine translation. It is also being used to develop new applications, such as chatbots and language assistants.\n", + "\n", + "If you are interested in learning more about lite\n" + ] + } + ], + "source": [ + "response = completion(model=\"text-bison@001\", messages=messages, temperature=0.4, top_k=10, top_p=0.2)\n", + "print(response['choices'][0]['message']['content'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbook/liteLLM_clarifai_Demo.ipynb b/cookbook/liteLLM_clarifai_Demo.ipynb new file mode 100644 index 000000000..40ef2fcf9 --- /dev/null +++ b/cookbook/liteLLM_clarifai_Demo.ipynb @@ -0,0 +1,187 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LiteLLM Clarifai \n", + "This notebook walks you through on how to use liteLLM integration of Clarifai and call LLM model from clarifai with response in openAI output format." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pre-Requisites" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#install necessary packages\n", + "!pip install litellm\n", + "!pip install clarifai" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To obtain Clarifai Personal Access Token follow the steps mentioned in the [link](https://docs.clarifai.com/clarifai-basics/authentication/personal-access-tokens/)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "## Set Clarifai Credentials\n", + "import os\n", + "os.environ[\"CLARIFAI_API_KEY\"]= \"YOUR_CLARIFAI_PAT\" # Clarifai PAT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Mistral-large" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import litellm\n", + "\n", + "litellm.set_verbose=False" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mistral large response : ModelResponse(id='chatcmpl-6eed494d-7ae2-4870-b9c2-6a64d50a6151', choices=[Choices(finish_reason='stop', index=1, message=Message(content=\"In the grand tapestry of time, where tales unfold,\\nLies the chronicle of ages, a sight to behold.\\nA tale of empires rising, and kings of old,\\nOf civilizations lost, and stories untold.\\n\\nOnce upon a yesterday, in a time so vast,\\nHumans took their first steps, casting shadows in the past.\\nFrom the cradle of mankind, a journey they embarked,\\nThrough stone and bronze and iron, their skills they sharpened and marked.\\n\\nEgyptians built pyramids, reaching for the skies,\\nWhile Greeks sought wisdom, truth, in philosophies that lie.\\nRoman legions marched, their empire to expand,\\nAnd in the East, the Silk Road joined the world, hand in hand.\\n\\nThe Middle Ages came, with knights in shining armor,\\nFeudal lords and serfs, a time of both clamor and calm order.\\nThen Renaissance bloomed, like a flower in the sun,\\nA rebirth of art and science, a new age had begun.\\n\\nAcross the vast oceans, explorers sailed with courage bold,\\nDiscovering new lands, stories of adventure, untold.\\nIndustrial Revolution churned, progress in its wake,\\nMachines and factories, a whole new world to make.\\n\\nTwo World Wars raged, a testament to man's strife,\\nYet from the ashes rose hope, a renewed will for life.\\nInto the modern era, technology took flight,\\nConnecting every corner, bathed in digital light.\\n\\nHistory, a symphony, a melody of time,\\nA testament to human will, resilience so sublime.\\nIn every page, a lesson, in every tale, a guide,\\nFor understanding our past, shapes our future's tide.\", role='assistant'))], created=1713896412, model='https://api.clarifai.com/v2/users/mistralai/apps/completion/models/mistral-large/outputs', object='chat.completion', system_fingerprint=None, usage=Usage(prompt_tokens=13, completion_tokens=338, total_tokens=351))\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "messages = [{\"role\": \"user\",\"content\": \"\"\"Write a poem about history?\"\"\"}]\n", + "response=completion(\n", + " model=\"clarifai/mistralai.completion.mistral-large\",\n", + " messages=messages,\n", + " )\n", + "\n", + "print(f\"Mistral large response : {response}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Claude-2.1 " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Claude-2.1 response : ModelResponse(id='chatcmpl-d126c919-4db4-4aa3-ac8f-7edea41e0b93', choices=[Choices(finish_reason='stop', index=1, message=Message(content=\" Here's a poem I wrote about history:\\n\\nThe Tides of Time\\n\\nThe tides of time ebb and flow,\\nCarrying stories of long ago.\\nFigures and events come into light,\\nShaping the future with all their might.\\n\\nKingdoms rise, empires fall, \\nLeaving traces that echo down every hall.\\nRevolutions bring change with a fiery glow,\\nToppling structures from long ago.\\n\\nExplorers traverse each ocean and land,\\nSeeking treasures they don't understand.\\nWhile artists and writers try to make their mark,\\nHoping their works shine bright in the dark.\\n\\nThe cycle repeats again and again,\\nAs humanity struggles to learn from its pain.\\nThough the players may change on history's stage,\\nThe themes stay the same from age to age.\\n\\nWar and peace, life and death,\\nLove and strife with every breath.\\nThe tides of time continue their dance,\\nAs we join in, by luck or by chance.\\n\\nSo we study the past to light the way forward, \\nHeeding warnings from stories told and heard.\\nThe future unfolds from this unending flow -\\nWhere the tides of time ultimately go.\", role='assistant'))], created=1713896579, model='https://api.clarifai.com/v2/users/anthropic/apps/completion/models/claude-2_1/outputs', object='chat.completion', system_fingerprint=None, usage=Usage(prompt_tokens=12, completion_tokens=232, total_tokens=244))\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "messages = [{\"role\": \"user\",\"content\": \"\"\"Write a poem about history?\"\"\"}]\n", + "response=completion(\n", + " model=\"clarifai/anthropic.completion.claude-2_1\",\n", + " messages=messages,\n", + " )\n", + "\n", + "print(f\"Claude-2.1 response : {response}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### OpenAI GPT-4 (Streaming)\n", + "Though clarifai doesn't support streaming, still you can call stream and get the response in standard StreamResponse format of liteLLM" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ModelResponse(id='chatcmpl-40ae19af-3bf0-4eb4-99f2-33aec3ba84af', choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(content=\"In the quiet corners of time's grand hall,\\nLies the tale of rise and fall.\\nFrom ancient ruins to modern sprawl,\\nHistory, the greatest story of them all.\\n\\nEmpires have risen, empires have decayed,\\nThrough the eons, memories have stayed.\\nIn the book of time, history is laid,\\nA tapestry of events, meticulously displayed.\\n\\nThe pyramids of Egypt, standing tall,\\nThe Roman Empire's mighty sprawl.\\nFrom Alexander's conquest, to the Berlin Wall,\\nHistory, a silent witness to it all.\\n\\nIn the shadow of the past we tread,\\nWhere once kings and prophets led.\\nTheir stories in our hearts are spread,\\nEchoes of their words, in our minds are read.\\n\\nBattles fought and victories won,\\nActs of courage under the sun.\\nTales of love, of deeds done,\\nIn history's grand book, they all run.\\n\\nHeroes born, legends made,\\nIn the annals of time, they'll never fade.\\nTheir triumphs and failures all displayed,\\nIn the eternal march of history's parade.\\n\\nThe ink of the past is forever dry,\\nBut its lessons, we cannot deny.\\nIn its stories, truths lie,\\nIn its wisdom, we rely.\\n\\nHistory, a mirror to our past,\\nA guide for the future vast.\\nThrough its lens, we're ever cast,\\nIn the drama of life, forever vast.\", role='assistant', function_call=None, tool_calls=None), logprobs=None)], created=1714744515, model='https://api.clarifai.com/v2/users/openai/apps/chat-completion/models/GPT-4/outputs', object='chat.completion.chunk', system_fingerprint=None)\n", + "ModelResponse(id='chatcmpl-40ae19af-3bf0-4eb4-99f2-33aec3ba84af', choices=[StreamingChoices(finish_reason='stop', index=0, delta=Delta(content=None, role=None, function_call=None, tool_calls=None), logprobs=None)], created=1714744515, model='https://api.clarifai.com/v2/users/openai/apps/chat-completion/models/GPT-4/outputs', object='chat.completion.chunk', system_fingerprint=None)\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "messages = [{\"role\": \"user\",\"content\": \"\"\"Write a poem about history?\"\"\"}]\n", + "response = completion(\n", + " model=\"clarifai/openai.chat-completion.GPT-4\",\n", + " messages=messages,\n", + " stream=True,\n", + " api_key = \"c75cc032415e45368be331fdd2c06db0\")\n", + "\n", + "for chunk in response:\n", + " print(chunk)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbook/liteLLM_function_calling.ipynb b/cookbook/liteLLM_function_calling.ipynb new file mode 100644 index 000000000..45f4398b3 --- /dev/null +++ b/cookbook/liteLLM_function_calling.ipynb @@ -0,0 +1,331 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "vnvlwUDZK7VA" + }, + "source": [ + "## Demo Notebook of Function Calling with liteLLM\n", + "- Supported Providers for Function Calling\n", + " - OpenAI - `gpt-4-0613` and `gpt-3.5-turbo-0613`\n", + "- In this notebook we use function calling with `litellm.completion()`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KrINCwRfLgZV" + }, + "outputs": [], + "source": [ + "## Install liteLLM\n", + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "nK7zR5OgLlh2" + }, + "outputs": [], + "source": [ + "import os\n", + "from litellm import completion" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "id": "dCQlyBxKLqbA" + }, + "outputs": [], + "source": [ + "os.environ['OPENAI_API_KEY'] = \"\" #@param" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gfdGv-FMRCdX" + }, + "source": [ + "## Define Messages, Functions\n", + "We create a get_current_weather() function and pass that to GPT 3.5\n", + "\n", + "See OpenAI docs for this: https://openai.com/blog/function-calling-and-other-api-updates" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "id": "ERzsP1sfM19C" + }, + "outputs": [], + "source": [ + "messages = [\n", + " {\"role\": \"user\", \"content\": \"What is the weather like in Boston?\"}\n", + "]\n", + "\n", + "def get_current_weather(location):\n", + " if location == \"Boston, MA\":\n", + " return \"The weather is 12F\"\n", + "\n", + "functions = [\n", + " {\n", + " \"name\": \"get_current_weather\",\n", + " \"description\": \"Get the current weather in a given location\",\n", + " \"parameters\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"location\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"The city and state, e.g. San Francisco, CA\"\n", + " },\n", + " \"unit\": {\n", + " \"type\": \"string\",\n", + " \"enum\": [\"celsius\", \"fahrenheit\"]\n", + " }\n", + " },\n", + " \"required\": [\"location\"]\n", + " }\n", + " }\n", + " ]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NX6by2VuRPnp" + }, + "source": [ + "## Call gpt-3.5-turbo-0613 to Decide what Function to call" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QVoJ5PtxMlVx", + "outputId": "efe7a81f-e04a-4afc-aa60-a2b2648f5fb9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"id\": \"chatcmpl-7mX4RiqdoislVEqfmfVjFSKp3hyIy\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1691801223,\n", + " \"model\": \"gpt-3.5-turbo-0613\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": null,\n", + " \"function_call\": {\n", + " \"name\": \"get_current_weather\",\n", + " \"arguments\": \"{\\n \\\"location\\\": \\\"Boston, MA\\\"\\n}\"\n", + " }\n", + " },\n", + " \"finish_reason\": \"function_call\"\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"prompt_tokens\": 82,\n", + " \"completion_tokens\": 18,\n", + " \"total_tokens\": 100\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "response = completion(model=\"gpt-3.5-turbo-0613\", messages=messages, functions=functions)\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Yu0o2saDNLx8" + }, + "source": [ + "## Parse GPT 3.5 Response\n", + "Read Information about what Function to Call" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "u1DzXLJsNOR5", + "outputId": "177e9501-0ce2-4619-9067-3047f18f6c79" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " JSON: {\n", + " \"name\": \"get_current_weather\",\n", + " \"arguments\": \"{\\n \\\"location\\\": \\\"Boston, MA\\\"\\n}\"\n", + "}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function_call_data = response[\"choices\"][0][\"message\"][\"function_call\"]\n", + "function_call_data" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tYb96Mh0NhH9", + "outputId": "13c4bb89-6f29-4b3b-afa7-302dcf2cdd5f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "get_current_weather {'location': 'Boston, MA'}\n" + ] + } + ], + "source": [ + "import json\n", + "function_name = function_call_data['name']\n", + "function_args = function_call_data['arguments']\n", + "function_args = json.loads(function_args)\n", + "print(function_name, function_args)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z3tstH_yN3fX" + }, + "source": [ + "## Call the get_current_weather() function" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TSb8JHhgN5Zc", + "outputId": "ef140572-4020-4daf-ac8c-d5161be9aa5c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12F\n" + ] + } + ], + "source": [ + "if function_name == \"get_current_weather\":\n", + " result = get_current_weather(**function_args)\n", + " print(result)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k4HGJE3NRmMI" + }, + "source": [ + "## Send the response from get_current_weather back to the model to summarize" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "a23cmEwiPaw7", + "outputId": "43259b86-0c4c-4fcb-eab7-6e1a788b2f21" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"id\": \"chatcmpl-7mXGN62u75WXp1Lgen4iSgNvA7hHT\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1691801963,\n", + " \"model\": \"gpt-3.5-turbo-0613\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"The current weather in Boston is 12 degrees Fahrenheit.\"\n", + " },\n", + " \"finish_reason\": \"stop\"\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"prompt_tokens\": 109,\n", + " \"completion_tokens\": 12,\n", + " \"total_tokens\": 121\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "messages = [\n", + " {\"role\": \"user\", \"content\": \"What is the weather like in Boston?\"},\n", + " {\"role\": \"assistant\", \"content\": None, \"function_call\": {\"name\": \"get_current_weather\", \"arguments\": \"{ \\\"location\\\": \\\"Boston, MA\\\"}\"}},\n", + " {\"role\": \"function\", \"name\": \"get_current_weather\", \"content\": result}\n", + "]\n", + "response = completion(model=\"gpt-3.5-turbo-0613\", messages=messages, functions=functions)\n", + "print(response)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/litellm-ollama-docker-image/Dockerfile b/cookbook/litellm-ollama-docker-image/Dockerfile new file mode 100644 index 000000000..be237a4df --- /dev/null +++ b/cookbook/litellm-ollama-docker-image/Dockerfile @@ -0,0 +1,25 @@ +FROM ollama/ollama as ollama + +RUN echo "auto installing llama2" + +# auto install ollama/llama2 +RUN ollama serve & sleep 2 && ollama pull llama2 + +RUN echo "installing litellm" + +RUN apt-get update + +# Install Python +RUN apt-get install -y python3 python3-pip + +# Set the working directory in the container +WORKDIR /app + +# Copy the current directory contents into the container at /app +COPY . /app + +# Install any needed packages specified in requirements.txt + +RUN python3 -m pip install litellm +COPY start.sh /start.sh +ENTRYPOINT [ "/bin/bash", "/start.sh" ] diff --git a/cookbook/litellm-ollama-docker-image/requirements.txt b/cookbook/litellm-ollama-docker-image/requirements.txt new file mode 100644 index 000000000..9b9181b23 --- /dev/null +++ b/cookbook/litellm-ollama-docker-image/requirements.txt @@ -0,0 +1 @@ +litellm==1.83.14 diff --git a/cookbook/litellm-ollama-docker-image/start.sh b/cookbook/litellm-ollama-docker-image/start.sh new file mode 100644 index 000000000..ecc03ce73 --- /dev/null +++ b/cookbook/litellm-ollama-docker-image/start.sh @@ -0,0 +1,2 @@ +ollama serve & +litellm \ No newline at end of file diff --git a/cookbook/litellm-ollama-docker-image/test.py b/cookbook/litellm-ollama-docker-image/test.py new file mode 100644 index 000000000..93b9c6ac4 --- /dev/null +++ b/cookbook/litellm-ollama-docker-image/test.py @@ -0,0 +1,35 @@ +import openai + +api_base = "http://0.0.0.0:8000" + +openai.api_base = api_base +openai.api_key = "temp-key" +print(openai.api_base) + + +print("LiteLLM: response from proxy with streaming") +response = openai.ChatCompletion.create( + model="ollama/llama2", + messages=[ + { + "role": "user", + "content": "this is a test request, acknowledge that you got it", + } + ], + stream=True, +) + +for chunk in response: + print(f"LiteLLM: streaming response from proxy {chunk}") + +response = openai.ChatCompletion.create( + model="ollama/llama2", + messages=[ + { + "role": "user", + "content": "this is a test request, acknowledge that you got it", + } + ], +) + +print(f"LiteLLM: response from proxy {response}") diff --git a/cookbook/litellm_Test_Multiple_Providers.ipynb b/cookbook/litellm_Test_Multiple_Providers.ipynb new file mode 100644 index 000000000..3901581e6 --- /dev/null +++ b/cookbook/litellm_Test_Multiple_Providers.ipynb @@ -0,0 +1,571 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "Ys9n20Es2IzT" + }, + "source": [ + "# Evaluate Multiple LLM Providers with LiteLLM\n", + "\n", + "\n", + "\n", + "* Quality Testing\n", + "* Load Testing\n", + "* Duration Testing\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZXOXl23PIIP6" + }, + "outputs": [], + "source": [ + "!pip install litellm python-dotenv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "LINuBzXDItq2" + }, + "outputs": [], + "source": [ + "from litellm import load_test_model, testing_batch_completion" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EkxMhsWdJdu4" + }, + "outputs": [], + "source": [ + "from dotenv import load_dotenv\n", + "load_dotenv()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mv5XdnqeW5I_" + }, + "source": [ + "# Quality Test endpoint\n", + "\n", + "## Test the same prompt across multiple LLM providers\n", + "\n", + "In this example, let's ask some questions about Paul Graham" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "XpzrR5m4W_Us" + }, + "outputs": [], + "source": [ + "models = [\"gpt-3.5-turbo\", \"gpt-3.5-turbo-16k\", \"gpt-4\", \"claude-instant-1\", \"replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781\"]\n", + "context = \"\"\"Paul Graham (/É”rƦm/; born 1964)[3] is an English computer scientist, essayist, entrepreneur, venture capitalist, and author. He is best known for his work on the programming language Lisp, his former startup Viaweb (later renamed Yahoo! Store), cofounding the influential startup accelerator and seed capital firm Y Combinator, his essays, and Hacker News. He is the author of several computer programming books, including: On Lisp,[4] ANSI Common Lisp,[5] and Hackers & Painters.[6] Technology journalist Steven Levy has described Graham as a \"hacker philosopher\".[7] Graham was born in England, where he and his family maintain permanent residence. However he is also a citizen of the United States, where he was educated, lived, and worked until 2016.\"\"\"\n", + "prompts = [\"Who is Paul Graham?\", \"What is Paul Graham known for?\" , \"Is paul graham a writer?\" , \"Where does Paul Graham live?\", \"What has Paul Graham done?\"]\n", + "messages = [[{\"role\": \"user\", \"content\": context + \"\\n\" + prompt}] for prompt in prompts] # pass in a list of messages we want to test\n", + "result = testing_batch_completion(models=models, messages=messages)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9nzeLySnvIIW" + }, + "source": [ + "## Visualize the data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 403 + }, + "id": "X-2n7hdAuVAY", + "outputId": "69cc0de1-68e3-4c12-a8ea-314880010d94" + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "

\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Model Nameclaude-instant-1gpt-3.5-turbo-0613gpt-3.5-turbo-16k-0613gpt-4-0613replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781
Prompt
\\nIs paul graham a writer?Yes, Paul Graham is considered a writer in ad...Yes, Paul Graham is a writer. He has written s...Yes, Paul Graham is a writer. He has authored ...Yes, Paul Graham is a writer. He is an essayis...Yes, Paul Graham is an author. According to t...
\\nWhat has Paul Graham done?Paul Graham has made significant contribution...Paul Graham has achieved several notable accom...Paul Graham has made significant contributions...Paul Graham is known for his work on the progr...Paul Graham has had a diverse career in compu...
\\nWhat is Paul Graham known for?Paul Graham is known for several things:\\n\\n-...Paul Graham is known for his work on the progr...Paul Graham is known for his work on the progr...Paul Graham is known for his work on the progr...Paul Graham is known for many things, includi...
\\nWhere does Paul Graham live?Based on the information provided:\\n\\n- Paul ...According to the given information, Paul Graha...Paul Graham currently lives in England, where ...The text does not provide a current place of r...Based on the information provided, Paul Graha...
\\nWho is Paul Graham?Paul Graham is an influential computer scient...Paul Graham is an English computer scientist, ...Paul Graham is an English computer scientist, ...Paul Graham is an English computer scientist, ...Paul Graham is an English computer scientist,...
\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + "
\n", + " \n", + "
\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n" + ], + "text/plain": [ + "Model Name claude-instant-1 \\\n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is considered a writer in ad... \n", + "\\nWhat has Paul Graham done? Paul Graham has made significant contribution... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for several things:\\n\\n-... \n", + "\\nWhere does Paul Graham live? Based on the information provided:\\n\\n- Paul ... \n", + "\\nWho is Paul Graham? Paul Graham is an influential computer scient... \n", + "\n", + "Model Name gpt-3.5-turbo-0613 \\\n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is a writer. He has written s... \n", + "\\nWhat has Paul Graham done? Paul Graham has achieved several notable accom... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for his work on the progr... \n", + "\\nWhere does Paul Graham live? According to the given information, Paul Graha... \n", + "\\nWho is Paul Graham? Paul Graham is an English computer scientist, ... \n", + "\n", + "Model Name gpt-3.5-turbo-16k-0613 \\\n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is a writer. He has authored ... \n", + "\\nWhat has Paul Graham done? Paul Graham has made significant contributions... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for his work on the progr... \n", + "\\nWhere does Paul Graham live? Paul Graham currently lives in England, where ... \n", + "\\nWho is Paul Graham? Paul Graham is an English computer scientist, ... \n", + "\n", + "Model Name gpt-4-0613 \\\n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is a writer. He is an essayis... \n", + "\\nWhat has Paul Graham done? Paul Graham is known for his work on the progr... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for his work on the progr... \n", + "\\nWhere does Paul Graham live? The text does not provide a current place of r... \n", + "\\nWho is Paul Graham? Paul Graham is an English computer scientist, ... \n", + "\n", + "Model Name replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781 \n", + "Prompt \n", + "\\nIs paul graham a writer? Yes, Paul Graham is an author. According to t... \n", + "\\nWhat has Paul Graham done? Paul Graham has had a diverse career in compu... \n", + "\\nWhat is Paul Graham known for? Paul Graham is known for many things, includi... \n", + "\\nWhere does Paul Graham live? Based on the information provided, Paul Graha... \n", + "\\nWho is Paul Graham? Paul Graham is an English computer scientist,... " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Create an empty list to store the row data\n", + "table_data = []\n", + "\n", + "# Iterate through the list and extract the required data\n", + "for item in result:\n", + " prompt = item['prompt'][0]['content'].replace(context, \"\") # clean the prompt for easy comparison\n", + " model = item['response']['model']\n", + " response = item['response']['choices'][0]['message']['content']\n", + " table_data.append([prompt, model, response])\n", + "\n", + "# Create a DataFrame from the table data\n", + "df = pd.DataFrame(table_data, columns=['Prompt', 'Model Name', 'Response'])\n", + "\n", + "# Pivot the DataFrame to get the desired table format\n", + "table = df.pivot(index='Prompt', columns='Model Name', values='Response')\n", + "table" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zOxUM40PINDC" + }, + "source": [ + "# Load Test endpoint\n", + "\n", + "Run 100+ simultaneous queries across multiple providers to see when they fail + impact on latency" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZkQf_wbcIRQ9" + }, + "outputs": [], + "source": [ + "models=[\"gpt-3.5-turbo\", \"replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781\", \"claude-instant-1\"]\n", + "context = \"\"\"Paul Graham (/ɔrƦm/; born 1964)[3] is an English computer scientist, essayist, entrepreneur, venture capitalist, and author. He is best known for his work on the programming language Lisp, his former startup Viaweb (later renamed Yahoo! Store), cofounding the influential startup accelerator and seed capital firm Y Combinator, his essays, and Hacker News. He is the author of several computer programming books, including: On Lisp,[4] ANSI Common Lisp,[5] and Hackers & Painters.[6] Technology journalist Steven Levy has described Graham as a \"hacker philosopher\".[7] Graham was born in England, where he and his family maintain permanent residence. However he is also a citizen of the United States, where he was educated, lived, and worked until 2016.\"\"\"\n", + "prompt = \"Where does Paul Graham live?\"\n", + "final_prompt = context + prompt\n", + "result = load_test_model(models=models, prompt=final_prompt, num_calls=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8vSNBFC06aXY" + }, + "source": [ + "## Visualize the data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 552 + }, + "id": "SZfiKjLV3-n8", + "outputId": "00f7f589-b3da-43ed-e982-f9420f074b8d" + }, + "outputs": [ + { + "data": { + "image/png": "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WwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWz8UVB4+fIhx48ahXbt2CA8PBwAcOHAAt2/f1mhxRERElLmpHVSOHz+O4sWL4/z58wgICEBsbCwA4Pr165g4caLGCyQiIqLMS+2gMmrUKEybNg1BQUEwMDCQ2mvWrIlz585ptDgiIiLK3NQOKjdv3kSLFi3StNva2uLt27caKYqIiIgI+IGgYmFhgZcvX6Zpv3r1KnLmzKmRooiIiIiAHwgqbdu2xciRI/Hq1SsoFAoolUqcPn0aw4YNQ+fOndOjRiIiIsqk1A4qM2bMQKFCheDo6IjY2FgUKVIEVatWRcWKFTFu3Lj0qJGIiIgyKT11b2BgYICVK1di/PjxuHXrFmJjY1GqVCnkz58/PeojIiKiTEztoJIqV65cyJUrlyZrISIiIlKhdlARQmD79u0IDg5GeHg4lEqlyvKAgACNFUdERESZm9pBZdCgQVixYgVq1KiB7NmzQ6FQpEddREREROoHFT8/PwQEBKBhw4bpUQ8RERGRRO1ZP+bm5sibN2961EJERESkQu2gMmnSJEyePBnx8fHpUQ8RERGRRO1dP25ubti0aRNsbW3h5OQEfX19leVXrlzRWHFERESUuakdVNzd3XH58mV07NiRg2mJiIgoXakdVPbv34/AwEBUrlw5PeohIiIikqg9RsXR0RFmZmbpUQsRERGRCrWDyvz58zFixAiEhoamQzlERERE/6P2rp+OHTviw4cPyJcvH0xMTNIMpo2IiNBYcUSZndOo/dougbQsdFYjbZdApFVqBxUvL690KIOIiIgorR+a9UNERET0K3xXUImOjpYG0EZHR//ruhxoS0RERJryXUHF0tISL1++hK2tLSwsLL567BQhBBQKBVJSUjReJBEREWVO3xVUjh49CisrKwBAcHBwuhZERERElOq7gkq1atWQN29eXLx4EdWqVUvvmoiIiIgAqHEcldDQUO7WISIiol9K7QO+aZK3tzdcXFxgZmYGMzMzVKhQAQcOHNBmSURERCQjak1PDgwMhLm5+b+u07Rp0+++PwcHB8yaNQv58+eHEALr169Hs2bNcPXqVRQtWlSd0oiIiCgDUiuo/NcxVNSd9dOkSROV69OnT4e3tzfOnTvHoEJERETqBZVXr17B1tY2XQpJSUnBtm3bEBcXhwoVKnx1ncTERCQmJkrX/+uYLkRERPR7++4xKl87doom3Lx5E1myZIGhoSF69+6NnTt3okiRIl9dd+bMmTA3N5cujo6O6VITERERycN3BxUhRLoUULBgQVy7dg3nz59Hnz594O7ujn/++eer644ePRpRUVHS5enTp+lSExEREcnDd+/6cXd3h7GxscYLMDAwgLOzMwCgTJkyuHjxIhYtWoQVK1akWdfQ0BCGhoYar4GIiIjk6buDytq1a9OzDolSqVQZh0JERESZl9pnT9ak0aNHo0GDBsiVKxdiYmKwceNGHDt2DIGBgdosi4iIiGRCq0ElPDwcnTt3xsuXL2Fubg4XFxcEBgaiTp062iyLiIiIZEKrQWX16tXafHgiIiKSuR8+hH5ISAgCAwMRHx8PIP1mBREREVHmpXZQeffuHWrXro0CBQqgYcOGePnyJQCge/fuGDp0qMYLJCIiosxL7aAyePBg6Onp4cmTJzAxMZHa27Rpg4MHD2q0OCIiIsrc1B6jcujQIQQGBsLBwUGlPX/+/AgLC9NYYURERERq96jExcWp9KSkioiI4MHYiIiISKPUDipVqlTBhg0bpOsKhQJKpRJz5sxBjRo1NFocERERZW5q7/qZM2cOatWqhUuXLiEpKQkjRozA7du3ERERgdOnT6dHjURERJRJqd2jUqxYMdy/fx+VK1dGs2bNEBcXh5YtW+Lq1avIly9fetRIREREmdQPHfDN3NwcY8eO1XQtRERERCrU7lE5ePAgTp06JV1ftmwZSpYsifbt2+P9+/caLY6IiIgyN7WDyvDhwxEdHQ0AuHnzJoYMGYKGDRvi8ePHGDJkiMYLJCIiosxL7V0/jx8/RpEiRQAAO3bsQJMmTTBjxgxcuXIFDRs21HiBRERElHmp3aNiYGCADx8+AAAOHz6MunXrAgCsrKyknhYiIiIiTVC7R6Vy5coYMmQIKlWqhAsXLmDLli0AgPv376c5Wi0RERHRz1C7R2Xp0qXQ09PD9u3b4e3tjZw5cwIADhw4gPr162u8QCIiIsq81O5RyZUrF/bt25emfeHChRopiIiIiCjVDx1HRalUIiQkBOHh4VAqlSrLqlatqpHCiIiIiNQOKufOnUP79u0RFhYGIYTKMoVCgZSUFI0VR0RERJmb2kGld+/eKFu2LPbv348cOXJAoVCkR11ERERE6geVBw8eYPv27XB2dk6PeoiIiIgkas/6KV++PEJCQtKjFiIiIiIVaveo9O/fH0OHDsWrV69QvHhx6Ovrqyx3cXHRWHFERESUuakdVFq1agUA6Natm9SmUCgghOBgWiIiItKoHzrXDxEREdGvoHZQyZ07d3rUQURERJTGDx3w7eHDh/Dy8sKdO3cAAEWKFMHAgQORL18+jRZHREREmZvaQSUwMBBNmzZFyZIlUalSJQDA6dOnUbRoUezduxd16tTReJHa4jRqv7ZLIC0LndVI2yUQEWVqageVUaNGYfDgwZg1a1aa9pEjR2aooEJERETapfZxVO7cuYPu3bunae/WrRv++ecfjRRFREREBPxAULGxscG1a9fStF+7dg22traaqImIiIgIwA/s+unZsyd69eqFR48eoWLFigA+jVGZPXs2hgwZovECiYiIKPNSO6iMHz8eWbNmxfz58zF69GgAgL29PSZNmoQBAwZovEAiIiLKvNQOKgqFAoMHD8bgwYMRExMDAMiaNavGCyMiIiL6oeOoAEB4eDju3bsHAChUqBBsbGw0VhQRERER8AODaWNiYtCpUyfY29ujWrVqqFatGuzt7dGxY0dERUWlR41ERESUSakdVHr06IHz589j//79iIyMRGRkJPbt24dLly7Bw8MjPWokIiKiTErtXT/79u1DYGAgKleuLLXVq1cPK1euRP369TVaHBEREWVuaveoZMuWDebm5mnazc3NYWlpqZGiiIiIiIAfCCrjxo3DkCFD8OrVK6nt1atXGD58OMaPH6/R4oiIiChzU3vXj7e3N0JCQpArVy7kypULAPDkyRMYGhrizZs3WLFihbTulStXNFcpERERZTpqB5XmzZunQxlEREREaakdVCZOnJgedRARERGlofYYladPn+LZs2fS9QsXLmDQoEHw9fXVaGFEREREageV9u3bIzg4GMCnQbS1a9fGhQsXMHbsWEyZMkXjBRIREVHmpXZQuXXrFv744w8AwNatW1G8eHGcOXMG/v7+WLdunabrIyIiokxM7aCSnJwMQ0NDAMDhw4fRtGlTAJ/O9/Py5UvNVkdERESZmtpBpWjRovDx8cHJkycRFBQkHY32xYsXyJYtm8YLJCIiosxL7aAye/ZsrFixAtWrV0e7du1QokQJAMCePXukXUJEREREmqD29OTq1avj7du3iI6OVjlkfq9evWBiYqLR4oiIiChzU7tHBQCEELh8+TJWrFiBmJgYAICBgQGDChEREWmU2j0qYWFhqF+/Pp48eYLExETUqVMHWbNmxezZs5GYmAgfH5/0qJOIiIgyIbV7VAYOHIiyZcvi/fv3MDY2ltpbtGiBI0eOaLQ4IiIiytzU7lE5efIkzpw5AwMDA5V2JycnPH/+XGOFEREREando6JUKpGSkpKm/dmzZ8iaNatGiiIiIiICfiCo1K1bF15eXtJ1hUKB2NhYTJw4EQ0bNtRkbURERJTJqb3rZ/78+ahXrx6KFCmChIQEtG/fHg8ePIC1tTU2bdqUHjUSERFRJqV2UHFwcMD169exZcsWXL9+HbGxsejevTs6dOigMriWiIiI6GepHVQAQE9PDx06dECHDh2ktpcvX2L48OFYunSpxoojIiKizE2toHL79m0EBwfDwMAAbm5usLCwwNu3bzF9+nT4+Pggb9686VUnERERZULfPZh2z549KFWqFAYMGIDevXujbNmyCA4ORuHChXHnzh3s3LkTt2/fTs9aiYiIKJP57qAybdo0eHp6Ijo6GgsWLMCjR48wYMAA/P333zh48KB0FmUiIiIiTfnuoHLv3j14enoiS5Ys6N+/P3R0dLBw4UKUK1cuPesjIiKiTOy7g0pMTAzMzMwAALq6ujA2NuaYFCIiIkpXag2mDQwMhLm5OYBPR6g9cuQIbt26pbJO06ZNNVcdERERZWpqBRV3d3eV6x4eHirXFQrFVw+vT0RERPQjvjuoKJXK9KyDiIiIKA21z/VDRERE9KtoNajMnDkT5cqVQ9asWWFra4vmzZvj3r172iyJiIiIZESrQeX48ePw9PTEuXPnEBQUhOTkZNStWxdxcXHaLIuIiIhk4ofO9aMpBw8eVLm+bt062Nra4vLly6hataqWqiIiIiK50GpQ+VJUVBQAwMrK6qvLExMTkZiYKF2Pjo7+JXURERGRdvzQrp/IyEisWrUKo0ePRkREBADgypUreP78+Q8XolQqMWjQIFSqVAnFihX76jozZ86Eubm5dHF0dPzhxyMiIiL5Uzuo3LhxAwUKFMDs2bMxb948REZGAgACAgIwevToHy7E09MTt27dwubNm7+5zujRoxEVFSVdnj59+sOPR0RERPKndlAZMmQIunTpggcPHsDIyEhqb9iwIU6cOPFDRfTr1w/79u1DcHAwHBwcvrmeoaEhzMzMVC5ERESUcak9RuXixYtYsWJFmvacOXPi1atXat2XEAL9+/fHzp07cezYMeTJk0fdcoiIiCgDUzuoGBoafnUQ6/3792FjY6PWfXl6emLjxo3YvXs3smbNKgUdc3NzGBsbq1saERERZTBq7/pp2rQppkyZguTkZACfzu/z5MkTjBw5Eq1atVLrvry9vREVFYXq1asjR44c0mXLli3qlkVEREQZkNpBZf78+YiNjYWtrS3i4+NRrVo1ODs7I2vWrJg+fbpa9yWE+OqlS5cu6pZFREREGZDau37Mzc0RFBSEU6dO4caNG4iNjUXp0qVRu3bt9KiPiIiIMrEfPuBb5cqVUblyZU3WQkRERKRC7aCyePHir7YrFAoYGRnB2dkZVatWha6u7k8XR0RERJmb2kFl4cKFePPmDT58+ABLS0sAwPv372FiYoIsWbIgPDwcefPmRXBwMI8cS0RERD9F7cG0M2bMQLly5fDgwQO8e/cO7969w/3791G+fHksWrQIT548gZ2dHQYPHpwe9RIREVEmonaPyrhx47Bjxw7ky5dPanN2dsa8efPQqlUrPHr0CHPmzFF7qjIRERHRl9TuUXn58iU+fvyYpv3jx4/SAdvs7e0RExPz89URERFRpqZ2UKlRowY8PDxw9epVqe3q1avo06cPatasCQC4efMmD4dPREREP03toLJ69WpYWVmhTJkyMDQ0hKGhIcqWLQsrKyusXr0aAJAlSxbMnz9f48USERFR5qL2GBU7OzsEBQXh7t27uH//PgCgYMGCKFiwoLROjRo1NFchERERZVo/fMC3QoUKoVChQpqshYiIiEjFDwWVZ8+eYc+ePXjy5AmSkpJUli1YsEAjhRERERGpHVSOHDmCpk2b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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "## calculate avg response time\n", + "unique_models = set(result[\"response\"]['model'] for result in result[\"results\"])\n", + "model_dict = {model: {\"response_time\": []} for model in unique_models}\n", + "for completion_result in result[\"results\"]:\n", + " model_dict[completion_result[\"response\"][\"model\"]][\"response_time\"].append(completion_result[\"response_time\"])\n", + "\n", + "avg_response_time = {}\n", + "for model, data in model_dict.items():\n", + " avg_response_time[model] = sum(data[\"response_time\"]) / len(data[\"response_time\"])\n", + "\n", + "models = list(avg_response_time.keys())\n", + "response_times = list(avg_response_time.values())\n", + "\n", + "plt.bar(models, response_times)\n", + "plt.xlabel('Model', fontsize=10)\n", + "plt.ylabel('Average Response Time')\n", + "plt.title('Average Response Times for each Model')\n", + "\n", + "plt.xticks(models, [model[:15]+'...' if len(model) > 15 else model for model in models], rotation=45)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "inSDIE3_IRds" + }, + "source": [ + "# Duration Test endpoint\n", + "\n", + "Run load testing for 2 mins. Hitting endpoints with 100+ queries every 15 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ePIqDx2EIURH" + }, + "outputs": [], + "source": [ + "models=[\"gpt-3.5-turbo\", \"replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781\", \"claude-instant-1\"]\n", + "context = \"\"\"Paul Graham (/ɔrƦm/; born 1964)[3] is an English computer scientist, essayist, entrepreneur, venture capitalist, and author. He is best known for his work on the programming language Lisp, his former startup Viaweb (later renamed Yahoo! Store), cofounding the influential startup accelerator and seed capital firm Y Combinator, his essays, and Hacker News. He is the author of several computer programming books, including: On Lisp,[4] ANSI Common Lisp,[5] and Hackers & Painters.[6] Technology journalist Steven Levy has described Graham as a \"hacker philosopher\".[7] Graham was born in England, where he and his family maintain permanent residence. However he is also a citizen of the United States, where he was educated, lived, and worked until 2016.\"\"\"\n", + "prompt = \"Where does Paul Graham live?\"\n", + "final_prompt = context + prompt\n", + "result = load_test_model(models=models, prompt=final_prompt, num_calls=100, interval=15, duration=120)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 552 + }, + "id": "k6rJoELM6t1K", + "outputId": "f4968b59-3bca-4f78-a88b-149ad55e3cf7" + }, + "outputs": [ + { + "data": { + "image/png": "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DaxZswYFCxaU/ua9fPkS4eHhcHNzU3mMd+/eyTrgcLcU5VkZuTsuLg5JSUlQKBQ4cOAAwsPDoaurCz09PURERMDV1RX//POPFGwSExOhr68PPz8/vH79msGGNEIIIQWbX3/9Fd27d8fcuXPRt29fjBgxAufPnwfwftdASkoKJkyYgMqVK+PVq1cqj8NgQ5/r/PnzaN68Obp374727dtj1KhRCAkJwbVr19ClSxcA708zkJaWhnXr1qFGjRo4ceKEymPIOdgADDeUx0VGRqJixYo4evQoNmzYgCZNmuDvv/8G8H5XU/ny5dGmTRtMnz5dWidfvnwYNWoU7t27B0tLSwYb0oiM7Wju3Ln4448/sHHjRty4cQNt27bFn3/+ifHjx+P06dMAAAMDA7i6uqJhw4YwNzfXYtUkRw8fPsTz589V2r7//nvs3r0bFy9eRJ8+fQC8P/VFixYtMH369EwjN7IniPK4Hj16CFNTU6GjoyOWL18utaemporNmzeL9PR0qU2pVGqjRPpGREVFibZt24pVq1YJIYTYvXu3MDU1Ff369ROurq6iYcOG4syZM0II1W3x3bt3WqmX5CkkJETY2NiITZs2SW0Z29v69euFk5OTOH/+fKb10tLSvliN2saRG8qzMk4J7uPjg/j4eBgYGMDW1hbJyckA3n8rad++vcrETY7SUG6ytrbGqFGj0KRJE1y+fBk+Pj6YNm0ali5dip9++glnzpyBj48PLl68qLItclcUaVLZsmVRr149rFu3DocOHQLwv799Li4uiI6Oli4z8yG574r6EMMN5VkZocXe3h4nTpyAl5cXOnbsiF27diEpKSlTfzleH4W051Pbk6urKwoXLox9+/bB2dkZffv2BQBYWlrCzc0NLVu2hKur65cslb4x9vb26NevH2JiYuDn54fdu3dLywoXLgxHR0ctVpc3fDsxjr4a4v8nAD9//hxpaWkoVqwYrK2tUaNGDSQnJ6NXr14ICgpCixYtYGRkhICAADRq1AhOTk7aLp1kQnwweXjFihWIjo6GgYEBRowYIV26IyUlBc+ePcOjR49QunRpHDhwAK1atcLAgQP/9bQERJ8j42i7evXqYcmSJRg7dixGjx6NkJAQODs7Y8uWLVAoFPjxxx+1XapW8VBwypOCg4MxadIkREVFoXnz5mjTpg1atmwJAOjRowd27NiB4cOH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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "## calculate avg response time\n", + "unique_models = set(unique_result[\"response\"]['model'] for unique_result in result[0][\"results\"])\n", + "model_dict = {model: {\"response_time\": []} for model in unique_models}\n", + "for iteration in result:\n", + " for completion_result in iteration[\"results\"]:\n", + " model_dict[completion_result[\"response\"][\"model\"]][\"response_time\"].append(completion_result[\"response_time\"])\n", + "\n", + "avg_response_time = {}\n", + "for model, data in model_dict.items():\n", + " avg_response_time[model] = sum(data[\"response_time\"]) / len(data[\"response_time\"])\n", + "\n", + "models = list(avg_response_time.keys())\n", + "response_times = list(avg_response_time.values())\n", + "\n", + "plt.bar(models, response_times)\n", + "plt.xlabel('Model', fontsize=10)\n", + "plt.ylabel('Average Response Time')\n", + "plt.title('Average Response Times for each Model')\n", + "\n", + "plt.xticks(models, [model[:15]+'...' if len(model) > 15 else model for model in models], rotation=45)\n", + "plt.show()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/cookbook/litellm_model_fallback.ipynb b/cookbook/litellm_model_fallback.ipynb new file mode 100644 index 000000000..2e7987b96 --- /dev/null +++ b/cookbook/litellm_model_fallback.ipynb @@ -0,0 +1,51 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "j6yJsCGeaq8G" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "u129iWNPaf72" + }, + "outputs": [], + "source": [ + "from litellm import completion\n", + "\n", + "model_fallback_list = [\"claude-instant-1\", \"gpt-3.5-turbo\", \"chatgpt-test\"]\n", + "\n", + "user_message = \"Hello, how are you?\"\n", + "messages = [{ \"content\": user_message,\"role\": \"user\"}]\n", + "\n", + "for model in model_fallback_list:\n", + " try:\n", + " response = completion(model=model, messages=messages)\n", + " except Exception:\n", + " print(f\"error occurred: {traceback.format_exc()}\")" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/litellm_proxy_server/batch_api/bedrock/bedrock.py b/cookbook/litellm_proxy_server/batch_api/bedrock/bedrock.py new file mode 100644 index 000000000..b5117ab9e --- /dev/null +++ b/cookbook/litellm_proxy_server/batch_api/bedrock/bedrock.py @@ -0,0 +1,25 @@ +from openai import OpenAI + +client = OpenAI( + base_url="http://0.0.0.0:4000", + api_key="sk-1234", +) + +BEDROCK_BATCH_MODEL = "bedrock/batch-anthropic.claude-3-5-sonnet-20240620-v1:0" + +# Upload file +batch_input_file = client.files.create( + file=open("./bedrock_batch_completions.jsonl", "rb"), + purpose="batch", + extra_body={"target_model_names": BEDROCK_BATCH_MODEL}, +) +print(batch_input_file) + +# Create batch +batch = client.batches.create( + input_file_id=batch_input_file.id, + endpoint="/v1/chat/completions", + completion_window="24h", + metadata={"description": "Test batch job"}, +) +print(batch) diff --git a/cookbook/litellm_proxy_server/batch_api/bedrock/bedrock_batch_completions.jsonl b/cookbook/litellm_proxy_server/batch_api/bedrock/bedrock_batch_completions.jsonl new file mode 100644 index 000000000..adef9ac2d --- /dev/null +++ b/cookbook/litellm_proxy_server/batch_api/bedrock/bedrock_batch_completions.jsonl @@ -0,0 +1,128 @@ +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} diff --git a/cookbook/litellm_proxy_server/braintrust_prompt_wrapper_README.md b/cookbook/litellm_proxy_server/braintrust_prompt_wrapper_README.md new file mode 100644 index 000000000..1bf52d922 --- /dev/null +++ b/cookbook/litellm_proxy_server/braintrust_prompt_wrapper_README.md @@ -0,0 +1,279 @@ +# Braintrust Prompt Wrapper for LiteLLM + +This directory contains a wrapper server that enables LiteLLM to use prompts from [Braintrust](https://www.braintrust.dev/) through the generic prompt management API. + +## Architecture + +``` +ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” +│ LiteLLM │ ──────> │ Wrapper Server │ ──────> │ Braintrust │ +│ Client │ │ (This Server) │ │ API │ +ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ + Uses generic Transforms Stores actual + prompt manager Braintrust format prompt templates + to LiteLLM format +``` + +## Components + +### 1. Generic Prompt Manager (`litellm/integrations/generic_prompt_management/`) + +A generic client that can work with any API implementing the `/beta/litellm_prompt_management` endpoint. + +**Expected API Response Format:** +```json +{ + "prompt_id": "string", + "prompt_template": [ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": "Hello {name}"} + ], + "prompt_template_model": "gpt-4", + "prompt_template_optional_params": { + "temperature": 0.7, + "max_tokens": 100 + } +} +``` + +### 2. Braintrust Wrapper Server (`braintrust_prompt_wrapper_server.py`) + +A FastAPI server that: +- Implements the `/beta/litellm_prompt_management` endpoint +- Fetches prompts from Braintrust API +- Transforms Braintrust response format to LiteLLM format + +## Setup + +### Install Dependencies + +```bash +pip install fastapi uvicorn httpx litellm +``` + +### Set Environment Variables + +```bash +export BRAINTRUST_API_KEY="your-braintrust-api-key" +``` + +## Usage + +### Step 1: Start the Wrapper Server + +```bash +python braintrust_prompt_wrapper_server.py +``` + +The server will start on `http://localhost:8080` by default. + +You can customize the port and host: +```bash +export PORT=8000 +export HOST=0.0.0.0 +python braintrust_prompt_wrapper_server.py +``` + +### Step 2: Use with LiteLLM + +```python +import litellm +from litellm.integrations.generic_prompt_management import GenericPromptManager + +# Configure the generic prompt manager to use your wrapper server +generic_config = { + "api_base": "http://localhost:8080", + "api_key": "your-braintrust-api-key", # Will be passed to Braintrust + "timeout": 30, +} + +# Create the prompt manager +prompt_manager = GenericPromptManager(**generic_config) + +# Use with completion +response = litellm.completion( + model="generic_prompt/gpt-4", + prompt_id="your-braintrust-prompt-id", + prompt_variables={"name": "World"}, # Variables to substitute + messages=[{"role": "user", "content": "Additional message"}] +) + +print(response) +``` + +### Step 3: Direct API Testing + +You can also test the wrapper API directly: + +```bash +# Test with curl +curl -H "Authorization: Bearer YOUR_BRAINTRUST_TOKEN" \ + "http://localhost:8080/beta/litellm_prompt_management?prompt_id=YOUR_PROMPT_ID" + +# Health check +curl http://localhost:8080/health + +# Service info +curl http://localhost:8080/ +``` + +## API Documentation + +Once the server is running, visit: +- Swagger UI: `http://localhost:8080/docs` +- ReDoc: `http://localhost:8080/redoc` + +## Braintrust Format Transformation + +The wrapper automatically transforms Braintrust's response format: + +**Braintrust API Response:** +```json +{ + "id": "prompt-123", + "prompt_data": { + "prompt": { + "type": "chat", + "messages": [ + { + "role": "system", + "content": "You are a helpful assistant" + } + ] + }, + "options": { + "model": "gpt-4", + "params": { + "temperature": 0.7, + "max_tokens": 100 + } + } + } +} +``` + +**Transformed to LiteLLM Format:** +```json +{ + "prompt_id": "prompt-123", + "prompt_template": [ + { + "role": "system", + "content": "You are a helpful assistant" + } + ], + "prompt_template_model": "gpt-4", + "prompt_template_optional_params": { + "temperature": 0.7, + "max_tokens": 100 + } +} +``` + +## Supported Parameters + +The wrapper automatically maps these Braintrust parameters to LiteLLM: + +- `temperature` +- `max_tokens` / `max_completion_tokens` +- `top_p` +- `frequency_penalty` +- `presence_penalty` +- `n` +- `stop` +- `response_format` +- `tool_choice` +- `function_call` +- `tools` + +## Variable Substitution + +The generic prompt manager supports simple variable substitution: + +```python +# In your Braintrust prompt: +# "Hello {name}, welcome to {place}!" + +# In your code: +prompt_variables = { + "name": "Alice", + "place": "Wonderland" +} + +# Result: +# "Hello Alice, welcome to Wonderland!" +``` + +Supports both `{variable}` and `{{variable}}` syntax. + +## Error Handling + +The wrapper provides detailed error messages: + +- **401**: Missing or invalid Braintrust API token +- **404**: Prompt not found in Braintrust +- **502**: Failed to connect to Braintrust API +- **500**: Error transforming response + +## Production Deployment + +For production use: + +1. **Use HTTPS**: Deploy behind a reverse proxy with SSL +2. **Authentication**: Add authentication to the wrapper endpoint if needed +3. **Rate Limiting**: Implement rate limiting to prevent abuse +4. **Caching**: Consider caching prompt responses +5. **Monitoring**: Add logging and monitoring + +Example with Docker: + +```dockerfile +FROM python:3.11-slim + +WORKDIR /app + +RUN pip install fastapi uvicorn httpx + +COPY braintrust_prompt_wrapper_server.py . + +ENV PORT=8080 +ENV HOST=0.0.0.0 + +EXPOSE 8080 + +CMD ["python", "braintrust_prompt_wrapper_server.py"] +``` + +## Extending to Other Providers + +This pattern can be used with any prompt management provider: + +1. Create a wrapper server that implements `/beta/litellm_prompt_management` +2. Transform the provider's response to LiteLLM format +3. Use the generic prompt manager to connect + +Example providers: +- Langsmith +- PromptLayer +- Humanloop +- Custom internal systems + +## Troubleshooting + +### "No Braintrust API token provided" +- Set `BRAINTRUST_API_KEY` environment variable +- Or pass token in `Authorization: Bearer TOKEN` header + +### "Failed to connect to Braintrust API" +- Check your internet connection +- Verify Braintrust API is accessible +- Check firewall settings + +### "Prompt not found" +- Verify the prompt ID exists in Braintrust +- Check that your API token has access to the prompt + +## License + +This wrapper is part of the LiteLLM project and follows the same license. + diff --git a/cookbook/litellm_proxy_server/braintrust_prompt_wrapper_server.py b/cookbook/litellm_proxy_server/braintrust_prompt_wrapper_server.py new file mode 100644 index 000000000..6379314c5 --- /dev/null +++ b/cookbook/litellm_proxy_server/braintrust_prompt_wrapper_server.py @@ -0,0 +1,274 @@ +""" +Mock server that implements the /beta/litellm_prompt_management endpoint +and acts as a wrapper for calling the Braintrust API. + +This server transforms Braintrust's prompt API response into the format +expected by LiteLLM's generic prompt management client. + +Usage: + python braintrust_prompt_wrapper_server.py + + # Then test with: + curl -H "Authorization: Bearer YOUR_BRAINTRUST_TOKEN" \ + "http://localhost:8080/beta/litellm_prompt_management?prompt_id=YOUR_PROMPT_ID" +""" + +import json +import os +from typing import Any, Dict, List, Optional + +import httpx +from fastapi import FastAPI, HTTPException, Header, Query +from fastapi.responses import JSONResponse +import uvicorn + + +app = FastAPI( + title="Braintrust Prompt Wrapper", + description="Wrapper server for Braintrust prompts to work with LiteLLM", + version="1.0.0", +) + + +def transform_braintrust_message(message: Dict[str, Any]) -> Dict[str, str]: + """ + Transform a Braintrust message to LiteLLM format. + + Braintrust message format: + { + "role": "system", + "content": "...", + "name": "..." (optional) + } + + LiteLLM format: + { + "role": "system", + "content": "..." + } + """ + result = { + "role": message.get("role", "user"), + "content": message.get("content", ""), + } + + # Include name if present + if "name" in message: + result["name"] = message["name"] + + return result + + +def transform_braintrust_response( + braintrust_response: Dict[str, Any], +) -> Dict[str, Any]: + """ + Transform Braintrust API response to LiteLLM prompt management format. + + Braintrust response format: + { + "objects": [{ + "id": "prompt_id", + "prompt_data": { + "prompt": { + "type": "chat", + "messages": [...], + "tools": "..." + }, + "options": { + "model": "gpt-4", + "params": { + "temperature": 0.7, + "max_tokens": 100, + ... + } + } + } + }] + } + + LiteLLM format: + { + "prompt_id": "prompt_id", + "prompt_template": [...], + "prompt_template_model": "gpt-4", + "prompt_template_optional_params": {...} + } + """ + # Extract the first object from the objects array if it exists + if "objects" in braintrust_response and len(braintrust_response["objects"]) > 0: + prompt_object = braintrust_response["objects"][0] + else: + prompt_object = braintrust_response + + prompt_data = prompt_object.get("prompt_data", {}) + prompt_info = prompt_data.get("prompt", {}) + options = prompt_data.get("options", {}) + + # Extract messages + messages = prompt_info.get("messages", []) + transformed_messages = [transform_braintrust_message(msg) for msg in messages] + + # Extract model + model = options.get("model") + + # Extract optional parameters + params = options.get("params", {}) + optional_params: Dict[str, Any] = {} + + # Map common parameters + param_mapping = { + "temperature": "temperature", + "max_tokens": "max_tokens", + "max_completion_tokens": "max_tokens", # Alternative name + "top_p": "top_p", + "frequency_penalty": "frequency_penalty", + "presence_penalty": "presence_penalty", + "n": "n", + "stop": "stop", + } + + for braintrust_param, litellm_param in param_mapping.items(): + if braintrust_param in params: + value = params[braintrust_param] + if value is not None: + optional_params[litellm_param] = value + + # Handle response_format + if "response_format" in params: + optional_params["response_format"] = params["response_format"] + + # Handle tool_choice + if "tool_choice" in params: + optional_params["tool_choice"] = params["tool_choice"] + + # Handle function_call + if "function_call" in params: + optional_params["function_call"] = params["function_call"] + + # Add tools if present + if "tools" in prompt_info and prompt_info["tools"]: + optional_params["tools"] = prompt_info["tools"] + + # Handle tool_functions from prompt_data + if "tool_functions" in prompt_data and prompt_data["tool_functions"]: + optional_params["tool_functions"] = prompt_data["tool_functions"] + + return { + "prompt_id": prompt_object.get("id"), + "prompt_template": transformed_messages, + "prompt_template_model": model, + "prompt_template_optional_params": optional_params if optional_params else None, + } + + +@app.get("/beta/litellm_prompt_management") +async def get_prompt( + prompt_id: str = Query(..., description="The Braintrust prompt ID to fetch"), + authorization: Optional[str] = Header( + None, description="Bearer token for Braintrust API" + ), +) -> JSONResponse: + """ + Fetch a prompt from Braintrust and transform it to LiteLLM format. + + Args: + prompt_id: The Braintrust prompt ID + authorization: Bearer token for Braintrust API (from header) + + Returns: + JSONResponse with the transformed prompt data + """ + # Extract token from Authorization header or environment + braintrust_token = None + if authorization and authorization.startswith("Bearer "): + braintrust_token = authorization.replace("Bearer ", "") + else: + braintrust_token = os.getenv("BRAINTRUST_API_KEY") + + if not braintrust_token: + raise HTTPException( + status_code=401, + detail="No Braintrust API token provided. Pass via Authorization header or set BRAINTRUST_API_KEY environment variable.", + ) + + # Call Braintrust API + braintrust_url = f"https://api.braintrust.dev/v1/prompt/{prompt_id}" + headers = { + "Authorization": f"Bearer {braintrust_token}", + "Accept": "application/json", + } + print(f"headers: {headers}") + print(f"braintrust_url: {braintrust_url}") + print(f"braintrust_token: {braintrust_token}") + + try: + async with httpx.AsyncClient(timeout=30.0) as client: + response = await client.get(braintrust_url, headers=headers) + response.raise_for_status() + braintrust_data = response.json() + except httpx.HTTPStatusError as e: + raise HTTPException( + status_code=e.response.status_code, + detail=f"Braintrust API error: {e.response.text}", + ) + except httpx.RequestError as e: + raise HTTPException( + status_code=502, + detail=f"Failed to connect to Braintrust API: {str(e)}", + ) + except json.JSONDecodeError as e: + raise HTTPException( + status_code=502, + detail=f"Failed to parse Braintrust API response: {str(e)}", + ) + + print(f"braintrust_data: {braintrust_data}") + # Transform the response + try: + transformed_data = transform_braintrust_response(braintrust_data) + print(f"transformed_data: {transformed_data}") + return JSONResponse(content=transformed_data) + except Exception as e: + raise HTTPException( + status_code=500, + detail=f"Failed to transform Braintrust response: {str(e)}", + ) + + +@app.get("/health") +async def health_check(): + """Health check endpoint.""" + return {"status": "healthy", "service": "braintrust-prompt-wrapper"} + + +@app.get("/") +async def root(): + """Root endpoint with service information.""" + return { + "service": "Braintrust Prompt Wrapper for LiteLLM", + "version": "1.0.0", + "endpoints": { + "prompt_management": "/beta/litellm_prompt_management?prompt_id=", + "health": "/health", + }, + "documentation": "/docs", + } + + +def main(): + """Run the server.""" + port = int(os.getenv("PORT", "8080")) + host = os.getenv("HOST", "0.0.0.0") + + print(f"šŸš€ Starting Braintrust Prompt Wrapper Server on {host}:{port}") + print(f"šŸ“š API Documentation available at http://{host}:{port}/docs") + print( + f"šŸ”‘ Make sure to set BRAINTRUST_API_KEY environment variable or pass token in Authorization header" + ) + + uvicorn.run(app, host=host, port=port) + + +if __name__ == "__main__": + main() diff --git a/cookbook/litellm_proxy_server/cli_token_usage.py b/cookbook/litellm_proxy_server/cli_token_usage.py new file mode 100644 index 000000000..6306970cd --- /dev/null +++ b/cookbook/litellm_proxy_server/cli_token_usage.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +""" +Example: Using CLI token with LiteLLM SDK + +This example shows how to use the CLI authentication token +in your Python scripts after running `litellm-proxy login`. +""" + +from textwrap import indent +import litellm + +LITELLM_BASE_URL = "http://localhost:4000/" + + +def main(): + """Using CLI token with LiteLLM SDK""" + print("šŸš€ Using CLI Token with LiteLLM SDK") + print("=" * 40) + # litellm._turn_on_debug() + + # Get the CLI token + api_key = litellm.get_litellm_gateway_api_key() + + if not api_key: + print("āŒ No CLI token found. Please run 'litellm-proxy login' first.") + return + + print("āœ… Found CLI token.") + + available_models = litellm.get_valid_models( + check_provider_endpoint=True, + custom_llm_provider="litellm_proxy", + api_key=api_key, + api_base=LITELLM_BASE_URL, + ) + + print("āœ… Available models:") + if available_models: + for i, model in enumerate(available_models, 1): + print(f" {i:2d}. {model}") + else: + print(" No models available") + + # Use with LiteLLM + try: + response = litellm.completion( + model="litellm_proxy/gemini/gemini-2.5-flash", + messages=[{"role": "user", "content": "Hello from CLI token!"}], + api_key=api_key, + base_url=LITELLM_BASE_URL, + ) + print(f"āœ… LLM Response: {response.model_dump_json(indent=4)}") + except Exception as e: + print(f"āŒ Error: {e}") + + +if __name__ == "__main__": + main() + + print("\nšŸ’” Tips:") + print("1. Run 'litellm-proxy login' to authenticate first") + print("2. Replace 'https://your-proxy.com' with your actual proxy URL") + print("3. The token is stored locally at ~/.litellm/token.json") diff --git a/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_1/grafana_dashboard.json b/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_1/grafana_dashboard.json new file mode 100644 index 000000000..269c1ea5a --- /dev/null +++ b/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_1/grafana_dashboard.json @@ -0,0 +1,614 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 2039, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum(rate(litellm_self_latency_bucket{self=\"self\"}[1m])) by (le))", + "legendFormat": "Time to first token", + "range": true, + "refId": "A" + } + ], + "title": "Time to first token (latency)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "currencyUSD" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "7e4b0627fd32efdd2313c846325575808aadcf2839f0fde90723aab9ab73c78f" + }, + "properties": [ + { + "id": "displayName", + "value": "Translata" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 11, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(increase(litellm_spend_metric_total[30d])) by (hashed_api_key)", + "legendFormat": "{{team}}", + "range": true, + "refId": "A" + } + ], + "title": "Spend by team", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (model) (increase(litellm_requests_metric_total[5m]))", + "legendFormat": "{{model}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests by model", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 3, + "x": 0, + "y": 25 + }, + "id": 8, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.4.17", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(increase(litellm_llm_api_failed_requests_metric_total[1h]))", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Faild Requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "currencyUSD" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 3, + "x": 3, + "y": 25 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(increase(litellm_spend_metric_total[30d])) by (model)", + "legendFormat": "{{model}}", + "range": true, + "refId": "A" + } + ], + "title": "Spend", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 25 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(increase(litellm_total_tokens_total[5m])) by (model)", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Tokens", + "type": "timeseries" + } + ], + "refresh": "1m", + "revision": 1, + "schemaVersion": 38, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "prometheus", + "value": "edx8memhpd9tsa" + }, + "hide": 0, + "includeAll": false, + "label": "datasource", + "multi": false, + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "LLM Proxy", + "uid": "rgRrHxESz", + "version": 15, + "weekStart": "" + } \ No newline at end of file diff --git a/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_1/readme.md b/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_1/readme.md new file mode 100644 index 000000000..1f193aba7 --- /dev/null +++ b/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_1/readme.md @@ -0,0 +1,6 @@ +## This folder contains the `json` for creating the following Grafana Dashboard + +### Pre-Requisites +- Setup LiteLLM Proxy Prometheus Metrics https://docs.litellm.ai/docs/proxy/prometheus + +![1716623265684](https://github.com/BerriAI/litellm/assets/29436595/0e12c57e-4a2d-4850-bd4f-e4294f87a814) diff --git a/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_v2/grafana_dashboard.json b/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_v2/grafana_dashboard.json new file mode 100644 index 000000000..503364d8f --- /dev/null +++ b/cookbook/litellm_proxy_server/grafana_dashboard/dashboard_v2/grafana_dashboard.json @@ -0,0 +1,827 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 20, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 3, + "panels": [], + "title": "LiteLLM Proxy Level Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Total requests per second made to proxy - success + failure ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-76761.patch01-77040", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(litellm_proxy_total_requests_metric_total[2m]))", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Proxy - Requests per second (success + failure)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Failures per second by Exception Class", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-76761.patch01-77040", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(litellm_proxy_failed_requests_metric_total[2m])) by (exception_class)", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Proxy Failure Responses / Second By Exception Class", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Average Response latency (seconds)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "sum(rate(litellm_request_total_latency_metric_sum[2m]))/sum(rate(litellm_request_total_latency_metric_count[2m]))" + }, + "properties": [ + { + "id": "displayName", + "value": "Average Latency (seconds)" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "histogram_quantile(0.5, sum(rate(litellm_request_total_latency_metric_bucket[2m])) by (le))" + }, + "properties": [ + { + "id": "displayName", + "value": "Median Latency (seconds)" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-76761.patch01-77040", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(litellm_request_total_latency_metric_sum[2m]))/sum(rate(litellm_request_total_latency_metric_count[2m]))", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.5, sum(rate(litellm_request_total_latency_metric_bucket[2m])) by (le))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "Median latency seconds" + } + ], + "title": "Proxy - Average & Median Response Latency (seconds)", + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 7, + "panels": [], + "title": "LLM API Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "x-ratelimit-remaining-requests returning from LLM APIs", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-76761.patch01-77040", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "topk(5, sort(litellm_remaining_requests))", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "x-ratelimit-remaining-requests", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "x-ratelimit-remaining-tokens from LLM API ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 18 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-76761.patch01-77040", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "topk(5, sort(litellm_remaining_tokens))", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "x-ratelimit-remaining-tokens", + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 4, + "panels": [], + "title": "LiteLLM Metrics by Virtual Key and Team", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Requests per second by Key Alias (keys are LiteLLM Virtual Keys). If key is None - means no Alias Set ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 27 + }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-76761.patch01-77040", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(litellm_proxy_total_requests_metric_total[2m])) by (api_key_alias)\n", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Requests per second by Key Alias", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Requests per second by Team Alias. If team is None - means no team alias Set ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 27 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-76761.patch01-77040", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(litellm_proxy_total_requests_metric_total[2m])) by (team_alias)\n", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Requests per second by Team Alias", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "prometheus", + "value": "edx8memhpd9tsb" + }, + "hide": 0, + "includeAll": false, + "label": "datasource", + "multi": false, + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "LiteLLM Prod v2", + "uid": "be059pwgrlg5cf", + "version": 17, + "weekStart": "" + } \ No newline at end of file diff --git a/cookbook/litellm_proxy_server/grafana_dashboard/readme.md b/cookbook/litellm_proxy_server/grafana_dashboard/readme.md new file mode 100644 index 000000000..81235c308 --- /dev/null +++ b/cookbook/litellm_proxy_server/grafana_dashboard/readme.md @@ -0,0 +1,14 @@ +# Contains LiteLLM maintained grafana dashboard + +This folder contains the `json` for creating Grafana Dashboards + +## [LiteLLM v2 Dashboard](./dashboard_v2) + +grafana_1 +grafana_2 +grafana_3 + + + +### Pre-Requisites +- Setup LiteLLM Proxy Prometheus Metrics https://docs.litellm.ai/docs/proxy/prometheus diff --git a/cookbook/litellm_proxy_server/mcp/mcp_with_litellm_proxy.py b/cookbook/litellm_proxy_server/mcp/mcp_with_litellm_proxy.py new file mode 100644 index 000000000..cc9330276 --- /dev/null +++ b/cookbook/litellm_proxy_server/mcp/mcp_with_litellm_proxy.py @@ -0,0 +1,37 @@ +""" +Use LiteLLM Proxy MCP Gateway to call MCP tools. + +When using LiteLLM Proxy, you can use the same MCP tools across all your LLM providers. +""" + +import openai + +client = openai.OpenAI( + api_key="sk-1234", # paste your litellm proxy api key here + base_url="http://localhost:4000", # paste your litellm proxy base url here +) +print("Making API request to Responses API with MCP tools") + +response = client.responses.create( + model="gpt-5", + input=[ + { + "role": "user", + "content": "give me TLDR of what BerriAI/litellm repo is about", + "type": "message", + } + ], + tools=[ + { + "type": "mcp", + "server_label": "litellm", + "server_url": "litellm_proxy", + "require_approval": "never", + } + ], + stream=True, + tool_choice="required", +) + +for chunk in response: + print("response chunk: ", chunk) diff --git a/cookbook/litellm_proxy_server/readme.md b/cookbook/litellm_proxy_server/readme.md new file mode 100644 index 000000000..2c1eab72c --- /dev/null +++ b/cookbook/litellm_proxy_server/readme.md @@ -0,0 +1,177 @@ +# liteLLM Proxy Server: 50+ LLM Models, Error Handling, Caching + +### Azure, Llama2, OpenAI, Claude, Hugging Face, Replicate Models + +[![PyPI Version](https://img.shields.io/pypi/v/litellm.svg)](https://pypi.org/project/litellm/) +[![PyPI Version](https://img.shields.io/badge/stable%20version-v0.1.345-blue?color=green&link=https://pypi.org/project/litellm/0.1.1/)](https://pypi.org/project/litellm/0.1.1/) +![Downloads](https://img.shields.io/pypi/dm/litellm) +[![litellm](https://img.shields.io/badge/%20%F0%9F%9A%85%20liteLLM-OpenAI%7CAzure%7CAnthropic%7CPalm%7CCohere%7CReplicate%7CHugging%20Face-blue?color=green)](https://github.com/BerriAI/litellm) + +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/DYqQAW?referralCode=t3ukrU) + +![4BC6491E-86D0-4833-B061-9F54524B2579](https://github.com/BerriAI/litellm/assets/17561003/f5dd237b-db5e-42e1-b1ac-f05683b1d724) + +## What does liteLLM proxy do + +- Make `/chat/completions` requests for 50+ LLM models **Azure, OpenAI, Replicate, Anthropic, Hugging Face** + + Example: for `model` use `claude-2`, `gpt-3.5`, `gpt-4`, `command-nightly`, `stabilityai/stablecode-completion-alpha-3b-4k` + + ```json + { + "model": "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1", + "messages": [ + { + "content": "Hello, whats the weather in San Francisco??", + "role": "user" + } + ] + } + ``` + +- **Consistent Input/Output** Format + - Call all models using the OpenAI format - `completion(model, messages)` + - Text responses will always be available at `['choices'][0]['message']['content']` +- **Error Handling** Using Model Fallbacks (if `GPT-4` fails, try `llama2`) +- **Logging** - Log Requests, Responses and Errors to `Supabase`, `Posthog`, `Mixpanel`, `Sentry`, `Lunary`,`Athina`, `Helicone` (Any of the supported providers here: https://litellm.readthedocs.io/en/latest/advanced/ + + **Example: Logs sent to Supabase** + Screenshot 2023-08-11 at 4 02 46 PM + +- **Token Usage & Spend** - Track Input + Completion tokens used + Spend/model +- **Caching** - Implementation of Semantic Caching +- **Streaming & Async Support** - Return generators to stream text responses + +## API Endpoints + +### `/chat/completions` (POST) + +This endpoint is used to generate chat completions for 50+ support LLM API Models. Use llama2, GPT-4, Claude2 etc + +#### Input + +This API endpoint accepts all inputs in raw JSON and expects the following inputs + +- `model` (string, required): ID of the model to use for chat completions. See all supported models [here]: (https://litellm.readthedocs.io/en/latest/supported/): + eg `gpt-3.5-turbo`, `gpt-4`, `claude-2`, `command-nightly`, `stabilityai/stablecode-completion-alpha-3b-4k` +- `messages` (array, required): A list of messages representing the conversation context. Each message should have a `role` (system, user, assistant, or function), `content` (message text), and `name` (for function role). +- Additional Optional parameters: `temperature`, `functions`, `function_call`, `top_p`, `n`, `stream`. See the full list of supported inputs here: https://litellm.readthedocs.io/en/latest/input/ + +#### Example JSON body + +For claude-2 + +```json +{ + "model": "claude-2", + "messages": [ + { + "content": "Hello, whats the weather in San Francisco??", + "role": "user" + } + ] +} +``` + +### Making an API request to the Proxy Server + +```python +import requests +import json + +# TODO: use your URL +url = "http://localhost:5000/chat/completions" + +payload = json.dumps({ + "model": "gpt-3.5-turbo", + "messages": [ + { + "content": "Hello, whats the weather in San Francisco??", + "role": "user" + } + ] +}) +headers = { + 'Content-Type': 'application/json' +} +response = requests.request("POST", url, headers=headers, data=payload) +print(response.text) + +``` + +### Output [Response Format] + +Responses from the server are given in the following format. +All responses from the server are returned in the following format (for all LLM models). More info on output here: https://litellm.readthedocs.io/en/latest/output/ + +```json +{ + "choices": [ + { + "finish_reason": "stop", + "index": 0, + "message": { + "content": "I'm sorry, but I don't have the capability to provide real-time weather information. However, you can easily check the weather in San Francisco by searching online or using a weather app on your phone.", + "role": "assistant" + } + } + ], + "created": 1691790381, + "id": "chatcmpl-7mUFZlOEgdohHRDx2UpYPRTejirzb", + "model": "gpt-3.5-turbo-0613", + "object": "chat.completion", + "usage": { + "completion_tokens": 41, + "prompt_tokens": 16, + "total_tokens": 57 + } +} +``` + +## Installation & Usage + +### Running Locally + +1. Clone liteLLM repository to your local machine: + ``` + git clone https://github.com/BerriAI/liteLLM-proxy + ``` +2. Install the required dependencies using pip + ``` + pip install -r requirements.txt + ``` +3. Set your LLM API keys + ``` + os.environ['OPENAI_API_KEY]` = "YOUR_API_KEY" + or + set OPENAI_API_KEY in your .env file + ``` +4. Run the server: + ``` + python main.py + ``` + +## Deploying + +1. Quick Start: Deploy on Railway + + [![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/DYqQAW?referralCode=t3ukrU) + +2. `GCP`, `AWS`, `Azure` + This project includes a `Dockerfile` allowing you to build and deploy a Docker Project on your providers + +# Support / Talk with founders + +- [Our calendar šŸ‘‹](https://calendly.com/d/4mp-gd3-k5k/berriai-1-1-onboarding-litellm-hosted-version) +- [Community Discord šŸ’­](https://discord.gg/wuPM9dRgDw) +- Our emails āœ‰ļø ishaan@berri.ai / krrish@berri.ai + +## Roadmap + +- [ ] Support hosted db (e.g. Supabase) +- [ ] Easily send data to places like posthog and sentry. +- [ ] Add a hot-cache for project spend logs - enables fast checks for user + project limitings +- [ ] Implement user-based rate-limiting +- [ ] Spending controls per project - expose key creation endpoint +- [ ] Need to store a keys db -> mapping created keys to their alias (i.e. project name) +- [ ] Easily add new models as backups / as the entry-point (add this to the available model list) diff --git a/cookbook/litellm_proxy_server/secret_manager/custom_secret_manager_config.yaml b/cookbook/litellm_proxy_server/secret_manager/custom_secret_manager_config.yaml new file mode 100644 index 000000000..3598a9b1b --- /dev/null +++ b/cookbook/litellm_proxy_server/secret_manager/custom_secret_manager_config.yaml @@ -0,0 +1,20 @@ +general_settings: + master_key: os.environ/LITELLM_MASTER_KEY + key_management_system: "custom" + key_management_settings: + custom_secret_manager: my_secret_manager.InMemorySecretManager + store_virtual_keys: true + prefix_for_stored_virtual_keys: "litellm/" + access_mode: "read_and_write" + +model_list: + - model_name: gpt-4 + litellm_params: + model: openai/gpt-4 + api_key: os.environ/OPENAI_API_KEY # Read from custom secret manager + + - model_name: claude-3-5-sonnet + litellm_params: + model: anthropic/claude-3-5-sonnet-20241022 + api_key: os.environ/ANTHROPIC_API_KEY # Read from custom secret manager + diff --git a/cookbook/litellm_proxy_server/secret_manager/my_secret_manager.py b/cookbook/litellm_proxy_server/secret_manager/my_secret_manager.py new file mode 100644 index 000000000..65c7f754b --- /dev/null +++ b/cookbook/litellm_proxy_server/secret_manager/my_secret_manager.py @@ -0,0 +1,80 @@ +""" +Example custom secret manager for LiteLLM Proxy. + +This is a simple in-memory secret manager for testing purposes. +In production, replace this with your actual secret management system. +""" + +from typing import Optional, Union + +import httpx + +from litellm.integrations.custom_secret_manager import CustomSecretManager + + +class InMemorySecretManager(CustomSecretManager): + def __init__(self): + super().__init__(secret_manager_name="in_memory_secrets") + # Store your secrets in memory + print("INITIALIZING CUSTOM SECRET MANAGER IN MEMORY") + self.secrets = {} + print("CUSTOM SECRET MANAGER IN MEMORY INITIALIZED") + + async def async_read_secret( + self, + secret_name: str, + optional_params: Optional[dict] = None, + timeout: Optional[Union[float, httpx.Timeout]] = None, + ) -> Optional[str]: + """Read secret asynchronously""" + print("READING SECRET ASYNCHRONOUSLY") + print("SECRET NAME: %s", secret_name) + print("SECRET: %s", self.secrets.get(secret_name)) + return self.secrets.get(secret_name) + + def sync_read_secret( + self, + secret_name: str, + optional_params: Optional[dict] = None, + timeout: Optional[Union[float, httpx.Timeout]] = None, + ) -> Optional[str]: + """Read secret synchronously""" + from litellm._logging import verbose_proxy_logger + + verbose_proxy_logger.info( + f"CUSTOM SECRET MANAGER: LOOKING FOR SECRET: {secret_name}" + ) + value = self.secrets.get(secret_name) + verbose_proxy_logger.info(f"CUSTOM SECRET MANAGER: READ SECRET: {value}") + return value + + async def async_write_secret( + self, + secret_name: str, + secret_value: str, + description: Optional[str] = None, + optional_params: Optional[dict] = None, + timeout: Optional[Union[float, httpx.Timeout]] = None, + tags: Optional[Union[dict, list]] = None, + ) -> dict: + """Write a secret to the in-memory store""" + self.secrets[secret_name] = secret_value + print("ALL SECRETS=%s", self.secrets) + return { + "status": "success", + "secret_name": secret_name, + "description": description, + } + + async def async_delete_secret( + self, + secret_name: str, + recovery_window_in_days: Optional[int] = 7, + optional_params: Optional[dict] = None, + timeout: Optional[Union[float, httpx.Timeout]] = None, + ) -> dict: + """Delete a secret from the in-memory store""" + if secret_name in self.secrets: + del self.secrets[secret_name] + return {"status": "deleted", "secret_name": secret_name} + return {"status": "not_found", "secret_name": secret_name} diff --git a/cookbook/litellm_router/error_log.txt b/cookbook/litellm_router/error_log.txt new file mode 100644 index 000000000..983b47cbb --- /dev/null +++ b/cookbook/litellm_router/error_log.txt @@ -0,0 +1,1004 @@ +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: Expecting value: line 1 column 1 (char 0) + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: Expecting value: line 1 column 1 (char 0) + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Exception: 'Response' object has no attribute 'get' + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Exception: 'Response' object has no attribute 'get' + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Exception: 'Response' object has no attribute 'get' + diff --git a/cookbook/litellm_router/load_test_proxy.py b/cookbook/litellm_router/load_test_proxy.py new file mode 100644 index 000000000..9ae6e764d --- /dev/null +++ b/cookbook/litellm_router/load_test_proxy.py @@ -0,0 +1,148 @@ +import sys +import os +from dotenv import load_dotenv + +load_dotenv() + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path + +from litellm import Router +import litellm + +litellm.set_verbose = False +os.environ.pop("AZURE_AD_TOKEN") + +model_list = [ + { # list of model deployments + "model_name": "gpt-3.5-turbo", # model alias + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", # actual model name + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-functioncalling", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + }, +] +router = Router(model_list=model_list) + + +file_paths = [ + "test_questions/question1.txt", + "test_questions/question2.txt", + "test_questions/question3.txt", +] +questions = [] + +for file_path in file_paths: + try: + print(file_path) + with open(file_path, "r") as file: + content = file.read() + questions.append(content) + except FileNotFoundError as e: + print(f"File not found: {e}") + except Exception as e: + print(f"An error occurred: {e}") + +# for q in questions: +# print(q) + + +# make X concurrent calls to litellm.completion(model=gpt-35-turbo, messages=[]), pick a random question in questions array. +# Allow me to tune X concurrent calls.. Log question, output/exception, response time somewhere +# show me a summary of requests made, success full calls, failed calls. For failed calls show me the exceptions + +import concurrent.futures +import random +import time + + +# Function to make concurrent calls to OpenAI API +def make_openai_completion(question): + try: + start_time = time.time() + import openai + + client = openai.OpenAI( + api_key=os.environ["OPENAI_API_KEY"], base_url="http://0.0.0.0:8000" + ) # base_url="http://0.0.0.0:8000", + response = client.chat.completions.create( + model="gpt-3.5-turbo", + messages=[ + { + "role": "system", + "content": f"You are a helpful assistant. Answer this question{question}", + } + ], + ) + print(response) + end_time = time.time() + + # Log the request details + with open("request_log.txt", "a") as log_file: + log_file.write( + f"Question: {question[:100]}\nResponse ID:{response.id} Content:{response.choices[0].message.content[:10]}\nTime: {end_time - start_time:.2f} seconds\n\n" + ) + + return response + except Exception as e: + # Log exceptions for failed calls + with open("error_log.txt", "a") as error_log_file: + error_log_file.write(f"Question: {question[:100]}\nException: {str(e)}\n\n") + return None + + +# Number of concurrent calls (you can adjust this) +concurrent_calls = 100 + +# List to store the futures of concurrent calls +futures = [] + +# Make concurrent calls +with concurrent.futures.ThreadPoolExecutor(max_workers=concurrent_calls) as executor: + for _ in range(concurrent_calls): + random_question = random.choice(questions) + futures.append(executor.submit(make_openai_completion, random_question)) + +# Wait for all futures to complete +concurrent.futures.wait(futures) + +# Summarize the results +successful_calls = 0 +failed_calls = 0 + +for future in futures: + if future.result() is not None: + successful_calls += 1 + else: + failed_calls += 1 + +print("Load test Summary:") +print(f"Total Requests: {concurrent_calls}") +print(f"Successful Calls: {successful_calls}") +print(f"Failed Calls: {failed_calls}") + +# Display content of the logs +with open("request_log.txt", "r") as log_file: + print("\nRequest Log:\n", log_file.read()) + +with open("error_log.txt", "r") as error_log_file: + print("\nError Log:\n", error_log_file.read()) diff --git a/cookbook/litellm_router/load_test_queuing.py b/cookbook/litellm_router/load_test_queuing.py new file mode 100644 index 000000000..7d4d44b25 --- /dev/null +++ b/cookbook/litellm_router/load_test_queuing.py @@ -0,0 +1,164 @@ +import sys +import os +from dotenv import load_dotenv + +load_dotenv() + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path + +from litellm import Router +import litellm + +litellm.set_verbose = False +# os.environ.pop("AZURE_AD_TOKEN") + +model_list = [ + { # list of model deployments + "model_name": "gpt-3.5-turbo", # model alias + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", # actual model name + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-functioncalling", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + }, +] +router = Router(model_list=model_list) + + +file_paths = [ + "test_questions/question1.txt", + "test_questions/question2.txt", + "test_questions/question3.txt", +] +questions = [] + +for file_path in file_paths: + try: + print(file_path) + with open(file_path, "r") as file: + content = file.read() + questions.append(content) + except FileNotFoundError as e: + print(f"File not found: {e}") + except Exception as e: + print(f"An error occurred: {e}") + +# for q in questions: +# print(q) + + +# make X concurrent calls to litellm.completion(model=gpt-35-turbo, messages=[]), pick a random question in questions array. +# Allow me to tune X concurrent calls.. Log question, output/exception, response time somewhere +# show me a summary of requests made, success full calls, failed calls. For failed calls show me the exceptions + +import concurrent.futures +import random +import time + + +# Function to make concurrent calls to OpenAI API +def make_openai_completion(question): + try: + start_time = time.time() + import requests + + data = { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "system", + "content": f"You are a helpful assistant. Answer this question{question}", + }, + ], + } + response = requests.post("http://0.0.0.0:8000/queue/request", json=data) + response = response.json() + end_time = time.time() + # Log the request details + with open("request_log.txt", "a") as log_file: + log_file.write( + f"Question: {question[:100]}\nResponse ID: {response.get('id', 'N/A')} Url: {response.get('url', 'N/A')}\nTime: {end_time - start_time:.2f} seconds\n\n" + ) + + # polling the url + while True: + try: + url = response["url"] + polling_url = f"http://0.0.0.0:8000{url}" + polling_response = requests.get(polling_url) + polling_response = polling_response.json() + print("\n RESPONSE FROM POLLING JoB", polling_response) + status = polling_response["status"] + if status == "finished": + llm_response = polling_response["result"] + with open("response_log.txt", "a") as log_file: + log_file.write( + f"Response ID: {llm_response.get('id', 'NA')}\nLLM Response: {llm_response}\nTime: {end_time - start_time:.2f} seconds\n\n" + ) + + break + print( + f"POLLING JOB{polling_url}\nSTATUS: {status}, \n Response {polling_response}" + ) + time.sleep(0.5) + except Exception as e: + print("got exception in polling", e) + break + + return response + except Exception as e: + # Log exceptions for failed calls + with open("error_log.txt", "a") as error_log_file: + error_log_file.write(f"Question: {question[:100]}\nException: {str(e)}\n\n") + return None + + +# Number of concurrent calls (you can adjust this) +concurrent_calls = 10 + +# List to store the futures of concurrent calls +futures = [] + +# Make concurrent calls +with concurrent.futures.ThreadPoolExecutor(max_workers=concurrent_calls) as executor: + for _ in range(concurrent_calls): + random_question = random.choice(questions) + futures.append(executor.submit(make_openai_completion, random_question)) + +# Wait for all futures to complete +concurrent.futures.wait(futures) + +# Summarize the results +successful_calls = 0 +failed_calls = 0 + +for future in futures: + if future.done(): + if future.result() is not None: + successful_calls += 1 + else: + failed_calls += 1 + +print("Load test Summary:") +print(f"Total Requests: {concurrent_calls}") +print(f"Successful Calls: {successful_calls}") +print(f"Failed Calls: {failed_calls}") diff --git a/cookbook/litellm_router/load_test_router.py b/cookbook/litellm_router/load_test_router.py new file mode 100644 index 000000000..92533b6c9 --- /dev/null +++ b/cookbook/litellm_router/load_test_router.py @@ -0,0 +1,143 @@ +import sys +import os +from dotenv import load_dotenv + +load_dotenv() + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path + +from litellm import Router +import litellm + +litellm.set_verbose = False +os.environ.pop("AZURE_AD_TOKEN") + +model_list = [ + { # list of model deployments + "model_name": "gpt-3.5-turbo", # model alias + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", # actual model name + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-functioncalling", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + }, +] +router = Router(model_list=model_list) + + +file_paths = [ + "test_questions/question1.txt", + "test_questions/question2.txt", + "test_questions/question3.txt", +] +questions = [] + +for file_path in file_paths: + try: + print(file_path) + with open(file_path, "r") as file: + content = file.read() + questions.append(content) + except FileNotFoundError as e: + print(f"File not found: {e}") + except Exception as e: + print(f"An error occurred: {e}") + +# for q in questions: +# print(q) + + +# make X concurrent calls to litellm.completion(model=gpt-35-turbo, messages=[]), pick a random question in questions array. +# Allow me to tune X concurrent calls.. Log question, output/exception, response time somewhere +# show me a summary of requests made, success full calls, failed calls. For failed calls show me the exceptions + +import concurrent.futures +import random +import time + + +# Function to make concurrent calls to OpenAI API +def make_openai_completion(question): + try: + start_time = time.time() + response = router.completion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "system", + "content": f"You are a helpful assistant. Answer this question{question}", + } + ], + ) + print(response) + end_time = time.time() + + # Log the request details + with open("request_log.txt", "a") as log_file: + log_file.write( + f"Question: {question[:100]}\nResponse: {response.choices[0].message.content}\nTime: {end_time - start_time:.2f} seconds\n\n" + ) + + return response + except Exception as e: + # Log exceptions for failed calls + with open("error_log.txt", "a") as error_log_file: + error_log_file.write(f"Question: {question[:100]}\nException: {str(e)}\n\n") + return None + + +# Number of concurrent calls (you can adjust this) +concurrent_calls = 150 + +# List to store the futures of concurrent calls +futures = [] + +# Make concurrent calls +with concurrent.futures.ThreadPoolExecutor(max_workers=concurrent_calls) as executor: + for _ in range(concurrent_calls): + random_question = random.choice(questions) + futures.append(executor.submit(make_openai_completion, random_question)) + +# Wait for all futures to complete +concurrent.futures.wait(futures) + +# Summarize the results +successful_calls = 0 +failed_calls = 0 + +for future in futures: + if future.result() is not None: + successful_calls += 1 + else: + failed_calls += 1 + +print("Load test Summary:") +print(f"Total Requests: {concurrent_calls}") +print(f"Successful Calls: {successful_calls}") +print(f"Failed Calls: {failed_calls}") + +# Display content of the logs +with open("request_log.txt", "r") as log_file: + print("\nRequest Log:\n", log_file.read()) + +with open("error_log.txt", "r") as error_log_file: + print("\nError Log:\n", error_log_file.read()) diff --git a/cookbook/litellm_router/request_log.txt b/cookbook/litellm_router/request_log.txt new file mode 100644 index 000000000..821d87ab5 --- /dev/null +++ b/cookbook/litellm_router/request_log.txt @@ -0,0 +1,48 @@ +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Response ID: 71a47cd4-92d9-4091-9429-8d22af6b56bf Url: /queue/response/71a47cd4-92d9-4091-9429-8d22af6b56bf +Time: 0.77 seconds + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Response ID: a0855c20-59ba-4eed-85c1-e0719eebdeab Url: /queue/response/a0855c20-59ba-4eed-85c1-e0719eebdeab +Time: 1.46 seconds + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Response ID: b131cdcd-0693-495b-ad41-b0cf2afc4833 Url: /queue/response/b131cdcd-0693-495b-ad41-b0cf2afc4833 +Time: 2.13 seconds + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Response ID: a58e5185-90e7-4832-9f28-e5a5ac167a40 Url: /queue/response/a58e5185-90e7-4832-9f28-e5a5ac167a40 +Time: 2.83 seconds + +Question: Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. +Response ID: 52dbbd49-eedb-4c11-8382-3ca7deb1af35 Url: /queue/response/52dbbd49-eedb-4c11-8382-3ca7deb1af35 +Time: 3.50 seconds + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Response ID: eedda05f-61e1-4081-b49d-27f9449bcf69 Url: /queue/response/eedda05f-61e1-4081-b49d-27f9449bcf69 +Time: 4.20 seconds + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Response ID: 8a484722-66ec-4193-b19b-2dfc4265cfd2 Url: /queue/response/8a484722-66ec-4193-b19b-2dfc4265cfd2 +Time: 4.89 seconds + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Response ID: ae1e2b71-d711-456d-8df0-13ce0709eb04 Url: /queue/response/ae1e2b71-d711-456d-8df0-13ce0709eb04 +Time: 5.60 seconds + +Question: What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 10 +Response ID: cfabd174-838e-4252-b82b-648923573db8 Url: /queue/response/cfabd174-838e-4252-b82b-648923573db8 +Time: 6.29 seconds + +Question: Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the Ope +Response ID: 02d5b7d6-5443-41e9-94e4-90d8b00d49fb Url: /queue/response/02d5b7d6-5443-41e9-94e4-90d8b00d49fb +Time: 7.01 seconds + diff --git a/cookbook/litellm_router/response_log.txt b/cookbook/litellm_router/response_log.txt new file mode 100644 index 000000000..e69de29bb diff --git a/cookbook/litellm_router/test_questions/question1.txt b/cookbook/litellm_router/test_questions/question1.txt new file mode 100644 index 000000000..d633a8ea2 --- /dev/null +++ b/cookbook/litellm_router/test_questions/question1.txt @@ -0,0 +1,43 @@ +Given this context, what is litellm? LiteLLM about: About +Call all LLM APIs using the OpenAI format. Use Bedrock, Azure, OpenAI, Cohere, Anthropic, Ollama, Sagemaker, HuggingFace, Replicate (100+ LLMs). LiteLLM manages + +Translating inputs to the provider's completion and embedding endpoints +Guarantees consistent output, text responses will always be available at ['choices'][0]['message']['content'] +Exception mapping - common exceptions across providers are mapped to the OpenAI exception types. +10/05/2023: LiteLLM is adopting Semantic Versioning for all commits. Learn more +10/16/2023: Self-hosted OpenAI-proxy server Learn more + +Usage (Docs) +Important +LiteLLM v1.0.0 is being launched to require openai>=1.0.0. Track this here + +Open In Colab +pip install litellm +from litellm import completion +import os + +## set ENV variables +os.environ["OPENAI_API_KEY"] = "your-openai-key" +os.environ["COHERE_API_KEY"] = "your-cohere-key" + +messages = [{ "content": "Hello, how are you?","role": "user"}] + +# openai call +response = completion(model="gpt-3.5-turbo", messages=messages) + +# cohere call +response = completion(model="command-nightly", messages=messages) +print(response) +Streaming (Docs) +liteLLM supports streaming the model response back, pass stream=True to get a streaming iterator in response. +Streaming is supported for all models (Bedrock, Huggingface, TogetherAI, Azure, OpenAI, etc.) + +from litellm import completion +response = completion(model="gpt-3.5-turbo", messages=messages, stream=True) +for chunk in response: + print(chunk['choices'][0]['delta']) + +# claude 2 +result = completion('claude-2', messages, stream=True) +for chunk in result: + print(chunk['choices'][0]['delta']) \ No newline at end of file diff --git a/cookbook/litellm_router/test_questions/question2.txt b/cookbook/litellm_router/test_questions/question2.txt new file mode 100644 index 000000000..78188d066 --- /dev/null +++ b/cookbook/litellm_router/test_questions/question2.txt @@ -0,0 +1,65 @@ +Does litellm support ooobagooba llms? how can i call oobagooba llms. Call all LLM APIs using the OpenAI format. Use Bedrock, Azure, OpenAI, Cohere, Anthropic, Ollama, Sagemaker, HuggingFace, Replicate (100+ LLMs). LiteLLM manages + +Translating inputs to the provider's completion and embedding endpoints +Guarantees consistent output, text responses will always be available at ['choices'][0]['message']['content'] +Exception mapping - common exceptions across providers are mapped to the OpenAI exception types. +10/05/2023: LiteLLM is adopting Semantic Versioning for all commits. Learn more +10/16/2023: Self-hosted OpenAI-proxy server Learn more + +Usage (Docs) +Important +LiteLLM v1.0.0 is being launched to require openai>=1.0.0. Track this here + +Open In Colab +pip install litellm +from litellm import completion +import os + +## set ENV variables +os.environ["OPENAI_API_KEY"] = "your-openai-key" +os.environ["COHERE_API_KEY"] = "your-cohere-key" + +messages = [{ "content": "Hello, how are you?","role": "user"}] + +# openai call +response = completion(model="gpt-3.5-turbo", messages=messages) + +# cohere call +response = completion(model="command-nightly", messages=messages) +print(response) +Streaming (Docs) +liteLLM supports streaming the model response back, pass stream=True to get a streaming iterator in response. +Streaming is supported for all models (Bedrock, Huggingface, TogetherAI, Azure, OpenAI, etc.) + +from litellm import completion +response = completion(model="gpt-3.5-turbo", messages=messages, stream=True) +for chunk in response: + print(chunk['choices'][0]['delta']) + +# claude 2 +result = completion('claude-2', messages, stream=True) +for chunk in result: + print(chunk['choices'][0]['delta']) Supported LiteLLM providers Supported Provider (Docs) +Provider Completion Streaming Async Completion Async Streaming +openai āœ… āœ… āœ… āœ… +azure āœ… āœ… āœ… āœ… +aws - sagemaker āœ… āœ… āœ… āœ… +aws - bedrock āœ… āœ… āœ… āœ… +cohere āœ… āœ… āœ… āœ… +anthropic āœ… āœ… āœ… āœ… +huggingface āœ… āœ… āœ… āœ… +replicate āœ… āœ… āœ… āœ… +together_ai āœ… āœ… āœ… āœ… +openrouter āœ… āœ… āœ… āœ… +google - vertex_ai āœ… āœ… āœ… āœ… +google - palm āœ… āœ… āœ… āœ… +ai21 āœ… āœ… āœ… āœ… +baseten āœ… āœ… āœ… āœ… +vllm āœ… āœ… āœ… āœ… +nlp_cloud āœ… āœ… āœ… āœ… +aleph alpha āœ… āœ… āœ… āœ… +petals āœ… āœ… āœ… āœ… +ollama āœ… āœ… āœ… āœ… +deepinfra āœ… āœ… āœ… āœ… +perplexity-ai āœ… āœ… āœ… āœ… +anyscale āœ… āœ… āœ… āœ… \ No newline at end of file diff --git a/cookbook/litellm_router/test_questions/question3.txt b/cookbook/litellm_router/test_questions/question3.txt new file mode 100644 index 000000000..d6006f9c7 --- /dev/null +++ b/cookbook/litellm_router/test_questions/question3.txt @@ -0,0 +1,50 @@ +What endpoints does the litellm proxy have šŸ’„ LiteLLM Proxy Server +LiteLLM Server manages: + +Calling 100+ LLMs Huggingface/Bedrock/TogetherAI/etc. in the OpenAI ChatCompletions & Completions format +Set custom prompt templates + model-specific configs (temperature, max_tokens, etc.) +Quick Start +View all the supported args for the Proxy CLI here + +$ litellm --model huggingface/bigcode/starcoder + +#INFO: Proxy running on http://0.0.0.0:8000 + +Test +In a new shell, run, this will make an openai.ChatCompletion request + +litellm --test + +This will now automatically route any requests for gpt-3.5-turbo to bigcode starcoder, hosted on huggingface inference endpoints. + +Replace openai base +import openai + +openai.api_base = "http://0.0.0.0:8000" + +print(openai.chat.completions.create(model="test", messages=[{"role":"user", "content":"Hey!"}])) + +Supported LLMs +Bedrock +Huggingface (TGI) +Anthropic +VLLM +OpenAI Compatible Server +TogetherAI +Replicate +Petals +Palm +Azure OpenAI +AI21 +Cohere +$ export AWS_ACCESS_KEY_ID="" +$ export AWS_REGION_NAME="" # e.g. us-west-2 +$ export AWS_SECRET_ACCESS_KEY="" + +$ litellm --model bedrock/anthropic.claude-v2 + +Server Endpoints +POST /chat/completions - chat completions endpoint to call 100+ LLMs +POST /completions - completions endpoint +POST /embeddings - embedding endpoint for Azure, OpenAI, Huggingface endpoints +GET /models - available models on server \ No newline at end of file diff --git a/cookbook/litellm_router_load_test/memory_usage/router_endpoint.py b/cookbook/litellm_router_load_test/memory_usage/router_endpoint.py new file mode 100644 index 000000000..1dc2d9148 --- /dev/null +++ b/cookbook/litellm_router_load_test/memory_usage/router_endpoint.py @@ -0,0 +1,65 @@ +from fastapi import FastAPI +import uvicorn +from memory_profiler import profile +import os +import litellm +from litellm import Router +from dotenv import load_dotenv +from litellm._uuid import uuid + +load_dotenv() + +model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + "tpm": 240000, + "rpm": 1800, + }, + { + "model_name": "text-embedding-ada-002", + "litellm_params": { + "model": "azure/azure-embedding-model", + "api_key": os.getenv("AZURE_API_KEY"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + "tpm": 100000, + "rpm": 10000, + }, +] + +litellm.set_verbose = True +litellm.cache = litellm.Cache( + type="s3", s3_bucket_name="litellm-my-test-bucket-2", s3_region_name="us-east-1" +) +router = Router(model_list=model_list, set_verbose=True) + +app = FastAPI() + + +@app.get("/") +async def read_root(): + return {"message": "Welcome to the FastAPI endpoint!"} + + +@profile +@app.post("/router_acompletion") +async def router_acompletion(): + question = f"This is a test: {uuid.uuid4()}" * 100 + resp = await router.aembedding(model="text-embedding-ada-002", input=question) + print("embedding-resp", resp) + + response = await router.acompletion( + model="gpt-3.5-turbo", messages=[{"role": "user", "content": question}] + ) + print("completion-resp", response) + return response + + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/cookbook/litellm_router_load_test/memory_usage/router_memory_usage copy.py b/cookbook/litellm_router_load_test/memory_usage/router_memory_usage copy.py new file mode 100644 index 000000000..76d5d3913 --- /dev/null +++ b/cookbook/litellm_router_load_test/memory_usage/router_memory_usage copy.py @@ -0,0 +1,91 @@ +#### What this tests #### + +from memory_profiler import profile +import sys +import os +import time +import asyncio + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import litellm +from litellm import Router +from dotenv import load_dotenv +from litellm._uuid import uuid + +load_dotenv() + + +model_list = [ + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + "tpm": 240000, + "rpm": 1800, + }, + { + "model_name": "text-embedding-ada-002", + "litellm_params": { + "model": "azure/azure-embedding-model", + "api_key": os.environ["AZURE_API_KEY"], + "api_base": os.environ["AZURE_API_BASE"], + }, + "tpm": 100000, + "rpm": 10000, + }, +] +litellm.set_verbose = True +litellm.cache = litellm.Cache( + type="s3", s3_bucket_name="litellm-my-test-bucket-2", s3_region_name="us-east-1" +) +router = Router( + model_list=model_list, + set_verbose=True, +) # type: ignore + + +@profile +async def router_acompletion(): + # embedding call + question = f"This is a test: {uuid.uuid4()}" * 100 + resp = await router.aembedding(model="text-embedding-ada-002", input=question) + print("embedding-resp", resp) + + response = await router.acompletion( + model="gpt-3.5-turbo", messages=[{"role": "user", "content": question}] + ) + print("completion-resp", response) + return response + + +async def main(): + for i in range(1): + start = time.time() + n = 50 # Number of concurrent tasks + tasks = [router_acompletion() for _ in range(n)] + + chat_completions = await asyncio.gather(*tasks) + + successful_completions = [c for c in chat_completions if c is not None] + + # Write errors to error_log.txt + with open("error_log.txt", "a") as error_log: + for completion in chat_completions: + if isinstance(completion, str): + error_log.write(completion + "\n") + + print(n, time.time() - start, len(successful_completions)) + time.sleep(10) + + +if __name__ == "__main__": + # Blank out contents of error_log.txt + open("error_log.txt", "w").close() + + asyncio.run(main()) diff --git a/cookbook/litellm_router_load_test/memory_usage/router_memory_usage.py b/cookbook/litellm_router_load_test/memory_usage/router_memory_usage.py new file mode 100644 index 000000000..76d5d3913 --- /dev/null +++ b/cookbook/litellm_router_load_test/memory_usage/router_memory_usage.py @@ -0,0 +1,91 @@ +#### What this tests #### + +from memory_profiler import profile +import sys +import os +import time +import asyncio + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import litellm +from litellm import Router +from dotenv import load_dotenv +from litellm._uuid import uuid + +load_dotenv() + + +model_list = [ + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + "tpm": 240000, + "rpm": 1800, + }, + { + "model_name": "text-embedding-ada-002", + "litellm_params": { + "model": "azure/azure-embedding-model", + "api_key": os.environ["AZURE_API_KEY"], + "api_base": os.environ["AZURE_API_BASE"], + }, + "tpm": 100000, + "rpm": 10000, + }, +] +litellm.set_verbose = True +litellm.cache = litellm.Cache( + type="s3", s3_bucket_name="litellm-my-test-bucket-2", s3_region_name="us-east-1" +) +router = Router( + model_list=model_list, + set_verbose=True, +) # type: ignore + + +@profile +async def router_acompletion(): + # embedding call + question = f"This is a test: {uuid.uuid4()}" * 100 + resp = await router.aembedding(model="text-embedding-ada-002", input=question) + print("embedding-resp", resp) + + response = await router.acompletion( + model="gpt-3.5-turbo", messages=[{"role": "user", "content": question}] + ) + print("completion-resp", response) + return response + + +async def main(): + for i in range(1): + start = time.time() + n = 50 # Number of concurrent tasks + tasks = [router_acompletion() for _ in range(n)] + + chat_completions = await asyncio.gather(*tasks) + + successful_completions = [c for c in chat_completions if c is not None] + + # Write errors to error_log.txt + with open("error_log.txt", "a") as error_log: + for completion in chat_completions: + if isinstance(completion, str): + error_log.write(completion + "\n") + + print(n, time.time() - start, len(successful_completions)) + time.sleep(10) + + +if __name__ == "__main__": + # Blank out contents of error_log.txt + open("error_log.txt", "w").close() + + asyncio.run(main()) diff --git a/cookbook/litellm_router_load_test/memory_usage/send_request.py b/cookbook/litellm_router_load_test/memory_usage/send_request.py new file mode 100644 index 000000000..6a3473e23 --- /dev/null +++ b/cookbook/litellm_router_load_test/memory_usage/send_request.py @@ -0,0 +1,28 @@ +import requests +from concurrent.futures import ThreadPoolExecutor + +# Replace the URL with your actual endpoint +url = "http://localhost:8000/router_acompletion" + + +def make_request(session): + headers = {"Content-Type": "application/json"} + data = {} # Replace with your JSON payload if needed + + response = session.post(url, headers=headers, json=data) + print(f"Status code: {response.status_code}") + + +# Number of concurrent requests +num_requests = 20 + +# Create a session to reuse the underlying TCP connection +with requests.Session() as session: + # Use ThreadPoolExecutor for concurrent requests + with ThreadPoolExecutor(max_workers=num_requests) as executor: + # Use list comprehension to submit tasks + futures = [executor.submit(make_request, session) for _ in range(num_requests)] + + # Wait for all futures to complete + for future in futures: + future.result() diff --git a/cookbook/litellm_router_load_test/test_loadtest_openai_client.py b/cookbook/litellm_router_load_test/test_loadtest_openai_client.py new file mode 100644 index 000000000..8c50825be --- /dev/null +++ b/cookbook/litellm_router_load_test/test_loadtest_openai_client.py @@ -0,0 +1,73 @@ +import sys +import os +from dotenv import load_dotenv + +load_dotenv() +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import asyncio +from litellm import Timeout +import time +import openai + +### Test just calling AsyncAzureOpenAI + +openai_client = openai.AsyncAzureOpenAI( + azure_endpoint=os.getenv("AZURE_API_BASE"), + api_key=os.getenv("AZURE_API_KEY"), +) + + +async def call_acompletion(semaphore, input_data): + async with semaphore: + try: + # Use asyncio.wait_for to set a timeout for the task + response = await openai_client.chat.completions.create(**input_data) + # Handle the response as needed + print(response) + return response + except Timeout: + print(f"Task timed out: {input_data}") + return None # You may choose to return something else or raise an exception + + +async def main(): + # Initialize the Router + + # Create a semaphore with a capacity of 100 + semaphore = asyncio.Semaphore(100) + + # List to hold all task references + tasks = [] + start_time_all_tasks = time.time() + # Launch 1000 tasks + for _ in range(500): + task = asyncio.create_task( + call_acompletion( + semaphore, + { + "model": "chatgpt-v-2", + "messages": [{"role": "user", "content": "Hey, how's it going?"}], + }, + ) + ) + tasks.append(task) + + # Wait for all tasks to complete + responses = await asyncio.gather(*tasks) + # Process responses as needed + # Record the end time for all tasks + end_time_all_tasks = time.time() + # Calculate the total time for all tasks + total_time_all_tasks = end_time_all_tasks - start_time_all_tasks + print(f"Total time for all tasks: {total_time_all_tasks} seconds") + + # Calculate the average time per response + average_time_per_response = total_time_all_tasks / len(responses) + print(f"Average time per response: {average_time_per_response} seconds") + print(f"NUMBER OF COMPLETED TASKS: {len(responses)}") + + +# Run the main function +asyncio.run(main()) diff --git a/cookbook/litellm_router_load_test/test_loadtest_router.py b/cookbook/litellm_router_load_test/test_loadtest_router.py new file mode 100644 index 000000000..280e495e7 --- /dev/null +++ b/cookbook/litellm_router_load_test/test_loadtest_router.py @@ -0,0 +1,87 @@ +import sys +import os +from dotenv import load_dotenv + +load_dotenv() +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import asyncio +from litellm import Router, Timeout +import time + +### Test calling router async + + +async def call_acompletion(semaphore, router: Router, input_data): + async with semaphore: + try: + # Use asyncio.wait_for to set a timeout for the task + response = await router.acompletion(**input_data) + # Handle the response as needed + print(response) + return response + except Timeout: + print(f"Task timed out: {input_data}") + return None # You may choose to return something else or raise an exception + + +async def main(): + # Initialize the Router + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_base": os.getenv("AZURE_API_BASE"), + "api_version": os.getenv("AZURE_API_VERSION"), + }, + }, + ] + router = Router(model_list=model_list, num_retries=3, timeout=10) + + # Create a semaphore with a capacity of 100 + semaphore = asyncio.Semaphore(100) + + # List to hold all task references + tasks = [] + start_time_all_tasks = time.time() + # Launch 1000 tasks + for _ in range(500): + task = asyncio.create_task( + call_acompletion( + semaphore, + router, + { + "model": "gpt-3.5-turbo", + "messages": [{"role": "user", "content": "Hey, how's it going?"}], + }, + ) + ) + tasks.append(task) + + # Wait for all tasks to complete + responses = await asyncio.gather(*tasks) + # Process responses as needed + # Record the end time for all tasks + end_time_all_tasks = time.time() + # Calculate the total time for all tasks + total_time_all_tasks = end_time_all_tasks - start_time_all_tasks + print(f"Total time for all tasks: {total_time_all_tasks} seconds") + + # Calculate the average time per response + average_time_per_response = total_time_all_tasks / len(responses) + print(f"Average time per response: {average_time_per_response} seconds") + print(f"NUMBER OF COMPLETED TASKS: {len(responses)}") + + +# Run the main function +asyncio.run(main()) diff --git a/cookbook/litellm_router_load_test/test_loadtest_router_withs3_cache.py b/cookbook/litellm_router_load_test/test_loadtest_router_withs3_cache.py new file mode 100644 index 000000000..b093489be --- /dev/null +++ b/cookbook/litellm_router_load_test/test_loadtest_router_withs3_cache.py @@ -0,0 +1,93 @@ +import sys +import os +from dotenv import load_dotenv + +load_dotenv() +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import asyncio +from litellm import Router, Timeout +import time +from litellm.caching.caching import Cache +import litellm + +litellm.cache = Cache( + type="s3", s3_bucket_name="cache-bucket-litellm", s3_region_name="us-west-2" +) + +### Test calling router with s3 Cache + + +async def call_acompletion(semaphore, router: Router, input_data): + async with semaphore: + try: + # Use asyncio.wait_for to set a timeout for the task + response = await router.acompletion(**input_data) + # Handle the response as needed + print(response) + return response + except Timeout: + print(f"Task timed out: {input_data}") + return None # You may choose to return something else or raise an exception + + +async def main(): + # Initialize the Router + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_base": os.getenv("AZURE_API_BASE"), + "api_version": os.getenv("AZURE_API_VERSION"), + }, + }, + ] + router = Router(model_list=model_list, num_retries=3, timeout=10) + + # Create a semaphore with a capacity of 100 + semaphore = asyncio.Semaphore(100) + + # List to hold all task references + tasks = [] + start_time_all_tasks = time.time() + # Launch 1000 tasks + for _ in range(500): + task = asyncio.create_task( + call_acompletion( + semaphore, + router, + { + "model": "gpt-3.5-turbo", + "messages": [{"role": "user", "content": "Hey, how's it going?"}], + }, + ) + ) + tasks.append(task) + + # Wait for all tasks to complete + responses = await asyncio.gather(*tasks) + # Process responses as needed + # Record the end time for all tasks + end_time_all_tasks = time.time() + # Calculate the total time for all tasks + total_time_all_tasks = end_time_all_tasks - start_time_all_tasks + print(f"Total time for all tasks: {total_time_all_tasks} seconds") + + # Calculate the average time per response + average_time_per_response = total_time_all_tasks / len(responses) + print(f"Average time per response: {average_time_per_response} seconds") + print(f"NUMBER OF COMPLETED TASKS: {len(responses)}") + + +# Run the main function +asyncio.run(main()) diff --git a/cookbook/litellm_test_multiple_llm_demo.ipynb b/cookbook/litellm_test_multiple_llm_demo.ipynb new file mode 100644 index 000000000..f22448e46 --- /dev/null +++ b/cookbook/litellm_test_multiple_llm_demo.ipynb @@ -0,0 +1,55 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "adotBkqZSh5g" + }, + "outputs": [], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "code", + "source": [ + "from litellm import completion\n", + "\n", + "## set ENV variables\n", + "os.environ[\"OPENAI_API_KEY\"] = \"openai key\"\n", + "os.environ[\"COHERE_API_KEY\"] = \"cohere key\"\n", + "os.environ[\"REPLICATE_API_KEY\"] = \"replicate key\"\n", + "messages = [{ \"content\": \"Hello, how are you?\",\"role\": \"user\"}]\n", + "\n", + "# openai call\n", + "response = completion(model=\"gpt-3.5-turbo\", messages=messages)\n", + "\n", + "# cohere call\n", + "response = completion(\"command-nightly\", messages)\n", + "\n", + "# replicate call\n", + "response = completion(\"replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1\", messages)" + ], + "metadata": { + "id": "LeOqznSgSj-z" + }, + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/cookbook/livekit_agent_sdk/README.md b/cookbook/livekit_agent_sdk/README.md new file mode 100644 index 000000000..1c3f0bf95 --- /dev/null +++ b/cookbook/livekit_agent_sdk/README.md @@ -0,0 +1,114 @@ +# LiveKit Voice Agent with LiteLLM Gateway + +Simple example showing how to use LiveKit's xAI realtime plugin with LiteLLM as a proxy. This lets you switch between xAI, OpenAI, and Azure realtime APIs without changing your code. + +## Quick Start + +### 1. Install dependencies + +```bash +pip install livekit-agents[xai] websockets +``` + +### 2. Start LiteLLM proxy + +```bash +# With xAI +export XAI_API_KEY="your-xai-key" +litellm --config config.yaml --port 4000 +``` + +### 3. Run the voice agent + +```bash +python main.py +``` + +Type your message and get a voice response from Grok! + +## Configuration + +Set these environment variables if needed: + +```bash +export LITELLM_PROXY_URL="http://localhost:4000" +export LITELLM_API_KEY="sk-1234" +export LITELLM_MODEL="grok-voice-agent" +``` + +Or use the defaults - connects to `http://localhost:4000` by default. + +## Example Config File + +Create a `config.yaml` with your realtime models: + +```yaml +model_list: + - model_name: grok-voice-agent + litellm_params: + model: xai/grok-2-vision-1212 + api_key: os.environ/XAI_API_KEY + model_info: + mode: realtime + + - model_name: openai-voice-agent + litellm_params: + model: gpt-4o-realtime-preview + api_key: os.environ/OPENAI_API_KEY + model_info: + mode: realtime + +general_settings: + master_key: sk-1234 +``` + +Then start: `litellm --config config.yaml --port 4000` + +## How It Works + +LiveKit's xAI plugin connects through LiteLLM proxy by setting `base_url`: + +```python +from livekit.plugins import xai + +model = xai.realtime.RealtimeModel( + voice="ara", + api_key="sk-1234", # LiteLLM proxy key + base_url="http://localhost:4000", # Point to LiteLLM +) +``` + +## Switching Providers + +Just change the model in your config - no code changes needed: + +**xAI Grok:** +```yaml +model: xai/grok-2-vision-1212 +``` + +**OpenAI:** +```yaml +model: gpt-4o-realtime-preview +``` + +**Azure OpenAI:** +```yaml +model: azure/gpt-4o-realtime-preview +api_base: https://your-endpoint.openai.azure.com/ +``` + +## Why Use LiteLLM? + +- āœ… **Switch providers** without changing agent code +- āœ… **Cost tracking** across all voice sessions +- āœ… **Rate limiting** and budgets +- āœ… **Load balancing** across multiple API keys +- āœ… **Fallbacks** to backup models + +## Learn More + +- [LiveKit xAI Realtime Tutorial](/docs/tutorials/livekit_xai_realtime) +- [xAI Realtime Docs](/docs/providers/xai_realtime) +- [LiveKit Agents Documentation](https://docs.livekit.io/agents/) +- [LiteLLM Realtime API](/docs/realtime) diff --git a/cookbook/livekit_agent_sdk/config.example.yaml b/cookbook/livekit_agent_sdk/config.example.yaml new file mode 100644 index 000000000..1361f36af --- /dev/null +++ b/cookbook/livekit_agent_sdk/config.example.yaml @@ -0,0 +1,21 @@ +model_list: + - model_name: grok-voice-agent + litellm_params: + model: xai/grok-2-vision-1212 + api_key: os.environ/XAI_API_KEY + model_info: + mode: realtime + + - model_name: openai-voice-agent + litellm_params: + model: gpt-4o-realtime-preview + api_key: os.environ/OPENAI_API_KEY + model_info: + mode: realtime + +litellm_settings: + drop_params: True + telemetry: False + +general_settings: + master_key: sk-1234 # Change this to a secure key diff --git a/cookbook/livekit_agent_sdk/main.py b/cookbook/livekit_agent_sdk/main.py new file mode 100644 index 000000000..c68e5534e --- /dev/null +++ b/cookbook/livekit_agent_sdk/main.py @@ -0,0 +1,121 @@ +""" +Simple xAI Voice Agent using LiveKit SDK with LiteLLM Gateway + +This example shows how to use LiveKit's xAI realtime plugin through LiteLLM proxy. +LiteLLM acts as a unified interface, allowing you to switch between xAI, OpenAI, +and Azure realtime APIs without changing your agent code. +""" + +import asyncio +import json +import os +import websockets + +# Configuration +PROXY_URL = os.getenv("LITELLM_PROXY_URL", "http://localhost:4000") +API_KEY = os.getenv("LITELLM_API_KEY", "sk-1234") +MODEL = os.getenv("LITELLM_MODEL", "grok-voice-agent") + + +async def run_voice_agent(): + """ + Simple voice agent that: + 1. Connects to xAI realtime API through LiteLLM proxy + 2. Sends a user message + 3. Streams back the response + """ + + url = f"ws://{PROXY_URL.replace('http://', '').replace('https://', '')}/v1/realtime?model={MODEL}" + headers = {"Authorization": f"Bearer {API_KEY}"} + + print(f"šŸŽ™ļø Connecting to voice agent...") + print(f" Model: {MODEL}") + print(f" Proxy: {PROXY_URL}") + print() + + async with websockets.connect(url, additional_headers=headers) as ws: + # Receive initial connection event + initial = json.loads(await ws.recv()) + print(f"āœ… Connected! Event: {initial['type']}\n") + + # Get user input + user_message = input("šŸ’¬ Your message: ").strip() + if not user_message: + user_message = "Tell me a fun fact about AI!" + + print(f"\nšŸ¤– Sending to {MODEL}...\n") + + # Send user message + await ws.send( + json.dumps( + { + "type": "conversation.item.create", + "item": { + "type": "message", + "role": "user", + "content": [{"type": "input_text", "text": user_message}], + }, + } + ) + ) + + # Request response + await ws.send( + json.dumps( + { + "type": "response.create", + "response": {"modalities": ["text", "audio"]}, + } + ) + ) + + # Stream response + print("šŸŽ¤ Response: ", end="", flush=True) + transcript = [] + + try: + while True: + msg = await asyncio.wait_for(ws.recv(), timeout=15.0) + event = json.loads(msg) + + # Capture transcript deltas + if event["type"] == "response.output_audio_transcript.delta": + delta = event.get("delta", "") + if delta: + print(delta, end="", flush=True) + transcript.append(delta) + + # Done when response completes + elif event["type"] == "response.done": + break + + except asyncio.TimeoutError: + pass + + print("\n") + + if transcript: + print(f"āœ… Complete response: {''.join(transcript)}") + + await ws.close() + + +def main(): + """Run the voice agent""" + print("=" * 70) + print("LiveKit xAI Voice Agent via LiteLLM Proxy") + print("=" * 70) + print() + + try: + asyncio.run(run_voice_agent()) + except KeyboardInterrupt: + print("\n\nšŸ‘‹ Goodbye!") + except Exception as e: + print(f"\nāŒ Error: {e}") + print("\nMake sure LiteLLM proxy is running:") + print(f" litellm --config config.yaml --port 4000") + + +if __name__ == "__main__": + main() diff --git a/cookbook/livekit_agent_sdk/requirements.txt b/cookbook/livekit_agent_sdk/requirements.txt new file mode 100644 index 000000000..9e3542fac --- /dev/null +++ b/cookbook/livekit_agent_sdk/requirements.txt @@ -0,0 +1,2 @@ +livekit-agents[xai]>=1.3.12 +websockets>=15.0.1 diff --git a/cookbook/logging_observability/LiteLLM_Arize.ipynb b/cookbook/logging_observability/LiteLLM_Arize.ipynb new file mode 100644 index 000000000..72a082f87 --- /dev/null +++ b/cookbook/logging_observability/LiteLLM_Arize.ipynb @@ -0,0 +1,172 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "4FbDOmcj2VkM" + }, + "source": [ + "## Use LiteLLM with Arize\n", + "https://docs.litellm.ai/docs/observability/arize_integration\n", + "\n", + "This method uses the litellm proxy to send the data to Arize. The callback is set in the litellm config below, instead of using OpenInference tracing." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "21W8Woog26Ns" + }, + "source": [ + "## Install Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "xrjKLBxhxu2L" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: litellm in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (1.54.1)\n", + "Requirement already satisfied: aiohttp in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (3.11.10)\n", + "Requirement already satisfied: click in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (8.1.7)\n", + "Requirement already satisfied: httpx<0.28.0,>=0.23.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (0.27.2)\n", + "Requirement already satisfied: importlib-metadata>=6.8.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (8.5.0)\n", + "Requirement already satisfied: jinja2<4.0.0,>=3.1.2 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (3.1.4)\n", + "Requirement already satisfied: jsonschema<5.0.0,>=4.22.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (4.23.0)\n", + "Requirement already satisfied: openai>=1.55.3 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (1.57.1)\n", + "Requirement already satisfied: pydantic<3.0.0,>=2.0.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (2.10.3)\n", + "Requirement already satisfied: python-dotenv>=0.2.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (1.0.1)\n", + "Requirement already satisfied: requests<3.0.0,>=2.31.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (2.32.3)\n", + "Requirement already satisfied: tiktoken>=0.7.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (0.7.0)\n", + "Requirement already satisfied: tokenizers in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from litellm) (0.21.0)\n", + "Requirement already satisfied: anyio in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from httpx<0.28.0,>=0.23.0->litellm) (4.7.0)\n", + "Requirement already satisfied: certifi in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from httpx<0.28.0,>=0.23.0->litellm) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from httpx<0.28.0,>=0.23.0->litellm) (1.0.7)\n", + "Requirement already satisfied: idna in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from httpx<0.28.0,>=0.23.0->litellm) (3.10)\n", + "Requirement already satisfied: sniffio in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from httpx<0.28.0,>=0.23.0->litellm) (1.3.1)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from httpcore==1.*->httpx<0.28.0,>=0.23.0->litellm) (0.14.0)\n", + "Requirement already satisfied: zipp>=3.20 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from importlib-metadata>=6.8.0->litellm) (3.21.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from jinja2<4.0.0,>=3.1.2->litellm) (3.0.2)\n", + "Requirement already satisfied: attrs>=22.2.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (24.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (2024.10.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (0.35.1)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (0.22.3)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from openai>=1.55.3->litellm) (1.9.0)\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from openai>=1.55.3->litellm) (0.6.1)\n", + "Requirement already satisfied: tqdm>4 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from openai>=1.55.3->litellm) (4.67.1)\n", + "Requirement already satisfied: typing-extensions<5,>=4.11 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from openai>=1.55.3->litellm) (4.12.2)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from pydantic<3.0.0,>=2.0.0->litellm) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.27.1 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from pydantic<3.0.0,>=2.0.0->litellm) (2.27.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from requests<3.0.0,>=2.31.0->litellm) (3.4.0)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from requests<3.0.0,>=2.31.0->litellm) (2.0.7)\n", + "Requirement already satisfied: regex>=2022.1.18 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from tiktoken>=0.7.0->litellm) (2024.11.6)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from aiohttp->litellm) (2.4.4)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from aiohttp->litellm) (1.3.1)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from aiohttp->litellm) (1.5.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from aiohttp->litellm) (6.1.0)\n", + "Requirement already satisfied: propcache>=0.2.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from aiohttp->litellm) (0.2.1)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from aiohttp->litellm) (1.18.3)\n", + "Requirement already satisfied: huggingface-hub<1.0,>=0.16.4 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from tokenizers->litellm) (0.26.5)\n", + "Requirement already satisfied: filelock in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from huggingface-hub<1.0,>=0.16.4->tokenizers->litellm) (3.16.1)\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from huggingface-hub<1.0,>=0.16.4->tokenizers->litellm) (2024.10.0)\n", + "Requirement already satisfied: packaging>=20.9 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from huggingface-hub<1.0,>=0.16.4->tokenizers->litellm) (24.2)\n", + "Requirement already satisfied: pyyaml>=5.1 in /Users/ericxiao/Documents/arize/.venv/lib/python3.11/site-packages (from huggingface-hub<1.0,>=0.16.4->tokenizers->litellm) (6.0.2)\n" + ] + } + ], + "source": [ + "!pip install litellm" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jHEu-TjZ29PJ" + }, + "source": [ + "## Set Env Variables" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "QWd9rTysxsWO" + }, + "outputs": [], + "source": [ + "import litellm\n", + "import os\n", + "from getpass import getpass\n", + "\n", + "os.environ[\"ARIZE_SPACE_KEY\"] = getpass(\"Enter your Arize space key: \")\n", + "os.environ[\"ARIZE_API_KEY\"] = getpass(\"Enter your Arize API key: \")\n", + "os.environ['OPENAI_API_KEY']= getpass(\"Enter your OpenAI API key: \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's run a completion call and see the traces in Arize" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello! Nice to meet you, OpenAI. How can I assist you today?\n" + ] + } + ], + "source": [ + "# set arize as a callback, litellm will send the data to arize\n", + "litellm.callbacks = [\"arize\"]\n", + " \n", + "# openai call\n", + "response = litellm.completion(\n", + " model=\"gpt-3.5-turbo\",\n", + " messages=[\n", + " {\"role\": \"user\", \"content\": \"Hi šŸ‘‹ - i'm openai\"}\n", + " ]\n", + ")\n", + "print(response.choices[0].message.content)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/logging_observability/LiteLLM_Langfuse.ipynb b/cookbook/logging_observability/LiteLLM_Langfuse.ipynb new file mode 100644 index 000000000..2a63666e0 --- /dev/null +++ b/cookbook/logging_observability/LiteLLM_Langfuse.ipynb @@ -0,0 +1,197 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "## Use LiteLLM with Langfuse\n", + "https://docs.litellm.ai/docs/observability/langfuse_integration" + ], + "metadata": { + "id": "4FbDOmcj2VkM" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Install Dependencies" + ], + "metadata": { + "id": "21W8Woog26Ns" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install litellm langfuse" + ], + "metadata": { + "id": "xrjKLBxhxu2L" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Set Env Variables" + ], + "metadata": { + "id": "jHEu-TjZ29PJ" + } + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "QWd9rTysxsWO" + }, + "outputs": [], + "source": [ + "import litellm\n", + "from litellm import completion\n", + "import os\n", + "\n", + "# from https://cloud.langfuse.com/\n", + "os.environ[\"LANGFUSE_PUBLIC_KEY\"] = \"\"\n", + "os.environ[\"LANGFUSE_SECRET_KEY\"] = \"\"\n", + "\n", + "\n", + "# OpenAI and Cohere keys\n", + "# You can use any of the litellm supported providers: https://docs.litellm.ai/docs/providers\n", + "os.environ['OPENAI_API_KEY']=\"\"\n", + "os.environ['COHERE_API_KEY']=\"\"\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Set LangFuse as a callback for sending data\n", + "## OpenAI completion call" + ], + "metadata": { + "id": "NodQl0hp3Lma" + } + }, + { + "cell_type": "code", + "source": [ + "# set langfuse as a callback, litellm will send the data to langfuse\n", + "litellm.success_callback = [\"langfuse\"]\n", + "\n", + "# openai call\n", + "response = completion(\n", + " model=\"gpt-3.5-turbo\",\n", + " messages=[\n", + " {\"role\": \"user\", \"content\": \"Hi šŸ‘‹ - i'm openai\"}\n", + " ]\n", + ")\n", + "\n", + "print(response)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vNAuwJY1yp_F", + "outputId": "c3a71e26-13f5-4379-fac9-409290ba79bb" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{\n", + " \"id\": \"chatcmpl-85nP4xHdAP3jAcGneIguWATS9qdoO\",\n", + " \"object\": \"chat.completion\",\n", + " \"created\": 1696392238,\n", + " \"model\": \"gpt-3.5-turbo-0613\",\n", + " \"choices\": [\n", + " {\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"Hello! How can I assist you today?\"\n", + " },\n", + " \"finish_reason\": \"stop\"\n", + " }\n", + " ],\n", + " \"usage\": {\n", + " \"prompt_tokens\": 15,\n", + " \"completion_tokens\": 9,\n", + " \"total_tokens\": 24\n", + " }\n", + "}\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# we set langfuse as a callback in the prev cell\n", + "# cohere call\n", + "response = completion(\n", + " model=\"command-nightly\",\n", + " messages=[\n", + " {\"role\": \"user\", \"content\": \"Hi šŸ‘‹ - i'm cohere\"}\n", + " ]\n", + ")\n", + "\n", + "print(response)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2PMSLc_FziJL", + "outputId": "1c37605e-b406-4ffc-aafd-e1983489c6be" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{\n", + " \"object\": \"chat.completion\",\n", + " \"choices\": [\n", + " {\n", + " \"finish_reason\": \"stop\",\n", + " \"index\": 0,\n", + " \"message\": {\n", + " \"content\": \" Nice to meet you, Cohere! I'm excited to be meeting new members of the AI community\",\n", + " \"role\": \"assistant\",\n", + " \"logprobs\": null\n", + " }\n", + " }\n", + " ],\n", + " \"id\": \"chatcmpl-a14e903f-4608-4ceb-b996-8ebdf21360ca\",\n", + " \"created\": 1696392247.3313863,\n", + " \"model\": \"command-nightly\",\n", + " \"usage\": {\n", + " \"prompt_tokens\": 8,\n", + " \"completion_tokens\": 20,\n", + " \"total_tokens\": 28\n", + " }\n", + "}\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/cookbook/logging_observability/LiteLLM_Lunary.ipynb b/cookbook/logging_observability/LiteLLM_Lunary.ipynb new file mode 100644 index 000000000..3b1dc5d5e --- /dev/null +++ b/cookbook/logging_observability/LiteLLM_Lunary.ipynb @@ -0,0 +1,348 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "4FbDOmcj2VkM" + }, + "source": [ + "## Use LiteLLM with Langfuse\n", + "https://docs.litellm.ai/docs/observability/langfuse_integration" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "21W8Woog26Ns" + }, + "source": [ + "## Install Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xrjKLBxhxu2L" + }, + "outputs": [], + "source": [ + "%pip install litellm lunary" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jHEu-TjZ29PJ" + }, + "source": [ + "## Set Env Variables" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "QWd9rTysxsWO" + }, + "outputs": [], + "source": [ + "import litellm\n", + "from litellm import completion\n", + "import os\n", + "\n", + "# from https://app.lunary.ai/\n", + "os.environ[\"LUNARY_PUBLIC_KEY\"] = \"\"\n", + "\n", + "\n", + "# LLM provider keys\n", + "# You can use any of the litellm supported providers: https://docs.litellm.ai/docs/providers\n", + "os.environ['OPENAI_API_KEY'] = \"\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NodQl0hp3Lma" + }, + "source": [ + "## Set Lunary as a callback for sending data\n", + "## OpenAI completion call" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vNAuwJY1yp_F", + "outputId": "c3a71e26-13f5-4379-fac9-409290ba79bb" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Choices(finish_reason='stop', index=0, message=Message(content='Hello! How can I assist you today?', role='assistant'))]ModelResponse(id='chatcmpl-8xIWykI0GiJSmYtXYuB8Z363kpIBm', choices=[Choices(finish_reason='stop', index=0, message=Message(content='Hello! How can I assist you today?', role='assistant'))], created=1709143276, model='gpt-3.5-turbo-0125', object='chat.completion', system_fingerprint='fp_86156a94a0', usage=Usage(completion_tokens=9, prompt_tokens=15, total_tokens=24))\n", + "\n", + "[Lunary] Add event: {\n", + " \"event\": \"start\",\n", + " \"type\": \"llm\",\n", + " \"name\": \"gpt-3.5-turbo\",\n", + " \"runId\": \"a363776a-bd07-4474-bce2-193067f01b2e\",\n", + " \"timestamp\": \"2024-02-28T18:01:15.188153+00:00\",\n", + " \"input\": {\n", + " \"role\": \"user\",\n", + " \"content\": \"Hi \\ud83d\\udc4b - i'm openai\"\n", + " },\n", + " \"extra\": {},\n", + " \"runtime\": \"litellm\",\n", + " \"metadata\": {}\n", + "}\n", + "\n", + "\n", + "[Lunary] Add event: {\n", + " \"event\": \"end\",\n", + " \"type\": \"llm\",\n", + " \"runId\": \"a363776a-bd07-4474-bce2-193067f01b2e\",\n", + " \"timestamp\": \"2024-02-28T18:01:16.846581+00:00\",\n", + " \"output\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"Hello! How can I assist you today?\"\n", + " },\n", + " \"runtime\": \"litellm\",\n", + " \"tokensUsage\": {\n", + " \"completion\": 9,\n", + " \"prompt\": 15\n", + " }\n", + "}\n", + "\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "--- Logging error ---\n", + "Traceback (most recent call last):\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/urllib3/connectionpool.py\", line 537, in _make_request\n", + " response = conn.getresponse()\n", + " ^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/urllib3/connection.py\", line 466, in getresponse\n", + " httplib_response = super().getresponse()\n", + " ^^^^^^^^^^^^^^^^^^^^^\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/http/client.py\", line 1423, in getresponse\n", + " response.begin()\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/http/client.py\", line 331, in begin\n", + " version, status, reason = self._read_status()\n", + " ^^^^^^^^^^^^^^^^^^^\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/http/client.py\", line 292, in _read_status\n", + " line = str(self.fp.readline(_MAXLINE + 1), \"iso-8859-1\")\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/socket.py\", line 707, in readinto\n", + " return self._sock.recv_into(b)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^\n", + "TimeoutError: timed out\n", + "\n", + "The above exception was the direct cause of the following exception:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/requests/adapters.py\", line 486, in send\n", + " resp = conn.urlopen(\n", + " ^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\n", + " retries = retries.increment(\n", + " ^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/urllib3/util/retry.py\", line 470, in increment\n", + " raise reraise(type(error), error, _stacktrace)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/urllib3/util/util.py\", line 39, in reraise\n", + " raise value\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\n", + " response = self._make_request(\n", + " ^^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/urllib3/connectionpool.py\", line 539, in _make_request\n", + " self._raise_timeout(err=e, url=url, timeout_value=read_timeout)\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/urllib3/connectionpool.py\", line 370, in _raise_timeout\n", + " raise ReadTimeoutError(\n", + "urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=3333): Read timed out. (read timeout=5)\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/lunary/consumer.py\", line 59, in send_batch\n", + " response = requests.post(\n", + " ^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/requests/api.py\", line 115, in post\n", + " return request(\"post\", url, data=data, json=json, **kwargs)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/requests/api.py\", line 59, in request\n", + " return session.request(method=method, url=url, **kwargs)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/requests/sessions.py\", line 589, in request\n", + " resp = self.send(prep, **send_kwargs)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/requests/sessions.py\", line 703, in send\n", + " r = adapter.send(request, **kwargs)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/requests/adapters.py\", line 532, in send\n", + " raise ReadTimeout(e, request=request)\n", + "requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=3333): Read timed out. (read timeout=5)\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/logging/__init__.py\", line 1160, in emit\n", + " msg = self.format(record)\n", + " ^^^^^^^^^^^^^^^^^^^\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/logging/__init__.py\", line 999, in format\n", + " return fmt.format(record)\n", + " ^^^^^^^^^^^^^^^^^^\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/logging/__init__.py\", line 703, in format\n", + " record.message = record.getMessage()\n", + " ^^^^^^^^^^^^^^^^^^^\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/logging/__init__.py\", line 392, in getMessage\n", + " msg = msg % self.args\n", + " ~~~~^~~~~~~~~~~\n", + "TypeError: not all arguments converted during string formatting\n", + "Call stack:\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/threading.py\", line 1030, in _bootstrap\n", + " self._bootstrap_inner()\n", + " File \"/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/threading.py\", line 1073, in _bootstrap_inner\n", + " self.run()\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/lunary/consumer.py\", line 24, in run\n", + " self.send_batch()\n", + " File \"/Users/vince/Library/Caches/pypoetry/virtualenvs/litellm-7WKnDWGw-py3.12/lib/python3.12/site-packages/lunary/consumer.py\", line 73, in send_batch\n", + " logging.error(\"[Lunary] Error sending events\", e)\n", + "Message: '[Lunary] Error sending events'\n", + "Arguments: (ReadTimeout(ReadTimeoutError(\"HTTPConnectionPool(host='localhost', port=3333): Read timed out. (read timeout=5)\")),)\n" + ] + } + ], + "source": [ + "# set langfuse as a callback, litellm will send the data to langfuse\n", + "litellm.success_callback = [\"lunary\"]\n", + "\n", + "# openai call\n", + "response = completion(\n", + " model=\"gpt-3.5-turbo\",\n", + " messages=[\n", + " {\"role\": \"user\", \"content\": \"Hi šŸ‘‹ - i'm openai\"}\n", + " ]\n", + ")\n", + "\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using LiteLLM with Lunary Templates\n", + "\n", + "You can use LiteLLM seamlessly with Lunary templates to manage your prompts and completions.\n", + "\n", + "Assuming you have created a template \"test-template\" with a variable \"question\", you can use it like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2PMSLc_FziJL", + "outputId": "1c37605e-b406-4ffc-aafd-e1983489c6be" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Choices(finish_reason='stop', index=0, message=Message(content='Hello! How can I assist you today?', role='assistant'))]ModelResponse(id='chatcmpl-8xIXegwpudg4YKnLB6pmpFGXqTHcH', choices=[Choices(finish_reason='stop', index=0, message=Message(content='Hello! How can I assist you today?', role='assistant'))], created=1709143318, model='gpt-4-0125-preview', object='chat.completion', system_fingerprint='fp_c8aa5a06d6', usage=Usage(completion_tokens=9, prompt_tokens=21, total_tokens=30))\n", + "\n", + "[Lunary] Add event: {\n", + " \"event\": \"start\",\n", + " \"type\": \"llm\",\n", + " \"name\": \"gpt-4-turbo-preview\",\n", + " \"runId\": \"3a5b698d-cb55-4b3b-ab6d-04d2b99e40cb\",\n", + " \"timestamp\": \"2024-02-28T18:01:56.746249+00:00\",\n", + " \"input\": [\n", + " {\n", + " \"role\": \"system\",\n", + " \"content\": \"You are an helpful assistant.\"\n", + " },\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"Hi! Hello!\"\n", + " }\n", + " ],\n", + " \"extra\": {\n", + " \"temperature\": 1,\n", + " \"max_tokens\": 100\n", + " },\n", + " \"runtime\": \"litellm\",\n", + " \"metadata\": {}\n", + "}\n", + "\n", + "\n", + "[Lunary] Add event: {\n", + " \"event\": \"end\",\n", + " \"type\": \"llm\",\n", + " \"runId\": \"3a5b698d-cb55-4b3b-ab6d-04d2b99e40cb\",\n", + " \"timestamp\": \"2024-02-28T18:01:58.741244+00:00\",\n", + " \"output\": {\n", + " \"role\": \"assistant\",\n", + " \"content\": \"Hello! How can I assist you today?\"\n", + " },\n", + " \"runtime\": \"litellm\",\n", + " \"tokensUsage\": {\n", + " \"completion\": 9,\n", + " \"prompt\": 21\n", + " }\n", + "}\n", + "\n", + "\n" + ] + } + ], + "source": [ + "import lunary\n", + "from litellm import completion\n", + "\n", + "template = lunary.render_template(\"test-template\", {\"question\": \"Hello!\"})\n", + "\n", + "response = completion(**template)\n", + "\n", + "print(response)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/logging_observability/LiteLLM_Proxy_Langfuse.ipynb b/cookbook/logging_observability/LiteLLM_Proxy_Langfuse.ipynb new file mode 100644 index 000000000..0baaab3f4 --- /dev/null +++ b/cookbook/logging_observability/LiteLLM_Proxy_Langfuse.ipynb @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LLM Ops Stack - LiteLLM Proxy + Langfuse \n", + "\n", + "This notebook demonstrates how to use LiteLLM Proxy with Langfuse \n", + "- Use LiteLLM Proxy for calling 100+ LLMs in OpenAI format\n", + "- Use Langfuse for viewing request / response traces \n", + "\n", + "\n", + "In this notebook we will setup LiteLLM Proxy to make requests to OpenAI, Anthropic, Bedrock and automatically log traces to Langfuse." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Setup LiteLLM Proxy\n", + "\n", + "### 1.1 Define .env variables \n", + "Define .env variables on the container that litellm proxy is running on.\n", + "```bash\n", + "## LLM API Keys\n", + "OPENAI_API_KEY=sk-proj-1234567890\n", + "ANTHROPIC_API_KEY=sk-ant-api03-1234567890\n", + "AWS_ACCESS_KEY_ID=1234567890\n", + "AWS_SECRET_ACCESS_KEY=1234567890\n", + "\n", + "## Langfuse Logging \n", + "LANGFUSE_PUBLIC_KEY=\"pk-lf-xxxx9\"\n", + "LANGFUSE_SECRET_KEY=\"sk-lf-xxxx9\"\n", + "LANGFUSE_HOST=\"https://us.cloud.langfuse.com\"\n", + "```\n", + "\n", + "\n", + "### 1.1 Setup LiteLLM Proxy Config yaml \n", + "```yaml\n", + "model_list:\n", + " - model_name: gpt-4o\n", + " litellm_params:\n", + " model: openai/gpt-4o\n", + " api_key: os.environ/OPENAI_API_KEY\n", + " - model_name: claude-3-5-sonnet-20241022\n", + " litellm_params:\n", + " model: anthropic/claude-3-5-sonnet-20241022\n", + " api_key: os.environ/ANTHROPIC_API_KEY\n", + " - model_name: us.amazon.nova-micro-v1:0\n", + " litellm_params:\n", + " model: bedrock/us.amazon.nova-micro-v1:0\n", + " aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID\n", + " aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY\n", + "\n", + "litellm_settings:\n", + " callbacks: [\"langfuse\"]\n", + "\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Make LLM Requests to LiteLLM Proxy\n", + "\n", + "Now we will make our first LLM request to LiteLLM Proxy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 Setup Client Side Variables to point to LiteLLM Proxy\n", + "Set `LITELLM_PROXY_BASE_URL` to the base url of the LiteLLM Proxy and `LITELLM_VIRTUAL_KEY` to the virtual key you want to use for Authentication to LiteLLM Proxy. (Note: In this initial setup you can)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "LITELLM_PROXY_BASE_URL=\"http://0.0.0.0:4000\"\n", + "LITELLM_VIRTUAL_KEY=\"sk-oXXRa1xxxxxxxxxxx\"" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ChatCompletion(id='chatcmpl-B0sq6QkOKNMJ0dwP3x7OoMqk1jZcI', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='Langfuse is a platform designed to monitor, observe, and troubleshoot AI and large language model (LLM) applications. It provides features that help developers gain insights into how their AI systems are performing, make debugging easier, and optimize the deployment of models. Langfuse allows for tracking of model interactions, collecting telemetry, and visualizing data, which is crucial for understanding the behavior of AI models in production environments. This kind of tool is particularly useful for developers working with language models who need to ensure reliability and efficiency in their applications.', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1739550502, model='gpt-4o-2024-08-06', object='chat.completion', service_tier='default', system_fingerprint='fp_523b9b6e5f', usage=CompletionUsage(completion_tokens=109, prompt_tokens=13, total_tokens=122, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)))" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import openai\n", + "client = openai.OpenAI(\n", + " api_key=LITELLM_VIRTUAL_KEY,\n", + " base_url=LITELLM_PROXY_BASE_URL\n", + ")\n", + "\n", + "response = client.chat.completions.create(\n", + " model=\"gpt-4o\",\n", + " messages = [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"what is Langfuse?\"\n", + " }\n", + " ],\n", + ")\n", + "\n", + "response" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 View Traces on Langfuse\n", + "LiteLLM will send the request / response, model, tokens (input + output), cost to Langfuse.\n", + "\n", + "![image_description](litellm_proxy_langfuse.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Call Anthropic, Bedrock models \n", + "\n", + "Now we can call `us.amazon.nova-micro-v1:0` and `claude-3-5-sonnet-20241022` models defined on your config.yaml both in the OpenAI request / response format." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ChatCompletion(id='chatcmpl-7756e509-e61f-4f5e-b5ae-b7a41013522a', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content=\"Langfuse is an observability tool designed specifically for machine learning models and applications built with natural language processing (NLP) and large language models (LLMs). It focuses on providing detailed insights into how these models perform in real-world scenarios. Here are some key features and purposes of Langfuse:\\n\\n1. **Real-time Monitoring**: Langfuse allows developers to monitor the performance of their NLP and LLM applications in real time. This includes tracking the inputs and outputs of the models, as well as any errors or issues that arise during operation.\\n\\n2. **Error Tracking**: It helps in identifying and tracking errors in the models' outputs. By analyzing incorrect or unexpected responses, developers can pinpoint where and why errors occur, facilitating more effective debugging and improvement.\\n\\n3. **Performance Metrics**: Langfuse provides various performance metrics, such as latency, throughput, and error rates. These metrics help developers understand how well their models are performing under different conditions and workloads.\\n\\n4. **Traceability**: It offers detailed traceability of requests and responses, allowing developers to follow the path of a request through the system and see how it is processed by the model at each step.\\n\\n5. **User Feedback Integration**: Langfuse can integrate user feedback to provide context for model outputs. This helps in understanding how real users are interacting with the model and how its outputs align with user expectations.\\n\\n6. **Customizable Dashboards**: Users can create custom dashboards to visualize the data collected by Langfuse. These dashboards can be tailored to highlight the most important metrics and insights for a specific application or team.\\n\\n7. **Alerting and Notifications**: It can set up alerts for specific conditions or errors, notifying developers when something goes wrong or when performance metrics fall outside of acceptable ranges.\\n\\nBy providing comprehensive observability for NLP and LLM applications, Langfuse helps developers to build more reliable, accurate, and user-friendly models and services.\", refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1739554005, model='us.amazon.nova-micro-v1:0', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=380, prompt_tokens=5, total_tokens=385, completion_tokens_details=None, prompt_tokens_details=None))" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import openai\n", + "client = openai.OpenAI(\n", + " api_key=LITELLM_VIRTUAL_KEY,\n", + " base_url=LITELLM_PROXY_BASE_URL\n", + ")\n", + "\n", + "response = client.chat.completions.create(\n", + " model=\"us.amazon.nova-micro-v1:0\",\n", + " messages = [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"what is Langfuse?\"\n", + " }\n", + " ],\n", + ")\n", + "\n", + "response" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Advanced - Set Langfuse Trace ID, Tags, Metadata \n", + "\n", + "Here is an example of how you can set Langfuse specific params on your client side request. See full list of supported langfuse params [here](https://docs.litellm.ai/docs/observability/langfuse_integration)\n", + "\n", + "You can view the logged trace of this request [here](https://us.cloud.langfuse.com/project/clvlhdfat0007vwb74m9lvfvi/traces/567890?timestamp=2025-02-14T17%3A30%3A26.709Z)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ChatCompletion(id='chatcmpl-789babd5-c064-4939-9093-46e4cd2e208a', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content=\"Langfuse is an observability platform designed specifically for monitoring and improving the performance of natural language processing (NLP) models and applications. It provides developers with tools to track, analyze, and optimize how their language models interact with users and handle natural language inputs.\\n\\nHere are some key features and benefits of Langfuse:\\n\\n1. **Real-Time Monitoring**: Langfuse allows developers to monitor their NLP applications in real time. This includes tracking user interactions, model responses, and overall performance metrics.\\n\\n2. **Error Tracking**: It helps in identifying and tracking errors in the model's responses. This can include incorrect, irrelevant, or unsafe outputs.\\n\\n3. **User Feedback Integration**: Langfuse enables the collection of user feedback directly within the platform. This feedback can be used to identify areas for improvement in the model's performance.\\n\\n4. **Performance Metrics**: The platform provides detailed metrics and analytics on model performance, including latency, throughput, and accuracy.\\n\\n5. **Alerts and Notifications**: Developers can set up alerts to notify them of any significant issues or anomalies in model performance.\\n\\n6. **Debugging Tools**: Langfuse offers tools to help developers debug and refine their models by providing insights into how the model processes different types of inputs.\\n\\n7. **Integration with Development Workflows**: It integrates seamlessly with various development environments and CI/CD pipelines, making it easier to incorporate observability into the development process.\\n\\n8. **Customizable Dashboards**: Users can create custom dashboards to visualize the data in a way that best suits their needs.\\n\\nLangfuse aims to help developers build more reliable, accurate, and user-friendly NLP applications by providing them with the tools to observe and improve how their models perform in real-world scenarios.\", refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1739554281, model='us.amazon.nova-micro-v1:0', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=346, prompt_tokens=5, total_tokens=351, completion_tokens_details=None, prompt_tokens_details=None))" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import openai\n", + "client = openai.OpenAI(\n", + " api_key=LITELLM_VIRTUAL_KEY,\n", + " base_url=LITELLM_PROXY_BASE_URL\n", + ")\n", + "\n", + "response = client.chat.completions.create(\n", + " model=\"us.amazon.nova-micro-v1:0\",\n", + " messages = [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"what is Langfuse?\"\n", + " }\n", + " ],\n", + " extra_body={\n", + " \"metadata\": {\n", + " \"generation_id\": \"1234567890\",\n", + " \"trace_id\": \"567890\",\n", + " \"trace_user_id\": \"user_1234567890\",\n", + " \"tags\": [\"tag1\", \"tag2\"]\n", + " }\n", + " }\n", + ")\n", + "\n", + "response" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## " + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbook/logging_observability/litellm_proxy_langfuse.png b/cookbook/logging_observability/litellm_proxy_langfuse.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0691e6a5f1bf8e256a42adece0999f8e962a72 GIT binary patch literal 315558 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/commits`. GitHub's auto-generated "What's Changed" on the release page also misses these. To catch every PR in the release, you MUST additionally walk the full git log range between the previous release's commit and this release's commit: + +```bash +git fetch origin --tags +git log .. --oneline | grep -oE '#[0-9]+' | sort -u +``` + +Union the PR set from the staging-PR walk with the PR set from `git log`. Any PR in `git log` but missing from your staging-expanded set is almost certainly a content PR that merged directly to the release branch — fetch its title/body with `gh pr view ` and categorize it. Do not trust the GH release body or the staging PRs alone as the authoritative list. + +**Sanity check for new contributors.** The GH release body's "New Contributors" list is a *floor*, not authoritative. For every PR author who appears in the release (including underlying PRs from staging and PRs found only via `git log`), verify whether they are a first-time contributor by running: + +```bash +gh api "search/issues?q=is:pr+author:+repo:BerriAI/litellm+is:merged&sort=created&order=asc" --jq '.items[0] | {n:.number, merged:.closed_at}' +``` + +If the author's earliest merged PR number matches a PR in this release window, they are a new contributor. If their earliest merged PR predates the previous release tag, they are not. Do not copy the GH release body's list blindly — it can both miss contributors (PRs that merged via an older dev branch) and falsely include contributors whose "first" PR in this window was not actually their first ever. + +## Step-by-Step Process + +### 1. Initial Setup and Analysis + +```bash +# Check git diff for model pricing changes +git diff HEAD -- model_prices_and_context_window.json +``` + +**Key Analysis Points:** +- New models added (look for new entries) +- Deprecated models removed (look for deleted entries) +- Pricing updates (look for cost changes) +- Feature support changes (tool calling, reasoning, etc.) + +### 2. Release Notes Structure + +Follow this exact structure based on recent stable releases (v1.76.3-stable, v1.77.2-stable, v1.77.5-stable): + +```markdown +--- +title: "v1.77.X-stable - [Key Theme]" +slug: "v1-77-X" +date: YYYY-MM-DDTHH:mm:ss +authors: [standard author block] +hide_table_of_contents: false +--- + +## Deploy this version +[Docker and pip installation tabs] + +## Key Highlights +[3-5 bullet points of major features - prioritize MCP OAuth 2.0, scheduled key rotations, and major model updates] + +## New Providers and Endpoints + +### New Providers +[Table with Provider, Supported Endpoints, Description columns] + +### New LLM API Endpoints +[Optional table for new endpoint additions with Endpoint, Method, Description, Documentation columns] + +## New Models / Updated Models +#### New Model Support +[Model pricing table] + +#### Features +[Provider-specific features organized by provider] + +### Bug Fixes +[Provider-specific bug fixes organized by provider] + +## LLM API Endpoints +#### Features +[API-specific features organized by API type] + +#### Bugs +[General bug fixes] + +## Management Endpoints / UI +#### Features +[UI and management features - group by functionality like Proxy CLI Auth, Virtual Keys, Models + Endpoints] + +#### Bugs +[Management-related bug fixes] + +## AI Integrations + +### Logging +[Logging integrations organized by provider with proper doc links, includes General subsection] + +### Guardrails +[Guardrail-specific features and fixes] + +### Prompt Management +[Prompt management integrations like BitBucket] + +### Secret Managers +[Secret manager integrations - AWS, HashiCorp Vault, CyberArk, etc.] + +## Spend Tracking, Budgets and Rate Limiting +[Cost tracking, service tier pricing, rate limiting improvements] + +## MCP Gateway +[MCP-specific features, OAuth 2.0, configuration improvements] + +## Performance / Loadbalancing / Reliability improvements +[Infrastructure improvements, memory fixes, performance optimizations] + +## Documentation Updates +[Documentation improvements, guides, corrections - separate section for visibility] + +## New Contributors +[List of first-time contributors] + +## Full Changelog +[Link to GitHub comparison] +``` + +### 3. Categorization Rules + +**Performance Improvements:** +- RPS improvements +- Memory optimizations +- CPU usage optimizations +- Timeout controls +- Worker configuration +- Memory leak fixes +- Cache performance improvements +- Database connection management +- Dependency management (fastuuid, etc.) +- Configuration management + +**New Models/Updated Models:** +- Extract from model_prices_and_context_window.json diff +- Create tables with: Provider, Model, Context Window, Input Cost, Output Cost, Features +- **Structure:** + - `#### New Model Support` - pricing table + - `#### Features` - organized by provider with documentation links + - `### Bug Fixes` - provider-specific bug fixes + - `#### New Provider Support` - major new provider integrations +- Group by provider with proper doc links: `**[Provider Name](../../docs/providers/[provider])**` +- Use bullet points under each provider for multiple features +- Separate features from bug fixes clearly + +**LLM API Endpoints:** +- **Structure:** + - `#### Features` - organized by API type (Responses API, Batch API, etc.) + - `#### Bugs` - general bug fixes under **General** category +- **API Categories:** + - Responses API + - Batch API + - CountTokens API + - Images API + - Video Generation (if applicable) + - General (miscellaneous improvements) +- Use proper documentation links for each API type + +**UI/Management:** +- Authentication changes +- Dashboard improvements +- Team management +- Key management +- Proxy CLI authentication and improvements +- Virtual key management and scheduled rotations +- SSO configuration fixes +- Admin settings updates +- Management routes and endpoints + +**AI Integrations:** +- **Structure:** + - `### Logging` - organized by integration provider with proper doc links, includes **General** subsection + - `### Guardrails` - guardrail-specific features and fixes + - `### Prompt Management` - prompt management integrations + - `### Secret Managers` - secret manager integrations +- **Logging Categories:** + - **[DataDog](../../docs/proxy/logging#datadog)** - group all DataDog-related changes + - **[Langfuse](../../docs/proxy/logging#langfuse)** - Langfuse-specific features + - **[Prometheus](../../docs/proxy/logging#prometheus)** - monitoring improvements + - **[PostHog](../../docs/observability/posthog)** - observability integration + - **[SQS](../../docs/proxy/logging#sqs)** - SQS logging features + - **[Opik](../../docs/proxy/logging#opik)** - Opik integration improvements + - **[Arize Phoenix](../../docs/observability/arize_phoenix)** - Arize Phoenix integration + - **General** - miscellaneous logging features like callback controls, sensitive data masking + - Other logging providers with proper doc links +- **Guardrail Categories:** + - LakeraAI, Presidio, Noma, Grayswan, IBM Guardrails, and other guardrail providers +- **Prompt Management:** + - BitBucket, GitHub, and other prompt management integrations + - Prompt versioning, testing, and UI features +- **Secret Managers:** + - **[AWS Secrets Manager](../../docs/secret_managers)** - AWS secret manager features + - **[HashiCorp Vault](../../docs/secret_managers)** - Vault integrations + - **[CyberArk](../../docs/secret_managers)** - CyberArk integrations + - **General** - cross-secret-manager features +- Use bullet points under each provider for multiple features +- Separate logging, guardrails, prompt management, and secret managers clearly + +### 4. Documentation Linking Strategy + +**Link to docs when:** +- New provider support added +- Significant feature additions +- API endpoint changes +- Integration additions + +**Link format:** `../../docs/[category]/[specific_doc]` + +**Common doc paths:** +- `../../docs/providers/[provider]` - Provider-specific docs +- `../../docs/image_generation` - Image generation +- `../../docs/video_generation` - Video generation (if exists) +- `../../docs/response_api` - Responses API +- `../../docs/proxy/logging` - Logging integrations +- `../../docs/proxy/guardrails` - Guardrails +- `../../docs/pass_through/[provider]` - Passthrough endpoints + +### 5. Model Table Generation + +From git diff analysis, create tables like: + +```markdown +| Provider | Model | Context Window | Input ($/1M tokens) | Output ($/1M tokens) | Features | +| -------- | ----- | -------------- | ------------------- | -------------------- | -------- | +| OpenRouter | `openrouter/openai/gpt-4.1` | 1M | $2.00 | $8.00 | Chat completions with vision | +``` + +**Extract from JSON:** +- `max_input_tokens` → Context Window +- `input_cost_per_token` Ɨ 1,000,000 → Input cost +- `output_cost_per_token` Ɨ 1,000,000 → Output cost +- `supports_*` fields → Features +- Special pricing fields (per image, per second) for generation models + +### 6. PR Categorization Logic + +**By Keywords in PR Title:** +- `[Perf]`, `Performance`, `RPS` → Performance Improvements +- `[Bug]`, `[Bug Fix]`, `Fix` → Bug Fixes section +- `[Feat]`, `[Feature]`, `Add support` → Features section +- `[Docs]` → Documentation Updates section +- Provider names (Gemini, OpenAI, etc.) → Group under provider +- `MCP`, `oauth`, `Model Context Protocol` → MCP Gateway +- `service_tier`, `priority`, `cost tracking` → Spend Tracking, Budgets and Rate Limiting + +**By PR Content Analysis:** +- New model additions → New Models section +- UI changes → Management Endpoints/UI +- Logging/observability → Logging/Guardrail/Prompt Management Integrations +- Rate limiting/budgets → Spend Tracking, Budgets and Rate Limiting +- Authentication → Management Endpoints/UI +- MCP-related changes → MCP Gateway +- Documentation updates → Documentation Updates +- Performance/memory fixes → Performance/Loadbalancing/Reliability improvements + +**Special Categorization Rules:** +- **Service tier pricing** (OpenAI priority/flex) → Spend Tracking section (NOT provider features) +- **Cost breakdown in logging** → Spend Tracking section +- **MCP configuration/OAuth** → MCP Gateway (NOT General Proxy Improvements) +- **All documentation PRs** → Documentation Updates section for visibility +- **Callback controls/logging features** → AI Integrations > Logging > General +- **Secret manager features** → AI Integrations > Secret Managers +- **Video generation tag-based routing** → LLM API Endpoints > Video Generation API + +### 7. Writing Style Guidelines + +**Tone:** +- Professional but accessible +- Focus on user impact +- Highlight breaking changes clearly +- Use active voice + +**Formatting:** +- Use consistent markdown formatting +- Include PR links: `[PR #XXXXX](https://github.com/BerriAI/litellm/pull/XXXXX)` +- Use code blocks for configuration examples +- Bold important terms and section headers + +**Warnings/Notes:** +- Add warning boxes for breaking changes +- Include migration instructions when needed +- Provide override options for default changes + +### 8. Quality Checks + +**Before finalizing:** +- Verify all PR links work +- Check documentation links are valid +- Ensure model pricing is accurate +- Confirm provider names are consistent +- Review for typos and formatting issues +- **Count PRs by section** - Provide final count like: + ``` + ## MM/DD/YYYY + * New Models / Updated Models: XX + * LLM API Endpoints: XX + * Management Endpoints / UI: XX + * Logging / Guardrail / Prompt Management Integrations: XX + * Spend Tracking, Budgets and Rate Limiting: XX + * MCP Gateway: XX + * Performance / Loadbalancing / Reliability improvements: XX + * Documentation Updates: XX + ``` + +### 9. Common Patterns to Follow + +**Performance Changes:** +```markdown +- **+400 RPS Performance Boost** - Description - [PR #XXXXX](link) +``` + +**New Models:** +Always include pricing table and feature highlights + +**Breaking Changes:** +```markdown +:::warning +This release has a known issue... +::: +``` + +**Provider Features (New Models / Updated Models section):** +```markdown +#### Features + +- **[Provider Name](../../docs/providers/provider)** + - Feature description - [PR #XXXXX](link) + - Another feature description - [PR #YYYYY](link) +``` + +**API Features (LLM API Endpoints section):** +```markdown +#### Features + +- **[API Name](../../docs/api_path)** + - Feature description - [PR #XXXXX](link) + - Another feature - [PR #YYYYY](link) +- **General** + - Miscellaneous improvements - [PR #ZZZZZ](link) +``` + +**Integration Features (Logging / Guardrail Integrations section):** +```markdown +#### Features + +- **[Integration Name](../../docs/proxy/logging#integration)** + - Feature description - [PR #XXXXX](link) + - Bug fix description - [PR #YYYYY](link) +``` + +**Bug Fixes Pattern:** +```markdown +### Bug Fixes + +- **[Provider/Component Name](../../docs/providers/provider)** + - Bug fix description - [PR #XXXXX](link) +``` + +### 10. Missing Documentation Check + +**Review for missing docs:** +- New providers without documentation +- New API endpoints without examples +- Complex features without guides +- Integration setup instructions + +**Flag for documentation needs:** +- New provider integrations +- Significant API changes +- Complex configuration options +- Migration requirements + +### 11. New Sections and Categories (Added in v1.77.5) + +**MCP Gateway Section:** +- All MCP-related changes go here (not in General Proxy Improvements) +- OAuth 2.0 flow improvements +- MCP configuration and tools +- Server management features + +**Spend Tracking, Budgets and Rate Limiting Section:** +- Service tier pricing (OpenAI priority/flex pricing) +- Cost tracking and breakdown features +- Rate limiting improvements (Parallel Request Limiter v3) +- Priority reservation fixes +- Metadata handling for rate limiting + +**Documentation Updates Section:** +- Create separate section for all documentation improvements +- Include provider documentation fixes +- Model reference updates +- New guides and tutorials +- Documentation corrections and clarifications +- This gives documentation changes proper visibility + +**Management Endpoints / UI Grouping:** +- Group related features under sub-categories: + - **Proxy CLI Auth** - CLI authentication improvements + - **Virtual Keys** - Key rotation and management + - **Models + Endpoints** - Provider and endpoint management + +**AI Integrations Section Expansion:** +- Renamed from "Logging / Guardrail / Prompt Management Integrations" to "AI Integrations" +- Structure with four main subsections: + - **Logging** - with **General** subsection for miscellaneous logging features + - **Guardrails** - separate from logging features + - **Prompt Management** - BitBucket, GitHub integrations, versioning features + - **Secret Managers** - AWS, HashiCorp Vault, CyberArk, etc. + +**New Providers and Endpoints Section:** +- Add section after Key Highlights and before New Models / Updated Models +- Include tables for: + - **New Providers** - Provider name, supported endpoints, description + - **New LLM API Endpoints** (optional) - Endpoint, method, description, documentation link +- Only include major new provider integrations, not minor provider updates +- **IMPORTANT**: When adding new providers, also update `provider_endpoints_support.json` in the repository root (see Section 13) + +### 12. Section Header Counts + +**Always include counts in section headers for:** +- **New Providers** - Add count in parentheses: `### New Providers (X new providers)` +- **New LLM API Endpoints** - Add count in parentheses: `### New LLM API Endpoints (X new endpoints)` +- **New Model Support** - Add count in parentheses: `#### New Model Support (X new models)` + +**Format:** +```markdown +### New Providers (4 new providers) + +| Provider | Supported LiteLLM Endpoints | Description | +| -------- | --------------------------- | ----------- | +... + +### New LLM API Endpoints (2 new endpoints) + +| Endpoint | Method | Description | Documentation | +| -------- | ------ | ----------- | ------------- | +... + +#### New Model Support (32 new models) + +| Provider | Model | Context Window | Input ($/1M tokens) | Output ($/1M tokens) | Features | +| -------- | ----- | -------------- | ------------------- | -------------------- | -------- | +... +``` + +**Counting Rules:** +- Count each row in the table (excluding the header row) +- For models, count each model entry in the pricing table +- For providers, count each new provider added +- For endpoints, count each new API endpoint added + +### 13. Update provider_endpoints_support.json + +**When adding new providers or endpoints, you MUST also update `provider_endpoints_support.json` in the repository root.** + +This file tracks which endpoints are supported by each LiteLLM provider and is used to generate documentation. + +**Required Steps:** +1. For each new provider added to the release notes, add a corresponding entry to `provider_endpoints_support.json` +2. For each new endpoint type added, update the schema comment and add the endpoint to relevant providers + +**Provider Entry Format:** +```json +"provider_slug": { + "display_name": "Provider Name (`provider_slug`)", + "url": "https://docs.litellm.ai/docs/providers/provider_slug", + "endpoints": { + "chat_completions": true, + "messages": true, + "responses": true, + "embeddings": false, + "image_generations": false, + "audio_transcriptions": false, + "audio_speech": false, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": true + } +} +``` + +**Available Endpoint Types:** +- `chat_completions` - `/chat/completions` endpoint +- `messages` - `/messages` endpoint (Anthropic format) +- `responses` - `/responses` endpoint (OpenAI/Anthropic unified) +- `embeddings` - `/embeddings` endpoint +- `image_generations` - `/image/generations` endpoint +- `audio_transcriptions` - `/audio/transcriptions` endpoint +- `audio_speech` - `/audio/speech` endpoint +- `moderations` - `/moderations` endpoint +- `batches` - `/batches` endpoint +- `rerank` - `/rerank` endpoint +- `ocr` - `/ocr` endpoint +- `search` - `/search` endpoint +- `vector_stores` - `/vector_stores` endpoint +- `a2a` - `/a2a/{agent}/message/send` endpoint (A2A Protocol) + +**Checklist:** +- [ ] All new providers from release notes are added to `provider_endpoints_support.json` +- [ ] Endpoint support flags accurately reflect provider capabilities +- [ ] Documentation URL points to correct provider docs page + +## Example Command Workflow + +```bash +# 1. Get model changes +git diff HEAD -- model_prices_and_context_window.json + +# 2. Analyze PR list for categorization +# 3. Create release notes following template +# 4. Link to appropriate documentation +# 5. Review for missing documentation needs +``` + +## Output Requirements + +- Follow exact markdown structure from reference +- Include all PR links and contributors +- Provide accurate model pricing tables +- Link to relevant documentation +- Highlight breaking changes with warnings +- Include deployment instructions +- End with full changelog link + +This process ensures consistent, comprehensive release notes that help users understand changes and upgrade smoothly. diff --git a/cookbook/misc/add_new_models.py b/cookbook/misc/add_new_models.py new file mode 100644 index 000000000..3cd0bfb2f --- /dev/null +++ b/cookbook/misc/add_new_models.py @@ -0,0 +1,71 @@ +import requests + + +def get_initial_config(): + proxy_base_url = input("Enter your proxy base URL (e.g., http://localhost:4000): ") + master_key = input("Enter your LITELLM_MASTER_KEY ") + return proxy_base_url, master_key + + +def get_user_input(): + model_name = input( + "Enter model_name (this is the 'model' passed in /chat/completions requests):" + ) + model = input("litellm_params: Enter model eg. 'azure/': ") + tpm = int(input("litellm_params: Enter tpm (tokens per minute): ")) + rpm = int(input("litellm_params: Enter rpm (requests per minute): ")) + api_key = input("litellm_params: Enter api_key: ") + api_base = input("litellm_params: Enter api_base: ") + api_version = input("litellm_params: Enter api_version: ") + timeout = int(input("litellm_params: Enter timeout (0 for default): ")) + stream_timeout = int( + input("litellm_params: Enter stream_timeout (0 for default): ") + ) + max_retries = int(input("litellm_params: Enter max_retries (0 for default): ")) + + return { + "model_name": model_name, + "litellm_params": { + "model": model, + "tpm": tpm, + "rpm": rpm, + "api_key": api_key, + "api_base": api_base, + "api_version": api_version, + "timeout": timeout, + "stream_timeout": stream_timeout, + "max_retries": max_retries, + }, + } + + +def make_request(proxy_base_url, master_key, data): + url = f"{proxy_base_url}/model/new" + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {master_key}", + } + + response = requests.post(url, headers=headers, json=data) + + print(f"Status Code: {response.status_code}") + print(f"Response from adding model: {response.text}") + + +def main(): + proxy_base_url, master_key = get_initial_config() + + while True: + print("Adding new Model to your proxy server...") + data = get_user_input() + make_request(proxy_base_url, master_key, data) + + add_another = input("Do you want to add another model? (yes/no): ").lower() + if add_another != "yes": + break + + print("Script finished.") + + +if __name__ == "__main__": + main() diff --git a/cookbook/misc/config.yaml b/cookbook/misc/config.yaml new file mode 100644 index 000000000..d1d06eb58 --- /dev/null +++ b/cookbook/misc/config.yaml @@ -0,0 +1,73 @@ +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: azure/chatgpt-v-2 + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_version: "2023-05-15" + api_key: os.environ/AZURE_API_KEY # The `os.environ/` prefix tells litellm to read this from the env. See https://docs.litellm.ai/docs/simple_proxy#load-api-keys-from-vault + - model_name: gpt-3.5-turbo-large + litellm_params: + model: "gpt-3.5-turbo-1106" + api_key: os.environ/OPENAI_API_KEY + rpm: 480 + timeout: 300 + stream_timeout: 60 + - model_name: gpt-4 + litellm_params: + model: azure/chatgpt-v-2 + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_version: "2023-05-15" + api_key: os.environ/AZURE_API_KEY # The `os.environ/` prefix tells litellm to read this from the env. See https://docs.litellm.ai/docs/simple_proxy#load-api-keys-from-vault + rpm: 480 + timeout: 300 + stream_timeout: 60 + - model_name: sagemaker-completion-model + litellm_params: + model: sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4 + input_cost_per_second: 0.000420 + - model_name: text-embedding-ada-002 + litellm_params: + model: azure/azure-embedding-model + api_key: os.environ/AZURE_API_KEY + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_version: "2023-05-15" + model_info: + mode: embedding + base_model: text-embedding-ada-002 + - model_name: dall-e-2 + litellm_params: + model: azure/ + api_version: 2023-06-01-preview + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_key: os.environ/AZURE_API_KEY + - model_name: openai-dall-e-3 + litellm_params: + model: dall-e-3 + - model_name: fake-openai-endpoint + litellm_params: + model: openai/fake + api_key: fake-key + api_base: https://exampleopenaiendpoint-production.up.railway.app/ + +litellm_settings: + drop_params: True + # max_budget: 100 + # budget_duration: 30d + num_retries: 5 + request_timeout: 600 + telemetry: False + context_window_fallbacks: [{"gpt-3.5-turbo": ["gpt-3.5-turbo-large"]}] + +general_settings: + master_key: sk-1234 # [OPTIONAL] Use to enforce auth on proxy. See - https://docs.litellm.ai/docs/proxy/virtual_keys + store_model_in_db: True + proxy_budget_rescheduler_min_time: 60 + proxy_budget_rescheduler_max_time: 64 + proxy_batch_write_at: 1 + # database_url: "postgresql://:@:/" # [OPTIONAL] use for token-based auth to proxy + +# environment_variables: + # settings for using redis caching + # REDIS_HOST: redis-16337.c322.us-east-1-2.ec2.cloud.redislabs.com + # REDIS_PORT: "16337" + # REDIS_PASSWORD: diff --git a/cookbook/misc/dev_release.txt b/cookbook/misc/dev_release.txt new file mode 100644 index 000000000..bd40f89e6 --- /dev/null +++ b/cookbook/misc/dev_release.txt @@ -0,0 +1,11 @@ +python3 -m build +twine upload --verbose dist/litellm-1.18.13.dev4.tar.gz -u __token__ - + + +Note: You might need to make a MANIFEST.ini file on root for build process incase it fails + +Place this in MANIFEST.ini +recursive-exclude venv * +recursive-exclude myenv * +recursive-exclude py313_env * +recursive-exclude **/.venv * diff --git a/cookbook/misc/migrate_proxy_config.py b/cookbook/misc/migrate_proxy_config.py new file mode 100644 index 000000000..31c3f32c0 --- /dev/null +++ b/cookbook/misc/migrate_proxy_config.py @@ -0,0 +1,95 @@ +""" +LiteLLM Migration Script! + +Takes a config.yaml and calls /model/new + +Inputs: + - File path to config.yaml + - Proxy base url to your hosted proxy + +Step 1: Reads your config.yaml +Step 2: reads `model_list` and loops through all models +Step 3: calls `/model/new` for each model +""" + +import yaml +import requests + +_in_memory_os_variables = {} + + +def migrate_models(config_file, proxy_base_url): + # Step 1: Read the config.yaml file + with open(config_file, "r") as f: + config = yaml.safe_load(f) + + # Step 2: Read the model_list and loop through all models + model_list = config.get("model_list", []) + print("model_list: ", model_list) + for model in model_list: + + model_name = model.get("model_name") + print("\nAdding model: ", model_name) + litellm_params = model.get("litellm_params", {}) + api_base = litellm_params.get("api_base", "") + print("api_base on config.yaml: ", api_base) + + litellm_model_name = litellm_params.get("model", "") or "" + if "vertex_ai/" in litellm_model_name: + print("\033[91m\nSkipping Vertex AI model\033[0m", model) + continue + + for param, value in litellm_params.items(): + if isinstance(value, str) and value.startswith("os.environ/"): + # check if value is in _in_memory_os_variables + if value in _in_memory_os_variables: + new_value = _in_memory_os_variables[value] + print( + "\033[92mAlready entered value for \033[0m", + value, + "\033[92musing \033[0m", + new_value, + ) + else: + new_value = input(f"Enter value for {value}: ") + _in_memory_os_variables[value] = new_value + litellm_params[param] = new_value + if "api_key" not in litellm_params: + new_value = input(f"Enter api key for {model_name}: ") + litellm_params["api_key"] = new_value + + print("\nlitellm_params: ", litellm_params) + # Confirm before sending POST request + confirm = input( + "\033[92mDo you want to send the POST request with the above parameters? (y/n): \033[0m" + ) + if confirm.lower() != "y": + print("Aborting POST request.") + exit() + + # Step 3: Call /model/new for each model + url = f"{proxy_base_url}/model/new" + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {master_key}", + } + data = {"model_name": model_name, "litellm_params": litellm_params} + print("POSTING data to proxy url", url) + response = requests.post(url, headers=headers, json=data) + if response.status_code != 200: + print(f"Error: {response.status_code} - {response.text}") + raise Exception(f"Error: {response.status_code} - {response.text}") + + # Print the response for each model + print( + f"Response for model '{model_name}': Status Code:{response.status_code} - {response.text}" + ) + + +# Usage +config_file = "config.yaml" +proxy_base_url = "http://0.0.0.0:4000" +master_key = "sk-1234" +print(f"config_file: {config_file}") +print(f"proxy_base_url: {proxy_base_url}") +migrate_models(config_file, proxy_base_url) diff --git a/cookbook/misc/openai_timeouts.py b/cookbook/misc/openai_timeouts.py new file mode 100644 index 000000000..fe3e6d426 --- /dev/null +++ b/cookbook/misc/openai_timeouts.py @@ -0,0 +1,33 @@ +import os +from openai import OpenAI +from dotenv import load_dotenv +import concurrent.futures + +load_dotenv() + +client = OpenAI( + # This is the default and can be omitted + api_key=os.environ.get("OPENAI_API_KEY"), +) + + +def create_chat_completion(): + return client.chat.completions.create( + messages=[ + { + "role": "user", + "content": "Say this is a test. Respond in 20 lines", + } + ], + model="gpt-3.5-turbo", + ) + + +with concurrent.futures.ThreadPoolExecutor() as executor: + # Set a timeout of 10 seconds + future = executor.submit(create_chat_completion) + try: + chat_completion = future.result(timeout=0.00001) + print(chat_completion) + except concurrent.futures.TimeoutError: + print("Operation timed out.") diff --git a/cookbook/misc/sagmaker_streaming.py b/cookbook/misc/sagmaker_streaming.py new file mode 100644 index 000000000..1a6cc2e32 --- /dev/null +++ b/cookbook/misc/sagmaker_streaming.py @@ -0,0 +1,55 @@ +# Notes - on how to do sagemaker streaming using boto3 +import json +import boto3 + +import sys +import os +from dotenv import load_dotenv + +load_dotenv() +import io + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path + + +class TokenIterator: + def __init__(self, stream): + self.byte_iterator = iter(stream) + self.buffer = io.BytesIO() + self.read_pos = 0 + + def __iter__(self): + return self + + def __next__(self): + while True: + self.buffer.seek(self.read_pos) + line = self.buffer.readline() + if line and line[-1] == ord("\n"): + self.read_pos += len(line) + 1 + full_line = line[:-1].decode("utf-8") + line_data = json.loads(full_line.lstrip("data:").rstrip("/n")) + return line_data["token"]["text"] + chunk = next(self.byte_iterator) + self.buffer.seek(0, io.SEEK_END) + self.buffer.write(chunk["PayloadPart"]["Bytes"]) + + +payload = { + "inputs": "How do I build a website?", + "parameters": {"max_new_tokens": 256}, + "stream": True, +} + + +client = boto3.client("sagemaker-runtime", region_name="us-west-2") +response = client.invoke_endpoint_with_response_stream( + EndpointName="berri-benchmarking-Llama-2-70b-chat-hf-4", + Body=json.dumps(payload), + ContentType="application/json", +) + +# for token in TokenIterator(response["Body"]): +# print(token) diff --git a/cookbook/misc/test_responses_api.py b/cookbook/misc/test_responses_api.py new file mode 100644 index 000000000..0011db466 --- /dev/null +++ b/cookbook/misc/test_responses_api.py @@ -0,0 +1,49 @@ +import base64 +from openai import OpenAI +import time + +client = OpenAI(base_url="http://0.0.0.0:4001", api_key="sk-1234") + + +# Function to encode the image +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode("utf-8") + + +# Path to your image +image_path = "litellm/proxy/logo.jpg" + +# Getting the Base64 string +base64_image = encode_image(image_path) + + +response = client.responses.create( + model="bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0", + input=[ + { + "role": "user", + "content": [ + {"type": "input_text", "text": "what color is the image"}, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image}", + }, + ], + } + ], +) + + +print(response.output_text) +print("response1 id===", response.id) +print("sleeping for 20 seconds...") +time.sleep(20) +print("making follow up request for existing id") +response2 = client.responses.create( + model="bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0", + previous_response_id=response.id, + input="ok, and what objects are in the image?", +) + +print(response2.output_text) diff --git a/cookbook/misc/update_json_caching.py b/cookbook/misc/update_json_caching.py new file mode 100644 index 000000000..8202d7033 --- /dev/null +++ b/cookbook/misc/update_json_caching.py @@ -0,0 +1,54 @@ +import json + +# List of models to update +models_to_update = [ + "gpt-4o-mini", + "gpt-4o-mini-2024-07-18", + "gpt-4o", + "gpt-4o-2024-11-20", + "gpt-4o-2024-08-06", + "gpt-4o-2024-05-13", + "text-embedding-3-small", + "text-embedding-3-large", + "text-embedding-ada-002-v2", + "ft:gpt-4o-2024-08-06", + "ft:gpt-4o-mini-2024-07-18", + "ft:gpt-3.5-turbo", + "ft:davinci-002", + "ft:babbage-002", +] + + +def update_model_prices(file_path): + # Read the JSON file as text first to preserve number formatting + with open(file_path, "r") as file: + original_text = file.read() + data = json.loads(original_text) + + # Update specified models + for model_name in models_to_update: + print("finding model", model_name) + if model_name in data: + print("found model") + model = data[model_name] + if "input_cost_per_token" in model: + # Format new values to match original style + model["input_cost_per_token_batches"] = float( + "{:.12f}".format(model["input_cost_per_token"] / 2) + ) + if "output_cost_per_token" in model: + model["output_cost_per_token_batches"] = float( + "{:.12f}".format(model["output_cost_per_token"] / 2) + ) + print("new pricing for model=") + # Convert all float values to full decimal format before printing + formatted_model = { + k: "{:.9f}".format(v) if isinstance(v, float) else v + for k, v in data[model_name].items() + } + print(json.dumps(formatted_model, indent=4)) + + +# Run the update +file_path = "model_prices_and_context_window.json" +update_model_prices(file_path) diff --git a/cookbook/mlflow_langchain_tracing_litellm_proxy.ipynb b/cookbook/mlflow_langchain_tracing_litellm_proxy.ipynb new file mode 100644 index 000000000..1aca0e13c --- /dev/null +++ b/cookbook/mlflow_langchain_tracing_litellm_proxy.ipynb @@ -0,0 +1,311 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Databricks Notebook with MLFlow AutoLogging for LiteLLM Proxy calls\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "5e2812ed-8000-4793-b090-49a31464d810", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "%pip install -U -qqqq databricks-agents mlflow langchain==0.3.1 langchain-core==0.3.6 " + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "52530b37-1860-4bba-a6c1-723de83bc58f", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "%pip install \"langchain-openai<=0.3.1\"" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "43c6f4b1-e2d5-431c-b1a2-b97df7707d59", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "# Before logging this chain using the driver notebook, you must comment out this line.\n", + "dbutils.library.restartPython() " + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "88eb8dd7-16b1-480b-aa70-cd429ef87159", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "import mlflow\n", + "from operator import itemgetter\n", + "from langchain_core.output_parsers import StrOutputParser\n", + "from langchain_core.prompts import PromptTemplate\n", + "from langchain_core.runnables import RunnableLambda\n", + "from langchain_databricks import ChatDatabricks\n", + "from langchain_openai import ChatOpenAI" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "f0fdca8f-6f6f-407c-ad4a-0d5a2778728e", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "mlflow.langchain.autolog()" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "2ef67315-e468-4d60-a318-98c2cac75bc4", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "# These helper functions parse the `messages` array.\n", + "\n", + "# Return the string contents of the most recent message from the user\n", + "def extract_user_query_string(chat_messages_array):\n", + " return chat_messages_array[-1][\"content\"]\n", + "\n", + "\n", + "# Return the chat history, which is is everything before the last question\n", + "def extract_chat_history(chat_messages_array):\n", + " return chat_messages_array[:-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "17708467-1976-48bd-94a0-8c7895cfae3b", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "model = ChatOpenAI(\n", + " openai_api_base=\"LITELLM_PROXY_BASE_URL\", # e.g.: http://0.0.0.0:4000\n", + " model = \"gpt-3.5-turbo\", # LITELLM 'model_name'\n", + " temperature=0.1, \n", + " api_key=\"LITELLM_PROXY_API_KEY\" # e.g.: \"sk-1234\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "a5f2c2af-82f7-470d-b559-47b67fb00cda", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "############\n", + "# Prompt Template for generation\n", + "############\n", + "prompt = PromptTemplate(\n", + " template=\"You are a hello world bot. Respond with a reply to the user's question that is fun and interesting to the user. User's question: {question}\",\n", + " input_variables=[\"question\"],\n", + ")\n", + "\n", + "############\n", + "# FM for generation\n", + "# ChatDatabricks accepts any /llm/v1/chat model serving endpoint\n", + "############\n", + "model = ChatDatabricks(\n", + " endpoint=\"databricks-dbrx-instruct\",\n", + " extra_params={\"temperature\": 0.01, \"max_tokens\": 500},\n", + ")\n", + "\n", + "\n", + "############\n", + "# Simple chain\n", + "############\n", + "# The framework requires the chain to return a string value.\n", + "chain = (\n", + " {\n", + " \"question\": itemgetter(\"messages\")\n", + " | RunnableLambda(extract_user_query_string),\n", + " \"chat_history\": itemgetter(\"messages\") | RunnableLambda(extract_chat_history),\n", + " }\n", + " | prompt\n", + " | model\n", + " | StrOutputParser()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "366edd90-62a1-4d6f-8a65-0211fb24ca02", + "showTitle": false, + "title": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello there! I\\'m here to help with your questions. Regarding your query about \"rag,\" it\\'s not something typically associated with a \"hello world\" bot, but I\\'m happy to explain!\\n\\nRAG, or Remote Angular GUI, is a tool that allows you to create and manage Angular applications remotely. It\\'s a way to develop and test Angular components and applications without needing to set up a local development environment. This can be particularly useful for teams working on distributed systems or for developers who prefer to work in a cloud-based environment.\\n\\nI hope this explanation of RAG has been helpful and interesting! If you have any other questions or need further clarification, feel free to ask.'" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "application/databricks.mlflow.trace": "\"tr-ea2226413395413ba2cf52cffc523502\"", + "text/plain": [ + "Trace(request_id=tr-ea2226413395413ba2cf52cffc523502)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# This is the same input your chain's REST API will accept.\n", + "question = {\n", + " \"messages\": [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": \"what is rag?\",\n", + " },\n", + " ]\n", + "}\n", + "\n", + "chain.invoke(question)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "5d68e37d-0980-4a02-bf8d-885c3853f6c1", + "showTitle": false, + "title": "" + } + }, + "outputs": [], + "source": [ + "mlflow.models.set_model(model=model)" + ] + } + ], + "metadata": { + "application/vnd.databricks.v1+notebook": { + "dashboards": [], + "environmentMetadata": null, + "language": "python", + "notebookMetadata": { + "pythonIndentUnit": 4 + }, + "notebookName": "Untitled Notebook 2024-10-16 19:35:16", + "widgets": {} + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/mock_guardrail_server/mock_bedrock_guardrail_server.py b/cookbook/mock_guardrail_server/mock_bedrock_guardrail_server.py new file mode 100644 index 000000000..7bf9cc324 --- /dev/null +++ b/cookbook/mock_guardrail_server/mock_bedrock_guardrail_server.py @@ -0,0 +1,540 @@ +#!/usr/bin/env python3 +""" +Mock Bedrock Guardrail API Server + +This is a FastAPI server that mimics the AWS Bedrock Guardrail API for testing purposes. +It follows the same API spec as the real Bedrock guardrail endpoint. + +Usage: + python mock_bedrock_guardrail_server.py + +The server will start on http://localhost:8080 +""" + +import os +import re +from typing import Any, Dict, List, Literal, Optional + +from fastapi import Depends, FastAPI, Header, HTTPException, status +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field + +# ============================================================================ +# Request/Response Models (matching Bedrock API spec) +# ============================================================================ + + +class BedrockTextContent(BaseModel): + text: str + + +class BedrockContentItem(BaseModel): + text: BedrockTextContent + + +class BedrockRequest(BaseModel): + source: Literal["INPUT", "OUTPUT"] + content: List[BedrockContentItem] = Field(default_factory=list) + + +class BedrockGuardrailOutput(BaseModel): + text: Optional[str] = None + + +class TopicPolicyItem(BaseModel): + name: str + type: str + action: Literal["BLOCKED", "NONE"] + + +class TopicPolicy(BaseModel): + topics: List[TopicPolicyItem] = Field(default_factory=list) + + +class ContentFilterItem(BaseModel): + type: str + confidence: str + action: Literal["BLOCKED", "NONE"] + + +class ContentPolicy(BaseModel): + filters: List[ContentFilterItem] = Field(default_factory=list) + + +class CustomWord(BaseModel): + match: str + action: Literal["BLOCKED", "NONE"] + + +class WordPolicy(BaseModel): + customWords: List[CustomWord] = Field(default_factory=list) + managedWordLists: List[Dict[str, Any]] = Field(default_factory=list) + + +class PiiEntity(BaseModel): + type: str + match: str + action: Literal["BLOCKED", "ANONYMIZED", "NONE"] + + +class RegexMatch(BaseModel): + name: str + match: str + regex: str + action: Literal["BLOCKED", "ANONYMIZED", "NONE"] + + +class SensitiveInformationPolicy(BaseModel): + piiEntities: List[PiiEntity] = Field(default_factory=list) + regexes: List[RegexMatch] = Field(default_factory=list) + + +class ContextualGroundingFilter(BaseModel): + type: str + threshold: float + score: float + action: Literal["BLOCKED", "NONE"] + + +class ContextualGroundingPolicy(BaseModel): + filters: List[ContextualGroundingFilter] = Field(default_factory=list) + + +class Assessment(BaseModel): + topicPolicy: Optional[TopicPolicy] = None + contentPolicy: Optional[ContentPolicy] = None + wordPolicy: Optional[WordPolicy] = None + sensitiveInformationPolicy: Optional[SensitiveInformationPolicy] = None + contextualGroundingPolicy: Optional[ContextualGroundingPolicy] = None + + +class BedrockGuardrailResponse(BaseModel): + usage: Dict[str, int] = Field( + default_factory=lambda: {"topicPolicyUnits": 1, "contentPolicyUnits": 1} + ) + action: Literal["NONE", "GUARDRAIL_INTERVENED"] = "NONE" + outputs: List[BedrockGuardrailOutput] = Field(default_factory=list) + assessments: List[Assessment] = Field(default_factory=list) + + +# ============================================================================ +# Mock Guardrail Configuration +# ============================================================================ + + +class GuardrailConfig(BaseModel): + """Configuration for mock guardrail behavior""" + + blocked_words: List[str] = Field( + default_factory=lambda: ["offensive", "inappropriate", "badword"] + ) + blocked_topics: List[str] = Field(default_factory=lambda: ["violence", "illegal"]) + pii_patterns: Dict[str, str] = Field( + default_factory=lambda: { + "EMAIL": r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b", + "PHONE": r"\b\d{3}[-.]?\d{3}[-.]?\d{4}\b", + "SSN": r"\b\d{3}-\d{2}-\d{4}\b", + "CREDIT_CARD": r"\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b", + } + ) + anonymize_pii: bool = True # If True, ANONYMIZE PII; if False, BLOCK it + bearer_token: str = "mock-bedrock-token-12345" + + +# Global config +GUARDRAIL_CONFIG = GuardrailConfig() + +# ============================================================================ +# FastAPI App Setup +# ============================================================================ + +app = FastAPI( + title="Mock Bedrock Guardrail API", + description="Mock server mimicking AWS Bedrock Guardrail API", + version="1.0.0", +) + + +# ============================================================================ +# Authentication +# ============================================================================ + + +async def verify_bearer_token(authorization: Optional[str] = Header(None)) -> str: + """ + Verify the Bearer token from the Authorization header. + + Args: + authorization: The Authorization header value + + Returns: + The token if valid + + Raises: + HTTPException: If token is missing or invalid + """ + if authorization is None: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Missing Authorization header", + headers={"WWW-Authenticate": "Bearer"}, + ) + + # Check if it's a Bearer token + parts = authorization.split() + print(f"parts: {parts}") + if len(parts) != 2 or parts[0].lower() != "bearer": + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid Authorization header format. Expected: Bearer ", + headers={"WWW-Authenticate": "Bearer"}, + ) + + token = parts[1] + + # Verify token + if token != GUARDRAIL_CONFIG.bearer_token: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail="Invalid bearer token", + ) + + return token + + +# ============================================================================ +# Guardrail Logic +# ============================================================================ + + +def check_blocked_words(text: str) -> Optional[WordPolicy]: + """Check if text contains blocked words""" + found_words = [] + text_lower = text.lower() + + for word in GUARDRAIL_CONFIG.blocked_words: + if word.lower() in text_lower: + found_words.append(CustomWord(match=word, action="BLOCKED")) + + if found_words: + return WordPolicy(customWords=found_words) + return None + + +def check_blocked_topics(text: str) -> Optional[TopicPolicy]: + """Check if text contains blocked topics""" + found_topics = [] + text_lower = text.lower() + + for topic in GUARDRAIL_CONFIG.blocked_topics: + if topic.lower() in text_lower: + found_topics.append( + TopicPolicyItem(name=topic, type=topic.upper(), action="BLOCKED") + ) + + if found_topics: + return TopicPolicy(topics=found_topics) + return None + + +def check_pii(text: str) -> tuple[Optional[SensitiveInformationPolicy], str]: + """ + Check for PII in text and return policy + anonymized text + + Returns: + Tuple of (SensitiveInformationPolicy or None, anonymized_text) + """ + pii_entities = [] + anonymized_text = text + action = "ANONYMIZED" if GUARDRAIL_CONFIG.anonymize_pii else "BLOCKED" + + for pii_type, pattern in GUARDRAIL_CONFIG.pii_patterns.items(): + try: + # Compile the regex pattern with a timeout to prevent ReDoS attacks + compiled_pattern = re.compile(pattern) + matches = compiled_pattern.finditer(text) + for match in matches: + matched_text = match.group() + pii_entities.append( + PiiEntity(type=pii_type, match=matched_text, action=action) + ) + + # Anonymize the text if configured + if GUARDRAIL_CONFIG.anonymize_pii: + anonymized_text = anonymized_text.replace( + matched_text, f"[{pii_type}_REDACTED]" + ) + except re.error: + # Invalid regex pattern - skip it and log a warning + print(f"Warning: Invalid regex pattern for PII type {pii_type}: {pattern}") + continue + + if pii_entities: + return SensitiveInformationPolicy(piiEntities=pii_entities), anonymized_text + + return None, text + + +def process_guardrail_request( + request: BedrockRequest, +) -> tuple[BedrockGuardrailResponse, List[str]]: + """ + Process a guardrail request and return the response. + + Returns: + Tuple of (response, list of output texts) + """ + all_text_content = [] + output_texts = [] + + # Extract all text from content items + for content_item in request.content: + if content_item.text and content_item.text.text: + all_text_content.append(content_item.text.text) + + # Combine all text for analysis + combined_text = " ".join(all_text_content) + + # Initialize response + response = BedrockGuardrailResponse() + assessment = Assessment() + has_intervention = False + + # Check for blocked words + word_policy = check_blocked_words(combined_text) + if word_policy: + assessment.wordPolicy = word_policy + has_intervention = True + + # Check for blocked topics + topic_policy = check_blocked_topics(combined_text) + if topic_policy: + assessment.topicPolicy = topic_policy + has_intervention = True + + # Check for PII + for text in all_text_content: + pii_policy, anonymized_text = check_pii(text) + if pii_policy: + assessment.sensitiveInformationPolicy = pii_policy + if GUARDRAIL_CONFIG.anonymize_pii: + # If anonymizing, we don't block, we modify the text + output_texts.append(anonymized_text) + has_intervention = True + else: + # If not anonymizing PII, we block it + output_texts.append(text) + has_intervention = True + else: + output_texts.append(text) + + # Build response + if has_intervention: + response.action = "GUARDRAIL_INTERVENED" + # Only add assessment if there were interventions + response.assessments = [assessment] + + # Add outputs (modified or original text) + response.outputs = [BedrockGuardrailOutput(text=txt) for txt in output_texts] + + return response, output_texts + + +# ============================================================================ +# API Endpoints +# ============================================================================ + + +@app.get("/") +async def root(): + """Health check endpoint""" + return { + "service": "Mock Bedrock Guardrail API", + "status": "running", + "endpoint_format": "/guardrail/{guardrailIdentifier}/version/{guardrailVersion}/apply", + } + + +@app.get("/health") +async def health(): + """Health check endpoint""" + return {"status": "healthy"} + + +""" +LiteLLM exposes a basic guardrail API with the text extracted from the request and sent to the guardrail API, as well as the received request body for any further processing. + +This works across all LiteLLM endpoints (completion, anthropic /v1/messages, responses api, image generation, embedding, etc.) + +This makes it easy to support your own guardrail API without having to make a PR to LiteLLM. + +LiteLLM supports passing any provider specific params from LiteLLM config.yaml to the guardrail API. + +Example: + +```yaml +guardrails: + - guardrail_name: "bedrock-content-guard" + litellm_params: + guardrail: generic_guardrail_api + mode: "pre_call" + api_key: os.environ/GUARDRAIL_API_KEY + api_base: os.environ/GUARDRAIL_API_BASE + additional_provider_specific_params: + api_version: os.environ/GUARDRAIL_API_VERSION # additional provider specific params +``` + +This is a beta API. Please help us improve it. +""" + + +class LitellmBasicGuardrailRequest(BaseModel): + texts: List[str] + images: Optional[List[str]] = None + tools: Optional[List[dict]] = None + tool_calls: Optional[List[dict]] = None + request_data: Dict[str, Any] = Field(default_factory=dict) + additional_provider_specific_params: Dict[str, Any] = Field(default_factory=dict) + input_type: Literal["request", "response"] + litellm_call_id: Optional[str] = None + litellm_trace_id: Optional[str] = None + structured_messages: Optional[List[Dict[str, Any]]] = None + + +class LitellmBasicGuardrailResponse(BaseModel): + action: Literal[ + "BLOCKED", "NONE", "GUARDRAIL_INTERVENED" + ] # BLOCKED = litellm will raise an error, NONE = litellm will continue, GUARDRAIL_INTERVENED = litellm will continue, but the text was modified by the guardrail + blocked_reason: Optional[str] = None # only if action is BLOCKED, otherwise None + texts: Optional[List[str]] = None + images: Optional[List[str]] = None + + +@app.post( + "/beta/litellm_basic_guardrail_api", + response_model=LitellmBasicGuardrailResponse, +) +async def beta_litellm_basic_guardrail_api( + request: LitellmBasicGuardrailRequest, +) -> LitellmBasicGuardrailResponse: + """ + Apply guardrail to input or output content. + + This endpoint mimics the AWS Bedrock ApplyGuardrail API. + + Args: + request: The guardrail request containing content to analyze + token: Bearer token (verified by dependency) + + Returns: + LitellmBasicGuardrailResponse with analysis results + """ + print(f"request: {request}") + if any("ishaan" in text.lower() for text in request.texts): + return LitellmBasicGuardrailResponse( + action="BLOCKED", blocked_reason="Ishaan is not allowed" + ) + elif any("pii_value" in text for text in request.texts): + return LitellmBasicGuardrailResponse( + action="GUARDRAIL_INTERVENED", + texts=[ + text.replace("pii_value", "pii_value_redacted") + for text in request.texts + ], + ) + return LitellmBasicGuardrailResponse(action="NONE") + + +@app.post("/config/update") +async def update_config( + config: GuardrailConfig, token: str = Depends(verify_bearer_token) +): + """ + Update the guardrail configuration. + + This is a testing endpoint to modify the mock guardrail behavior. + + Args: + config: New guardrail configuration + token: Bearer token (verified by dependency) + + Returns: + Updated configuration + """ + global GUARDRAIL_CONFIG + GUARDRAIL_CONFIG = config + return {"status": "updated", "config": GUARDRAIL_CONFIG} + + +@app.get("/config") +async def get_config(token: str = Depends(verify_bearer_token)): + """ + Get the current guardrail configuration. + + Args: + token: Bearer token (verified by dependency) + + Returns: + Current configuration + """ + return GUARDRAIL_CONFIG + + +# ============================================================================ +# Error Handlers +# ============================================================================ + + +@app.exception_handler(HTTPException) +async def http_exception_handler(request, exc: HTTPException): + """Custom error handler for HTTP exceptions""" + return JSONResponse( + status_code=exc.status_code, + content={"error": exc.detail}, + headers=exc.headers, + ) + + +# ============================================================================ +# Main +# ============================================================================ + +if __name__ == "__main__": + import uvicorn + + # Get configuration from environment + host = os.getenv("MOCK_BEDROCK_HOST", "0.0.0.0") + port = int(os.getenv("MOCK_BEDROCK_PORT", "8080")) + bearer_token = os.getenv("MOCK_BEDROCK_TOKEN", "mock-bedrock-token-12345") + + # Update config with environment token + GUARDRAIL_CONFIG.bearer_token = bearer_token + + print("=" * 80) + print("Mock Bedrock Guardrail API Server") + print("=" * 80) + print(f"Server starting on: http://{host}:{port}") + print(f"Bearer Token: {bearer_token}") + print(f"Endpoint: POST /guardrail/{{id}}/version/{{version}}/apply") + print("=" * 80) + print("\nExample curl command:") + print( + f""" +curl -X POST "http://{host}:{port}/guardrail/test-guardrail/version/1/apply" \\ + -H "Authorization: Bearer {bearer_token}" \\ + -H "Content-Type: application/json" \\ + -d '{{ + "source": "INPUT", + "content": [ + {{ + "text": {{ + "text": "Hello, my email is test@example.com" + }} + }} + ] + }}' + """ + ) + print("=" * 80) + + uvicorn.run(app, host=host, port=port) diff --git a/cookbook/mock_prompt_management_server/README.md b/cookbook/mock_prompt_management_server/README.md new file mode 100644 index 000000000..9ec76baac --- /dev/null +++ b/cookbook/mock_prompt_management_server/README.md @@ -0,0 +1,293 @@ +# Mock Prompt Management Server + +A reference implementation of the [LiteLLM Generic Prompt Management API](https://docs.litellm.ai/docs/adding_provider/generic_prompt_management_api). + +This FastAPI server demonstrates how to build a prompt management API that integrates with LiteLLM without requiring a PR to the LiteLLM repository. + +## Quick Start + +### 1. Install Dependencies + +```bash +pip install fastapi uvicorn pydantic +``` + +### 2. Start the Server + +```bash +python mock_prompt_management_server.py +``` + +The server will start on `http://localhost:8080` + +### 3. Test the Endpoint + +```bash +# Get a prompt +curl "http://localhost:8080/beta/litellm_prompt_management?prompt_id=hello-world-prompt" + +# Get a prompt with authentication +curl "http://localhost:8080/beta/litellm_prompt_management?prompt_id=hello-world-prompt" \ + -H "Authorization: Bearer test-token-12345" + +# List all prompts +curl "http://localhost:8080/prompts" + +# Get prompt variables +curl "http://localhost:8080/prompts/hello-world-prompt/variables" +``` + +## Using with LiteLLM + +### Configuration + +Create a `config.yaml` file: + +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: openai/gpt-3.5-turbo + api_key: os.environ/OPENAI_API_KEY + +prompts: + - prompt_id: "hello-world-prompt" + litellm_params: + prompt_integration: "generic_prompt_management" + api_base: http://localhost:8080 + api_key: test-token-12345 +``` + +### Start LiteLLM Proxy + +```bash +litellm --config config.yaml +``` + +### Make a Request + +```bash +curl http://0.0.0.0:4000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer sk-1234" \ + -d '{ + "model": "gpt-3.5-turbo", + "prompt_id": "hello-world-prompt", + "prompt_variables": { + "domain": "data science", + "task": "analyzing customer behavior" + }, + "messages": [ + {"role": "user", "content": "Please help me get started"} + ] + }' +``` + +## Available Prompts + +The server includes several example prompts: + +| Prompt ID | Description | Variables | +|-----------|-------------|-----------| +| `hello-world-prompt` | Basic helpful assistant | `domain`, `task` | +| `code-review-prompt` | Code review assistant | `years_experience`, `language`, `code` | +| `customer-support-prompt` | Customer support agent | `company_name`, `customer_message` | +| `data-analysis-prompt` | Data analysis expert | `analysis_type`, `dataset_name`, `data` | +| `creative-writing-prompt` | Creative writing assistant | `genre`, `length`, `topic` | + +## Authentication + +The server supports optional Bearer token authentication. Valid tokens for testing: + +- `test-token-12345` +- `dev-token-67890` +- `prod-token-abcdef` + +If no `Authorization` header is provided, requests are allowed (for testing purposes). + +## API Endpoints + +### LiteLLM Spec Endpoints + +#### `GET /beta/litellm_prompt_management` + +Get a prompt by ID (required by LiteLLM). + +**Query Parameters:** +- `prompt_id` (required): The prompt ID +- `project_name` (optional): Project filter +- `slug` (optional): Slug filter +- `version` (optional): Version filter + +**Response:** +```json +{ + "prompt_id": "hello-world-prompt", + "prompt_template": [ + { + "role": "system", + "content": "You are a helpful assistant specialized in {domain}." + }, + { + "role": "user", + "content": "Help me with: {task}" + } + ], + "prompt_template_model": "gpt-4", + "prompt_template_optional_params": { + "temperature": 0.7, + "max_tokens": 500 + } +} +``` + +### Convenience Endpoints (Not in LiteLLM Spec) + +#### `GET /health` + +Health check endpoint. + +#### `GET /prompts` + +List all available prompts. + +#### `GET /prompts/{prompt_id}/variables` + +Get all variables used in a prompt template. + +#### `POST /prompts` + +Create a new prompt (in-memory only, for testing). + +## Example: Full Integration Test + +### 1. Start the Mock Server + +```bash +python mock_prompt_management_server.py +``` + +### 2. Test with Python + +```python +from litellm import completion + +# The completion will: +# 1. Fetch the prompt from your API +# 2. Replace {domain} with "machine learning" +# 3. Replace {task} with "building a recommendation system" +# 4. Merge with your messages +# 5. Use the model and params from the prompt + +response = completion( + model="gpt-4", + prompt_id="hello-world-prompt", + prompt_variables={ + "domain": "machine learning", + "task": "building a recommendation system" + }, + messages=[ + {"role": "user", "content": "I have user behavior data from the past year."} + ], + # Configure the generic prompt manager + generic_prompt_config={ + "api_base": "http://localhost:8080", + "api_key": "test-token-12345", + } +) + +print(response.choices[0].message.content) +``` + +## Customization + +### Adding New Prompts + +Edit the `PROMPTS_DB` dictionary in `mock_prompt_management_server.py`: + +```python +PROMPTS_DB = { + "my-custom-prompt": { + "prompt_id": "my-custom-prompt", + "prompt_template": [ + { + "role": "system", + "content": "You are a {role}." + }, + { + "role": "user", + "content": "{user_input}" + } + ], + "prompt_template_model": "gpt-4", + "prompt_template_optional_params": { + "temperature": 0.8, + "max_tokens": 1000 + } + } +} +``` + +### Using a Database + +Replace the `PROMPTS_DB` dictionary with database queries: + +```python +@app.get("/beta/litellm_prompt_management") +async def get_prompt(prompt_id: str): + # Fetch from database + prompt = await db.prompts.find_one({"prompt_id": prompt_id}) + + if not prompt: + raise HTTPException(status_code=404, detail="Prompt not found") + + return PromptResponse(**prompt) +``` + +### Adding Access Control + +Use the custom query parameters for access control: + +```python +@app.get("/beta/litellm_prompt_management") +async def get_prompt( + prompt_id: str, + project_name: Optional[str] = None, + user_id: Optional[str] = None, + authorization: Optional[str] = Header(None) +): + token = verify_api_key(authorization) + + # Check if user has access to this project + if not has_project_access(token, project_name): + raise HTTPException(status_code=403, detail="Access denied") + + # Fetch and return prompt + ... +``` + +## Production Considerations + +Before deploying to production: + +1. **Use a real database** instead of in-memory storage +2. **Implement proper authentication** with JWT tokens or API keys +3. **Add rate limiting** to prevent abuse +4. **Use HTTPS** for encrypted communication +5. **Add logging and monitoring** for observability +6. **Implement caching** for frequently accessed prompts +7. **Add versioning** for prompt management +8. **Implement access control** based on teams/users +9. **Add input validation** for all parameters +10. **Use environment variables** for configuration + +## Related Documentation + +- [Generic Prompt Management API Documentation](https://docs.litellm.ai/docs/adding_provider/generic_prompt_management_api) +- [LiteLLM Prompt Management](https://docs.litellm.ai/docs/proxy/prompt_management) +- [Generic Guardrail API](https://docs.litellm.ai/docs/adding_provider/generic_guardrail_api) + +## Questions? + +This is a reference implementation for the LiteLLM Generic Prompt Management API. For questions or issues, please open an issue on the [LiteLLM GitHub repository](https://github.com/BerriAI/litellm). + diff --git a/cookbook/mock_prompt_management_server/mock_prompt_management_server.py b/cookbook/mock_prompt_management_server/mock_prompt_management_server.py new file mode 100644 index 000000000..295a96e12 --- /dev/null +++ b/cookbook/mock_prompt_management_server/mock_prompt_management_server.py @@ -0,0 +1,390 @@ +#!/usr/bin/env python3 +""" +Mock Prompt Management API Server + +This is a FastAPI server that implements the LiteLLM Generic Prompt Management API +for testing and demonstration purposes. + +Usage: + python mock_prompt_management_server.py + +The server will start on http://localhost:8080 + +Test the endpoint: + curl "http://localhost:8080/beta/litellm_prompt_management?prompt_id=hello-world-prompt" +""" + +import os +import json +from typing import Any, Dict, List, Optional + +from fastapi import FastAPI, HTTPException, Header, Query, status +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field + +# ============================================================================ +# Response Models +# ============================================================================ + + +class MessageContent(BaseModel): + """A single message in the prompt template""" + + role: str = Field(..., description="Message role (system, user, assistant)") + content: str = Field( + ..., description="Message content with optional {variable} placeholders" + ) + + +class PromptResponse(BaseModel): + """Response format for the prompt management API""" + + prompt_id: str = Field(..., description="The ID of the prompt") + prompt_template: List[MessageContent] = Field( + ..., description="Array of messages in OpenAI format" + ) + prompt_template_model: Optional[str] = Field( + None, description="Optional model to use for this prompt" + ) + prompt_template_optional_params: Optional[Dict[str, Any]] = Field( + None, description="Optional parameters like temperature, max_tokens, etc." + ) + + +# ============================================================================ +# Mock Prompt Database +# ============================================================================ + +PROMPTS_DB = { + "hello-world-prompt": { + "prompt_id": "hello-world-prompt", + "prompt_template": [ + { + "role": "system", + "content": "You are a helpful assistant specialized in {domain}.", + }, + {"role": "user", "content": "Help me with: {task}"}, + ], + "prompt_template_model": "gpt-4", + "prompt_template_optional_params": {"temperature": 0.7, "max_tokens": 500}, + }, + "code-review-prompt": { + "prompt_id": "code-review-prompt", + "prompt_template": [ + { + "role": "system", + "content": "You are an expert code reviewer with {years_experience} years of experience in {language}.", + }, + { + "role": "user", + "content": "Please review the following code for bugs, security issues, and best practices:\n\n{code}", + }, + ], + "prompt_template_model": "gpt-4-turbo", + "prompt_template_optional_params": { + "temperature": 0.3, + "max_tokens": 1500, + }, + }, + "customer-support-prompt": { + "prompt_id": "customer-support-prompt", + "prompt_template": [ + { + "role": "system", + "content": "You are a friendly customer support agent for {company_name}. Always be professional, empathetic, and solution-oriented.", + }, + { + "role": "user", + "content": "Customer inquiry: {customer_message}", + }, + ], + "prompt_template_model": "gpt-3.5-turbo", + "prompt_template_optional_params": { + "temperature": 0.8, + "max_tokens": 800, + "top_p": 0.9, + }, + }, + "data-analysis-prompt": { + "prompt_id": "data-analysis-prompt", + "prompt_template": [ + { + "role": "system", + "content": "You are a data scientist expert in {analysis_type} analysis.", + }, + { + "role": "user", + "content": "Analyze the following data and provide insights:\n\nDataset: {dataset_name}\nData: {data}", + }, + ], + "prompt_template_model": "gpt-4", + "prompt_template_optional_params": { + "temperature": 0.5, + "max_tokens": 2000, + }, + }, + "creative-writing-prompt": { + "prompt_id": "creative-writing-prompt", + "prompt_template": [ + { + "role": "system", + "content": "You are a creative writer specializing in {genre} fiction.", + }, + { + "role": "user", + "content": "Write a {length} story about: {topic}", + }, + ], + "prompt_template_model": "gpt-4", + "prompt_template_optional_params": { + "temperature": 0.9, + "max_tokens": 3000, + "top_p": 0.95, + }, + }, +} + +# Valid API tokens for authentication (in production, use a secure token store) +VALID_API_TOKENS = { + "test-token-12345", + "dev-token-67890", + "prod-token-abcdef", +} + +# ============================================================================ +# FastAPI App +# ============================================================================ + +app = FastAPI( + title="Mock Prompt Management API", + description="A mock server implementing the LiteLLM Generic Prompt Management API", + version="1.0.0", +) + + +def verify_api_key(authorization: Optional[str] = Header(None)) -> bool: + """ + Verify the API key from the Authorization header. + + Args: + authorization: Authorization header (Bearer token) + + Returns: + True if valid, raises HTTPException if invalid + """ + if authorization is None: + # Allow requests without authentication for testing + return True + + # Extract token from "Bearer " + if not authorization.startswith("Bearer "): + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid authorization header format. Expected 'Bearer '", + ) + + token = authorization.replace("Bearer ", "").strip() + + if token not in VALID_API_TOKENS: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid API key", + ) + + return True + + +@app.get("/beta/litellm_prompt_management", response_model=PromptResponse) +async def get_prompt( + prompt_id: str = Query(..., description="The ID of the prompt to fetch"), + project_name: Optional[str] = Query( + None, description="Optional project name filter" + ), + slug: Optional[str] = Query(None, description="Optional slug filter"), + version: Optional[str] = Query(None, description="Optional version filter"), + authorization: Optional[str] = Header(None), +) -> PromptResponse: + """ + Get a prompt by ID with optional filtering. + + This endpoint implements the LiteLLM Generic Prompt Management API specification. + + Args: + prompt_id: The ID of the prompt to fetch + project_name: Optional project name for filtering + slug: Optional slug for filtering + version: Optional version for filtering + authorization: Optional Bearer token for authentication + + Returns: + PromptResponse with the prompt template and configuration + + Raises: + HTTPException: 401 if authentication fails, 404 if prompt not found + """ + # Verify authentication + verify_api_key(authorization) + + # Log the request parameters (useful for debugging) + print(f"Fetching prompt: {prompt_id}") + if project_name: + print(f" Project: {project_name}") + if slug: + print(f" Slug: {slug}") + if version: + print(f" Version: {version}") + + # Check if prompt exists + if prompt_id not in PROMPTS_DB: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=f"Prompt '{prompt_id}' not found. Available prompts: {list(PROMPTS_DB.keys())}", + ) + + # Get the prompt from the database + prompt_data = PROMPTS_DB[prompt_id] + + # Optional: Apply filtering based on project_name, slug, or version + # In a real implementation, you might use these to filter prompts by access control + # or to fetch specific versions from your database + + return PromptResponse(**prompt_data) + + +@app.get("/health") +async def health_check(): + """Health check endpoint""" + return { + "status": "healthy", + "service": "mock-prompt-management-api", + "version": "1.0.0", + } + + +@app.get("/prompts") +async def list_prompts(authorization: Optional[str] = Header(None)): + """ + List all available prompts. + + This is a convenience endpoint (not part of the LiteLLM spec) for + discovering available prompts. + """ + # Verify authentication + verify_api_key(authorization) + + prompts_list = [ + { + "prompt_id": pid, + "model": p.get("prompt_template_model"), + "has_variables": any( + "{" in msg.get("content", "") for msg in p.get("prompt_template", []) + ), + } + for pid, p in PROMPTS_DB.items() + ] + + return {"prompts": prompts_list, "total": len(prompts_list)} + + +@app.get("/prompts/{prompt_id}/variables") +async def get_prompt_variables( + prompt_id: str, authorization: Optional[str] = Header(None) +): + """ + Get all variables in a prompt template. + + This is a convenience endpoint (not part of the LiteLLM spec) for + discovering what variables a prompt expects. + """ + # Verify authentication + verify_api_key(authorization) + + if prompt_id not in PROMPTS_DB: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=f"Prompt '{prompt_id}' not found", + ) + + prompt_data = PROMPTS_DB[prompt_id] + variables = set() + + # Extract variables from the prompt template + import re + + for message in prompt_data["prompt_template"]: + content = message.get("content", "") + # Find all {variable} patterns + found_vars = re.findall(r"\{(\w+)\}", content) + variables.update(found_vars) + + return { + "prompt_id": prompt_id, + "variables": sorted(list(variables)), + "example_usage": { + "prompt_id": prompt_id, + "prompt_variables": {var: f"<{var}_value>" for var in variables}, + }, + } + + +@app.post("/prompts") +async def create_prompt( + prompt: PromptResponse, authorization: Optional[str] = Header(None) +): + """ + Create a new prompt (convenience endpoint for testing). + + This is NOT part of the LiteLLM spec - it's just for testing purposes. + """ + # Verify authentication + verify_api_key(authorization) + + if prompt.prompt_id in PROMPTS_DB: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail=f"Prompt '{prompt.prompt_id}' already exists", + ) + + PROMPTS_DB[prompt.prompt_id] = prompt.dict() + + return { + "status": "created", + "prompt_id": prompt.prompt_id, + "message": "Prompt created successfully (in-memory only)", + } + + +# ============================================================================ +# Main +# ============================================================================ + +if __name__ == "__main__": + import uvicorn + + print("=" * 70) + print("Mock Prompt Management API Server") + print("=" * 70) + print(f"\nStarting server on http://localhost:8080") + print(f"\nAvailable prompts: {len(PROMPTS_DB)}") + for prompt_id in PROMPTS_DB.keys(): + print(f" - {prompt_id}") + print(f"\nValid API tokens: {len(VALID_API_TOKENS)}") + print(" - test-token-12345") + print(" - dev-token-67890") + print(" - prod-token-abcdef") + print("\nEndpoints:") + print(" GET /beta/litellm_prompt_management?prompt_id= (LiteLLM spec)") + print(" GET /health (health check)") + print(" GET /prompts (list all prompts)") + print( + " GET /prompts/{id}/variables (get prompt variables)" + ) + print(" POST /prompts (create prompt)") + print("\nExample usage:") + print( + ' curl "http://localhost:8080/beta/litellm_prompt_management?prompt_id=hello-world-prompt"' + ) + print("\nPress CTRL+C to stop the server") + print("=" * 70) + + uvicorn.run(app, host="0.0.0.0", port=8080, log_level="info") diff --git a/cookbook/nova_sonic_realtime.py b/cookbook/nova_sonic_realtime.py new file mode 100644 index 000000000..ab5105562 --- /dev/null +++ b/cookbook/nova_sonic_realtime.py @@ -0,0 +1,291 @@ +""" +Client script to test Nova Sonic realtime API through LiteLLM proxy. + +This script connects to LiteLLM proxy's realtime endpoint and enables +speech-to-speech conversation with Bedrock Nova Sonic. + +Prerequisites: +- LiteLLM proxy running with Bedrock configured +- pyaudio installed: pip install pyaudio +- websockets installed: pip install websockets + +Usage: + python nova_sonic_realtime.py +""" + +import asyncio +import base64 +import json +import os +import pyaudio +import websockets +from typing import Optional + +# Bounded queue size for audio chunks (configurable via env to avoid unbounded memory) +AUDIO_QUEUE_MAXSIZE = int(os.getenv("LITELLM_ASYNCIO_QUEUE_MAXSIZE", 10_000)) + +# Audio configuration (matching Nova Sonic requirements) +INPUT_SAMPLE_RATE = 16000 # Nova Sonic expects 16kHz input +OUTPUT_SAMPLE_RATE = 24000 # Nova Sonic outputs 24kHz +CHANNELS = 1 +FORMAT = pyaudio.paInt16 +CHUNK_SIZE = 1024 + +# LiteLLM proxy configuration +LITELLM_PROXY_URL = "ws://localhost:4000/v1/realtime?model=bedrock-sonic" +LITELLM_API_KEY = "sk-12345" # Your LiteLLM API key + + +class RealtimeClient: + """Client for LiteLLM realtime API with audio support.""" + + def __init__(self, url: str, api_key: str): + self.url = url + self.api_key = api_key + self.ws: Optional[websockets.WebSocketClientProtocol] = None + self.is_active = False + self.audio_queue = asyncio.Queue(maxsize=AUDIO_QUEUE_MAXSIZE) + self.pyaudio = pyaudio.PyAudio() + self.input_stream = None + self.output_stream = None + + async def connect(self): + """Connect to LiteLLM proxy realtime endpoint.""" + print(f"Connecting to {self.url}...") + + headers = {} + if self.api_key: + headers["Authorization"] = f"Bearer {self.api_key}" + + self.ws = await websockets.connect( + self.url, + additional_headers=headers, + max_size=10 * 1024 * 1024, # 10MB max message size + ) + self.is_active = True + print("āœ“ Connected to LiteLLM proxy") + + async def send_session_update(self): + """Send session configuration.""" + session_update = { + "type": "session.update", + "session": { + "instructions": "You are a friendly assistant. Keep your responses short and conversational.", + "voice": "matthew", + "temperature": 0.8, + "max_response_output_tokens": 1024, + "modalities": ["text", "audio"], + "input_audio_format": "pcm16", + "output_audio_format": "pcm16", + "turn_detection": { + "type": "server_vad", + "threshold": 0.5, + "prefix_padding_ms": 300, + "silence_duration_ms": 500, + }, + }, + } + await self.ws.send(json.dumps(session_update)) + print("āœ“ Session configuration sent") + + async def receive_messages(self): + """Receive and process messages from the server.""" + try: + async for message in self.ws: + if not self.is_active: + break + + try: + data = json.loads(message) + event_type = data.get("type") + + if event_type == "session.created": + print(f"āœ“ Session created: {data.get('session', {}).get('id')}") + + elif event_type == "response.created": + print("šŸ¤– Assistant is responding...") + + elif event_type == "response.text.delta": + # Print text transcription + delta = data.get("delta", "") + print(delta, end="", flush=True) + + elif event_type == "response.audio.delta": + # Queue audio for playback + audio_b64 = data.get("delta", "") + if audio_b64: + audio_bytes = base64.b64decode(audio_b64) + await self.audio_queue.put(audio_bytes) + + elif event_type == "response.text.done": + print() # New line after text + + elif event_type == "response.done": + print("āœ“ Response complete") + + elif event_type == "error": + print(f"āŒ Error: {data.get('error', {})}") + + else: + # Debug: print other event types + print(f"[{event_type}]", end=" ") + + except json.JSONDecodeError: + print(f"Failed to parse message: {message[:100]}") + + except websockets.exceptions.ConnectionClosed: + print("\nāœ— Connection closed") + except Exception as e: + print(f"\nāœ— Error receiving messages: {e}") + finally: + self.is_active = False + + async def send_audio_chunk(self, audio_bytes: bytes): + """Send audio chunk to server.""" + if not self.is_active or not self.ws: + return + + audio_b64 = base64.b64encode(audio_bytes).decode("utf-8") + message = { + "type": "input_audio_buffer.append", + "audio": audio_b64, + } + await self.ws.send(json.dumps(message)) + + async def commit_audio_buffer(self): + """Commit the audio buffer to trigger processing.""" + if not self.is_active or not self.ws: + return + + message = {"type": "input_audio_buffer.commit"} + await self.ws.send(json.dumps(message)) + + async def capture_audio(self): + """Capture audio from microphone and send to server.""" + print("\nšŸŽ¤ Starting audio capture...") + print("Speak into your microphone. Press Ctrl+C to stop.\n") + + self.input_stream = self.pyaudio.open( + format=FORMAT, + channels=CHANNELS, + rate=INPUT_SAMPLE_RATE, + input=True, + frames_per_buffer=CHUNK_SIZE, + ) + + try: + while self.is_active: + audio_data = self.input_stream.read( + CHUNK_SIZE, exception_on_overflow=False + ) + await self.send_audio_chunk(audio_data) + await asyncio.sleep(0.01) # Small delay to prevent overwhelming + except Exception as e: + print(f"Error capturing audio: {e}") + finally: + if self.input_stream: + self.input_stream.stop_stream() + self.input_stream.close() + + async def play_audio(self): + """Play audio responses from the server.""" + print("šŸ”Š Starting audio playback...") + + self.output_stream = self.pyaudio.open( + format=FORMAT, + channels=CHANNELS, + rate=OUTPUT_SAMPLE_RATE, + output=True, + frames_per_buffer=CHUNK_SIZE, + ) + + try: + while self.is_active: + try: + audio_data = await asyncio.wait_for( + self.audio_queue.get(), timeout=0.1 + ) + if audio_data: + self.output_stream.write(audio_data) + except asyncio.TimeoutError: + continue + except Exception as e: + print(f"Error playing audio: {e}") + finally: + if self.output_stream: + self.output_stream.stop_stream() + self.output_stream.close() + + async def close(self): + """Close the connection and cleanup.""" + self.is_active = False + + if self.ws: + await self.ws.close() + + if self.input_stream: + self.input_stream.stop_stream() + self.input_stream.close() + + if self.output_stream: + self.output_stream.stop_stream() + self.output_stream.close() + + self.pyaudio.terminate() + print("\nāœ“ Connection closed") + + +async def main(): + """Main function to run the realtime client.""" + print("=" * 80) + print("Bedrock Nova Sonic Realtime Client") + print("=" * 80) + print() + + client = RealtimeClient(LITELLM_PROXY_URL, LITELLM_API_KEY) + + try: + # Connect to server + await client.connect() + + # Send session configuration + await client.send_session_update() + + # Wait a moment for session to be established + await asyncio.sleep(0.5) + + # Start tasks + receive_task = asyncio.create_task(client.receive_messages()) + capture_task = asyncio.create_task(client.capture_audio()) + playback_task = asyncio.create_task(client.play_audio()) + + # Wait for user to interrupt + await asyncio.gather( + receive_task, + capture_task, + playback_task, + return_exceptions=True, + ) + + except KeyboardInterrupt: + print("\n\n⚠ Interrupted by user") + except Exception as e: + print(f"\nāŒ Error: {e}") + import traceback + + traceback.print_exc() + finally: + await client.close() + + +if __name__ == "__main__": + print("\nMake sure:") + print("1. LiteLLM proxy is running on port 4000") + print("2. Bedrock is configured in proxy_server_config.yaml") + print("3. AWS credentials are set") + print() + + try: + asyncio.run(main()) + except KeyboardInterrupt: + print("\n\nGoodbye!") diff --git a/cookbook/result.html b/cookbook/result.html new file mode 100644 index 000000000..0bd099bac --- /dev/null +++ b/cookbook/result.html @@ -0,0 +1,22 @@ + + + + + + +
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/veo_video_generation.py b/cookbook/veo_video_generation.py new file mode 100644 index 000000000..4df2d946a --- /dev/null +++ b/cookbook/veo_video_generation.py @@ -0,0 +1,321 @@ +#!/usr/bin/env python3 +""" +Complete example for Veo video generation through LiteLLM proxy. + +This script demonstrates how to: +1. Generate videos using Google's Veo model +2. Poll for completion status +3. Download the generated video file + +Requirements: +- LiteLLM proxy running with Google AI Studio pass-through configured +- Google AI Studio API key with Veo access +""" + +import json +import os +import time +import requests +from typing import Optional + + +class VeoVideoGenerator: + """Complete Veo video generation client using LiteLLM proxy.""" + + def __init__( + self, + base_url: str = "http://localhost:4000/gemini/v1beta", + api_key: str = "sk-1234", + ): + """ + Initialize the Veo video generator. + + Args: + base_url: Base URL for the LiteLLM proxy with Gemini pass-through + api_key: API key for LiteLLM proxy authentication + """ + self.base_url = base_url + self.api_key = api_key + self.headers = {"x-goog-api-key": api_key, "Content-Type": "application/json"} + + def generate_video(self, prompt: str) -> Optional[str]: + """ + Initiate video generation with Veo. + + Args: + prompt: Text description of the video to generate + + Returns: + Operation name if successful, None otherwise + """ + print(f"šŸŽ¬ Generating video with prompt: '{prompt}'") + + url = f"{self.base_url}/models/veo-3.0-generate-preview:predictLongRunning" + payload = {"instances": [{"prompt": prompt}]} + + try: + response = requests.post(url, headers=self.headers, json=payload) + response.raise_for_status() + + data = response.json() + operation_name = data.get("name") + + if operation_name: + print(f"āœ… Video generation started: {operation_name}") + return operation_name + else: + print("āŒ No operation name returned") + print(f"Response: {json.dumps(data, indent=2)}") + return None + + except requests.RequestException as e: + print(f"āŒ Failed to start video generation: {e}") + if hasattr(e, "response") and e.response is not None: + try: + error_data = e.response.json() + print(f"Error details: {json.dumps(error_data, indent=2)}") + except: + print(f"Error response: {e.response.text}") + return None + + def wait_for_completion( + self, operation_name: str, max_wait_time: int = 600 + ) -> Optional[str]: + """ + Poll operation status until video generation is complete. + + Args: + operation_name: Name of the operation to monitor + max_wait_time: Maximum time to wait in seconds (default: 10 minutes) + + Returns: + Video URI if successful, None otherwise + """ + print("ā³ Waiting for video generation to complete...") + + operation_url = f"{self.base_url}/{operation_name}" + start_time = time.time() + poll_interval = 10 # Start with 10 seconds + + while time.time() - start_time < max_wait_time: + try: + print( + f"šŸ” Polling status... ({int(time.time() - start_time)}s elapsed)" + ) + + response = requests.get(operation_url, headers=self.headers) + response.raise_for_status() + + data = response.json() + + # Check for errors + if "error" in data: + print("āŒ Error in video generation:") + print(json.dumps(data["error"], indent=2)) + return None + + # Check if operation is complete + is_done = data.get("done", False) + + if is_done: + print("šŸŽ‰ Video generation complete!") + + try: + # Extract video URI from nested response + video_uri = data["response"]["generateVideoResponse"][ + "generatedSamples" + ][0]["video"]["uri"] + print(f"šŸ“¹ Video URI: {video_uri}") + return video_uri + except KeyError as e: + print(f"āŒ Could not extract video URI: {e}") + print("Full response:") + print(json.dumps(data, indent=2)) + return None + + # Wait before next poll, with exponential backoff + time.sleep(poll_interval) + poll_interval = min(poll_interval * 1.2, 30) # Cap at 30 seconds + + except requests.RequestException as e: + print(f"āŒ Error polling operation status: {e}") + time.sleep(poll_interval) + + print(f"ā° Timeout after {max_wait_time} seconds") + return None + + def download_video( + self, video_uri: str, output_filename: str = "generated_video.mp4" + ) -> bool: + """ + Download the generated video file. + + Args: + video_uri: URI of the video to download (from Google's response) + output_filename: Local filename to save the video + + Returns: + True if download successful, False otherwise + """ + print(f"ā¬‡ļø Downloading video...") + print(f"Original URI: {video_uri}") + + # Convert Google URI to LiteLLM proxy URI + # Example: files/abc123 -> /gemini/v1beta/files/abc123:download?alt=media + if video_uri.startswith("files/"): + download_path = f"{video_uri}:download?alt=media" + else: + download_path = video_uri + + litellm_download_url = f"{self.base_url}/{download_path}" + print(f"Download URL: {litellm_download_url}") + + try: + # Download with streaming and redirect handling + response = requests.get( + litellm_download_url, + headers=self.headers, + stream=True, + allow_redirects=True, # Handle redirects automatically + ) + response.raise_for_status() + + # Save video file + with open(output_filename, "wb") as f: + downloaded_size = 0 + for chunk in response.iter_content(chunk_size=8192): + if chunk: + f.write(chunk) + downloaded_size += len(chunk) + + # Progress indicator for large files + if downloaded_size % (1024 * 1024) == 0: # Every MB + print( + f"šŸ“¦ Downloaded {downloaded_size / (1024*1024):.1f} MB..." + ) + + # Verify file was created and has content + if os.path.exists(output_filename): + file_size = os.path.getsize(output_filename) + if file_size > 0: + print(f"āœ… Video downloaded successfully!") + print(f"šŸ“ Saved as: {output_filename}") + print(f"šŸ“ File size: {file_size / (1024*1024):.2f} MB") + return True + else: + print("āŒ Downloaded file is empty") + os.remove(output_filename) + return False + else: + print("āŒ File was not created") + return False + + except requests.RequestException as e: + print(f"āŒ Download failed: {e}") + if hasattr(e, "response") and e.response is not None: + print(f"Status code: {e.response.status_code}") + print(f"Response headers: {dict(e.response.headers)}") + return False + + def generate_and_download(self, prompt: str, output_filename: str = None) -> bool: + """ + Complete workflow: generate video and download it. + + Args: + prompt: Text description for video generation + output_filename: Output filename (auto-generated if None) + + Returns: + True if successful, False otherwise + """ + # Auto-generate filename if not provided + if output_filename is None: + timestamp = int(time.time()) + safe_prompt = "".join( + c for c in prompt[:30] if c.isalnum() or c in (" ", "-", "_") + ).rstrip() + output_filename = ( + f"veo_video_{safe_prompt.replace(' ', '_')}_{timestamp}.mp4" + ) + + print("=" * 60) + print("šŸŽ¬ VEO VIDEO GENERATION WORKFLOW") + print("=" * 60) + + # Step 1: Generate video + operation_name = self.generate_video(prompt) + if not operation_name: + return False + + # Step 2: Wait for completion + video_uri = self.wait_for_completion(operation_name) + if not video_uri: + return False + + # Step 3: Download video + success = self.download_video(video_uri, output_filename) + + if success: + print("=" * 60) + print("šŸŽ‰ SUCCESS! Video generation complete!") + print(f"šŸ“ Video saved as: {output_filename}") + print("=" * 60) + else: + print("=" * 60) + print("āŒ FAILED! Video generation or download failed") + print("=" * 60) + + return success + + +def main(): + """ + Example usage of the VeoVideoGenerator. + + Configure these environment variables: + - LITELLM_BASE_URL: Your LiteLLM proxy URL (default: http://localhost:4000/gemini/v1beta) + - LITELLM_API_KEY: Your LiteLLM API key (default: sk-1234) + """ + + # Configuration from environment or defaults + base_url = os.getenv("LITELLM_BASE_URL", "http://localhost:4000/gemini/v1beta") + api_key = os.getenv("LITELLM_API_KEY", "sk-1234") + + print("šŸš€ Starting Veo Video Generation Example") + print(f"šŸ“” Using LiteLLM proxy at: {base_url}") + + # Initialize generator + generator = VeoVideoGenerator(base_url=base_url, api_key=api_key) + + # Example prompts - try different ones! + example_prompts = [ + "A cat playing with a ball of yarn in a sunny garden", + "Ocean waves crashing against rocky cliffs at sunset", + "A bustling city street with people walking and cars passing by", + "A peaceful forest with sunlight filtering through the trees", + ] + + # Use first example or get from user + prompt = example_prompts[0] + print(f"šŸŽ¬ Using prompt: '{prompt}'") + + # Generate and download video + success = generator.generate_and_download(prompt) + + if success: + print("\nāœ… Example completed successfully!") + print("šŸ’” Try modifying the prompt in the script for different videos!") + else: + print("\nāŒ Example failed!") + print("šŸ”§ Check your LiteLLM proxy configuration and Google AI Studio API key") + + # Troubleshooting tips + print("\nšŸ” Troubleshooting:") + print("1. Ensure LiteLLM proxy is running with Google AI Studio pass-through") + print("2. Verify your Google AI Studio API key has Veo access") + print("3. Check that your prompt meets Veo's content guidelines") + print("4. Review the LiteLLM proxy logs for detailed error information") + + +if __name__ == "__main__": + main()