camel-ai 0.1.6.7__py3-none-any.whl → 0.1.6.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of camel-ai might be problematic. Click here for more details.
- camel/__init__.py +1 -1
- camel/agents/chat_agent.py +44 -3
- camel/agents/critic_agent.py +0 -1
- camel/configs/__init__.py +3 -0
- camel/configs/reka_config.py +74 -0
- camel/models/__init__.py +2 -0
- camel/models/model_factory.py +3 -0
- camel/models/reka_model.py +232 -0
- camel/societies/babyagi_playing.py +0 -3
- camel/societies/role_playing.py +18 -2
- camel/storages/object_storages/amazon_s3.py +12 -10
- camel/types/enums.py +33 -1
- {camel_ai-0.1.6.7.dist-info → camel_ai-0.1.6.8.dist-info}/METADATA +19 -10
- {camel_ai-0.1.6.7.dist-info → camel_ai-0.1.6.8.dist-info}/RECORD +15 -13
- {camel_ai-0.1.6.7.dist-info → camel_ai-0.1.6.8.dist-info}/WHEEL +0 -0
camel/__init__.py
CHANGED
camel/agents/chat_agent.py
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
16
|
import json
|
|
17
|
+
import logging
|
|
17
18
|
from collections import defaultdict
|
|
18
19
|
from typing import (
|
|
19
20
|
TYPE_CHECKING,
|
|
@@ -61,6 +62,9 @@ if TYPE_CHECKING:
|
|
|
61
62
|
from camel.terminators import ResponseTerminator
|
|
62
63
|
from camel.toolkits import OpenAIFunction
|
|
63
64
|
|
|
65
|
+
|
|
66
|
+
logger = logging.getLogger(__name__)
|
|
67
|
+
|
|
64
68
|
# AgentOps decorator setting
|
|
65
69
|
try:
|
|
66
70
|
import os
|
|
@@ -437,10 +441,22 @@ class ChatAgent(BaseAgent):
|
|
|
437
441
|
for base_message_item in output_messages:
|
|
438
442
|
base_message_item.content = str(info['tool_calls'][-1].result)
|
|
439
443
|
|
|
440
|
-
|
|
444
|
+
chat_agent_response = ChatAgentResponse(
|
|
441
445
|
msgs=output_messages, terminated=self.terminated, info=info
|
|
442
446
|
)
|
|
443
447
|
|
|
448
|
+
# If the output result is single message, it will be
|
|
449
|
+
# automatically added to the memory.
|
|
450
|
+
if len(chat_agent_response.msgs) == 1:
|
|
451
|
+
self.record_message(chat_agent_response.msg)
|
|
452
|
+
else:
|
|
453
|
+
logger.warning(
|
|
454
|
+
"Multiple messages are available in `ChatAgentResponse`. "
|
|
455
|
+
"Please manually run the `record_message` function to "
|
|
456
|
+
"record the selected message."
|
|
457
|
+
)
|
|
458
|
+
return chat_agent_response
|
|
459
|
+
|
|
444
460
|
async def step_async(
|
|
445
461
|
self,
|
|
446
462
|
input_message: BaseMessage,
|
|
@@ -563,10 +579,23 @@ class ChatAgent(BaseAgent):
|
|
|
563
579
|
for base_message_item in output_messages:
|
|
564
580
|
base_message_item.content = str(info['tool_calls'][0].result)
|
|
565
581
|
|
|
566
|
-
|
|
582
|
+
chat_agent_response = ChatAgentResponse(
|
|
567
583
|
msgs=output_messages, terminated=self.terminated, info=info
|
|
568
584
|
)
|
|
569
585
|
|
|
586
|
+
# If the output result is single message, it will be
|
|
587
|
+
# automatically added to the memory.
|
|
588
|
+
if len(chat_agent_response.msgs) == 1:
|
|
589
|
+
self.record_message(chat_agent_response.msg)
|
|
590
|
+
else:
|
|
591
|
+
logger.warning(
|
|
592
|
+
"Multiple messages are presented in `chat_agent_response`. "
|
|
593
|
+
"Please manually call the `record_message` function to "
|
|
594
|
+
"record the chosen message."
|
|
595
|
+
)
|
|
596
|
+
|
|
597
|
+
return chat_agent_response
|
|
598
|
+
|
|
570
599
|
def _add_tools_for_func_call(
|
|
571
600
|
self,
|
|
572
601
|
response: ChatCompletion,
|
|
@@ -736,7 +765,9 @@ class ChatAgent(BaseAgent):
|
|
|
736
765
|
str(choice.finish_reason) for choice in response.choices
|
|
737
766
|
]
|
|
738
767
|
usage = (
|
|
739
|
-
|
|
768
|
+
self._safe_model_dump(response.usage)
|
|
769
|
+
if response.usage is not None
|
|
770
|
+
else {}
|
|
740
771
|
)
|
|
741
772
|
return (
|
|
742
773
|
output_messages,
|
|
@@ -745,6 +776,16 @@ class ChatAgent(BaseAgent):
|
|
|
745
776
|
response.id,
|
|
746
777
|
)
|
|
747
778
|
|
|
779
|
+
def _safe_model_dump(self, obj):
|
|
780
|
+
# Check if the `model_dump` method exists (Pydantic v2)
|
|
781
|
+
if hasattr(obj, 'model_dump'):
|
|
782
|
+
return obj.model_dump()
|
|
783
|
+
# Fallback to `dict()` method (Pydantic v1)
|
|
784
|
+
elif hasattr(obj, 'dict'):
|
|
785
|
+
return obj.dict()
|
|
786
|
+
else:
|
|
787
|
+
raise TypeError("The object is not a Pydantic model")
|
|
788
|
+
|
|
748
789
|
def handle_stream_response(
|
|
749
790
|
self,
|
|
750
791
|
response: Stream[ChatCompletionChunk],
|
camel/agents/critic_agent.py
CHANGED
camel/configs/__init__.py
CHANGED
|
@@ -19,6 +19,7 @@ from .litellm_config import LITELLM_API_PARAMS, LiteLLMConfig
|
|
|
19
19
|
from .mistral_config import MISTRAL_API_PARAMS, MistralConfig
|
|
20
20
|
from .ollama_config import OLLAMA_API_PARAMS, OllamaConfig
|
|
21
21
|
from .openai_config import OPENAI_API_PARAMS, ChatGPTConfig, OpenSourceConfig
|
|
22
|
+
from .reka_config import REKA_API_PARAMS, RekaConfig
|
|
22
23
|
from .samba_config import SAMBA_API_PARAMS, SambaConfig
|
|
23
24
|
from .togetherai_config import TOGETHERAI_API_PARAMS, TogetherAIConfig
|
|
24
25
|
from .vllm_config import VLLM_API_PARAMS, VLLMConfig
|
|
@@ -45,6 +46,8 @@ __all__ = [
|
|
|
45
46
|
'VLLM_API_PARAMS',
|
|
46
47
|
'MistralConfig',
|
|
47
48
|
'MISTRAL_API_PARAMS',
|
|
49
|
+
'RekaConfig',
|
|
50
|
+
'REKA_API_PARAMS',
|
|
48
51
|
'SambaConfig',
|
|
49
52
|
'SAMBA_API_PARAMS',
|
|
50
53
|
'TogetherAIConfig',
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. ===========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the “License”);
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an “AS IS” BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
# =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. ===========
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from typing import Any, Optional, Union
|
|
17
|
+
|
|
18
|
+
from camel.configs.base_config import BaseConfig
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class RekaConfig(BaseConfig):
|
|
22
|
+
r"""Defines the parameters for generating chat completions using the
|
|
23
|
+
Reka API.
|
|
24
|
+
|
|
25
|
+
Reference: https://docs.reka.ai/api-reference/chat/create
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
temperature (Optional[float], optional): temperature the temperature
|
|
29
|
+
to use for sampling, e.g. 0.5.
|
|
30
|
+
top_p (Optional[float], optional): the cumulative probability of
|
|
31
|
+
tokens to generate, e.g. 0.9. Defaults to None.
|
|
32
|
+
top_k (Optional[int], optional): Parameter which forces the model to
|
|
33
|
+
only consider the tokens with the `top_k` highest probabilities at
|
|
34
|
+
the next step. Defaults to 1024.
|
|
35
|
+
max_tokens (Optional[int], optional): the maximum number of tokens to
|
|
36
|
+
generate, e.g. 100. Defaults to None.
|
|
37
|
+
stop (Optional[Union[str,list[str]]]): Stop generation if this token
|
|
38
|
+
is detected. Or if one of these tokens is detected when providing
|
|
39
|
+
a string list.
|
|
40
|
+
seed (Optional[int], optional): the random seed to use for sampling, e.
|
|
41
|
+
g. 42. Defaults to None.
|
|
42
|
+
presence_penalty (float, optional): Number between :obj:`-2.0` and
|
|
43
|
+
:obj:`2.0`. Positive values penalize new tokens based on whether
|
|
44
|
+
they appear in the text so far, increasing the model's likelihood
|
|
45
|
+
to talk about new topics. See more information about frequency and
|
|
46
|
+
presence penalties. (default: :obj:`0.0`)
|
|
47
|
+
frequency_penalty (float, optional): Number between :obj:`-2.0` and
|
|
48
|
+
:obj:`2.0`. Positive values penalize new tokens based on their
|
|
49
|
+
existing frequency in the text so far, decreasing the model's
|
|
50
|
+
likelihood to repeat the same line verbatim. See more information
|
|
51
|
+
about frequency and presence penalties. (default: :obj:`0.0`)
|
|
52
|
+
use_search_engine (Optional[bool]): Whether to consider using search
|
|
53
|
+
engine to complete the request. Note that even if this is set to
|
|
54
|
+
`True`, the model might decide to not use search.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
temperature: Optional[float] = None
|
|
58
|
+
top_p: Optional[float] = None
|
|
59
|
+
top_k: Optional[int] = None
|
|
60
|
+
max_tokens: Optional[int] = None
|
|
61
|
+
stop: Optional[Union[str, list[str]]] = None
|
|
62
|
+
seed: Optional[int] = None
|
|
63
|
+
frequency_penalty: float = 0.0
|
|
64
|
+
presence_penalty: float = 0.0
|
|
65
|
+
use_search_engine: Optional[bool] = False
|
|
66
|
+
|
|
67
|
+
def as_dict(self) -> dict[str, Any]:
|
|
68
|
+
config_dict = super().as_dict()
|
|
69
|
+
if "tools" in config_dict:
|
|
70
|
+
del config_dict["tools"] # Reka does not support tool calling
|
|
71
|
+
return config_dict
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
REKA_API_PARAMS = {param for param in RekaConfig().model_fields.keys()}
|
camel/models/__init__.py
CHANGED
|
@@ -25,6 +25,7 @@ from .open_source_model import OpenSourceModel
|
|
|
25
25
|
from .openai_audio_models import OpenAIAudioModels
|
|
26
26
|
from .openai_compatibility_model import OpenAICompatibilityModel
|
|
27
27
|
from .openai_model import OpenAIModel
|
|
28
|
+
from .reka_model import RekaModel
|
|
28
29
|
from .samba_model import SambaModel
|
|
29
30
|
from .stub_model import StubModel
|
|
30
31
|
from .togetherai_model import TogetherAIModel
|
|
@@ -49,6 +50,7 @@ __all__ = [
|
|
|
49
50
|
'VLLMModel',
|
|
50
51
|
'GeminiModel',
|
|
51
52
|
'OpenAICompatibilityModel',
|
|
53
|
+
'RekaModel',
|
|
52
54
|
'SambaModel',
|
|
53
55
|
'TogetherAIModel',
|
|
54
56
|
]
|
camel/models/model_factory.py
CHANGED
|
@@ -24,6 +24,7 @@ from camel.models.ollama_model import OllamaModel
|
|
|
24
24
|
from camel.models.open_source_model import OpenSourceModel
|
|
25
25
|
from camel.models.openai_compatibility_model import OpenAICompatibilityModel
|
|
26
26
|
from camel.models.openai_model import OpenAIModel
|
|
27
|
+
from camel.models.reka_model import RekaModel
|
|
27
28
|
from camel.models.samba_model import SambaModel
|
|
28
29
|
from camel.models.stub_model import StubModel
|
|
29
30
|
from camel.models.togetherai_model import TogetherAIModel
|
|
@@ -93,6 +94,8 @@ class ModelFactory:
|
|
|
93
94
|
model_class = GeminiModel
|
|
94
95
|
elif model_platform.is_mistral and model_type.is_mistral:
|
|
95
96
|
model_class = MistralModel
|
|
97
|
+
elif model_platform.is_reka and model_type.is_reka:
|
|
98
|
+
model_class = RekaModel
|
|
96
99
|
elif model_platform.is_samba and model_type.is_samba:
|
|
97
100
|
model_class = SambaModel
|
|
98
101
|
elif model_type == ModelType.STUB:
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. ===========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the “License”);
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an “AS IS” BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
# =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. ===========
|
|
14
|
+
import os
|
|
15
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional
|
|
16
|
+
|
|
17
|
+
from camel.configs import REKA_API_PARAMS
|
|
18
|
+
from camel.messages import OpenAIMessage
|
|
19
|
+
from camel.models import BaseModelBackend
|
|
20
|
+
from camel.types import ChatCompletion, ModelType
|
|
21
|
+
from camel.utils import (
|
|
22
|
+
BaseTokenCounter,
|
|
23
|
+
OpenAITokenCounter,
|
|
24
|
+
api_keys_required,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from reka.types import ChatMessage, ChatResponse
|
|
29
|
+
|
|
30
|
+
try:
|
|
31
|
+
import os
|
|
32
|
+
|
|
33
|
+
if os.getenv("AGENTOPS_API_KEY") is not None:
|
|
34
|
+
from agentops import LLMEvent, record
|
|
35
|
+
else:
|
|
36
|
+
raise ImportError
|
|
37
|
+
except (ImportError, AttributeError):
|
|
38
|
+
LLMEvent = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class RekaModel(BaseModelBackend):
|
|
42
|
+
r"""Reka API in a unified BaseModelBackend interface."""
|
|
43
|
+
|
|
44
|
+
def __init__(
|
|
45
|
+
self,
|
|
46
|
+
model_type: ModelType,
|
|
47
|
+
model_config_dict: Dict[str, Any],
|
|
48
|
+
api_key: Optional[str] = None,
|
|
49
|
+
url: Optional[str] = None,
|
|
50
|
+
token_counter: Optional[BaseTokenCounter] = None,
|
|
51
|
+
) -> None:
|
|
52
|
+
r"""Constructor for Reka backend.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
model_type (ModelType): Model for which a backend is created,
|
|
56
|
+
one of REKA_* series.
|
|
57
|
+
model_config_dict (Dict[str, Any]): A dictionary that will
|
|
58
|
+
be fed into `Reka.chat.create`.
|
|
59
|
+
api_key (Optional[str]): The API key for authenticating with the
|
|
60
|
+
Reka service. (default: :obj:`None`)
|
|
61
|
+
url (Optional[str]): The url to the Reka service.
|
|
62
|
+
token_counter (Optional[BaseTokenCounter]): Token counter to use
|
|
63
|
+
for the model. If not provided, `OpenAITokenCounter` will be
|
|
64
|
+
used.
|
|
65
|
+
"""
|
|
66
|
+
super().__init__(
|
|
67
|
+
model_type, model_config_dict, api_key, url, token_counter
|
|
68
|
+
)
|
|
69
|
+
self._api_key = api_key or os.environ.get("REKA_API_KEY")
|
|
70
|
+
self._url = url or os.environ.get("REKA_SERVER_URL")
|
|
71
|
+
|
|
72
|
+
from reka.client import Reka
|
|
73
|
+
|
|
74
|
+
self._client = Reka(api_key=self._api_key, base_url=self._url)
|
|
75
|
+
self._token_counter: Optional[BaseTokenCounter] = None
|
|
76
|
+
|
|
77
|
+
def _convert_reka_to_openai_response(
|
|
78
|
+
self, response: 'ChatResponse'
|
|
79
|
+
) -> ChatCompletion:
|
|
80
|
+
r"""Converts a Reka `ChatResponse` to an OpenAI-style `ChatCompletion`
|
|
81
|
+
response.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
response (ChatResponse): The response object from the Reka API.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
ChatCompletion: An OpenAI-compatible chat completion response.
|
|
88
|
+
"""
|
|
89
|
+
openai_response = ChatCompletion.construct(
|
|
90
|
+
id=response.id,
|
|
91
|
+
choices=[
|
|
92
|
+
dict(
|
|
93
|
+
message={
|
|
94
|
+
"role": response.responses[0].message.role,
|
|
95
|
+
"content": response.responses[0].message.content,
|
|
96
|
+
},
|
|
97
|
+
finish_reason=response.responses[0].finish_reason
|
|
98
|
+
if response.responses[0].finish_reason
|
|
99
|
+
else None,
|
|
100
|
+
)
|
|
101
|
+
],
|
|
102
|
+
created=None,
|
|
103
|
+
model=response.model,
|
|
104
|
+
object="chat.completion",
|
|
105
|
+
usage=response.usage,
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
return openai_response
|
|
109
|
+
|
|
110
|
+
def _convert_openai_to_reka_messages(
|
|
111
|
+
self,
|
|
112
|
+
messages: List[OpenAIMessage],
|
|
113
|
+
) -> List["ChatMessage"]:
|
|
114
|
+
r"""Converts OpenAI API messages to Reka API messages.
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
messages (List[OpenAIMessage]): A list of messages in OpenAI
|
|
118
|
+
format.
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
List[ChatMessage]: A list of messages converted to Reka's format.
|
|
122
|
+
"""
|
|
123
|
+
from reka.types import ChatMessage
|
|
124
|
+
|
|
125
|
+
reka_messages = []
|
|
126
|
+
for msg in messages:
|
|
127
|
+
role = msg.get("role")
|
|
128
|
+
content = str(msg.get("content"))
|
|
129
|
+
|
|
130
|
+
if role == "user":
|
|
131
|
+
reka_messages.append(ChatMessage(role="user", content=content))
|
|
132
|
+
elif role == "assistant":
|
|
133
|
+
reka_messages.append(
|
|
134
|
+
ChatMessage(role="assistant", content=content)
|
|
135
|
+
)
|
|
136
|
+
elif role == "system":
|
|
137
|
+
reka_messages.append(ChatMessage(role="user", content=content))
|
|
138
|
+
|
|
139
|
+
# Add one more assistant msg since Reka requires conversation
|
|
140
|
+
# history must alternate between 'user' and 'assistant',
|
|
141
|
+
# starting and ending with 'user'.
|
|
142
|
+
reka_messages.append(
|
|
143
|
+
ChatMessage(
|
|
144
|
+
role="assistant",
|
|
145
|
+
content="",
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
else:
|
|
149
|
+
raise ValueError(f"Unsupported message role: {role}")
|
|
150
|
+
|
|
151
|
+
return reka_messages
|
|
152
|
+
|
|
153
|
+
@property
|
|
154
|
+
def token_counter(self) -> BaseTokenCounter:
|
|
155
|
+
r"""Initialize the token counter for the model backend.
|
|
156
|
+
|
|
157
|
+
# NOTE: Temporarily using `OpenAITokenCounter`
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
BaseTokenCounter: The token counter following the model's
|
|
161
|
+
tokenization style.
|
|
162
|
+
"""
|
|
163
|
+
if not self._token_counter:
|
|
164
|
+
self._token_counter = OpenAITokenCounter(
|
|
165
|
+
model=ModelType.GPT_4O_MINI
|
|
166
|
+
)
|
|
167
|
+
return self._token_counter
|
|
168
|
+
|
|
169
|
+
@api_keys_required("REKA_API_KEY")
|
|
170
|
+
def run(
|
|
171
|
+
self,
|
|
172
|
+
messages: List[OpenAIMessage],
|
|
173
|
+
) -> ChatCompletion:
|
|
174
|
+
r"""Runs inference of Mistral chat completion.
|
|
175
|
+
|
|
176
|
+
Args:
|
|
177
|
+
messages (List[OpenAIMessage]): Message list with the chat history
|
|
178
|
+
in OpenAI API format.
|
|
179
|
+
|
|
180
|
+
Returns:
|
|
181
|
+
ChatCompletion.
|
|
182
|
+
"""
|
|
183
|
+
reka_messages = self._convert_openai_to_reka_messages(messages)
|
|
184
|
+
|
|
185
|
+
response = self._client.chat.create(
|
|
186
|
+
messages=reka_messages,
|
|
187
|
+
model=self.model_type.value,
|
|
188
|
+
**self.model_config_dict,
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
openai_response = self._convert_reka_to_openai_response(response)
|
|
192
|
+
|
|
193
|
+
# Add AgentOps LLM Event tracking
|
|
194
|
+
if LLMEvent:
|
|
195
|
+
llm_event = LLMEvent(
|
|
196
|
+
thread_id=openai_response.id,
|
|
197
|
+
prompt=" ".join(
|
|
198
|
+
[message.get("content") for message in messages] # type: ignore[misc]
|
|
199
|
+
),
|
|
200
|
+
prompt_tokens=openai_response.usage.input_tokens, # type: ignore[union-attr]
|
|
201
|
+
completion=openai_response.choices[0].message.content,
|
|
202
|
+
completion_tokens=openai_response.usage.output_tokens, # type: ignore[union-attr]
|
|
203
|
+
model=self.model_type.value,
|
|
204
|
+
)
|
|
205
|
+
record(llm_event)
|
|
206
|
+
|
|
207
|
+
return openai_response
|
|
208
|
+
|
|
209
|
+
def check_model_config(self):
|
|
210
|
+
r"""Check whether the model configuration contains any
|
|
211
|
+
unexpected arguments to Reka API.
|
|
212
|
+
|
|
213
|
+
Raises:
|
|
214
|
+
ValueError: If the model configuration dictionary contains any
|
|
215
|
+
unexpected arguments to Reka API.
|
|
216
|
+
"""
|
|
217
|
+
for param in self.model_config_dict:
|
|
218
|
+
if param not in REKA_API_PARAMS:
|
|
219
|
+
raise ValueError(
|
|
220
|
+
f"Unexpected argument `{param}` is "
|
|
221
|
+
"input into Reka model backend."
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
@property
|
|
225
|
+
def stream(self) -> bool:
|
|
226
|
+
r"""Returns whether the model is in stream mode, which sends partial
|
|
227
|
+
results each time.
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
bool: Whether the model is in stream mode.
|
|
231
|
+
"""
|
|
232
|
+
return self.model_config_dict.get('stream', False)
|
|
@@ -243,9 +243,6 @@ class BabyAGI:
|
|
|
243
243
|
|
|
244
244
|
assistant_response = self.assistant_agent.step(assistant_msg_msg)
|
|
245
245
|
assistant_msg = assistant_response.msgs[0]
|
|
246
|
-
self.assistant_agent.record_message(assistant_msg)
|
|
247
|
-
self.task_creation_agent.record_message(assistant_msg)
|
|
248
|
-
self.task_prioritization_agent.record_message(assistant_msg)
|
|
249
246
|
|
|
250
247
|
self.solved_subtasks.append(task_name)
|
|
251
248
|
past_tasks = self.solved_subtasks + list(self.subtasks)
|
camel/societies/role_playing.py
CHANGED
|
@@ -486,7 +486,15 @@ class RolePlaying:
|
|
|
486
486
|
),
|
|
487
487
|
)
|
|
488
488
|
user_msg = self._reduce_message_options(user_response.msgs)
|
|
489
|
-
|
|
489
|
+
|
|
490
|
+
# To prevent recording the same memory more than once (once in chat
|
|
491
|
+
# step and once in role play), and the model generates only one
|
|
492
|
+
# response when multi-response support is enabled.
|
|
493
|
+
if (
|
|
494
|
+
'n' in self.user_agent.model_config_dict.keys()
|
|
495
|
+
and self.user_agent.model_config_dict['n'] > 1
|
|
496
|
+
):
|
|
497
|
+
self.user_agent.record_message(user_msg)
|
|
490
498
|
|
|
491
499
|
assistant_response = self.assistant_agent.step(user_msg)
|
|
492
500
|
if assistant_response.terminated or assistant_response.msgs is None:
|
|
@@ -501,7 +509,15 @@ class RolePlaying:
|
|
|
501
509
|
),
|
|
502
510
|
)
|
|
503
511
|
assistant_msg = self._reduce_message_options(assistant_response.msgs)
|
|
504
|
-
|
|
512
|
+
|
|
513
|
+
# To prevent recording the same memory more than once (once in chat
|
|
514
|
+
# step and once in role play), and the model generates only one
|
|
515
|
+
# response when multi-response support is enabled.
|
|
516
|
+
if (
|
|
517
|
+
'n' in self.assistant_agent.model_config_dict.keys()
|
|
518
|
+
and self.assistant_agent.model_config_dict['n'] > 1
|
|
519
|
+
):
|
|
520
|
+
self.assistant_agent.record_message(assistant_msg)
|
|
505
521
|
|
|
506
522
|
return (
|
|
507
523
|
ChatAgentResponse(
|
|
@@ -70,18 +70,20 @@ class AmazonS3Storage(BaseObjectStorage):
|
|
|
70
70
|
aws_key_id = None
|
|
71
71
|
aws_secret_key = None
|
|
72
72
|
|
|
73
|
-
import
|
|
73
|
+
import botocore.session
|
|
74
74
|
from botocore import UNSIGNED
|
|
75
75
|
from botocore.config import Config
|
|
76
76
|
|
|
77
|
+
session = botocore.session.get_session()
|
|
78
|
+
|
|
77
79
|
if not anonymous:
|
|
78
|
-
self._client =
|
|
80
|
+
self._client = session.create_client(
|
|
79
81
|
"s3",
|
|
80
82
|
aws_access_key_id=aws_key_id,
|
|
81
83
|
aws_secret_access_key=aws_secret_key,
|
|
82
84
|
)
|
|
83
85
|
else:
|
|
84
|
-
self._client =
|
|
86
|
+
self._client = session.create_client(
|
|
85
87
|
"s3", config=Config(signature_version=UNSIGNED)
|
|
86
88
|
)
|
|
87
89
|
|
|
@@ -165,11 +167,10 @@ class AmazonS3Storage(BaseObjectStorage):
|
|
|
165
167
|
local_file_path (Path): The path to the local file to be uploaded.
|
|
166
168
|
remote_file_key (str): The path to the object in the bucket.
|
|
167
169
|
"""
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
)
|
|
170
|
+
with open(local_file_path, "rb") as f:
|
|
171
|
+
self._client.put_object(
|
|
172
|
+
Bucket=self._bucket_name, Key=remote_file_key, Body=f
|
|
173
|
+
)
|
|
173
174
|
|
|
174
175
|
def _download_file(
|
|
175
176
|
self,
|
|
@@ -182,11 +183,12 @@ class AmazonS3Storage(BaseObjectStorage):
|
|
|
182
183
|
local_file_path (Path): The path to the local file to be saved.
|
|
183
184
|
remote_file_key (str): The key of the object in the bucket.
|
|
184
185
|
"""
|
|
185
|
-
self._client.
|
|
186
|
+
file = self._client.get_object(
|
|
186
187
|
Bucket=self._bucket_name,
|
|
187
188
|
Key=remote_file_key,
|
|
188
|
-
Filename=local_file_path,
|
|
189
189
|
)
|
|
190
|
+
with open(local_file_path, "wb") as f:
|
|
191
|
+
f.write(file["Body"].read())
|
|
190
192
|
|
|
191
193
|
def _object_exists(self, file_key: str) -> bool:
|
|
192
194
|
r"""
|
camel/types/enums.py
CHANGED
|
@@ -72,7 +72,7 @@ class ModelType(Enum):
|
|
|
72
72
|
GEMINI_1_5_FLASH = "gemini-1.5-flash"
|
|
73
73
|
GEMINI_1_5_PRO = "gemini-1.5-pro"
|
|
74
74
|
|
|
75
|
-
# Mistral AI
|
|
75
|
+
# Mistral AI models
|
|
76
76
|
MISTRAL_LARGE = "mistral-large-latest"
|
|
77
77
|
MISTRAL_NEMO = "open-mistral-nemo"
|
|
78
78
|
MISTRAL_CODESTRAL = "codestral-latest"
|
|
@@ -81,6 +81,11 @@ class ModelType(Enum):
|
|
|
81
81
|
MISTRAL_MIXTRAL_8x22B = "open-mixtral-8x22b"
|
|
82
82
|
MISTRAL_CODESTRAL_MAMBA = "open-codestral-mamba"
|
|
83
83
|
|
|
84
|
+
# Reka models
|
|
85
|
+
REKA_CORE = "reka-core"
|
|
86
|
+
REKA_FLASH = "reka-flash"
|
|
87
|
+
REKA_EDGE = "reka-edge"
|
|
88
|
+
|
|
84
89
|
# SambaNova Model
|
|
85
90
|
SAMBA_LLAMA_3_1_405B = "llama3-405b"
|
|
86
91
|
SAMBA_LLAMA_3_1_70B = "llama3-70b"
|
|
@@ -193,8 +198,26 @@ class ModelType(Enum):
|
|
|
193
198
|
|
|
194
199
|
@property
|
|
195
200
|
def is_gemini(self) -> bool:
|
|
201
|
+
r"""Returns whether this type of models is Gemini model.
|
|
202
|
+
|
|
203
|
+
Returns:
|
|
204
|
+
bool: Whether this type of models is gemini.
|
|
205
|
+
"""
|
|
196
206
|
return self in {ModelType.GEMINI_1_5_FLASH, ModelType.GEMINI_1_5_PRO}
|
|
197
207
|
|
|
208
|
+
@property
|
|
209
|
+
def is_reka(self) -> bool:
|
|
210
|
+
r"""Returns whether this type of models is Reka model.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
bool: Whether this type of models is Reka.
|
|
214
|
+
"""
|
|
215
|
+
return self in {
|
|
216
|
+
ModelType.REKA_CORE,
|
|
217
|
+
ModelType.REKA_EDGE,
|
|
218
|
+
ModelType.REKA_FLASH,
|
|
219
|
+
}
|
|
220
|
+
|
|
198
221
|
@property
|
|
199
222
|
def is_samba(self) -> bool:
|
|
200
223
|
return self in {
|
|
@@ -219,6 +242,9 @@ class ModelType(Enum):
|
|
|
219
242
|
ModelType.LLAMA_2,
|
|
220
243
|
ModelType.NEMOTRON_4_REWARD,
|
|
221
244
|
ModelType.STUB,
|
|
245
|
+
ModelType.REKA_CORE,
|
|
246
|
+
ModelType.REKA_EDGE,
|
|
247
|
+
ModelType.REKA_FLASH,
|
|
222
248
|
}:
|
|
223
249
|
return 4_096
|
|
224
250
|
elif self in {
|
|
@@ -458,6 +484,7 @@ class ModelPlatformType(Enum):
|
|
|
458
484
|
GEMINI = "gemini"
|
|
459
485
|
VLLM = "vllm"
|
|
460
486
|
MISTRAL = "mistral"
|
|
487
|
+
REKA = "reka"
|
|
461
488
|
TOGETHER = "together"
|
|
462
489
|
OPENAI_COMPATIBILITY_MODEL = "openai-compatibility-model"
|
|
463
490
|
SAMBA = "samba-nova"
|
|
@@ -528,6 +555,11 @@ class ModelPlatformType(Enum):
|
|
|
528
555
|
r"""Returns whether this platform is Gemini."""
|
|
529
556
|
return self is ModelPlatformType.GEMINI
|
|
530
557
|
|
|
558
|
+
@property
|
|
559
|
+
def is_reka(self) -> bool:
|
|
560
|
+
r"""Returns whether this platform is Reka."""
|
|
561
|
+
return self is ModelPlatformType.REKA
|
|
562
|
+
|
|
531
563
|
@property
|
|
532
564
|
def is_samba(self) -> bool:
|
|
533
565
|
r"""Returns whether this platform is Samba Nova."""
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: camel-ai
|
|
3
|
-
Version: 0.1.6.
|
|
3
|
+
Version: 0.1.6.8
|
|
4
4
|
Summary: Communicative Agents for AI Society Study
|
|
5
5
|
Home-page: https://www.camel-ai.org/
|
|
6
6
|
License: Apache-2.0
|
|
7
7
|
Keywords: communicative-ai,ai-societies,artificial-intelligence,deep-learning,multi-agent-systems,cooperative-ai,natural-language-processing,large-language-models
|
|
8
8
|
Author: CAMEL-AI.org
|
|
9
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.10.0,<3.12
|
|
10
10
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.10
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
14
|
Provides-Extra: all
|
|
@@ -29,7 +28,7 @@ Requires-Dist: agentops (>=0.3.6,<0.4.0) ; extra == "tools" or extra == "all"
|
|
|
29
28
|
Requires-Dist: anthropic (>=0.29.0,<0.30.0)
|
|
30
29
|
Requires-Dist: azure-storage-blob (>=12.21.0,<13.0.0) ; extra == "object-storages" or extra == "all"
|
|
31
30
|
Requires-Dist: beautifulsoup4 (>=4,<5) ; extra == "tools" or extra == "all"
|
|
32
|
-
Requires-Dist:
|
|
31
|
+
Requires-Dist: botocore (>=1.35.3,<2.0.0) ; extra == "object-storages" or extra == "all"
|
|
33
32
|
Requires-Dist: cohere (>=4.56,<5.0) ; extra == "retrievers" or extra == "all"
|
|
34
33
|
Requires-Dist: colorama (>=0,<1)
|
|
35
34
|
Requires-Dist: curl_cffi (==0.6.2)
|
|
@@ -75,6 +74,7 @@ Requires-Dist: pytest-asyncio (>=0.23.0,<0.24.0) ; extra == "test"
|
|
|
75
74
|
Requires-Dist: qdrant-client (>=1.9.0,<2.0.0) ; extra == "vector-databases" or extra == "all"
|
|
76
75
|
Requires-Dist: rank-bm25 (>=0.2.2,<0.3.0) ; extra == "retrievers" or extra == "all"
|
|
77
76
|
Requires-Dist: redis (>=5.0.6,<6.0.0) ; extra == "kv-stroages" or extra == "all"
|
|
77
|
+
Requires-Dist: reka-api (>=3.0.8,<4.0.0) ; extra == "model-platforms" or extra == "all"
|
|
78
78
|
Requires-Dist: requests_oauthlib (>=1.3.1,<2.0.0) ; extra == "tools" or extra == "all"
|
|
79
79
|
Requires-Dist: sentence-transformers (>=3.0.1,<4.0.0) ; extra == "encoders" or extra == "all"
|
|
80
80
|
Requires-Dist: sentencepiece (>=0,<1) ; extra == "huggingface-agent" or extra == "all"
|
|
@@ -164,7 +164,7 @@ Some features require extra dependencies:
|
|
|
164
164
|
|
|
165
165
|
Install `CAMEL` from source with poetry (Recommended):
|
|
166
166
|
```sh
|
|
167
|
-
# Make sure your python version is later than 3.
|
|
167
|
+
# Make sure your python version is later than 3.10
|
|
168
168
|
# You can use pyenv to manage multiple python verisons in your sytstem
|
|
169
169
|
|
|
170
170
|
# Clone github repo
|
|
@@ -187,22 +187,31 @@ poetry shell
|
|
|
187
187
|
poetry install
|
|
188
188
|
|
|
189
189
|
# Install CAMEL with all dependencies
|
|
190
|
-
poetry install -E all
|
|
190
|
+
poetry install -E all # (Optional)
|
|
191
191
|
|
|
192
192
|
# Exit the virtual environment
|
|
193
193
|
exit
|
|
194
194
|
```
|
|
195
195
|
|
|
196
|
+
> [!TIP]
|
|
197
|
+
> If you encounter errors when running `poetry install`, it may be due to a cache-related problem. You can try running:
|
|
198
|
+
> ```sh
|
|
199
|
+
> poetry install --no-cache
|
|
200
|
+
> ```
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
196
205
|
Install `CAMEL` from source with conda and pip:
|
|
197
206
|
```sh
|
|
198
207
|
# Create a conda virtual environment
|
|
199
|
-
conda create --name camel python=3.
|
|
208
|
+
conda create --name camel python=3.10
|
|
200
209
|
|
|
201
210
|
# Activate CAMEL conda environment
|
|
202
211
|
conda activate camel
|
|
203
212
|
|
|
204
213
|
# Clone github repo
|
|
205
|
-
git clone -b v0.1.6.
|
|
214
|
+
git clone -b v0.1.6.8 https://github.com/camel-ai/camel.git
|
|
206
215
|
|
|
207
216
|
# Change directory into project directory
|
|
208
217
|
cd camel
|
|
@@ -415,8 +424,8 @@ We appreciate your interest in contributing to our open-source initiative. We pr
|
|
|
415
424
|
## Contact
|
|
416
425
|
For more information please contact camel.ai.team@gmail.com.
|
|
417
426
|
|
|
418
|
-
[python-image]: https://img.shields.io/badge/Python-3.
|
|
419
|
-
[python-url]: https://docs.python.org/3.
|
|
427
|
+
[python-image]: https://img.shields.io/badge/Python-3.10%2B-brightgreen.svg
|
|
428
|
+
[python-url]: https://docs.python.org/3.10/
|
|
420
429
|
[pytest-image]: https://github.com/camel-ai/camel/actions/workflows/pytest_package.yml/badge.svg
|
|
421
430
|
[pytest-url]: https://github.com/camel-ai/camel/actions/workflows/pytest_package.yml
|
|
422
431
|
[docs-image]: https://img.shields.io/badge/Documentation-grey.svg?logo=github
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
camel/__init__.py,sha256=
|
|
1
|
+
camel/__init__.py,sha256=KEjV2qzUDDegvNDvaifEdd7I3TKMl7UPLov39UP31a4,780
|
|
2
2
|
camel/agents/__init__.py,sha256=SSU1wbhZXWwQnE0rRxkpyN57kEu72KklsZNcdLkXfTs,1551
|
|
3
3
|
camel/agents/base.py,sha256=X39qWSiT1WnDqaJ9k3gQrTpOQSwUKzNEVpp5AY6fDH8,1130
|
|
4
|
-
camel/agents/chat_agent.py,sha256=
|
|
5
|
-
camel/agents/critic_agent.py,sha256=
|
|
4
|
+
camel/agents/chat_agent.py,sha256=S2ZP8hC_Wjursnd0mxk0Iq4BYA_UedyolyValuyAYZY,37418
|
|
5
|
+
camel/agents/critic_agent.py,sha256=To-istnO-9Eb0iabdeIDrgfvkxYYfsdX9xIZiSrc3oM,7493
|
|
6
6
|
camel/agents/deductive_reasoner_agent.py,sha256=49vwglWYHgXf-VRftdMN9OFGOwqdsXyTt45PP6z-pbg,13473
|
|
7
7
|
camel/agents/embodied_agent.py,sha256=3ABuiRQXBpplKbuhPY5KNLJyKc6Z8SgXgzIges3ZwVs,7542
|
|
8
8
|
camel/agents/knowledge_graph_agent.py,sha256=DNfFD3qJ-xMze3hphPPn66BpeDlchlNtF-7lj_QWFNc,9011
|
|
@@ -12,7 +12,7 @@ camel/agents/task_agent.py,sha256=n9xIU3QtcptRPSuHZJ4ntQ_M_a8AvJ6U9ZRV8VaxV5A,14
|
|
|
12
12
|
camel/agents/tool_agents/__init__.py,sha256=ulTNWU2qoFGe3pvVmCq_sdfeSX3NKZ0due66TYvsL-M,862
|
|
13
13
|
camel/agents/tool_agents/base.py,sha256=nQAhfWi8a_bCgzlf5-G-tmj1fKm6AjpRc89NQkWwpnc,1399
|
|
14
14
|
camel/agents/tool_agents/hugging_face_tool_agent.py,sha256=1Z5tG6f_86eL0vmtRZ-BJvoLDFFLhoHt8JtDvgat1xU,8723
|
|
15
|
-
camel/configs/__init__.py,sha256=
|
|
15
|
+
camel/configs/__init__.py,sha256=7rJ-fAqML30O8UpN1CRb4M1TE-TYB3GsLHkyBcRucxE,2084
|
|
16
16
|
camel/configs/anthropic_config.py,sha256=DGQoPyYrayhYQ7aSjkYYGHOZ5VdQ9qahtaS0p_GpU0Q,3294
|
|
17
17
|
camel/configs/base_config.py,sha256=gjsDACMCk-hXDBk7qkeHcpbQrWy6jbp4iyzfqgghJEk,2485
|
|
18
18
|
camel/configs/gemini_config.py,sha256=YHJSNEAIxBxPX1NAj2rWvM4OOR7vmIANH88pZO-aOsY,6880
|
|
@@ -21,6 +21,7 @@ camel/configs/litellm_config.py,sha256=77k7HT-0s9Sq_g4KeDjL_MZId0Tx5TB8oupIyGQHx
|
|
|
21
21
|
camel/configs/mistral_config.py,sha256=G9LuY0-3S6az-8j8kpqB-4asgoaxTOsZVYeZBYJl6LI,3634
|
|
22
22
|
camel/configs/ollama_config.py,sha256=xrT-ulqvANjIu0bVxOzN93uaKUs8e2gW1tmYK1jULEM,4357
|
|
23
23
|
camel/configs/openai_config.py,sha256=yQf7lkBcYTtCNAopow3SlZgcDMlMkiCpC5Dvhh9wb9M,7327
|
|
24
|
+
camel/configs/reka_config.py,sha256=ECYg3BT7onwZX-iKLq-5TBhCFdm70rV-9hZ_G6Ye8-k,3504
|
|
24
25
|
camel/configs/samba_config.py,sha256=PY9it-wRlEUljvTfu_wI-xhhy-emG_iuXYCtEmU0q_8,2166
|
|
25
26
|
camel/configs/togetherai_config.py,sha256=WERo8W6yb-qy_3qa1GUckt58J5XGKwN5X_nC9baL8Cs,5663
|
|
26
27
|
camel/configs/vllm_config.py,sha256=jfeveBnlkkBHC2RFkffG6ZlTkGzkwrX_WXMwHkg36Jg,5516
|
|
@@ -57,7 +58,7 @@ camel/memories/records.py,sha256=kcXOATDTRRo-SCAcDpsV8Ttfie7p1GcXYzuXgXKJB0E,368
|
|
|
57
58
|
camel/messages/__init__.py,sha256=djLvpz6AmjeLzuUSQl7J6T2O4x8MwSdcH0l9fbj_3yg,1468
|
|
58
59
|
camel/messages/base.py,sha256=694Zz19D4u-j8mmpRXwCVJ8cd2Wll6h7acbyNRofNTI,13722
|
|
59
60
|
camel/messages/func_message.py,sha256=CCVkbz-2pdxXV0vBETI0xt7d7uiN8zACpRI7lCnfTFQ,3841
|
|
60
|
-
camel/models/__init__.py,sha256=
|
|
61
|
+
camel/models/__init__.py,sha256=CxrRisXkHgJPv7HdC6pblHuhSpDjUbUjrTdZeZ-0v7w,1971
|
|
61
62
|
camel/models/anthropic_model.py,sha256=_xhnbrMsuumB2jkuv2pVv3MFYxNE5EL5kVlZbYYBo5E,5751
|
|
62
63
|
camel/models/azure_openai_model.py,sha256=r5diPZp4XmCcZClkCqvTHB8frzRNou559j89dryKLKw,6078
|
|
63
64
|
camel/models/base_model.py,sha256=UHyAgo6GzYZNLTZD1T0C3_WmHUPoh9Qoe_SfvdI7HrU,4387
|
|
@@ -65,13 +66,14 @@ camel/models/gemini_model.py,sha256=h_kyD8LSpXCn2dQ4OEer5HwwEUwuTD65yRIRV4LD3Vs,
|
|
|
65
66
|
camel/models/groq_model.py,sha256=Lm1br_2FBdqNQ3pCgMNf3VnjykYzttUKnHWExEXshLo,4753
|
|
66
67
|
camel/models/litellm_model.py,sha256=5sTOzI07FsxDEW3jSK-XXBx91Yo8z9voahyCsK36U6U,5748
|
|
67
68
|
camel/models/mistral_model.py,sha256=39rHJ-z_6Z-UbtUqZPEAbCdFYY1Ft0Drs42jG5hHaho,9517
|
|
68
|
-
camel/models/model_factory.py,sha256=
|
|
69
|
+
camel/models/model_factory.py,sha256=rN6U3LDvUE55cj04znY3yJGzmHjRD99rYGsjMWPdZnQ,5998
|
|
69
70
|
camel/models/nemotron_model.py,sha256=2Idf4wrZervxvfu6av42EKjefFtDnBb6cKnWCJUkqI4,2682
|
|
70
71
|
camel/models/ollama_model.py,sha256=RRav-OXKRP41N9thrd_wFTZg7d7ZqlfhpPqkg_Q2LJw,4994
|
|
71
72
|
camel/models/open_source_model.py,sha256=p5a2sCeZl5SyrgkygClndOrHEjpJxmyhE1CqKE2fZSw,6363
|
|
72
73
|
camel/models/openai_audio_models.py,sha256=_ddOxqzFZCVZaK6h33Z0THU6HXk2XlJTxVWquZ3oOaQ,10042
|
|
73
74
|
camel/models/openai_compatibility_model.py,sha256=7h1zSFBgg_mQojFvtSqC54tcZOZY0NFsZ7ZNlns5CWk,4229
|
|
74
75
|
camel/models/openai_model.py,sha256=uOtiLmbdH7sDKqk9oV0i1HEVni_4ApPXCukShZwQDKA,4611
|
|
76
|
+
camel/models/reka_model.py,sha256=_ERZvtkK0Gd7GUx3f4VVqqtH093clVMoJfa896t9f2M,8043
|
|
75
77
|
camel/models/samba_model.py,sha256=vu9459hMOTxGDny7IkJEQhtwOlyAs0_haWCFrjoGG5U,10146
|
|
76
78
|
camel/models/stub_model.py,sha256=DuqaBsS55STSbcLJsk025Uwo_u4ixrSSKqKEoZj2ihY,3680
|
|
77
79
|
camel/models/togetherai_model.py,sha256=kUFGxb6cXUgkvMNQ0MsDKW27Udw622zt2QIVa3U7iLU,5461
|
|
@@ -102,8 +104,8 @@ camel/retrievers/bm25_retriever.py,sha256=Dr7Yfkjw45sovI1EVNByGIMj7KERWrr8JHlh8c
|
|
|
102
104
|
camel/retrievers/cohere_rerank_retriever.py,sha256=HvnFqXpsX9EdBOab0kFLDyxxJnknPFMVxyQJQDlHbOA,4100
|
|
103
105
|
camel/retrievers/vector_retriever.py,sha256=iNYS3A8UxjP6Q7HYqQ05P7sI_2Rmwy-BxsHJR7oYmwY,8019
|
|
104
106
|
camel/societies/__init__.py,sha256=JhGwUHjht4CewzC3shKuxmgB3oS7FIxIxmiKyhNsfIs,832
|
|
105
|
-
camel/societies/babyagi_playing.py,sha256=
|
|
106
|
-
camel/societies/role_playing.py,sha256=
|
|
107
|
+
camel/societies/babyagi_playing.py,sha256=tZTcfQrD9ECUhkqwdthsM2yFPfYGKsoAGMfTlrxt5as,11675
|
|
108
|
+
camel/societies/role_playing.py,sha256=ZiiT1RtS3cQtV3XqyAXOH_Up7-b7WRDznC2qiX4PDGg,22982
|
|
107
109
|
camel/storages/__init__.py,sha256=ghlDZ1cF3O_QxwX9xIIZ__bnHcUjh7dbAF1X_ivkofc,1551
|
|
108
110
|
camel/storages/graph_storages/__init__.py,sha256=vsJZkedaCS-cLQ-KgMqio8cxXvbousBWVqzZJvlimT8,897
|
|
109
111
|
camel/storages/graph_storages/base.py,sha256=-Ys1BIuz4H5FvYMZTBIjg8Cfv40CPQ-OsovwMzygEgU,2858
|
|
@@ -115,7 +117,7 @@ camel/storages/key_value_storages/in_memory.py,sha256=pAcKkVd7jlPS6seR31agdyjx9T
|
|
|
115
117
|
camel/storages/key_value_storages/json.py,sha256=BlOhuyWbSjzKixtA5e9O0z8BFK4pi96OcPNxnFfDPQw,3471
|
|
116
118
|
camel/storages/key_value_storages/redis.py,sha256=nQmdVUTLL0bW3hDeX5k-V2XKv0n6wuvbBxlrBmWVbpw,5706
|
|
117
119
|
camel/storages/object_storages/__init__.py,sha256=H-0dcB_SOxn1eyg2ojq5Nk9dZQURBsPZ6u2Xw3L7_To,921
|
|
118
|
-
camel/storages/object_storages/amazon_s3.py,sha256=
|
|
120
|
+
camel/storages/object_storages/amazon_s3.py,sha256=Sm-NqjrpaaHCOfMuaRoI7DjuzG3uFjG4d7OEfa5yQK4,7401
|
|
119
121
|
camel/storages/object_storages/azure_blob.py,sha256=vtP5b9JGPenueKmU0O07nlRgAOgqIomyf7WvNfKmaFQ,5975
|
|
120
122
|
camel/storages/object_storages/base.py,sha256=E8fefvH7I5iMKtOMNjltOR6BQsoKeqBxYtitnx_dbAo,3802
|
|
121
123
|
camel/storages/object_storages/google_cloud.py,sha256=X4_bXmgeLYxG2h6OWZw-toxTliYwpujOjShGcFjYrAY,5315
|
|
@@ -171,7 +173,7 @@ camel/toolkits/slack_toolkit.py,sha256=JdgDJe7iExTmG7dDXOG6v5KpVjZ6_My_d_WFTYSxk
|
|
|
171
173
|
camel/toolkits/twitter_toolkit.py,sha256=oQw8wRkU7iDxaocsmWvio4pU75pmq6FJAorPdQ2xEAE,19810
|
|
172
174
|
camel/toolkits/weather_toolkit.py,sha256=n4YrUI_jTIH7oqH918IdHbXLgfQ2BPGIWWK8Jp8G1Uw,7054
|
|
173
175
|
camel/types/__init__.py,sha256=ArKXATj3z_Vv4ISmROVeo6Mv3tj5kE1dTkqfgwyxVY4,1975
|
|
174
|
-
camel/types/enums.py,sha256=
|
|
176
|
+
camel/types/enums.py,sha256=ax37MGZH6i5gDv6jOZJpDCkM9vuNbL6eRqnwKGMWRZk,17810
|
|
175
177
|
camel/types/openai_types.py,sha256=BNQ6iCzKTjSvgcXFsAFIgrUS_YUFZBU6bDoyAp387hI,2045
|
|
176
178
|
camel/utils/__init__.py,sha256=IdI9v0FetNR-nx-Hg4bmNHoYto6Xfcs_uaomksdewmo,2303
|
|
177
179
|
camel/utils/async_func.py,sha256=SLo8KPkrNKdsONvFf3KBb33EgFn4gH2EKSX1aI_LKes,1578
|
|
@@ -188,6 +190,6 @@ camel/workforce/utils.py,sha256=Z-kODz5PMPtfeKKVqpcQq-b-B8oqC7XSwi_F3__Ijhs,3526
|
|
|
188
190
|
camel/workforce/worker_node.py,sha256=wsRqk2rugCvvkcmCzvn-y-gQuyuJGAG8PIr1KtgqJFw,3878
|
|
189
191
|
camel/workforce/workforce.py,sha256=SVJJgSSkYvk05RgL9oaJzHwzziH7u51KLINRuzLB8BI,1773
|
|
190
192
|
camel/workforce/workforce_prompt.py,sha256=cAWYEIA0rau5itEekSoUIFttBzpKM9RzB6x-mfukGSU,4665
|
|
191
|
-
camel_ai-0.1.6.
|
|
192
|
-
camel_ai-0.1.6.
|
|
193
|
-
camel_ai-0.1.6.
|
|
193
|
+
camel_ai-0.1.6.8.dist-info/METADATA,sha256=NyuQ9p2_nX56-oYvq9jHgzU_dGsPrA1z8TybouhA5Go,24500
|
|
194
|
+
camel_ai-0.1.6.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
195
|
+
camel_ai-0.1.6.8.dist-info/RECORD,,
|
|
File without changes
|