intentkit 0.7.5.dev20__py3-none-any.whl → 0.7.5.dev22__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/config/config.py +1 -0
- intentkit/core/engine.py +10 -11
- intentkit/models/agent.py +84 -56
- intentkit/models/agent_schema.json +1 -146
- intentkit/models/llm.csv +5 -0
- intentkit/models/llm.py +36 -3
- intentkit/skills/acolyt/schema.json +4 -3
- intentkit/skills/aixbt/schema.json +4 -4
- intentkit/skills/allora/schema.json +3 -2
- intentkit/skills/basename/schema.json +2 -1
- intentkit/skills/carv/schema.json +134 -137
- intentkit/skills/casino/schema.json +0 -1
- intentkit/skills/cdp/schema.json +2 -1
- intentkit/skills/chainlist/schema.json +3 -5
- intentkit/skills/common/schema.json +2 -2
- intentkit/skills/cookiefun/schema.json +2 -4
- intentkit/skills/cryptocompare/schema.json +3 -3
- intentkit/skills/cryptopanic/schema.json +105 -103
- intentkit/skills/dapplooker/schema.json +3 -5
- intentkit/skills/defillama/schema.json +5 -1
- intentkit/skills/dexscreener/schema.json +91 -93
- intentkit/skills/dune_analytics/schema.json +104 -99
- intentkit/skills/elfa/schema.json +3 -2
- intentkit/skills/enso/schema.json +3 -2
- intentkit/skills/erc20/schema.json +2 -1
- intentkit/skills/erc721/schema.json +2 -1
- intentkit/skills/firecrawl/schema.json +2 -6
- intentkit/skills/github/schema.json +3 -4
- intentkit/skills/heurist/schema.json +2 -2
- intentkit/skills/http/schema.json +4 -5
- intentkit/skills/lifi/schema.json +17 -8
- intentkit/skills/moralis/schema.json +7 -2
- intentkit/skills/morpho/schema.json +1 -1
- intentkit/skills/nation/schema.json +4 -3
- intentkit/skills/openai/schema.json +2 -3
- intentkit/skills/portfolio/schema.json +3 -5
- intentkit/skills/pyth/schema.json +3 -1
- intentkit/skills/slack/schema.json +2 -2
- intentkit/skills/supabase/schema.json +2 -3
- intentkit/skills/superfluid/schema.json +1 -1
- intentkit/skills/system/schema.json +2 -4
- intentkit/skills/tavily/schema.json +3 -5
- intentkit/skills/token/schema.json +3 -6
- intentkit/skills/twitter/schema.json +2 -2
- intentkit/skills/unrealspeech/schema.json +2 -5
- intentkit/skills/venice_audio/schema.json +151 -152
- intentkit/skills/venice_image/schema.json +267 -267
- intentkit/skills/web_scraper/schema.json +2 -6
- intentkit/skills/weth/schema.json +2 -1
- intentkit/skills/wow/schema.json +1 -1
- intentkit/skills/xmtp/schema.json +69 -71
- {intentkit-0.7.5.dev20.dist-info → intentkit-0.7.5.dev22.dist-info}/METADATA +1 -1
- {intentkit-0.7.5.dev20.dist-info → intentkit-0.7.5.dev22.dist-info}/RECORD +56 -56
- {intentkit-0.7.5.dev20.dist-info → intentkit-0.7.5.dev22.dist-info}/WHEEL +0 -0
- {intentkit-0.7.5.dev20.dist-info → intentkit-0.7.5.dev22.dist-info}/licenses/LICENSE +0 -0
intentkit/__init__.py
CHANGED
intentkit/config/config.py
CHANGED
|
@@ -92,6 +92,7 @@ class Config:
|
|
|
92
92
|
self.eternal_api_key = self.load("ETERNAL_API_KEY")
|
|
93
93
|
self.reigent_api_key = self.load("REIGENT_API_KEY")
|
|
94
94
|
self.venice_api_key = self.load("VENICE_API_KEY")
|
|
95
|
+
self.gatewayz_api_key = self.load("GATEWAYZ_API_KEY")
|
|
95
96
|
# LLM Config
|
|
96
97
|
self.system_prompt = self.load("SYSTEM_PROMPT")
|
|
97
98
|
self.intentkit_prompt = self.load("INTENTKIT_PROMPT")
|
intentkit/core/engine.py
CHANGED
|
@@ -422,8 +422,8 @@ async def stream_agent_raw(
|
|
|
422
422
|
input_message = re.sub(r"\b@web\b", "", input_message).strip()
|
|
423
423
|
|
|
424
424
|
# content to llm
|
|
425
|
-
|
|
426
|
-
|
|
425
|
+
messages = [
|
|
426
|
+
HumanMessage(content=input_message),
|
|
427
427
|
]
|
|
428
428
|
# if the model doesn't natively support image parsing, add the image URLs to the message
|
|
429
429
|
if image_urls:
|
|
@@ -431,23 +431,22 @@ async def stream_agent_raw(
|
|
|
431
431
|
agent.has_image_parser_skill(is_private=is_private)
|
|
432
432
|
and not model.supports_image_input
|
|
433
433
|
):
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
434
|
+
image_urls_text = "\n".join(image_urls)
|
|
435
|
+
input_message += f"\n\nImages:\n{image_urls_text}"
|
|
436
|
+
messages = [
|
|
437
|
+
HumanMessage(content=input_message),
|
|
437
438
|
]
|
|
438
439
|
else:
|
|
439
440
|
# anyway, pass it directly to LLM
|
|
440
|
-
|
|
441
|
+
messages.extend(
|
|
441
442
|
[
|
|
442
|
-
|
|
443
|
+
HumanMessage(
|
|
444
|
+
content={"type": "image_url", "image_url": {"url": image_url}}
|
|
445
|
+
)
|
|
443
446
|
for image_url in image_urls
|
|
444
447
|
]
|
|
445
448
|
)
|
|
446
449
|
|
|
447
|
-
messages = [
|
|
448
|
-
HumanMessage(content=content),
|
|
449
|
-
]
|
|
450
|
-
|
|
451
450
|
# stream config
|
|
452
451
|
thread_id = f"{user_message.agent_id}-{user_message.chat_id}"
|
|
453
452
|
stream_config = {
|
intentkit/models/agent.py
CHANGED
|
@@ -1466,81 +1466,109 @@ class Agent(AgentCreate, AgentPublicInfo):
|
|
|
1466
1466
|
):
|
|
1467
1467
|
model_property["default"] = new_enum[0]
|
|
1468
1468
|
|
|
1469
|
-
# Process skills property using
|
|
1469
|
+
# Process skills property using data from Skill.get_all instead of agent_schema.json
|
|
1470
1470
|
skills_property = schema.get("properties", {}).get("skills", {})
|
|
1471
|
-
skills_properties = skills_property.get("properties", {})
|
|
1472
1471
|
|
|
1473
|
-
|
|
1474
|
-
|
|
1472
|
+
# Build skill_states_map from database
|
|
1473
|
+
skill_states_map: dict[str, dict[str, Skill]] = {}
|
|
1474
|
+
for skill_model in await Skill.get_all(db):
|
|
1475
|
+
if not skill_model.config_name:
|
|
1476
|
+
continue
|
|
1477
|
+
category_states = skill_states_map.setdefault(skill_model.category, {})
|
|
1478
|
+
if skill_model.enabled:
|
|
1479
|
+
category_states[skill_model.config_name] = skill_model
|
|
1480
|
+
else:
|
|
1481
|
+
category_states.pop(skill_model.config_name, None)
|
|
1475
1482
|
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
category_states = skill_states_map.setdefault(
|
|
1480
|
-
skill_model.category, {}
|
|
1481
|
-
)
|
|
1482
|
-
if skill_model.enabled:
|
|
1483
|
-
category_states[skill_model.config_name] = skill_model
|
|
1484
|
-
else:
|
|
1485
|
-
category_states.pop(skill_model.config_name, None)
|
|
1483
|
+
enabled_categories = {
|
|
1484
|
+
category for category, states in skill_states_map.items() if states
|
|
1485
|
+
}
|
|
1486
1486
|
|
|
1487
|
-
|
|
1488
|
-
|
|
1487
|
+
# Calculate price levels and skills data
|
|
1488
|
+
category_avg_price_levels = {}
|
|
1489
|
+
skills_data = {}
|
|
1490
|
+
for category, states in skill_states_map.items():
|
|
1491
|
+
if not states:
|
|
1492
|
+
continue
|
|
1493
|
+
price_levels = [
|
|
1494
|
+
state.price_level
|
|
1495
|
+
for state in states.values()
|
|
1496
|
+
if state.price_level is not None
|
|
1497
|
+
]
|
|
1498
|
+
if price_levels:
|
|
1499
|
+
category_avg_price_levels[category] = int(
|
|
1500
|
+
sum(price_levels) / len(price_levels)
|
|
1501
|
+
)
|
|
1502
|
+
skills_data[category] = {
|
|
1503
|
+
config_name: state.price_level
|
|
1504
|
+
for config_name, state in states.items()
|
|
1489
1505
|
}
|
|
1490
1506
|
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1507
|
+
# Dynamically generate skills_properties from Skill.get_all data
|
|
1508
|
+
skills_properties = {}
|
|
1509
|
+
current_dir = Path(__file__).parent
|
|
1510
|
+
|
|
1511
|
+
for category in enabled_categories:
|
|
1512
|
+
# Skip if filtered for auto-generation
|
|
1513
|
+
skill_schema_path = current_dir / f"../skills/{category}/schema.json"
|
|
1514
|
+
if skill_schema_path.exists():
|
|
1515
|
+
try:
|
|
1516
|
+
with open(skill_schema_path) as f:
|
|
1517
|
+
skill_schema = json.load(f)
|
|
1518
|
+
|
|
1519
|
+
# Check if this skill should be filtered for owner API requirements
|
|
1520
|
+
if filter_owner_api_skills and cls._is_agent_owner_only_skill(
|
|
1521
|
+
skill_schema
|
|
1522
|
+
):
|
|
1523
|
+
logger.info(
|
|
1524
|
+
f"Filtered out skill '{category}' from auto-generation: requires agent owner API key"
|
|
1525
|
+
)
|
|
1526
|
+
continue
|
|
1527
|
+
|
|
1528
|
+
# Create skill property with embedded schema instead of reference
|
|
1529
|
+
# Load and embed the full skill schema directly
|
|
1530
|
+
base_uri = f"file://{skill_schema_path}"
|
|
1531
|
+
with open(skill_schema_path) as f:
|
|
1532
|
+
embedded_skill_schema = jsonref.load(
|
|
1533
|
+
f, base_uri=base_uri, proxies=False, lazy_load=False
|
|
1534
|
+
)
|
|
1509
1535
|
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
logger.info(
|
|
1520
|
-
f"Filtered out skill '{skill_category}' from auto-generation: requires agent owner API key"
|
|
1521
|
-
)
|
|
1522
|
-
else:
|
|
1523
|
-
if skill_category in category_avg_price_levels:
|
|
1524
|
-
skills_properties[skill_category]["x-avg-price-level"] = (
|
|
1525
|
-
category_avg_price_levels[skill_category]
|
|
1536
|
+
skills_properties[category] = {
|
|
1537
|
+
"title": skill_schema.get("title", category.title()),
|
|
1538
|
+
**embedded_skill_schema, # Embed the full schema instead of using $ref
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1541
|
+
# Add price level information
|
|
1542
|
+
if category in category_avg_price_levels:
|
|
1543
|
+
skills_properties[category]["x-avg-price-level"] = (
|
|
1544
|
+
category_avg_price_levels[category]
|
|
1526
1545
|
)
|
|
1527
1546
|
|
|
1528
|
-
if
|
|
1547
|
+
if category in skills_data:
|
|
1548
|
+
# Add price level to states in the embedded schema
|
|
1529
1549
|
skill_states = (
|
|
1530
|
-
skills_properties[
|
|
1550
|
+
skills_properties[category]
|
|
1531
1551
|
.get("properties", {})
|
|
1532
1552
|
.get("states", {})
|
|
1533
1553
|
.get("properties", {})
|
|
1534
1554
|
)
|
|
1535
1555
|
for state_name, state_config in skill_states.items():
|
|
1536
1556
|
if (
|
|
1537
|
-
state_name in skills_data[
|
|
1538
|
-
and skills_data[
|
|
1539
|
-
is not None
|
|
1557
|
+
state_name in skills_data[category]
|
|
1558
|
+
and skills_data[category][state_name] is not None
|
|
1540
1559
|
):
|
|
1541
1560
|
state_config["x-price-level"] = skills_data[
|
|
1542
|
-
|
|
1561
|
+
category
|
|
1543
1562
|
][state_name]
|
|
1563
|
+
except (FileNotFoundError, json.JSONDecodeError) as e:
|
|
1564
|
+
logger.warning(
|
|
1565
|
+
f"Could not load schema for skill category '{category}': {e}"
|
|
1566
|
+
)
|
|
1567
|
+
continue
|
|
1568
|
+
|
|
1569
|
+
# Update the skills property in the schema
|
|
1570
|
+
if skills_property:
|
|
1571
|
+
skills_property["properties"] = skills_properties
|
|
1544
1572
|
|
|
1545
1573
|
# Log the changes for debugging
|
|
1546
1574
|
logger.debug(
|
|
@@ -321,152 +321,7 @@
|
|
|
321
321
|
"description": "Dict of skills and their corresponding configurations",
|
|
322
322
|
"x-group": "skills",
|
|
323
323
|
"x-inline": true,
|
|
324
|
-
"properties": {
|
|
325
|
-
"allora": {
|
|
326
|
-
"title": "Allora",
|
|
327
|
-
"$ref": "../skills/allora/schema.json"
|
|
328
|
-
},
|
|
329
|
-
"cdp": {
|
|
330
|
-
"title": "Coinbase Wallet",
|
|
331
|
-
"$ref": "../skills/cdp/schema.json"
|
|
332
|
-
},
|
|
333
|
-
"dapplooker": {
|
|
334
|
-
"title": "DappLooker",
|
|
335
|
-
"$ref": "../skills/dapplooker/schema.json"
|
|
336
|
-
},
|
|
337
|
-
"elfa": {
|
|
338
|
-
"title": "Elfa",
|
|
339
|
-
"$ref": "../skills/elfa/schema.json"
|
|
340
|
-
},
|
|
341
|
-
"openai": {
|
|
342
|
-
"title": "OpenAI",
|
|
343
|
-
"$ref": "../skills/openai/schema.json"
|
|
344
|
-
},
|
|
345
|
-
"portfolio": {
|
|
346
|
-
"title": "Blockchain Portfolio",
|
|
347
|
-
"$ref": "../skills/portfolio/schema.json"
|
|
348
|
-
},
|
|
349
|
-
"tavily": {
|
|
350
|
-
"title": "Tavily",
|
|
351
|
-
"$ref": "../skills/tavily/schema.json"
|
|
352
|
-
},
|
|
353
|
-
"token": {
|
|
354
|
-
"title": "Token Operations",
|
|
355
|
-
"$ref": "../skills/token/schema.json"
|
|
356
|
-
},
|
|
357
|
-
"twitter": {
|
|
358
|
-
"title": "X",
|
|
359
|
-
"$ref": "../skills/twitter/schema.json"
|
|
360
|
-
},
|
|
361
|
-
"xmtp": {
|
|
362
|
-
"title": "XMTP",
|
|
363
|
-
"$ref": "../skills/xmtp/schema.json"
|
|
364
|
-
},
|
|
365
|
-
"chainlist": {
|
|
366
|
-
"title": "Chainlist RPC Endpoints",
|
|
367
|
-
"$ref": "../skills/chainlist/schema.json"
|
|
368
|
-
},
|
|
369
|
-
"dexscreener": {
|
|
370
|
-
"title": "DEX Screener",
|
|
371
|
-
"$ref": "../skills/dexscreener/schema.json"
|
|
372
|
-
},
|
|
373
|
-
"heurist": {
|
|
374
|
-
"title": "Heurist",
|
|
375
|
-
"$ref": "../skills/heurist/schema.json"
|
|
376
|
-
},
|
|
377
|
-
"nation": {
|
|
378
|
-
"title": "Nation",
|
|
379
|
-
"$ref": "../skills/nation/schema.json"
|
|
380
|
-
},
|
|
381
|
-
"defillama": {
|
|
382
|
-
"title": "Defillama",
|
|
383
|
-
"$ref": "../skills/defillama/schema.json"
|
|
384
|
-
},
|
|
385
|
-
"enso": {
|
|
386
|
-
"title": "Enso",
|
|
387
|
-
"$ref": "../skills/enso/schema.json"
|
|
388
|
-
},
|
|
389
|
-
"common": {
|
|
390
|
-
"title": "Common",
|
|
391
|
-
"$ref": "../skills/common/schema.json"
|
|
392
|
-
},
|
|
393
|
-
"github": {
|
|
394
|
-
"title": "GitHub",
|
|
395
|
-
"$ref": "../skills/github/schema.json"
|
|
396
|
-
},
|
|
397
|
-
"moralis": {
|
|
398
|
-
"title": "Moralis",
|
|
399
|
-
"$ref": "../skills/moralis/schema.json"
|
|
400
|
-
},
|
|
401
|
-
"system": {
|
|
402
|
-
"title": "System",
|
|
403
|
-
"$ref": "../skills/system/schema.json"
|
|
404
|
-
},
|
|
405
|
-
"http": {
|
|
406
|
-
"title": "HTTP Client",
|
|
407
|
-
"$ref": "../skills/http/schema.json"
|
|
408
|
-
},
|
|
409
|
-
"web_scraper": {
|
|
410
|
-
"title": "Web Scraper & Content Indexing",
|
|
411
|
-
"$ref": "../skills/web_scraper/schema.json"
|
|
412
|
-
},
|
|
413
|
-
"firecrawl": {
|
|
414
|
-
"title": "Firecrawl Web Scraping",
|
|
415
|
-
"$ref": "../skills/firecrawl/schema.json"
|
|
416
|
-
},
|
|
417
|
-
"aixbt": {
|
|
418
|
-
"title": "AIXBT",
|
|
419
|
-
"$ref": "../skills/aixbt/schema.json"
|
|
420
|
-
},
|
|
421
|
-
"cookiefun": {
|
|
422
|
-
"title": "cookie.fun",
|
|
423
|
-
"$ref": "../skills/cookiefun/schema.json"
|
|
424
|
-
},
|
|
425
|
-
"cryptocompare": {
|
|
426
|
-
"title": "Cryptocompare",
|
|
427
|
-
"$ref": "../skills/cryptocompare/schema.json"
|
|
428
|
-
},
|
|
429
|
-
"cryptopanic": {
|
|
430
|
-
"title": "CryptoPanic",
|
|
431
|
-
"$ref": "../skills/cryptopanic/schema.json"
|
|
432
|
-
},
|
|
433
|
-
"dune_analytics": {
|
|
434
|
-
"title": "Dune Analytics",
|
|
435
|
-
"$ref": "../skills/dune_analytics/schema.json"
|
|
436
|
-
},
|
|
437
|
-
"slack": {
|
|
438
|
-
"title": "Slack",
|
|
439
|
-
"$ref": "../skills/slack/schema.json"
|
|
440
|
-
},
|
|
441
|
-
"supabase": {
|
|
442
|
-
"title": "Supabase",
|
|
443
|
-
"$ref": "../skills/supabase/schema.json"
|
|
444
|
-
},
|
|
445
|
-
"venice_audio": {
|
|
446
|
-
"title": "Venice Audio",
|
|
447
|
-
"$ref": "../skills/venice_audio/schema.json"
|
|
448
|
-
},
|
|
449
|
-
"venice_image": {
|
|
450
|
-
"title": "Venice Image",
|
|
451
|
-
"$ref": "../skills/venice_image/schema.json"
|
|
452
|
-
},
|
|
453
|
-
"unrealspeech": {
|
|
454
|
-
"title": "UnrealSpeech",
|
|
455
|
-
"$ref": "../skills/unrealspeech/schema.json"
|
|
456
|
-
},
|
|
457
|
-
"carv": {
|
|
458
|
-
"title": "Carv",
|
|
459
|
-
"$ref": "../skills/carv/schema.json"
|
|
460
|
-
},
|
|
461
|
-
"lifi": {
|
|
462
|
-
"title": "LiFi",
|
|
463
|
-
"$ref": "../skills/lifi/schema.json"
|
|
464
|
-
},
|
|
465
|
-
"casino": {
|
|
466
|
-
"title": "Casino",
|
|
467
|
-
"$ref": "../skills/casino/schema.json"
|
|
468
|
-
}
|
|
469
|
-
}
|
|
324
|
+
"properties": {}
|
|
470
325
|
},
|
|
471
326
|
"autonomous": {
|
|
472
327
|
"title": "Autonomous",
|
intentkit/models/llm.csv
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
id,name,provider,enabled,input_price,output_price,price_level,context_length,output_length,intelligence,speed,supports_image_input,supports_skill_calls,supports_structured_output,has_reasoning,supports_search,supports_temperature,supports_frequency_penalty,supports_presence_penalty,api_base,timeout
|
|
2
|
+
qwen/qwen3-235b-a22b-2507,Qwen3 235B A22B Instruct 2507,gatewayz,TRUE,0.1,0.6,1,262000,262000,4,2,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,https://api.gatewayz.ai/v1,300
|
|
3
|
+
google/gemini-2.5-flash,Gemini 2.5 Flash,gatewayz,TRUE,0.3,2.5,2,1050000,65000,4,2,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,https://api.gatewayz.ai/v1,300
|
|
4
|
+
x-ai/grok-4-fast:free,Grok 4 Fast,gatewayz,TRUE,0.2,0.5,1,128000,30000,4,2,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,https://api.gatewayz.ai/v1,300
|
|
5
|
+
x-ai/grok-code-fast-1,Grok Code Fast 1,gatewayz,TRUE,3,15,5,200000,64000,5,1,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,https://api.gatewayz.ai/v1,300
|
|
6
|
+
anthropic/claude-sonnet-4,Anthropic Claude Sonnet 4,gatewayz,TRUE,3,15,5,200000,64000,5,1,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,https://api.gatewayz.ai/v1,300
|
|
2
7
|
gpt-4o,GPT-4o,openai,FALSE,2.5,10,4,128000,4096,4,3,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,FALSE,,180
|
|
3
8
|
gpt-4o-mini,GPT-4o Mini,openai,FALSE,0.15,0.6,1,128000,4096,3,4,FALSE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,FALSE,,180
|
|
4
9
|
gpt-4.1-nano,GPT-4.1 Nano,openai,TRUE,0.1,0.4,1,128000,4096,3,5,FALSE,TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,,180
|
intentkit/models/llm.py
CHANGED
|
@@ -95,6 +95,7 @@ class LLMProvider(str, Enum):
|
|
|
95
95
|
OPENAI = "openai"
|
|
96
96
|
DEEPSEEK = "deepseek"
|
|
97
97
|
XAI = "xai"
|
|
98
|
+
GATEWAYZ = "gatewayz"
|
|
98
99
|
ETERNAL = "eternal"
|
|
99
100
|
REIGENT = "reigent"
|
|
100
101
|
VENICE = "venice"
|
|
@@ -105,9 +106,10 @@ class LLMProvider(str, Enum):
|
|
|
105
106
|
self.OPENAI: "OpenAI",
|
|
106
107
|
self.DEEPSEEK: "DeepSeek",
|
|
107
108
|
self.XAI: "xAI",
|
|
108
|
-
self.
|
|
109
|
-
self.
|
|
110
|
-
self.
|
|
109
|
+
self.GATEWAYZ: "Gatewayz",
|
|
110
|
+
self.ETERNAL: "Eternal",
|
|
111
|
+
self.REIGENT: "Reigent",
|
|
112
|
+
self.VENICE: "Venice",
|
|
111
113
|
}
|
|
112
114
|
return display_names.get(self, self.value)
|
|
113
115
|
|
|
@@ -462,6 +464,35 @@ class XAILLM(LLMModel):
|
|
|
462
464
|
return ChatXAI(**kwargs)
|
|
463
465
|
|
|
464
466
|
|
|
467
|
+
class GatewayzLLM(LLMModel):
|
|
468
|
+
"""Gatewayz AI LLM configuration."""
|
|
469
|
+
|
|
470
|
+
async def create_instance(self, config: Any) -> BaseChatModel:
|
|
471
|
+
"""Create and return a ChatOpenAI instance configured for Eternal AI."""
|
|
472
|
+
from langchain_openai import ChatOpenAI
|
|
473
|
+
|
|
474
|
+
info = await self.model_info()
|
|
475
|
+
|
|
476
|
+
kwargs = {
|
|
477
|
+
"model": self.model_name,
|
|
478
|
+
"api_key": config.gatewayz_api_key,
|
|
479
|
+
"base_url": info.api_base,
|
|
480
|
+
"timeout": info.timeout,
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
# Add optional parameters based on model support
|
|
484
|
+
if info.supports_temperature:
|
|
485
|
+
kwargs["temperature"] = self.temperature
|
|
486
|
+
|
|
487
|
+
if info.supports_frequency_penalty:
|
|
488
|
+
kwargs["frequency_penalty"] = self.frequency_penalty
|
|
489
|
+
|
|
490
|
+
if info.supports_presence_penalty:
|
|
491
|
+
kwargs["presence_penalty"] = self.presence_penalty
|
|
492
|
+
|
|
493
|
+
return ChatOpenAI(**kwargs)
|
|
494
|
+
|
|
495
|
+
|
|
465
496
|
class EternalLLM(LLMModel):
|
|
466
497
|
"""Eternal AI LLM configuration."""
|
|
467
498
|
|
|
@@ -575,6 +606,8 @@ async def create_llm_model(
|
|
|
575
606
|
return ReigentLLM(**base_params)
|
|
576
607
|
elif provider == LLMProvider.VENICE:
|
|
577
608
|
return VeniceLLM(**base_params)
|
|
609
|
+
elif provider == LLMProvider.GATEWAYZ:
|
|
610
|
+
return GatewayzLLM(**base_params)
|
|
578
611
|
else:
|
|
579
612
|
# Default to OpenAI
|
|
580
613
|
return OpenAILLM(**base_params)
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
"description": "Integration with Acolyt Oracle providing blockchain oracle services for accessing and verifying off-chain data with secure API connections",
|
|
6
6
|
"x-icon": "https://ai.service.crestal.dev/skills/acolyt/acolyt.jpg",
|
|
7
7
|
"x-tags": [
|
|
8
|
-
"
|
|
9
|
-
"
|
|
8
|
+
"Analytics",
|
|
9
|
+
"Crypto",
|
|
10
|
+
"DeFi"
|
|
10
11
|
],
|
|
11
12
|
"properties": {
|
|
12
13
|
"enabled": {
|
|
@@ -86,4 +87,4 @@
|
|
|
86
87
|
}
|
|
87
88
|
},
|
|
88
89
|
"additionalProperties": true
|
|
89
|
-
}
|
|
90
|
+
}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"description": "Cryptocurrency project data and analytics through the AIXBT API",
|
|
6
6
|
"x-icon": "https://ai.service.crestal.dev/skills/aixbt/aixbt.jpg",
|
|
7
7
|
"x-tags": [
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
8
|
+
"Analytics",
|
|
9
|
+
"Crypto",
|
|
10
|
+
"Knowledge Base"
|
|
11
11
|
],
|
|
12
12
|
"properties": {
|
|
13
13
|
"enabled": {
|
|
@@ -96,4 +96,4 @@
|
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"additionalProperties": true
|
|
99
|
-
}
|
|
99
|
+
}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
"description": "Integration with Allora API for blockchain-based price predictions and market forecasting services via Upshot's prediction markets",
|
|
6
6
|
"x-icon": "https://ai.service.crestal.dev/skills/allora/allora.jpeg",
|
|
7
7
|
"x-tags": [
|
|
8
|
-
"
|
|
8
|
+
"Analytics",
|
|
9
|
+
"Crypto"
|
|
9
10
|
],
|
|
10
11
|
"properties": {
|
|
11
12
|
"enabled": {
|
|
@@ -86,4 +87,4 @@
|
|
|
86
87
|
}
|
|
87
88
|
},
|
|
88
89
|
"additionalProperties": true
|
|
89
|
-
}
|
|
90
|
+
}
|