{"id":31799878,"url":"https://github.com/nntin/d-cogs","last_synced_at":"2026-05-17T19:05:55.070Z","repository":{"id":315789365,"uuid":"1060568134","full_name":"NNTin/d-cogs","owner":"NNTin","description":"Cogs for the Red-DiscordBot","archived":false,"fork":false,"pushed_at":"2026-05-09T17:46:10.000Z","size":1480,"stargazers_count":0,"open_issues_count":3,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-09T19:32:52.033Z","etag":null,"topics":["discord","red","red-discordbot"],"latest_commit_sha":null,"homepage":"http://nntin.xyz/d-cogs/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NNTin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-20T06:37:53.000Z","updated_at":"2026-05-09T17:45:55.000Z","dependencies_parsed_at":"2025-09-20T19:24:43.448Z","dependency_job_id":"c924f6e3-bd06-497e-81cc-5e23f4a3c3db","html_url":"https://github.com/NNTin/d-cogs","commit_stats":null,"previous_names":["nntin/d-cogs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NNTin/d-cogs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NNTin%2Fd-cogs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NNTin%2Fd-cogs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NNTin%2Fd-cogs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NNTin%2Fd-cogs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NNTin","download_url":"https://codeload.github.com/NNTin/d-cogs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NNTin%2Fd-cogs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33151625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["discord","red","red-discordbot"],"created_at":"2025-10-10T22:51:01.374Z","updated_at":"2026-05-17T19:05:55.064Z","avatar_url":"https://github.com/NNTin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AI automation cogs\n\n## Architecture\n\n### Shared interfaces via `cogchain`\n\nCross-cog contracts live in the `cogchain` package so features can evolve without tight coupling. Langcore, providers, stores, and extension cogs all import the same interfaces instead of reaching into each other. See `cogchain/README.md` for details.\n\n```mermaid\nflowchart LR\n    subgraph PyPI Package\n        CC[\"cogchain\\n(interfaces + models)\"]\n    end\n\n    subgraph Core Cog\n        LC[langcore]\n    end\n\n    subgraph Providers\n        OR[openrouter]\n        OL[ollama]\n    end\n\n    subgraph Stores\n        QD[qdrant]\n    end\n\n    subgraph Extensions\n        SP[spoilarr]\n        MM[mermaid]\n        EM[embed]\n    end\n\n    CC --\u003e LC\n    CC --\u003e OR\n    CC --\u003e OL\n    CC --\u003e QD\n    CC --\u003e SP\n    CC --\u003e MM\n    CC --\u003e EM\n```\n\n### LangCore Cog Architecture and ChainHub Integration\n```mermaid\ngraph TD\n    subgraph CogManager\n        LangCore\n        ProviderCog\n        StorageCog\n        ChainHubCogs\n    end\n\n    %% Core framework\n    subgraph LangCore[langcore: Cog]\n        ChainHubManager[ChainHubManager]\n        ConversationManager\n        ClassifierManager\n        ChainStore[ChainStore Abstraction]\n        ChainProvider[ChainProvider Abstraction]\n        MessageHandler[MessageHandler Abstraction]\n    end\n\n    subgraph ConversationManager[ConversationManager: main agent]\n        langchainModule[PyPI: langchain]\n        conversation[conversation.py]\n        CPCInstance[langcore.get_provider]\n    end\n\n    \n    subgraph ClassifierManager[ClassifierManager: background agent]\n        langchainModule3[PyPI: langchain]\n        classifier[classifier.py]\n        CPClInstance[langcore.get_provider]\n    end\n\n    %% ChainHub cogs\n    subgraph ChainHubCogs[ExtensionCogs for tools/functions]\n        subgraph SpoilarrCogSub[SpoilarrCog: spoilarr]\n            SpoilarrAgent[SpoilarrManager: sub agent]\n            Spoilarr[spoilarr]\n            CPSpInstance[langcore.get_provider]\n        end\n\n        \n        subgraph EmbedCogSub[EmbedCog: embed]\n            Embed[embed]\n            CPEmInstance[langcore.get_provider]\n        end\n\n        subgraph MemoryCogSub[MemoryCog: memory]\n            Memory[memory]\n            CPMInstance[langcore.get_provider]\n            CSMInstance[langcore.get_store]\n        end\n\n        subgraph MermaidCogSub[MermaidCog: mermaid]\n            MermaidAgent[MermaidManager: sub agent]\n            Mermaid[mermaid]\n            MermaidMessageHandler[MessageHandler: send image as sub agent]\n            CPMeInstance[langcore.get_provider]\n            CSMeInstance[langcore.get_store]\n        end\n\n        subgraph AiDefenderCogSub[AiDefenderCog: aidefender]\n            AiDefenderAgent[AiDefenderManager: background agent]\n            AIDefender[aidefender]\n            CPAIInstance[langcore.get_provider]\n            CSAIInstance[langcore.get_store]\n        end\n    end\n\n    %% Provider cog\n    subgraph ProviderCog[ollama: Cog]\n        Ollama[ollama]\n        backendOllama[localhost:11434]\n        ollamaModule[PyPI: langchain-ollama]\n    end\n\n    %% Storage cog\n    subgraph StorageCog[qdrant: Cog]\n        QDrant[qdrant]\n        backendQdrant[localhost:6333]\n        qdrantModule[PyPI: langchain-qdrant]\n        ragPipeline[RAG pipeline, formerely inside ragutils cog]\n    end\n\n    %% Connections\n    LangCore --\u003e|implements abstraction| ChainStore\n    LangCore --\u003e|implements abstraction| ChainProvider\n    LangCore --\u003e|implements abstraction| MessageHandler\n    ChainProvider --\u003e|1:n implemented by| ProviderCog\n    ChainStore --\u003e|0:1 implemented by| StorageCog\n\n    subgraph ChainHubManager\n        hub.py\n        langchainModule2[PyPI: langchain]\n    end\n\n    ChainHubManager --\u003e|for each langcore-compatible cog registers functions| ChainHubCogs\n    ChainHubManager \u003c--\u003e|langchain linked| ConversationManager\n    ConversationManager \u003c--\u003e|When enabled Classifier Agent controls Conversation Agent engagement| ClassifierManager\n    \n    %% Define styles\n    classDef PyPI fill:#FFE08A,stroke:#B45309,stroke-width:2px,color:#1F2937;\n    classDef chainStore fill:#B7F7D8,stroke:#047857,stroke-width:2.5px,color:#064E3B;\n    classDef chainProvider fill:#C7D2FE,stroke:#3730A3,stroke-width:2.5px,color:#1E1B4B;\n    classDef agent fill:#FED7AA,stroke:#C2410C,stroke-width:4px,color:#431407;\n    classDef messageHandler fill:#FEE2E2,stroke:#F87171,stroke-width:2px,color:#7F1D1D;\n\n    %% Apply styles\n    class langchainModule,langchainModule2,langchainModule3,ollamaModule,qdrantModule PyPI;\n    class ChainStore,CSMInstance,CSAIInstance,CSMeInstance chainStore;\n    class ChainProvider,CPMeInstance,CPCInstance,CPEmInstance,CPClInstance,CPAIInstance,CPSpInstance chainProvider;\n    class ConversationManager,ClassifierManager,MermaidAgent,AiDefenderAgent,SpoilarrAgent agent;\n    class MessageHandler,MermaidMessageHandler messageHandler;\n```\n\nNote: ConversationManager is growing in complexity. In future worth abstracting it so the ConversationManager can be overwritten by other cogs. Same goes for ClassifierManager.\n\n*Managers are agents and don't share the same context.  \n\nDiscord Users are talking with the main agent -\u003e Conversation Manager. Conversations are are not shared between Discord Users and are unique to the Discord User.  \nA background agent, the ClassifierManager, decides if the Conversation Manager should engage in the conversation. This agent is disabled by default.  \nYou can also define your own background agents in order to e.g. spot abusive behavior through AI -\u003e AI Defender Manager.  \nCogs may also define sub agents. They only become active through other agents. For example a Mermaid image should be created but there is a syntax error. The agent will fix the syntax error.\n\n### LangChain PyPI Package Interaction and Extension Model\n```mermaid\ngraph TD\n    %% PyPI package interaction graph\n\n    subgraph LangChainCore[PyPI: langchain]\n        LCChains[Chains]\n        LCLLM[LLM Abstractions / ChainProvider]\n        LCEmbeddings[Embeddings]\n        LCVectorStores[VectorStore Interface / ChainStore]\n    end\n\n    subgraph OllamaPkg[PyPI: langchain-ollama]\n        OllamaLLM[Ollama LLM Wrapper]\n        OllamaEmb[Ollama Embeddings]\n    end\n\n    subgraph QdrantPkg[PyPI: langchain-qdrant]\n        QdrantVS[Qdrant VectorStore]\n        QdrantClient[qdrant-client]\n    end\n\n    %% Relationships\n    OllamaPkg --\u003e|extends| LangChainCore\n    QdrantPkg --\u003e|extends| LangChainCore\n\n    OllamaLLM --\u003e|implements| LCLLM\n    OllamaEmb --\u003e|implements| LCEmbeddings\n\n    QdrantVS --\u003e|implements| LCVectorStores\n    QdrantVS --\u003e|uses| QdrantClient\n\n    %% Typical runtime flow\n    LCChains --\u003e|calls| LCLLM\n    LCChains --\u003e|stores/retrieves| LCVectorStores\n\n    %% Styling\n    classDef pypi fill:#ffedb3,stroke:#c88a12,stroke-width:2px,color:#000;\n    class LangChainCore,OllamaPkg,QdrantPkg pypi;\n```\n\n### Tool and Function Registration Lifecycle in LangCore\n```mermaid\ngraph TD\n    %% Function / Tool Registration Lifecycle\n\n    subgraph AppRuntime[Application Runtime]\n        CHM[ChainHubManager]\n        CM[ConversationManager]\n    end\n\n    subgraph LangChainCore[PyPI: langchain]\n        ToolReg[Tool / Runnable Registry]\n        ChainExec[Chain Execution Engine]\n        ToolSchema[Tool Schemas \u0026 Signatures]\n    end\n\n    subgraph OllamaPkg[PyPI: langchain-ollama]\n        OllamaLLM[LLM + Tool Calling Support]\n    end\n\n    subgraph QdrantPkg[PyPI: langchain-qdrant]\n        QdrantVS[VectorStore Tools]\n    end\n\n    subgraph ExtensionCogs[LangCore-compatible Cogs]\n        RagCog[RagCog]\n        MemoryCog[MemoryCog]\n        MermaidCog[MermaidCog]\n    end\n\n    %% Registration flow\n    CHM --\u003e|discovers \u0026 loads| ExtensionCogs\n    ExtensionCogs --\u003e|expose callable functions| CHM\n\n    CHM --\u003e|registers tools| ToolReg\n    ToolReg --\u003e|stores schema| ToolSchema\n\n    %% Provider \u0026 model side\n    OllamaLLM --\u003e|requests tool schemas| ToolSchema\n    CM --\u003e|binds tools to model| OllamaLLM\n\n    %% Runtime execution\n    ChainExec --\u003e|LLM selects tool| ToolReg\n    ToolReg --\u003e|dispatches call| ExtensionCogs\n    ExtensionCogs --\u003e|returns result| ChainExec\n\n    %% Unregistration flow\n    CHM -.-\u003e|unload / disable cog| ExtensionCogs\n    CHM -.-\u003e|unregister tools| ToolReg\n    ToolReg -.-\u003e|remove schemas| ToolSchema\n\n    %% Styling\n    classDef pypi fill:#ffedb3,stroke:#c88a12,stroke-width:2px,color:#000;\n    class LangChainCore,OllamaPkg,QdrantPkg pypi;\n```\n\n## Red-DiscordBot Cogs Overview\n\n### 1. langcore (Cog)\n`langcore` is the **core framework cog** for the bot, built on top of the LangChain framework. It provides the foundational abstractions for AI agent orchestration:  \n\n- **ChainProvider Abstraction**: Defines a standard interface for LLM providers.  \n- **ChainStore Abstraction**: Defines a standard interface for vector storage and retrieval.  \n- **ChainHub**: A registry for functions and tools that AI agents can access.  \n\nAll other cogs connect to `langcore` either by implementing its abstractions or registering functionality via ChainHub.\n\nIn future `langcore.get_provider()` may be interesting when some LLM providers are unreliable -\u003e return fallback providers.  \nOr when you want to do load balancing accross your LLM providers.  \n\nFor BYOK users the ChainProvider implementation is easy, a simple endpoint with API key.  \nFor self-host hardware users you may want to define multiple endpoints.  \nOr even combine both setup.\n\n---\n\n### 2. ollama (Cog)\n\n`ollama` is the **ChainProvider implementation cog**.  \n\n- Acts as the LLM backend for AI agents.  \n- Implements the `ChainProvider` abstraction from `langcore`, enabling agents to query large language models.  \n- Connects to an LLM service, e.g., `localhost:11434`.\n\nThis cog allows agents to generate natural language responses and perform model-based reasoning.\n\n---\n\n### 3. qdrant (Cog)\n`qdrant` is the **vector storage cog** and implements the `ChainStore` abstraction from `langcore`.  \n\n- Provides persistent vector storage for embeddings.  \n- Connects to a Qdrant service, e.g., `localhost:6333`.  \n\nThis cog serves as the AI agents’ long-term memory backend.\n\nAdd RAG pipeline. Fomerely implemented as a cog ragutils for assistant cog. This will move directly into qdrant to be a part of it.\n\n---\n\n## Credits\n\nThis repository mirrors a cog that were authored elsewhere. **Please install directly from the source repository instead of from this mirror**.\n\n- `hotreload` — sourced from [`cswimr/SeaCogs`](https://c.csw.im/cswimr/SeaCogs) (branch `main`). \n\nThe copy is synced for convenience and is not my creation.\n\n- `assistant` — was sourced from [`vertyco/vrt-cogs`](https://github.com/vertyco/vrt-cogs) (branch `main`). \n\nUsed to be mirrored but is replaced by the cogs `langcore`, `ollama`, `openrouter` and `qdrant` + the python module `cogchain` + various extension cogs like `mermaid` and `spoilarr`. Inspiration has been drawn from `assistant` but I was too restricted so I had to re-invent the wheel.\n\n- `modreload` — a copy of `hotreload`, `mod` stands for python module. Instead of reloading a cog, it'll perform a pip install. Used for the development of the `cogchain` python module. Created with 1 prompt, see implementation plan (`modreload/IMPLEMENTATION_PLAN.md`).\n\nHuge thanks to [cswimr](https://c.csw.im/cswimr) and [vertyco](https://github.com/vertyco).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnntin%2Fd-cogs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnntin%2Fd-cogs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnntin%2Fd-cogs/lists"}