Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add AnthropicStructureConfig using VoyageAi #702

Merged
merged 34 commits into from
Mar 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
553900f
Refactor Tokenizers to support max input tokens and max output tokens
collindutter Mar 14, 2024
e02e2a0
Rename BaseTokenizer.max_tokens to BaseTokenizer.max_input_tokens
collindutter Mar 14, 2024
78209f9
Rename `BaseTokenizer.count_tokens_left` to `BaseTokenizer.count_inpu…
collindutter Mar 14, 2024
74efdd5
Rename default methods
collindutter Mar 14, 2024
452ced5
Rename constants
collindutter Mar 14, 2024
ec745f3
Clean up conditional
collindutter Mar 14, 2024
03c961d
Fix exception message
collindutter Mar 15, 2024
1250b42
Fix cohere token limits
collindutter Mar 15, 2024
4a7da7b
Update env vars
collindutter Mar 15, 2024
73204ed
Remove text davincci
collindutter Mar 15, 2024
4cfe37e
Add tests for input/output
collindutter Mar 15, 2024
d1113de
Add max_tokens back to openai
collindutter Mar 15, 2024
593eba0
Revert env var change
collindutter Mar 15, 2024
da79ef1
start with claude 3 prompt model driver
bjorgerSDA Mar 7, 2024
b84caf4
Start with function calling support for Claude 2
bjorgerSDA Mar 7, 2024
b679f10
Support output tokens
collindutter Mar 14, 2024
6dbd731
Fix type
collindutter Mar 15, 2024
dfa0781
Add try_run and try_stream
collindutter Mar 18, 2024
288e366
Add bedrock support
collindutter Mar 18, 2024
8620f38
Add tests, remove legacy
collindutter Mar 18, 2024
669e7fe
Update changelog
collindutter Mar 18, 2024
21ac648
Fix tests
collindutter Mar 18, 2024
80862ed
Add back missing fields
collindutter Mar 18, 2024
fb13b8d
Add top_p, top_k to anthropic
collindutter Mar 18, 2024
c87bf90
Merge branch 'dev' into feature/claude-3
collindutter Mar 19, 2024
769b64d
Regenerate lock file
collindutter Mar 19, 2024
0c767d3
Merge branch 'dev' into feature/claude-3
collindutter Mar 19, 2024
2491b72
Pull lock from dev
collindutter Mar 19, 2024
05c7cda
Regenerate lock file
collindutter Mar 19, 2024
266b571
Merge branch 'dev' into feature/claude-3
collindutter Mar 19, 2024
ec01bd0
Pull lock from dev
collindutter Mar 19, 2024
9653c36
Regenerate lockfile
collindutter Mar 19, 2024
b316799
Add AnthropicStructureConfig using VoyageAi
collindutter Mar 19, 2024
9583e42
Merge branch 'dev' into feature/claude-3-embeddings
collindutter Mar 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `TrafilaturaWebScraperDriver` for scraping text from web pages using trafilatura.
- `MarkdownifyWebScraperDriver` for scraping text from web pages using playwright and converting to markdown using markdownify.
- `VoyageAiEmbeddingDriver` for use with VoyageAi's embedding models.
- `AnthropicStructureConfig` for providing Structures with Anthropic Prompt and VoyageAi Embedding Driver configuration.

### Fixed
- Improved system prompt in `ToolTask` to support more use cases.
Expand Down
2 changes: 2 additions & 0 deletions griptape/config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from .structure_config import StructureConfig
from .openai_structure_config import OpenAiStructureConfig
from .amazon_bedrock_structure_config import AmazonBedrockStructureConfig
from .anthropic_structure_config import AnthropicStructureConfig
from .google_structure_config import GoogleStructureConfig


Expand All @@ -28,5 +29,6 @@
"StructureConfig",
"OpenAiStructureConfig",
"AmazonBedrockStructureConfig",
"AnthropicStructureConfig",
"GoogleStructureConfig",
]
48 changes: 48 additions & 0 deletions griptape/config/anthropic_structure_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from attrs import Factory, define, field

from griptape.config import (
BaseStructureConfig,
StructureGlobalDriversConfig,
StructureTaskMemoryConfig,
StructureTaskMemoryExtractionEngineConfig,
StructureTaskMemoryExtractionEngineCsvConfig,
StructureTaskMemoryExtractionEngineJsonConfig,
StructureTaskMemoryQueryEngineConfig,
StructureTaskMemorySummaryEngineConfig,
)
from griptape.drivers import LocalVectorStoreDriver, AnthropicPromptDriver, VoyageAiEmbeddingDriver


@define
class AnthropicStructureConfig(BaseStructureConfig):
global_drivers: StructureGlobalDriversConfig = field(
default=Factory(
lambda: StructureGlobalDriversConfig(
prompt_driver=AnthropicPromptDriver(model="claude-3-opus-20240229"),
embedding_driver=VoyageAiEmbeddingDriver(model="voyage-large-2"),
vector_store_driver=LocalVectorStoreDriver(
embedding_driver=VoyageAiEmbeddingDriver(model="voyage-large-2")
),
)
),
kw_only=True,
metadata={"serializable": True},
)
task_memory: StructureTaskMemoryConfig = field(
default=Factory(
lambda self: StructureTaskMemoryConfig(
query_engine=StructureTaskMemoryQueryEngineConfig(
prompt_driver=self.global_drivers.prompt_driver,
vector_store_driver=LocalVectorStoreDriver(embedding_driver=self.global_drivers.embedding_driver),
),
extraction_engine=StructureTaskMemoryExtractionEngineConfig(
csv=StructureTaskMemoryExtractionEngineCsvConfig(prompt_driver=self.global_drivers.prompt_driver),
json=StructureTaskMemoryExtractionEngineJsonConfig(prompt_driver=self.global_drivers.prompt_driver),
),
summary_engine=StructureTaskMemorySummaryEngineConfig(prompt_driver=self.global_drivers.prompt_driver),
),
takes_self=True,
),
kw_only=True,
metadata={"serializable": True},
)
7 changes: 2 additions & 5 deletions griptape/drivers/embedding/voyageai_embedding_driver.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
from __future__ import annotations
from typing import Optional, TYPE_CHECKING
from typing import Optional, Any
from attr import define, field, Factory
from griptape.utils import import_optional_dependency
from griptape.drivers import BaseEmbeddingDriver
from griptape.tokenizers import VoyageAiTokenizer

if TYPE_CHECKING:
from voyageai import Client


@define
class VoyageAiEmbeddingDriver(BaseEmbeddingDriver):
Expand All @@ -24,7 +21,7 @@ class VoyageAiEmbeddingDriver(BaseEmbeddingDriver):

model: str = field(default=DEFAULT_MODEL, kw_only=True, metadata={"serializable": True})
api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True})
client: Client = field(
client: Any = field(
default=Factory(
lambda self: import_optional_dependency("voyageai").Client(api_key=self.api_key), takes_self=True
)
Expand Down
9 changes: 3 additions & 6 deletions griptape/drivers/prompt/anthropic_prompt_driver.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from typing import Optional, Any
from collections.abc import Iterator
from attr import define, field, Factory
from griptape.artifacts import TextArtifact
from griptape.utils import PromptStack, import_optional_dependency
from griptape.drivers import BasePromptDriver
from griptape.tokenizers import AnthropicTokenizer

if TYPE_CHECKING:
from anthropic import Anthropic


@define
class AnthropicPromptDriver(BasePromptDriver):
Expand All @@ -21,9 +18,9 @@ class AnthropicPromptDriver(BasePromptDriver):
tokenizer: Custom `AnthropicTokenizer`.
"""

api_key: str = field(kw_only=True, metadata={"serializable": True})
api_key: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True})
emjay07 marked this conversation as resolved.
Show resolved Hide resolved
model: str = field(kw_only=True, metadata={"serializable": True})
client: Anthropic = field(
client: Any = field(
default=Factory(
lambda self: import_optional_dependency("anthropic").Anthropic(api_key=self.api_key), takes_self=True
emjay07 marked this conversation as resolved.
Show resolved Hide resolved
),
Expand Down
119 changes: 119 additions & 0 deletions tests/unit/config/test_anthropic_structure_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
from pytest import fixture
from griptape.config import AnthropicStructureConfig


class TestAnthropicStructureConfig:
@fixture(autouse=True)
def mock_anthropic(self, mocker):
mocker.patch("anthropic.Anthropic")
mocker.patch("voyageai.Client")

@fixture
def config(self):
return AnthropicStructureConfig()

def test_to_dict(self, config):
assert config.to_dict() == {
"type": "AnthropicStructureConfig",
"global_drivers": {
"type": "StructureGlobalDriversConfig",
"prompt_driver": {
"type": "AnthropicPromptDriver",
"temperature": 0.1,
"max_tokens": None,
"stream": False,
"api_key": None,
"model": "claude-3-opus-20240229",
"top_p": 0.999,
"top_k": 250,
},
"image_generation_driver": {"type": "DummyImageGenerationDriver"},
"image_query_driver": {"type": "DummyImageQueryDriver"},
"embedding_driver": {
"type": "VoyageAiEmbeddingDriver",
"model": "voyage-large-2",
"api_key": None,
"input_type": "document",
},
"vector_store_driver": {
"type": "LocalVectorStoreDriver",
"embedding_driver": {
"type": "VoyageAiEmbeddingDriver",
"model": "voyage-large-2",
"api_key": None,
"input_type": "document",
},
},
"conversation_memory_driver": None,
},
"task_memory": {
"type": "StructureTaskMemoryConfig",
"query_engine": {
"type": "StructureTaskMemoryQueryEngineConfig",
"prompt_driver": {
"type": "AnthropicPromptDriver",
"temperature": 0.1,
"max_tokens": None,
"stream": False,
"api_key": None,
"model": "claude-3-opus-20240229",
"top_p": 0.999,
"top_k": 250,
},
"vector_store_driver": {
"type": "LocalVectorStoreDriver",
"embedding_driver": {
"type": "VoyageAiEmbeddingDriver",
"model": "voyage-large-2",
"api_key": None,
"input_type": "document",
},
},
},
"extraction_engine": {
"type": "StructureTaskMemoryExtractionEngineConfig",
"csv": {
"type": "StructureTaskMemoryExtractionEngineCsvConfig",
"prompt_driver": {
"type": "AnthropicPromptDriver",
"temperature": 0.1,
"max_tokens": None,
"stream": False,
"api_key": None,
"model": "claude-3-opus-20240229",
"top_p": 0.999,
"top_k": 250,
},
},
"json": {
"type": "StructureTaskMemoryExtractionEngineJsonConfig",
"prompt_driver": {
"type": "AnthropicPromptDriver",
"temperature": 0.1,
"max_tokens": None,
"stream": False,
"api_key": None,
"model": "claude-3-opus-20240229",
"top_p": 0.999,
"top_k": 250,
},
},
},
"summary_engine": {
"type": "StructureTaskMemorySummaryEngineConfig",
"prompt_driver": {
"type": "AnthropicPromptDriver",
"temperature": 0.1,
"max_tokens": None,
"stream": False,
"api_key": None,
"model": "claude-3-opus-20240229",
"top_p": 0.999,
"top_k": 250,
},
},
},
}

def test_from_dict(self, config):
assert AnthropicStructureConfig.from_dict(config.to_dict()).to_dict() == config.to_dict()
Loading