Skip to content

Estom/aiflex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

33 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AI Flex

ไธ€ไธชๅŠŸ่ƒฝๅผบๅคง็š„ Python AI Agent ๆก†ๆžถ๏ผŒไธ“ไธบ้‡‘่žๅˆ†ๆžๅ’Œ่‚ก็ฅจไบคๆ˜“ๅœบๆ™ฏ่ฎพ่ฎกใ€‚ๅฎž็Žฐไบ† ReAct ้ฃŽๆ ผ็š„ๆ™บ่ƒฝไฝ“่ฟ่กŒๆ—ถ๏ผŒๆ”ฏๆŒๅทฅๅ…ท่ฐƒ็”จใ€MCP ้›†ๆˆใ€็Ÿฅ่ฏ†ๅบ“ๆฃ€็ดขใ€่ฎฐๅฟ†็ฎก็†ๅ’ŒๆŠ€่ƒฝ็ณป็ปŸใ€‚

ๆ ธๅฟƒ็‰นๆ€ง

  • ReAct Agent Runtime: ๅŸบไบŽ OpenAI function-calling ็š„ๆ€่€ƒ-่กŒๅŠจๅพช็Žฏๅฎž็Žฐ
  • MCP ้›†ๆˆ: ๆ”ฏๆŒ Model Context Protocol ๆœๅŠกๅ™จ่ฟžๆŽฅๅ’Œๅทฅๅ…ท่ฐƒ็”จ
  • ็Ÿฅ่ฏ†ๅบ“ๆฃ€็ดข: ้›†ๆˆ RagFlow ่ฟ›่กŒ RAG ๆฃ€็ดขๅขžๅผบ
  • ่ฎฐๅฟ†็ฎก็†: ็ŸญๆœŸ/้•ฟๆœŸ่ฎฐๅฟ†ๆ”ฏๆŒ๏ผŒ่‡ชๅŠจ่ฎฐๅฟ†ๅˆๆˆ
  • ็ป้ชŒ็ณป็ปŸ: Agent ๅฏๅญฆไน ๅ’Œๅค็”จๅކๅฒ็ป้ชŒ
  • ๆŠ€่ƒฝ็ณป็ปŸ: ๅŸบไบŽ Markdown ็š„ๆŠ€่ƒฝๅฎšไน‰ๅ’Œ่‡ชๅŠจๅŠ ่ฝฝ
  • ๅคšๆ™บ่ƒฝไฝ“: ๆ”ฏๆŒ็ˆถๅญ Agent ๅง”ๆ‰˜ๆจกๅผๅ’ŒไปปๅŠกๅˆ†ๅ‘
  • ๅ†…็ฝฎๅทฅๅ…ท: ๆ–‡ไปถๆ“ไฝœใ€Shellใ€ๆœ็ดขใ€Todo ็ฎก็†็ญ‰ไธฐๅฏŒๅทฅๅ…ท้›†
  • ๅฃฐๆ˜Žๅผ้…็ฝฎ: ้€š่ฟ‡ JSON ๅ’Œ Markdown ้…็ฝฎ Agent๏ผŒๆ— ้œ€็ผ–็ 

็Žฏๅขƒ่ฆๆฑ‚

  • Python >= 3.11
  • UV ๅŒ…็ฎก็†ๅ™จ๏ผˆๆŽจ่๏ผ‰

ๅฟซ้€Ÿๅผ€ๅง‹

1. ๅฎ‰่ฃ…ไพ่ต–

# ไฝฟ็”จ UV ๅฎ‰่ฃ…๏ผˆๆŽจ่๏ผ‰
uv sync

# ๆˆ–ไฝฟ็”จ pip
pip install -e .

2. ้…็ฝฎ็Žฏๅขƒๅ˜้‡

cp .env.example .env
# ็ผ–่พ‘ .env ๆ–‡ไปถ๏ผŒ่ฎพ็ฝฎ OPENAI_API_KEY

3. ่ฟ่กŒๆผ”็คบ

# ่ฟ่กŒ้‡‘่žๅˆ†ๆžๆผ”็คบ
bash demo.sh

# ๆˆ–ไฝฟ็”จๅฟซ้€ŸๅฏๅŠจ่„šๆœฌ
bash start.sh

