intentkit 0.8.17.dev1__py3-none-any.whl → 0.8.17.dev2__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 intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +1 -1
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +6 -5
- intentkit/abstracts/skill.py +5 -5
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/cdp.py +19 -77
- intentkit/clients/twitter.py +26 -34
- intentkit/clients/web3.py +1 -3
- intentkit/config/config.py +4 -0
- intentkit/core/agent.py +15 -15
- intentkit/core/asset.py +1 -2
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +19 -20
- intentkit/core/engine.py +2 -4
- intentkit/core/node.py +2 -1
- intentkit/core/prompt.py +3 -4
- intentkit/core/scheduler.py +1 -1
- intentkit/core/statistics.py +6 -7
- intentkit/models/agent.py +125 -92
- intentkit/models/agent_data.py +62 -36
- intentkit/models/app_setting.py +6 -6
- intentkit/models/chat.py +27 -24
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +62 -64
- intentkit/models/db.py +8 -7
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.py +12 -14
- intentkit/models/redis.py +2 -3
- intentkit/models/skill.py +25 -27
- intentkit/models/user.py +21 -22
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +1 -3
- intentkit/skills/aixbt/base.py +1 -3
- intentkit/skills/aixbt/projects.py +13 -13
- intentkit/skills/allora/base.py +1 -3
- intentkit/skills/allora/price.py +2 -3
- intentkit/skills/base.py +15 -22
- intentkit/skills/basename/__init__.py +3 -5
- intentkit/skills/carv/__init__.py +7 -8
- intentkit/skills/carv/base.py +6 -6
- intentkit/skills/carv/fetch_news.py +3 -3
- intentkit/skills/carv/onchain_query.py +4 -4
- intentkit/skills/carv/token_info_and_price.py +5 -5
- intentkit/skills/casino/base.py +1 -3
- intentkit/skills/casino/deck_draw.py +1 -2
- intentkit/skills/casino/deck_shuffle.py +1 -2
- intentkit/skills/casino/dice_roll.py +1 -2
- intentkit/skills/cdp/__init__.py +3 -5
- intentkit/skills/cdp/base.py +1 -3
- intentkit/skills/chainlist/base.py +1 -3
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/common/base.py +1 -3
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/cookiefun/base.py +1 -2
- intentkit/skills/cookiefun/get_account_details.py +7 -7
- intentkit/skills/cookiefun/get_account_feed.py +19 -19
- intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
- intentkit/skills/cookiefun/get_sectors.py +3 -3
- intentkit/skills/cookiefun/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +6 -6
- intentkit/skills/cryptocompare/fetch_news.py +3 -4
- intentkit/skills/cryptocompare/fetch_price.py +5 -6
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +3 -4
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +3 -4
- intentkit/skills/cryptocompare/fetch_top_volume.py +3 -4
- intentkit/skills/cryptocompare/fetch_trading_signals.py +4 -5
- intentkit/skills/cryptopanic/__init__.py +4 -4
- intentkit/skills/cryptopanic/base.py +1 -3
- intentkit/skills/cryptopanic/fetch_crypto_news.py +3 -5
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +3 -3
- intentkit/skills/dapplooker/base.py +1 -3
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +5 -6
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +6 -8
- intentkit/skills/defillama/coins/fetch_block.py +4 -6
- intentkit/skills/defillama/coins/fetch_current_prices.py +6 -8
- intentkit/skills/defillama/coins/fetch_first_price.py +5 -7
- intentkit/skills/defillama/coins/fetch_historical_prices.py +7 -9
- intentkit/skills/defillama/coins/fetch_price_chart.py +7 -9
- intentkit/skills/defillama/coins/fetch_price_percentage.py +5 -7
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +22 -24
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +14 -16
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +6 -8
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +3 -5
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +5 -7
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +2 -4
- intentkit/skills/defillama/tvl/fetch_chains.py +7 -9
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +2 -4
- intentkit/skills/defillama/tvl/fetch_protocol.py +30 -36
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +1 -3
- intentkit/skills/defillama/tvl/fetch_protocols.py +35 -43
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +40 -46
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +33 -35
- intentkit/skills/defillama/volumes/fetch_options_overview.py +22 -26
- intentkit/skills/defillama/yields/fetch_pool_chart.py +8 -10
- intentkit/skills/defillama/yields/fetch_pools.py +24 -28
- intentkit/skills/dexscreener/__init__.py +2 -2
- intentkit/skills/dexscreener/base.py +3 -3
- intentkit/skills/dexscreener/get_pair_info.py +2 -2
- intentkit/skills/dexscreener/get_token_pairs.py +2 -2
- intentkit/skills/dexscreener/get_tokens_info.py +5 -5
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/search_token.py +182 -182
- intentkit/skills/dexscreener/utils.py +15 -14
- intentkit/skills/dune_analytics/__init__.py +4 -4
- intentkit/skills/dune_analytics/base.py +1 -3
- intentkit/skills/dune_analytics/fetch_kol_buys.py +4 -4
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +5 -5
- intentkit/skills/elfa/base.py +1 -3
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/stats.py +4 -4
- intentkit/skills/elfa/tokens.py +12 -12
- intentkit/skills/elfa/utils.py +25 -27
- intentkit/skills/enso/__init__.py +2 -2
- intentkit/skills/enso/base.py +5 -8
- intentkit/skills/enso/best_yield.py +4 -6
- intentkit/skills/enso/networks.py +1 -2
- intentkit/skills/enso/prices.py +1 -3
- intentkit/skills/enso/route.py +1 -3
- intentkit/skills/enso/tokens.py +1 -3
- intentkit/skills/enso/wallet.py +5 -5
- intentkit/skills/erc20/__init__.py +4 -6
- intentkit/skills/erc721/__init__.py +4 -6
- intentkit/skills/firecrawl/base.py +1 -3
- intentkit/skills/firecrawl/clear.py +1 -2
- intentkit/skills/firecrawl/crawl.py +9 -10
- intentkit/skills/firecrawl/query.py +1 -2
- intentkit/skills/firecrawl/scrape.py +7 -8
- intentkit/skills/firecrawl/utils.py +13 -13
- intentkit/skills/github/base.py +1 -3
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/heurist/base.py +1 -3
- intentkit/skills/heurist/image_generation_animagine_xl.py +7 -8
- intentkit/skills/heurist/image_generation_arthemy_comics.py +7 -8
- intentkit/skills/heurist/image_generation_arthemy_real.py +7 -8
- intentkit/skills/heurist/image_generation_braindance.py +7 -8
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +7 -8
- intentkit/skills/heurist/image_generation_flux_1_dev.py +7 -8
- intentkit/skills/heurist/image_generation_sdxl.py +7 -8
- intentkit/skills/http/base.py +1 -3
- intentkit/skills/http/get.py +7 -7
- intentkit/skills/http/post.py +9 -9
- intentkit/skills/http/put.py +9 -9
- intentkit/skills/lifi/__init__.py +4 -4
- intentkit/skills/lifi/base.py +1 -3
- intentkit/skills/lifi/token_execute.py +13 -13
- intentkit/skills/lifi/token_quote.py +6 -6
- intentkit/skills/lifi/utils.py +16 -16
- intentkit/skills/moralis/__init__.py +3 -3
- intentkit/skills/moralis/api.py +6 -7
- intentkit/skills/moralis/base.py +2 -4
- intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
- intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
- intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
- intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
- intentkit/skills/morpho/__init__.py +4 -6
- intentkit/skills/nation/__init__.py +2 -2
- intentkit/skills/nation/base.py +1 -3
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/onchain.py +2 -6
- intentkit/skills/openai/base.py +1 -3
- intentkit/skills/openai/dalle_image_generation.py +1 -3
- intentkit/skills/openai/gpt_image_generation.py +2 -3
- intentkit/skills/openai/gpt_image_to_image.py +2 -3
- intentkit/skills/openai/image_to_text.py +1 -2
- intentkit/skills/portfolio/base.py +6 -6
- intentkit/skills/portfolio/token_balances.py +21 -21
- intentkit/skills/portfolio/wallet_approvals.py +7 -7
- intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
- intentkit/skills/portfolio/wallet_history.py +21 -21
- intentkit/skills/portfolio/wallet_net_worth.py +13 -13
- intentkit/skills/portfolio/wallet_nfts.py +19 -19
- intentkit/skills/portfolio/wallet_profitability.py +7 -7
- intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
- intentkit/skills/portfolio/wallet_stats.py +3 -3
- intentkit/skills/portfolio/wallet_swaps.py +19 -19
- intentkit/skills/pyth/__init__.py +3 -5
- intentkit/skills/slack/base.py +2 -4
- intentkit/skills/slack/get_channel.py +8 -8
- intentkit/skills/slack/get_message.py +9 -9
- intentkit/skills/slack/schedule_message.py +5 -5
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/base.py +1 -3
- intentkit/skills/supabase/delete_data.py +4 -4
- intentkit/skills/supabase/fetch_data.py +12 -12
- intentkit/skills/supabase/insert_data.py +4 -4
- intentkit/skills/supabase/invoke_function.py +6 -6
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +4 -6
- intentkit/skills/system/add_autonomous_task.py +8 -10
- intentkit/skills/system/edit_autonomous_task.py +12 -14
- intentkit/skills/system/list_autonomous_tasks.py +1 -3
- intentkit/skills/tavily/base.py +1 -3
- intentkit/skills/tavily/tavily_extract.py +1 -2
- intentkit/skills/tavily/tavily_search.py +1 -3
- intentkit/skills/token/base.py +5 -5
- intentkit/skills/token/erc20_transfers.py +19 -19
- intentkit/skills/token/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/base.py +3 -4
- intentkit/skills/twitter/follow_user.py +1 -2
- intentkit/skills/twitter/get_mentions.py +3 -4
- intentkit/skills/twitter/get_timeline.py +1 -2
- intentkit/skills/twitter/get_user_by_username.py +1 -2
- intentkit/skills/twitter/get_user_tweets.py +2 -3
- intentkit/skills/twitter/like_tweet.py +1 -2
- intentkit/skills/twitter/post_tweet.py +3 -4
- intentkit/skills/twitter/reply_tweet.py +3 -4
- intentkit/skills/twitter/retweet.py +1 -2
- intentkit/skills/twitter/search_tweets.py +1 -2
- intentkit/skills/unrealspeech/base.py +1 -3
- intentkit/skills/unrealspeech/text_to_speech.py +8 -8
- intentkit/skills/venice_audio/__init__.py +8 -9
- intentkit/skills/venice_audio/base.py +3 -4
- intentkit/skills/venice_audio/input.py +41 -41
- intentkit/skills/venice_audio/venice_audio.py +6 -6
- intentkit/skills/venice_image/__init__.py +5 -5
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +3 -3
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/utils.py +77 -78
- intentkit/skills/web_scraper/base.py +1 -3
- intentkit/skills/web_scraper/document_indexer.py +1 -2
- intentkit/skills/web_scraper/scrape_and_index.py +4 -5
- intentkit/skills/web_scraper/utils.py +25 -26
- intentkit/skills/web_scraper/website_indexer.py +10 -11
- intentkit/skills/weth/__init__.py +4 -6
- intentkit/skills/wow/__init__.py +4 -6
- intentkit/skills/x402/__init__.py +2 -2
- intentkit/skills/x402/ask_agent.py +7 -7
- intentkit/skills/x402/base.py +2 -1
- intentkit/skills/x402/http_request.py +10 -10
- intentkit/skills/xmtp/base.py +3 -3
- intentkit/skills/xmtp/price.py +2 -2
- intentkit/skills/xmtp/swap.py +2 -4
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/error.py +2 -2
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +8 -9
- intentkit/utils/schema.py +5 -5
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/METADATA +3 -4
- intentkit-0.8.17.dev2.dist-info/RECORD +464 -0
- intentkit/models/generator.py +0 -347
- intentkit-0.8.17.dev1.dist-info/RECORD +0 -465
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/WHEEL +0 -0
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/licenses/LICENSE +0 -0
intentkit/models/generator.py
DELETED
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
"""Agent Generation Log Model.
|
|
2
|
-
|
|
3
|
-
This module defines the database models for logging agent generation operations,
|
|
4
|
-
including token usage, prompts, AI responses, and generation metadata.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from datetime import datetime, timezone
|
|
8
|
-
from typing import Annotated, Optional
|
|
9
|
-
|
|
10
|
-
from epyxid import XID
|
|
11
|
-
from intentkit.models.base import Base
|
|
12
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
13
|
-
from sqlalchemy import (
|
|
14
|
-
Boolean,
|
|
15
|
-
Column,
|
|
16
|
-
DateTime,
|
|
17
|
-
Integer,
|
|
18
|
-
String,
|
|
19
|
-
Text,
|
|
20
|
-
func,
|
|
21
|
-
select,
|
|
22
|
-
)
|
|
23
|
-
from sqlalchemy.dialects.postgresql import JSON, JSONB
|
|
24
|
-
from sqlalchemy.ext.asyncio import AsyncSession
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class AgentGenerationLogTable(Base):
|
|
28
|
-
"""Agent generation log database table model."""
|
|
29
|
-
|
|
30
|
-
__tablename__ = "agent_generation_logs"
|
|
31
|
-
|
|
32
|
-
id = Column(
|
|
33
|
-
String,
|
|
34
|
-
primary_key=True,
|
|
35
|
-
)
|
|
36
|
-
user_id = Column(
|
|
37
|
-
String,
|
|
38
|
-
nullable=True,
|
|
39
|
-
)
|
|
40
|
-
prompt = Column(
|
|
41
|
-
Text,
|
|
42
|
-
nullable=False,
|
|
43
|
-
)
|
|
44
|
-
existing_agent_id = Column(
|
|
45
|
-
String,
|
|
46
|
-
nullable=True,
|
|
47
|
-
)
|
|
48
|
-
is_update = Column(
|
|
49
|
-
Boolean,
|
|
50
|
-
default=False,
|
|
51
|
-
nullable=False,
|
|
52
|
-
)
|
|
53
|
-
generated_agent_schema = Column(
|
|
54
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
55
|
-
nullable=True,
|
|
56
|
-
)
|
|
57
|
-
identified_skills = Column(
|
|
58
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
59
|
-
nullable=True,
|
|
60
|
-
)
|
|
61
|
-
# LLM API response data
|
|
62
|
-
llm_model = Column(
|
|
63
|
-
String,
|
|
64
|
-
nullable=True,
|
|
65
|
-
)
|
|
66
|
-
total_tokens = Column(
|
|
67
|
-
Integer,
|
|
68
|
-
default=0,
|
|
69
|
-
)
|
|
70
|
-
input_tokens = Column(
|
|
71
|
-
Integer,
|
|
72
|
-
default=0,
|
|
73
|
-
)
|
|
74
|
-
cached_input_tokens = Column(
|
|
75
|
-
Integer,
|
|
76
|
-
default=0,
|
|
77
|
-
)
|
|
78
|
-
output_tokens = Column(
|
|
79
|
-
Integer,
|
|
80
|
-
default=0,
|
|
81
|
-
)
|
|
82
|
-
input_tokens_details = Column(
|
|
83
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
84
|
-
nullable=True,
|
|
85
|
-
)
|
|
86
|
-
completion_tokens_details = Column(
|
|
87
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
88
|
-
nullable=True,
|
|
89
|
-
)
|
|
90
|
-
# Performance metrics
|
|
91
|
-
generation_time_ms = Column(
|
|
92
|
-
Integer,
|
|
93
|
-
nullable=True,
|
|
94
|
-
)
|
|
95
|
-
retry_count = Column(
|
|
96
|
-
Integer,
|
|
97
|
-
default=0,
|
|
98
|
-
)
|
|
99
|
-
validation_errors = Column(
|
|
100
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
101
|
-
nullable=True,
|
|
102
|
-
)
|
|
103
|
-
# Status and results
|
|
104
|
-
success = Column(
|
|
105
|
-
Boolean,
|
|
106
|
-
default=False,
|
|
107
|
-
nullable=False,
|
|
108
|
-
)
|
|
109
|
-
error_message = Column(
|
|
110
|
-
Text,
|
|
111
|
-
nullable=True,
|
|
112
|
-
)
|
|
113
|
-
# Timestamps
|
|
114
|
-
created_at = Column(
|
|
115
|
-
DateTime(timezone=True),
|
|
116
|
-
nullable=False,
|
|
117
|
-
server_default=func.now(),
|
|
118
|
-
)
|
|
119
|
-
completed_at = Column(
|
|
120
|
-
DateTime(timezone=True),
|
|
121
|
-
nullable=True,
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
class AgentGenerationLogCreate(BaseModel):
|
|
126
|
-
"""Model for creating agent generation log entries."""
|
|
127
|
-
|
|
128
|
-
model_config = ConfigDict(
|
|
129
|
-
use_enum_values=True,
|
|
130
|
-
from_attributes=True,
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
id: Annotated[
|
|
134
|
-
str,
|
|
135
|
-
Field(
|
|
136
|
-
default_factory=lambda: str(XID()),
|
|
137
|
-
description="Unique identifier for the generation log",
|
|
138
|
-
),
|
|
139
|
-
]
|
|
140
|
-
user_id: Optional[str] = Field(
|
|
141
|
-
None,
|
|
142
|
-
description="User ID who initiated the generation",
|
|
143
|
-
)
|
|
144
|
-
prompt: str = Field(
|
|
145
|
-
...,
|
|
146
|
-
description="The original prompt used for generation",
|
|
147
|
-
)
|
|
148
|
-
existing_agent_id: Optional[str] = Field(
|
|
149
|
-
None,
|
|
150
|
-
description="ID of existing agent if this is an update operation",
|
|
151
|
-
)
|
|
152
|
-
is_update: bool = Field(
|
|
153
|
-
False,
|
|
154
|
-
description="Whether this is an update to existing agent",
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
class AgentGenerationLog(BaseModel):
|
|
159
|
-
"""Agent generation log model."""
|
|
160
|
-
|
|
161
|
-
model_config = ConfigDict(
|
|
162
|
-
use_enum_values=True,
|
|
163
|
-
from_attributes=True,
|
|
164
|
-
)
|
|
165
|
-
|
|
166
|
-
id: str
|
|
167
|
-
user_id: Optional[str] = None
|
|
168
|
-
prompt: str
|
|
169
|
-
existing_agent_id: Optional[str] = None
|
|
170
|
-
is_update: bool = False
|
|
171
|
-
generated_agent_schema: Optional[dict] = None
|
|
172
|
-
identified_skills: Optional[dict] = None
|
|
173
|
-
llm_model: Optional[str] = None
|
|
174
|
-
total_tokens: int = 0
|
|
175
|
-
input_tokens: int = 0
|
|
176
|
-
cached_input_tokens: int = 0
|
|
177
|
-
output_tokens: int = 0
|
|
178
|
-
input_tokens_details: Optional[dict] = None
|
|
179
|
-
completion_tokens_details: Optional[dict] = None
|
|
180
|
-
generation_time_ms: Optional[int] = None
|
|
181
|
-
retry_count: int = 0
|
|
182
|
-
validation_errors: Optional[dict] = None
|
|
183
|
-
success: bool = False
|
|
184
|
-
error_message: Optional[str] = None
|
|
185
|
-
created_at: datetime
|
|
186
|
-
completed_at: Optional[datetime] = None
|
|
187
|
-
|
|
188
|
-
@classmethod
|
|
189
|
-
async def create(
|
|
190
|
-
cls,
|
|
191
|
-
session: AsyncSession,
|
|
192
|
-
log_data: AgentGenerationLogCreate,
|
|
193
|
-
) -> "AgentGenerationLog":
|
|
194
|
-
"""Create a new agent generation log entry.
|
|
195
|
-
|
|
196
|
-
Args:
|
|
197
|
-
session: Database session
|
|
198
|
-
log_data: Log data to create
|
|
199
|
-
|
|
200
|
-
Returns:
|
|
201
|
-
Created log instance
|
|
202
|
-
"""
|
|
203
|
-
# Create database record
|
|
204
|
-
log_record = AgentGenerationLogTable(
|
|
205
|
-
id=log_data.id,
|
|
206
|
-
user_id=log_data.user_id,
|
|
207
|
-
prompt=log_data.prompt,
|
|
208
|
-
existing_agent_id=log_data.existing_agent_id,
|
|
209
|
-
is_update=log_data.is_update,
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
session.add(log_record)
|
|
213
|
-
await session.commit()
|
|
214
|
-
await session.refresh(log_record)
|
|
215
|
-
|
|
216
|
-
return cls.model_validate(log_record)
|
|
217
|
-
|
|
218
|
-
async def update_completion(
|
|
219
|
-
self,
|
|
220
|
-
session: AsyncSession,
|
|
221
|
-
generated_agent_schema: Optional[dict] = None,
|
|
222
|
-
identified_skills: Optional[dict] = None,
|
|
223
|
-
llm_model: Optional[str] = None,
|
|
224
|
-
total_tokens: int = 0,
|
|
225
|
-
input_tokens: int = 0,
|
|
226
|
-
cached_input_tokens: int = 0,
|
|
227
|
-
output_tokens: int = 0,
|
|
228
|
-
input_tokens_details: Optional[dict] = None,
|
|
229
|
-
completion_tokens_details: Optional[dict] = None,
|
|
230
|
-
generation_time_ms: Optional[int] = None,
|
|
231
|
-
retry_count: int = 0,
|
|
232
|
-
validation_errors: Optional[dict] = None,
|
|
233
|
-
success: bool = False,
|
|
234
|
-
error_message: Optional[str] = None,
|
|
235
|
-
) -> None:
|
|
236
|
-
"""Update the log entry with completion data.
|
|
237
|
-
|
|
238
|
-
Args:
|
|
239
|
-
session: Database session
|
|
240
|
-
generated_agent_schema: The generated agent schema
|
|
241
|
-
identified_skills: Skills identified during generation
|
|
242
|
-
llm_model: LLM model used
|
|
243
|
-
total_tokens: Total tokens used
|
|
244
|
-
input_tokens: Input tokens used
|
|
245
|
-
cached_input_tokens: Cached input tokens used (for cost calculation)
|
|
246
|
-
output_tokens: Output tokens used
|
|
247
|
-
input_tokens_details: Detailed input token breakdown
|
|
248
|
-
completion_tokens_details: Detailed completion token breakdown
|
|
249
|
-
generation_time_ms: Generation time in milliseconds
|
|
250
|
-
retry_count: Number of retries attempted
|
|
251
|
-
validation_errors: Any validation errors encountered
|
|
252
|
-
success: Whether generation was successful
|
|
253
|
-
error_message: Error message if generation failed
|
|
254
|
-
"""
|
|
255
|
-
# Get the database record
|
|
256
|
-
log_record = await session.get(AgentGenerationLogTable, self.id)
|
|
257
|
-
if not log_record:
|
|
258
|
-
return
|
|
259
|
-
|
|
260
|
-
# Update fields
|
|
261
|
-
log_record.generated_agent_schema = generated_agent_schema
|
|
262
|
-
log_record.identified_skills = identified_skills
|
|
263
|
-
log_record.llm_model = llm_model
|
|
264
|
-
log_record.total_tokens = total_tokens
|
|
265
|
-
log_record.input_tokens = input_tokens
|
|
266
|
-
log_record.cached_input_tokens = cached_input_tokens
|
|
267
|
-
log_record.output_tokens = output_tokens
|
|
268
|
-
log_record.input_tokens_details = input_tokens_details
|
|
269
|
-
log_record.completion_tokens_details = completion_tokens_details
|
|
270
|
-
log_record.generation_time_ms = generation_time_ms
|
|
271
|
-
log_record.retry_count = retry_count
|
|
272
|
-
log_record.validation_errors = validation_errors
|
|
273
|
-
log_record.success = success
|
|
274
|
-
log_record.error_message = error_message
|
|
275
|
-
log_record.completed_at = datetime.now(timezone.utc)
|
|
276
|
-
|
|
277
|
-
session.add(log_record)
|
|
278
|
-
await session.commit()
|
|
279
|
-
await session.refresh(log_record)
|
|
280
|
-
|
|
281
|
-
# Update this instance
|
|
282
|
-
self.generated_agent_schema = log_record.generated_agent_schema
|
|
283
|
-
self.identified_skills = log_record.identified_skills
|
|
284
|
-
self.llm_model = log_record.llm_model
|
|
285
|
-
self.total_tokens = log_record.total_tokens
|
|
286
|
-
self.input_tokens = log_record.input_tokens
|
|
287
|
-
self.cached_input_tokens = log_record.cached_input_tokens
|
|
288
|
-
self.output_tokens = log_record.output_tokens
|
|
289
|
-
self.input_tokens_details = log_record.input_tokens_details
|
|
290
|
-
self.completion_tokens_details = log_record.completion_tokens_details
|
|
291
|
-
self.generation_time_ms = log_record.generation_time_ms
|
|
292
|
-
self.retry_count = log_record.retry_count
|
|
293
|
-
self.validation_errors = log_record.validation_errors
|
|
294
|
-
self.success = log_record.success
|
|
295
|
-
self.error_message = log_record.error_message
|
|
296
|
-
self.completed_at = log_record.completed_at
|
|
297
|
-
|
|
298
|
-
@classmethod
|
|
299
|
-
async def get_by_id(
|
|
300
|
-
cls,
|
|
301
|
-
session: AsyncSession,
|
|
302
|
-
log_id: str,
|
|
303
|
-
) -> Optional["AgentGenerationLog"]:
|
|
304
|
-
"""Get an agent generation log by ID.
|
|
305
|
-
|
|
306
|
-
Args:
|
|
307
|
-
session: Database session
|
|
308
|
-
log_id: Log ID
|
|
309
|
-
|
|
310
|
-
Returns:
|
|
311
|
-
Log instance if found, None otherwise
|
|
312
|
-
"""
|
|
313
|
-
result = await session.execute(
|
|
314
|
-
select(AgentGenerationLogTable).where(AgentGenerationLogTable.id == log_id)
|
|
315
|
-
)
|
|
316
|
-
log_record = result.scalar_one_or_none()
|
|
317
|
-
|
|
318
|
-
if log_record:
|
|
319
|
-
return cls.model_validate(log_record)
|
|
320
|
-
return None
|
|
321
|
-
|
|
322
|
-
@classmethod
|
|
323
|
-
async def get_by_user(
|
|
324
|
-
cls,
|
|
325
|
-
session: AsyncSession,
|
|
326
|
-
user_id: str,
|
|
327
|
-
limit: int = 50,
|
|
328
|
-
) -> list["AgentGenerationLog"]:
|
|
329
|
-
"""Get agent generation logs for a user.
|
|
330
|
-
|
|
331
|
-
Args:
|
|
332
|
-
session: Database session
|
|
333
|
-
user_id: User ID
|
|
334
|
-
limit: Maximum number of logs to return
|
|
335
|
-
|
|
336
|
-
Returns:
|
|
337
|
-
List of log instances
|
|
338
|
-
"""
|
|
339
|
-
result = await session.execute(
|
|
340
|
-
select(AgentGenerationLogTable)
|
|
341
|
-
.where(AgentGenerationLogTable.user_id == user_id)
|
|
342
|
-
.order_by(AgentGenerationLogTable.created_at.desc())
|
|
343
|
-
.limit(limit)
|
|
344
|
-
)
|
|
345
|
-
log_records = result.scalars().all()
|
|
346
|
-
|
|
347
|
-
return [cls.model_validate(record) for record in log_records]
|