gitextract__7o1qj1m/ ├── .dockerignore ├── .git-blame-ignore-revs ├── .gitattributes ├── .github/ │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.cn.md │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.yml │ ├── README.cn.md │ ├── README.jp.md │ ├── SECURITY.md │ ├── SUPPORT.md │ ├── cn.CODE_OF_CONDUCT.md │ ├── pull_request_template.md │ └── workflows/ │ ├── check_code_formatting.yml │ ├── docker_publish.yml │ ├── link-checker.yml │ ├── npm_publish.yml │ ├── run_tests.yml │ └── triage-label.yml ├── .gitignore ├── .husky/ │ ├── pre-commit │ └── pre-push ├── .prettierignore ├── .prettierrc ├── .vscode/ │ ├── launch.json │ └── tasks.json ├── CLAUDE.md ├── Dockerfile ├── LICENSE ├── README.md ├── conf.example.json ├── cookbook/ │ ├── README.md │ ├── getting-started/ │ │ ├── automatic-retries-on-failures.md │ │ ├── enable-cache.md │ │ ├── fallback-from-openai-to-azure.ipynb │ │ ├── fallback-from-stable-diffusion-to-dall-e.ipynb │ │ ├── gentle-introduction-to-portkey-gateway.ipynb │ │ ├── image-generation.ipynb │ │ ├── resilient-loadbalancing-with-failure-mitigating-fallbacks.md │ │ └── writing-your-first-gateway-config.md │ ├── guardrails/ │ │ └── Langchain Chatbot with PII Guardrails.ipynb │ ├── integrations/ │ │ ├── Instructor_with_Portkey.ipynb │ │ ├── Mistral.ipynb │ │ ├── Phidata_with_ Perplexity.ipynb │ │ ├── Phidata_with_Portkey.ipynb │ │ ├── ReAct Agents Portkey.ipynb │ │ ├── Sutra_with_Portkey.ipynb │ │ ├── Tool_Use_with_Portkey.ipynb │ │ ├── anyscale.md │ │ ├── deepinfra.ipynb │ │ ├── groq.ipynb │ │ ├── langchain.ipynb │ │ ├── mistral.md │ │ ├── mixtral-8x22b.ipynb │ │ ├── ncompass.ipynb │ │ ├── openai.ipynb │ │ ├── segmind.ipynb │ │ ├── vercel/ │ │ │ ├── app/ │ │ │ │ ├── api/ │ │ │ │ │ └── chat/ │ │ │ │ │ └── route.ts │ │ │ │ ├── examples/ │ │ │ │ │ ├── basic-chatbot/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── generate-text/ │ │ │ │ │ │ ├── action.ts │ │ │ │ │ │ ├── conditional-routing.ts │ │ │ │ │ │ ├── fallback.ts │ │ │ │ │ │ ├── guardrails.ts │ │ │ │ │ │ ├── load-balance.ts │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── generate-ui-streamui/ │ │ │ │ │ │ ├── action.tsx │ │ │ │ │ │ ├── joke-component.tsx │ │ │ │ │ │ ├── joke.ts │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── stream-text/ │ │ │ │ │ │ ├── action.ts │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── tools/ │ │ │ │ │ └── basic/ │ │ │ │ │ ├── action.ts │ │ │ │ │ └── page.tsx │ │ │ │ ├── globals.css │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── components/ │ │ │ │ ├── back-button.tsx │ │ │ │ ├── link.tsx │ │ │ │ └── ui/ │ │ │ │ ├── button.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── input.tsx │ │ │ │ └── label.tsx │ │ │ ├── components.json │ │ │ ├── core/ │ │ │ │ ├── generate-text.ts │ │ │ │ ├── stream-text.ts │ │ │ │ └── tools.ts │ │ │ ├── lib/ │ │ │ │ └── utils.ts │ │ │ ├── next-env.d.ts │ │ │ ├── next.config.mjs │ │ │ ├── package.json │ │ │ ├── postcss.config.js │ │ │ ├── readme.md │ │ │ ├── tailwind.config.ts │ │ │ └── tsconfig.json │ │ └── vercel-ai.md │ ├── monitoring-agents/ │ │ ├── Autogen_with_Telemetry.ipynb │ │ ├── ControlFlow_with_Telemetry.ipynb │ │ ├── CrewAI_with_Telemetry.ipynb │ │ └── Llama_Agents_with_Telemetry.ipynb │ ├── providers/ │ │ ├── aibadgr.ipynb │ │ ├── anthropic.ipynb │ │ ├── deepinfra.ipynb │ │ ├── groq.ipynb │ │ ├── mistral.ipynb │ │ ├── ncompass.ipynb │ │ ├── nvidia.ipynb │ │ ├── openai.ipynb │ │ ├── segmind.ipynb │ │ └── together.ipynb │ └── use-cases/ │ ├── Claude_3_5_Sonnet_vs_GPT_4o_Portkey.ipynb │ ├── Claude_3_5_Sonnet_with_Portkey.ipynb │ ├── Contextual Embeddings Guide Anthropic, Cohere, Voyage.ipynb │ ├── Creating_Artifacts_with_GPT_4o_.ipynb │ ├── GPT-4o & Portkey/ │ │ ├── Audio Processing - GPT-4o & Portkey.ipynb │ │ ├── GPT-4o vs Claude-3-Opus vs Gemini-1.5-Pro - Portkey.ipynb │ │ ├── Image Processing - GPT-4o & Portkey.ipynb │ │ ├── Intro_to_GPT4o_Portkey.ipynb │ │ └── Video Processing - GPT-4o & Portkey.ipynb │ ├── LMSYS Series/ │ │ ├── Comparision_of_Top_6_LMSYS_Vison_models_using_Portkey.ipynb │ │ ├── README.md │ │ └── comparing-top10-LMSYS-models-with-Portkey.ipynb │ ├── Nemotron_GPT_Finetuning_Portkey.ipynb │ ├── Testing_Top_Vision_Models.ipynb │ ├── llama-3-on-groq.ipynb │ ├── run-gateway-on-prompts-from-langchain-hub.md │ ├── smart-fallback-with-model-optimized-prompts.md │ ├── supabase-pgvector-and-portkey.md │ └── use-openai-sdk-with-portkey-prompt-templates.md ├── deployment.yaml ├── docker-compose.yaml ├── docs/ │ ├── deploy-on-replit.md │ └── installation-deployments.md ├── eslint.config.js ├── initializeSettings.ts ├── jest.config.js ├── package.json ├── patches/ │ ├── @types+async-retry+1.4.5.patch │ └── async-retry+1.3.3.patch ├── plugins/ │ ├── Contributing.md │ ├── README.md │ ├── acuvity/ │ │ ├── helper.test.ts │ │ ├── helper.ts │ │ ├── manifest.json │ │ ├── model.ts │ │ ├── scan.test.ts │ │ └── scan.ts │ ├── aporia/ │ │ ├── aporia.test.ts │ │ ├── manifest.json │ │ └── validateProject.ts │ ├── azure/ │ │ ├── azure.test.ts │ │ ├── contentSafety.ts │ │ ├── manifest.json │ │ ├── pii.ts │ │ ├── protectedMaterial.ts │ │ ├── shieldPrompt.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── bedrock/ │ │ ├── bedrock.test.ts │ │ ├── index.ts │ │ ├── manifest.json │ │ ├── type.ts │ │ └── util.ts │ ├── build.ts │ ├── crowdstrike-aidr/ │ │ ├── aidr.test.ts │ │ ├── guardChatCompletion.ts │ │ ├── manifest.json │ │ └── version.ts │ ├── default/ │ │ ├── addPrefix.ts │ │ ├── alllowercase.ts │ │ ├── allowedRequestTypes.ts │ │ ├── alluppercase.ts │ │ ├── characterCount.ts │ │ ├── contains.ts │ │ ├── containsCode.ts │ │ ├── default.test.ts │ │ ├── endsWith.ts │ │ ├── jsonKeys.ts │ │ ├── jsonSchema.ts │ │ ├── jwt.ts │ │ ├── log.ts │ │ ├── manifest.json │ │ ├── modelRules.ts │ │ ├── modelWhitelist.ts │ │ ├── notNull.ts │ │ ├── regexMatch.ts │ │ ├── regexReplace.ts │ │ ├── requiredMetadataKeys.ts │ │ ├── sentenceCount.ts │ │ ├── validUrls.ts │ │ ├── webhook.ts │ │ └── wordCount.ts │ ├── exa/ │ │ ├── exa.test.ts │ │ ├── manifest.json │ │ └── online.ts │ ├── f5-guardrails/ │ │ ├── manifest.json │ │ ├── scan.test.ts │ │ └── scan.ts │ ├── index.ts │ ├── javelin/ │ │ ├── guardrails.ts │ │ ├── javelin.test.ts │ │ └── manifest.json │ ├── lasso/ │ │ ├── README.md │ │ ├── classify.ts │ │ ├── lasso.test.ts │ │ └── manifest.json │ ├── mistral/ │ │ ├── index.ts │ │ ├── manifest.json │ │ └── mistral.test.ts │ ├── pangea/ │ │ ├── manifest.json │ │ ├── pangea.test.ts │ │ ├── pii.ts │ │ ├── textGuard.ts │ │ └── version.ts │ ├── panw-prisma-airs/ │ │ ├── intercept.ts │ │ ├── manifest.json │ │ └── panw.airs.test.ts │ ├── patronus/ │ │ ├── custom.ts │ │ ├── globals.ts │ │ ├── isConcise.ts │ │ ├── isHelpful.ts │ │ ├── isPolite.ts │ │ ├── manifest.json │ │ ├── noApologies.ts │ │ ├── noGenderBias.ts │ │ ├── noRacialBias.ts │ │ ├── patronus.test.ts │ │ ├── phi.ts │ │ ├── pii.ts │ │ ├── retrievalAnswerRelevance.ts │ │ ├── retrievalHallucination.ts │ │ └── toxicity.ts │ ├── pillar/ │ │ ├── globals.ts │ │ ├── manifest.json │ │ ├── pillar.test.ts │ │ ├── scanPrompt.ts │ │ └── scanResponse.ts │ ├── portkey/ │ │ ├── gibberish.ts │ │ ├── globals.ts │ │ ├── language.ts │ │ ├── manifest.json │ │ ├── moderateContent.ts │ │ ├── pii.ts │ │ └── portkey.test.ts │ ├── promptfoo/ │ │ ├── globals.ts │ │ ├── guard.ts │ │ ├── harm.ts │ │ ├── manifest.json │ │ ├── pii.ts │ │ ├── promptfoo.test.ts │ │ └── types.ts │ ├── promptsecurity/ │ │ ├── manifest.json │ │ ├── promptsecurity.test.ts │ │ ├── protectPrompt.ts │ │ ├── protectResponse.ts │ │ └── shared.ts │ ├── qualifire/ │ │ ├── contentModeration.ts │ │ ├── globals.ts │ │ ├── grounding.ts │ │ ├── hallucinations.ts │ │ ├── manifest.json │ │ ├── pii.ts │ │ ├── policy.ts │ │ ├── promptInjections.ts │ │ ├── qualifire.test.ts │ │ └── toolUseQuality.ts │ ├── sydelabs/ │ │ ├── manifest.json │ │ ├── sydeguard.ts │ │ └── sydelabs.test.ts │ ├── types.ts │ ├── utils.test.ts │ ├── utils.ts │ └── walledai/ │ ├── manifest.json │ ├── walledai.test.ts │ └── walledprotect.ts ├── rollup.config.js ├── src/ │ ├── apm/ │ │ └── index.ts │ ├── data/ │ │ ├── models.json │ │ └── providers.json │ ├── errors/ │ │ ├── GatewayError.ts │ │ └── RouterError.ts │ ├── globals.ts │ ├── handlers/ │ │ ├── batchesHandler.ts │ │ ├── chatCompletionsHandler.ts │ │ ├── completionsHandler.ts │ │ ├── createSpeechHandler.ts │ │ ├── createTranscriptionHandler.ts │ │ ├── createTranslationHandler.ts │ │ ├── embeddingsHandler.ts │ │ ├── filesHandler.ts │ │ ├── finetuneHandler.ts │ │ ├── handlerUtils.ts │ │ ├── imageEditsHandler.ts │ │ ├── imageGenerationsHandler.ts │ │ ├── messagesCountTokensHandler.ts │ │ ├── messagesHandler.ts │ │ ├── modelResponsesHandler.ts │ │ ├── modelsHandler.ts │ │ ├── proxyHandler.ts │ │ ├── realtimeHandler.ts │ │ ├── realtimeHandlerNode.ts │ │ ├── responseHandlers.ts │ │ ├── retryHandler.ts │ │ ├── services/ │ │ │ ├── cacheService.ts │ │ │ ├── hooksService.ts │ │ │ ├── logsService.ts │ │ │ ├── preRequestValidatorService.ts │ │ │ ├── providerContext.ts │ │ │ ├── requestContext.ts │ │ │ └── responseService.ts │ │ ├── streamHandler.ts │ │ ├── streamHandlerUtils.ts │ │ └── websocketUtils.ts │ ├── index.ts │ ├── middlewares/ │ │ ├── cache/ │ │ │ └── index.ts │ │ ├── hooks/ │ │ │ ├── globals.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── log/ │ │ │ └── index.ts │ │ └── requestValidator/ │ │ ├── index.ts │ │ └── schema/ │ │ └── config.ts │ ├── providers/ │ │ ├── 302ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── ai21/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── embed.ts │ │ │ └── index.ts │ │ ├── aibadgr/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── anthropic/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── index.ts │ │ │ ├── messages.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── anthropic-base/ │ │ │ ├── constants.ts │ │ │ ├── messages.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ └── streamGenerator.ts │ │ ├── anyscale/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── embed.ts │ │ │ └── index.ts │ │ ├── azure-ai-inference/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── embed.ts │ │ │ ├── getBatchOutput.ts │ │ │ ├── index.ts │ │ │ ├── messages.ts │ │ │ └── utils.ts │ │ ├── azure-openai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── createBatch.ts │ │ │ ├── createFinetune.ts │ │ │ ├── createSpeech.ts │ │ │ ├── createTranscription.ts │ │ │ ├── createTranslation.ts │ │ │ ├── embed.ts │ │ │ ├── getBatchOutput.ts │ │ │ ├── imageGenerate.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ ├── bedrock/ │ │ │ ├── api.ts │ │ │ ├── cancelBatch.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── constants.ts │ │ │ ├── countTokens.ts │ │ │ ├── createBatch.ts │ │ │ ├── createFinetune.ts │ │ │ ├── deleteFile.ts │ │ │ ├── embed.ts │ │ │ ├── getBatchOutput.ts │ │ │ ├── imageGenerate.ts │ │ │ ├── index.ts │ │ │ ├── listBatches.ts │ │ │ ├── listFinetunes.ts │ │ │ ├── listfiles.ts │ │ │ ├── messages.ts │ │ │ ├── retrieveBatch.ts │ │ │ ├── retrieveFile.ts │ │ │ ├── retrieveFileContent.ts │ │ │ ├── retrieveFinetune.ts │ │ │ ├── types.ts │ │ │ ├── uploadFile.ts │ │ │ ├── uploadFileUtils.ts │ │ │ ├── utils/ │ │ │ │ └── messagesUtils.ts │ │ │ └── utils.ts │ │ ├── bytez/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── cerebras/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── cohere/ │ │ │ ├── api.ts │ │ │ ├── cancelBatch.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── createBatch.ts │ │ │ ├── deleteFile.ts │ │ │ ├── embed.ts │ │ │ ├── getBatchOutput.ts │ │ │ ├── getFiles.ts │ │ │ ├── index.ts │ │ │ ├── listBatches.ts │ │ │ ├── retrieveBatch.ts │ │ │ ├── types.ts │ │ │ ├── uploadFile.ts │ │ │ └── utils.ts │ │ ├── cometapi/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── embed.ts │ │ │ └── index.ts │ │ ├── cortex/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── dashscope/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── deepbricks/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── imageGenerate.ts │ │ │ └── index.ts │ │ ├── deepinfra/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── deepseek/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── featherless-ai/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── fireworks-ai/ │ │ │ ├── api.ts │ │ │ ├── cancelFinetune.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── createFinetune.ts │ │ │ ├── embed.ts │ │ │ ├── imageGenerate.ts │ │ │ ├── index.ts │ │ │ ├── listFiles.ts │ │ │ ├── listFinetune.ts │ │ │ ├── retrieveFile.ts │ │ │ ├── types.ts │ │ │ ├── uploadFile.ts │ │ │ └── utils.ts │ │ ├── google/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── embed.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── google-vertex-ai/ │ │ │ ├── api.ts │ │ │ ├── cancelBatch.ts │ │ │ ├── chatComplete.ts │ │ │ ├── createBatch.ts │ │ │ ├── createFinetune.ts │ │ │ ├── embed.ts │ │ │ ├── getBatchOutput.ts │ │ │ ├── imageGenerate.ts │ │ │ ├── index.ts │ │ │ ├── listBatches.ts │ │ │ ├── listFiles.ts │ │ │ ├── listFinetunes.ts │ │ │ ├── messages.ts │ │ │ ├── messagesCountTokens.ts │ │ │ ├── retrieveBatch.ts │ │ │ ├── retrieveFile.ts │ │ │ ├── retrieveFileContent.ts │ │ │ ├── retrieveFinetune.ts │ │ │ ├── transformGenerationConfig.ts │ │ │ ├── types.ts │ │ │ ├── uploadFile.ts │ │ │ ├── utils.test.ts │ │ │ └── utils.ts │ │ ├── groq/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── huggingface/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── hyperbolic/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── imageGenerate.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── inference-net/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── iointelligence/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── jina/ │ │ │ ├── api.ts │ │ │ ├── embed.ts │ │ │ └── index.ts │ │ ├── kluster-ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── index.ts │ │ │ └── uploadFile.ts │ │ ├── krutrim/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── lambda/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── lemonfox-ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── createTranscription.ts │ │ │ ├── imageGenerate.ts │ │ │ └── index.ts │ │ ├── lepton/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── createTranscription.ts │ │ │ └── index.ts │ │ ├── lingyi/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── matterai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── meshy/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── milvus/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── mistral-ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── embed.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── modal/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── monsterapi/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── moonshot/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── ncompass/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── nebius/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── nextbit/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── nomic/ │ │ │ ├── api.ts │ │ │ ├── embed.ts │ │ │ └── index.ts │ │ ├── novita-ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ └── index.ts │ │ ├── nscale/ │ │ │ ├── api.ts │ │ │ ├── imageGenerate.ts │ │ │ └── index.ts │ │ ├── ollama/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── embed.ts │ │ │ └── index.ts │ │ ├── open-ai-base/ │ │ │ ├── constants.ts │ │ │ ├── createModelResponse.ts │ │ │ ├── helpers.ts │ │ │ └── index.ts │ │ ├── openai/ │ │ │ ├── api.ts │ │ │ ├── cancelBatch.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── createBatch.ts │ │ │ ├── createFinetune.ts │ │ │ ├── createSpeech.ts │ │ │ ├── createTranscription.ts │ │ │ ├── createTranslation.ts │ │ │ ├── deleteFile.ts │ │ │ ├── embed.ts │ │ │ ├── getBatchOutput.ts │ │ │ ├── imageGenerate.ts │ │ │ ├── index.ts │ │ │ ├── listBatches.ts │ │ │ ├── listFiles.ts │ │ │ ├── retrieveBatch.ts │ │ │ ├── retrieveFileContent.ts │ │ │ ├── uploadFile.ts │ │ │ └── utils.ts │ │ ├── openrouter/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ ├── oracle/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── index.ts │ │ │ ├── types/ │ │ │ │ ├── ChatDetails.ts │ │ │ │ └── GenericChatResponse.ts │ │ │ └── utils.ts │ │ ├── ovhcloud/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── palm/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── embed.ts │ │ │ └── index.ts │ │ ├── perplexity-ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── predibase/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── qdrant/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── recraft-ai/ │ │ │ ├── api.ts │ │ │ ├── imageGenerate.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ ├── reka-ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── replicate/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── sagemaker/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── sambanova/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ └── index.ts │ │ ├── segmind/ │ │ │ ├── api.ts │ │ │ ├── imageGenerate.ts │ │ │ └── index.ts │ │ ├── siliconflow/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── embed.ts │ │ │ ├── imageGenerate.ts │ │ │ └── index.ts │ │ ├── stability-ai/ │ │ │ ├── api.ts │ │ │ ├── constants.ts │ │ │ ├── imageGenerate.ts │ │ │ ├── imageGenerateV2.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ ├── together-ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── embed.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── tripo3d/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── triton/ │ │ │ ├── api.ts │ │ │ ├── complete.ts │ │ │ └── index.ts │ │ ├── types.ts │ │ ├── upstage/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── utils/ │ │ │ └── finishReasonMap.ts │ │ ├── utils.ts │ │ ├── voyage/ │ │ │ ├── api.ts │ │ │ ├── embed.ts │ │ │ └── index.ts │ │ ├── workers-ai/ │ │ │ ├── api.ts │ │ │ ├── chatComplete.ts │ │ │ ├── complete.ts │ │ │ ├── embed.ts │ │ │ ├── imageGenerate.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ ├── x-ai/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ ├── z-ai/ │ │ │ ├── api.ts │ │ │ └── index.ts │ │ └── zhipu/ │ │ ├── api.ts │ │ ├── chatComplete.ts │ │ ├── embed.ts │ │ └── index.ts │ ├── public/ │ │ └── index.html │ ├── services/ │ │ ├── conditionalRouter.ts │ │ ├── realtimeLlmEventParser.ts │ │ └── transformToProviderRequest.ts │ ├── shared/ │ │ ├── services/ │ │ │ └── cache/ │ │ │ ├── backends/ │ │ │ │ ├── cloudflareKV.ts │ │ │ │ ├── file.ts │ │ │ │ ├── memory.ts │ │ │ │ └── redis.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ └── rateLimiter.ts │ │ └── utils/ │ │ └── logger.ts │ ├── start-server.ts │ ├── tests/ │ │ ├── common.test.ts │ │ ├── resources/ │ │ │ ├── constants.ts │ │ │ ├── requestTemplates.ts │ │ │ ├── testVariables.ts │ │ │ └── utils.ts │ │ └── routeSpecificTestFunctions.ts/ │ │ └── chatCompletion.ts │ ├── types/ │ │ ├── MessagesRequest.ts │ │ ├── MessagesStreamResponse.ts │ │ ├── embedRequestBody.ts │ │ ├── inputList.ts │ │ ├── messagesResponse.ts │ │ ├── modelResponses.ts │ │ ├── requestBody.ts │ │ ├── responseBody.ts │ │ └── shared.ts │ ├── utils/ │ │ ├── CryptoUtils.ts │ │ ├── env.ts │ │ └── misc.ts │ └── utils.ts ├── start-test.js ├── tests/ │ ├── integration/ │ │ └── src/ │ │ └── handlers/ │ │ ├── .creds.example.json │ │ ├── requestBuilder.ts │ │ ├── test.txt │ │ └── tryPost.test.ts │ └── unit/ │ └── src/ │ └── handlers/ │ └── services/ │ ├── benchmark.ts │ ├── cacheService.test.ts │ ├── hooksService.test.ts │ ├── logsService.test.ts │ ├── preRequestValidatorService.test.ts │ ├── providerContext.test.ts │ ├── requestContext.test.ts │ └── responseService.test.ts ├── tsconfig.json └── wrangler.toml