# ็›ดๆŽฅ่ฟ่กŒไปปๅŠก
python run_agent.py "็ฎ€่ฆๅˆ†ๆž่‹นๆžœๅ…ฌๅธ(AAPL)็š„ๅฝ“ๅ‰็Šถๅ†ต"

้กน็›ฎ็ป“ๆž„

aiflex/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ sdk/              # ๆ ธๅฟƒ SDK
โ”‚   โ”‚   โ”œโ”€โ”€ agent/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ core/            # Agent ๆ ธๅฟƒๅฎž็Žฐ
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ agent.py     # Agent ็ฑปๅ’Œ Builder
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ agent_runtime.py  # ReAct ่ฟ่กŒๆ—ถ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ tools/           # ๅ†…็ฝฎๅทฅๅ…ทๅฎž็Žฐ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ llm/             # LLM ๆŠฝ่ฑกๅฑ‚
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ skills/          # ๆŠ€่ƒฝๆณจๅ†Œ่กจ
โ”‚   โ”‚   โ”œโ”€โ”€ stores/              # ๆ•ฐๆฎๅญ˜ๅ‚จๅฑ‚
โ”‚   โ”‚   โ”œโ”€โ”€ integration/         # RagFlow ็ญ‰้›†ๆˆ
โ”‚   โ”‚   โ””โ”€โ”€ utils/               # ๅทฅๅ…ทๅ‡ฝๆ•ฐ
โ”‚   โ””โ”€โ”€ framework/        # ๅฃฐๆ˜Žๅผๆก†ๆžถ
โ”‚       โ”œโ”€โ”€ config/              # Pydantic ้…็ฝฎๆจกๅž‹
โ”‚       โ”œโ”€โ”€ loader/              # ้…็ฝฎๅŠ ่ฝฝๅ™จ
โ”‚       โ””โ”€โ”€ registry/            # Agent ๆณจๅ†Œไธญๅฟƒ
โ”œโ”€โ”€ tests/                       # ๆต‹่ฏ•ไปฃ็ 
โ”œโ”€โ”€ run_agent.py                 # Agent ่ฟ่กŒ่„šๆœฌ
โ”œโ”€โ”€ demo.sh                      # ๆผ”็คบ่„šๆœฌ
โ”œโ”€โ”€ start.sh                     # ๅฟซ้€ŸๅฏๅŠจ่„šๆœฌ
โ””โ”€โ”€ pyproject.toml               # ้กน็›ฎ้…็ฝฎ

ไฝฟ็”จๆ–นๅผ

ๆ–นๅผไธ€๏ผš็ผ–็จ‹ๅผ API

import asyncio
from sdk import AgentBuilder, OpenAILLM, OpenAIModelOptions

async def main():
    # ๅˆๅง‹ๅŒ– LLM
    llm = OpenAILLM(
        api_key="your-api-key",
        options=OpenAIModelOptions(model="gpt-4o-mini")
    )

    # ๅˆ›ๅปบ Agent
    agent = (
        AgentBuilder()
        .with_name("market-analyst")
        .with_description("่‚กๅธ‚ๅธ‚ๅœบๅˆ†ๆžๆ™บ่ƒฝไฝ“")
        .with_instructions("ไฝ ๆ˜ฏไธ€ไฝไธ“ไธš็š„่‚กๅธ‚ๅˆ†ๆžๅธˆ...")
        .with_llm(llm)
        .with_workspace_root("./workspace")
        .with_experience_enabled(True)
        .build()
    )

    # ่ฟ่กŒไปปๅŠก
    result = await agent.run("ๅˆ†ๆžไปŠๅคฉ็š„ๅธ‚ๅœบ็ƒญ็‚น")
    print(result.output)

asyncio.run(main())

ๆ–นๅผไบŒ๏ผšๅฃฐๆ˜Žๅผ้…็ฝฎ

ๅœจ agents/ ็›ฎๅฝ•ไธ‹ๅˆ›ๅปบ Agent ้…็ฝฎ๏ผš

agent.json

