From aa82f490bdd7951e9c969e318f4c68f9ac282c55 Mon Sep 17 00:00:00 2001 From: Jeffrey Aven Date: Wed, 30 Oct 2024 18:50:44 +1100 Subject: [PATCH] added anthropic --- .github/workflows/build-docs.yaml | 2 +- README.md | 2 + ci-scripts/get-providers-to-deploy.js | 1 + docs/anthropic-docs/index.md | 87 ++++++++++++++++++ .../messages/claude_35_chat/index.md | 43 +++++++++ .../providers/anthropic/messages/index.md | 48 ++++++++++ .../anthropic/messages/message/index.md | 44 +++++++++ .../stackql-provider-registry.mdx | 20 ++++ package.json | 2 + scripts/docgen/provider_data.py | 22 +++++ sidebars.js | 11 ++- src/configs/providers.ts | 1 + static/img/providers/anthropic/anthropic.png | Bin 0 -> 1134 bytes ...ckql-anthropic-provider-featured-image.png | Bin 0 -> 36153 bytes 14 files changed, 277 insertions(+), 6 deletions(-) create mode 100644 docs/anthropic-docs/index.md create mode 100644 docs/anthropic-docs/providers/anthropic/messages/claude_35_chat/index.md create mode 100644 docs/anthropic-docs/providers/anthropic/messages/index.md create mode 100644 docs/anthropic-docs/providers/anthropic/messages/message/index.md create mode 100644 docs/anthropic-docs/stackql-provider-registry.mdx create mode 100644 static/img/providers/anthropic/anthropic.png create mode 100644 static/img/providers/anthropic/stackql-anthropic-provider-featured-image.png diff --git a/.github/workflows/build-docs.yaml b/.github/workflows/build-docs.yaml index 9f43c6127e..534ee554f5 100644 --- a/.github/workflows/build-docs.yaml +++ b/.github/workflows/build-docs.yaml @@ -78,7 +78,7 @@ jobs: if [ $PROVIDER == "root" ]; then echo "adding vanity url redirects to _redirects file.." touch ./build/_redirects - array=( aws azure azure-extras azure-isv azure-stack digitalocean firebase github openai google googleadmin k8s linode netlify okta sumologic vercel godaddy pagerduty homebrew datadog ) + array=( aws azure azure-extras azure-isv azure-stack digitalocean firebase github openai anthropic google googleadmin k8s linode netlify okta sumologic vercel godaddy pagerduty homebrew datadog ) for i in "${array[@]}" do echo "adding redirects for $i" diff --git a/README.md b/README.md index 5c0ebb9157..99a0a8b238 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ This repository contains documentation for StackQL providers, which is published | Netlify Deploy Azure ISV | [![Netlify Status](https://api.netlify.com/api/v1/badges/35fc840c-0494-462f-9b3f-cbd3418a3c78/deploy-status)](https://app.netlify.com/sites/stackql-azure-isv-docs/deploys) | [azure-isv-docs.stackql.io](https://azure-isv-docs.stackql.io)
[azure-isv.stackql.io](https://azure-isv.stackql.io) | | Netlify Deploy Azure Stack | [![Netlify Status](https://api.netlify.com/api/v1/badges/53abcb20-0194-41dd-b466-4d933cfffcad/deploy-status)](https://app.netlify.com/sites/stackql-azure-stack-docs/deploys) | [azure-stack-docs.stackql.io](https://azure-stack-docs.stackql.io)
[azure-stack.stackql.io](https://azure-stack.stackql.io) | | Netlify Deploy OpenAI | [![Netlify Status](https://api.netlify.com/api/v1/badges/6df5743b-8c5d-4949-866e-eda4ca3f74d0/deploy-status)](https://app.netlify.com/sites/stackql-openai-docs/deploys) | [openai-docs.stackql.io](https://openai-docs.stackql.io)
[openai.stackql.io](https://openai.stackql.io) | +| Netlify Deploy Anthropic | [![Netlify Status](https://api.netlify.com/api/v1/badges/114c5a2a-9b76-4941-a0e8-3669ee7d2016/deploy-status)](https://app.netlify.com/sites/stackql-anthropic-docs/deploys) | [anthropic-docs.stackql.io](https://anthropic-docs.stackql.io)
[anthropic.stackql.io](https://anthropic.stackql.io) | + ## Adding Docs for a New Provider diff --git a/ci-scripts/get-providers-to-deploy.js b/ci-scripts/get-providers-to-deploy.js index 5df08add1d..620b09508a 100644 --- a/ci-scripts/get-providers-to-deploy.js +++ b/ci-scripts/get-providers-to-deploy.js @@ -16,6 +16,7 @@ const allProviders = [ 'firebase', 'github', 'openai', + 'anthropic', 'google', 'googleadmin', 'k8s', diff --git a/docs/anthropic-docs/index.md b/docs/anthropic-docs/index.md new file mode 100644 index 0000000000..8a53b5976e --- /dev/null +++ b/docs/anthropic-docs/index.md @@ -0,0 +1,87 @@ +--- +title: anthropic +hide_title: false +hide_table_of_contents: false +keywords: + - anthropic + - stackql + - infrastructure-as-code + - configuration-as-data + - cloud inventory +description: Query, deploy, and manage Anthropic resources using SQL. +custom_edit_url: null +image: /img/providers/anthropic/stackql-anthropic-provider-featured-image.png +id: anthropic-doc +slug: /providers/anthropic +--- + +import CopyableCode from '@site/src/components/CopyableCode/CopyableCode'; + +AI models including Claude for advanced language understanding and generation. + +:::info Provider Summary (v24.10.00267) + +
+
+total services: 1
+total methods: 2
+
+
+total resources: 2
+total selectable resources: 2
+
+
+ +::: + +See also: +[[` SHOW `]](https://stackql.io/docs/language-spec/show) [[` DESCRIBE `]](https://stackql.io/docs/language-spec/describe) [[` REGISTRY `]](https://stackql.io/docs/language-spec/registry) +* * * + +## Installation + +To pull the latest version of the `anthropic` provider, run the following command: + +```bash +REGISTRY PULL anthropic; +``` +> To view previous provider versions or to pull a specific provider version, see [here](https://stackql.io/docs/language-spec/registry). + +## Authentication + +The following system environment variables are used for authentication by default: + +- - Anthropic API key (see How to Create an Anthropic API Key) + +These variables are sourced at runtime (from the local machine or as CI variables/secrets). + +
+ +Using different environment variables + +To use different environment variables (instead of the defaults), use the `--auth` flag of the `stackql` program. For example: + +```bash + +AUTH='{ "anthropic": { "type": "bearer", "credentialsenvvar": "MY_ANTHROPIC_API_KEY" }}' +stackql shell --auth="${AUTH}" + +``` +or using PowerShell: + +```powershell + +$Auth = "{ 'anthropic': { 'type': 'bearer', 'credentialsenvvar': 'MY_ANTHROPIC_API_KEY' }}" +stackql.exe shell --auth=$Auth + +``` +
+ +## Services +
+ +
+
+
diff --git a/docs/anthropic-docs/providers/anthropic/messages/claude_35_chat/index.md b/docs/anthropic-docs/providers/anthropic/messages/claude_35_chat/index.md new file mode 100644 index 0000000000..2228f5e855 --- /dev/null +++ b/docs/anthropic-docs/providers/anthropic/messages/claude_35_chat/index.md @@ -0,0 +1,43 @@ +--- +title: claude_35_chat +hide_title: false +hide_table_of_contents: false +keywords: + - claude_35_chat + - messages + - anthropic + - stackql + - infrastructure-as-code + - configuration-as-data + - cloud inventory +description: Query, deploy, and manage Anthropic resources using SQL. +custom_edit_url: null +image: /img/providers/anthropic/stackql-anthropic-provider-featured-image.png +--- + +import CopyableCode from '@site/src/components/CopyableCode/CopyableCode'; + + + + +## Overview + + + + +
Nameclaude_35_chat
TypeResource
Id
+ +## Fields +> This resource is a view. For the view definition, please refer to the provider spec in the [stackql-provider-registry](https://github.com/stackql/stackql-provider-registry/blob/dev/providers/src/anthropic/v00.00.00000/services/messages.yaml), located under `components -> x-stackQL-resources -> claude_35_chat`. + +| Name | Datatype | +|:-----|:---------| +| || +| | `text` | +| | `text` | +| | `text` | +| | `text` | +| | `text` | +| | `text` | +## Methods +No additional methods available for this resource diff --git a/docs/anthropic-docs/providers/anthropic/messages/index.md b/docs/anthropic-docs/providers/anthropic/messages/index.md new file mode 100644 index 0000000000..c4356c4179 --- /dev/null +++ b/docs/anthropic-docs/providers/anthropic/messages/index.md @@ -0,0 +1,48 @@ +--- +title: messages +hide_title: false +hide_table_of_contents: false +keywords: + - messages + - anthropic + - stackql + - infrastructure-as-code + - configuration-as-data + - cloud inventory +description: Query, deploy, and manage Anthropic resources using SQL. +custom_edit_url: null +image: /img/providers/anthropic/stackql-anthropic-provider-featured-image.png +--- + +Given A List Of Messages Comprising A Conversation, The Model Will Return A Response. + +:::info Service Summary + +
+
+total resources: 2
+total selectable resources: 2
+total methods: 2
+
+
+ +::: + +## Overview + + + + + + +
Nameanthropic.messages
TypeService
TitleAnthropic API - Messages
DescriptionGiven A List Of Messages Comprising A Conversation, The Model Will Return A Response.
Idmessages:v24.10.00267
+ +## Resources +
+ + +
diff --git a/docs/anthropic-docs/providers/anthropic/messages/message/index.md b/docs/anthropic-docs/providers/anthropic/messages/message/index.md new file mode 100644 index 0000000000..638d40156f --- /dev/null +++ b/docs/anthropic-docs/providers/anthropic/messages/message/index.md @@ -0,0 +1,44 @@ +--- +title: message +hide_title: false +hide_table_of_contents: false +keywords: + - message + - messages + - anthropic + - stackql + - infrastructure-as-code + - configuration-as-data + - cloud inventory +description: Query, deploy, and manage Anthropic resources using SQL. +custom_edit_url: null +image: /img/providers/anthropic/stackql-anthropic-provider-featured-image.png +--- + +import CopyableCode from '@site/src/components/CopyableCode/CopyableCode'; + + + + +## Overview + + + + +
Namemessage
TypeResource
Id
+ +## Fields +| Name | Datatype | Description | +|:-----|:---------|:------------| +| | `string` | Unique object identifier. | +| | `array` | The generated content blocks by the model. | +| | `string` | The model that handled the request. | +| | `string` | The conversational role of the generated message. | +| | `string` | The reason the model stopped generating. | +| | `string` | The stop sequence that caused the model to stop, if applicable. | +| | `string` | Object type, which is always "message" for Messages API. | +| | `object` | Information about token usage and rate limits. | +## Methods +| Name | Accessible by | Required Params | +|:-----|:--------------|:----------------| +| | `SELECT` | | diff --git a/docs/anthropic-docs/stackql-provider-registry.mdx b/docs/anthropic-docs/stackql-provider-registry.mdx new file mode 100644 index 0000000000..9733361889 --- /dev/null +++ b/docs/anthropic-docs/stackql-provider-registry.mdx @@ -0,0 +1,20 @@ +--- +title: StackQL Provider Registry +hide_title: true +hide_table_of_contents: true +keywords: + - stackql + - infrastructure-as-code + - configuration-as-data + - cloud inventory +description: Query and Deploy Cloud Infrastructure and Resources using SQL +custom_edit_url: null +image: https://storage.googleapis.com/stackql-web-assets/blog/stackql-blog-post-featured-image.png +slug: / +--- +import RegistryPage from '@site/src/shared/shared-stackql-provider-registry.mdx'; + + + +--- + diff --git a/package.json b/package.json index 5dc14b4baf..cca96aec76 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "start:firebase": "export REGISTRY=firebase && docusaurus start", "start:github": "export REGISTRY=github && docusaurus start", "start:openai": "export REGISTRY=openai && docusaurus start", + "start:anthropic": "export REGISTRY=anthropic && docusaurus start", "start:google": "export REGISTRY=google && docusaurus start", "start:k8s": "export REGISTRY=k8s && docusaurus start", "start:netlify": "export REGISTRY=netlify && docusaurus start", @@ -34,6 +35,7 @@ "build:firebase": "export REGISTRY=firebase && docusaurus build", "build:github": "export REGISTRY=github && docusaurus build", "build:openai": "export REGISTRY=openai && docusaurus build", + "build:anthropic": "export REGISTRY=anthropic && docusaurus build", "build:google": "export REGISTRY=google && docusaurus build", "build:k8s": "export REGISTRY=k8s && docusaurus build", "build:netlify": "export REGISTRY=netlify && docusaurus build", diff --git a/scripts/docgen/provider_data.py b/scripts/docgen/provider_data.py index bd98635210..c6e8b9b3eb 100644 --- a/scripts/docgen/provider_data.py +++ b/scripts/docgen/provider_data.py @@ -131,6 +131,11 @@ """ provider_data = { + 'anthropic': { + 'meta_description': 'Query, deploy, and manage Anthropic resources using SQL.', + 'description': 'AI models including Claude for advanced language understanding and generation.', + 'image': '/img/providers/anthropic/stackql-anthropic-provider-featured-image.png' + }, 'openai': { 'meta_description': 'Query, deploy, and manage OpenAI and ChatGPT resources using SQL.', 'description': 'AI models for natural language processing and content generation.', @@ -240,6 +245,23 @@ auth_blocks = { # +# Anthropic +# +'anthropic': { + 'custom': False, + 'variables': """ +- - Anthropic API key (see How to Create an Anthropic API Key) + """, + 'linux': """ +AUTH='{ "anthropic": { "type": "bearer", "credentialsenvvar": "MY_ANTHROPIC_API_KEY" }}' +stackql shell --auth="${AUTH}" + """, + 'windows': """ +$Auth = "{ 'anthropic': { 'type': 'bearer', 'credentialsenvvar': 'MY_ANTHROPIC_API_KEY' }}" +stackql.exe shell --auth=$Auth + """, +}, +# # OpenAI # 'openai': { diff --git a/sidebars.js b/sidebars.js index 30d8cfdcce..b53ae41ac6 100644 --- a/sidebars.js +++ b/sidebars.js @@ -14,19 +14,17 @@ const isLocal = process.env.NODE_ENV=== 'development' const registry = process.env.REGISTRY || 'root' const providers = [ + {name: 'aws'}, + {name: 'azure'}, {name: 'google'}, {name: 'googleadmin'}, - {name: 'azure'}, - {name: 'aws'}, {name: 'digitalocean'}, {name: 'github'}, {name: 'openai'}, + {name: 'anthropic'}, {name: 'linode'}, {name: 'netlify'}, {name: 'okta'}, - {name: 'azure_extras'}, - {name: 'azure_isv'}, - {name: 'azure_stack'}, {name: 'sumologic'}, {name: 'firebase'}, {name: 'k8s'}, @@ -35,6 +33,9 @@ const providers = [ {name: 'datadog'}, {name: 'godaddy'}, {name: 'homebrew'}, + {name: 'azure_extras'}, + {name: 'azure_isv'}, + {name: 'azure_stack'}, ] const getProviderSiteUrl = (name) =>{ diff --git a/src/configs/providers.ts b/src/configs/providers.ts index bf4c42d7bd..e22d4a4457 100644 --- a/src/configs/providers.ts +++ b/src/configs/providers.ts @@ -8,6 +8,7 @@ export const providers = [ {name: 'digitalocean', description: 'Cloud computing services and Infrastructure as a Service (IaaS).', title: 'Digital Ocean'}, {name: 'github', description: 'Web-based version-control and collaboration.', title: 'GitHub'}, {name: 'openai', description: 'AI models and services by OpenAI.', title: 'OpenAI'}, + {name: 'anthropic', description: 'AI language models and services powered by Claude.', title: 'Anthropic'}, {name: 'linode', description: 'Cloud computing services by Akamai.', title: 'Linode'}, {name: 'netlify', description: 'Web development and content distribution platform.', title: 'Netlify'}, {name: 'okta', description: 'Authentication and authorization services.', title: 'Okta'}, diff --git a/static/img/providers/anthropic/anthropic.png b/static/img/providers/anthropic/anthropic.png new file mode 100644 index 0000000000000000000000000000000000000000..68c00c2af1db2e54b432c8e8a918f4a15fa62d0c GIT binary patch literal 1134 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 l{C{uq|AL!5Hhkxj2>d9^0fe literal 0 HcmV?d00001