{
  "name": "financial_analyst",
  "version": "1.0.0",
  "description": "AI ้‡‘่žๅˆ†ๆžๅธˆ",
  "model": null,
  "prompt": {
    "file": "prompt.md"
  },
  "skills": {
    "sources": ["skills/"],
    "inline": []
  },
  "tools": {
    "auto_discover": true,
    "enabled": [],
    "disabled": []
  },
  "subagents": [
    {
      "name": "data_fetcher",
      "enabled": true
    }
  ],
  "runtime": {
    "max_steps": 10,
    "experience_enabled": false,
    "knowledge_base": null
  }
}

prompt.md

# Financial Analyst Agent

You are an expert financial analyst with deep knowledge of stock markets.

## Guidelines

1. Always provide data-driven analysis
2. Consider multiple perspectives before making recommendations
3. Use available tools to gather current market data

ๅˆ›ๅปบagent.py

import asyncio
import json
import os
from pathlib import Path

from dotenv import load_dotenv

from framework import AgentFrameworkLoader
from sdk import OpenAILLM, OpenAIModelOptions


def print_agent_config(agent) -> None:
    """ๆ‰“ๅฐ Agent ็š„ JSON ๆ ผๅผ้…็ฝฎไฟกๆฏ"""
    # ่Žทๅ–ๅทฅๅ…ทๅˆ—่กจ
    tools = agent.tool_registry.list()
    tools_list = [
        {"name": tool.name, "description": tool.description}
        for tool in tools
    ]

    # ่Žทๅ–ๆŠ€่ƒฝๅˆ—่กจ
    skills = agent.skill_registry.list()
    skills_list = [
        {"name": skill["name"], "description": skill.get("description", "")}
        for skill in skills
    ]

    config = {
        "name": agent.name,
        "description": agent.description,
        "max_steps": agent.config.max_steps,
        "instructions": agent.config.instructions,
        "workspace_root": agent.config.workspace_root,
        "model": {
            "name": agent.llm.model,
            "temperature": agent.llm.temperature,
            "max_tokens": agent.llm.max_tokens,
        },
        "tools_count": len(tools_list),
        "tools": tools_list,
        "skills_count": len(skills_list),
        "skills": skills_list,
        "children_count": len(agent.children),
        "children": [
            {"name": child.name, "description": child.description}
            for child in agent.children
        ],
        "experience_enabled": agent.experience_enabled,
        "mcp_lazy_load": agent.mcp_lazy_load,
        "mcp_servers": agent.mcp_servers,
        "codespace_enabled": agent.codespace_enabled,
        "skill_sources": agent.skill_sources,
    }

    print(json.dumps(config, indent=2, ensure_ascii=False))


async def main():
    # ๅŠ ่ฝฝ็Žฏๅขƒๅ˜้‡
    load_dotenv()

    # ไปŽ็Žฏๅขƒๅ˜้‡่ฏปๅ–้…็ฝฎ
    api_key = os.getenv("OPENAI_API_KEY")
    api_base = os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1")
    model = os.getenv("OPENAI_MODEL", "gpt-4o-mini")

    # ๅˆๅง‹ๅŒ– LLM
    llm = OpenAILLM(
        api_key=api_key,
        options=OpenAIModelOptions(model=model, api_base=api_base)
    )

    # ่Žทๅ–ๅฝ“ๅ‰็›ฎๅฝ•ไฝœไธบ Agent ็›ฎๅฝ•
    agent_dir = Path(__file__).parent.resolve()
    loader = AgentFrameworkLoader(agents_root=agent_dir, default_llm=llm)

    # ๅŠ ่ฝฝๅ•ไธช Agent
    agent = await loader.load()
    print(f"Loaded agent: {agent.name}")

    # ๆ‰“ๅฐ Agent ้…็ฝฎไฟกๆฏ
    print("\n" + "=" * 60)
    print("Agent Configuration (JSON):")
    print("=" * 60)
    print_agent_config(agent)
    print("=" * 60 + "\n")

    # ่ฟ่กŒไปปๅŠก
    result = await agent.run("Analyze AAPL stock")
    print(f"\nResult:\n{result.output}")


if __name__ == "__main__":
    asyncio.run(main())

็„ถๅŽไฝฟ็”จ่ฟ่กŒ่„šๆœฌ๏ผš

python agent.py "ๅˆ†ๆž่‹นๆžœๅ…ฌๅธ(AAPL)็š„ๅฝ“ๅ‰็Šถๅ†ต"

ๅ†…็ฝฎๅทฅๅ…ท

Agent ้ป˜่ฎคๅฏ็”จ็š„ๅทฅๅ…ท๏ผš

ๅทฅๅ…ทๅ ๅŠŸ่ƒฝ ่ฏดๆ˜Ž
find_files ๆ–‡ไปถๆœ็ดข ๆŒ‰ๆจกๅผๆœ็ดขๆ–‡ไปถ
read_file ่ฏปๅ–ๆ–‡ไปถ ่ฏปๅ–ๆ–‡ไปถๅ†…ๅฎน
write_file ๅ†™ๅ…ฅๆ–‡ไปถ ๅˆ›ๅปบๆˆ–่ฆ†็›–ๆ–‡ไปถ
edit_file ็ผ–่พ‘ๆ–‡ไปถ ็ฒพ็กฎๆ›ฟๆขๆ–‡ไปถๅ†…ๅฎน
list_directory ๅˆ—ๅ‡บ็›ฎๅฝ• ๅˆ—ๅ‡บ็›ฎๅฝ•ๅ†…ๅฎน
search_text ๆ–‡ๆœฌๆœ็ดข ๅœจๆ–‡ไปถไธญๆœ็ดขๆ–‡ๆœฌ
shell Shell ๅ‘ฝไปค ๆ‰ง่กŒ Shell ๅ‘ฝไปค
web_search Web ๆœ็ดข ๆœ็ดข็ฝ‘็ปœ๏ผˆ้œ€่ฆ API Key๏ผ‰
web_fetch URL ่Žทๅ– ่Žทๅ–็ฝ‘้กตๅ†…ๅฎน
todo_list Todo ็ฎก็† ็ฎก็†ๅพ…ๅŠžไบ‹้กน
knowledge_base_retrieve ็Ÿฅ่ฏ†ๅบ“ๆฃ€็ดข RagFlow RAG ๆฃ€็ดข
experience_query ็ป้ชŒๆŸฅ่ฏข ๆŸฅ่ฏขๅކๅฒ็ป้ชŒ
experience_update ็ป้ชŒๆ›ดๆ–ฐ ไฟๅญ˜ๆ–ฐ็ป้ชŒ

ๆŠ€่ƒฝ็ณป็ปŸ

ๆŠ€่ƒฝๆ˜ฏ Agent ็š„ไธ“ไธš็Ÿฅ่ฏ†ๆจกๅ—๏ผŒ้€š่ฟ‡ Markdown ๆ–‡ไปถๅฎšไน‰๏ผš

skills/market_analysis/SKILL.md

---
name: market_analysis
description: ้ซ˜็บงๅธ‚ๅœบๅˆ†ๆžๆŠ€ๆœฏ
version: 1.0.0
tags: [market, analysis, technical-indicators]
---

# Market Analysis Skill

## Capabilities

- Technical analysis (moving averages, RSI, MACD)
- Trend identification and evaluation
- Support and resistance levels
- Volume analysis

Agent ไผš่‡ชๅŠจๅŠ ่ฝฝ้…็ฝฎ็š„ๆŠ€่ƒฝ๏ผŒๅนถๅœจ็›ธๅ…ณไปปๅŠกไธญไฝฟ็”จใ€‚

ๅคšๆ™บ่ƒฝไฝ“็ณป็ปŸ

ๆ”ฏๆŒ็ˆถๅญ Agent ๅง”ๆ‰˜๏ผŒ็ˆถ Agent ๅฏไปฅๅฐ†ไปปๅŠกๅง”ๆ‰˜็ป™ๅญ Agent๏ผš

financial_analyst (็ˆถ)
    โ””โ”€โ”€ data_fetcher (ๅญ)

ๅญ Agent ไผš่ขซ่‡ชๅŠจๅŒ…่ฃ…ไธบๅทฅๅ…ท๏ผŒ็ˆถ Agent ๅฏไปฅๅƒ่ฐƒ็”จๅทฅๅ…ทไธ€ๆ ท่ฐƒ็”จๅญ Agentใ€‚

้…็ฝฎ้€‰้กน

็Žฏๅขƒๅ˜้‡ (.env)

# OpenAI ้…็ฝฎ
OPENAI_API_KEY=sk-...
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini

# RagFlow ็Ÿฅ่ฏ†ๅบ“๏ผˆๅฏ้€‰๏ผ‰
RAGFLOW_BASE_URL=http://ragflow.example.com:80
RAGFLOW_API_KEY=ragflow-...

# Web ๆœ็ดข๏ผˆๅฏ้€‰๏ผ‰
BOCHA_API_KEY=your-bocha-api-key

Agent Runtime ้…็ฝฎ

{
  "runtime": {
    "max_steps": 30,              // ๆœ€ๅคงๆ‰ง่กŒๆญฅๆ•ฐ
    "workspace_root": "./workspace", // ๅทฅไฝœ็›ฎๅฝ•
    "mcp_lazy_load": false,       // MCP ๅปถ่ฟŸๅŠ ่ฝฝ
    "experience_enabled": true,   // ๅฏ็”จ็ป้ชŒๅญฆไน 
    "compression_enabled": true,  // ๅฏ็”จ่ฎฐๅฟ†ๅŽ‹็ผฉ
    "knowledge_base": {           // ็Ÿฅ่ฏ†ๅบ“้…็ฝฎ
      "enabled": true,
      "similarity_threshold": 0.7
    }
  }
}

ๅ‘ฝไปค่กŒๅทฅๅ…ท

# ่ฟ่กŒไปปๅŠก
python run_agent.py "ไฝ ็š„ไปปๅŠกๆ่ฟฐ"

# ไบคไบ’ๅผๆจกๅผ
python run_agent.py --interactive

# ไฝฟ็”จ็œŸๅฎž AI๏ผˆ้œ€่ฆ้…็ฝฎ .env๏ผ‰
python run_agent.py "ไปปๅŠก" --real-llm

# ๅฟซ้€ŸๅฏๅŠจ่œๅ•
./start.sh

ๅผ€ๅ‘ๆŒ‡ๅ—

ไปฃ็ ่ดจ้‡ๆฃ€ๆŸฅ

# ไปฃ็ ๆฃ€ๆŸฅ
uv run ruff check src/

# ไปฃ็ ๆ ผๅผๅŒ–
uv run ruff format src/

# ็ฑปๅž‹ๆฃ€ๆŸฅ
uv run mypy src/

่ฟ่กŒๆต‹่ฏ•

# ่ฟ่กŒๆ‰€ๆœ‰ๆต‹่ฏ•
uv run pytest

# ๅธฆ่ฆ†็›–็އๆŠฅๅ‘Š
uv run pytest --cov=sdk --cov-report=html

# ่ฟ่กŒ็‰นๅฎšๆต‹่ฏ•
uv run pytest tests/test_agent.py

ๆทปๅŠ ่‡ชๅฎšไน‰ๅทฅๅ…ท

from sdk import BaseTool, ToolDefinition

class MyCustomTool(BaseTool):
    def get_definition(self) -> ToolDefinition:
        return ToolDefinition(
            name="my_tool",
            description="ๆˆ‘็š„่‡ชๅฎšไน‰ๅทฅๅ…ท",
            input_schema={
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "ๆŸฅ่ฏขๅ‚ๆ•ฐ"}
                },
                "required": ["query"]
            }
        )

    async def execute(self, args: dict) -> str:
        query = args["query"]
        # ๅฎž็Žฐๅทฅๅ…ท้€ป่พ‘
        return f"็ป“ๆžœ: {query}"

ๆžถๆž„่ฎพ่ฎก

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        Agent                             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚   Skills    โ”‚  โ”‚    Tools    โ”‚  โ”‚  Subagents  โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                    Agent Runtime                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚              ReAct Loop                         โ”‚   โ”‚
โ”‚  โ”‚  Thought โ†’ Action โ†’ Observation โ†’ Thought โ†’ ... โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                        LLM                               โ”‚
โ”‚                   (OpenAI / Compatible)                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

About

AI Flex - Flexible AI assistant for stock analysis and recommendations

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors